web-dev-qa-db-fra.com

Comment puis-je 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 à la nouvelle; Je crée un nouveau système et je déplacerai les données au besoin. 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? Autrement dit, dpkg -l me montre tous les packages qui ont été installés, mais pas le package de niveau supérieur qui les a installés. S'il existe un moyen pour dpkg de me donner le package d'installation, je peux y trouver les uniques; sinon, je veux que quelque chose d'autre dise "vous avez installé ces 24 paquets".

94
Paul Hoffman

L'historique apt est dans /var/log/apt/history.log comme indiqué dans un commentaire ci-dessus. Cela dit, cela ne répertoriera pas les packages installés manuellement, à l'aide de dpkg ou d'interfaces graphiques telles que gdebi. Pour voir tous les packages qui sont passés par dpkg, vous pouvez regarder /var/log/dpkg.log.

76
ℝaphink
8
M_1

Vous pouvez répertorier les packages 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, manuellement ou automatiquement. À moins que vous ne soyez en train de (dé) installer 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 rassemblant le tout, 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)
grep -i "Commandline" /var/log/apt/history.log

Affiche tous les packages que vous avez installés à l'aide de: Sudo apt-get install xxxxx

3
Prent Rodgers

Au lieu d'une combinaison tac/tête, il est préférable d'utiliser la queue (pour les 25 dernières lignes):

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

Les autres réponses m'ont aidé mais m'ont donné trop de résultats. Pour réduire la sortie, j'ai commencé avec apt-mark showmanual comme dans cette réponse , puis filtré les packages installés à l'origine (voir cette réponse pour savoir comment obtenir une liste des packages 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 filtre les packages qui se trouvaient 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 est cette réponse qui recherche tous les journaux apt .

0
TooTone

Je greping également les fichiers d'historique tar.gz-ed de cette façon:

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

Si vous avez également besoin d'un horodatage, ajoutez simplement un paramètre supplémentaire -B1.

0
CraZ