Existe-t-il un moyen d'afficher l'historique des paquets qui ont été modifiés par apt-get via la ligne de commande ?
Réponses
Trop de publicités?Toutes les actions avec apt (apt-get) sont enregistrées. Ces fichiers sont disponibles dans /var/log/apt/. Pour afficher le journal d'historique le plus récent, exécutez :
less /var/log/apt/history.log
Ces journaux font l'objet d'une rotation (tous les mois je suppose), les anciens fichiers seront suffixés par un numéro et compressés. Donc pour voir le prochain historique, utilisez :
zless /var/log/apt/history.log.1.gz
Pour afficher les journaux disponibles :
ls -la /var/log/apt/
Vous pouvez aussi faire 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 l'appeler 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
Si vous voulez que les paquets qui ont été installés et no ensuite désinstallé, 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 des installations moins les suppressions correspondantes.
Références :
-
comm
: https://stackoverflow.com/a/11963862/338303 -
<(grep...)
la syntaxe : https://unix.stackexchange.com/questions/73931/redirecting-multiple-commands-as-input
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), l'exemple est 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)
Cette commande parcourt les fichiers journaux de l'historique d'apt pour skypeforlinux en incluant les trois lignes précédentes pour obtenir la date. Ensuite, elle itère sur le résultat et renvoie les dates et versions pertinentes.
Remplacer le paquet avec le nom de votre paquet. Cela fonctionne même pour plusieurs paquets, à 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éponses précédentes
- Plus de réponses