Comment afficher l'historique de gestion de paquets apt-get via une ligne de commande?

Réponses:

131

Toutes les actions avec apt (apt-get) sont enregistrées. Ces fichiers sont disponibles dans / var / log / apt /. Pour afficher l'historique le plus récent, exécutez:

less /var/log/apt/history.log

Ces journaux sont soumis à une rotation (chaque mois, je suppose), les anciens fichiers seront suffixés avec un numéro et compressés. Donc, pour afficher le prochain historique, utilisez:

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

Pour afficher les journaux disponibles:

ls -la /var/log/apt/
Lekensteyn
la source
4
C'est excellent. La seule chose qui manque, c'est qui a exécuté les commandes.
Expiation limitée le
3
@LimitedAtonement Consultez /var/log/auth.log, il peut contenir l'utilisateur exécutant l'installation. (Cela n'aidera pas si l'installation a été appelée via un shell / programme exécuté en tant que root)
Lekensteyn
3
Aussi utile: zgrep, zcat
ishmael
Ce fichier consigne-t-il également les packages de dépendance installés à la suite de la version initiale d'apt-get?
Mahesha999
2
@LimitedAtonement, les dernières versions d'APT proposent une partie du journal "Demandé par:" pour indiquer qui a appelé la commande, ainsi que la commande invoquée, par exemple "Commandline: packagekit role = 'update-packages'" ou "Commandline: apt upgrade "
Michael Tunnell
21

Vous pouvez également créer une courte commande pour afficher le contenu intéressant.

  • Ajoutez cette fonction personnalisée à votre ~/.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
    }
  • Et appelez-le dans un terminal comme celui-ci:

    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
    

Tiré d' ici

Kresimir Pendic
la source
zgrep ... /var/log/dpkg.log*- sort les entrées des archives aussi.
Ctrl-C
6

Vous pouvez également utiliser la commande suivante pour répertorier les packages récemment installés

grep "\ install\ " /var/log/dpkg.log
Desta Haileselassie Hagos
la source
1
encore mieux: grep "\ install\ " /var/log/apt/history.logau cas où vous auriez besoin de copier et coller une liste dans apt-get
mchid
2

Si vous voulez que les paquets qui ont été installés et non désinstallés par la suite, essayez ceci:

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) 

C’est les installations moins toutes les correspondances supprimées.

Références:

hoffmanc
la source
+1: Nice one-liner mais valable uniquement pour la dernière période de rotation du journal. Aussi, au lieu de sort, utilisez sort -udans les deux cas pour éviter les doublons, tels que package oracle-java8-installerou beaucoup d’autres.
Cbhihe
1

Voici comment vous le faites réellement, dites package 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

Utiliser dpkg.log capture les opérations qu’apt -get ne voit pas.

Sortie:

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
la source
1
S'il vous plaît noter triple backticks ici ne fonctionnent pas comme vous le pensez.
Edwinksl
1

Pour obtenir l'historique des mises à jour d'un paquet spécifique en supposant qu'il a été installé / mis à jour via apt, voici un exemple (bash et zgrep), par exemple pour le paquet 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)

Les fichiers d’historique d’historique de apt pour skypeforlinux, y compris les trois lignes précédentes, permettent d’obtenir la date. Puis itère sur le résultat et fait écho aux dates et versions pertinentes.

Remplacez la valeur de la variable de package par votre nom de package, même pour plusieurs packages, à condition qu'ils commencent par la même chaîne.

Exemple avec sortie:

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
la source