Wie kann ich installierte Pakete nach Installationsdatum auflisten?
Ich muss dies auf Debian/Ubuntu tun. Antworten für andere Distributionen wären auch nett.
Ich habe eine Menge Zeug installiert, um ein bestimmtes Stück Code zu kompilieren, und ich möchte eine Liste der Pakete erhalten, die ich installieren musste.
Akzeptierte Antwort:
RPM-basierte Distributionen wie Red Hat sind einfach:
rpm -qa --last
Bei Debian und anderen dpkg-basierten Distributionen ist Ihr spezifisches Problem ebenfalls einfach:
grep install /var/log/dpkg.log
Es sei denn, die Protokolldatei wurde rotiert. In diesem Fall sollten Sie Folgendes versuchen:
grep install /var/log/dpkg.log /var/log/dpkg.log.1
Im Allgemeinen dpkg
und apt
scheinen das Installationsdatum nicht nachzuverfolgen, was auf das Fehlen eines solchen Feldes in der dpkg-query
zurückzuführen ist Manpage.
Und schließlich die alte /var/log/dpkg.log.*
Dateien werden durch Protokollrotation gelöscht, sodass Sie auf diese Weise nicht garantiert den gesamten Verlauf Ihres Systems erhalten.
Ein Vorschlag, der einige Male auftaucht (z. B. in diesem Thread), ist, sich die Datei /var/lib/dpkg/info
anzusehen Verzeichnis.
Die Dateien dort schlagen vor, dass Sie Folgendes versuchen könnten:
ls -t /var/lib/dpkg/info/*.list | sed -e 's/.list$//' | head -n 50
Um Ihre Frage zur Auswahl zu beantworten, hier ein erster Durchgang.
Paketliste nach Datum erstellen
$ find /var/lib/dpkg/info -name "*.list" -exec stat -c $'%nt%y' {} ; |
sed -e 's,/var/lib/dpkg/info/,,' -e 's,.listt,t,' |
sort > ~/dpkglist.dates
Liste der installierten Pakete erstellen
$ dpkg --get-selections | sed -ne '/tinstall$/{s/[[:space:]].*//;p}' |
sort > ~/dpkglist.selections
Tritt den 2 Listen bei
$ join -1 1 -2 1 -t $'t' ~/dpkglist.selections ~/dpkglist.dates
> ~/dpkglist.selectiondates
Aus irgendeinem Grund gibt es für mich nicht sehr viele Unterschiede aus, also könnte es einen Fehler oder eine ungültige Annahme darüber geben, was --get-selections
ist bedeutet.
Sie können die Pakete natürlich auch einschränken, indem Sie find . -mtime -<days>
oder head -n <lines>
, und ändern Sie das Ausgabeformat nach Belieben, z. B.
$ find /var/lib/dpkg/info -name "*.list" -mtime -4 |
sed -e 's,/var/lib/dpkg/info/,,' -e 's,.list$,,' |
sort > ~/dpkglist.recent
$ join -1 1 -2 1 -t $'t' ~/dpkglist.selections ~/dpkglist.recent
> ~/dpkglist.recentselections
um nur die Auswahlen aufzulisten, die in den letzten 4 Tagen installiert (geändert?) wurden.
Sie könnten wahrscheinlich auch die sort
entfernen Befehle nach Überprüfung der von dpkg --get-selections
verwendeten Sortierreihenfolge und machen Sie den find
Befehl effizienter.