Wie kann ich installierte Pakete nach Installationsdatum auflisten?
Ich muss das auf Debian / Ubuntu machen. Antworten für andere Distributionen wären auch nett.
Ich habe eine Menge Sachen installiert, um einen bestimmten Code zu kompilieren, und ich möchte eine Liste der Pakete erhalten, die ich installieren musste.
debian
package-management
apt
Elazar Leibovich
quelle
quelle
Antworten:
RPM-basierte Distributionen wie Red Hat sind einfach:
Bei Debian und anderen dpkg-basierten Distributionen ist Ihr spezielles Problem ebenfalls einfach:
In diesem Fall sollten Sie Folgendes versuchen, es sei denn, die Protokolldatei wurde gedreht:
Im Allgemeinen
dpkg
undapt
scheinen nicht das Installationsdatum zu verfolgen, durch das Fehlen eines solchen Feldes im Gehendpkg-query
man - Seite.Und schließlich werden alte
/var/log/dpkg.log.*
Dateien durch Protokollrotation gelöscht, sodass nicht garantiert wird, dass Sie auf diese Weise den gesamten Verlauf Ihres Systems abrufen können.Ein Vorschlag, der ein paar Mal vorkommt (zB dieser Thread ), ist das
/var/lib/dpkg/info
Verzeichnis anzuschauen . Die Dateien dort deuten darauf hin, dass Sie Folgendes versuchen könnten:Hier ist ein erster Durchgang, um Ihre Frage zu Auswahlen zu beantworten.
Liste der Pakete nach Datum erstellen
Liste der installierten Pakete erstellen
Trete den 2 Listen bei
Aus irgendeinem Grund gibt es für mich nicht viele Unterschiede aus, daher könnte es einen Fehler oder eine ungültige Annahme darüber geben, was
--get-selections
bedeutet.Sie können die Pakete natürlich einschränken, indem Sie
find . -mtime -<days>
oder verwendenhead -n <lines>
und das Ausgabeformat nach Ihren Wünschen ändern, zum nur die Auswahlen aufzulisten, die in den letzten 4 Tagen installiert (geändert?) wurden.
Sie könnten die
sort
Befehle wahrscheinlich auch entfernen , nachdem Sie die von verwendete Sortierreihenfolge überprüftdpkg --get-selections
und denfind
Befehl effizienter gestaltet haben.quelle
apt-get
mehr alsrpm
, aber jetzt bekommt Debian -1, weil das Installationsdatum nicht in der Datenbank gespeichert wurde. Der Debian-Trick beinhaltet alle installierten Pakete, nicht nur die ausgewählten Pakete, aber es ist ein guter Anfang.half-installed
Einträge), wenn Sie Folgendes tun:grep install\ /var/log/dpkg.log
grep " install " /var/log/dpkg.log
listet nur die "install" -Zeilen auf, anstatt auch die "status" -Zeilen anzuzeigen.Mikel hat gezeigt, wie das auf dpkg-Ebene geht . Insbesondere
/var/lib/dpkg/info/$packagename.list
wird erstellt, wenn das Paket installiert wird (und danach nicht mehr geändert wird).Wenn Sie die APT-Tools verwendet haben (was Sie vermutlich getan haben, weil Sie sich Sorgen um automatisch im Vergleich zu manuell installierten Paketen machen), gibt es einen Verlauf in
/var/log/apt/history.log
. Solange es nicht entfernt wurde, werden alle APT-Installationen, -Upgrades und -Entfernungen mit einer Anmerkung für Pakete protokolliert, die als automatisch installiert markiert sind. Dies ist ein relativ neues Feature, das in APT 0.7.26 eingeführt wurde, so dass es in Debian in squeeze erschien. In Ubuntu hat 10.04history.log
aber die automatisch installierte Annotation ist erst ab 10.10 vorhanden.quelle
Rau, aber funktioniert:
quelle
ls
. Unter mywiki.wooledge.org/ParsingLs finden Sie Hinweise dazu, warum dies gefährlich / von Natur aus fehlerhaft ist. Die sicherere Option besteht darin, entweder einen Stream zu verwendenfind -printf
oderstat --format
einen Stream zu generieren, der eindeutig analysiert werden kann.ls -al --time-style=long-iso
sollte die Verwendung hilfreich sein. Außerdem ist es wahrscheinlich ungewöhnlich, dass jemand ein APT-Paket mit\n\t\r\v
seinem Namen benennt .Die
/var/log/apt/history.log
Datei hat ein umständliches Format IMHO.Ich hätte es vorgezogen, wenn die Protokolldatei stärker formatiert gewesen wäre
oder einige XML-Dateien, die nicht nur ein {Paket}, sondern auch {Abhängigkeiten} enthalten.
In der derzeit implementierten Version können Sie die gesuchten Informationen ermitteln, es ist jedoch eine gewisse forensische Verarbeitung erforderlich, um die Details zu extrahieren.
quelle
Dies funktioniert für mich auf einem Debian-System. Ich vermute, dass sich das Dateiformat seit 2011 geändert hat. Dieses System ist ziemlich neu, daher würde ich nicht erwarten, dass dies auf einem älteren System funktioniert, obwohl dies möglicherweise nur das Entpacken der Protokolle und die Verwendung erfordert Ein Glob, der sich auf alle bezieht.
Die ersten beiden Felder in jeder Zeile der Datei
/var/log/dpkg.log
sind Datum und Uhrzeit. Beachten Sie den nachgestellten Bereich mit install im grep-Teil. Dies liegt daran, dass Upgrades Installationen auslösen können, aber wenn ich das richtig verstanden habe, wollten Sie wissen, was von den Benutzern installiert wurde.quelle
Hier ist der Einzeiler, den jeder möchte und braucht:
Das Ergebnis zeigt alle (neu) installierten und aktualisierten Pakete in chronologischer Reihenfolge.
Die Zeilenerklärung:
ls -1t
- Holen Sie sich alledpkg.log*
Dateinamen in chronologischer Reihenfolgezcat -f
- WENN die Datei vom Typ gzip ist, dekomprimieren Sie sie. Anderenfalls leiten Sie den Inhalt weiter.tac
- Kehren Sie die Ausgabe von cat zeilenweise um, um sicherzustellen, dass wir die richtige chronologische Reihenfolge erhalten.grep
- Überprüfen Sie nur, ob Pakete installiert oder aktualisiert sind .awk -F ':a'
- Trennen Sie das Architekturfeld vom Paketnamencolumn -t
- drucke die durch Leerzeichen getrennten Spalten schön ausMan möchte natürlich einen Alias dafür erstellen, aber das ist leider nicht möglich, da awk sowohl von einfachen als auch von doppelten Anführungszeichen abhängt. In dieser Hinsicht ist dies am besten in ein Bash-Skript einzufügen und dort, wo das
:
Trennzeichen für andere Architekturen in der Feldspalte besser gehandhabt wird .Die Ausgabe ist:
Nachteil:
quelle
Beachten Sie dies, weil Sie erwähnen, dass andere Verteilungsantworten willkommen sind. rpm verfügt über eine große Anzahl von Ausgabeformat-Tags, von denen eines INSTALLTIME ist. (Am
wget
Beispiel)Dies kann auf verschiedene Arten formatiert werden. Ich benutze es so:
Auf diesen beiden Seiten finden Sie zahlreiche nützliche Informationen zum Lösen von Problemen mit RPM-Metadaten:
http://www.rpm.org/max-rpm/s1-rpm-query-parts.html
http://www.rpm.org/max-rpm/s1-rpm-query-handy-queries.html
Wenn Sie diese Informationen sortieren, erhalten Sie eine funktionierende Lösung für Ihr Problem.
quelle
GNU / Linux Debian hat keine eingebauten Werkzeuge für dieses Problem, aber alle Informationen über Programme, die auf die Standardart installiert wurden, werden in Dateien mit dem Programmnamen list im Verzeichnis / var / lib / dpkg / info / gespeichert . Es gibt dort jedoch keine Informationen zu manuell installierten Programmen.
Eine lange einzeilige Lösung :
Erklärung :
ls -rt
gibt Dateien sortiert nach Datumsänderung in umgekehrter Reihenfolge aus, dh mit den neuesten Dateien am Ende der Liste.stat
druckt das Datum der Datei in lesbarer Form.printf
Zeigt den Paketnamen und das Datum der letzten Änderung an.for
gesamte Schleife gibt Paketnamen aus und datiert vom ältesten zum neuesten.Ausgabebeispiel (abgeschnitten):
Der Hauptfehler dieser Lösung ist, dass sie in der Produktion nicht gut getestet wurde.
quelle
/var/lib/dpkg/info/
. Dies ist auch der Grund, warum die Verwendung/var/log/dpkg.log*
bevorzugt sein kann.Es ist rau, funktioniert aber genauso schnell wie andere Lösungen. Das Datumsformat ist yyyymmddhhmmss, was bedeutet, dass ein bisschen oder Umordnen und Entfernen des Formats zu einer Zahl führt, die sortiert werden kann.
Vielen Dank an die anderen Lösungen, diese Liste Paketnamen in der Reihenfolge der Installation, die in einem zum Kopieren erstellten Betriebssystem verwendet werden könnten.
quelle