FreeBSD México

Comunidad Mexicana de FreeBSD

El Sistema UNIX: El Shell

FreeBSD, y los otros BSD (OpenBSD, NetBSD) son sistemas tipo Unix, pero no se pueden llamar Unix® por causa de las licencias. No obstante la gran mayoría de las cosas para Unix es aplicable a los sistemas BSD. El Shell del Sistema es indispensable para saber manejar tal sistema operativo  o al menos para que lo amemos xD.

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”.

unix-images-shell

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/ksh

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;

unix-images-stdout

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

BSD MAGAZINE EDICION DE ABRIL DE 2012

 

Tenemos el gusto de informar que el número de Abril de 2012 de BSD Magazine ya esta disponible en línea.

Pueden descargar el último número de BSD Magazine mediante dar click en la portada e introducir su e-mail.

Título de la revista de Abril “AQUI VIENE LA NUBE”

El contenido de este número

  • Instalando FreeBSD en los Servicios de la Nube AWS EC2 de Amazon
  • Entrevista con Mark Price, Presidente de Hospedaje Tranquil y dueño de RootBSD
  • Tomando el Examen de la Certificación BSDA por Dru Lavigne
  • Instalando OpenBSD 5.0 en VMware Server
  • MidnightBSD: Desarrollando Aplicaciones Usando mpor
  • Los Beneficios más Grandes del Software de Código Abierto
  • PostgreSQL: Replicación

 

Nos leeremos en el siguiente artículo.

FreeBSD rulez!

_________________________

Eric De La Cruz Lugo, es Licenciado en Informática Administrativa (LIA) con especialidad en sistemas, egresado del Instituto Tecnológico y de Estudios Superiores de Occidente (ITESO), ha sido usuario de FreeBSD desde 1993 y de sistemas UNIX desde 1992, y de Linux desde 1997 (actualmente cuenta con certificación Linux+CompTIA) es profesor de asignatura de la Universidad Tecnológica Metropolitana en Mérida, Yucatán, donde administra servidores corriendo con FreeBSD que hospedan aplicaciones administrativas y la plataforma educativa en línea de la división de TIC (Tecnologías de la Información y Comunicación) de la Universidad. También brinda de forma independiente consultoría profesional a empresas e instituciones, e imparte cursos relacionados con UNIX, Linux y desde luego FreeBSD!, forma parte del equipo de traducción al español del sitio bsdcertification.org,  también es astrónomo amateur y asesor externo del Planetario Arcadio Poveda Ricalde de Mérida, Yucatán y esta felizmente casado con su amada esposa Marisol Alvarez, puede ser alcanzado en: eric_delacruz@yahoo.com y en eric@iteso.mx)