2013-07-03 12 views
5

ファイルを安全に削除するには、os.remove(path)の機能はディレクトリエントリのみを削除しますが、ファイルを安全に削除したい場合は、「安全な空のゴミ箱」というようなファイルをランダムに上書きしますファイル。このメソッドを使用してファイルを安全に削除する関数は何ですか?Pythonは安全にファイルを削除します

+1

これはプログラミング言語の機能ではありません。これはファイルシステム/オペレーティングシステム/ストレージデバイスの機能です。 – Elazar

+0

IIRCのSecure Erase Trashが実際に行うことは、すべてのファイルのリンクを解除した後、ただちにシングルパスのランダム消去を行い、バックグラウンドで標準の35パスの消去を開始することです。 – abarnert

答えて

7

srmを使用すると、ファイルを安全に削除できます。 Pythonのos.system()関数を使用してsrmを呼び出すことができます。

+0

ありがとう、私はあなたの答えを受け入れるでしょう。 –

+2

いつもの理由から、 'os.system'ではなく' subprocess.check_call'を使用したいと思います。シェルを起動する際のパフォーマンスヒットやハイジャックの可能性などは必要ありません。手動で行うことを忘れてしまったり、実際にはいないときにファイルを安全に消去したと仮定するのではなく、 。 – abarnert

+1

これは私によく役立った。ありがとう。 – chilliefiber

5

Pythonで非常に簡単に関数を書いて、ランダムなデータでファイルを上書きしたり、繰り返しても削除したりできます。このような何か:

import os 

def secure_delete(path, passes=1): 
    with open(path, "ba+") as delfile: 
     length = delfile.tell() 
     for i in range(passes): 
      delfile.seek(0) 
      delfile.write(os.urandom(length)) 
    os.remove(path) 

srmに砲撃は、しかし、より高速である可能性が高いです。

+0

これはいい考えですが、 'os.urandom(n)'の代わりに 'random.seed()'を使う利点があります。 –

+1

'os.urandom'はおそらくもっと速くなるでしょう一度に1バイト以上。すべてのランダムデータをメモリに保持する必要を避けるために、ランダムなデータをチャンク(一度に256Kから1MBまで)で生成する必要があります。おそらく 'srm'と同じくらい速いでしょう。 – kindall

+0

これは 'srm'を使うほど安全ではなく、それほど速くないかもしれません。 Gutmanアルゴリズムは、何十年もの間、正当な理由のために標準化されてきました。また、いくつかのプラットフォームでは 'srm'は、いくつかのハードドライブに組み込まれた" Secure Erase "を利用します。 – abarnert

4

srmを使用することができます。確かに、いつでも簡単にPythonで実装できます。ファイルの内容を上書きするデータについては、wikipediaを参照してください。実際のストレージ技術によっては、データパターンが大きく異なる可能性があることに注意してください。さらに、ファイルがlog-structured file systemにある場合、またはbtrfsなどのコピーオンライトの最適化を使用するファイルシステムであっても、ユーザー空間からの目標はunachievableである可能性があります。

ファイルの格納に使用されたディスク領域をマッシュアップしたら、ファイルハンドルをos.remove()で削除します。

また、ファイル名のトレースを消去したい場合は、ディレクトリのinode構造(リニア、btree、ハッシュなど)にもよりますが、同じディレクトリに無作為に指定されたファイルをたくさん割り当てて再割り当てすることができますあなたが実際に古いファイル名を上書きすることを保証するのは非常に難しいかもしれません。

+1

+1。しかし、いくつかのプラットフォーム/ファイルシステムでは、ユーザスペースからの安全な消去を行うことができますが、kernel/libc/fsによって提供される特別なAPIを使用することによってのみ可能です。これは 'srm'を使うことを意味しますが、Pythonで書くことは何もありません(特別なAPIを' ctypes'しない限り)。 – abarnert

+1

一方、あなたのプラットフォーム(またはそれを持っていないプラットフォームでは、少なくとも 'srm')では' srm'を調べる価値があります。例えば、Cをまったく知っていれば、[OS X 10.8](http://www.opensource.apple.com/source/srm/srm-7/srm/src/)のソースはかなりシンプルで、 fts'(これはPythonの 'os.walk'に似ています)。そこには他のことはほとんどありません。 – abarnert

関連する問題