Las abstracciones pueden ser útiles para los usuarios porque a muchos usuarios no les importa cómo su computadora logra una tarea siempre que esté en el objetivo. De hecho, incluso a las aplicaciones no siempre les importa cómo se logra algo, siempre que todas sus llamadas al sistema se respondan correctamente. En teoría, un administrador de sistemas de Linux puede ofrecer muchas herramientas del sistema según la función en lugar del nombre exacto del ejecutable, pero eso a menudo requiere muchos enlaces simbólicos y seguimiento de versiones. A menos que sea así, utilice las alternatives
comando.
Las alternatives
comando comenzó su vida como, curiosamente, una alternativa. Originalmente, esta era una utilidad de conveniencia, escrita en Perl, del proyecto Debian Linux, llamada update-alternatives
. Red Hat reescribió el comando sin Perl y se propagó a través de distribuciones basadas en Fedora, como Red Hat y CentOS, así como otras distribuciones que recurren a Red Hat para la definición funcional de Linux Standard Base (LSB).
Cuándo usar el comando de alternativas
Un ejemplo simple y realista:tiene un comando en su sistema llamado em
, que inicia un editor de texto simple. Ha sido el editor de acceso para su base de usuarios durante años, muchas personas han basado flujos de trabajo en torno a él y algunos mantienen configuraciones altamente personalizadas para él. Sin embargo, su base de usuarios le ha dejado claro recientemente que no pueden sobrevivir más tiempo sin la compatibilidad con emoji en sus editores de terminal y em
no es compatible con Unicode.
Encuentra una bifurcación habilitada para Unicode de em
llamado nem
, pero sabe que el 99% de sus usuarios están acostumbrados a em
, tiene scripts que llaman a em
y seguirá pensando en cualquier aplicación de reemplazo como em
no importa lo que hagas. La solución fácil a esta situación, y a muchos otros ejemplos similares, es designar el nuevo nem
binario como la alternativa preferida al em
binario cuando el em
se utiliza el comando.
La creación manual de un enlace simbólico puede parecer tentador, pero eso no es resistente a las actualizaciones de un administrador de paquetes, ni está centralizado.
Las alternatives
El comando es más útil cuando se administran nombres de aplicaciones "genéricos". Por supuesto, en el mundo UNIX, "genérico" no siempre es genérico más de lo que "Kleenex" o "Xerox" lo son en el mundo real, por lo que términos como java , (x)emacs(-nox) , (n)vi(m) , quién es y iptables son a menudo algunos de los primeros en tener alternativas definidas para ellos. Para términos verdaderamente genéricos, como EDITOR
y CC
, las alternatives
comando no se considera una solución adecuada. Para esos términos, porque son variables de entorno y deben definirse en /etc
o $HOME/.profile
.
Creando una nueva alternativa
Continuando con el escenario de ejemplo de un antiguo binario llamado em
siendo suplantado por la nueva variante nem
, es fácil crear una entrada alternativa. En este ejemplo, debe cambiar el nombre del comando original, aunque en otros casos esto no es necesario porque el comando no es exactamente lo que la gente piensa que es en primer lugar (java
, por ejemplo, rara vez se encuentra en /usr/bin
directamente). Si necesita cambiar el nombre de un binario, la forma correcta de hacerlo es en su archivo de especificaciones RPM, de modo que el RPM que instala el comando proporciona el binario con el nuevo nombre.
En un apuro, especialmente si está eliminando el comando de todos modos, puede eliminar el comando de la administración de paquetes del sistema y simplemente mantener disponible una versión personalizada del comando anterior /opt
o similar.
Para este ejemplo, suponga que ha cambiado el nombre del editor original em2
(indicando su último número de versión).
Ahora tienes dos binarios (em2
y nem
) para ser asociado con un comando:em
. Para ayudar a mantener claras las diferentes funciones de la terminología, asuma que em
y nem
ambos son editores de estilo micro Emacs. En ese caso, un término muy genérico para la alternativa que se está creando podría ser µemacs
(usando el símbolo µ para significar "micro") o uemacs
por simplicidad.
Cree una alternativa para el original proporcionando:
- una ubicación para el enlace simbólico "genérico"
- un nombre para la alternativa (me he decidido por
uemacs
, para dejar claro que es un nombre de referencia en lugar de un binario específico) - el binario que se ejecutará cuando se llamen estos enlaces simbólicos
- un nivel de prioridad para indicar qué alternativa se prefiere
$ sudo alternatives --install /usr/bin/em uemacs /opt/em-legacy/em2 1
Cree una alternativa para el nuevo binario, con una prioridad alta porque es su binario preferido:
$ sudo alternatives --install /usr/bin/em uemacs /usr/local/bin/nem 99
Estos comandos crean un nuevo enlace simbólico, /usr/bin/em
, apuntando a /etc/alternatives/em
, que a su vez puede señalar a ya sea /opt/em-legacy/em2
o /usr/local/bin/nem
. La referencia humana a este paquete de alternativas es uemacs
, que ha sido elegido arbitrariamente por el administrador de sistemas porque es descriptivo y fácil de recordar. Puede elegir el destino del enlace simbólico alternativo usando --config
opción:
$ sudo alternatives --config uemacs
[sudo] password for seth:
There are 2 programs which provide 'uemacs'.
Selection Command
-----------------------------------------------
*+ 1 /usr/local/bin/nem
2 /opt/em-legacy/em2
Eliminar una alternativa
A veces, las alternativas son soluciones a largo plazo, y otras veces son solo para ayudar a los usuarios o administradores a hacer la transición a algo nuevo. Si necesita eliminar una alternativa por cualquier motivo, puede hacerlo con --remove-all
opción, seguida del nombre "genérico" de la alternativa. En este ejemplo, eso es uemacs
:
$ sudo alternatives --remove-all uemacs
Esto elimina todo sobre uemacs
de las alternatives
subsistema:el enlace simbólico en /usr/bin
y /etc/alternatives
. Si solo desea eliminar una opción de una alternativa, utilice --remove
opción, proporcionando el nombre alternativo (uemacs
en este ejemplo) y la ruta de la elección que desea soltar:
$ sudo alternatives --remove uemacs /opt/em-legacy/em2
Alternativas
Las alternatives
El comando tiene muchas más características, incluida la capacidad de vincular componentes dependientes cuando se elige una alternativa específica. Además de manejar gran parte del trabajo pesado, las alternatives
mantiene sus inconsistencias centralizadas. Puede verificar qué alternativas existen, por lo que no tiene que recordar día a día que emacs
es en realidad emacs-26.3
, o que java
no es java-1.8
pero /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0
, y así sucesivamente:
$ alternatives --list
Linux tiene que ver con la elección y la flexibilidad, y las alternatives
El comando es un ejemplo de cómo tanto los usuarios como los administradores pueden beneficiarse de algunos juegos de manos inteligentes.
¿Quiere probar Red Hat Enterprise Linux? Descárguelo ahora gratis.