可以强制ln
在第一个参数中不遵循软链接吗?例如,在下面我想hard
成为一个硬链接到软链接soft
:
$ mkdir dir
$ ln -s dir soft
$ ln soft hard
ln: soft: Is a directory
我知道ln -h
,但这只会阻止ln
跟踪中的软链接第二争论。
答案1
默认情况下,在您的系统上,ln
如果源是符号链接,则完全解析源。有一个标准选项-P
,可以防止它执行此操作:
$ mkdir dir
$ ln -s dir soft
$ ls -l
total 4
drwxr-xr-x 2 myself wheel 512 Sep 21 22:39 dir
lrwxr-xr-x 1 myself wheel 3 Sep 21 22:39 soft -> dir
$ ln -P soft hard
$ ls -il
total 4
129605 drwxr-xr-x 2 myself wheel 512 Sep 21 22:39 dir
129606 lrwxr-xr-x 2 myself wheel 3 Sep 21 22:39 hard -> dir
129606 lrwxr-xr-x 2 myself wheel 3 Sep 21 22:39 soft -> dir
如果 source_file 是符号链接:
如果该
-P
选项有效,则应执行linkat()
与source_file
以 为path1
参数、以目标路径为参数path2
、AT_FDCWD
以fd1
和 为fd2
参数、以零为flag
参数的函数等效的操作。
linkat()
除非你知道这是什么,否则这篇文章大部分都是乱码。OpenBSD 手册将其翻译为
-P
创建硬链接且源是符号链接时,链接到符号链接本身。该
-P
选项将覆盖之前的任何-L
选项。
... 和GNU 手册说
-P
--physical
如果
-s
未生效,并且源文件是符号链接,则创建到符号链接本身的硬链接。在内核不支持的平台上,此选项创建具有相同内容的符号链接;由于无法编辑符号链接内容,因此通过任一链接执行的任何文件名解析都将与创建硬链接相同。
有趣的是,(Ubuntu) Linux 上的 GNUln
手册中有这样的内容:
使用
-s
忽略-L
和-P
.否则,当 aTARGET
是符号链接时,指定的最后一个选项控制行为,默认为-P
。
而在 OpenBSD 和 macOS 上(大概还有其他系统),同一份 GNUln
手册说
使用
-s
忽略-L
和-P
.否则,当 aTARGET
是符号链接时,指定的最后一个选项控制行为,默认为-L
。
(始终阅读您正在使用的系统上的手册而不是在互联网上的某个随机页面上阅读手册的另一个原因,这种情况似乎经常发生。)