Comment puis-je répertorier les packages installés par date d'installation ?
Je dois le faire sur debian/ubuntu. Des réponses pour d'autres distributions seraient bien aussi.
J'ai installé beaucoup de choses pour compiler un certain morceau de code, et je veux obtenir une liste des packages que j'ai dû installer.
Réponse acceptée :
Les distributions basées sur RPM comme Red Hat sont faciles :
rpm -qa --last
Sur Debian et d'autres distributions basées sur dpkg, votre problème spécifique est également simple :
grep install /var/log/dpkg.log
À moins que le fichier journal n'ait subi une rotation, auquel cas vous devriez essayer :
grep install /var/log/dpkg.log /var/log/dpkg.log.1
En général, dpkg
et apt
ne semblent pas suivre la date d'installation, en raison de l'absence d'un tel champ dans le dpkg-query
page de manuel.
Et éventuellement l'ancien /var/log/dpkg.log.*
les fichiers seront supprimés par la rotation des journaux, il n'est donc pas garanti que cette méthode vous donne l'historique complet de votre système.
Une suggestion qui apparaît plusieurs fois (par exemple, ce fil) est de regarder le /var/lib/dpkg/info
répertoire.
Les fichiers qu'il contient suggèrent que vous pourriez essayer quelque chose comme :
ls -t /var/lib/dpkg/info/*.list | sed -e 's/.list$//' | head -n 50
Pour répondre à votre question sur les sélections, voici un premier passage.
construire la liste des packages par dates
$ find /var/lib/dpkg/info -name "*.list" -exec stat -c $'%nt%y' {} ; |
sed -e 's,/var/lib/dpkg/info/,,' -e 's,.listt,t,' |
sort > ~/dpkglist.dates
construire la liste des packages installés
$ dpkg --get-selections | sed -ne '/tinstall$/{s/[[:space:]].*//;p}' |
sort > ~/dpkglist.selections
rejoindre les 2 listes
$ join -1 1 -2 1 -t $'t' ~/dpkglist.selections ~/dpkglist.dates
> ~/dpkglist.selectiondates
Pour une raison quelconque, il n'affiche pas beaucoup de différences pour moi, il peut donc y avoir un bogue ou une hypothèse invalide sur ce que --get-selections
signifie.
Vous pouvez évidemment limiter les packages soit en utilisant find . -mtime -<days>
ou head -n <lines>
, et modifiez le format de sortie comme vous le souhaitez, par exemple
$ find /var/lib/dpkg/info -name "*.list" -mtime -4 |
sed -e 's,/var/lib/dpkg/info/,,' -e 's,.list$,,' |
sort > ~/dpkglist.recent
$ join -1 1 -2 1 -t $'t' ~/dpkglist.selections ~/dpkglist.recent
> ~/dpkglist.recentselections
pour répertorier uniquement les sélections qui ont été installées (modifiées ?) au cours des 4 derniers jours.
Vous pourriez probablement aussi supprimer le sort
commandes après avoir vérifié l'ordre de tri utilisé par dpkg --get-selections
et faire le find
commande plus efficace.