osx - What does the @ mean on the output of "ls" on OS X' terminal?
2014-04
When doing an ls
in a directory I get the following output:
drwxr-xr-x@ 12 xonic staff 408 22 Jun 19:00 .
drwxr-xr-x 9 xonic staff 306 22 Jun 19:42 ..
-rwxrwxrwx@ 1 xonic staff 6148 25 Mai 23:04 .DS_Store
-rw-r--r--@ 1 xonic staff 17284 22 Jun 00:20 filmStrip.cpp
-rw-r--r--@ 1 xonic staff 3843 21 Jun 21:20 filmStrip.h
I was wondering what the @
means.
It indicates that the file has extended attributes. Use ls -l@
to see them.
You can use xattr
to edit these attributes. xattr -h
will give you the inline help for it.
Off the top of my head, I think is has something to do with the file having extended attributes available. Here's a link to a similar discussion:
http://discussions.apple.com/thread.jspa?messageID=5791060
So if you see a file with an "@" when you do an ls, try doing this:
xattr -l <filename>
That should show you the extended attributes.
You can check xattr's help for more details:
xattr --help
usage: xattr [-l] file [file ...]
xattr -p [-l] attr_name file [file ...]
xattr -w attr_name attr_value file [file ...]
xattr -d attr_name file [file ...]
The first form lists the names of all xattrs on the given file(s).
The second form (-p) prints the value of the xattr attr_name.
The third form (-w) sets the value of the xattr attr_name to attr_value.
The fourth form (-d) deletes the xattr attr_name.
options:
-h: print this help
-l: print long format (attr_name: attr_value)
It seems like if you look at the extra attributes with "-l" and then remove them with "-d" it'll probably do what you want. Practice this in a temporary directory somewhere first though and make sure it works ;)
From the ls(1) man page on Mac OS 10.6.1:
If the file or directory has extended attributes, the permissions field printed by the -l option is followed by a '@' character. Otherwise, if the file or directory has extended security information (such as an access control list), the permissions field printed by the -l option is followed by a '+' character.
From the available options list:
-@ Display extended attribute keys and sizes in long (-l) output.
-e Print the Access Control List (ACL) associated with the file, if present, in long (-l) output.
These will let you see the value of those extended options. FWIW, ACL info can be set using the same chmod(1) utility you are probably already aware of. :-)
There doesn't appear to be an easy way from the command line to do anything with extended attributes.
From the man page for ls:
If the -l option is given, the following information is displayed for each file: file mode, number of links, owner name, group name, number of bytes in the file, abbreviated month, day-of-month file was last modified, hour file last modified, minute file last modified, and the pathname.
In addition, for each directory whose contents are displayed, the total number of 512-byte blocks used by the files in the directory is displayed on a line by itself, immediately before the information for the files in the directory.
If the file or directory has extended attributes, the permissions field printed by the -l option is followed by a '@' character. Otherwise, if the file or directory has extended security information (such as an access control list), the permissions field printed by the -l option is fol-lowed followed lowed by a '+' character.
Use:
ls -la@e
for more information on files or directories with those attributes/information.
The "@" means that the file has "extended attributes" associated with it.
If you do "ls -@ -l
", you can see what attributes there are for each file. You can also do something like "xattr -l pgsql.so
" to dump the attributes for a particular file.
Typically they're stuff like old-school FinderInfo, text encoding info, or the "quarantine" info that gives you the "This file was downloaded from the web, are you sure you want to open it?" warning.
This is related to extended attributes and access control.
From the man page of sun ls:
The character after permissions is an ACL or extended attributes indicator. This character is an @ if extended attributes are associated with the file and the -@ option is in effect. Otherwise, this character is a plus sign (+) character if a non-trivial ACL is associated with the file or a space character if not.
From the man page of ls
:
The Long Format
[…] If the file or directory has extended attributes, the permissions field printed by the-l
option is followed by a '@
' character. […]
Possible Duplicate:
what does the @ mean on the output of ls on os x terminal?
when I type ls -la
I get this familiar output...
drwxr-xr-x+ 38 kent staff 1292 Nov 6 11:09 .
drwxr-xr-x 5 root admin 170 Aug 14 14:11 ..
-rw-r--r--@ 1 kent staff 16 Jun 18 14:13 .AB64CF89
-rw------- 1 kent staff 3 May 5 2009 .CFUserTextEncoding
-rw-r--r--@ 1 kent staff 15364 Nov 6 11:11 .DS_Store
my question is about the file settings on the far left eg:
drwxr-xr-x+
I know that the first char 'd' means directory.
and the next 9 chars I understand as well (permissions)
but what is the final char in this field? (empty or +
or @
)