Files
如何防止“rm -rf ~”被誤執行?
有什麼方法可以完全防止在終端中錯誤地執行此命令?例如,我知道 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 系統。我的建議:
- 處理危險命令(、、、、等)時
rm
要dd
格外shred
小心eval
。- 除非您完全確定自己沒有輸入錯誤,否則不要執行任何操作。
- 如果您不完全理解給定的命令,請不要執行它。在繼續之前閱讀它的手冊。
- 進行備份。並備份您的備份。
也就是說,您可以執行以下操作:
alias rm='rm -i'
rm() { command rm -i "${@}"; }
如果您通過該選項,它不會保護您
-f
,但它適用於簡單的情況:$ rm file rm: remove regular file 'file'? y
或者你可以編寫一個更複雜的包裝器。
這種方法的最大問題是您可能會習慣這種非標準行為,如果您需要在沒有此類別名/函式/包裝器的系統上工作,這可能非常危險。