264 votes

Comment lister les paquets installés manuellement ?

J'aimerais obtenir une liste des paquets installés manuellement par apt o aptitude et être en mesure de savoir si un foobar Le paquet a été installé manuellement ou automatiquement.

Comment pouvons-nous faire cela à partir de la ligne de commande ?

288voto

pithyless Points 984

Vous pouvez utiliser l'une ou l'autre de ces deux phrases. Les deux donnent exactement le même résultat sur ma machine et sont plus précises que toutes les solutions proposées jusqu'à présent (6 juillet 2014) dans cette question.

Utilisation de apt-mark :

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Utilisation de aptitude :

comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Très peu de paquets passent encore à travers les mailles du filet, bien que je soupçonne que ceux-ci sont en fait installé par l'utilisateur, soit juste après l'installation par le biais de la configuration de la localisation de la langue ou par exemple par le biais de l'installateur du codec Totem. De plus, les versions de linux-header semblent également s'accumuler, même si je n'ai installé que le métapaquet non spécifique à une version. Exemples :

libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29    

Comment cela fonctionne-t-il ?

  1. Obtenir la liste des paquets installés manuellement. Pour aptitude, l'option supplémentaire sed supprime les espaces restants à la fin de la ligne.
  2. Obtenir la liste des paquets installés juste après une nouvelle installation.
  3. Comparez les fichiers, n'éditez que les lignes du fichier 1 qui ne sont pas présentes dans le fichier 2.

Les autres possibilités ne fonctionnent pas aussi bien :

  • Utilisation de la ubuntu-14.04-desktop-amd64.manifest fichier ( aquí pour Ubuntu 14.04) au lieu de /var/log/installer/initial-status.gz . D'autres paquets sont affichés comme étant installés manuellement alors qu'ils ne le sont pas.
  • Utilisation de apt-mark showauto au lieu de /var/log/installer/initial-status.gz . apt-mark par exemple, n'inclut pas le paquet xserver-xorg, alors que l'autre fichier le fait.

J'ai utilisé plusieurs autres messages de StackExchange comme références, mais aucun ne fonctionne aussi bien que la solution ci-dessus :

Les deux énumèrent plus de paquets que la solution ci-dessus.

EDIT : Que faire si vous avez effectué une mise à jour depuis une version précédente :

Si vous avez mis à jour Ubuntu d'une version à l'autre, vous aurez probablement besoin d'ajuster ce processus. Dans ce cas, je vérifierais le fichier manifest de la version la plus récente (voir ci-dessus) en plus du fichier initial-status.gz de la version actuelle. Vous pouvez facilement faire cela en ajoutant simplement une autre comparaison. L'utilisation du seul fichier manifeste ne fonctionnera pas, car celui-ci ne contient malheureusement pas tout ce que contient le fichier initial_status.gz (j'ai vérifié).

91voto

Scott Saunders Points 12721

Dans les versions plus récentes du paquet apt, il y a aussi la commande apt-mark

apt-mark showmanual

36voto

s1037989 Points 461

Pour Ubuntu 16.04, vérifiez le fichier journal /var/log/apt/history.log .

Par exemple :

zgrep 'Commandline: apt' /var/log/apt/history.log /var/log/apt/history.log.*.gz

Ce n'est pas parfait, mais c'est plutôt bien pour rendre clair ce que j'ai installé à la main. J'ai mis un -B 1 sur le grep pour voir quand il a été installé.

Exemple de sortie

Commandline: apt install postgresql-9.5-plv8
Commandline: aptdaemon role='role-install-file' sender=':1.85'
Commandline: apt install task
Commandline: apt autoremove
Commandline: apt install atom
Commandline: apt upgrade
Commandline: apt-get install asciinema
Commandline: apt install iperf3
Commandline: apt upgrade
Commandline: apt-get install chromium-browser
Commandline: apt install joe cpanminus build-essential postgresql libdbd-pg-perl libcrypt-openssl-bignum-perl libcrypt-openssl-rsa-perl libio-socket-ssl-perl libnet-ssleay-perl libssl-dev
Commandline: aptdaemon role='role-commit-packages' sender=':1.2314'
Commandline: apt install git
Commandline: apt install sqlite
Commandline: apt install whois
Commandline: apt install libdbd-pg-perl
Commandline: apt install perl-doc
Commandline: apt upgrade

Je ne suis pas sûr que cela reprenne aptitude ou pas. Il ne semble pas détecter les installations à partir de l'application Ubuntu Software.

23voto

axolotl Points 743

Pour obtenir une liste de tous les paquets (non installés, installés par l'utilisateur ou installés par défaut, dans tous les PPA), apt utilise la méthode suivante :

apt list [option]

Les options possibles utiles à cet effet sont les suivantes :

--installed pour afficher uniquement les paquets qui sont installés sur le système (parmi plus de 50 000).

--manual-installed pour lister les paquets qui ont été explicitement installés par une commande, soit directement, soit en tant que dépendances.

Vous pouvez aussi le faire :

apt list --installed | grep -F \[installed\] pour obtenir une liste des paquets résultant des commandes de l'utilisateur et de leurs dépendances uniquement, et pour obtenir des informations supplémentaires sur ceux-ci telles que la version et l'architecture supportée (x86, x86_64, amd64, all, etc.)

22voto

alastairs Points 3045

apt-mark showauto | grep -iE '^foobar$' produira "foobar" si le paquet a été installé automatiquement, rien sinon.

aptitude search '!~M ~i' listera les paquets qui n'ont pas été installés automatiquement. C'est dommage qu'aptitude ne fasse pas partie de l'installation par défaut sur le bureau Ubuntu à partir de la version 10.10.

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