Wie zeige ich den apt-get-Paketverwaltungsverlauf über die Befehlszeile an?

Antworten:

131

Alle Aktionen mit apt (apt-get) werden protokolliert. Diese Dateien sind in / var / log / apt / verfügbar. Führen Sie zum Anzeigen des neuesten Verlaufsprotokolls Folgendes aus:

less /var/log/apt/history.log

Diese Protokolle werden rotiert (jeden Monat, denke ich), alte Dateien werden mit einer Nummer versehen und komprimiert. Verwenden Sie zum Anzeigen des nächsten Verlaufsprotokolls Folgendes:

zless /var/log/apt/history.log.1.gz

So zeigen Sie die verfügbaren Protokolle an:

ls -la /var/log/apt/
Lekensteyn
quelle
4
Das ist ausgezeichnet. Es fehlt nur noch, wer die Befehle ausgeführt hat.
Begrenzte Versöhnung
3
@LimitedAtonement Schauen Sie sich /var/log/auth.log an, möglicherweise enthält es den Benutzer, der die Installation ausführt . (Dies hilft nicht, wenn die Installation über eine Shell / ein Programm aufgerufen wurde, die / das als root ausgeführt wird)
Lekensteyn
3
Auch nützlich: zgrep, zcat
ishmael
Protokolliert diese Datei auch die Abhängigkeitspakete, die als Ergebnis der ursprünglichen Installation von apt-get installiert wurden?
Mahesha999
2
@LimitedAtonement Die neuesten Versionen von APT bieten einen "Requested-By:" - Teil des Protokolls, um anzuzeigen, wer den Befehl aufgerufen hat und welchen Befehl er aufgerufen hat, wie "Commandline: packagekit role = 'update-packages'" oder "Commandline: apt upgrade "
Michael Tunnell
21

Sie können auch einen kurzen Befehl eingeben, um den interessanten Inhalt anzuzeigen.

  • Fügen Sie diese benutzerdefinierte Funktion hinzu zu ~/.bashrc:

    ### pars for fun: install | remove | rollback
    function apt-history(){
    
          case "$1" in
            install)
                  grep 'install ' /var/log/dpkg.log
                  ;;
            upgrade|remove)
                  grep $1 /var/log/dpkg.log
                  ;;
            rollback)
                  grep upgrade /var/log/dpkg.log | \
                      grep "$2" -A10000000 | \
                      grep "$3" -B10000000 | \
                      awk '{print $4"="$5}'
                  ;;
            *)
                  cat /var/log/dpkg.log
                  ;;
          esac
    }
  • Und nennen Sie es in einem Terminal wie folgt:

    kreso@h17:~$ apt-history install
    2013-08-06 14:42:36 install gir1.2-nautilus-3.0:amd64 <none> 1:3.8.2-0ubuntu1~ubuntu13.04.1
    2013-08-06 14:42:36 install python-nautilus:amd64 <none> 1.1-3ubuntu1
    2013-08-06 14:42:37 install insync-nautilus:all <none> 1.0.20
    2013-08-07 14:41:37 install powertop:amd64 <none> 2.1-0ubuntu1
    2013-08-07 18:44:10 install libdiscid0:amd64 <none> 0.2.2-3build1
    2013-08-07 18:44:11 install sound-juicer:amd64 <none> 3.5.0-0ubuntu1
    

Von hier genommen

Kresimir Pendic
quelle
zgrep ... /var/log/dpkg.log*- gibt auch Einträge aus Archiven aus.
Ctrl-C
6

Sie können auch den folgenden Befehl verwenden, um kürzlich installierte Pakete aufzulisten

grep "\ install\ " /var/log/dpkg.log
Desta Haileselassie Hagos
quelle
1
noch besser: grep "\ install\ " /var/log/apt/history.logfalls Sie eine Liste kopieren und in apt-get
einfügen müssen
2

Wenn Sie möchten, dass diese Pakete installiert und anschließend nicht deinstalliert werden, versuchen Sie Folgendes:

comm -23 <(grep "apt-get install" /var/log/apt/history.log | sed 's/.* //' | sort) \ 
<(grep "apt-get remove" /var/log/apt/history.log | sed 's/.* //' | sort) 

Dies ist die Installation abzüglich aller übereinstimmenden Entfernungen.

Verweise:

hoffmanc
quelle
+1: Schöner Einzeiler, aber nur gültig für die letzte Stammrotationsperiode. sortVerwenden Sie sort -uin beiden Fällen stattdessen auch , um zu vermeiden, dass doppelte Zeilen angezeigt werden, z. B. in paketähnlichen oracle-java8-installerund vielen anderen.
Cbhihe
1

Hier ist, wie Sie es tatsächlich tun, sagen Sie Paket mutter:

_P=mutter &&
(cat /var/log/dpkg.log{,.1};zcat /var/log/dpkg.log.*.gz) |
egrep --text "^[^ ]* [^ ]* (configure|install|remove|status [^ ]*|trigproc|upgrade) $_P[: ]" |
sort --reverse | less

Mit dpkg.log werden Vorgänge erfasst, die von apt-get nicht angezeigt werden .

Ausgabe:

2016-12-20 09:47:35 status unpacked mutter:amd64 3.22.2-2ubuntu1~ubuntu16.10.1
2016-12-20 09:47:35 status installed mutter:amd64 3.22.2-2ubuntu1~ubuntu16.10.1
…
Harald Rudell
quelle
1
Bitte beachte, dass dreifache Backticks hier nicht so funktionieren, wie du denkst.
Edwinksl
1

Um den Update-Verlauf eines bestimmten Pakets abzurufen, sofern es über apt installiert / aktualisiert wurde, sehen Sie sich einen Oneliner (bash und zgrep) an. Beispiel für das Paket skypeforlinux:

package='skypeforlinux'; pregex="(${package}[^\)]+\))"; while read -r line; do [[ "$line" =~ ^Start-Date:[[:space:]]([[:digit:]].+) ]] && curdate="${BASH_REMATCH[1]} "; [[ "$line" =~ $pregex ]] && echo "$curdate ${BASH_REMATCH[1]}"; done < <(for i in `ls -tr /var/log/apt/history*`; do zgrep -B3 "$package" $i; done)

Dadurch werden die Verlaufsprotokolldateien von apt für skypeforlinux einschließlich der vorherigen drei Zeilen durchsucht, um das Datum abzurufen. Durchläuft dann das Ergebnis und gibt die relevanten Daten und Versionen wieder.

Ersetzen Sie den Wert der Paketvariablen durch Ihren Paketnamen. Dies funktioniert auch für mehrere Pakete, sofern diese mit derselben Zeichenfolge beginnen.

Beispiel mit Ausgabe:

package='apache'; pregex="(${package}[^\)]+\))"; while read -r line; do [[ "$line" =~ ^Start-Date:[[:space:]]([[:digit:]].+) ]] && curdate="${BASH_REMATCH[1]} "; [[ "$line" =~ $pregex ]] && echo "$curdate ${BASH_REMATCH[1]}"; done < <(for i in `ls -tr /var/log/apt/history*`; do zgrep -B3 "$package" $i; done)
2017-10-19  15:00:09  apache2-utils:amd64 (2.4.18-2ubuntu3.5)
2017-11-24  14:24:45  apache-pom-java:amd64 (10-2build1, automatic)
2018-02-22  16:42:02  apache2-data:amd64 (2.4.18-2ubuntu3.5, automatic)
2018-02-26  15:34:34  apache2:amd64 (2.4.18-2ubuntu3.5)
2018-02-26  15:36:32  apache2-data:amd64 (2.4.18-2ubuntu3.5)
2018-02-26  15:40:50  apache2-data:amd64 (2.4.18-2ubuntu3.5, automatic)
2018-02-26  15:42:07  apache2:amd64 (2.4.18-2ubuntu3.5)
2018-02-26  15:42:39  apache2:amd64 (2.4.18-2ubuntu3.5)
2018-03-15  10:08:50  apache-pom-java:amd64 (10-2build1)
2018-04-20  08:55:07  apache2-data:amd64 (2.4.18-2ubuntu3.5, 2.4.18-2ubuntu3.8)
2018-07-06  08:55:11  apache2-data:amd64 (2.4.18-2ubuntu3.8, 2.4.18-2ubuntu3.9)
kilgor
quelle