rmで削除したファイルを復元できる lsof


使用用途

・rmで間違えて消してしまったファイルを復元したい時に使う。

注意

  • 消去したファイルを開いているプロセスが存在している時のみ可能。
  • rm はinodeへのリンクを削除しているだけであって、inodeそのものを消しているわけではないので、inodeへの全てのリンクが失われない限りinodeとデータは失くならない。
  • ファイルを開いているプロセスが存在していればそこから/proc/【プロセスID】/fd/を辿り復元する事ができる。

使い方

sqlのコマンド
$ touch hoge.txt                  // ファイル作成
$ vi hoge.txt                    // ファイル内に書き込む
※このファイルに下記の内容を書き込んだ
ファイルを消してしまった。
でも復元できる。
$ less hoge.txt                 // ファイルの中身を見る
※ Control + z で less を終了
$ rm hoge.txt                  // ファイル削除
$ lsof | grep "hoge.txt"  // 現在開いているファイルの中でhoge.txtが入っているファイルを返す
less  12345  hoge  4r  REG  259,1  33  59166498 /home/hoge/hoge.txt (deleted)
※2つ目がプロセスID、4つ目がファイル記述子
$ cp /proc/12345/fd/4 ./
$ cat 4
ファイルを消してしまった。
でも復元できる。

ファイルに書き込んだ内容が復元できた。

説明

less

  • ファイルの中身を見る。
  • Control + z で less を終了

lsof

  • 現在開いているファイルを一覧表示する

grep

  • 指定した文字列を検索するときに使うコマンド

proc

  • ディレクトリ。

  • ハードディスクやSSDなどのストレージ上ではなく、メモリの中に作られるファイルシステム。

  • procにあるファイルは普通のファイルではなく、仮想ファイルという特殊な形式。

  • lsof | grep "hoge.txt"で出てきた2つ目がプロセスID、4つ目がファイル記述子("4rの"r"は"regular file"の略であり、通常のファイルを意味する)