【问题标题】:how can 2 unix files have the same inode, but the reference count for the inode is 1?2个unix文件怎么能有相同的inode,但是inode的引用计数是1?
【发布时间】:2014-07-03 11:28:51
【问题描述】:

我对 unix/inode 文件系统的理解是,两个名字可以引用同一个 inode 号,但是在这种情况下,引用计数会是 2。然而,我今天注意到 /etc/hosts 文件和 / private/etc/hosts 文件都引用了同一个inode,但是引用计数是1。为什么引用计数不是2,反映了两个路径引用同一个inode?​​p>

% ls -li /etc/hosts
38402042 -rw-r--r--  1 root  wheel  236 May 14 23:13 /etc/hosts

% ls -li /private/etc/hosts
38402042 -rw-r--r--  1 root  wheel  236 May 14 23:13 /private/etc/hosts

【问题讨论】:

  • 嗯。如果/private/etc 是指向/etc 的链接,则主机文件是单个对象,而不是两个指向同一磁盘位置的对象。会是这样吗?
  • 好吧,反过来,但基本相同。只有一个目录条目/private/ete/hosts
  • 它看起来像 /etc 目录软链接到 /private/etc 正如你所建议的那样。 % ls -l /etc lrwxr-xr-x@ 1 root wheel 11 Mar 17 2011 /etc -> private/etc。如果你 ln -s existing_dir new_directory 为 new_directory 创建一个新的 inode(符号链接创建一个新的 inode 来保存转发路径信息),但由于它是一个目录,现有目录的所有内容都从 new_directory 转发.这将创建两个具有相同 inode 编号但引用为 1 的路径。如果您从任一位置 rm 文件,它就消失了!
  • 我的意思是,/etc/private/etc 的别名(符号链接)。因此,您在/etc看到 的任何文件实际上都是/private/etc 中的文件。因此,如果您比较 etc/private/etc 的内容,所有文件和目录的 inode 和链接计数为 1。哦,不要删除它们。这将导致大量工作。
  • 这样您就可以 rm 一个引用计数为 2 的硬链接,而另一个引用仍然存在(inode 仍然存在)。但是rm一个符号链接删除了inode(再见文件)。如果您只是想删除链接并保留文件,则应使用 unlink。

标签: unix reference-counting inode


【解决方案1】:

硬链接共享相同的 inode,而硬链接更像是一个镜像副本。
硬链接语法:ln file1 file2
如果您删除了 file1,它仍然是 file2。

【讨论】:

    【解决方案2】:

    我建议您使用namei (https://linux.die.net/man/1/namei) 来找出该文件路径中的所有符号链接。在您的一个 cmets 中,您声明 etc 是指向 private/etc 的符号链接。如果您在 /etc/hosts 上使用 namei,它将显示文件的所有路径,包括中间的符号链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 2010-11-23
      • 2018-04-16
      • 2015-07-04
      • 2011-05-19
      • 2012-04-15
      • 1970-01-01
      相关资源
      最近更新 更多