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?

Alice
  • 1,710

2 Answers2

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.

AlexP
  • 10,197
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
    
sudodus
  • 46,324
  • 5
  • 88
  • 152
  • 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 '19 at 15:50
  • Always glad to help :) – Sergiy Kolodyazhnyy Jan 17 '19 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 '19 at 19:31
  • @PerlDuck, Interesting that they never shrink :-) I will keep my eyes open for this. Another (minor?) reason for fresh install instead of upgrade to the next version. – sudodus Jan 17 '19 at 19:41
  • 2
    @PerlDuck You got me curious about it, so https://unix.stackexchange.com/q/495176/85039 – Sergiy Kolodyazhnyy Jan 17 '19 at 22:11