我们可以在 UNIX 中创建硬 link 到符号 link 吗?

Can we create a hard link to a symbolic link in UNIX?

我创建了一个文件的符号 link 和该符号 link 的硬 link。但不是硬 link symbolic link 正在创建并且它们的 inode 是相等的。 是否可以为符号 link 创建硬 link?

不可靠 — 如图所示(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
$ 

link跟在symlink之后,创建到symlink末尾的文件,而不是symlink本身。请参阅 symlink() 和(特别是)的 POSIX 规范 link().

link()下,它说:

If path1 names a symbolic link, it is implementation-defined whether link() follows the symbolic link, or creates a new link to the symbolic link itself.

在 Mac OS X 上,它遵循符号 link。其他系统可能会有所不同。

适用于 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