当前位置: 技术问答>linux和unix
关于hard link----------------------求高手
来源: 互联网 发布时间:2017-01-15
本文导语: 前几天看鸟哥的私房菜,在关于文件系统的章节中,有这样一段文字: 事实上 hard link 应该仅能在单一文件系统中迚行癿,应该是丌能够跨文件系统扄对! 因为图 2.2.1 就是在同一个 filesystem 上嘛!所以 hard lin...
前几天看鸟哥的私房菜,在关于文件系统的章节中,有这样一段文字:
事实上 hard link 应该仅能在单一文件系统中迚行癿,应该是丌能够跨文件系统扄对! 因为图 2.2.1 就是在同一个 filesystem 上嘛!所以 hard link 是有限制癿:
1.不能跨 Filesystem;
2.不能 link 目彔。
不能跨 Filesystem 还好理解,那不能 hard link 到目录又是怎么回事呢?这是因为如果使用 hard link 链接到目路时, 链接的数据需要连同被链接目录底下的所有数据都建立链接,举例来说,如果你要将 /etc 使用实体链接建立一个 /etc_hd 的目录时,那么在 /etc_hd 底下的所有档名同时都与 /etc 底下的檔名要建立 hard link 的,而不是仅连结到 /etc_hd 与 /etc 而已。 并且,未来如果需要在 /etc_hd 底下建立新档案时,连带的, /etc 底下的数据又得要建立一次 hard link ,因此造成环境相当大癿复杂度。 所以啰,目前 hard link 对于目彔暂时还是不支持的啊!
我自己也尝试了一下,确实是这样(我的文件系统是ext3):
[root@localhost ~]# mkdir alex
[root@localhost ~]# ln /home/alex/ /root/alex/
ln: `/home/alex/': hard link not allowed for directory
但是我发现我的系统中又确实有目录的硬链接存在:
[root@localhost ~]# ls -lid /etc/rc.d/init.d/ /etc/init.d/
360161 drwxr-xr-x 2 root root 4096 Nov 8 16:46 /etc/init.d/
360161 drwxr-xr-x 2 root root 4096 Nov 8 16:46 /etc/rc.d/init.d/
而且这两个目录下的文件好像也都是硬链接
[root@localhost ~]# ls -lid /etc/rc.d/init.d/acpid /etc/init.d/acpid
361438 -rwxr-xr-x 1 root root 1566 Jan 8 2010 /etc/init.d/acpid
361438 -rwxr-xr-x 1 root root 1566 Jan 8 2010 /etc/rc.d/init.d/acpid
是鸟哥的书错了吗?求达人解惑。
事实上 hard link 应该仅能在单一文件系统中迚行癿,应该是丌能够跨文件系统扄对! 因为图 2.2.1 就是在同一个 filesystem 上嘛!所以 hard link 是有限制癿:
1.不能跨 Filesystem;
2.不能 link 目彔。
不能跨 Filesystem 还好理解,那不能 hard link 到目录又是怎么回事呢?这是因为如果使用 hard link 链接到目路时, 链接的数据需要连同被链接目录底下的所有数据都建立链接,举例来说,如果你要将 /etc 使用实体链接建立一个 /etc_hd 的目录时,那么在 /etc_hd 底下的所有档名同时都与 /etc 底下的檔名要建立 hard link 的,而不是仅连结到 /etc_hd 与 /etc 而已。 并且,未来如果需要在 /etc_hd 底下建立新档案时,连带的, /etc 底下的数据又得要建立一次 hard link ,因此造成环境相当大癿复杂度。 所以啰,目前 hard link 对于目彔暂时还是不支持的啊!
我自己也尝试了一下,确实是这样(我的文件系统是ext3):
[root@localhost ~]# mkdir alex
[root@localhost ~]# ln /home/alex/ /root/alex/
ln: `/home/alex/': hard link not allowed for directory
但是我发现我的系统中又确实有目录的硬链接存在:
[root@localhost ~]# ls -lid /etc/rc.d/init.d/ /etc/init.d/
360161 drwxr-xr-x 2 root root 4096 Nov 8 16:46 /etc/init.d/
360161 drwxr-xr-x 2 root root 4096 Nov 8 16:46 /etc/rc.d/init.d/
而且这两个目录下的文件好像也都是硬链接
[root@localhost ~]# ls -lid /etc/rc.d/init.d/acpid /etc/init.d/acpid
361438 -rwxr-xr-x 1 root root 1566 Jan 8 2010 /etc/init.d/acpid
361438 -rwxr-xr-x 1 root root 1566 Jan 8 2010 /etc/rc.d/init.d/acpid
是鸟哥的书错了吗?求达人解惑。
|
我实验了一下,我的fedora(除了inode号不一样)和LZ的情况完全一样……
我的理解是这样的,linux不允许对目录进行hlink只是针对用户的(即使是root),但是内核是可以这么做的,也就是说可以编程实现(程序员总是比普通用户拥有更多的特权,API总比命令底层的多)……
回想一下每次创建目录的时候,目录的hlink数量都是2,这就说明在你执行mkdir这个命令的时候,mkdir命令本身可以进行目录的hlink……
但是如果按照这个道理,acpid和init.d/的hlink数就应该是2和3,而不应该是1和2……
我想,可能是系统要保证对于用户来说目录不可hlink的要求,所以将hlink数改掉的,但是inode关系到整个系统的正常运转,所以没法改。这一切都是在系统安装的时候进行的,也就是程序决定的……(这个只是猜测)
我的理解是这样的,linux不允许对目录进行hlink只是针对用户的(即使是root),但是内核是可以这么做的,也就是说可以编程实现(程序员总是比普通用户拥有更多的特权,API总比命令底层的多)……
回想一下每次创建目录的时候,目录的hlink数量都是2,这就说明在你执行mkdir这个命令的时候,mkdir命令本身可以进行目录的hlink……
但是如果按照这个道理,acpid和init.d/的hlink数就应该是2和3,而不应该是1和2……
我想,可能是系统要保证对于用户来说目录不可hlink的要求,所以将hlink数改掉的,但是inode关系到整个系统的正常运转,所以没法改。这一切都是在系统安装的时候进行的,也就是程序决定的……(这个只是猜测)
|
不是你的系统有什么问题吧..
361438 -rwxr-xr-x 1 root root 1566 Jan 8 2010 /etc/init.d/acpid
361438 -rwxr-xr-x 1 root root 1566 Jan 8 2010 /etc/rc.d/init.d/acpid
如果这两个是链接文件的话,第3列的数字不应该是1
361438 -rwxr-xr-x 1 root root 1566 Jan 8 2010 /etc/init.d/acpid
361438 -rwxr-xr-x 1 root root 1566 Jan 8 2010 /etc/rc.d/init.d/acpid
如果这两个是链接文件的话,第3列的数字不应该是1