Buf*_*lls 35 filesystems hard-link
例如,我有一个文件myold_file. 然后我ln用来创建一个硬链接mylink:
ln myold_file mylink
Run Code Online (Sandbox Code Playgroud)
然后,即使使用ls -a,我也无法分辨哪个是旧的。
有什么好说的吗?
Jen*_*y D 97
你不能,因为它们实际上是同一个文件,只能通过不同的路径到达。第一个没有特殊地位。
Hau*_*ing 16
没有直接、干净(可靠)的方法可以做到这一点。但在适当的情况下,这是可能的(或至少是可能的)。问题是有两个硬链接,但只有一个文件。更改、修改和(可能)创建时间仅存储在文件(inode)中,而不存储在目录条目(硬链接)中。因此,您想要的信息只能从次要效果中获取,这些次要效果很容易被与文件无关的操作破坏。你甚至看不到它是否已经被摧毁。只有在您准确了解它们的情况下,才能从操作环境中了解这一点。
硬链接的创建是对包含该链接的目录的写操作。因此它更新目录的mtime. 所以如果
链接在不同的目录中
并且您知道在创建第二个硬链接后这些目录都没有更改(文件添加、删除、重命名或文件元数据更改),那么您可以简单地比较mtime目录的s。
特殊情况:如果其中一个目录mtime在文件(inode)之前有一个,mtime并且您可以合理地确定该文件在其创建后的一小段时间内没有被写入,则该目录的链接是较旧的。
如果链接位于同一目录中(这似乎是您的问题),那么情况会变得更糟。然后你可以使用
ls -lU
Run Code Online (Sandbox Code Playgroud)
以获得对条目创建顺序的印象。这不需要是正确的顺序,因为条目可能会被删除,以便在目录列表的中间创建新条目。正如 Gilles 指出的那样,它根本不适用于较新的文件系统。
小智 10
如果您依赖于目录的最后修改时间,并且您不知道这些目录是如何以及何时更改的,那么依赖 mtime 将导致您在一定百分比的时间内出错。这里的问题是文件在文件系统中由 inode 表示,而不是由目录条目表示。目录条目(文件名)指向 inode,而不是文件。
我想我会仔细观察为什么我需要知道哪个目录条目较旧以及如何避免需要知道这一点。
我认为这个问题(相当合理地)误导了硬链接到底是什么。然而,我认为最正确的直接答案是“他们都是”。
Unix 文件系统通常在 i-node 中存储实际的文件内容和数据,这些没有任何路径,然后路径与这些 i-node 具有多对一的关系。以一个有两个名字的人为例,鲍勃和乔。不能说鲍勃比乔大,反之亦然,它们只是同一个人的名字。
如果您想保留“原始”文件的概念和一个新文件的概念,您可能正在寻找符号链接,这些更像是一个别名,只是对操作系统的指令,它应该像它们一样操作到一个路径是另一个而不改变下面的文件结构。(您可以使用“ln -s 文件链接”来制作这些。
| 归档时间: |
|
| 查看次数: |
15464 次 |
| 最近记录: |