Files

如何防止“rm -rf ~”被誤執行?

  • December 7, 2018

有什麼方法可以完全防止在終端中錯誤地執行此命令?例如,我知道 bash 有別名。有沒有辦法使用它們?

正如所要求的那樣,這個包裝函式將防止該使用者出現一種特定類型的錯誤:

function rm {
 if [ "$#" -eq 2 ] && [ "$1" = "-rf" ] && [ "$2" = "$HOME" ]
 then
   echo Avoiding a dangerous command...
   return
 else
   command rm "$@"
 fi
}

…因為 bash 將替換rm -rf ~rm -rf $HOME, 如果設置了 $HOME (否則為使用者的主目錄)。

但是,這並不能防止很多錯誤。您可以擴大測試以循環遍歷參數並檢查每個參數是否是 的子集$HOME,或者您要小心處理的任何內容。

這不會保護使用者免於執行rm -rf ./*\rm -rf ~sudo rm -rf ~或一大堆其他變體。

是的,有很多方法可以避免rm弄得一團糟。但是,與其讓rm類似的命令萬無一失,不如學會負責任地使用 Unix 系統。

我的建議:

  • 處理危險命令(、、、、等)時rmdd格外shred小心eval
  • 除非您完全確定自己沒有輸入錯誤,否則不要執行任何操作。
  • 如果您不完全理解給定的命令,請不要執行它。在繼續之前閱讀它的手冊。
  • 進行備份。並備份您的備份。

也就是說,您可以執行以下操作:

alias rm='rm -i'
rm() { command rm -i "${@}"; }

如果您通過該選項,它不會保護您-f,但它適用於簡單的情況:

$ rm file
rm: remove regular file 'file'? y

或者你可以編寫一個更複雜的包裝器。

這種方法的最大問題是您可能會習慣這種非標準行為,如果您需要在沒有此類別名/函式/包裝器的系統上工作,這可能非常危險。

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