Linux
“ln -t”有什麼作用
做什麼
ln -T
?我知道該標誌在 BSD 版本中不存在,ln
它只存在於 GNU 版本中,並且我已經閱讀了它將ln
“LINK_NAME
始終視為普通文件”的文件,但這意味著什麼以及為什麼沒有BSD版嗎?
GNU的
-T
( ) 選項提供了一個可能在腳本中有用的安全特性。--no-target-directory``ln
假設您想
$newname
為一個文件創建一個新名稱$filename
,其中新名稱可能是從外部來源提供的。命令
ln -T "$filename" "$newname"
如果是一個已經存在的目錄,則會失敗
$newname
,而不是在該目錄中意外地創建名稱$filename
(這可能會導致進一步的操作以有趣的方式失敗)。這是類似的捷徑
if [ ! -e "$newname" ]; then ln "$filename" "$newname" else printf 'failed to create hard link "%s": File exists\n' "$newname" >&2 # Further code to handle failure to create link here. fi
同樣,
-t
(--target-directory
) 提供了一種方法來確保文件的新名稱實際上是在現有目錄中創建的,而不是在其他任何地方。此外,正如Stephen Kitt 在評論中所指出的,將目標文件類型/“連結名稱”的測試移至實用程序本身也可能降低受競爭條件影響的風險,即目標在測試之間發生更改因為它的存在和/或類型以及實際創建連結。
為什麼 POSIX 或 BSD 沒有
-T
or-t
?好吧,GNU 工具通常添加了許多提供便利的擴展。-T
和-t
選項是其中的ln
一些。它們不會真正讓你做一些沒有它們就無法完成的事情,而且它們不會添加功能。一些系統,比如 BSD,甚至沒有考慮添加它們,或者考慮過但拒絕添加它們的想法(我真的不知道,我不記得看到有人發送更新檔以將其添加到openbsd-tech
郵件列表中, 例如)。