有没有一种方法可以创建在重命名或移动文件和目录时不会被破坏的文件引用?

有没有一种方法可以创建在重命名或移动文件和目录时不会被破坏的文件引用?

有没有一种方法可以创建在重命名或移动文件和目录时不会被破坏的文件引用?例如,通过索引节点而不是名称来引用文件的引用?

答案1

是的,有几种方法。

  1. 硬链接:ln file1 file2. Nowfile2将是 的另一个名称file1,无论您重命名为什么file1,或者即使您删除它,file2仍然可以访问它(显然,除非您也重命名/删除它)。这只适用于文件,不适用于目录,并且所有链接必须位于同一文件系统上。
  2. 绑定坐骑:mount --bind file1 file2.这与硬链接类似,只是它也适用于目录,并且没有相同文件系统的限制。缺点是它是一项特权操作,因此您需要成为 root 用户(或者位于您自己的用户和挂载命名空间中)。
  3. 文件描述符:exec {foo}</some/file.一旦你这样做,/proc/self/fd/$foo将成为文件的“神奇”符号链接(它是“神奇”的,因为它不会像常规符号链接那样被破坏,并且由于特殊的 /proc 伪文件系统而可能)。这适用于文件和目录,不需要任何特殊权限,并且会自动被子进程继承和使用。缺点是它只会持续到执行它的进程退出为止,并且您对它的路径没有太多控制权。
  4. name_to_handle_at/open_by_handle_at:这满足您的字面要求,但比上述任何一个都更复杂,并且是特权操作。唯一的优点是句柄是常规数据,不需要保存任何状态。

答案2

在 EXT 文件系统上,您可以使用以下debugfs命令重新创建直接到 inode 的链接:

debugfs -w /dev/mapper/vg0-root -R 'link <16> myfile'

这将创建一个名为 myfile 并指向 inode 16 的“文件”。

但是,如果您删除该文件,它仍然会消失,但如果它被移动,它将保持不变。

获取文件的索引节点,看看这里...

来源

相关内容