我有一个很大的目录结构,其中有许多来自第一个硬链接的硬链接,该硬链接位于不同的目录结构中。例如dir1
具有以下结构:
[dir1]$ tree
.
├── dir_inside
│ ├── file1
│ └── file2
└── other_dir
├── file1
└── file2
现在假设dir2
存在于外部并且egdir1
中的所有文件都是主要存在于ie 文件中的文件的硬链接,这些文件在创建之前已存在。dir1
file1
file2
dir2
dir2
dir1
在计算 的大小时,dir1
我会使用该命令,du -sh dir1
因为du
只会对硬链接进行一次计数。好的,到目前为止一切顺利,但是仅计数一次,这意味着我实际上不是从位于 . 中的第一个硬链接开始计数dir2
。所以我们可以说du -sh dir2
是2G
尺寸。大小dir1
也会受到2G
影响,因为硬链接在该目录结构中将被计算一次。就我对硬链接的了解而言,我相信硬链接实际上并不具有与第一个inode
创建的文件大小相同的文件大小,对吗?我真的很高兴获得一些有关获取位于不同目录中的硬链接文件的目录大小的澄清,从而估计硬链接占用的实际磁盘空间。
答案1
我认为您误解了硬链接的概念。
file[name] 是指向 inode 的指针,硬链接完全相同。没有对原始文件的引用。
du
无法知道一个文件是否是作为另一个文件的硬链接创建的。du
仅当单个du
调用中出现多个指向 inode 的指针时才能进行过滤:
du -sh dir1 dir2
答案2
您对硬链接有一些误解。
首先要注意的是,不存在这样的事情,或者每个文件[名称]都是硬链接。
是的,这是正确的,硬链接没有特殊的结构。那么它们是什么。
每个文件都有一个索引节点。索引节点指向内容和元数据:文件模式、大小、日期等。
然后是文件名。每个文件名都指向一个 inode。每个索引节点可以有零到多个文件名指向它。 (每个索引节点可以有零到多个打开的文件描述符(由进程拥有)指向它)。如果有零个文件名和零个文件描述符指向一个索引节点,那么它就会被垃圾收集。
没有记录这些文件名、文件描述符的创建顺序。因此,不能说这个是硬链接,这个是原创的。这种区别仅存在于创建时。之后就没有区别了。