ファイルがコピーされたことを確認するには?

ファイルがコピーされたことを確認するには?

ファイルがUSBドライブにコピーされたことを確認する方法はありますか?

(たとえば、友達が自分のUSBドライブにコピーしたと思われるSecret.dbファイルがあります。更新されたタイムスタンプがないstat $filenameため、更新されたa / c / m / timeを見ることはできません。)cp

知る方法がありますか、それとも不可能ですか?

Bash v4でUbuntu 12.04を使用しています。

答え1

要約:多くの場合、ファイルにアクセスしたことを確認できますが、コピーされたかどうかを知る方法はありません。

そうだatime 更新されますただし、使用時にcpnoatime無効な場合)他の読み取り操作(例grep somestring $filename:)を実行してもファイルが破損します。

ほとんどのインストールでは(広範な監査なしで)見つけることは不可能です。なぜ正確にどのファイルを読み取ったのか、ファイルを読み取るプロセスがデータのコピーを別の場所(USB、ソケット、RAMで?)記録しましたか?

また、これは権限のないオンライン攻撃にのみ適用されます。物理的にアクセスできる場合は、ライブCDディストリビューションで再起動し、パーティションを読み取り専用でマウントしてからコピーできます。何もない閉じるかディスクイメージ全体を作成すると、パーティションにマークがありません(増分マウントカウンタを除く)。

答え2

Pythonスクリプトを使用して問題を解決しました。ループ内のファイルサイズが増加することを確認するアイデアです。必要に応じてtime.sleepを設定する必要があります。私の場合、ファイルサイズが増えるかどうかを確認するのに0.05秒しかかかりませんでした。前のサイズ確認を繰り返し実際のサイズを確認したときに入力されたサイズと同じ場合、確認は終了します。

dict は 'dict={}' で初期化される辞書型です。

               if not filename in dict:
                #new item...
                time.sleep(0.05)
                dict = {filename: os.stat(fullInFilename).st_size}
                break #next iteration loop, that finds itself again
            else:  # already exists in dict, copying finished?
                time.sleep(0.05)
                sizeRegistrado = dict[filename]
                sizeActual = os.stat(fullInFilename).st_size

                if sizeActual != sizeRegistrado:
                    # still copying...
                    dict[filename] = sizeActual
                    print(sizeActual)
                    break
                else:
                    # Done copying
                    #print("pop!")
                    dict.pop(filename)

関連情報