139 votes

Comment obtenir l'historique de "apt-get install" sur Ubuntu ?

Je suis sur le point de déplacer un serveur d'une boîte Ubuntu à une autre. Je ne clone pas l'ancienne boîte vers la nouvelle ; je crée un nouveau système et je déplacerai les données si nécessaire. Je veux installer tous les logiciels que j'ai sur l'ancienne boîte sur la nouvelle.

Existe-t-il un moyen simple de retrouver l'historique de toutes les commandes "sudo apt-get install" que j'ai données au fil du temps ? En effet, dpkg -l me montre tous les paquets qui ont été installés, mais pas quel paquet de premier niveau les a installés. S'il existe un moyen pour dpkg de me donner le paquet d'installation, je peux y trouver les paquets uniques ; sinon, je veux quelque chose d'autre pour dire "vous avez installé ces 24 paquets".

1 votes

Pouvez-vous accepter une réponse ci-dessous ? Pour être reconnaissant aux personnes qui ont répondu.

0 votes

127voto

raphink Points 10967

El apt l'histoire est dans /var/log/apt/history.log comme dit dans un commentaire ci-dessus. Cela dit, cela ne listera pas les paquets qui ont été installés manuellement, à l'aide de la commande dpkg ou des interfaces graphiques telles que gdebi . Pour voir tous les paquets qui sont passés par dpkg vous pouvez regarder /var/log/dpkg.log .

1 votes

Sur mon installation Ubuntu 18.04, le journal ne remonte qu'au début du mois en cours.

19voto

Vous pouvez lister les paquets dont l'installation a été explicitement demandée avec apt-mark .

apt-mark showmanual

Si vous utilisez une ancienne version de Debian, voici une méthode manuelle.

La commande suivante donne la liste des paquets dont l'installation a été demandée, que ce soit manuellement ou automatiquement. À moins que vous ne soyez au milieu d'une (dé)installation de paquets, il s'agit de la liste des paquets installés.

dpkg --get-selections | sed -n 's/\t\+install$//p'

La commande suivante donne un sur-ensemble de paquets installés automatiquement :

</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print$2}'

En mettant tout cela ensemble, la commande suivante liste les paquets installés manuellement :

comm -23 <(dpkg --get-selections | sed -n 's/\t\+install$//p') \
         <(</var/lib/apt/extended_states \
           awk -v RS= '/\nAuto-Installed: *1/{print$2}' |sort)

1 votes

--- résultat très différent de comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

0 votes

Sur Debian, il y a apt-mark showmanual ce qui est équivalent à votre dernière commande.

8voto

M_1 Points 363

5 votes

La procédure indiquée dans le premier lien ne fait pas de distinction entre les paquets installés automatiquement et les paquets installés manuellement. /var/log/apt/history.log (tu t'es trompé d'endroit en fait) auront disparu après quelques mois.

0 votes

Gilles a raison sur les deux points. Je n'ai que l'équivalent d'un mois de ces journaux, et je ne peux même pas voir comment le taux de suppression des journaux est défini (c'est fait avec 'newsyslog' sous FreeBSD). Je n'ai donc toujours pas de solution, mais j'ai quelques pistes. Je peux au moins récupérer la sortie de la commande dans l'article sur le clonage, rechercher les noms de "haut niveau", les installer sur la nouvelle boîte, faire la même chose sur la nouvelle boîte, différencier les deux résultats, et répéter jusqu'à ce que je sois satisfait. J'aimerais quand même entendre d'autres idées.

5voto

CraZ Points 160

Je suis aussi en train de "greffer" tar.gz -de cette façon :

zgrep -E "Commandline: apt(|-get) install" /var/log/apt/history.log*

Si vous avez besoin de l'horodatage également, il suffit d'ajouter un paramètre supplémentaire -B1 .

0 votes

zgrep -B1 -E "Commandline: apt(|-get) install" /var/log/apt/history.log*

3voto

Integer Points 139

Au lieu de la combinaison tac / head, il est préférable d'utiliser tail (pour les 25 dernières lignes) :

tail -n 25 /var/log/apt/history.log

0 votes

Cela ne diffère pas suffisamment de la réponse de @aphink et devrait être un commentaire de celle-ci.

0 votes

De plus, ce n'est pas la même chose. tail listera les dernières lignes du fichier, dans l'ordre dans lequel elles sont dans le fichier. tac inversera l'ordre de sorte que la dernière ligne soit maintenant la première, l'avant-dernière soit la deuxième, etc. Encore une fois, il semble que vous risquez de vous tromper lorsque vous dites que quelque chose est "meilleur" sans expliquer pourquoi. Je veux dire, "meilleur" selon qui ? Pour quelle exigence ? Ça semble un peu trop sûr de soi.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X