8.29. Konfigurationsdateien eines Pakets anzeigen

Die meisten Programme verfügen über Konfigurationsdateien, mit denen Sie das jeweilige Programm auf ihre Bedürfnisse individuell einstellen können. Um das tun zu können, hilft es Ihnen, zu wissen, welche Dateien das überhaupt sind und an welcher Stelle im Verzeichnisbaum sich diese Dateien befinden.

Debian macht hier typischerweise einen Unterschied zwischen den Konfigurationsdateien. Es gibt Dateien, die bereits im Paket mitgeliefert werden und Dateien, die erst nach der Installation angelegt werden. Bei ersteren achtet dpkg beim Auspacken von Paketaktualisierungen darauf, dass — sofern bereits vorhanden — erfolgte lokale Änderungen daran nicht überschrieben werden. Diese Dateien nennt Debian "Conffiles".

In fast allen Fällen sind in Paketen enthaltene Dateien, die unter /etc/ liegen, solche "Conffiles" während alle anderen Dateien aus Paketen typischerweise keine "Conffiles" sind. Den Autoren dieses Buches sind zumindest bisher keine Ausnahmen von diesen Regeln bewusst.

Es kommt vor, dass Pakete Dateien unter /etc/ erst bei der Installation anlegen. Das ist inbesondere dann der Fall, wenn deren Inhalt dynamisch generiert wird. Diese sind dann keine "Conffiles" im eigentlichen Sinne, werden aber teilweise von Programmen wie ucf [Debian-Paket-ucf] analog zu Conffiles behandelt. Wie dies gehandhabt wird, hängt vom jeweiligen Paket ab.

Um solche bei Installation oder Aktualisierung eines Paketes erzeugte Konfigurationsdateien aufzufinden, kommt man nicht umhin, direkt in die entsprechenden Verzeichnisse zu schauen. Meistens wird aber zumindest das Verzeichnis schon im Paket mitgeliefert.

Die sogenannten Conffiles sind leicht aufzufinden. Einerseits können Sie wie unter Abschnitt 8.25, „Paketinhalte anzeigen“ beschrieben, alle Dateien eines Paketes auflisten lassen. Praktisch alle so aufgelisteten Dateien im Verzeichnis /etc/ und dessen Unterverzeichnisse sind "Conffiles" und damit auch Konfigurationsdateien. Diese lassen sich typischerweise durch Anhängen von | grep /etc/ an den entsprechenden Befehlen herausfiltern.

Es gibt jedoch ein paar Programme, die diesen Schritt ohne Zuhilfenahme von grep durchführen können. Diese Programme wollen wir Ihnen im Folgenden vorstellen.

Einerseits weiß natürlich dpkg selbst, welche Dateien "Conffiles" sind und welche nicht. Glücklicherweise können wir uns das auch anzeigen lassen. Dazu fragen wir den Status eines installierten Paketes mittels dpkg-query --status ab. Dieser zeigt zwar viel mehr an, als wir wissen wollen, aber die gewünschten Informationen sind dabei.

Da es sich um eine Abfrage der Statusdatenbank von dpkg handelt, wäre die Benutzung von dpkg-query eigentlich besser. Aber da dpkg mehr oder weniger alle dpkg-query-Schalter und -Parameter direkt an dpkg-query durchreicht und es außerdem auch noch die Kurzform -s für --status gibt, gelingt eine Abkürzung des Befehls auf dpkg -s.

Statusabfrage für das Paket bash mittels dpkg -s

$ dpkg -s bash
Package: bash
Essential: yes
Status: install ok installed
Priority: required
Section: shells
Installed-Size: 6469
Maintainer: Matthias Klose <doko@debian.org>
Architecture: amd64
Multi-Arch: foreign
Version: 5.1-2
Replaces: bash-completion (<< 20060301-0), bash-doc (<= 2.05-1)
Depends: base-files (>= 2.1.12), debianutils (>= 2.15)
Pre-Depends: libc6 (>= 2.25), libtinfo6 (>= 6)
Recommends: bash-completion (>= 20060301-0)
Suggests: bash-doc
Conflicts: bash-completion (<< 20060301-0)
Conffiles:
 /etc/bash.bashrc 89269e1298235f1b12b4c16e4065ad0d
 /etc/skel/.bash_logout 22bfb8c1dd94b5f3813a2b25da67463f
 /etc/skel/.bashrc ee35a240758f374832e809ae0ea4883a
 /etc/skel/.profile f4e81ade7d6f9fb342541152d08e7a97
Description: GNU Bourne Again SHell
 Bash is an sh-compatible command language interpreter that executes
 commands read from the standard input or from a file.  Bash also
 incorporates useful features from the Korn and C shells (ksh and csh).
 .
 Bash is ultimately intended to be a conformant implementation of the
 IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).
 .
 The Programmable Completion Code, by Ian Macdonald, is now found in
 the bash-completion package.
Homepage: http://tiswww.case.edu/php/chet/bash/bashtop.html
$

Da das ein bißchen sehr viel Ausgabe ist im Vergleich zu dem, was uns interessiert, juckt es uns in den Fingern, doch wieder grep zu bemühen, um die Ausgabe auf das Relevante zu kürzen:

Filtern nach Conffiles einer Statusabfrage mit dpkg -s

$ dpkg -s bash | grep '^ /'
 /etc/bash.bashrc 89269e1298235f1b12b4c16e4065ad0d
 /etc/skel/.bash_logout 22bfb8c1dd94b5f3813a2b25da67463f
 /etc/skel/.bashrc ee35a240758f374832e809ae0ea4883a
 /etc/skel/.profile f4e81ade7d6f9fb342541152d08e7a97
$

Direkter zur gewünschten Information kommen Sie mit dem Programm dlocate aus dem gleichnamigen Paket [Debian-Paket-dlocate]. dlocate kennt dazu den Schalter -conf gefolgt vom Paketnamen. Wieder zeigen wir das für Kommandozeilen-Shell bash.

Ermittlung der Conffiles zum Paket bash mittels dlocate

$ dlocate -conf bash
/etc/bash.bashrc
/etc/skel/.bash_logout
/etc/skel/.bashrc
/etc/skel/.profile
$

Benötigen Sie zusätzlich die Benutzerrechte der Konfigurationsdateien, deren Besitzer und Eigentümer sowie deren Größe und Zugriffsdatum, ist der Schalter -lsconf von großem Nutzen. Dieser bewirkt eine Ausgabe wie das Kommando ls -la, wie die nachfolgende Ausgabe deutlich macht:

Ermittlung der Konfigurationsdateien zum Paket bash mittels dlocate (ausführliche Ansicht). 

$ dlocate -lsconf bash
-rw-r--r-- 1 root root 1987  7. Dez 04:24 /etc/bash.bashrc
-rw-r--r-- 1 root root  220  2. Dez 2015  /etc/skel/.bash_logout
-rw-r--r-- 1 root root 3526  2. Dez 2015  /etc/skel/.bashrc
-rw-r--r-- 1 root root  807  6. Feb 2018  /etc/skel/.profile
$

Nachteil von dlocate: Es muss installiert sein und seine Datenbank muß dazu aktuell sein. In der Standard-Einstellung wird die Datenbank aber nur einmal pro Tag aktualisiert und funktioniert daher typischerweise nicht für frisch installierte Pakete.

Eine dritte Variante bietet das Programm debsums aus dem gleichnamigen Paket [Debian-Paket-debsums] mit seinem Schalter -e bzw. dessen Langfassung --config. Die eigentliche Aufgabe von debsums ist, anzuzeigen, welche Dateien vom Auslieferungszustand abweichen. Somit erhalten wir nicht nur die gewünschte Information über die Conffiles im Paket sondern auch gleich noch, ob sich diese Dateien noch im Auslieferungszustand befinden oder nicht. Im Falle einer Abweichung ergänzt debsums das etwas alarmierende Wort "FAILED", auf Deutsch "fehlgeschlagen". Insbesondere bei Conffiles, bei denen Änderungen durch den Systemadministrator ja explizit vorgesehen sind, ist die Meldung "FAILED" im Normalfall kein Grund zur Besorgnis.

Anzeige der Conffiles des Paketes bash und ihrer Unversehrtheit mittels debsums

$ debsums -e bash
/etc/skel/.bash_logout                OK
/etc/bash.bashrc                  FAILED
/etc/skel/.profile                    OK
/etc/skel/.bashrc                     OK
$