El shell (caparazón) de un sistema operativo es la interfaz que media entre el usuario y el sistema operativo. Básicamente, su función es la de interpretar, ejecutar y devolver una respuesta a lo que el usuario escribe por línea de comandos.

El shell, en definitiva, no es más que un ejecutable que interpretar los comandos transmitirlos. Existen varios tipos de shell:

  • sh: Bourne shell
  • bash: Bourne again shell
  • csh: C shell
  • ksh: Korn shell

El shell predeterminado de cada usuario se especifica al momento de su creación o bien, editando el último campo de la línea del usuario en el archivo /etc/passwd. Eso no quita, que el usuario, desde un shell no pueda ejecutar otro.

La línea de comando o prompt puede depender de la configuración propia del shell o de la configuración del usuario. Esta línea de comando puede terminar en:

  • $: define a un usuario “normal”
  • #: indica el root (superusuario o administrador)

La línea de comandos no es más que una cadena de caracteres que representan a un comando y que luego será interpretada por el shell. El comando suele ser un archivo ejecutable del sistema o del shell junto con otros argumentos opcionales (parámetros).

E/S estándar

Ejecutado un comando, se crea un proceso y con él, tres flujos:

  • Entrada estándar (stdin): es por donde el proceso lee los datos (en forma predeterminada el teclado) aunque puede tratarse de cualquier otro dispositivo o de un archivo también.
  • Salida estándar (stdout): es por donde el proceso escribirá la salida, por defecto es la pantalla, aunque también puede tratarse de otro dispositivo o de un archivo.
  • Error estándar (stderr): es por donde el proceso escribirá los mensajes de error, de igual forma al stdout, por defecto es la pantalla, aunque también puede tratarse de otro dispositivo o de un archivo.

stdin, stdout y stderr se suelen identificar con los números 0, 1 y 2.

Redirecciones

La E/S estándar se puede redirigir a archivo, lo que suele resultar bastante útil.

  • > redirige la salida estándar al archivo que se ubique a su derecha, este archivo es sobrescrito para el caso que exista o creado en caso contrario.
  • >> agrega al archivo de su derecha el resultado de la salida estándar

Por ejemplo, para redirigir a un archivo el resultado de un ls:

ls -rtl > /tmp/dir_tmp.txt
  • Para redirigir el error estándar, habría que anteceder al > con el número 2, es decir 2>.
  • El caracter <, indica la redirección de la entrada estándar.

Por ejemplo, para redirigir el contenido de un archivo al comando cat:

cat < /tmp/dir_tmp.txt
  • La utilización de la redirección << permite la lectura de la entrada estándar, hasta que se encuentre la cadena indicada a la derecha de los signos.

Por ejemplo: para leer la entrada estándar hasta que se encuentre la palabra STOP.

cat << STOP

Pipes

Finalmente, el uso de pipes (especificados con la barra vertical |) permite asignar la salida estándar de un comando a la entrada del otro y así sucesivamente cuantas veces se quiera.

Por ejemplo: para realizar un listado de archivos de un directorio y luego ordenarlo:

ls -al /tmp/ | sort

Por ejemplo, para contabilizar la cantidad de archivos de un directorio que contienen la palabra tar:

ls -l /tmp | grep tar | wc -l

O bien, si queremos un ejemplo algo más elaborado, puedes conocer el Top 5 de los comandos más utilizados.

Vía: Kioskea.net