¿Hay alguna manera de enumerar todas las `alternativas` configurables (enlaces simbólicos para comandos similares) en el sistema?

24

El alternativescomando (paquete chkconfig) en RHEL / Fedora administra enlaces simbólicos que vinculan un nombre genérico a una de las implementaciones alternativas. Por ejemplo, mtaSendmail y Postfix pueden proporcionar un grupo de enlaces simbólicos (para implementar, es decir, el sendmailcomando):

alternatives --display mta

Si bien puedo --displayun grupo de enlaces simbólicos, primero necesito adivinar su nombre (es decir mta).

¿Puedo simplemente enumerar todos los grupos de enlaces simbólicos configurables posibles (como mta) para elegir?

La razón es que de vez en cuando olvido algunos nombres de grupos.

uvsmtid
fuente

Respuestas:

25

En Debian (pero no Fedora o RHEL), para ver una lista de todos los "nombres alternativos maestros":

update-alternatives --get-selections

--get-selections enumere los nombres alternativos maestros y su estado.

Y para cada uno de los enumerados, puede ejecutar --list $ALTERNATIVE_NAME, por ejemplo

update-alternatives --list editor

--list name Mostrar todos los objetivos del grupo de enlaces.

Si desea ver una lista de todas las alternativas en sus respectivos grupos, puede ejecutar lo siguiente en el fishshell:

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

La sintaxis (ba | z)? Sh debería ser algo similar.

Para cambiar las alternativas, ejecute sudo update-alternatives --config $ALTERNATIVE_NAME

kzh
fuente
1
En mi Fedora 12 update-alternativeses un enlace simbólico a alternatives: /usr/sbin/update-alternatives -> alternatives. Entonces, la opción --get-selectionsno muestra nada (salir con un error que muestra el uso).
uvsmtid
1
No leí la pregunta correctamente. Lo siento. Esto es para Debian. Estaba tratando de encontrar lo mismo que tú y no puedo responder esta respuesta. Me pregunto si debería eliminar mi respuesta.
kzh
Depende de usted. Si crees que es correcto en algunas circunstancias y podría ser útil para cualquier otra persona, vale la pena dejarlo.
uvsmtid
16

La respuesta exacta es:

ls /var/lib/alternatives

El directorio /etc/alternativesmantiene una lista larga y plana de todos los enlaces simbólicos que mezclan maestros y esclavos. Los enlaces simbólicos esclavos no se pueden usar con el alternatives --display [symlink]comando.

Al mismo tiempo, el directorio /var/lib/alternativescontiene información de estado (incluida la relación maestro-esclavo) para cada grupo en una lista abreviada de nombres de archivos, todos los cuales se pueden usar directamente con la --displayopción. Por ejemplo /var/lib/alternatives/java:

alternatives --display java
uvsmtid
fuente
44
En Ubuntu 12.04, no hay /var/lib/alternatives, parece ser /var/lib/dpkg/alternatives.
Hibou57
1
Gran respuesta, gracias! Una adición: en Debian y Armbian es en /etc/alternativeslugar de/var/lib/alternatives
Alexey Vesnin
4

La respuesta más simple sería ...

ls /etc/alternatives
Michael Hampton
fuente
1
Siempre es más obvio cuando ya conoces la respuesta :)
gparent
También fue mi primera suposición. Pero no me satisfizo. La lista es demasiado larga y contiene enlaces maestros y esclavos por completo.
uvsmtid
-1

En Ubuntu 12.04 (puede haber algunas versiones anteriores también para verificar) y probablemente también Debian (para verificar):

ls /var/lib/dpkg/alternatives

Liste solo para obtener nombres alternativos configurables, ya que las entradas en estos directorios no son enlaces. Por cierto, puede haber un archivo comprimido en este directorio, por lo que los nombres enumerados allí no siempre se pueden usar como están. Ex. tengo un/var/lib/dpkg/alternatives/psql.1.gz

Hibou57
fuente
No es realmente útil, ya que la pregunta establece claramente que se aplica a RedHat Enterprise Linux. La forma de configuración RHEL se describe correctamente en las otras respuestas.
Kosi2801