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.26, „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 den beiden
Programmem cat
und dlocate
aus dem gleichnamigen Paket
[Debian-Paket-dlocate]. Mit cat
lesen Sie die Paketdatenbank wie
folgt aus (hier für das Paket bash):
Anzeigen der Konfigurationsdateien über die Paketdatenbank.
$ cat /var/lib/dpkg/info/bash.conffiles /etc/bash.bashrc /etc/skel/.bash_logout /etc/skel/.bashrc /etc/skel/.profile $
dlocate
kennt dazu den Schalter -conf
gefolgt vom Paketnamen. Wieder
zeigen wir das für das Paket 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 $