Puis-je voir pourquoi un paquet est installé?

112

Pour un package spécifique, puis-je savoir pourquoi il est installé?

Alors, est-ce que je peux voir ou il est installé manuellement ou s'il est installé en tant que dépendance d'un autre paquet? Ou qu'il soit installé dans le cadre de la distribution?

Peter Smit
la source
Ceci est lié à (une partie de) cette question, voir cette réponse pour plus de détails.
Koushik
Une bien meilleure réponse pour 2017 ici: askubuntu.com/questions/128524/…
Lambart

Réponses:

107

Une solution rapide consiste à entrer la commande suivante dans un terminal:

aptitude why $package

ou, si vous êtes uniquement intéressé par la cause ultime:

aptitude why $package --show-summary

Remplacez $ package par le nom du paquet et vous devrez peut-être d'abord installer le aptitudepaquet.

Voici la sortie que vous pourriez obtenir pour aptitude why aspell --show-summary

Packages requiring aspell:
  inkscape

Pour plus de détails, vous courriez aptitude why aspell. Vous pouvez lire ci-dessous l’exemple de sortie ci-dessous: "Vous avez installé manuellement inkscapece qui nécessite libgtkspell, ce qui nécessite libenchantic2a, ce qui nécessite aspell". (Les imarqueurs indiquent les packages installés; les Amarqueurs indiquent les packages installés automatiquement.)

i   inkscape       Depends libgtkspell0 (>= 2.0.10)                                                                    
i A libgtkspell0   Depends libenchant1c2a (>= 1.6.0)                                                                   
i A libenchant1c2a Depends aspell-en | myspell-dictionary | aspell-dictionary | ispell-dictionary | hunspell-dictionary
i A aspell-en      Depends aspell (>= 0.60.3-2)

Enfin, la commande suivante

apt-cache rdepends --installed $package

répertorie les autres packages installés sur votre ordinateur qui dépendent directement de $ package . Vous pouvez ajouter l' --recurseoption permettant de répertorier tous les packages qui en dépendent directement ou indirectement.

enzotib
la source
L'aptitude à la pitié n'est pas incluse par défaut :(
badp
1
@badp merci de signaler. C'est la mauvaise nouvelle avec maverick, seulement pour économiser de l'espace sur l'image iso du livecd. Mais c'est un outil précieux, et je ne m'en passerai pas.
enzotib 10/10
15
apt-cache rdepends --recurse $packagedonne probablement trop de paquets. J'ajouterais une --installedoption pour limiter les packages installés. -il'option se limite aux paquets liés à la pré-dépendance et à la dépendance. Mais un paquet peut être installé car il est recommandé par un autre paquet. Pour inclure de tels paquets liés aux recommandations, je suppose que cela donnerait les bons:apt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed --recurse $package
jarno
4
équivalent un peu plus court de l'incantation de @ jarno, en supposant que vous êtes sur bash ou sur un autre obus avec extension de corset:apt-cache rdepends --no-{suggests,conflicts,breaks,replaces,enhances} --installed --recurse $package
akavel
30

Un raisonnement rapide et bref sur la raison pour laquelle un certain paquet a été installé peut être trouvé en tapant la commande suivante dans un terminal ( Applications -> Accessories -> Terminal):

aptitude why <package-name>

Remplacez-le par le nom du package qui vous intéresse. Par exemple, la saisie aptitude why libgoo-canvas-perlgénère les éléments suivants:

i   shutter Suggests libgoo-canvas-perl

Cela signifie essentiellement que le paquet shutterdans ce cas a suggéré d’ libgoo-canvas-perlêtre installé. En tapant, aptitude why shutterje peux remonter la chaîne de dépendance.

Cependant, il y a une mise en garde. Je remarque souvent que aptitude trouve que l'explication la plus plausible de la situation n'est peut-être pas la réalité, mais qu'elle vous donnera néanmoins un indice pour approfondir votre recherche.

Dans mon cas, shuttersuggère libgoo-canvas-perl- cependant, les packages suggérés ne sont pas installés automatiquement par défaut. Néanmoins, cela me rappelle «l'expérience» de ne pas pouvoir éditer des captures d'écran avec shutterlesquelles je me suis installé manuellement.ligbgoo-canvas-perl

Enfin, vous pouvez savoir si un paquet a été installé automatiquement (c'est-à-dire décidé par le système de gestion des paquets de consulter impérativement les dépendances et les recommandations des autres paquets que vous avez demandé d'installer) en exécutant la commande suivante.

aptitude show <package-name>

Cela produira une ligne comme ci-dessous (3ème ligne de la sortie):

Automatically installed: no

Pour plus d’informations, lancez info aptitude(dans un terminal) ou visitez la page wiki Aptitude

Pour savoir quand un paquet particulier a été installé, il y a 2 options:

  1. Le gestionnaire de paquets Synaptic conserve un historique de toutes les activités. Pour afficher le fichier journal de l'historique, choisissez Historique dans le menu Fichier. Vous pouvez rechercher Install(attention au cas) pour lister toutes les entrées concernant l’installation. Cependant, cela ne montrera que les paquets installés en utilisant Synaptic
  2. Exécutez la commande suivante dans un terminal. Ceci recherchera les journaux dpkg pour les entrées de l'historique d'installation. Toutefois, le nombre de journaux conservés est limité. Par conséquent, si le package que vous recherchez a été installé il y a longtemps, il se peut que vous ne le trouviez pas. Plus de détails ici

    zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
    
koushik
la source
1
Si vous voulez savoir quand un paquet a été installé ou mis à jourzcat -f /var/log/dpkg.log* | grep -i PackageName | egrep “\ install\ |\ upgrade\ “
Chris Good le
@ChrisGood: pouvez-vous ressaisir votre commentaire sans les guillemets intelligents, il est donc possible de copier / coller?
Dan Dascalescu
1
Merci d'avoir fait remarquer cela. Avec les guillemets doubles corrects: zcat -f /var/log/dpkg.log* | grep -i nom_package | egrep "\ install \ | \ upgrade \"
Chris Good
12

Oui, vous pouvez, et c'est une commande assez évidente, en fait. En supposant que vous avez installé aptitude, vous pouvez ouvrir un type d’annonce Terminal Window:

aptitude why package

Cela devrait donner une liste des paquets qui dépendent de ce paquet spécifique. Si c'est un paquet installé manuellement, il va dire quelque chose comme: "Il n'était pas possible de trouver une raison pour installer le paquet".

Daniel Rodrigues
la source
5

Voici un moyen simple qui ne repose pas sur le fait aptitudeque la version 10.10 n’est plus livrée par défaut.

Graphiquement

Ouvrez Synaptic et essayez de le supprimer.

Si une boîte de dialogue s'ouvre vous demandant de supprimer d'autres packages, il s'agit des packages qui (de manière récursive) en dépendent.

Du terminal

apt-get remove package_name_goes_here -s

Là encore, les packages qui seraient supprimés sont tous ceux qui en dépendent (de manière récursive). (Le -sparamètre dit apt-getde ne pas réellement supprimer le paquet.)

badp
la source
2
C'est une solution risquée, car elle risquerait de supprimer le package et toutes les dépendances en cas de clic incorrect.
ImaginaryRobots
1
@ImaginaryRobots, c'est beaucoup de mal cliquer. (Vous devez cliquer sur Ok dans la première boîte de dialogue, puis sur Appliquer, puis de nouveau sur Ok dans la boîte de dialogue de confirmation.) Pour la version du terminal, une y/Ndemande de confirmation supplémentaire doit également être envoyée en cas de faute de frappe -s. J'ai ajouté un avertissement cependant.
Badp
1
-1 car ces informations sont disponibles dans Synaptic sous l'onglet Dépendances lors de l'affichage des propriétés d'un package.
alexanderpas
@alex incorrect - cette boîte de dialogue ne vous indique pas si ce paquet est installé manuellement ou automatiquement. PS: Réinitialisation du compteur de la boîte de réception, essayez plus fort.
Badp
@badp no, mais cette information peut être trouvée avec le filtre d'état "Installé (manuel)" sur l'écran principal et peut être vue dans le menu paquet quand vous sélectionnez un paquet.
alexanderpas