更准确地说:我知道这些-s
选项代表什么——我每天都在使用它。但是我在教程中看到有人将他网站的文档根目录从 移动/var/www/html/project
到~/www/project
以提高安全性(他后来更改了权限等等,但这在这种情况下并不重要)。然后他创建了以下符号链接:
ln -sT ~/www/project /var/www/html/project
我想知道它的用途是什么-T
,因为通常我会使用-s
. 从手册页中,我得到以下有关该-T
选项的稀疏信息:
-T, --no-target-directory
treat LINK_NAME as a normal file always
我真的不明白这是为了什么。创建符号链接时为什么要-T
与 with 结合使用?-s
这样做有什么好处吗?
ln
的概要如下:如果没有
-T
,如果LINK_NAME
已经存在并且是一个目录(或经过验证以最终解析为目录的符号链接),第一种和第三种形式是不明确的,并ln
选择第三种形式:它在目录内创建链接。因此如果后者已经存在,将创建一个名为
project
inside的链接。/var/www/html/project
-T
消除歧义,并强制ln
只考虑第一种形式:如果链接不存在,则链接创建为命名;如果给定的文件或目录已经存在LINK_NAME
,则ln
失败并出现错误(除非-f
也指定了)。所以
保证您最终得到一个
/var/www/html/project
指向的链接~/www/project
,或者一个错误消息(和非零退出代码)。它确保您的路径(在您的示例中
/var/www/html/project
)是最终路径,因此链接将 100% 存在,如果存在/var/www/html/project
则不存在....../var/www/html/project/**project**
/var/www/html/project
因为这可能会令人困惑,所以显示差异的示例
设置:
cd /tmp
;mkdir /tmp/aa
;mkdir /tmp/bb
;ln -s /tmp/aa /tmp/bb
将导致新的符号链接/tmp/bb/aa -> /tmp/aa
然而
ln -sT /tmp/aa /tmp/bb
将导致ln: failed to create symbolic link '/tmp/bb': File exists
该
-s
参数与它无关。它(像往常一样)在文档中进行了解释:https ://www.gnu.org/software/coreutils/manual/html_node/Target-directory.html