Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

Linuxで誤って削除したファイルを復元する方法:予防策から復旧手順まで徹底解説

こんな経験はありませんか?Delキーを押してしまったり、コマンドラインでrmを実行してしまい、うっかり重要なファイルを削除してしまった瞬間に気づく——。

前者の場合は、ゴミ箱を開いて該当ファイルを探し、元の場所に戻せば解決します。しかし後者、つまりrmコマンドを使ってしまった場合はどうでしょうか?ご存じの通り、Linuxのコマンドラインは削除されたファイルをどこにも退避させません。完全に消去します。そう、ファイルは失われてしまうのです。

この記事では、こうした悲劇を未然に防ぐためのテクニックと、万が一うっかり削除してしまった場合に活用できる復元ツールをご紹介します。

「rm -i」へのエイリアスを作成して誤操作を防ぐ

-iオプションをrmコマンド(cpやmvなど他のファイル操作コマンドでも同様)に付けて使用すると、ファイルを削除する前に確認プロンプトが表示されます。

このプロンプトは、同じ名前のファイルが既に存在する場所へコピー・移動・リネームする際にも表示されます。

この確認画面によって、「本当にこのファイルを削除してよいか」を再考する二度目のチャンスが得られます。ただし、プロンプトで「y」と答えてしまえばファイルは消えてしまいます。その場合は残念ながら、この対策でも自分自身の不注意から守ることはできません。

rm'rm -i'のエイリアスに置き換えるには、以下のコマンドを実行します:

alias rm='rm -i'

aliasコマンドで、rmがエイリアスとして登録されたことを確認できます:

Linuxで誤って削除したファイルを復元する方法:予防策から復旧手順まで徹底解説

エイリアス設定を永続化する方法

ただし、上記の方法では現在のシェルセッション中しか有効になりません。変更を永続化するには、以下のように~/.bashrc(ディストリビューションによっては~/.profile)に保存する必要があります:

Linuxで誤って削除したファイルを復元する方法:予防策から復旧手順まで徹底解説

~/.bashrc(または~/.profile)への変更を即座に反映させるには、現在のシェルからファイルを読み込みます:

. ~/.bashrc
Linuxで誤って削除したファイルを復元する方法:予防策から復旧手順まで徹底解説

フォレンジックツール「Foremost」でファイルを復元する

普段からファイル管理に注意していれば、このツールが必要になるのは外部ディスクやUSBドライブからファイルを復元するときだけかもしれません。

しかし、システム内のファイルを誤って削除してしまったことに気づき、パニックになりそうなとき——落ち着いてください。まさにこのようなシナリオのために設計されたフォレンジックツールForemostの出番です。

Foremostのインストール方法

CentOS/RHEL 7にforemostをインストールするには、まずRepoforgeリポジトリを有効にする必要があります:

# rpm -Uvh https://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
# yum install foremost

Debianおよびその派生ディストリビューションでは、以下のコマンドだけでインストールできます:

# aptitude install foremost

実際にファイルを復元してみる

インストールが完了したら、簡単なテストを行いましょう。まず、/boot/imagesディレクトリからnosdos.jpgという画像ファイルを削除します:

# cd images
# rm nosdos.jpg

このファイルを復元するには、以下のようにforemostを使用します(まず対象パーティションを特定する必要があります。この例では/boot/dev/sda1に存在します):

# foremost -t jpg -i /dev/sda1 -o /home/gacanepa/rescued

ここで/home/gacanepa/rescuedは別のディスク上のディレクトリです。削除されたファイルがあったのと同じドライブ上で復元作業を行うのは賢明ではない点に注意してください。

復元中に、削除されたファイルがかつて占めていたのと同じディスクセクターを使用してしまうと、何も復元できなくなる可能性があります。さらに、復元作業を実行する前にすべての作業を停止することも重要です。

foremostの実行が完了すると、復元できたファイル(復元が成功した場合)は/home/gacanepa/rescued/jpgディレクトリ内に格納されます。

まとめ

この記事では、ファイルを誤って削除しないための予防策と、万一削除してしまった場合の復元方法について解説しました。ただし注意点として、foremostはパーティションのサイズによっては実行にかなりの時間がかかることがあります。

ご質問やコメントがありましたら、お気軽にお寄せください。下記のフォームからメッセージをお送りいただけます。

  1. 【保存版】シェルスクリプトでLinux変数を完全理解する方法 – declareコマンド徹底活用(パート10)

    Linuxのシェルスクリプト言語は、昔から根強い人気を誇るテーマであり、今後もずっと注目され続けるでしょう。シェルスクリプトはまるで魔法のように、他のプログラミング言語と同等の手軽さでプログラムを作成できます。ただし、自分が何を行っているのか、どんな結果が期待できるのかを深く理解しておくことが重要です。 これまでお届けしてきたシェルスクリプト入門シリーズは、前回の「Linux変数の徹底解説」を含め、多くの読者様から高い評価をいただいています。本記事では、その内容をさらに一歩深掘りしていきます。 変数の属性とは Linux環境のそれぞれの変数には固有のオプションが存在し、これらは「属性」と呼ば

  2. シェルトレース活用ガイド:シェルスクリプトのコマンド実行をトレースしてデバッグする方法

    シェルスクリプトデバッグシリーズの本記事では、3つ目のデバッグモードであるシェルトレース(shell tracing)について解説します。具体的な例を通じて、その仕組みと実際の使い方を見ていきましょう。 シリーズの前回までの記事では、残り2つのデバッグモードであるverboseモードと構文チェックモードについて、わかりやすい例とともにシェルスクリプトのデバッグを有効化する方法を紹介しました。 Linuxでシェルスクリプトのデバッグモードを有効にする方法 – Part 1 シェルスクリプトで構文チェックによるデバッグを行う方法 – Part 2 シェルトレースとは何か シェルトレースとは、シ