web-dev-qa-db-ja.com

コマンドラインでMac上の削除されたファイルを回復しました

次のコマンドを実行して誤ってファイルを削除しました:

rm -rf ./Desktop/myScript.sh

rmコマンドは一時的に削除されるため、ファイルを復元することは可能だと思います。 Mac OSXで削除したファイルを復元するにはどうすればよいですか?

25
cat_minhv0

MacOSはUnix OSであり、rmは「さようなら」を意味します。 GUIインターフェイスを使用すると、ファイルをゴミ箱に移動できます(その後、ゴミ箱を復元できます)が、これはあなたが行ったことではありません。バックアップがある場合(たとえば、Time Machineを実行している場合)、保存されます。

説明

厳密に言えば(@ire_and_cursesが指摘するように)rmは、ファイルのディレクトリエントリを削除するだけで、使用中のディスクブロックをそのまま残します。ファイルが存在していたファイルシステムを静止できる場合は、それらのブロックの内容を再検出するための高度な方法があります。損失を回復するために購入できるいくつかの回復ツールもあります。中心的な問題は、ファイルで表されるディスクブロックを再利用するものは他にないということです。

MacOSには、安全な削除コマンド(srm)もあり、ファイルがunlinkedされる前に上書きされ、回復できなくなります。これは、シェルのunlinkコマンドに関連付けられた基本的なシステムコールであるため、rmという用語を使用しています。これにより、このディスカッションの次の部分の準備が整います。

サイドノート

[ディスクを複数回上書きしても、以前に数十回以上書き込まれた内容を読み取る方法はいくつかあります。ディスクを適切に消毒して処分するには、実際に酸浴、大きなハンマー、シュレッダーが必要です。 ]

ファイルをunlinkingすると、ファイルのiノードリンク数が減ります。この値がゼロに達すると、ファイルはファイルシステムディレクトリから削除され、そのディスクブロックは再利用のために解放されます。これはnoプロセスがファイルを開いている場合にのみ発生します。ファイルシステムがディスクブロックの単純な合計(duのようなもの)で説明できない非常に大量のスペースを使用していることを見つけると、管理者はしばしば混乱します。多くの場合、その理由は、開いているファイルが削除されたため、そのディレクトリに表示されなくなったことです。その理由は、ファイルを使用する最後のプロセスが終了するまで、ディスクブロックが未使用のままであるためです。

ファイルを開いてすぐにunlinkingすることは、実際には安全な一時ファイルを作成するための一般的な方法です。 lsofのようなツールは、リンク数(NLINK)がゼロのファイルを探す場合、これらのその他の方法では見えないファイルを公開できます。

UnixおよびLinux(MacOSはブランドUnix)で、rmは、可能であれば、ファンファーレなしで "do-it"のUnix哲学に従います。つまり、ファイルを削除する権限がある場合(つまり、ディレクトリで書き込みが許可されている場合)、rmは要求したとおりのことを行います。操作を実行する前に確認を求めるシェルエイリアスrm='rm -i'を作成できます。 -fスイッチをrmとともに使用すると、必要に応じて上書きされます。エイリアスrmは、globrm *.logのように削除するときに最も役立ちます。つまり、リスト内のファイルをスキップするオプションがあります。

28
JRFerguson

コンテンツに応じて、次のような異なるサードパーティ製ソフトウェアを使用できます。

などなど。

App Storeで「データ復旧」と入力すると、さらに多くのアプリを見つけることができます。


より高度な方法は、OSXをリカバリモードで起動し(または、可能であればパーティションをアンマウント)、手動で探します(スクリプトの特定のテキストを覚えている場合)。

いくつかの例:

diskutil list
Sudo cat /dev/disk0s2 | strings | grep -C20 "my_stuff"
4
kenorb