web-dev-qa-db-ja.com

パッケージに由来しないファイルをリストする

多くのファイルは、パッケージによってファイルシステムにインストールされます。

  • notのファイルをリストするにはどうすればよいですか?つまり、ソフトウェアを手動でコンパイルしたり、ドキュメントを作成したりするなど、ユーザーが作成しました。
  • パッケージからのファイルをリストする方法はありますが、変更されていますか?何を変更したかを確認します。

これは、プロジェクトで私が内部で使用されるカスタムメイドの画像を更新するのに役立ちます。また、自宅で再インストールするときに、自分がやったことを忘れてしまいました。もちろん、最も興味深いのはホームディレクトリの外ですが、たとえばホーム内のドット構成ファイルの変更も興味深いものです。

5
n611x007

あなたの質問に文字通り答えるために、この方法でパッケージから来ていないファイルをリストすることができます:

find / -xdev -type f | sort >/tmp/root.files
sort /var/lib/dpkg/info/*.list >/tmp/installed.files
comm -23 /tmp/root.files /tmp/installed.files

もちろん、ホームディレクトリ内のすべてのファイルが含まれます。 -Pruneディレクティブを追加することで、findコマンドでいくつかのディレクトリをスキップできます(アクションが存在しない場合にのみ-printアクションが暗示されるため、残りを印刷するには-printも追加する必要があります)。

find / -xdev -type f -path /home -Prune -o -path /var -Prune -o -print | sort >/tmp/root.files

ファイルが変更されたかどうかを確認するには、そのチェックサムを/var/lib/dpkg/info/$PACKAGE.md5sumのチェックサムと比較できます。すべてのファイルを比較する場合(非常に時間がかかります):

for p in /var/lib/dpkg/info/*.list; do
  diff <(md5sum $(cat $p) | sort) <(sort ${p#.list}.md5sums);
done

パッケージに由来するファイルを変更するべきではないため、これは必要ありません。また、システムディレクトリに独自のファイルを追加しないでください。

構成ファイルを変更すると、/etcに置かれます。これは、システムファイルを変更する必要がある唯一の場所です。 etckeeper パッケージをインストールして、/etcの変更を追跡します。 Sudo etckeeper initを実行すると、/etcがバージョン管理されます(デフォルトでは Bazaar )。

システム全体にソフトウェアをインストールする場合は、/usr/localの下にインストールしてください。 /bin/sbin/lib(異常なハードウェアがあるために手動でインストールされたカーネルモジュールを除く)、または/usr(自分用の/usr/localを除く)には触れないでください。

ホームディレクトリ内のすべてのファイルは、あなたが作成したものです(アカウントの作成時に/etc/skelからコピーされた一握りを除く)。どのオプションがアプリケーションのデフォルトで、どのオプションが設定オプションを選択した結果であり、どのオプションが現在の状態(開いているファイル、コマンド履歴など)を記録するかを追跡する一般的な方法はありません。

5
Gilles

2番目のポイントでは、debsums -ac(同じ名前のパッケージから)を使用して、変更されたすべてのパッケージファイル(構成ファイルを含む)を一覧表示できます。

3
Christian David