是`是的|rm -r 比 rm -rf 更安全?
我多次聽說發行
rm -rf
很危險,因為使用者可能會意外刪除整個系統。但有時我想遞歸地刪除一個目錄,而不是每次都被問到。我正在考慮yes | rm -r
改用。我在想的是,
yes | rm -r
比rm -rf
? 或者本質上,它們是一樣的嗎?
首先,正如其他人已經說過的,
yes | rm -r
與 非常相似但不完全相同rm -rf
。不同之處在於該-f
選項告訴rm
繼續過去各種錯誤。這意味著yes | rm -r
它將在第一個錯誤時退出,這與rm -rf
繼續並繼續刪除它可以刪除的所有內容不同。這意味著它的危險性略低於yes | rm
,但rm -f
實際上並非如此。那麼,您會採取哪些措施來降低風險
rm
?以下是我養成的一些習慣,這些習慣使其不太可能遇到
rm
. 這個答案假設你沒有別名rm
到rm -i
,在我看來這是一個不好的做法。不要使用互動式 root shell。. 這立即使做最壞情況變得更加困難
rm -rf /
。相反,請始終使用sudo
,這應該是非常仔細地查看您正在輸入的命令的視覺線索。如果絕對需要啟動 root shell,請在此處執行所需操作並退出。如果某些東西大部分時間都在迫使您成為根使用者,請修復它。**警惕絕對路徑。**如果您發現自己輸入了以 開頭的路徑
/
,請停止。避免絕對路徑更安全,而是 cd 到您打算從中刪除的目錄,使用ls
並pwd
環顧四周以確保您在正確的位置,然後繼續。**
rm
在按命令返回之前暫停。**我已經訓練自己在輸入任何命令(以及其他一些潛在危險命令)後總是總是將手指從鍵盤上抬起rm
,仔細檢查我輸入的內容,然後才將手指放回鍵盤並敲擊返回。**用於
echo rm ...
查看您要求rm
執行的操作。**我經常將關鍵rm
命令分為兩步。首先,我輸入$ echo rm -rf ...
這會擴展所有 shell glob(即
*
模式等)並向我顯示**將執行的rm
命令。如果這看起來不錯,再次仔細檢查後,我鍵入(control-P) 以取回先前的輸入行,刪除並再次檢查命令行,然後按輸入鍵而不更改任何其他內容。^P``echo
**維護備份。**如果您正在執行上述大部分操作,則必須恢復整個系統的機率非常低,但您仍然可能意外刪除自己的文件,並且能夠從某個地方取回它們很方便。
簡短的回答
沒有。但是,我真的很喜歡您將命令組合在一起的創造力。仍然
yes|rm -r
是 UUOC(u seless u se of c at)的一個很好的例子**——****命令行結構的首字母**縮寫詞(或更好的術語),它只為使用者提供方便的功能。長答案
我真的很喜歡你的問題,因為它可以在多個維度上得到回答。
技術維度
該
rm
命令用於刪除文件。該選項-r
或其更長的形式--recursive
用於遞歸刪除文件(以及目錄)。(-f
long--force
:) 選項用於忽略不存在的文件和參數,並且從不提示確認。有關更多詳細資訊,請參見手冊頁,我將其連結在下面。因此,如果您想以遞歸方式刪除目錄,
rm -rf
那麼正確的方法就是這樣做。語言維度
您多次聽到發行
rm -rf
是危險的,這是正確的。缺少的一點是,沒有人告訴過為什麼會這樣。您已經在最初的問題中提供了答案:危險的不是命令本身。是使用者輸入了錯誤的內容,然後面對已刪除的文件或目錄,而這些文件或目錄是他一開始就不想刪除的。
所以你聽到的這個警告的意思是:如果你真的想刪除你輸入的內容,請三思而後行,然後再點擊輸入按鈕
您的問題意味著您沒有完全理解它的意思,但您理解的是:“命令本身很危險,所以我需要找到另一種方法來刪除我的文件和目錄”。
當然,使用 Unix 命令可以做到這一點,因為達到目標的方法總是不止一種。然而,你聽到的警告是為了真正反思,所以(創造性的)管道結構
yes|rm -r
並不能幫助你思考。這就是為什麼它不像
rm -rf
.歷史維度
所有的 Unix 命令都是使用以下口頭禪建構的:“做一項工作,並完美地完成這項工作”。
然而,這對於那些習慣於被他們的作業系統光顧的人來說是令人困惑的。例如,在 Windows 中,使用者在啟動操作後被問到:“你真的要這樣做還是那樣做?”仍然是很正常的。
如果您使用的是 Unix 命令,則情況並非如此,除非您明確要求要求確認。該
rm
命令也不例外,並且知道這樣一個參數:-i
or--interactive
。麻煩開始於 2004 年左右,當時由於 Ubuntu 作為易於使用的作業系統的興起,許多新的 Linux 使用者非常迅速地湧入。他們都對 Linux 如何在底層工作的了解相對較少。他們中的許多人犯了一個錯誤,導致許多系統由於輸入錯誤而被刪除
rm -rf /
。悲傷的時候…當時犯的錯誤是試圖“保護”這些使用者,就像 Windows 所做的那樣。因此,Ubuntu 等發行商引入了別名,自動將
rm
命令轉換為rm -i
. 在我看來,向新使用者傳授 Unix 的方法會更好,而不是光顧他們。儘管如此,底線是某些發行版仍然使用這樣的別名定義,因此許多人認為互動式查詢是
rm
命令的預設設置。然而,這種情況並非如此。參考