LinuxをGUIを使わずコマンドで使用している場合では通常Windowsのようなゴミ箱のように消去したファイルが一旦保管されるというシステムはありません。
なのでrmを使ってファイルを消してしまうと本当にその場で全て消えてしまいます。
消えてしまったものをリカバーしようと思って検索してこのページにたどり着いた人には申しわけありませんが、何か先に対策をしていなかった限り残念ながら復旧はできません。
できることはこれからそれが起きないようにすることだけです。なので今回は大事なディレクトリやファイルをコマンド一発で間違えて消去してしまう、ということがないように対策する方法をご紹介します。
私の失敗談
私も実は間違えて全消去を二度やってしまったことがあります。
一度目で対策をしておけばよかったのに、コマンドをちゃんと確認するようにしよう、と思って終わり。
そして先日、作業が終わったディレクトリがいらなかったので消そうと思い、rm -rf dir/* と打つつもりが、rm -rf dir/ *つまり、dir/と*(全て)を消してしまったのです。dirを消したかったのにその上の階層でコマンドを打ってしまったので、一個上の階層まるごと消えてしまいました。
rmコマンドの-rはrecursive、中の全てのディレクトリやファイルを含むというオプション、-fはforce、本来は本当に消去しますか?と確認するものも含めて全て消す、というオプションです。
取り返しのつかないものではなく、ほとんどはサーバー上にバックアップがとってあったのでなんとかなりました。一つだけ大事なスクリプトが消えてしまいましたがアイディア自体は覚えていたので、書き直して、数時間無駄にはしましたが、ひとまず良かったです。
これがもしさらに上の階層だったら…他の人との共有ディレクトリだったら…さらに悪いことは考えられます。
とにかくこれからそういうことがないように、大事なディレクトリにはロックをかける…などできるのかなと思い調べてみました。
予期せぬ消去を防止
読み込み限定にするなどの方法もありますがそれだと編集するたびにパーミッションを変更しなくてはならないので面倒です。
私はコマンドミスに気付ければそれで良いと思うので、大事なフォルダでは消去前に確認する、がいいなと思いました。
そこで見つけたのがStack Exchangeで紹介されているこの方法です。
他にもいくつか方法が見つかりましたが、私はこの方法がいいなと思いました。
要約すると
“touch ./-i”コマンドを使い、”-i”という名前のファイルを大事なフォルダに作る。
(touchはファイルを作成するコマンドです。)
そうすることで”rm *”した時に*が-iに置き換わってが読み込まれることで”rm -i”に代わり、-iは消去前に確認をするというコマンドなのですぐには消去されず、yかnを聞いてきます。
-iは-fをつけていても有効なので、rm -rf *をしてしまった場合でも確認されるようになります。
ただこの方法は-iというファイルが必要な場所すべてにできてしまうので、ディレクトリを全て読み込んで使うような場所では注意が必要かもしれません。
しかしかなり手軽な方法なので、私は大事なディレクトリに-iを置くようにしています。
上記リンクのページでは他にも#を先頭につけてコマンドを書く癖をつけ、実行前に一度確認してから#を消すという方法などが紹介されています。
また全てのファイルを保護するため、消去の度に確認をするという風にしたい場合はrm -iをrmのエイリアスにするという方法が結構色んな人から提案されているようです。でもこれは共有サーバーなどではできないし、実際すぐに消したい場合もあるのでちょっと面倒ですね。
なので私はこの-iを作る方法が、ファイルを作ることに問題がない環境であれば便利だと思います。