Shell
De Wikiunix
El shell es un programa que nos ayuda a interactuar con el sistema operativo. Se suele denominar en español "intérprete de mandatos" o "interfaz de órdenes".
Actúa como interfaz de comunicación entre el usuario y el ordenador, y cuando un usuario accede a un sistema Unix, automáticamente se arranca un Shell para que pueda trabajar. Cada usuario conectado al servidor tendrá un shell para su uso (no tiene porqué ser el mismo para todos).
Ejemplos de utilidad de la shell
Por ejemplo, algunas funcionalidades que suelen implementar son:
- Recordar el "directorio de trabajo" establecido con cd. Así, por ejemplo, no es necesario escribir en todas las órdenes los nombres absolutos de los ficheros.
- Caracteres comodines. Por ejemplo, si queremos copiar 100 ficheros con fotos en un disco USB, no es necesario escribir "cp 00.jpg 01.jpg ... /media/disk", bastaría con "cp *.jpg /media/disk"
- Definición de alias. De este modo, se puede poner un nombre más fácil de recordar a una orden. Por ejemplo: si quiero que los listados con "ls" aparezcan coloreados siempre puedo hacer: alias ls='ls --color'
Shells en Unix
La independencia del shell respecto al kernel del operativo (el shell es sólo una capa de interfaz), nos permite disponer de varios de ellos en el sistema, entre ellos los siguientes:
- Shell Bourne (sh):
Creado por Stephen Bourne, es el más utilizado en la actualidad. El prompt del sistema queda representado por el símbolo "$" ("#" en caso de ser administrador). Este shell es el estándar de AT&T y el que se monta en casi todos los sistemas Unix/Linux.
- C-Shell (csh):
Procedente del sistema BSD, proporciona características tales como control de trabajos, historial de órdenes, capacidades de edición, etc. Ofrece importantes características para los programadores que trabajan en lenguaje C. Su prompt de sistema queda representado con el símbolo "%". Fue desarrollado en la Universidad de Berkeley por Bill Joy a finales de los setenta y tiene unos cuantos añadidos interesantes al Bourne, como un histórico de comandos, alias, aritmética desde la línea de comandos, completa nombres de ficheros y hace control de trabajos en segundo plano. El prompt por defecto para los usuarios es ‘%’. Los usuarios UNIX suelen preferir este shell como interactivo, pero los administradores UNIX prefieren utilizar el Bourne, ya que los scripts suelen quedar más compactos, y la ejecución suele ser más rápida. Por otro lado, una ventaja de los scripts en C shell es que, como su nombre indica, su sintaxis está basada en el lenguaje C (aunque no igual).
- Shell job (jsh):
Incorpora algunas características de control al shell estándar del sistema.
- Shell Korn (ksh):
Escrito por David Korn, amplia el shell del sistema añadiendo historial de órdenes, edición de la línea de ordenes y características ampliadas de programación.
- Bourne Again shell (Bash):
Fue creado para usarlo en el proyecto GNU. BASH, por lo tanto, es un shell o intérprete de comandos GNU; éste es compatible con el shell sh. Además, incorpora algunas características útiles de ksh y csh, y otras propias, como la edición de línea de comandos, tamaño ilimitado del histórico de comandos, control de trabajos y procesos, funciones y alias, cálculos aritméticos con números enteros, etcétera. Es el shell GNU/Linux por defecto. El shell Bash (Bourne again shell) [Bas] [Coo] ha adquirido importancia desde su inclusión en los sistemas GNU/Linux como shell por defecto. Este shell forma parte del software del proyecto GNU. Es un intento de combinar los tres shell anteriores (Bourne, C y Korn), manteniendo la sintaxis del shell Bourne original. Es en el que nos vamos a fijar para desarrollar ejemplos posteriores.
¿Qué shell estamos ejecutando?
Una forma rápida de conocer bajo qué shell nos encontramos como usuarios es mediante la variable $SHELL, desde una línea de comandos con la instrucción:1244 pts/5 00:00:00 bash
4657 pts/5 00:00:00 ps