Conceptos básicos de entorno shell

Al hablar de un SO Un*x nos ponemos a pensar en un entorno de texto. ¿Pero que hay entre lo que vemos y lo que es realmente? ¿Qué es este entorno de texto que se habla tanto? Este entorno se maneja a través de lo que se denomina un interprete de comandos. De la misma forma que DOS posee su interprete de comandos, el COMMAND.COM. Un*x y GNU/Linux posee los suyos. A través de estos podremos efectuar una comunicación entre nosotros y el sistema dándole órdenes a través de comando que el interprete de comandos descifrara para que el sistema haga lo que le pedimos.

Anteriormente ubicamos al interprete de comandos dentro de las capas con la que nos podremos encontrar en un sistema. El interprete de comandos bash es solo una interfase de las muchas que posee Un*x o GNU/Linux. Dentro de este tipo de interpretes de comando al que nos estamos refiriendo, existen muchas otras variantes.

Tan pronto se entra al sistema, se iniciara él interprete de comando que tengamos configurando, en la mayoría de los casos será el bash y es en el que nos ocuparemos nosotros. En este momento, podremos teclear las ordenes que necesitemos o que tengamos ganas de teclear.

pantano login: shrek
Password:

Last login: Sun Mar 26 19:23:32 on tty1

Bienvenido al sistema pantano. Que tenga un buen día.
[shrek@pantano:~]$

Aquí se ve el prompt del interprete de comandos, [shrek@pantano:~]$ indicándonos que esta listo para recibir ordenes.

Tratemos de decirle al sistema que realice algo interesante

[shrek@pantano:~]$ make love

Bueno, si estamos muy enamorados de nuestro sistema puede resultar lógico que nos sintamos así, pero el sistema no pensara lo mismo de nosotros y nos devolverá un mensaje de error indicándonos que no puede ejecutar el comando que le hemos solicitado.

make: *** No hay ninguna regla para construir el objetivo `love'.  Alto.
[shrek@pantano:~]$

Con razón dicen que GNU/Linux es poco amigable. Ahora con esto se nos presentan preguntas interesantes. ¿Qué son órdenes? ¿Qué esta ocurriendo cuando tecleamos make love? El programa make realmente existe en el sistema pero no puede interpretar lo que le estamos pidiendo que realice.

La primera palabra de la orden, make, es el nombre de la orden a ejecutar. El resto de la orden es tomado como argumento de la orden. Veamos un ejemplo

[shrek@pantano:~]$ cal 10 2004   octubre de 2004
do lu ma mi ju vi sá
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
[shrek@pantano:~]$

El comando cal sirve para mostrar un simple calendario, si no se le dan argumentos nos mostrará el mes en curso en el año actual. Aquí el nombre de la orden es cal y los argumentos que le hemos dado son 10 y 2004.

Cuando una orden se ingresa al sistema, el intérprete de comando efectúa varias operaciones. Primero que todo, busca el nombre de la orden y comprueba si es una orden interna, propiedad del mismo intérprete de comandos y que este sabe ejecutar por si mismo, existen numerosas de estas órdenes. El interprete de comandos también comprueba si la orden es un "alias" o nombre sustituto de otra orden. Si no cumple con ninguno de estos requisitos, él interprete de comandos busca el programa y lo ejecuta pasándole los argumentos especificados en la línea de comandos. En el ejemplo del make que es un comando que sirve para poder compilar, el intérprete de comandos ve que no es una orden interna ni un alias, así que busca el programa, que está ubicado en /usr/bin, y lo ejecuta pasándole el argumento love como un objeto a compilar. Como make no puede encontrar un objetivo de ese nombre, falla enviando un mensaje de error y devolviendo el control al intérprete de comandos.

Para que el intérprete de comandos pueda encontrar los programas a ejecutar, se basa en lo que se denomina path. Este path o ruta es cargado como una variable de entorno, la carga el mismo interprete en memoria desde un archivo de configuración central llamado /etc/profile y agregándole además las propias configuraciones de path que cada usuario posea en su directorio personal, en el caso del interprete bash, será ~/.bash_profile, además de ~/.profile. Volveremos en el próximo capítulo sobre esto.

Ahora, que ocurre si tecleamos un comando que el sistema no pueda ni interpretar ni encontrar en la ruta definida

[shrek@pantano:~]$ besame
-bash: besame: command not found
[shrek@pantano:~]$

Si no se encuentra el programa con el nombre de la orden que indicamos (en este caso besame), se mostrará un mensaje de error que deberá explicar bien ese problema.