// Datei: ./werkzeuge/paketoperationen/konfigurationsdateien-eines-pakets-anzeigen.adoc

// Baustelle: Fertig

[[konfigurationsdateien-eines-pakets-anzeigen]]

=== 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.

// Stichworte für den Index
(((Conffiles)))
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.

// Stichworte für den Index
(((Paket, Konfigurationsdateien anzeigen)))
(((grep)))
Die sogenannten Conffiles sind leicht aufzufinden. Einerseits können Sie
wie unter <<paketinhalte-anzeigen-apt-file>> 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.

// Stichworte für den Index
(((dpkg, -s)))
(((dpkg, --status)))
(((dpkg-query, -s)))
(((dpkg-query, --status)))
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
$
----

// Stichworte für den Index
(((grep)))
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
$
----

// Stichworte für den Index
(((dlocate, -conf)))
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
$
----

// Stichworte für den Index
(((dlocate, -lsconf)))
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.

// Stichworte für den Index
(((debsums, --config)))
(((debsums, -e)))
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
$
----

// Datei (Ende): ./werkzeuge/paketoperationen/konfigurationsdateien-eines-pakets-anzeigen.adoc
