Existe-t-il un moyen de répertorier toutes les «alternatives» configurables (liens symboliques pour des commandes similaires) sur le système?

24

La alternativescommande (package chkconfig) sur RHEL / Fedora gère les liens symboliques qui lient un nom générique à l'une des implémentations alternatives. Par exemple, un mtagroupe de liens symboliques peut être fourni par Sendmail et Postfix (pour implémenter la sendmailcommande ie ):

alternatives --display mta

Bien que je puisse --displayun groupe de liens symboliques, je dois d'abord deviner son nom (c'est-à-dire mta).

Puis-je simplement lister tous les groupes de liens symboliques configurables possibles (comme mta) parmi lesquels choisir?

La raison en est que j'oublie parfois certains noms de groupe.

uvsmtid
la source

Réponses:

25

Sur Debian (mais pas Fedora ou RHEL), pour voir une liste de tous les "noms alternatifs principaux":

update-alternatives --get-selections

--get-selections répertorier les noms alternatifs principaux et leur statut.

Et pour chacun de ceux répertoriés, vous pouvez exécuter --list $ALTERNATIVE_NAME, par exemple

update-alternatives --list editor

--list name Affichez toutes les cibles du groupe de liens.

Si vous souhaitez voir une liste de toutes les alternatives dans leurs groupes respectifs, vous pouvez exécuter ce qui suit dans le fishshell:

for alternative in (update-alternatives --get-selections)
    echo $alternative 
    update-alternatives --list (echo $alternative | cut -d" " -f1)
    echo
end | pager

La syntaxe (ba | z)? Sh devrait être quelque chose de similaire.

Pour modifier les alternatives, exécutez sudo update-alternatives --config $ALTERNATIVE_NAME

kzh
la source
1
Sur mon Fedora 12 update-alternativesest un lien symbolique vers alternatives: /usr/sbin/update-alternatives -> alternatives. Donc, l'option --get-selectionsn'affiche rien (quitter avec une erreur montrant l'utilisation).
uvsmtid
1
Je n'ai pas bien lu la question. Désolé. C'est pour Debian. J'essayais de trouver la même chose que vous et je ne peux pas répondre à cette réponse. Je me demande si je dois supprimer ma réponse?
kzh
Dépend de vous. Si vous pensez que c'est correct dans certaines circonstances et peut être utile à quelqu'un d'autre, cela vaut la peine de le laisser.
uvsmtid
16

La réponse exacte est:

ls /var/lib/alternatives

Le répertoire /etc/alternativesconserve une longue liste plate de tous les liens symboliques mélangeant les maîtres et les esclaves. Les liens symboliques esclaves ne peuvent pas être utilisés avec la alternatives --display [symlink]commande.

Dans le même temps répertoire /var/lib/alternativescontient des informations d'état (y compris les relations maître-esclave) pour chaque groupe raccourci liste des noms de fichiers tous qui peuvent être directement utilisé avec --displayoption. Par exemple /var/lib/alternatives/java:

alternatives --display java
uvsmtid
la source
4
Sur Ubuntu 12.04, il n'y en a pas /var/lib/alternatives, semble-t-il /var/lib/dpkg/alternatives.
Hibou57
1
Excellente réponse, merci! Un ajout: sur Debian et Armbian c'est au /etc/alternativeslieu de/var/lib/alternatives
Alexey Vesnin
4

La réponse la plus simple serait ...

ls /etc/alternatives
Michael Hampton
la source
1
C'est toujours plus évident quand vous connaissez déjà la réponse :)
gparent
C'était aussi ma première supposition. Mais cela ne m'a pas satisfait. La liste contient trop de liens maîtres et esclaves.
uvsmtid
-1

Sur Ubuntu 12.04 (peut-être aussi certaines versions antérieures, à vérifier) ​​et probablement Debian aussi (à vérifier):

ls /var/lib/dpkg/alternatives

Listez-le juste pour obtenir des noms alternatifs configurables, car les entrées de ces répertoires ne sont pas des liens. Soit dit en passant, il peut y avoir un fichier compressé dans ce répertoire, donc les noms qui y sont répertoriés ne peuvent pas toujours être utilisés tels quels. Ex. j'ai un/var/lib/dpkg/alternatives/psql.1.gz

Hibou57
la source
Pas vraiment utile, car la question indique clairement qu'elle s'applique à RedHat Enterprise Linux. La manière de configurer RHEL est correctement décrite dans les autres réponses.
Kosi2801