Warum sehe ich eine andere Anzahl von Paketen in / usr / share / doc und bei Verwendung des Befehls dpkg -l?

251
jeebface
user@host:~$ dpkg -l | tail -n +6 | wc -l 1212 user@host:~$ ls /usr/share/doc/ | wc -l 1148 

Mein Ziel ist es, Lizenzinformationen für alle installierten Pakete zu sammeln. Der dpkg -lBefehl gibt mir 1212 Datensätze, aber ich sehe nur 1148 Verzeichnisse unter /usr/share/doc/. Was könnte für diese Diskrepanz erklären?

0

2 Antworten auf die Frage

1
Austin Hemmelgarn

Dafür gibt es zwei häufige Gründe:

  1. Nicht alle Pakete enthalten tatsächliche Daten. Einige sind sogenannte "Metapakete", die ausschließlich aus einer Liste von Abhängigkeiten bestehen (die Hauptpakete für die meisten Desktop-Umgebungen sind gute Beispiele). Einige sind 'virtuelle' Pakete, die eine einfache Möglichkeit bieten, sich auf einen bestimmten Dienst zu verlassen, ohne sich zu kümmern, welche Implementierung verwendet wird (das 'init' -Paket unter Debian ist ein solches Beispiel). Debian verfügt auch über 'Übergangspakete', die sicherstellen, dass Abhängigkeiten bei Upgrades immer noch korrekt aufgelöst werden (da dpkg selbst keine Möglichkeit hat, installierte Pakete umzubenennen).
  2. Möglicherweise haben Sie einige Pakete, die entfernt wurden, aber noch Konfigurationsdateien auf dem System vorhanden sind. Der dpkgBefehl, den Sie gegeben haben, listet diese Pakete neben den installierten auf, aber es wird fast nie ein Verzeichnis darunter liegen /usr/share/doc.
1
Deltik

Hier ist eine Möglichkeit, dies herauszufinden: Vergleich.

deltik@node51 [~]$ dpkg -l | tail -n +6 | wc -l 3170 deltik@node51 [~]$ ls /usr/share/doc/ | wc -l 2964 

Jede Zeile dpkg -l | tail -n +6ist wie folgt formatiert:

ii zram-config 0.5 all Upstart job to enable zram support 

Jede Zeile ls /usr/share/doc/ist wie folgt formatiert:

zram-config

Um die Befehle aufeinander abzustimmen, müssten sie wie dpkg -l | tail -n +6 | awk '' | sort -hund aussehen ls /usr/share/doc/ | sort -h.

Legen Sie nun die Ausgaben in zwei Dateien ab:

deltik@node51 [~]$ dpkg -l | tail -n +6 | awk '' | sort -h > /tmp/a.txt deltik@node51 [~]$ ls /usr/share/doc/ | sort -h > /tmp/b.txt 

Und unterscheiden Sie sie ( colordifffür eine einfachere Anzeige):

colordiff /tmp/.txt 

Auf meinem System habe ich folgende Muster gesehen:

  • Wenn Sie zwei verschiedene Architekturen verwenden, wird /usr/share/doc/nur das Basispaket ohne die hinzugefügte Architektur angezeigt:

    305,308c305,306 < gcc-5-base:amd64 < gcc-5-base:i386 < gcc-6-base:amd64 < gcc-6-base:i386 --- > gcc-5-base > gcc-6-base 

    Dies macht den größten Unterschied in meinem Multiarchensystem ( i386und amd64) aus.

  • Wenn Sie die unterschiedlichen Architekturen des dpkg -lBefehls ( dpkg -l | tail -n +6 | awk '' | awk -F":" '' | sort -h | uniq > /tmp/a.txt) ignorieren, werden Sie feststellen, dass einige Pakete nichts einfügen /usr/share/doc/, wie z. B. Pakete, die mit beginnen linux-image.

  • Oder es gibt einen anderen Ordnernamen /usr/share/doc/, z. B. NetworkManagerfür das network-managerPaket oder HTMLfür verschiedene KDE-Pakete.