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


85

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 dans 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 de la nouvelle.

Existe-t-il un moyen simple de trouver l'historique de toutes les commandes "sudo apt-get install" que j'ai données au fil du temps? C'est-à-dire que dpkg -l me montre tous les paquetages installés, mais pas le paquetage de niveau supérieur les ayant installés. S'il existe un moyen pour dpkg de me donner le paquet d'installation, je peux y trouver les uniques; sinon, je veux que quelque chose d'autre dise "vous avez installé ces 24 paquets".



Pouvez-vous accepter une réponse ci-dessous? Être reconnaissant aux personnes qui ont répondu.
m-ric


Ces solutions ne vérifieront que ce qui est arrivé APRÈS la dernière rotation du journal. Ils ne vérifient pas toute l'histoire.
Kraang Prime

Cette réponse, askubuntu.com/a/250530/197730 , donne à cette question un moyen simple et rapide de répertorier tous les packages installés .
TooTone

Réponses:


69

L' apthistoire est /var/log/apt/history.logcomme dit dans un commentaire ci-dessus. Cela dit, cela ne listera pas les packages qui ont été installés manuellement, en utilisant des dpkginterfaces graphiques telles que gdebi. Pour voir tous les paquets qui sont passés dpkg, vous pouvez regarder /var/log/dpkg.log.


8

5
La procédure du premier lien ne fait pas la distinction entre les packages installés automatiquement et les packages installés manuellement. /var/log/apt/history.log(vous vous êtes trompé d’emplacement) aura disparu après quelques mois.
Gilles

Gilles a raison sur les deux points. Je n'ai que quelques mois de ces journaux, et je ne vois même pas comment le taux de suppression des journaux est défini (c'est fait avec 'newsyslog' sur FreeBSD). Donc, je n'ai toujours pas de solution, mais j'ai quelques indications. Je peux au moins grep le résultat de la commande dans l'article de clonage, rechercher des noms "de haut niveau", les installer sur le nouveau, faire la même chose sur la nouvelle boîte, comparer les deux résultats et répéter jusqu'à satisfaction. Je voudrais encore entendre plus d'idées.
Paul Hoffman

7

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 packages dont l'installation a été demandée, que ce soit manuellement ou automatiquement. Sauf si vous êtes en train d'installer ou de désinstaller des packages, voici la liste des packages installés.

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

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

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

En regroupant tous ces éléments, la commande suivante répertorie les packages 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
--- résultat très différent decomm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Cbhihe

Sur Debian, il y en a une apt-mark showmanualqui est équivalente à votre dernière commande.
maxschlepzig

3
grep -i "Commandline" /var/log/apt/history.log

Affiche tous les paquets que vous avez installés en utilisant: sudo apt-get install xxxxx


Cela ne diffère pas suffisamment de la réponse de @ ℝaphink et devrait faire l'objet d'un commentaire.
Karl Richter

2

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

Cela ne diffère pas suffisamment de la réponse de @ ℝaphink et devrait faire l'objet d'un commentaire.
Karl Richter

De plus, ce n'est pas pareil. tail listera les dernières lignes du fichier, dans l'ordre dans lequel elles sont dans le fichier. tac inversera l'ordre pour que la dernière ligne soit maintenant la première, de l'avant-dernière seconde, etc. Encore une fois, vous semblez également risquer de vous tromper lorsque vous dites que quelque chose est "meilleur" sans expliquer pourquoi. Je veux dire "meilleur" selon qui? Pour quelle exigence? Semble un peu trop confiant.
Todd Walton

0

Les autres réponses ont aidé mais m'ont donné trop de résultats. Pour réduire la sortie, j'ai commencé avec apt-mark showmanualcomme dans cette réponse , puis j'ai filtré les paquets installés à l'origine (voir cette réponse pour savoir comment obtenir une liste des paquets installés à l'origine; j'utilise Ubuntu 18.04.2 d'où le lien ci-dessous) .

BASE_PACKAGES_MANIFEST=http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.manifest
REMOVE_VERSIONS_REGEX='[0-9][.-][0-9][.-][0-9]|[0-9][.-][0-9]|[0-9]'
paste  <( apt-mark showmanual ) <( apt-mark showmanual | sed -r "s/$REMOVE_VERSIONS_REGEX//g" ) |
    grep -vf <( curl $BASE_PACKAGES_MANIFEST | cut -f1 | sed -r "s/$REMOVE_VERSIONS_REGEX|:amd//g" ) |
    cut -f1 |
    sort |
    uniq

Le script élimine les packages contenus dans le manifeste d'origine en effectuant une comparaison indépendante de la version, de sorte que les packages mis à niveau n'apparaissent pas dans la liste. Je me suis retrouvé avec une liste d'environ 60 paquets.

L'autre façon que j'aime, c'est cette réponse qui recherche dans tous les journaux apt .


-1

Pour obtenir la liste des derniers packages installés par ordre décroissant, j'aime utiliser (par exemple, 25 lignes):

tac /var/log/apt/history.log |head --lines=25

1
Plus efficace (et allitératif) serait: tail -25 /var/log/apt/history.log | tac
agc le

Cela ne diffère pas suffisamment de la réponse de @ ℝaphink et devrait faire l'objet d'un commentaire.
Karl Richter
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.