现在,我觉得有些人会认为没有硬链接的原始文件,但我强烈不同意,因为我做了以下实验。
让我们创建一个内容为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
的错误消息。但他们是如何做到的?
提前感谢您的回答!
编辑:顺便说一下,我通过命名与原始文件相同的硬链接来修复上面提到的错误消息。
答案 0 :(得分:3)
但是他们是怎么做到的?
通过查找相同的inode值。以下是列出具有相同inode的文件的一种方法:
find /home -xdev -samefile original
将/ home替换为find
的任何其他起始目录以开始搜索。
如何从硬链接文件中找到原始文件的路径?
对于硬链接,没有多个文件,只有一个文件(inode)有多个(文件)名称。
附录:
除了搜索文件夹之外,没有其他方法可以找到inode的硬链接吗?
ln
,ls
,find
和stat
是发现和查询inode文件系统的常用方法。然后,根据您要完成的下一步,许多文件,目录,存档和搜索命令都会识别inode值。有些可能需要特殊的-inum
或--follow
或等效选项来指定inode。
我上面给出的查找示例只是一个这样的用法。另一种方法是与xargs结合使用以对所有找到的文件进行操作。这是删除所有内容的一种方法:
find /home -xdev -samefile original | xargs rm
在--help下查找其他标准的os命令。大多数Linux发行版还附带了解释inode的帮助文件以及哪些工具可以使用inode。
答案 1 :(得分:0)
pwd
是present 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的相同方式。