Alternativas de Comandos de Linux y Unix.

Generalmente a los usuarios de los sistemas computarizados no les interesa cómo funcionan estos mientras cumplan su objetivo. De hecho, en ocasiones las propias aplicaciones no tienen en cuenta cómo funciona correctamente una tarea, siempre y cuando las llamadas al sistema se ejecuten correctamente. Teóricamente un administrador de sistema Linux ofrece muchas herramientas del sistema.

Estas herramientas son ofrecidas según la función que ejecutan en el lugar donde se encuentra el ejecutable. Este funcionamiento requiere de un seguimiento explícito de las versiones del sistema. Una manera de sortear estos procesos engorrosos es el uso de alternativas de comandos.

Inicios de las alternativas de comandos

Curiosamente, las alternativas de comando surgieron en los sistemas Unix y Linux como una alternativa al uso de los comandos utilizados por defecto. Esta herramienta estaba desarrollada en lenguaje Perl para el proyecto Debian. Era considerada una herramienta de conveniencia de usuarios y se nombraba alternativas de actualización.

La compañía estadounidense de código abierto Red Hat, reescribió el comando sin emplear el lenguaje Perl. Esto posibilitó la propagación de esta utilidad hacia sistemas basados en Fedora y CentOS además de otras distribuciones de Linux.

Cuando utilizar las alternativas de comandos

Alternativas de comandos Linux/Unix.
Alternativas de comandos Linux/Unix.

Para entender cuando es necesario utilizar las alternativas de comandos pongamos un simple ejemplo. Supongamos que en su sistema tiene un comando llamado “eda” cuya función es la de lanzar un editor de texto. Este editor de texto ha sido desde siempre el editor preferido por un grupo de usuarios del sistema. Incluso estos usuarios poseen muchas personalizaciones en dicho editor.

No obstante, recientemente los usuarios han manifestado que desean incluir emojis dentro del editor de texto y actualmente este no soporta la codificación Unicode. ¿Qué hacer ante tal dilema?

Buscando encuentra una versión al editor “eda” llamada “edaU” que soporta codificación Unicode. La solución podría ser reemplazar el editor aún sabiendo que la mayoría de los usuarios están adaptados al editor “eda”. Cualquier reemplazo que usted haga no cambiaría el hecho de que los usuarios prefieren este editor.

La solución es bastante sencilla, simplemente debe cambia el binario predeterminado con que se llama al editor de texto con el comando “eda” al binario del nuevo editor: “edaU”.

Para poder realizar este cambio, la manera más tentadora es la de crear manualmente un enlace simbólico. No obstante, esta solución no se mantendría ante actualizaciones de paquetes y no funcionaría de manera centralizada.

Las alternativas de comandos es una muy útil cuando se utilizan nombres genéricos de aplicaciones. En Linux, los términos como java, (x) emacs (-nox), (n) vi (m), y las tablas IP son generalmente los primeros en tener alternativas de comandos.

Para otros términos más globales, como EDITOR o CC, las alternativas de comando no son la mejor solución. Para estos términos se definen variables de entorno del sistema en el directorio raíz “/etc” o en “$HOME/. profile”

Como crear alternativas de comandos

Para explicar cómo crearemos una alternativa de comando continuaremos con el ejemplo expuesto anteriormente. En este teníamos un binario llamado “eda”. El nuevo binario llamado “edaU” reemplazará al más antiguo.

En el ejemplo antes expuesto debe cambiar el nombre del comando original. No obstante, esto no siempre es así ya que los comandos no son lo que generalmente los usuarios creen. Por ejemplo, el binario para el comando java raramente se encuentra en el directorio «/usr/bin» directamente.

Si usted necesita cambiar el nombre de un binario, la manera correcta de hacerlo no es directamente sobre el fichero. Esta acción debe ser realizada en el archivo de especificaciones RPM. De esta manera, el RPM que instala el comando proporcionara el nuevo nombre del fichero.

En caso de que sea necesario eliminar el comando de todos modos, este debe ser eliminado de la administración de paquetes del sistema y mantener una versión personalizada del comando anterior disponible.

Para continuar el ejemplo asumiremos que se ha cambiado el nombre del binario original “eda” a “eda2”. En este momento tenemos dos binarios, “eda2” y “edaU” para ser asociados al mismo comando “eda”. Suponiendo que el editor de texto es al estilo del editor Gedit, un término genérico para la alternativa que se está creando podría ser “uGedit”.

Parámetros para la creación de la alternativa

Para poder crear la alternativa usted debe proveer una serie de parámetros indispensables para que funcione. Primeramente, necesitará una ubicación en el sistema donde colocar el enlace simbólico a la alternativa.

Por otro lado, deberá dar un nombre a la alternativa. En nuestro ejemplo este nombre es uGedit, para resaltar el hecho de que este es un nombre de referencia y no el nombre de un binario específicamente.

Además, debe especificar el binario que deberá ser ejecutado cuando se realicen llamadas a los enlaces simbólico. Para finalizar, necesita especificar un nivel de prioridad que indicara que alternativa prefiere usar.

Comando para crear la alternativa.

Para crear la alternativa que apunte hacia nuestro binario antiguo, descrito en nuestro problema debemos ejecutar el siguiente comando:

$sudo alternatives --install /usr/bin/eda uGedit /opt/eda-legacy/eda2 1

Para el nuevo binario con soporte para codificación Unicode estableceremos una mayor prioridad ya que la opción preferida a la hora de utilizar el editor de texto.

$sudo alternatives --install /usr/bin/eda uGedit /usr/local/bin/edaU 99

Los comandos anteriores crean un enlace simbólico en el directorio “/usr /bin/eda”, que apunta a “/etc/alternatives/eda”, y está a su vez puede apuntar a “/opt/eda-legacy/edaU” o “/usr/local/bin/edaU”.  

La referencia de cara al usuario para estas alternativas es el nombre genérico que introducimos anteriormente, es decir “uGedit”.

Es posible elegir el destino del enlace simbólico de nuestra alternativa mediante el comando “–config”. Si escribimos en el terminal “$ sudo alternatives –config uGedit” obtendremos como respuesta:

There are 2 programs which provide 'uGedit'.
  Selection    Command

———————————————–

*+ 1           /usr/local/bin/edaU
   2           /opt/eda-legacy/eda2

En esta salida del terminal podemos observar la prioridad establecida para la ejecución del comando “uGedit”, acorde a la que establecimos anteriormente.

Eliminar una alternativa de comandos.

En algunas ocasiones las alternativas de comandos constituyen una solución a largo plazo a un problema determinado. No obstante, pueden ser utilizadas para ayudar en la transición hacia nuevas aplicaciones. Estas contribuirían de forma positiva a que los usuarios se adapten a las nuevas herramientas sin cambios demasiados radicales.

Para eliminar una alternativa solo es necesario escribir el comando “–remove-all” seguido del nombre genérico que hayamos indicado a la alternativa. En el caso ejemplo, para eliminar la alternativa creada escribiríamos en el terminal:

$ sudo alternatives --remove-all uGedi

Este comando eliminará todo lo referente a la alternativa “uGedit” incluido el enlace simbólico en el directorio “/usr/bin” y “/etc/alternatives”.

En caso de que solo desee eliminar una de las opciones referentes a una alternativa específica debe usar el comando “–remove”. En este caso debe especificar el directorio de la opción que desea eliminar.

$ sudo alternatives --remove uGedit /opt/eda-legacy/eda2

Con la ejecución del comando anterior eliminaríamos la opción de utilizar el binario antiguo referente a nuestro editor de texto.

Conclusiones.

El sistema operativo Linux trata de la inclusión de todos en su evolución. Este sistema provee mecanismos a los usuarios donde la flexibilidad y el libre albedrío jueguen un papel fundamental. Las alternativas de comandos son un ejemplo de cómo los usuarios o administradores del sistema puede beneficiarse de las libertades que propone Linux.

Las alternativas de comandos tienen muchas más características que no se incluyen en este artículo. Estas tienen incluso la capacidad de vincular entre si componentes dependientes cuando una alternativa específica se ejecuta. Te invitamos a seguir profundizando en este tema que te proveerá de una potente herramienta de personalización y configuración.