GNU/Linux >> Linux の 問題 >  >> Linux

ユーザーが rm とワイルドカードの間に誤ってスペースを入力するのを防ぎます

システムを完全に防弾する方法はありません。さらに「よろしいですか?」物事へのプロンプトは非生産的であり、「もちろん私は確信している」につながります.ひざまずく反応。

数年前の本から私が拾ったトリックは、最初に ls -R blah* を行うことです 次に、 rm -fr blah* を実行します 見つかったリストが私が望んでいたものにヒットした場合に限ります。

ls を実行するのは簡単です 最初にコマンド、次に ls -R を削除します rm -fr に置き換えます .

最後の質問は、「その情報があなたにとって価値があった場合、バックアップはどこにありますか?」


DEBUG 疑わしいと思われるコマンドをキャンセルするために、trap を書き込むことができます。以下、またはそれに類似したコードを ~/.bashrc に追加できます :

shopt -s extdebug
checkcommand() {
  if [[ $BASH_COMMAND = 'rm -r'*' *' ]]; then
    echo "Suppressing rm -r command ending in a wildcard" >&2
    return 1
  fi
  # check for other commands here, if you like
  return 0
}
trap checkcommand DEBUG

好みに合わせてロジックを調整してください。

(実際には、このアプローチが有用であるとは思っていません。コマンドを破壊的に台無しにして、1 つずつテストしているのを見つける方法が多すぎます。しかし、質問に対する文字通りの答えが得られます)。


たとえば、rmrf を使用できるようにトレーニングできますか? rm -rf の代わりに ?

その場合、この bash 関数は、コマンドを確認する前に実際に何が起こるかを確認する機会を提供します:

rmrf() { echo rm -rf "[email protected]"; read -p "Proceed (y/N)? "; [ "${REPLY,,}" = y ] && rm -rf "[email protected]"; }

この関数を永続的にするには、この行を ~/.bashrc に追加します

一般的な rm との比較 エイリアス

エイリアスを定義するのが一般的です:

alias rm='rm -i'

これには 2 つの制限があります:

<オール>
  • このエイリアスに依存するようになると、それがないマシンまたは環境にいるときにショックを受けます。対照的に、rmrf を実行しようとすると、 その機能のないマシンでは、無害な command not found を返します .

  • -f が コマンド ラインで指定したオプションは、-i をオーバーライドします。 エイリアスのオプション。


  • Linux
    1. Linuxでの「su」コマンドと「su-」コマンドの違い

    2. 配管とコマンド拡張の違いは?

    3. Linuxでユーザーをロックおよびロック解除する方法

    1. Linuxでの「su」コマンドと「su-」コマンドの違いを学ぶ

    2. カーネルスタックとユーザー空間スタック

    3. 検索コマンドの '{}' と {} の違いは?

    1. [Linux]:「rm-rf」コマンドの誤った実行を防ぐ方法

    2. コマンドライン(bash)の「And」の違い??

    3. #の間にスペースは許可されていますか?そして/bin/ bash In Shebang?