【发布时间】: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