web-dev-qa-db-fra.com

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

Est-il possible d'afficher l'historique des paquets modifiés par apt-get via une ligne de commande?

116
NES

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 (tous les 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/
129
Lekensteyn

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é de ici

21
Kresimir Pendic

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

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

Si vous voulez que les paquets qui ont été installés et pas ultérieurement désinstallés, 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) 

Il s’agit de l’installation moins toute suppression correspondante.

Références:

2
hoffmanc

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
…
1
Harald Rudell

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 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)
1
kilgor