Rm

是`是的|rm -r 比 rm -rf 更安全?

  • September 1, 2021

我多次聽說發行rm -rf很危險,因為使用者可能會意外刪除整個系統。但有時我想遞歸地刪除一個目錄,而不是每次都被問到。我正在考慮yes | rm -r改用。

我在想的是,yes | rm -rrm -rf? 或者本質上,它們是一樣的嗎?

首先,正如其他人已經說過的,yes | rm -r與 非常相似但不完全相同rm -rf。不同之處在於該-f選項告訴rm繼續過去各種錯誤。這意味著yes | rm -r它將在第一個錯誤時退出,這與rm -rf繼續並繼續刪除它可以刪除的所有內容不同。這意味著它的危險性略低於yes | rmrm -f實際上並非如此。

那麼,您會採取哪些措施來降低風險rm

以下是我養成的一些習慣,這些習慣使其不太可能遇到rm. 這個答案假設你沒有別名rmrm -i,在我看來這是一個不好的做法。

不要使用互動式 root shell。. 這立即使做最壞情況變得更加困難rm -rf /。相反,請始終使用sudo,這應該是非常仔細地查看您正在輸入的命令的視覺線索。如果絕對需要啟動 root shell,請在此處執行所需操作並退出。如果某些東西大部分時間都在迫使您成為根使用者,請修復它。

**警惕絕對路徑。**如果您發現自己輸入了以 開頭的路徑/,請停止。避免絕對路徑更安全,而是 cd 到您打算從中刪除的目錄,使用lspwd環顧四周以確保您在正確的位置,然後繼續。

**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用於遞歸刪除文件(以及目錄)。( -flong --force:) 選項用於忽略不存在的文件和參數,並且從不提示確認。有關更多詳細資訊,請參見手冊頁,我將其連結在下面。

因此,如果您想以遞歸方式刪除目錄,rm -rf那麼正確的方法就是這樣做。

語言維度

您多次聽到發行rm -rf是危險的,這是正確的。缺少的一點是,沒有人告訴過為什麼會這樣。

您已經在最初的問題中提供了答案:危險的不是命令本身。是使用者輸入了錯誤的內容,然後面對已刪除的文件或目錄,而這些文件或目錄是他一開始就不想刪除的。

所以你聽到的這個警告的意思是:如果你真的想刪除你輸入的內容,請三思而後行,然後再點擊輸入按鈕

您的問題意味著您沒有完全理解它的意思,但您理解的是:“命令本身很危險,所以我需要找到另一種方法來刪除我的文件和目錄”。

當然,使用 Unix 命令可以做到這一點,因為達到目標的方法總是不止一種。然而,你聽到的警告是為了真正反思,所以(創造性的)管道結構yes|rm -r並不能幫助你思考。

這就是為什麼它不像rm -rf.

歷史維度

所有的 Unix 命令都是使用以下口頭禪建構的:“做一項工作,並完美地完成這項工作”。

然而,這對於那些習慣於被他們的作業系統光顧的人來說是令人困惑的。例如,在 Windows 中,使用者在啟動操作後被問到:“你真的要這樣做還是那樣做?”仍然是很正常的。

如果您使用的是 Unix 命令,則情況並非如此,除非您明確要求要求確認。該rm命令也不例外,並且知道這樣一個參數:-ior --interactive

麻煩開始於 2004 年左右,當時由於 Ubuntu 作為易於使用的作業系統的興起,許多新的 Linux 使用者非常迅速地湧入。他們都對 Linux 如何在底層工作的了解相對較少。他們中的許多人犯了一個錯誤,導致許多系統由於輸入錯誤而被刪除rm -rf /。悲傷的時候…

當時犯的錯誤是試圖“保護”這些使用者,就像 Windows 所做的那樣。因此,Ubuntu 等發行商引入了別名,自動將rm命令轉換為rm -i. 在我看來,向新使用者傳授 Unix 的方法會更好,而不是光顧他們。

儘管如此,底線是某些發行版仍然使用這樣的別名定義,因此許多人認為互動式查詢是rm命令的預設設置。然而,這種情況並非如此。

參考

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