unlink 和 rm 有什麼差別?

unlink 和 rm 有什麼差別?

unlink 比 rm 快嗎?

答案1

兩者都是同一基本函數(unlink()系統呼叫)的包裝器。

權衡用戶態實用程式之間的差異。

rm(1):

  • 更多的選擇。
  • 更多回饋。
  • 健全性檢查。
  • 由於上述原因,單一呼叫速度會慢一些。
  • 可以同時使用多個參數進行呼叫。

unlink(1):

  • 更少的健全性檢查。
  • 無法刪除目錄。
  • 無法遞歸。
  • 一次只能接受一個參數。
  • 由於它的簡單性,對於單一呼叫來說稍微精簡一些。
  • 與給出rm(1)多個參數相比,速度較慢。

您可以透過以下方式證明差異:

$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand `2'

$ touch $(seq 1 100)
$ time rm $(seq 1 100)

real    0m0.048s
user    0m0.004s
sys     0m0.008s

$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done

real    0m0.207s
user    0m0.044s
sys     0m0.112s

$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done

real    0m0.167s
user    0m0.048s
sys     0m0.120s

然而,如果我們談論的是對系統unlink(2)函數的純粹調用,我現在意識到這可能不是你所考慮的。

unlink()您可以對目錄和檔案執行系統操作。但是,如果該目錄是其他目錄和檔案的父目錄,則指向該父目錄和檔案的連結將被刪除,但子目錄將保持懸空狀態。這不太理想。

編輯:

unlink(1)抱歉,澄清了和之間的區別unlink(2)。不同平台之間的語意仍然會有所不同。

答案2

在 POSIX 規範級別,什麼R Mdoes 的指定比what 更嚴格取消連結做。

如果您的腳本必須跨作業系統運行,則結果的可移植性似乎使用 rm 會更好。

答案3

刪除的緩慢部分是檔案系統程式碼和磁碟內容,而不是 unlink() 系統呼叫的使用者空間準備。

即:如果速度差異很重要,那麼您不應該將資料儲存在檔案系統上。

unlink 只是一個 rm“燈”。 rm 有更多功能,但它們做同樣的事情。

相關內容