Debianシステムで変更された設定ファイルを確認する方法は?


回答:


78

デフォルトから変更されたすべてのDebian管理設定ファイルを見つけるには、次のようなコマンドを使用できます。

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK/{print $1}'

編集(ローカライズされたシステムで動作):

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | LANG=C md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK/{print $1}' | sort | less

編集(ファイル名にOKを含むパッケージを使用):

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | LANG=C md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK$/{print $1}' | sort | less

Ubuntu 10.4でチャームのように動作します。私は何千回も賛成します:-)
ルートヴィヒヴァインツィール

よく働く。md5sum --quietただし、OKファイルのフィルタリングを回避するために使用できますawk(ローカライズの問題は?)。ちなみに、/ etc内に追跡されていないファイルを含める方法がわかりませんか?たとえば、/ etc / apache2 / sites-availableにあるようなものですか?
-sfussenegger

私の答え(debsums -ec)が実際にどのように機能するかを知るのは面白いでしょう。
naught101

また、明らかにパッケージのバージョンが確認されるのはconfファイルのみです。この方法debsums -ecを使用してパッケージのバージョンを復元すると、この方法でリストされたファイルの一部は変更されません。
naught101

どの構成変更が保留中または廃止されているかを確認するための追加チェックとしてfind /etc -type f \( -iname '*.ucf-dist' -o -iname '*.ucf-old' -o -iname '*.dpkg-old' -o -iname '*.dpkg-dist' \) -print | sort
sphakka

47

からman debsums

  debsums -ce
          List changed configuration files.

1
これは、最も単純で最良の答えです。
mfisch

1
デフォルトではdebsumsのみがインストールされていないため、インストールしない場合があります。
アレクシスウィルク

1
@AlexisWilke:それは218kbであり、最小限の依存関係があります
...-naught101

11

necroには申し訳ありませんが、@ naught101の回答は変更されたファイルに対しては正しいものの、追加されたファイルには役立ちませんでした。@Graemeのソリューションは優れていますが、etckeeperに依存しています。ファイルシステムを変更したくありません。

find /etc -type f | grep -vFf <(debsums -e -r /etc | sed 's/[[:space:]]*OK$//')

の/ etc /その内のファイル検索しdebsumsないではないとして、有効なレポートを。これは、追跡されていないファイルまたは「OK」ではないファイル(ハッシュが一致しない)を意味します。


またdebsums --list-missing、1つ以上のパッケージに含まれているファイルのチェックサムが欠落しているかどうかを確認するために実行する必要があります。現在、出力は空になっているはずです。
ミッコランタライネン


6

またはdebsums -e | 不足しているすべてのconffileも表示されるgrep FAILED

(debsumsパッケージから)


2

これはやり過ぎかもしれませんが、誰かがetckeeperに言及していたので、調査中に、「事後」に物事を理解しようとする場合に役立つ他の宝石に出会ったことがあります。

http://devstructure.com/blueprint/

ブループリントは、サーバーをリバースエンジニアリングするシンプルな構成管理ツールです。手動で行ったことを把握し、Gitリポジトリにローカルに保存し、作業を再作成できるコードを生成し、それらの変更を運用環境に展開するのに役立ちます。


Python-3がサポートされているかどうかは、ホームページからはわかりません(少し時代遅れに見えます)。誰か試してみましたか?
sphakka

数年前に最後にアクティブになったGitHubリポジトリから判断すると、そのままでPython3で動作するのにあまりお金をかけないでしょうが、それはかなりよく書かれているように見えるので、Python3に追加するのに多大な労力はないかもしれませんサポート。
dragon788

1

これは、変更されたものだけではなく、追加された構成ファイルも提供するという点で、元の質問とは少し異なります。debパッケージに含まれていないファイルもキャッチされますが。両方の動作が望ましい場合があります。

最初のコミット後に以前に変更したファイルを追加してコミットする場合にも機能するはずですが、理想的にはgit vcsでetc keeperを使用することに依存します。ここで注意すべき点は、Ubuntuはetckeeperを、etckeeper開発者が設定したgitのデフォルトではなく、デフォルトでBazaar(CanonicalスポンサーBazaar)を使用するように設定することです。

アイデアは、実行後に自動的に行われないすべてのコミットのリストを取得し、実行することです。次に、最初のコミット以外のすべてで変更されたファイルをリストします。

filter_sed="/committing changes in \/etc after apt run\$/d"

etckeeper vcs log --oneline |
  sed "$filter_sed; \$d; s/ .*//" |
  xargs etckeeper vcs show --name-only --format=format: |
  sort |
  uniq |
  sed "/^\$/d"

フィルタ文字列は、他のコミットが一貫して名前が付けられている場合、他のコミットを包含するように拡張することもできます。debファイルまたはソースコードから直接インストールするのに適している場合があります。

これが私のために選んだ注目すべきファイルは私のものですxorg.conf-あなたはそれを必要とするなら現在/ etc / X11にこれを追加しなければなりません。また、私のdefault/grub変更が反映されます。これは、パッケージの一部としてリストされるのではなく、インストール後のスクリプトによって/ usr / shareからコピーされたようです。このようなファイルに変更が加えられた場合、dpkg関連のメソッドはそれを明らかにしません。


1
FYI、git log今持っている--invert-grepを使用せずに興味のないコミットをフィルタリングすることができますオプションをsed
ニールメイヒュー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.