Symlink
我已經用 cp -as 複製了一個目錄,現在我害怕 rm -rf 創建的目錄,因為它可能會刪除原始目錄
我已經複製了一個目錄,
cp -as /media/user/dir symlinks
現在我很害怕,rm -rf symlinks
因為它可能會刪除其中的文件/media/user/dir
什麼是只刪除目錄結構和符號連結
symlinks
而不觸及任何內容的安全方法/media/user/dir
?作為測試,我這樣做了:
$ mkdir test $ touch test/file $ mkdir test/dir $ touch test/dir/file2 $ cp -as test syms $ rm -rf syms
該測試沒有觸及原始
test
目錄。這是一個完整的測試嗎?總是這樣嗎?我沒有空間備份
/media/user/dir
您可以刪除包含符號連結的目錄,而不必擔心這也會刪除原始文件。
該
rm
實用程序的 POSIX 規範說(關於遇到符號連結時會發生什麼):該
rm
實用程序不應通過跟隨符號連結進入層次結構的其他部分來遍歷目錄,但應刪除連結本身。然後,稍後(在基本原理部分):
rm
根據說明,由於對功能的依賴,該實用程序本身會刪除符號連結,而不是它們引用的文件unlink()
。使用-r
或刪除層次結構時-R
,必須明確禁止遵循符號連結。GNU
rm
手冊對此沒有任何說明,但我們必須假設它在這方面與 POSIX 沒有衝突。其他系統上的手冊有時會明確包含此承諾。以下來自 OpenBSD(FreeBSD 和 NetBSD 有相同的措辭):該
rm
實用程序刪除符號連結,而不是連結引用的文件。…並來自 AIX(Solaris 有類似的措辭):
如果文件是符號連結,則刪除連結,但符號連結引用的文件或目錄仍然存在。
請注意,
rm
關於符號連結的行為可以在本地輕鬆測試:$ touch file $ ls -l total 0 -rw-r--r-- 1 myself wheel 0 Feb 26 09:32 file $ ln -s file link $ ls -l link lrwxr-xr-x 1 myself wheel 4 Feb 26 09:32 link -> file $ rm link $ ls -l total 0 -rw-r--r-- 1 myself wheel 0 Feb 26 09:32 file
可以對目錄中的符號連結進行類似的練習。