你會使用 unlink 刪除文件嗎?
在 Linux 中刪除文件,我們通常使用 rm 命令。除此以外,還有另外一個命令,可以用于刪除文件和鏈接,這就是 unlink 命令。雖然它聽起來像是只能刪除 Linux 系統(tǒng)中的鏈接,但實際上,也可以刪除文件。
Linux 系統(tǒng)中刪除文件的過程是非常迅速的,只是一瞬間。當(dāng)你刪除文件時,Linux 內(nèi)核發(fā)現(xiàn)它對應(yīng)于索引節(jié)點編號 X,系統(tǒng)會將其從目錄列表中刪除文件條目,并將索引節(jié)點 X 的鏈接計數(shù)減少1,這時候,索引節(jié)點 X 的鏈接計數(shù)為0,內(nèi)核會認(rèn)為沒有人鏈接到此索引節(jié)點,所以就可以安全的刪除索引節(jié)點,并刪除與其關(guān)聯(lián)的數(shù)據(jù)塊。
現(xiàn)在我們來看一下如何使用 unlink 命令。
unlink 命令
如前文所述,unlink 命令用于刪除文件和鏈接,其中鏈接包括軟鏈接和硬鏈接。它是最簡單的命令之一,除了 --help 以及 --version 以外,沒有任何其他選項。
使用 unlink 刪除文件,可以這樣:
unlink filename
刪除鏈接,可以這樣使用:
unlink link_name
刪除成功后,不會有任何輸出:
這就是 unlink 命令的功能,除此以外不做任何其他事情。
unlink 不能同時刪除多個文件和鏈接
rm 命令可以一次刪除多個文件。但是 unlink 卻不能,它一次只能刪除一個文件或者鏈接,而且,也不能使用全局模式(globbing patterns)。
如果我們嘗試給定多個文件的話,它會拋出一個錯誤,執(zhí)行失敗:
[gliu@fedora ~]$ unlink *.txt
unlink: extra operand ‘file2.txt’
Try 'unlink --help' for more information.
同時刪除多個鏈接也會如此。
使用 unlink 不能刪除目錄
GNU 實現(xiàn)下的 unlink 命令是無法刪除目錄的,如果給定的文件名稱是一個目錄,就會報錯:
[gliu@fedora ~]$ unlink new_dir
unlink: cannot unlink 'new_dir': Is a directory
rm 和 unlink 的區(qū)別
unlink 命令使用 unlink 系統(tǒng)命令,而 rm 命令使用 unlinkat 系統(tǒng)調(diào)用,兩個系統(tǒng)調(diào)用幾乎相同。但是這兩個命令之間還是有一些明顯的差異。
如前文所述,unlink 命令在同一時間只能刪除一個文件或鏈接,而 rm 命令可以刪除多個;unlink 命令不能刪除目錄,而 rm 命令能刪除目錄。
rm 命令在執(zhí)行的時候,首先會安全檢查,如果你沒有文件的寫權(quán)限,那么系統(tǒng)會要求你給出寫權(quán)限(sudo或者切換至管理員用戶),或者使用強制刪除選項 -f;而 unlink 則不會進行安全檢查,直接刪除文件。
另外,與 rm 不同,unlink 沒有其他選項。
在某些情況下,相比于 rm,你可能更喜歡使用 unlink。比如你希望強制刪除一個文件,而不考慮安全或者權(quán)限問題;或者如果刪除失敗(比如文件不存在)的話你希望能看到報錯信息,這種情況下就可以使用 unlink。因為使用 rm -f 強制刪除文件,如果文件不存在的話,不會顯示任何錯誤信息。