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
答案3
刪除的緩慢部分是檔案系統程式碼和磁碟內容,而不是 unlink() 系統呼叫的使用者空間準備。
即:如果速度差異很重要,那麼您不應該將資料儲存在檔案系統上。
unlink 只是一個 rm“燈”。 rm 有更多功能,但它們做同樣的事情。