When I do an ls in the /proc/PID directory a number of @ symbols show up next to the file names. Normally I would consider this to mean extended attributes but when I do the long form of ls they do not show up in the place I would expect and the output looks different than usual. I tried googling but only found the extended attributes description. What is going on?

root@hashcat:/proc/29286/ns# l
ipc@  mnt@  net@  pid@  user@  uts@
root@hashcat:/proc/29286/ns# ls -l
total 0
lrwxrwxrwx 1 dylan dylan 0 Mar 21 21:09 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 dylan dylan 0 Mar 21 21:09 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 dylan dylan 0 Mar 21 21:09 net -> net:[4026531956]
lrwxrwxrwx 1 dylan dylan 0 Mar 21 21:09 pid -> pid:[4026531836]
lrwxrwxrwx 1 dylan dylan 0 Mar 21 21:09 user -> user:[4026531837]
lrwxrwxrwx 1 dylan dylan 0 Mar 21 21:09 uts -> uts:[4026531838]
  • 1
    You don't do an ls but an l which is likely an alias of ls -F. – jlliagre Mar 22 '15 at 3:44
  • 1
    So it indicated that it is a symbolic link and ls -l is showing what the links are pointing to. Thanks – Dylan Mar 22 '15 at 3:45
  • 2
    I really hope you "tried googling" as "tired goggling" seldom makes you see anything new. – Anthon Mar 22 '15 at 10:19
  • Apparently I WAS tired googling! – Dylan Mar 22 '15 at 17:47

Per default ls does not print those classifiers. Most probably you are using an alias referring to ls -F. (You can use type ls or type l to check.)

The -F option is documented in info ls:

     Append a character to each file name indicating the file type.
     Also, for regular files that are executable, append ‘*’.  The file
     type indicators are ‘/’ for directories, ‘@’ for symbolic links,
     ‘|’ for FIFOs, ‘=’ for sockets, ‘>’ for doors, and nothing for
     regular files.  Do not follow symbolic links listed on the command
     line unless the ‘--dereference-command-line’ (‘-H’),
     ‘--dereference’ (‘-L’), or
     ‘--dereference-command-line-symlink-to-dir’ options are specified.

Therefore the entries with a @ are symlinks. Actually a symlink stores only an arbitrary string, that usually is the name of another file, but in your case the kernel just inserts a description containing an internal id.

| improve this answer | |
  • Great thanks! I should have looked into what l was an alias for and go from there. I get so dumb sometimes, sometimes by brain just won't work through something... Prob doesn't help I have been at it all day. Thank you again! – Dylan Mar 22 '15 at 3:46
  • and what does the * symbol mean in the same context? – Aditya Mittal Jan 15 '18 at 7:14
  • See the quoted documentation above: executable – michas Jan 15 '18 at 7:17
  • Good Explain ... – Reza Harasani Sep 21 '18 at 12:44

Not the answer you're looking for? Browse other questions tagged or ask your own question.