これbash
は単なる実行環境であることを理解する必要があります。それはあなたが呼び出すコマンドを実行します-コマンドが何をするのかさえ知ることはシェルの仕事ではなく、あなたはあなたが望む実行可能ファイルを呼び出すことができます。ほとんどの場合、アンドゥが何をするのかさえ明確ではありません-例えば、映画を「アンプレイ」できますか?電子メールを「送信解除」できますか?たとえば、「実行中のFirefoxを元に戻す」とはどういう意味ですか?閉じてもかまいませんが、ブックマーク、ダウンロード、履歴は同じではありません。
コマンドを実行すると、コマンドは何でも実行されます。あなたが何をしているかを知るのはあなた次第です。これは、個々のコマンドに「元に戻す」機能がないことを意味するわけではないことに注意してください。
たとえば、mv
何かを上書きしない限り、元の場所にファイルを戻すだけで簡単に元に戻すことができます。そのため-i
、上書きする前に確認するスイッチが存在します。技術的にcp
はrm
、何かが上書きされない限り、isの逆です(もう一度、-i
それについて尋ねられます)。rm
より永続的で、ファイルを取り戻すには、実際に低レベルのハッキングを行う必要があります(そのためのツールがあります)。ファイルシステムをブラックボックスと見なした場合、技術的にはまったく不可能です(データの論理的および物理的レイアウトの詳細によってのみ、何らかの損傷制御が可能になります)。rm
手段は、rm
あなたが「ごみ箱」機能が必要な場合は、それだけで、実際のですmv
事前に準備されたディレクトリ(および場合によっては、それを維持または空にするためのスケジュールされたサービス)に入れます-それについて特別なものはありません。ただし、-i
削除する前にプロンプトを表示するために使用できます。関数またはエイリアスを使用して-i
、これらのコマンドに常に含めることができます。
ほとんどのアプリケーションは、さまざまな方法でデータ損失から保護しています。ほとんどの(〜すべての)テキストエディター~
は、古いバージョンを戻す場合に備えて、最後にバックアップファイルを作成します。一部のディストリビューションでls
は、デフォルトでエイリアスされているため、非表示になっています(-B
)が、それらは存在しています。アクセス許可を適切に管理することにより、多くの保護が与えられます。必要になるまでrootにならず、変更したくない場合は読み取り専用にしてください。「サンドボックス」環境があると便利な場合があります-コピーで物事を実行し、問題ないか確認してから、変更をマージ(または変更を破棄)します。chroot
またはlxc
、スクリプトがディレクトリから脱出し、損害を与えることを防ぐことができます。
物事を一括して実行しようとする場合-たとえば、複雑なfindコマンド、whileループ、長いパイプラインなどが存在する場合、最初echo
に実行するコマンドのみを作成することをお勧めします。次に、コマンドが適切に見える場合はecho
、実際に削除して実行します。もちろん、自分が何をしているか本当にわからない場合は、最初にコピーを作成してください。現在のディレクトリのtarballを作成することがあります。
タールボールといえば、残念ながらタールボムとジップボムは非常に一般的です(適切なサブディレクトリなしでアーカイブを作成し、解凍するとファイルが散らばって混乱する場合)。展開する前に自分でサブディレクトリを作成することに慣れました(内容を一覧表示できましたが、私は怠け者です)。内容がサブディレクトリなしでアーカイブされた場合にのみ、サブディレクトリを作成するスクリプトを作成することを考えています。ただし、実際に発生した場合は、ls -lrt
最新のファイルを見つけて、それらが属する場所に配置するのに役立ちます。私はこれを例として挙げました-プログラムには多くの副作用がありますが、シェルはそれを知る方法がありません(どうしてできますか?呼び出されている別のプログラムです!)間違いを避ける唯一の確実な方法は注意することです2回、1回実行)。
おそらく最も危険なコマンドは、ファイルシステムを処理するコマンドです:mkfs、fdisk / gdiskなど。ファイルシステムを完全に破壊する可能性があります(ただし、適切なフォレンジックソフトウェアを使用すると、少なくとも部分的なリバースエンジニアリングが可能になります)。コマンドを実行する前に、フォーマットするデバイスを常に再確認し、パーティションが正しいことを確認してください。