Il existe de nombreuses façons d'afficher les packages installés manuellement à l'aide de apt
, tels que:
apt-mark showmanual
Mais parfois, cette sortie est trop. Par exemple, si l'utilisateur a installé manuellement le package foo
:
apt-get install foo
... et foo
dépendait bar
et baz
, puis apt-mark showmanual
affichera:
bar
baz
foo
Comment pouvons-nous répertorier uniquement les packages de niveau supérieur installés manuellement ( c'est-à-dire foo
) sans leurs dépendances ( c'est-à-dire non baz
, ni bar
)?
Le code suivant semble fonctionner, mais appeler GNU quelques centaines de fois est trop lent (trois heures avec un processeur à 4 cœurs):parallel
apt-rdepends
apt-mark showmanual |
tee /tmp/foo |
parallel "apt-rdepends -f Depends,PreDepends,Suggests,Recommends {} |
tail +2" 2> /dev/null |
tr -s ' ' '\n' |
grep -v '[():]' |
sort -Vu |
grep -wv -f - /tmp/foo
Réponses:
Cela pourrait être fait en utilisant l'API Python apt. Les packages que vous voyez
apt-mark showmanual
sont exactement ceuxapt.cache.Cache()
pour lesquelsis_installed
est vrai etis_auto_installed
faux. Mais, il est plus facile de traiter les dépendances:Même cela répertorie certains packages que je ne m'attendrais pas à voir là-bas (
init
,grep
?!).la source
init
etgrep
, (peut-être que vos données apt sont corrompues?), Il montre également trop de bibliothèques. OTOH, mon code de 3 heures manque quelques éléments qui devraient être là, des éléments que lepython
code ci-dessus imprime. Il est possible que les éléments manquants n'aient pas été installés avecapt
.python
code ci-dessus est 3600 fois plus rapide (c'est-à-dire qu'il a fallu 3 secondes) que mon code (3 heures). Au plaisir de tester la version récursive ...Le script shell suivant recherche les parents de toutes les dépendances installées.
J'ai utilisé
tsort
dans ce script. Je suppose que lors de l'ajout d'un marqueur à la fin sans dépendances, le marqueur sera également la dernière entrée sans dépendances dans mon résultat. Je peux donc faire la différence entre le dernier paquet sans dépendances et le premier paquet avec dépendances.J'ai remarqué un problème avec cette solution:
il y a des cycles dans le graphique des dépendances. Ces entrées sont ignorées par
tsort
.la source
Vous pouvez trouver tous les packages installés manuellement sans leur 1er niveau de dépendances comme suit:
Vous pouvez également utiliser la magie à une ligne suivante:
la source
dasher
package. Sur mon système , le code OP redirigée vers lessort -V
sorties 475 lignes, de Muru code de 914 lignes, (y comprisdasher
), et les sorties de code de cette réponse 995 lignes.