martes, 26 de marzo de 2013

El intérprete de órdenes I


En esta primera entrega haré una introducción para dar una cosmovisión sobre para que sirve y como se usa un “shell” asociado a sistemas operativos Linux, FreeBSD, Irix, etc.. conocidos como “Unixlike”
Cuando iniciamos una sesión en un sistema Unixlike respondiendo a lo que nos solicita el programa “login”
con nuestro nombre de usuario y contraseña correcta, el sistema ejecuta automáticamente un programa conocido en la jerga como “shell”, ó intérprete de órdenes, este queda esperando las órdenes de manera interactiva con una marca llamada “prompt”. El prompt por defecto, que se puede cambiar, el en interprete BASH es “$” para un usuario sin privilegios. Por ejemplo
hcaste@roja:~$
“hacaste” es el nombre del usuario y “roja” es el nombre de la máquina no su dominio. Esto permite al usuario saber de antemano donde está ubicado.
La traducción de “shell” sería caparazón en un viejo paradigma de los años 1960 donde se suponía que un sistema operativo seguía el modelo de la cebolla y el shell era lo que recubría a la cebolla, y este es la interfaz entre el usuario y el resto del sistema. Ahora lo mas correcto sería suponer que un sistema operativo fuera una almeja o un molusco bibalvo, pues lo que recubre a la cebolla es el la piel o “skin”… una de los interrogantes más del mundo misterioso que es la informática…
Muchas personas tienden a confundir los términos de intérprete de órdenes (IO) con sistema operativo (SO). Esto no es así, el IO es un programa más como lo puede ser un navegador web. La razón del mal entendido radica en que el IO actúa como interfaz entre el usuario y el SO. Más aún en los sistema Unixlike el usuario puede elegir que IO quiere, este está definido en el archivo /etc/passwd.
La zoología de IO existentes el basta pero los más conocidos son:

bash = Bourne again shell
sh = shell
csh = C shell
tcsh = Tenex C shell (not permite tab-completado)
tclsh = Tcl shell
ksh = Korn shell
ash = a shell
bsh = bourne shell (en muchos unixlike es un enlace a /bin/ash)
zsh = the Z shell

De todos mi explicaciones estarán enfocadas al estándar de facto el “BASH“.
Un shell, básicamente, es un IO en línea de comandos. Su tarea consiste en leer las instrucciones que le ingresa el usuario, a través de teclado, o a través de un archivo de texto ASCII conocido como script o guión; realiza una serie de operaciones de reducción a primitivas de sistemas y pasa la instrucción convertida a primitiva de sistema al SO.