Je voudrais obtenir une liste des paquets installés manuellement par apt
ou aptitude
et savoir si un foobar
paquet a été installé manuellement ou automatiquement. Existe-t-il un moyen intéressant de le faire depuis la ligne de commande?
183
Réponses:
Vous pouvez utiliser l'une ou l'autre de ces deux lignes. Les deux donnent exactement le même résultat sur ma machine et sont plus précis que toutes les solutions proposées jusqu'à présent (6 juillet 2014) dans cette question.
Utilisant
apt-mark
:Utilisant
aptitude
:Très peu de paquets restent encore entre les mailles du filet, bien que je suppose que ceux - ci sont réellement installés par l'utilisateur, soit juste après l'installation via la configuration de la localisation de la langue ou, par exemple, via l'installateur de codecs Totem. De plus, les versions de linux-header semblent également s'accumuler, même si je n'ai installé que le méta-paquet non spécifique à la version. Exemples:
Comment ça marche:
sed
bandes supplémentaires éliminent les espaces blancs restants en fin de ligne.Les autres possibilités ne fonctionnent pas aussi bien:
ubuntu-14.04-desktop-amd64.manifest
fichier ( ici pour Ubuntu 14.04) au lieu de/var/log/installer/initial-status.gz
. Plus de paquets sont montrés comme installés manuellement même s'ils ne le sont pas.apt-mark showauto
au lieu de/var/log/installer/initial-status.gz
.apt-mark
par exemple, n'inclut pas le paquet xserver-xorg, contrairement à l'autre fichier.J'ai utilisé divers autres postes StackExchange comme référence, mais aucun ne fonctionne aussi bien que la solution ci-dessus:
Les deux listes plus de paquets que la solution ci-dessus.
EDIT: Que faire si vous avez mis à jour une version précédente:
Si vous avez mis à jour Ubuntu d’une version à l’autre, vous devrez probablement ajuster ce processus. Dans ce cas, je vérifierais le fichier manifeste de la nouvelle version (voir ci-dessus) en plus du fichier initial-status.gz de la version actuelle. Vous pouvez facilement le faire en ajoutant simplement une autre comparaison. Utiliser uniquement le fichier manifeste ne fonctionnera pas, car le fichier manifeste ne contient malheureusement pas tout ce que contient le fichier initial_status.gz (j'ai vérifié).
la source
/var/log/installer/initial-status.gz
manque. Aussi, je veux savoir si cela dépend de l'aptsmanual
ou non?showmanual
commande (ci-dessous). Et utilisezcomm
pour comparer les deux listes (triées). Leshowmanual
résultat m'a donné 1840 paquets plus uniques deapt-mark showmanual
non représentés par cette méthode. AUCUN paquet n'était spécifique à la sortie de cettecomm
commande. Je pense qu'il est plus intéressant d'enregistrer que pour mon PC, 894 paquets sont listés dans Les deux résultats. Je ne sais pas pourquoi il y a une telle différence. Certains (beaucoup?) Paquets semblent être spécifiques à la version. D'autres comme XOrg, les composants GTK et d'autreslib*
choses pourraient être mises à jour. Quoi qu'il en soit, cette réponse est un très bon début.apt-mark showmanual
. C'est intéressant de voir combien de différences sont visibles. Votre liste contient 238 paquets, tandis que showmanual en retourne 1717. Sur les 2179 paquets installés, il n'y en a que 223 dans les deux listes, 15 le sont dans la vôtre (exemples: nodejs, lightdm) et 223 dans le fichier showmanual (exemples: xserver-xorg, ubuntu-desktop). Il semble que votre liste soit plus utile, mais sans savoir d'où viennent ces différences, il n'est pas facile de décider ... (mais je suis sûr que j'ai installé manuellement nginx et lightdm ...) [désolé, je viens d'écrire le même;)]Dans les versions plus récentes du paquet apt, il y a aussi la commande apt-mark
la source
linux-image-3.11.0-*-generic
etc comme manuellinux-image-3.13.0-24-generic
est manuel mais le courantlinux-image-3.13.0-27-generic
est automatique. Il semble qu'une mise à jour d'un package de référencement (dans ce caslinux-image-generic
, qui a changé les dépendances), la marque manuelle est automatiquement définieapt-get autoremove
. Ce n'est certainement pas ce que vous voulez.Pour Ubuntu 16.04, consultez le fichier journal
/var/log/apt/history.log
.Par exemple:
Ce n’est pas parfait, mais c’est assez bon pour préciser exactement ce que j’ai installé à la main. Mettez un
-B 1
sur le grep pour voir quand il a été installé.Exemple de sortie
Je ne sais pas si cela prend
aptitude
ou non. Il ne semble pas que les installations de l'application de bureau Ubuntu Software soient récupérées.la source
apt-mark showauto | grep -iE '^foobar$'
affichera "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. Dommage qu’aptitude ne fasse pas partie de l’installation par défaut sur Ubuntu Desktop à partir de 10.10.la source
aptitude search
montre TOUS les paquets pas seulement ceux qui sont installés manuellement (je suppose que c'est ce que l'OP voulait)aptitude search '!~M ~i'
et il répertorie 1043 paquets. Il n’ya aucun moyen d’installer autant de paquets manuellement.Le script suivant imprimera tous les packages qui ne sont pas configurés pour une installation automatique et qui ont donc été installés manuellement:
il est basé sur la façon dont apt-mark affiche les paquets installés automatiquement.
la source
sys.exit(1)
sansimport sys
peut entraîner une erreur dans les versions plus récentes de python. Soitimport sys
ou utiliserexit(1)
.Pour obtenir la liste de tous les packages (non installés, installés par l'utilisateur ou installés par défaut sur tous les PPA),
apt
utilisez la méthode suivante:apt list [option]
Les options possibles pour cela sont:
--installed
pour afficher uniquement les packages installés sur le système (sur plus de 50 000)--manual-installed
pour répertorier les packages qui ont été explicitement installés par une commande, directement ou sous forme de dépendances.Alternativement, vous pouvez faire:
apt list --manual-installed | grep -F \[installed\]
pour obtenir une liste des packages résultant uniquement des commandes utilisateur et de leurs dépendances, ainsi que pour obtenir des informations supplémentaires telles que la version et l'architecture prises en charge (x86, x86_64, amd64, tous, etc.)la source
Comme plusieurs personnes l'ont commenté, apt-mark showmanual semble être un peu bogué (et je l'ai signalé comme bogue 727799 ). Lorsque je l'utilise, il signale en fait beaucoup de choses qui ne sont même pas consignées dans / var / lib / apt / extended_states (où elles sont censées être stockées) et apt-get ne consigne pas les choses telles qu'elles sont installées dans / var / lib / apt / extended_states (uniquement dans / var / lib / dpkg / status). Le script python de txwikinger ci-dessus tire directement de / var / lib / apt / extended_states, mais si vous l'utilisez aujourd'hui, la syntaxe risque de ne pas fonctionner (le mien vient de générer des erreurs avec Kubuntu 13.10). La syntaxe mise à jour est la suivante:
Pour moi, c'était une liste très courte de 5 éléments qui ne semble pas être exacte non plus.
la source
sys.exit(1)
sansimport sys
peut entraîner une erreur dans les versions plus récentes de python. Soitimport sys
ou utiliserexit(1)
.Je voudrais donner une solution graphique.
Ouvert
Synaptic Package Manager
Aller à
Status
Cliquez sur
Installed (manual)
Il donnera la liste des paquets installés manuellement par apt ou aptitude.
Malheureusement, je n'ai trouvé aucune option
Custom Filters
pour savoir si unfoobar
paquet a été installé manuellement ou automatiquement.Si le paquet est sous
Installed
mais pas sous,Installed (manual)
il a été installé automatiquement. Si le paquet est en dessous,Installed (manual)
il a été installé manuellement.la source
Si personne ne vous répond gentiment en utilisant une commande apr-quelque chose, vous pouvez le faire à la dure . Apt-get stocke ses informations dans / var / lib / apt / extended_states. Tout fichier installé automatiquement sera ajouté à ce fichier. Si vous installez manuellement un paquet déjà dans ce fichier, le paquet restera dans ce fichier mais avec Auto-installé: 0 à la deuxième ligne. Ce n'est pas supprimé.
Remarque: Comme prévu, de meilleures réponses sont susceptibles de fonctionner si les changements d'emplacement de fichier sont apparus. Je garde le mien au cas où les informations sur l'emplacement du fichier seraient utiles.
la source
apt-get install liferea
et il n'a pas été installé, mais j'ai obtenu une sortie qui ressemblait à "marquée comme installée manuellement". À présent, liferea est toujours dans le fichier, sauf que la ligne suivante a un0
au lieu de1
. En outre, vous devriez changer votre motif de regex à la" foobar$"
place de justefoobar
.Après avoir beaucoup cherché sur Google, j'ai réussi à assembler ce script. Cela fonctionne bien pour moi:
la source
sort -u
au lieu desort | unique
. Comme l’apt-mark
architecture n’a pas été affichée, vous devriez la supprimer de la sortie de dpkg avant les opérations définies (ou leur utilisationdpkg-query -W -f='${Package}\n'
). En outre, dpkg peut lister certains paquets qui ne sont pas installés actuellement. En ce qui concerne "desc", vous pouvez utiliser `dpkg-query -W -f = '# $ {binary: Summary} \ n' $ pack, ce qui est plus rapide.apt-mark
peut afficher l’architecture de certains paquets, mais pas autantdpkg -l
.apt-cache search
est lent. Obtenir une liste des dates installées à l'avance en utilisant quelque chose comme help.ubuntu.com/community/ListInstalledPackagesByDate pourrait être plus efficaceComme l'a dit Li Lo, vous
apt-mark showauto
devriez avoir une liste complète d'éléments automatiquement installés.Maintenant, pour montrer les choses qui sont installées manuellement, il s’avère qu’il existe un joli modificateur de recherche simple pour aptitude. Mais vous ne voulez pas faire ça. Vous voulez écrire une énorme commande bash qui fait de la science de fusée.
Remarque: il s’agit plus d’une illustration de la façon dont vous allez avoir l’air génial de donner des ordres énormes à tous vos amis.
Je l'ai cassé sur deux lignes pour plus de lisibilité. Qu'est-ce que cela fait?
apt-mark
la source
comm -3 <(dpkg -l | grep '^ii' | cut -d \ -f 3|sort) <(apt-mark showauto|sort)
est bien mieux;)Ceci listera tous les packages installés manuellement sans: dépendances, packages désinstallés, packages installés lors de l'installation du système.
la source