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


Gibt es eine Möglichkeit, den Verlauf von Paketen anzuzeigen, die von apt-get über die Befehlszeile geändert wurden?


110
2018-01-15 13:04


Ursprung


mögliches Duplikat von Ist es möglich, eine Liste der zuletzt installierten Pakete zu erhalten? - BuZZ-dEE


Antworten:


Alle Aktionen mit apt (apt-get) werden protokolliert. Diese Dateien sind in / var / log / apt / verfügbar. Um das neueste Verlaufsprotokoll anzuzeigen, führen Sie 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. Um das nächste Verlaufsprotokoll anzuzeigen, verwenden Sie:

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

So zeigen Sie die verfügbaren Protokolle an:

ls -la /var/log/apt/

120
2018-01-15 13:10



Das ist ausgezeichnet. Das einzige, was fehlt, ist wer die Befehle ausgeführt hat. - Limited Atonement
@LimitedAtonement Schauen Sie sich die Datei /var/log/auth.log an kann enthält den Benutzer, der die Installation ausführt. (Dies hilft nicht, wenn die Installation über eine Shell / ein Programm aufgerufen wurde, das als root läuft) - Lekensteyn
Auch nützlich: zgrep, zcat - ishmael
protokolliert diese Datei auch die Abhängigkeitspakete, die als Ergebnis von original apt-get installiert wurden? - Mahesha999
@LimitedAtement die neuesten Versionen von APT bieten einen "Requested-By:" Teil des Logs um anzuzeigen, wer den Befehl aufgerufen hat und welchen Befehl sie aufgerufen haben wie "Commandline: packagekit role = 'update-packages'" oder "Commandline: apt Aktualisierung" - Michael Tunnell


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

  • Fügen Sie diese benutzerdefinierte Funktion zu Ihrer hinzu ~/.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 nenne 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
    

Genommen von Hier


19
2017-08-25 10:12



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


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

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

5
2018-02-13 23:28



noch besser: grep "\ install\ " /var/log/apt/history.log falls Sie eine Liste kopieren und in apt-get einfügen müssen - mchid


Wenn Sie die Pakete möchten, die installiert und installiert wurden nicht anschließend deinstalliert, versuche dies:

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 passenden Entfernungen.

Verweise:


2
2017-07-30 03:26



+1: Netter Einzeiler, aber nur gültig für die letzte Rotationsperiode. Auch statt sort, benutzen sort -uin beiden Fällen, um zu vermeiden, dass doppelte Zeilen wie im Paket erscheinen oracle-java8-installer und viele andere. - Cbhihe


Hier ist, wie Sie es tun, sagen Paket mütter:

_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

Verwenden dpkg.log Erfasst Vorgänge, die apt-get nicht sehen kann.

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
…

1
2017-12-20 22:58



Bitte beachten Sie, dass Triple-Backticks hier nicht so funktionieren, wie Sie denken. - edwinksl


Um den Update-Verlauf eines bestimmten Pakets zu erhalten, vorausgesetzt es wurde über apt installiert / aktualisiert, ist hier ein oneliner (bash und zgrep), Beispiel ist für 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)

Dies grept die Protokolldateien von apt für skypeforlinux, einschließlich der vorherigen drei Zeilen, um das Datum zu erhalten. Iteriert dann das Ergebnis und gibt die relevanten Daten und Versionen wieder.

Ersetze das Paket variable Wert mit Ihrem Paketnamen, funktioniert auch für mehrere Pakete, vorausgesetzt sie beginnen mit der gleichen Zeichenfolge.

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)

0
2017-07-19 09:54