![Wo speichert Debian die Liste der installierten Pakete?](https://rvso.com/image/192238/Wo%20speichert%20Debian%20die%20Liste%20der%20installierten%20Pakete%3F.png)
Ich muss eine Liste der Pakete finden, die auf einem Debian-Server (Armbian) installiert waren, bevor dieser abgestürzt ist. Da er offline ist, kann ich weder apt
oder dpkg
(oder einen anderen Befehl) verwenden. Ich muss wissenwelche Datei(en)enthalten die Liste (auch wenn sie binär sind). Ich habe versucht zu suchen, aber überall steht nur, dass die oben genannten Befehle ausgeführt werden sollen, was keine Option ist.
Antwort1
Wie kann man „dpkg --get-selections“ aus einem Backup von /etc und /var approximieren?geht auf Ihr zugrunde liegendes Anliegen ein.
Die Liste der installierten Pakete ist in gespeichert /var/lib/dpkg/status
. Suchen Sie nach Status: install ok installed
Zeilen – diese zeigen an, dass das Paket korrekt installiert ist.
Der folgende AWK-Aufruf extrahiert die installierten Paketnamen aus einer status
Datei:
awk '/^Package:/ { package = $2 }
/^Status: install ok installed/ { print package }' /path/to/status
Wenn das System mehrere Architekturen unterstützt, müssen Sie dies ebenfalls im Auge behalten:
awk '/^Package:/ { p = $2; i = 0 }
/^Status: install ok installed/ { i = 1 }
i && /^Architecture: all/ { print p; next }
i && /^Architecture/ { printf "%s:%s\n", p, $2 }' /path/to/status
Eine weitere interessante Datei ist /var/lib/apt/extended_states
die, die das Flag „Automatische Installation“ für installierte Pakete aufzeichnet. Sie können die Flags wiederherstellen, indem Sie etwas wie Folgendes ausführen:
awk '/^Package:/ { p = $2 }
/^Architecture/ { a = $2 }
/^Auto-Installed: 1/ { printf "%s:%s\n", p, a }' /path/to/extended_states |
xargs sudo apt-mark auto
Sie können beide Dateien kombinieren, um die manuell installierten Pakete aufzulisten und sich bei der Installation der automatisch installierten Pakete auf die Abhängigkeitsverwaltung verlassen (obwohl dies nicht unbedingt dazu führt, dass derselbe Satz Pakete installiert wird):
awk 'FNR == NR && /^Package:/ { p = $2 }
/^Status: install ok installed/ { i = 1 }
FNR == NR && i && /^Architecture: all/ { ps[p] = 1; next }
FNR == NR && i && /^Architecture/ { ps[p ":" $2] = 1}
FNR != NR && /^Package:/ { p = $2 }
FNR != NR && /^Architecture:/ { a = $2 }
/^Auto-Installed: 1/ { delete ps[p ":" a] }
END { for (p in ps) print p }' /path/to/status /path/to/extended_states
Siehe den Abschnitt „DATEIEN“ inman dpkg
:
/var/lib/dpkg/status
Status verfügbarer Pakete. Diese Datei enthält Informationen darüber, ob ein Paket zum Entfernen markiert ist oder nicht, ob es installiert ist oder nicht usw.