Liste des dépendances (récursives) des packages installés dans APT

17

Pour chaque paquet que j'ai installé, je voudrais savoir quels paquets seraient installés si je le désinstalle. Un exemple de la sortie dont j'ai besoin est ( package: list of deps):

abc: foo bar
bcd: baz abc
bdd: baz fuubar

Ajouter

Si je vérifie ce qui serait réellement supprimé si je supprime le package en ppputilisant apt-get:

$ echo $(apt-get --dry-run remove ppp | grep '^Remv ' | cut -d' ' -f2)
gnome-ppp mint-meta-xfce network-manager-pptp-gnome network-manager-pptp wvdial pppoeconf pppoe pptp-linux pppconfig ppp

Je vois que c'est différent de ce que apt-cacheme donne show (qui je ne pense pas inclure les dépendances récursives):

$ apt-cache show ppp | grep '^Breaks: '
Breaks: network-manager (<= 0.8.0.999-1), network-manager-pptp (<= 0.8.0.999-1), pppdcapiplugin (<= 1:3.9.20060704+dfsg.1-1)

Annexe 2

Est-ce dpkg --get-selections | cut -f1un moyen fiable d'obtenir une liste des packages installés pour répéter?

Effacé
la source
1
L'analyse apt-get --dry-run removesemble fondamentalement correcte. Certains packages installés automatiquement ne sont nécessaires que pour les packages installés automatiquement qui ne sont nécessaires que par le package que vous supprimez. Est-ce pour cela que vous ne considérez pas cela comme une réponse appropriée?
Gilles 'SO- arrête d'être méchant'
en relation: askubuntu.com/questions/468753/recursive-dependencies
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

11

Vous avez posé quelques questions différentes ici, j'espère pouvoir au moins vous aider sur une ou deux.

Pour répertorier tous les packages installés, utilisez dpkgpour afficher dans une liste séparée par champs

dpkg -l 

Pour obtenir simplement la liste des packages, sans champs supplémentaires, vous pouvez donc la rediriger ailleurs.

dpkg -l | awk '{print $2 }' # Pipe to grep after the awk, or glob from dpkg

Par exemple, si je veux supprimer un ancien noyau,

apt-get purge `dpkg -l linux* | awk '{print $2}' | grep 3.0.0-12`

Le moyen le plus simple de parcourir toutes les dépendances inutiles est d'utiliser debfoster. Il s'exécute de manière interactive et passe par ce que vous voulez, leurs dépendances et peut supprimer ou répertorier ce qui n'est pas une dépendance récursive.

Pour répertorier toutes les dépendances récursives d'un package spécifique,

debfoster -d $PACKAGE ## PACKAGE is the specific package.

Une fois que vous avez exécuté, debfostervous pouvez également vérifier les dépendances d'un package,

debfoster -e $PACKAGE ## PACKAGE is the specific package.

Un très bon moyen de lister les paquets «orphelins», c'est avec deborphan. Exécutez deborphansans options, et il répertoriera tous les packages «orphelins». Un «orphelin» est un package dont rien ne dépend et que vous n'avez pas explicitement installé.

J'aime aussi nettoyer tous les paquets «orphelins», après une nouvelle installation. Après avoir supprimé des packages spécifiques, vous pouvez tout rater apt-get autoremove --purgeavec,

apt-get purge `deborphan`

Enfin, parfois, vous ne le faites pas --purgeet vous vous retrouvez avec des `` restes '' de paquets, les nouvelles versions de apt-getpeuvent les supprimer automatiquement. Pour supprimer tous les «restes» des packages désinstallés exécutés,

apt-get autoclean

Si vous n'avez pas la nouvelle version de apt-get, vous pouvez toujours les supprimer avec ces commandes. Ils font une erreur s'il n'existe aucun fichier «restant», il semble que l'autoclean peut parfois en manquer.

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs dpkg --purge
JM Becker
la source
debfoster existe toujours, mais est considéré comme remplacé par des fonctionnalités d'aptitude
Joshua Clayton
4
apt-cache show pkgname1 pkgname2...

listera (entre autres) ces dépendances (d'exécution). Ceci est généralement suffisant, sauf si vous l'introduisez dans une machine pour un traitement ultérieur. Si vous le voulez exactement dans le format que vous avez indiqué, vous devrez probablement écrire un script.

Faheem Mitha
la source
Désolé, j'ai mal formulé ma question. Je souhaite savoir quels packages seront désinstallés pour chaque package que j'ai installé. Et je dois également répertorier tous les packages que j'ai installés.
Supprimé le
2
@Deleted: Désolé, je n'ai pas vu ce commentaire jusqu'à présent. En réponse à "quels packages seraient désinstallés pour chaque package que j'ai installé" (je suppose que vous voulez que cette question réponde par package) essayez apt-get remove -s packagename. La liste de tous les packages que vous avez installés est juste dpkg -l.
Faheem Mitha
@FaheemMitha: ancien poste, mais toujours bon conseil apt-get remove -s packagename!
twan163
@ twan163 Heureux, cela vous a été utile.
Faheem Mitha
1

Je pense que vous devez continuer et créer une boucle pour la même chose:

apt-cache depends libtext-wrapi18n-perl |xargs apt-cache depends

Bien sûr, supprimez les en-têtes.

Golfe Persique
la source
2
apt-cache dépend a une option recuresapt-cache depends --recurse libtext
Joshua Clayton