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

110

Existe-t-il un moyen d’afficher l’historique des paquets modifiés par apt-get via la ligne de commande?

    
posée NES 15.01.2011 - 14:04
la source

6 réponses

120

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 pivotés (tous les mois, je suppose), les anciens fichiers seront suffixés par un numéro et compressés. Donc, pour afficher l'historique suivant, utilisez:

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

Pour afficher les journaux disponibles:

ls -la /var/log/apt/
    
réponse donnée Lekensteyn 15.01.2011 - 14:10
la source
18

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

  • Ajoutez cette fonction personnalisée à votre ~/.bashrc :

    ### pars for fun: install | remove | rollback
    function apt-history(){
    
          case "" in
            install)
                  grep 'install ' /var/log/dpkg.log
                  ;;
            upgrade|remove)
                  grep  /var/log/dpkg.log
                  ;;
            rollback)
                  grep upgrade /var/log/dpkg.log | \
                      grep "" -A10000000 | \
                      grep "" -B10000000 | \
                      awk '{print "="}'
                  ;;
            *)
                  cat /var/log/dpkg.log
                  ;;
          esac
    }
    
  • Et appelez-le dans un terminal comme celui-ci:

    [email protected]:~$ 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
    

Extrait de ici

    
réponse donnée Kresimir Pendic 25.08.2013 - 12:12
la source
5

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

grep "\ install\ " /var/log/dpkg.log
    
réponse donnée Desta Haileselassie Hagos 14.02.2014 - 00:28
la source
2

Si vous souhaitez que les packages installés et non 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) 

Ce sont les installations moins les suppressions correspondantes.

Références:

réponse donnée hoffmanc 30.07.2015 - 05:26
la source
1

Voici comment vous le faites réellement, dites le paquetage:

_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

L'utilisation de dpkg.log capture les opérations que 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
…
    
réponse donnée Harald Rudell 20.12.2016 - 23:58
la source
0

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 oneliner (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)

Cela affiche les fichiers journaux d’historique d’apt pour skypeforlinux, y compris les trois lignes précédentes, pour 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 le nom de votre package, fonctionne 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)
    
réponse donnée kilgor 19.07.2018 - 11:54
la source

Lire d'autres questions sur les étiquettes