use*_*520 4 linux hardlink ln proc
我可以在 ln 手册页中阅读:
-L, --logical
make hard links to symbolic link references
Run Code Online (Sandbox Code Playgroud)
我在某处阅读了ln -L可以使用文件系统重新链接已删除但仍处于打开状态的/proc文件的地方。例如:
ln -L /proc/1234/fd/12 /tmp/my-file
Run Code Online (Sandbox Code Playgroud)
但我得到ENOENT:没有这样的文件或目录。如果我尝试使用不同的文件系统,则会得到无效的跨设备链接。
如果我不能ln -L用来恢复已删除的文件,那么它可以用来做什么?
好吧,对新手更友好一点的答案......
关于文件如何在 UNIX/Linux 系统上存储的一个简单视图是: 有一个目录条目,由您使用ls -l看到的名称和一个 Inode 编号(您可以使用ls -i看到)组成。Inode 包含您的数据存储在文件系统上的实际信息(包括所有权、权限、必要时更多 Inode 等):
(是时候体验 UTF-8 的乐趣了……;-))
??????????????????? ????????? ???????????????
? directory entry ? ?? ? Inode ? ?? ? data blocks ?
??????????????????? ????????? ???????????????
Run Code Online (Sandbox Code Playgroud)
现在来看看硬链接和符号链接之间的区别:
硬链接只是一个目录条目,它指向与现有 Inode 相同的 Inode,而符号链接只是一个特殊文件,其中包含另一个文件的名称(直接存储在 Inode 中,如果路径名足够小适合)。这就是原因,为什么
???????????????????
? hard link ? ????????
??????????????????? ?
??????????????????? ????????? ???????????????
? example_file ? ?? ? Inode ? ?? ? data blocks ?
??????????????????? ????????? ???????????????
?
?????????????????????????
?
??????????????????? ??????????????????????
? symbolic link ? ?? ? filename reference ?
??????????????????? ??????????????????????
Run Code Online (Sandbox Code Playgroud)
现在回到不存在的-L选项-s:它允许您创建符号链接指向的文件的硬链接(如上例中的“硬链接”)。
那么这种行为肯定是非常依赖于实现的,而且你可以在所有的UNIX / Linux平台上有所不同,但我会试着解释它是如何可能的工作:
当文件被删除时(比如通过rm(1)),系统调用总是unlink(2)。它删除目录条目并将链接计数器(在 Inode 中维护)减一。
如果链接计数器达到零,则是操作系统清理的时间(实际上释放 inode 指向的数据块,然后释放 inode 本身。但如果文件仍然打开,此任务通常会推迟到使用 inode 的程序终止。
如今,大多数 UNIX 系统都维护一个/proc文件系统层次结构,可以在其中查找对打开文件的引用,这些文件是(令人惊讶!)符号链接。鉴于找到了正确的条目,ln -L 可能有助于重新创建指向 inode 的链接,再次增加链接计数器,从而防止操作系统删除 inode(如果幸运的用户足够快并且程序仍在运行)。
注意:要使其正常工作,新链接的位置必须与原始链接所在的文件系统相同!
???????????????????
? rescue_link ? ????????
??????????????????? ?
??????????????????? ????????? ???????????????
? *** removed *** ? ? Inode ? ?? ? data blocks ?
??????????????????? ????????? ???????????????
?
?????????????????????????
?
??????????????????? ??????????????????????
? /proc/bla/fd/n ? ?? ? filename reference ?
??????????????????? ??????????????????????
Run Code Online (Sandbox Code Playgroud)
有很多事情可能会阻止正确创建链接,这非常依赖于符号链接本身的实现方式,我不得不承认:我严重怀疑它是否适用于许多 UNIX 变体 - 但也许是一个愿意的志愿者花一些时间来测试这个?
| 归档时间: |
|
| 查看次数: |
3975 次 |
| 最近记录: |