Coreutils
為什麼遇到 $HOME 時 ‘rmdir -p –ignore-fail-on-non-empty’ 會失敗?
請考慮以下命令:
cd / mkdir -p ~/a/b touch ~/a/content # Removes dir 'b' and stops at 'a' because it's non-empty. # (This is the expected behavior.) rmdir -p --ignore-fail-on-non-empty ~/a/b rm ~/a/content mkdir -p ~/a/b # Fails with error: "rmdir: failed to remove directory '/home/myhome'". rmdir -p --ignore-fail-on-non-empty ~/a/b
為什麼
rmdir
最後一步失敗?為什麼它會嘗試刪除非空$HOME
而不是停止?
這裡是
man rmdir
說:–ignore-fail-on-non-empty
忽略每個僅因為目錄非空而導致的失敗
即由於某些其他錯誤而無法刪除目錄,除了它是空的,仍然會報告。
並且由於普通使用者通常沒有足夠的權限進行修改
/home
(包括刪除他們自己的主目錄),因此rmdir
在這樣呼叫時只會遇到“權限被拒絕”錯誤。您可以通過嘗試輕鬆確認這一點:
rmdir ~
這將導致:
rmdir: failed to remove '/home/youruser': Permission denied