Rm

rm -rf * 是否從目前目錄或父/根目錄遞歸刪除文件?

  • December 20, 2013

我想從特定文件夾中遞歸刪除文件和文件夾,所以我從該文件夾執行此命令

rm -rf *

我假設它會遞歸地刪除目前目錄下的所有文件/目錄。之後發生了一些不好的事情(我的伺服器關閉,甚至沒有得到 ping 響應)。

不要忘記rm命令後伺服器無法訪問的可能性與此無關。這可能是巧合!

但是,當命令發出時,目前工作目錄很可能不是您所想的。

這樣做時你是root嗎?

這是發出命令時發生的情況rm -rf *

  1. shell 將萬用字元模式(在​​這種情況下)解析為與所使用的萬用字元模式*匹配的所有文件(包括目錄、符號連結和設備特殊文件),在這種情況下,所有不以 a 開頭的文件.通常都按“字母順序”排序貝殼。
  2. 然後,shell 會派生一個新程序,並將在 your 中找到的exec()第一個版本作為第一個參數,並將匹配的文件一個接一個作為連續參數。rm``$PATH``-rf

如果rm呼叫的是標準rm命令,它首先會逐個解析參數,將所有以 a 開頭的參數(包括由 shell 萬用字元產生的參數)-視為選項,直到遇到不以-(除了使用 GNU 的命令getopt()在非選項之後接受選項),或者一個完全是--. 之後的所有內容都被視為文件名。

換句話說,如果您--no-preserve-root在目前目錄中有一個名為(例如)的文件,則該文件將被解釋為 的選項rm,而不是要刪除的文件名!

小心使用萬用字元(以及文件命名)。如果您-r在目前目錄中呼叫了一個文件,該命令ls *將以相反的順序列出其他文件,而不顯示“-r”文件。

換句話說,如果你有一個名為 的文件--no-preserve-root,它會作為一個選項傳遞給rm,而不是作為文件名。

用於rm -rf -- *防止這種情況發生,並刪除以 . 開頭的文件-。或者簡單地使用絕對或相對路徑名使文件名以 . 以外的其他內容開頭-,例如:rm ./--flagfilerm /abs/path/to/--flagfile.

還有一個-i標誌可以rm在刪除任何內容之前提示(“互動式”)。

引用自:https://unix.stackexchange.com/questions/106024