// Datei: ./praxis/apt-und-aptitude-auf-die-eigenen-beduerfnisse-anpassen/aptitude-formatstrings.adoc

// Baustelle: Rohtext

[[aptitude-format-strings]]
=== `aptitude` Format Strings ===

// Stichworte für den Index
(((aptitude, Format Strings)))
(((aptitude, die Ausgabe mit Platzhaltern anpassen)))
Mit 'Format Strings' legen Sie die Ausgabe anhand von vorgegebenen
Platzhaltern fest. Sie ähneln der Art und Weise, wie sie in der
`printf()`-Funktion in der Programmiersprache C respektive der
`print()`-Funktion in Python üblich sind. Eine ausführliche Beschreibung
der Platzhalter finden Sie im `aptitude`-Handbuch unter 'Customizing the
package list' <<aptitude-dokumentation-package-list>>.

<<tab.aptitude-format-strings>> gibt Ihnen eine Übersicht zu den
verfügbaren Platzhaltern. Diese Platzhalter helfen Ihnen in Kombination
mit der Suche nach Paketen und bei der Gestaltung der Ausgabe. Sie
bestimmen damit, welche Informationen `aptitude` spaltenweise zu einem
Paket darstellt.

.Format Strings in `aptitude`
[frame="topbot",options="header",cols="1,9",id="tab.aptitude-format-strings"]
|====
| Platzhalter | Bedeutung
| `%a` | das Flag für die Aktion des Pakets ('Action Flag')
| `%A` | die ausführlichere Beschreibung des Flags der Aktion
| `%B` | die Anzahl der kaputten Pakete ('Broken Packages')
| `%c` | der aktuelle Paketstatus ('Current State Flag')
| `%C` | eine ausführlichere Beschreibung des aktuellen Paketstatus
| `%d` | die kurze Paketbeschreibung ('Description')
| `%D` | die Größe der Paketdatei
| `%E` | der Name des Source-Pakets
| `%H` | der Name des Rechners, auf dem 'aptitude' gerade ausgeführt wird ('Hostname')
| `%i` | benennt die höchste Priorität, die einer Paketversion zugewiesen wurde
| `%I` | die (geschätzte) Installationsgröße ('Installed Size')
| `%m` | der Name des Paketmaintainers ('Maintainer')
| `%M` | gesetzt, falls das Paket automatisch installiert wurde ('Automatic Flag')
| `%n` | gibt die Programmversion von 'aptitude' aus
| `%N` | gibt den Namen des Programms aus, i.d.R 'aptitude'
| `%o` | gibt eine Schätzung der Datenmenge zurück, die vom Repository bezogen wird
| `%p` | der Paketname ('Package Name')
| `%P` | die Paketpriorität ('Priority')
| `%r` | gibt die geschätzte Anzahl Pakete an, die von diesem Paket abhängen ('Reverse Depends Count')
| `%R` | eine Abkürzung für die Priorität des Paketes ('Abbreviated Priority')
| `%s` | der Bereich, in den das Paket eingeordnet ist ('Section')
| `%S` | der Vertrauensstatus des Paketes; ist `U`, falls es nicht aus einer vertrauenswürdigen Quelle stammt
| `%t` | der Name des Archivs, aus dem das Paket stammt
| `%T` | gibt einen `*` zurück, falls das Paket getagged wurde, ansonsten nichts
| `%u` | falls die anstehenden Aktionen die Größe des verfügbaren Speicherplatzes auf dem Datenträger verändern, gibt dieser Platz eine entsprechende Mitteilung aus
| `%v` | die aktuell installierte Version des Pakets, falls installiert ('Version')
| `%V` | gibt die Paketversion aus, die installiert würde, falls die Aktion 'Paket installieren' ausgeführt wird ('Candidate Version')
| `%Z` | die Größe des Speicherplatzes, der zusätzlich benutzt oder freigegeben wird, wenn das Paket installiert, entfernt oder aktualisiert wird ('Size Change')
|====

Die Voreinstellung von `aptitude` beinhaltet die fünf Platzhalter `%c`,
`%a`, `%M`, `%p%` und `%d`. Es umfasst somit die einzelnen Spalten mit
dem Paketstatus, der Aktion, das 'Automatic Flag', dem Paketnamen und
der Paketbeschreibung. 

// Stichworte für den Index
(((aptitude, Ausgabespalten festlegen)))
(((aptitude, die Ausgabe mit Platzhaltern anpassen)))
(((aptitude, search --display-format)))
(((aptitude, search -F)))
Möchten Sie eine andere Ausgabe erhalten, benutzen Sie im Aufruf den
Schalter `-F` (Langform `--display-format`) gefolgt von einem String mit
den entsprechenden Platzhaltern. Das nachfolgende Beispiel listet alle
verfügbaren Pakete samt deren Installationsstatus (`%c`) auf, in dessen
Paketname die Zeichenkette `asciidoc' enthalten ist (`%p`). Zwischen dem
Paketstatus und dem Paketnamen wird lediglich ein Leerzeichen eingefügt.

.Individuelle Gestaltung des Ausgabeformats von `aptitude` bei der Suche nach den verfügbaren Paketen mit 'asciidoc' im Namen
----
$ aptitude search -F '%c %p' asciidoc
i asciidoc
v asciidoc:i386
i asciidoctor
i asciidoctor-doc
$
----

// Stichworte für den Index
(((Paketversion anzeigen, verfügbare Pakete)))
Die Format Strings erlaubt ebenfalls zusätzliche Trennzeichen und
dezimale Angaben vor einem Platzhalter. Damit legen Sie die weitere
Gestaltung der Ausgabe und die jeweilige Spaltenbreite fest. Das
nachfolgende Beispiel legt drei Spalten fest -- den Installationsstatus
(`%c`), die Versionsnummer, falls das Paket installiert ist (`%v`) sowie
den Paketnamen (`%p`). Alle drei Spalten sind jeweils durch einen
senkrechten Strich voneinander getrennt. Die Angabe `%20v` besimmt
als feste Spaltenbreite 20 Zeichen, die anderen Spalten bleiben in der
Größe variabel.

.Installationsstatus, installierte Version und Paketname mit fester Breite
----
$ aptitude search -F '%c | %20v | %p' asciidoc
i | 8.6.9-3              | asciidoc
v | <keine>              | asciidoc:i386
i | 1.5.4-1~bpo8+1       | asciidoctor
i | 0.1.4-3              | asciidoctor-doc
$
----

// Stichworte für den Index
(((aptitude, search ?installed)))
(((aptitude, search ~i)))
// (((aptitude, search ~M)))
(((Paketmarkierungen, automatic)))
In der Praxis ist es oft so, dass weitere Schalter im Aufruf miteinander
zu kombinieren sind. Das nachfolgende Beispiel listet nur den Namen aller
verfügbaren Pakete auf, die nicht als Abhängigkeiten installiert wurden.
Dabei bewirkt die Angabe `'~i !~M'` , dass nur die installierten Pakete
berücksichtigt werden (Angabe `'~i'`), und `'!~M'` , dass nur die
einbezogen werden, bei denen das 'Automatic Flag' nicht gesetzt ist (das
`!` bewirkt eine Negation).

Das Ergebnis ist zunächst erstmal der komplette, übliche Ausgabestring
aus Paketstatus, der Aktion, dem 'Automatic Flag', dem Paketnamen und
der kurzen Paketbeschreibung. Um das noch auf den Paketnamen zu
reduzieren, kommt der Format String `%p` ins Spiel.

.Lediglich nicht automatisch installierte Pakete auflisten
----
$ aptitude search '~i !~M' -F '%p'
abiword
abs-guide
ack-grep
acl
acpi
acpi-support-base
acpid
acpitool
adduser
adequate
...
$
----

// Stichworte für den Index
(((Paketmarkierungen, essentiell)))
Die obige Liste beinhaltet auch alle essentiellen Pakete (siehe
<<paket-prioritaet-und-essentielle-pakete>>). Diese filtern Sie über die
zusätzliche Angabe `'!~E'` heraus. Damit ändert sich ihr Aufruf wie
folgt:

.Nicht automatisch installierte und nicht essentielle Pakete auflisten
----
$ aptitude search '~i !~M' -F '%p'
abiword
abs-guide
ack-grep
...
$
----

[NOTE] 
Bitte beachten Sie, dass `aptitude` nur die Pakete berücksichtigt, die
auch das 'Automatic Flag' tragen. Nicht alle Distributionen sind da
konsequent. Zum Beispiel ist Raspberry Pi OS dafür bekannt, die
Markierung kaum zu benutzen. Obiger Aufruf auf einem Raspberry Pi
liefert wohl deswegen auch viele C-Bibliotheken im Ergebnis mit, die
tatsächlicht nicht gebraucht werden.

Geht es Ihnen jedoch darum, lediglich die Namen der Pakete auszugeben,
die den Begriff 'asciidoc' im Namen tragen und auch installiert sind,
hilft aus unserer Sicht nur die Kombination aus `asciidoc` und `grep`
wie folgt weiter:

.Alle installierten Pakete auflisten, die `asciidoc` im Namen tragen
----
$ aptitude search '~i' -F '%p' | grep asciidoc
asciidoc
asciidoctor
asciidoctor-doc
$
----

// Stichworte für den Index
(((Paketsuche, nach Paketen aus nicht-vertrauenswürdiger Quelle)))
Arbeiten Sie mit Repositorys vom Fremdanbietern, hängt die
Zuverlässigkeit der Pakete vom Fremdanbieter ab. Mit dem nachfolgenden
Aufruf -- einer Kombination aus `aptitude` und `egrep` -- finden Sie
alle installierten Pakete, die aus nicht-vertrauenswürdigen Quellen
stammen. Die Angabe `%S` am Beginn des Format Strings veranlasst
`aptitude`, ein `U` zu produzieren, sollte der entsprechende Fall
eintreten. Der angeflanschte Aufruf von `egrep` benutzt einen regulären
Ausdruck, um für diejenigen Zeilen einen Treffer zu landen, die mit
einem großen `U` beginnen. Im Beispiel ist es das ausgedachte Paket
'libblafaselsonstwas'.

.Pakete aus nicht-vertrauenswürdiger Quelle herausfischen
----
$ aptitude search '~i' -F '%S %p' | egrep "^U 
U libblafaselsonstwas
$
----

// Datei (Ende): ./praxis/apt-und-aptitude-auf-die-eigenen-beduerfnisse-anpassen/aptitude-formatstrings.adoc
