Subject: How do I "undelete" a file?
Date: Thu Mar 18 17:16:55 EST 1993

3.6) "rm"してしまったファイルを復活するには。

ある日、あなたは偶然に 'rm * .foo' とタイプしてしまい、'*.foo' の代りに '*' で削除されてしまったのに気がつくでしょう。それは通過儀礼だと思って 下さい。

もちろん普通のシステム管理者は、定期的バックアップを行っているはずで す。あなたのファイルの最近のバックアップが利用可能かどうかシステム管理 者に聞いて下さい。そうでなければ、この記事を読んで下さい。

事実上、'rm' を用いてファイルを削除した時点で、ファイルはお亡くなりに なってしまいます。ひとたびファイルを "rm" すると、システムはディスクの 中でファイルを構成していた、ばらばらに配置されたブロックを完全に忘れて しまいます。さらに悪いことに、システムがさらなるディスクスペースを必要 とした場合、まず最初にあなたが削除したばかりのブロックが取られ、上書き されてしまうでしょう。しかし、決して無理だという訳ではありません。'rm' した後にデータの部分を取り戻すことは、理論的には、あなたがすぐにシステ ムをシャットダウンすれば可能です。しかし、何日も何時間もかけて、すべて を取り戻すようなたいそう wizard な人を手近においておくほうがよいでしょ う。

誤ってファイルを rm してしまったときの最初の反応は、「なんで rm を 『ファイルを消してしまう代りに、ゴミ箱にほうり込む』といった手続きや シェルの alias にしておかなかったのだろう」と言うことでしょう。この方法 ならば、誤って消してしまったファイルを取り戻すことがでます。あとは定期 的にゴミ箱をきれいにすればよろしい。

注意点は2つ:

まず、一般に最初にこれは悪い考えとされています。あなたは "rm" の動作に 依存するようになります。そして、いつか "rm" が本当に "rm" であるような システムが普通であるのがわかり、トラブルに巻き込まれるでしょう。第2 に、ゴミ箱の管理にかかる時間とディスクの分配をめぐって口論が起き、rm を もう少し気をつけて使う方が簡単だとわかるでしょう。初心者は、man の中の 'rm' の '-i' オプションを見ると良いでしょう。

まだひるまないのなら、もっとも単純な答えを用意しましょう。あなたは trashcan ディレクトリにファイルを動かす `can' コマンドを作ればよろし い。

csh(1) では、ホームディレクトリの '.login' ファイルに次のようなコマンド をおきます。

    
alias can'mv ¥!* ‾/.trashcan'# junk file(s) to trashcan
alias mtcan'rm -f ‾/.trashcan/*'# irretrievably empty trash
if ( ! -d ‾/.trashcan) mkdir ‾/.trashcan # ensure trashcan exists
logout したときに自動的にゴミ箱が空になるように、
rm -f ‾/.trashcan/*
というのを '.logout' ファイルの中に置くのも良いでしょう(sh と ksh バー ジョンは読者のための練習としておきます)。

MIT の Athena プロジェクトは、ファイルを取り戻すことを可能にする "rm" を完全に置き換えることができる包括的な delete/undelete/expunge/purge パッケージを作りました。このパッケージは、 comp.sources.misc に投稿さ れました(volume 17,issue 023-026)。


UNIX FAQ LIST / Copyright(c)1994,Ted Timar / tmatimar@isgtec.com


Maintainer: あさだ たくや