找出硬链接原始文件的路径

时间:2016-01-30 13:08:54

标签: linux sh

现在,我觉得有些人会认为没有硬链接的原始文件,但我强烈不同意,因为我做了以下实验。

让我们创建一个内容为pwd的文件,并建立一个指向子文件夹的硬链接:

echo "pwd" > original
mkdir subfolder
cp -l original subfolder/hardlink

现在让我们看看如果我用shell运行文件会输出什么:

sh original
sh subfolder/hardlink

即使文件hardlink在子文件夹中,输出也是一样的!

对不起,对于长篇介绍,我想确保没有人说我的下一个问题是无关紧要的。

所以现在我的问题是:如果原始文件的内容不方便pwd,如何从硬链接文件中找到原始文件的路径?

我知道linux程序似乎以某种方式知道路径,但不知道文件名,因为某些程序返回了找不到<path to original file>/hardlinkname的错误消息。但他们是如何做到的?

提前感谢您的回答!

编辑:顺便说一下,我通过命名与原始文件相同的硬链接来修复上面提到的错误消息。

4 个答案:

答案 0 :(得分:3)

  

但是他们是怎么做到的?

通过查找相同的inode值。以下是列出具有相同inode的文件的一种方法:

find /home -xdev -samefile original

将/ home替换为find的任何其他起始目录以开始搜索。

  

如何从硬链接文件中找到原始文件的路径?

对于硬链接,没有多个文件,只有一个文件(inode)有多个(文件)名称。

附录:

  

除了搜索文件夹之外,没有其他方法可以找到inode的硬链接吗?

lnlsfindstat是发现和查询inode文件系统的常用方法。然后,根据您要完成的下一步,许多文件,目录,存档和搜索命令都会识别inode值。有些可能需要特殊的-inum--follow或等效选项来指定inode。

我上面给出的查找示例只是一个这样的用法。另一种方法是与xargs结合使用以对所有找到的文件进行操作。这是删除所有内容的一种方法:

find /home -xdev -samefile original | xargs rm

在--help下查找其他标准的os命令。大多数Linux发行版还附带了解释inode的帮助文件以及哪些工具可以使用inode。

答案 1 :(得分:0)

pwdpresent working directory,所以当然输出应该相同,因为你没有cd进入你的子文件夹。

很抱歉,但没有&#34;原来&#34;文件,如果您创建其他硬链接。如果您想获取文件的其他硬链接,请查看How to find all hard links to a given file?例如。

答案 2 :(得分:0)

同意@Emacs用户。你的pwd例子无关紧要,让你很困惑。

硬链接没有原始文件的概念。文件名仅作为i-node所指向的磁盘上内容的引用计数(请参阅'ls -li original subfolder/hardlink')。因此,即使您删除原始文件,硬链接仍然指向相同的内容。

答案 3 :(得分:-1)

不可能找到所有硬链接被视为指向一个inode的相同方式。