Wie können Pakete, die zu einem bestimmten Datum installiert wurden, mit 'aptitude' angezeigt werden?

54

Weiß jemand, ob es eine einfache Möglichkeit gibt, eine Liste der installierten Pakete zu finden, sortiert nach Datum, wenn aptitude(oder apt-get) verwendet wird?

Ich habe eine Reihe von Paketen installiert, um etwas Neues auszuprobieren, aber es hat nicht funktioniert. Ich möchte alle diese Pakete entfernen, um Speicherplatz freizugeben.

Ich habe versucht, nur die Liste der heruntergeladenen .deb-Dateien zu betrachten, aber das scheint eine ziemlich rückständige Methode zu sein (obwohl es funktioniert hat).

Mikeage
quelle

Antworten:

43

Leider speichert dpkg (das Paket-Handler-Tool, auf dem aptitude aufbaut) das Installationsdatum von Paketen nicht speziell, obwohl überlegt wird, es hinzuzufügen. Das Installationsdatum kann jedoch anhand des Datumsstempels der in das Verzeichnis geschriebenen Dateien ermittelt werden /var/lib/dpkg/info.


quelle
4
Wenn Sie diesen Ansatz verwenden, achten Sie darauf, nur die Zeitstempel in den *.listDateien zu überprüfen, da die anderen Dateien mit dem Paketdatum versehen sind.
Dave
20

Ich habe aptitude so konfiguriert, dass es in ein Protokoll schreibt ( /var/log/aptitude). Es erzeugt eine Ausgabe wie diese;

Aptitude 0.4.11.11: log report
Mon, Feb  9 2009 13:21:28 +0100

IMPORTANT: this log only lists intended actions; actions which fail due to
dpkg problems may not be completed.

Will install 6 packages, and remove 0 packages.
4096B of disk space will be used
===============================================================================
[UPGRADE] apt 0.7.20.1 -> 0.7.20.2
[UPGRADE] apt-utils 0.7.20.1 -> 0.7.20.2
[UPGRADE] base-passwd 3.5.19 -> 3.5.20
[UPGRADE] libgnutls26 2.4.2-5 -> 2.4.2-6
[UPGRADE] libpq5 8.3.5-1 -> 8.3.6-1
[UPGRADE] ucf 3.0015 -> 3.0016
===============================================================================

Log complete.

Dies zeigt das genaue Datum und die Pakete, die aptitude installiert hat. Um dies zu konfigurieren, folgen Sie der Aptitude-Referenz.

Option:Aptitude::Log

Default:/var/log/aptitude

Description: If this is set to a nonempty string, aptitude will log the package
installations, removals, and upgrades that it performs. If the value of
Aptitude::Log begins with a pipe character (ie, ``|''), the remainder of its
value is used as the name of a command into which the log will be piped: for
instance, |mail -s 'Aptitude install run' root will cause the log to be emailed
to root. To log to multiple files or commands, you may set this option to a list
of log targets.

Einen Link zur Aptitude-Referenz finden Sie in der Aptitude-Manpage.

jeremiah
quelle
1
Bitte posten Sie den Link und wie Sie ihn implementieren. Es ist nicht sehr hilfreich, sich nur auf einen manuellen Text zu beziehen.
not2qubit
17

Es gibt eine einfache Möglichkeit, das Installationsdatum aller Pakete anzuzeigen. Führen Sie einfach Folgendes aus:

grep " install" /var/log/dpkg.log*

Als Ergebnis erhalten Sie eine Liste aller installierten Pakete mit genauem Datum und Uhrzeit.

Vielen Dank für Kommentare, die mich zu dieser Lösung geführt haben.

jmarceli
quelle
2
Der cdBefehl ist nicht erforderlich, wenn Sie den vollständigen Pfad im catBefehl verwenden ...
Papukaija
1
Der Zweck des cdBefehls bestand darin, lsin diesem Verzeichnis die verfügbaren dpkg.log-Dateien zu überprüfen. Es wird jedoch eine bessere Lösung ausgeführt, um die ls /var/log | grep 'dpkg.log'Protokolldateien aufzulisten. Entschuldigung für das Chaos.
Jmarceli
2
oder einfach "grep install /var/log/dpkg.log*"?
Marc Van Daele
1
Ich wusste nicht, cat | catwas du tun kannst. Aber warum nicht beide Dateien in einem Befehl kater? (Oder noch besser: Mach einfach, was @MarcVanDaele sagt.)
mwfearnley
13

Ich habe diesen hier im Web gefunden. Es wird ein Verlauf von dpkg aus der dpkg-Protokolldatei erstellt.

Es sieht sehr einfach aus.

function apt-history(){
      case "$1" in
        install)
              cat /var/log/dpkg.log | grep 'install '
              ;;
        upgrade|remove)
              cat /var/log/dpkg.log | grep $1
              ;;
        rollback)
              cat /var/log/dpkg.log | grep upgrade | \
                  grep "$2" -A10000000 | \
                  grep "$3" -B10000000 | \
                  awk '{print $4"="$5}'
              ;;
        *)
              cat /var/log/dpkg.log
              ;;
      esac
}

Quelle

BEARBEITEN

Ich habe dieses Skript auf Ubuntu 8.10 Server ausprobiert und es funktioniert sehr gut. Können Sie uns einige Informationen geben, wie Sie Ihr Problem gelöst haben?

Guerda
quelle
5
  • Verwenden Sie die dpkg-Protokolle

    locate dpkg.log | xargs cat {} | grep " install "
    
  • ODER wenn Sie nicht haben locate

    find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install "
    
  • Verwenden Sie sortdiese Option , um eine ordnungsgemäße zeitbasierte Bestellung sicherzustellen

    locate dpkg.log | xargs cat {} | grep " install " | sort
    
  • Verwenden Sie tac(rückwärts cat) *, z. B. head , um die letzten 4 Einträge zu erhalten

    locate dpkg.log | xargs cat {} | grep " install " | sort | tac | head -n4
    

zB für den letzten Befehl bekomme ich:

2014-10-08 18:56:12 install xorg-server-source:all <none> 2:1.16.1-1
2014-10-08 18:49:34 install libelementary-data:all <none> 0.7.0.55225-1
2014-10-08 18:46:57 install e17:i386 <none> 0.17.6-1
2014-10-08 18:46:56 install libedje-bin:i386 <none> 1.8.6-2.1+b1
a20
quelle
1
Warum würden Sie tac+ headanstelle von verwenden tail?
Zanna
1
Es ist eine Weile her, ich habe vergessen, warum - aber es ist möglich, dass es einen guten Grund dafür gibt ... oder vielleicht hatte ich einen blonden Moment: D
a20
4

Sie können Ihre vorherigen Aktionen auch nachverfolgen, indem Sie /var/log/apt/term.log und ältere Dateien (term.log.1.gz usw.) überprüfen. Es verfügt über Zeitstempel und ein vollständiges Protokoll der Meldungen während der Installation.


quelle
2

[BEANTWORTUNG DER AKTUELLEN FRAGE] Ja, es gibt eine EINFACHE Möglichkeit, Pakete zu suchen, die an einem bestimmten Datum installiert wurden, auch wenn dies innerhalb des Terminals mit apt-get durchgeführt wurde.

Wenn Sie den Synaptic Package Manager installieren, der über das Ubuntu Software Center kostenlos installiert werden kann, müssen Sie nur das Menü DATEI öffnen und die Option "Verlauf" auswählen. Dort finden Sie eine nach Datum geordnete Auflistung aller hinzugefügten und entfernten Anwendungspakete, unabhängig davon, wie sie installiert oder entfernt wurden.

Kreisel
quelle
2

Es gibt in der Tat ein "offizielles" pkginstall.shSkript, das dies tun kann. Befolgen Sie die Anweisungen in der offiziellen Dokumentation . Laden Sie das Skript kurz über den obigen Link herunter, vergewissern Sie sich, dass es ausführbar ist, und führen Sie es dann aus mit:

~/pkginstalls.sh

Dadurch wird eine pkginstalls.txtDatei in Ihrem Home-Verzeichnis erstellt, die alle installierten Pakete nach Datum sortiert enthält.

Übrigens, das ist der Inhalt des Skripts:

#!/bin/bash
#pkginstalls.sh
#creates text file with a list of all packages installed by date

#first append all info from archived logs

i=2
mycount=$(ls -l /var/log/dpkg.log.*.gz | wc -l)
nlogs=$(( $mycount + 1 ))

while [ $i -le $nlogs ]
do
if [ -e /var/log/dpkg.log.$i.gz ]; then
zcat /var/log/dpkg.log.$i.gz | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append all info from unarchived logs

i=1
nulogs=$(ls -l /var/log/dpkg.log.* | wc -l)
nulogs=$(( $nulogs - $nlogs + 1 ))
while [ $i -le $nulogs ]
do
if [ -e /var/log/dpkg.log.$i ]; then
cat /var/log/dpkg.log.$i | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append current log

cat /var/log/dpkg.log | grep "\ install\ " >> $HOME/pkgtmp.txt

#sort text file by date

sort -n $HOME/pkgtmp.txt > $HOME/pkginstalls.txt

rm $HOME/pkgtmp.txt

exit 0
Ron
quelle