如何在Linux上的目录中查找所有硬链接

时间:2020-01-09 14:17:08  来源:igfitidea点击:

如何在目录中找到与某个文件有关的所有硬链接。
如何在/backups /目录中查找到/etc/passwd的所有其他硬链接?
如何使用Linux或Unix命令行选项查找到给定文件的所有硬链接?
您可以在Linux,Apple MacOS,FreeBSD和其他操作系统上使用find命令来查找所有硬链接。

如何查找到给定文件的所有硬链接

硬链接不过是物理数据的特定位置。
您可以提供引用同一文件的各种名称。
文件与名称引用相同的inode。
可以如下创建指向foo文件的硬链接:

$ ln foo bar
$ ln foo dir2/foobar

在上面的示例中,bar和foobar成为foo文件的另一个名称。
在当前目录中查找foo文件的所有硬链接的语法如下:

find /dir/to/search/ -samefile /path/to/file/name
## To find out all hard links to foo, use this command:
find / -samefile foo
find / -xdev -samefile foo

例子

如果文件名为/etc/passswd,并且您需要获取/backups /目录下存在的所有硬链接,请运行:

$ find /backups/ -samefile /etc/passwd

输出示例:

/backups/hourly.0/etc/passwd
/backups/hourly.4/etc/passwd
/backups/hourly.3/etc/passwd
/backups/daily.0/etc/passwd
/backups/hourly.1/etc/passwd
/backups/hourly.2/etc/passwd

如果您不想降级其他文件系统上的目录(例如已挂载一次),请尝试:

$ find /backups/ -xdev -samefile /etc/passwd

在/tmp /目录中查找并删除指向foo文件的所有硬链接

执行以下命令:

$ find /tmp/ -xdev -samefile foo -print0 | xargs -I {} -0 rm -v {}

输出示例:

removed ?/tmp/dir2/foobar?
removed ?/tmp/foo?
removed ?/tmp/bar?

帮助,-samefile选项由我的find命令执行

查找找到文件的索引节点编号,执行:

$ ls -li fileNameHere
$ ls -li /tmp/demo.txt

输出示例:

4065089 -rw-r--r-- 3 Hyman Hyman 8 Feb 26 02:19 /tmp/demo.txt

上面输出的第一列显示文件inode4065089。
现在,备用语法如下,以使用inode 4065089查找名为/tmp/demo.txt的文件的所有硬链接:

$ find /tmp/ -inum 4065089
$ find /tmp/ -xdev -inum 4065089

输出示例:

/tmp/demo.txt
/tmp/dir2/file2.txt
/tmp/file1.txt

要查找和删除索引号为4065089的文件的所有硬链接,请运行:

$ find /tmp/ -xdev -inum 4065089 | xargs rm -v
$ find /tmp/ -xdev -inum 4065089 -print0 | xargs -I {} -0 rm -v {}

如何查找到给定文件名的所有硬链接