Documents 文件夹有 7 个硬链接

Documents 文件夹有 7 个硬链接

当尝试命令时

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

发现Documents目录有7个硬链接,这么冗余的原因是什么?

答案1

如果目录Documents有七个硬链接,则意味着:

  • 一个硬链接来自Documents其父目录中的名称。

  • 一个硬链接来自条目.本身Documents

  • 五个硬链接来自..五个子目录中的条目。

答案2

输出中的第 2 列ls -l显示硬链接的数量(?)

文件夹别名目录不能硬链接(但它们可以通过符号链接进行链接)。与文件硬链接数位于同一位置的数字表示其他含义,与文件夹在文件系统的“表”中需要多少空间有关,因为该数字会随着子文件夹数的增加而增加。

硬链接意味着某个 inode 处的数据由多个文件名指向(因此硬链接的名称共享相同的 inode 编号)。

Sergiy Kolodyazhnyy 在此链接以及他的以下评论,

文件夹别名目录不能由用户硬链接,因为这会给文件系统带来问题。文件系统本身允许以非常受控的方式进行硬链接,即 .. 和 . 特殊条目。但是,在大多数情况下,大小显示为 4096 字节(请参阅 这篇相关文章),但如果我没记错的话,包含大量条目的目录可能会超过该数字。这可能值得添加到答案中

ls -l 输出中的第 5 列显示文件大小(?)

但是文件夹呢——大多数文件夹占用 4 kiB,但是当有许多文件(和子文件夹)时,名称无法挤进 4kiB,因此将分配更多空间,8 kiB、12 kiB 等。我最糟糕的情况是 Firefox 缓存文件夹,其“大小”为 4012 kiB。它包含 58971 个文件,这些文件占用 2.2 GiB。这提醒我是时候清除 Firefox 缓存了 ;-)


您可以检查您的 Documents 文件夹的 inode 编号是唯一的,没有其他文件或文件夹共享它。您也可以检查其他文件夹。

尝试以下命令(如果您使用的是其他语言(非英语),可能需要进行修改)。

  • 识别 inode 编号(您将获得与我不同的编号)

    $ls -lid ~/Documents/
    3017032 drwxr-xr-x 2 sudodus sudodus 4096 feb 28  2016 /home/sudodus/Documents/
    
  • 搜索具有该 inode 编号的文件/文件夹(并尽量避免过多的警告/错误输出)

    $ 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
    

    或者

    $ 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
    

以下示例显示了相应的情况三个硬链接文件名

  • 识别 inode 编号

    $ ls -il owned\ by\ root
    56492055 -rw-r--r-- 3 root root 1048576 jan 16 23:41 'owned by root'
    
  • 在文件系统内搜索(在本例中是我的data分区)

    $ 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
    

相关内容