我们可以在UNIX中创建指向符号链接的硬链接吗?

时间:2015-10-27 06:54:14

标签: unix symlink hardlink

我创建了一个文件的符号链接和该符号链接的硬链接。但是,不是硬链接,而是创建符号链接,并且两者的inode是相同的。 是否可以为符号链接创建硬链接?

2 个答案:

答案 0 :(得分:2)

适用于linux。我们经常在一些关键任务代码中使用它。正如Jonathan所说,Posix标准并不能保证这一点,所以你应该仔细检查它是否适用于你的系统。

$ date >a
$ ln -s a b
$ ln b c
$ ls -li
total 4
396074 -rw-rw-r-- 1 ec2-user ec2-user 29 Oct 27 07:15 a
396345 lrwxrwxrwx 2 ec2-user ec2-user  1 Oct 27 07:16 b -> a
396345 lrwxrwxrwx 2 ec2-user ec2-user  1 Oct 27 07:16 c -> a

您可以使用--physical标志来强制执行此操作。

   -P, --physical
          make hard links directly to symbolic links

答案 1 :(得分:1)

不可靠 - 如图所示(在Mac OS X 10.10.5 Yosemite上演示):

$ ls -l ???.c
-rw-r--r--  1 jleffler  staff  688 Oct 26 00:09 ncm.c
$ ln -s ncm.c ppp.c
$ ln ppp.c qqq.c
$ ls -l ???.c
-rw-r--r--  2 jleffler  staff  688 Oct 26 00:09 ncm.c
lrwxr-xr-x  1 jleffler  staff    5 Oct 26 23:58 ppp.c -> ncm.c
-rw-r--r--  2 jleffler  staff  688 Oct 26 00:09 qqq.c
$ 

链接遵循符号链接,并在符号链接末尾创建文件,而不是符号链接本身。查看symlink()和(特别是)的POSIX规范 link()

link()下,它说:

  

如果path1命名符号链接,则实现定义是link()跟随符号链接,还是创建符号链接本身的新链接。

在Mac OS X上,它遵循符号链接。其他系统也可能采用不同的方式。