Rm
rm -rf * 是否從目前目錄或父/根目錄遞歸刪除文件?
我想從特定文件夾中遞歸刪除文件和文件夾,所以我從該文件夾執行此命令
rm -rf *
我假設它會遞歸地刪除目前目錄下的所有文件/目錄。之後發生了一些不好的事情(我的伺服器關閉,甚至沒有得到 ping 響應)。
不要忘記
rm
命令後伺服器無法訪問的可能性與此無關。這可能是巧合!但是,當命令發出時,目前工作目錄很可能不是您所想的。
這樣做時你是root嗎?
這是發出命令時發生的情況
rm -rf *
:
- shell 將萬用字元模式(在這種情況下)解析為與所使用的萬用字元模式
*
匹配的所有文件(包括目錄、符號連結和設備特殊文件),在這種情況下,所有不以 a 開頭的文件.
通常都按“字母順序”排序貝殼。- 然後,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 ./--flagfile
或rm /abs/path/to/--flagfile
.還有一個
-i
標誌可以rm
在刪除任何內容之前提示(“互動式”)。