识别文件共享磁盘空间依赖于利用的事实,文件共享相同的inode - 数据结构存储所有关于除了它的名称和内容的文件的信息。如果两个或多个文件有不同的名称和文件系统位置,但共享一个inode,他们也共享内容,所有权,许可等。
这些文件通常被称为“硬链接” - 不像符号链接,简单地通过包含他们的名字指向其他文件。符号链接很容易被“L”中的第一位置,以挑选出在一个文件中上市- >符号是指文件被引用。
$ LS -l我* -rw-R - R-- 4个SHS SHS 228 4月12日19时37分MYFILE lrwxrwxrwx 1个SHS SHS 15年4月6日11:18 myref - > MYFILE -rw-R - R-- 4个SHSSHS 228 4月12日19时37 mytwin
在一个目录中识别硬链接就没有那么明显,但它仍然是很容易的。如果您在使用列表中的文件LS -i命令和排序他们通过索引节点号,你可以很容易挑选出的硬链接。在这种类型的LS的输出,所述第一列显示了inode编号。
$ LS -i |排序-n |更多... 788000 MYFILE <== 788000 mytwin <== 801865 Name_Labels.pdf 786692足不出户生气920242个NFCU_Docs 800247 NMAP,笔记
扫描你的输出寻找相同的inode编号和任何比赛会告诉你想知道的。
如果,另一方面,你只是想知道,如果一个特定的文件是硬链接到另一个文件中,还有比通过什么可能是数百个文件的列表扫描更简单的方法。find命令是-samefile选项将做的工作适合你。
$发现。-samefile MYFILE ./myfile ./save/mycopy ./mytwin
请注意,提供给find命令的起始位置将确定有多少文件系统进行扫描以匹配。在上面的例子中,我们期待在当前目录和子目录。
添加使用find输出细节-ls选择可能是更有说服力:
$发现。-samefile MYFILE -ls 788000 4 -rw-R - R-- 4个SHS SHS 228 4月12日19时37分./myfile 788000 4 -rw-R - R-- 4个SHS SHS 228 4月12日19时37 ./保存/ mycopy 788000 4 -rw-R - R-- 4个SHS SHS 228 4月12日19时37分./mytwin
第一列显示的inode编号。然后,我们看到文件的权限,链接,老板,文件大小,日期信息,并指向同一个光盘内容的文件的名称。注意,在这种情况下,链接字段是“4”,而不是“3”,我们所预料的,告诉我们有另一个连结此相同的inode以及(但我们的搜索范围之外)。
如果你想寻找在一个单一的目录硬链接任何情况下,你可以尝试这样的脚本,将创建重复你的清单,看看:
#!/斌/庆典#seaches用于文件共享的inode分组= “” #列表文件的inode通过LS -i |排序-n>的/ tmp / $ 0#搜索通过文件重复的inode#分别同时读取行做的inode =`回声$线|AWK '{打印$ 1}'`如果[ “$ i节点” == “$分组”];然后grep的$索引节点的/ tmp / $ 0音响先前= $ inode运行 TMP / $ 0#清理RM / TMP / $ 0
$ ./findHardLinks 788000 MYFILE 788000 mytwin
您还可以使用find命令通过inode编号查找文件,在该命令。然而,这种搜索可能不止一个文件系统,所以很可能你会得到错误的结果,因为相同的inode编号可能在另一个文件系统,它并不代表同一个文件中。如果是这样的话,其他的文件细节也不会完全相同。
$查找/ -inum 788000 -ls 2>的/ dev / null的788000 4 -rw-R - R-- 4个SHS SHS 228 4月12日19时37分/ TMP / mycopy 788000 4 -rw-R - R-- 4SHS SHS 228 4月12日19时37分/家/ SHS / MYFILE 788000 4 -rw-R - R-- 4个SHS SHS 228 4月12日19时37分/家/ SHS /保存/ mycopy 788000 4 -rw-R--R-- 4个SHS SHS 228 4月12日19时37分/家/ SHS / mytwin
请注意,错误输出被分流掉到/ dev / null的,使我们没有看所有的“权限被拒绝”否则将被显示为其他目录,我们不可以通过看错误。
此外,在扫描包含相同的内容,但不共享索引节点(即简单的文件副本)文件将需要相当多的时间和精力。