【问题标题】:OS Symlinks with same inode具有相同 inode 的操作系统符号链接
【发布时间】:2017-09-10 05:41:40
【问题描述】:

我想知道我们如何才能拥有具有相同 inode 和相同 inode 点的 2 个符号链接(不是 2 个常规文件或硬链接和符号链接,而是 2 个符号链接)。我尝试了很多硬链接和符号链接以及常规文件的组合,我可以拥有两个具有相同 inode 和相同 inode 点的文件,但它们不是两个符号链接。

注意:我使用 python3 下的 os 库来获取所有信息,并使用“os.path.islink”来了解它是否是符号链接,以及“os.stat”“os.lstat”

非常感谢。

【问题讨论】:

  • 你为什么要这么做?
  • 不能有 2 个符号链接具有相同的 inode,但它们当然可以引用相同的 inode。
  • SO 是针对编程问题,而不是关于 Linux 设计的问题。试试 SuperUser.com 或 unix.stackexchange.com。
  • 使两个名称指向同一个 inode 的方法是使用 link() 系统调用。但是如果源文件是一个符号链接,这将跟随它到它的目标,它不会使新名称引用与符号链接相同的 inode。
  • 所以除非你直接操作文件系统,否则没有办法做你想做的事。

标签: linux file operating-system symlink


【解决方案1】:

您必须确保用于制作硬链接的工具不遵循您尝试链接的符号链接。在命令行上,你可以这样做,例如:

cp -l -P symlink1 symlink2

这些选项意味着:

   -l, --link
          hard link files instead of copying
   -P, --no-dereference
          never follow symbolic links in SOURCE

在 Python 中,starting from version 3.3,您可以执行以下操作:

os.link ("symlink1", "symlink2", follow_symlinks = False)

【讨论】:

    【解决方案2】:

    感谢您的所有回答,但实际上我解决了问题,我可以拥有两个具有相同 inode 和相同 inode 点的文件,

    我需要创建文件符号链接的硬链接(以文件 f1 为例)

    ln symlinkf1 hardlink_ofsymlinkf1
    

    然后我得到 inode_symlink1 = inode_hardlink_ofsymlinkf1 (1)

    和 inodepoint_symlinkf1 = inodepoint_hardlink_ofsymlinkf1 (2)

    但是 (1) =/= (2)

    而且这只适用于我将两个文件都作为软链接(使用 os.islink(file_name)=True)的 Linux 中,奇怪的是它在 Mac OS 上不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      相关资源
      最近更新 更多