プログラムで生成されたすべてのファイル/ディレクトリを削除する方法はありますか?

プログラムで生成されたすべてのファイル/ディレクトリを削除する方法はありますか?

ファイルとディレクトリが散在する複数の場所にプログラムがインストールされています。このファイルとディレクトリを手動で削除する必要があります。次のように、ユーザーが作成したファイルとディレクトリを削除できることがわかります。

# find /home -user student -exec rm -rf {} \;

削除したいファイルとディレクトリを含むプログラムの名前を指定して、プログラムで同じことを行う方法はありますか?

答え1

Hans Martin Mosnerが彼の答えで言ったように、どのプログラムが特定のファイルまたはディレクトリを作成または変更したかを識別するための情報は保存されません。

ただし、findプログラムを使用してコンテンツを見つけることができます。可能作成または変更します。まず、「タイムスタンプファイル」を作成してからプログラムを実行します。実行後、findタイムスタンプファイルに関連するタイムスタンプに基づいて変更されたすべてのファイルを検索するように求められます。

  1. タイムスタンプファイルの生成:

    touch stamp
    
  2. プログラムを実行してください。

  3. findタイムスタンプファイルよりも編集時間が最新のコンテンツを見つけるには、次の手順を実行します。

    find / -newer stamp
    

    または、どのユーザーがファイルを所有する必要があるかを知っている場合

    find / -user someuser -newer stamp
    

find/変更が発生した特定のサブディレクトリの最上位検索パスを絞り込むことができない場合、このコマンドを実行するのにかなり長い時間がかかることがあります。また、find上記のコマンドで生成されたすべてのパス名に注意してください。実行中の特定のプログラムに触れていない可能性があります。。ファイルが生成された後、他の多くのプログラムが実行されている可能性があり、stampファイルを作成または変更した可能性があります。

答え2

プログラムを実行する前にこれを知っている場合は、プログラムを特別なグループにset-gidタグ付けできます。

おそらくこれを実行してやり直して、配置された場所を確認できます。

答え3

プログラムがファイルに書き換えられるようにすることができれば役立ちtracefileます。

tracefile -ue bash -c 'seq 10 | xargs -n1 touch'

https://gitlab.com/ole.tange/tangetools/-/tree/master/tracefile

答え4

カーネルインタフェースのようにプログラムの実行に集中したいことを事前に知っている場合、または監査証跡を記録できる場合(またはそうであるかもしれませんが、sysdigこれは遅く、追跡したいプログラムに完全なラッパーが必要です)実行されないことを願っています。 。また、他のプログラムが関連プログラムから出力を生成するときに何が起こるのかを考慮する必要があります。また、子プロセスが実行するタスクを追跡する必要がありますか?SystemTapstracesudo

perl -e 'qx(echo subshell-io > foo)'

すべてのプログラムが連絡するすべてのファイル(およびユーザーとグループ、親プロセスpidなどのような他のメタデータ)に対する監査証跡を持つことは確実に可能です。ただし、セットアップ、構築、およびメンテナンスの費用がかかります。ディレクトリの書き込みを除外するためにレコードをフィルタリングする方法、複数の/tmp書き込みpasswd.tmp/rename("passwd.tmp","passwd")呼び出しを単一の論理演算に集約する方法、興味のあるプログラムの修正ケースを処理する方法が必要な場合があります。/etc/passwd(他の多くの共有OSファイルの中で)プログラム後のクリーンアップ中に盲目的に削除したくないでしょう。または、dbusを使用してプログラムの委任されたI / Oを処理する方法と、dbusを使用する他のプロセスをどのように処理しますか?プログラム内の任意の非I / Oメッセージが他の場所でI / Oを生成しますか?

関連情報