この質問は、削除されたファイルを回復する方法に関連していますか?ただし、性質は少し異なります。
~/something
という名前のファイルがあるとします。 テキストエディタで開きます。さらに、ターミナルを開いて、ファイルがまだテキストエディタで開いている間に次のコマンドを実行するとします。
rm ~/something
これにより、ファイルが削除されます。今、気が変わってファイルを取り戻したいと思ったとします。ファイルはまだテキストエディタで開いているため、ディスクまたはファイルシステムからまだ削除されていません 。
それを回復する方法はありますか?
承認された回答:
編集中にファイルを開いたままにしておくテキストエディタがあるかどうかはわかりません。通常(つまりEmacsでは)、ファイルはRAMのバッファーに読み込まれ、ファイルが閉じられます。 RAMでのみ編集します。バッファを保存すると、ファイルが開かれ、書き込まれ、再び閉じられます。 ps auxw | grep your_editor
エディターのPIDを見つけるには、lsof -p your_PID
まだ開いているファイルを確認します。
一方、ファイルがまだエディタのバッファにある場合は、保存するだけです。
しかし、それはあなたの質問ではなかったので、cat
を使用しているとしましょう。 あなたの編集者として、そしてファイルは本当にまだ開いています:
% cat >the_file.txt
Hello world!
^Z
zsh: suspended cat > the_file.txt
% rm the_file.txt
% ls -l the_file.txt
ls: cannot access the_file.txt: No such file or directory
lsof -n
を使用できます 開いているすべてのファイルとgrep
を表示するには ファイル名を検索します。
% lsof -n | grep the_file.txt
cat 2145 elmicha 1w REG 9,1 13 108003357 /home/elmicha/tmp/the_file.txt (deleted)
2番目の列には、cat
のPIDが表示されます。 指図。 /procファイルシステムの対応するディレクトリとfd
に変更できます。 (ファイル記述子)サブディレクトリ:
% cd /proc/2145/fd
% ls -l
total 0
lrwx------ 1 elmicha elmicha 64 2012-11-07 00:22 0 -> /dev/pts/4
l-wx------ 1 elmicha elmicha 64 2012-11-07 00:22 1 -> /home/elmicha/tmp/the_file.txt (deleted)
lr-x------ 1 elmicha elmicha 64 2012-11-07 00:22 15 -> /proc/4501/auxv
lrwx------ 1 elmicha elmicha 64 2012-11-07 00:22 2 -> /dev/pts/4
これで、「ファイル」1
をコピーできます。 別のファイルへ:
% cp 1 ~/tmp/the_old_file.txt
ほら、そこにあります:
% cat ~/tmp/the_old_file.txt
Hello world!