Comment puis-je lister les paquets installés par date d'installation?
Je dois le faire sur debian / ubuntu. Des réponses pour d'autres distributions seraient également utiles.
J'ai installé beaucoup de choses pour compiler un certain morceau de code, et je veux obtenir une liste des paquets que j'ai dû installer.
debian
package-management
apt
Elazar Leibovich
la source
la source
Réponses:
Les distributions basées sur RPM telles que Red Hat sont simples:
Sur Debian et d’autres distributions basées sur dpkg, votre problème spécifique est également simple:
À moins que le fichier journal ait été pivoté, dans ce cas, vous devriez essayer:
En général,
dpkg
etapt
ne semble pas suivre la date d’installation, cela s’appuie sur l’absence d’un tel champ dans ladpkg-query
page de manuel.Et éventuellement, les anciens
/var/log/dpkg.log.*
fichiers seront supprimés par la rotation des journaux, de sorte que ce moyen ne vous garantisse pas l’historique complet de votre système.Une suggestion qui apparaît quelques fois (par exemple ce fil ) est de regarder le
/var/lib/dpkg/info
répertoire. Les fichiers suggèrent que vous pourriez essayer quelque chose comme:Pour répondre à votre question sur les sélections, voici un premier passage.
construire la liste des paquets par dates
construire la liste des paquets installés
rejoindre les 2 listes
Pour une raison quelconque, cela n’imprime que très peu de différences pour moi. Il peut donc y avoir un bogue ou une hypothèse invalide concernant la signification
--get-selections
.Vous pouvez évidemment limiter les paquets en utilisant
find . -mtime -<days>
ouhead -n <lines>
, et changer le format de sortie à votre guise, par exemplepour répertorier uniquement les sélections installées (modifiées?) au cours des 4 derniers jours.
Vous pouvez probablement aussi supprimer les
sort
commandes après avoir vérifié l'ordre de tri utilisédpkg --get-selections
et rendre lafind
commande plus efficace.la source
apt-get
plus querpm
, mais maintenant Debian obtient -1 pour ne pas enregistrer la date d'installation dans la base de données. L'astuce Debian inclut tous les paquets installés, pas seulement les paquets sélectionnés , mais c'est un bon début.half-installed
entrées) si vous le faites:grep install\ /var/log/dpkg.log
grep " install " /var/log/dpkg.log
répertorie uniquement les lignes d’installation, plutôt que d’afficher celles de statut.Mikel a montré comment faire cela au niveau de dpkg . En particulier,
/var/lib/dpkg/info/$packagename.list
est créé lors de l’installation du package (et non modifié par la suite).Si vous avez utilisé les outils APT (ce que vous avez sans doute fait depuis que vous êtes préoccupé par les packages installés automatiquement ou manuellement), il existe un historique dans
/var/log/apt/history.log
. Tant qu’elle n’est pas retournée, elle garde trace de toutes les installations, mises à niveau et suppressions APT, avec une annotation pour les packages marqués comme installés automatiquement. C'est une fonctionnalité assez récente, introduite dans APT 0.7.26, donc dans Debian, elle est apparue dans squeeze. Dans Ubuntu, 10.04 a,history.log
mais l'annotation installée automatiquement n'est pas présente avant 10.10.la source
Rugueux, mais fonctionne:
la source
ls
. Voir mywiki.wooledge.org/ParsingLs pour des explications sur les raisons pour lesquelles cela est dangereux / intrinsèquement anormal - l'option la plus sûre consiste à utiliser l'unfind -printf
ou l' autre oustat --format
à générer un flux pouvant être analysé sans ambiguïté.ls -al --time-style=long-iso
devrait être utile. De plus, il est probablement inouï que quelqu'un nomme un paquet APT\n\t\r\v
en son nom.Le
/var/log/apt/history.log
fichier a un format maladroit IMHO.J'aurais préféré un enregistrement plus formaté en fichier journal
ou un XML montrant non seulement un {package} mais toutes les {dépendances}.
Dans sa version actuelle, vous pouvez découvrir les informations que vous recherchez, mais il faut un traitement judiciaire pour en extraire les détails.
la source
Cela fonctionne pour moi sur un système Debian. Je suppose que le format de fichier a changé depuis 2011. Ce système est assez récent, je ne m'attendrais donc pas à ce que cela fonctionne sur un système plus ancien, bien que cela puisse nécessiter simplement de décompresser les journaux et d'utiliser un glob pour se référer à tous.
Les deux premiers champs de chaque ligne du fichier
/var/log/dpkg.log
sont la date et l'heure. Notez la fin de l'espace avec install dans la partie grep, car les mises à niveau peuvent déclencher des installations, mais si j'ai bien compris, vous vouliez savoir ce qui était installé par les utilisateurs.la source
Voici le one-liner que tout le monde veut et a besoin:
Le résultat montrera tous les paquets (nouvellement) installés et mis à jour dans un ordre chronologique.
La ligne explication:
ls -1t
- obtenir tousdpkg.log*
les noms de fichiers dans l'ordre chronologiquezcat -f
- Si le fichier est de type gzip, décompressez-le, ELSE suffit de transmettre le contenu.tac
- La sortie inversée du chat , ligne par ligne, permet d’obtenir le bon ordre chronologique.grep
- Recherchez uniquement les packages installés ou mis à niveau .awk -F ':a'
- Séparer le champ d' architecture du nom du paquetcolumn -t
- joli imprimer les colonnes séparées par un espaceOn voudrait bien sûr faire un alias pour cela, mais malheureusement ce n’est pas possible car awk dépend de guillemets simples et doubles. À cet égard, il est préférable de l'inscrire dans un script bash et de
:
mieux gérer le séparateur pour les autres architectures de la colonne de zone.La sortie est:
Inconvénient:
la source
En notant cela parce que vous mentionnez que les autres réponses de distribution sont les bienvenues. rpm a un grand nombre de balises de format de sortie, dont INSTALLTIME. (Utilisation à
wget
titre d'exemple)Cela peut être formaté de plusieurs manières. Je l'utilise de cette façon:
Ces deux pages contiennent une tonne d'informations utiles sur la résolution des problèmes de métadonnées RPM:
http://www.rpm.org/max-rpm/s1-rpm-query-parts.html
http://www.rpm.org/max-rpm/s1-rpm-query-handy-queries.html
Le tri de ces informations vous donnerait une solution efficace à votre problème.
la source
GNU / Linux Debian n’a pas d’outil intégré à ce problème, mais toutes les informations sur les programmes installés de manière standard sont enregistrées dans des fichiers avec nom -programme.list à l’emplacement / var / lib / dpkg / info / . Mais il n'y a aucune information sur les programmes installés manuellement ici.
Une solution longue ligne unique :
Explication :
ls -rt
sort les fichiers triés par modification de date dans l'ordre inverse, c'est- à- dire avec les fichiers les plus récents en fin de liste.stat
imprime la date du fichier sous une forme lisible par l'homme.printf
affiche le nom du paquet et la date de sa dernière modification.for
boucle dans son ensemble imprime les noms de package et les dates du plus ancien au plus récent.Exemple de sortie (tronqué):
Le principal défaut de cette solution est qu’elle n’est pas bien testée en production.
la source
/var/lib/dpkg/info/
. C'est aussi pourquoi utiliser/var/log/dpkg.log*
peut être préféré.C'est rude, mais fonctionne aussi rapidement que d'autres solutions. Le format de date est aaaammjjhhmmss, ce qui signifie qu’un peu, une réorganisation ou une suppression de format entraîne un nombre pouvant être trié.
Un grand merci aux autres solutions, cette liste répertorie les noms de paquet dans l’ordre d’installation qui pourraient être utilisés dans un système d’exécution conçu pour la copie.
la source