我试过了
xtricman⚓ArchVirtual⏺️~?ls /proc/self/fd/ -l
Total 0
lrwx------ 1 xtricman users 64 1月 16 16:34 0 -> /dev/pts/0
lrwx------ 1 xtricman users 64 1月 16 16:34 1 -> /dev/pts/0
lrwx------ 1 xtricman users 64 1月 16 16:34 2 -> /dev/pts/0
lrwx------ 1 xtricman users 64 1月 16 16:34 3 -> '/home/xtricman/a (deleted)'
lr-x------ 1 xtricman users 64 1月 16 16:34 4 -> /proc/1273/fd
xtricman⚓ArchVirtual⏺️~?ln /proc/self/fd/3 b
ln: failed to create hard link 'b' => '/proc/self/fd/3': Invalid cross-device link
由于 inode 仍在磁盘上,我该如何为其重新创建名称?如果没有指向该 inode 的打开文件描述但该 inode 已映射怎么办?在这种情况下我该如何恢复它?
您不应该这样做(但请阅读下面的一个有趣的例外)。
如果内核要让它发生,那么调用如下:
即使当被引用的 inode
fd
的链接计数为 0 时,当由带有CAP_DAC_READ_SEARCH
caps 的进程完成时,也会成功。但是内核正在积极地阻止它发生,而不考虑执行它的进程的能力或特权。
这也记录在手册页中:
根据内核源码,似乎除了
O_TMPFILE
.O_TMPFILE
记录在open(2)
手册页中;下面是一个基于此的小例子:您可以简单地
cat
使用该文件描述符:你不能
ln
用那个文件做一个硬链接,因为硬链接不能跨越文件系统,而且是/proc
一个虚拟文件系统(不能执行任意操作)。procfs
/proc