Sistema UNIX: El shell

Mayo 2015

Introducción al shell

El intérprete de comandos es la interfaz entre el usuario y el sistema operativo, por este motivo se le da el nombre "shell", que en castellano significa "caparazón".

El shell es un intérprete de comandos entre el SO (sistema operativo) y el usuario

Por lo tanto, el shell actúa como un intermediario entre el sistema operativo y el usuario utilizando líneas de comando introducidas por dicho usuario. Su función consiste en la lectura de la línea de comandos, la interpretación de su significado, la ejecución del comando y luego la devolución del resultado a través de las salidas.

El shell es un archivo ejecutable que debe interpretar los comandos, transmitirlos al sistema y devolver el resultado. Existen muchos tipos de shell: Los más comunes son: sh (llamado "Bourne shell"), bash ("Bourne again shell"), csh ("C Shell"), Tcsh ("Tenex C shell"), ksh ("Korn shell"), y zsh ("Zero shell"). Generalmente, sus nombres coinciden con el nombre del ejecutable.

Cada usuario tiene un shell predeterminado, que se activará al abrirse el aviso del comando. El shell predeterminado se especifica en el archivo de configuración /etc/passwd, en el último campo de la línea que corresponde al usuario. Es posible cambiar el shell durante una sesión; para hacerlo, sólo se deberá ejecutar el archivo ejecutable correspondiente. Por ejemplo:

/bin/bash

Ventana de línea de comandos (prompt)

El shell se inicia a través de la lectura de su configuración completa (en un archivo del directorio /etc/), y luego de la lectura de la configuración propia del usuario (en un archivo oculto cuyo nombre comienza con un punto y que se ubica en el directorio básico del usuario, es decir /home/user_name/.configuration_file). Luego, se muestra una ventana de línea de comandos o prompt:

machine:/directory/current$
En forma predeterminada, en la mayoría de los shells el "prompt" (aviso) consiste en el nombre de la máquina seguido por dos puntos (:), el directorio actual y luego, un carácter que indica el tipo de usuario conectado:
  • "$" define a un usuario normal
  • "#" define al administrador, llamado "root"

El concepto de la línea de comandos

Una línea de comandos es una cadena de caracteres que representan a un comando. Este comando corresponde a un archivo ejecutable del sistema o del shell junto con otros argumentos opcionales (parámetros):

ls -al /home/jf/
En el comando anterior, ls es el nombre del comando, mientras que -al y home/jean-francois/ son los argumentos. Los argumentos que comienzan con - se denominan opciones. Por lo general, para cada comando hay una cierta cantidad de opciones que se pueden detallar al introducir uno de los siguientes comandos:
command --help command -? man command

Entrada-salida estándar

Una vez que se ejecuta un comando, se crea un proceso. Luego, este proceso abre tres flujos:

  • stdin, denominado entrada estándar, en el que el proceso leerá los datos de entrada. En forma predeterminada, stdin se refiere al teclado. STDIN se identifica con el número 0;
  • stdout, denominado salida estándar, en el que el proceso escribirá los datos de salida. En forma predeterminada, stdout se refiere a la pantalla. STDOUT se identifica con el número 1;
  • stderr, denominado error estándar, en el que el proceso escribirá los mensajes del error. En forma predeterminada, stderr se refiere a la pantalla. STDERR se identifica con el número 2;

entrada-salida estándar: STDOUT, STDIN, STDERR

En forma predeterminada, cada vez que se ejecuta un programa, los datos se leen desde el teclado y el programa envía los datos de salida y los errores a la pantalla. Sin embargo, también es posible leer datos desde cualquier dispositivo de entrada, incluso desde un archivo, y enviar los datos de salida a un dispositivo de visualización, un archivo, etc.

Redirecciones

Como cualquier sistema Unix, Linux posee mecanismos que permiten redirigir la entrada-salida estándar hacia los archivos.

Por lo tanto, si se utiliza el carácter ">" se puede redirigir la salida estándar de un comando que se ubica a la izquierda hacia un archivo que se ubica a la derecha:

ls -al /home/jf/ > toto.txt echo "Toto" > /etc/myconfigurationfile
El siguiente comando equivale a una copia de los archivos:
cat toto > toto2
El propósito de la redirección ">" es crear un nuevo archivo. Entonces, si ya existe un archivo con el mismo nombre, dicho archivo será eliminado. El siguiente comando simplemente crea un archivo vacío:
> file
La utilización del carácter doble ">>" permite agregar la salida estándar al archivo. Es decir, permite agregar la salida después del archivo sin eliminarlo.

En forma similar, el carácter "<" indica una redirección de la entrada estándar. El siguiente comando envía el contenido del archivo toto.txt hacia la entrada del comando cat, cuyo único propósito es mostrar el contenido de la salida estándar (este ejemplo no es muy útil pero resulta instructivo):

cat < toto.txt

Por último, la utilización de la redirección "<<" permite la lectura en la entrada estándar, hasta que se encuentre la cadena ubicada a la derecha. En el siguiente ejemplo, se leerá la entrada estándar hasta que se encuentre la palabra STOP. Luego, se mostrará el resultado:

cat << STOP

Tuberías de comunicación

Las tuberías (en inglés "pipes") son mecanismos de comunicación específicos para todos los sistemas UNIX. Una tubería, simbolizada por una barra vertical (carácter "|"), permite asignar la salida estándar de un comando a la entrada estándar de otro, de la misma forma en que una tubería permite la comunicación entre la entrada estándar de un comando y la salida estándar de otro.

En el siguiente ejemplo, la salida estándar del comando ls -al se envía al programa sort, el cual debe ordenar los resultados en orden alfabético.

ls -al | sort

Esto permite conectar una cierta cantidad de comandos a través de sucesivas tuberías. En el siguiente ejemplo, el comando muestra todos los archivos del directorio actual, selecciona las líneas que contienen la palabra "zip" (utilizando el comando grep) y cuenta la cantidad total de líneas:

ls -l | grep zip | wc -l
Consulta este artículo sin tener que estar conectado, descárgalo gratis aquí en formato PDF:
Sistema-unix-el-shell.pdf

Consulta también


UNIX system - The shell
UNIX system - The shell
UNIX-System - SHELL
UNIX-System - SHELL
Systèmes UNIX - Le shell
Systèmes UNIX - Le shell
Sistemi UNIX - La shell
Sistemi UNIX - La shell
Sistemas UNIX  -Shell
Sistemas UNIX -Shell
El documento « Sistema UNIX: El shell » de Kioskea (es.kioskea.net) se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo bajo las condiciones señaladas por esta licencia. Deberás hacerla siempre visible y dar crédito a Kioskea.