6

When tried the command

me@me:~$ ls -hl | head -5                                                                 
total 60M
-rw-r--r-- 1 me me  250 Jan 16 11:43 $tty
-rw-r--r-- 1 me me    0 Jan 16 11:41 1
drwxr-xr-x 2 me me 4.0K Jan 16 15:28 Desktop
drwxr-xr-x 7 me me 4.0K Jan 13 14:33 Documents

Found that Documents directory has 7 hard links, what's the reason for such a redundancy?

  • What are the content of Document directory ? – Soren A Jan 17 at 11:57
  • 1
    One from ., one from its name in the parent directory, and five from the .. in five subdirectories? – AlexP Jan 17 at 12:07
  • smart, could you please transmit the comment to answer. @AlexP – Alice Jan 17 at 12:51
  • All right, done. – AlexP Jan 17 at 13:29
  • 2
    AlexP's answer is spot on. Also you might be interested in this post, specifically this part (and example after it):"Thus, for a directory link the inode count is minimum 2 for a bare directory (link to parent .. and link to self .), and each additional subdirectory is an extra link/node:" – Sergiy Kolodyazhnyy Jan 17 at 15:37
11

If the directory Documents has seven hard links, this means that:

  • One hard link is from the name Documents in its parent directory.

  • One hard link is from the entry . in Documents itself.

  • Five hard links are from the entries .. in five subdirectories.

3

Column #2 in the output of ls -l shows the number of hard links(?)

Folders alias directories cannot be hard-linked (but they can be linked to with symbolic links). The number in the same place as number of hard links for files means something else, related to how much space the folder needs in the file system's 'table', because the number grows with the number of sub-folders.

Hard links means that the data at a certain inode are pointed to by more than one file name (so the hard-linked names share the same inode number).

There is a detailed explanation by Sergiy Kolodyazhnyy at this link and this comment by him,

Folders alias directories cannot be hard-linked by the users, since it would create issues with filesystem. Filesystem itself does allow hard-links in a very controlled manner, which is .. and . special entries. Size, however, is shown in most cases to be 4096 bytes (see this related post), but if I am not mistaken, directory with large number of entries can go over that number. This may be worth adding to the answer

Column #5 in the output of ls -l shows the file size(?)

But what about folders -- most folders occupy 4 kiB, but when there are many files (and sub-folders) the names cannot get squeezed into 4kiB and more space will be allocated, 8 kiB, 12 kiB etc. My 'worst' case is a Firefox cache folder with the 'size' 4012 kiB. It contains 58971 files, and these files occupy 2.2 GiB. This reminds me that it is getting time the clear the Firefox cache ;-)


You can check that your Documents folder's inode number is unique, no other file or folder shares it. You can check other folders too.

Try the following commands (maybe modified, if you have another language (than English).

  • Identify the inode number (you will get another number than I)

    $ls -lid ~/Documents/
    3017032 drwxr-xr-x 2 sudodus sudodus 4096 feb 28  2016 /home/sudodus/Documents/
    
  • Search for files/folders with that inode number (and try to avoid too many warning/error outputs)

    $ sudo find / -path /proc -prune -o -ls | grep ' 3017032 '
    [sudo] password for sudodus: 
      3017032  4 drwxr-xr-x 2 sudodus  sudodus  4096 feb 28  2016 /home/sudodus/Documents
    find: ‘/run/user/1000/gvfs’: Permission denied
    

    or

    $ sudo find / -inum 3017032  -ls
      3017032  4 drwxr-xr-x  2 sudodus  sudodus  4096 feb 28 2016 /home/sudodus/Documents
    find: '/proc/1643/task/1643/net': Invalid argument
    find: '/proc/1643/net': Invalid argument
    find: '/proc/1741/task/1741/net': Invalid argument
    find: '/proc/1741/net': Invalid argument
    find: '/proc/4021': No such file or directory
    find: '/proc/4038': No such file or directory
    find: '/proc/4039': No such file or directory
    find: '/run/user/1000/gvfs': Permission denied
    

The following example shows the corresponding case with three hard-linked file names.

  • Identify the inode number

    $ ls -il owned\ by\ root
    56492055 -rw-r--r-- 3 root root 1048576 jan 16 23:41 'owned by root'
    
  • Search within the file system (in this case my data partition)

    $ sudo find /media/multimed-2/ -inum 56492055
    [sudo] password for sudodus: 
    /media/multimed-2/test/test0/owned by root hard-linked
    /media/multimed-2/test/test0/owned by root
    /media/multimed-2/test/test0/sub/owned by root
    
  • 1
    Directories cannot be hard-linked by the users, since it would create issues with filesystem. Filesystem itself does allow hard-links in a very controlled manner, which is .. and . special entries. Size, however, is shown in most cases to be 4096 bytes ( see related post ), but if I am not mistaken, directory with large number of entries can go over that number. This may be worth adding to the answer – Sergiy Kolodyazhnyy Jan 17 at 15:50
  • Thanks, @SergiyKolodyazhnyy :-) – sudodus Jan 17 at 15:58
  • Always glad to help :) – Sergiy Kolodyazhnyy Jan 17 at 16:00
  • 1
    Anecdote: on some machines we have a directory that (sometimes) stores many files, often 300,000 or thereabouts, but they also get deleted after a while. Think of some kind of spool directory. ls -l for that directory shows ~650 links and a size (5th column) of almost 100 MB. It holds 5 GB of data and ~19,000 files. I assume the value in this 5th column never shrinks but only grows. The only way to shrink that size is to copy the contents to a tmp directory and then replace the directories. – PerlDuck Jan 17 at 19:31
  • 2
    @PerlDuck You got me curious about it, so unix.stackexchange.com/q/495176/85039 – Sergiy Kolodyazhnyy Jan 17 at 22:11

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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