Story Transcript
El Shell Se conoce con el nombre de Shell al programa que atiende a los ordenes tecleadas en el terminal y las traduce (interpreta) a instrucciones en la sintaxis interna del sistema; es decir es él interprete de comandos del sistema operativo UNIX. También se le conoce con el nombre de caparazón. (Análogo al Command.com de MS−DOS). El shell es un programa del sistema operativo, pero no forma parte del núcleo del mismo. Se ejecuta cada vez que un usuario se identifica ante el sistema y comienza una sesión. Se ejecuta un shell para cada usuario que se conecta al sistema. Cuando un usuario introduce una orden, el shell, que es un programa en continua ejecución, analiza la línea y llama a ejecución al programa o programas que realiza la función solicitada por la orden. El shell es también un lenguaje de programación que soporta todas las estructuras propias de los lenguajes modernos. Además permite la utilización de todas las primitivas del sistema operativo de control de procesos, interrupciones y utilidades para diseñar programas de comandos por el usuario. A los programas realizados con el shell se les llama Shell Scripts, Procedimientos Shell o Guiones de Comando. Los shell en Unix se clasifican en dos grandes grupos: los tipo Bourne y los tipo C. Los shell tipo Bourne toman su nombre a partir de su inventor, Steven Bourne. Steven Bourne escribió el shell original de Unix, denominado sh; a partir de entonces, la mayoría de los shells tienen un nombre con el sufijo sh para indicar que son extensiones de la idea original. Existen varias implementaciones de este shell, que colectivamente llevan el nombre de shells Bourne. También son comunes los shells tipo C cuyo original fue implementado por Bill Joy. Tradicionalmente, los shell Bourne se han utilizado para los scripts de shell y por razones de compatibilidad con el sh original, mientras que los shells C han sido más comunes en su aplicación interactiva. (Los C tienen ventajas en cuanto a sus mejores características interactivas, aunque son más difíciles de programar.) Linux viene con un shell Bourne denominado bash, escrito por la organización "Free Software Foundation" (Fundación para el Software Libre). El nombre bash proviene de Bourne Again SHell, uno de los tantos juegos de palabras en Unix. Se trata de un shell Bourne "avanzado": tiene las capacidades estándar de programación que se encuentran en todos los shells Bourne y además varias de las características interactivas que se encuentran en los shells C. bash es el shell predeterminado de Linux. Apenas se inicia una sesión, el prompt que se muestra es producto de la acción de bash, en otras palabras: estás ejecutando tu primer programa Unix, el shell bash. Mientras estés conectado, el shell bash estará permanentemente funcionando. Algunos de los shell más utilizados son: • Bourne Shell: Es el interprete de comandos básico. Se invoca con la orden sh. • C−Shell: Es el interprete de comandos creado por Bill Joy en Berkeley para el sistema operativo BSD y para el XENIX, un poco mas completo que el anterior. Su programación es prácticamente lenguaje C. Se invoca con la orden csh. • Korn Shell: Se basa en los dos anteriores, siendo compatible con el Bourne en un 95 por 100. Añade posibilidades de programación avanzada, facilidades aritméticas y mayor rapidez de ejecución. Se invoca con la orden ksh. • Bash: Es el shell utilizado por Linux por defecto y amplia las capacidades del Bourne. Se invoca con bash.
1
El superusuario debe asignar a cada usuario, en el momento de la creación del mismo, el shell que éste vaya a utilizar. Estructura de una línea de comandos Una vez iniciada una sesión UNIX y estando presente el prompt $, el interprete de comandos Shell está preparado para recibir un comando, cuya estructura es la siguiente: $ comando [parámetros] [argumentos] [separador] • nombre: Nombre del comando • parámetros: Posibles variaciones de actuación del comando. • argumentos: Nombre del elemento (archivo, directorio..) sobre el que se quiere aplicar el comando. • separador: Delimitador que sirve para separar comandos Ejemplo: $cc Comando
−o Parámetros
Ejemplo.c argumento
; Separador
Who Otro comando
Los comandos consisten en una secuencia de letras, números y caracteres. Hay que tener en cuenta que UNIX hace diferencia entre mayúsculas y minúsculas. Hay que separar el comando de las opciones por un espacio en blanco o un tabulador. Las opciones también deben separase entre sí por un espacio. Si un comando es más largo que una línea hay que teclear \ (barra invertida) y pulsar intro, para continuar introduciendo el comando en la línea siguiente. Podemos escribir varios comandos en la misma línea separándolos por ; (punto y coma). Un comando de una sóla línea es referido como una línea de comando Características del shell La característica más destacable del shell es la versatilidad: facilidad de modificación y de adaptación a las necesidades y preferencias de cada usuario en particular. Proporciona diversas facilidades al usuario: • Redireccionamiento de la salida o la entrada standard. • Metacaracteres, caracteres especiales con significado propio. • Filtros, que se encargan de gestionar la información de los ficheros. • Conexionado entre órdenes, mediante el uso de tuberias (pipes). Cuando se interconexionan dos órdenes, la salida de un proceso se convierte en la entrada del siguiente. Así se elimina la necesidad de crear ficheros temporales intermedios. • Lenguaje de programación del shell, que permite concatenar órdenes en un fichero de texto ejecutable con permiso de ejecución para automatizar procesos, lo que se conoce con el nombre de Explotación Batch o por lotes. Aspectos prácticos
2
Shell mantiene una historia de comandos. El histórico de comandos se guarda en el fichero .bash_history, donde están guardados todos los comandos escritos., almacena hasta 50 comandos antiguos. Al editar .bash_history presenta una lista numerada de comandos, incluidos los introducidos en entradas anteriores al sistema. Si la lista es muy larga podemos ver los n últimos. Ejemplo: history Lista numerada de todos los comandos. history 10 Nos visualizará los 10 últimos comandos introducidos. Podemos volver a usar un comando de la lista tecleando el número asociado al comando precedido de signo admiración. Ejemplo: !3 Si necesita repetir el último comando basta con teclear dos admiraciones: !! Si quieres repetir un comando sin conocer su número de orden en la lista seguir los pasos de este ejemplo: more /usr/lib/X11/xdm/xdm−config (este comando se tecleó anteriormente) basta con teclear !more. Si al editar una línea de comando pulsamos la tecla tab, el shell buscará archivos o directorios cuyos nombres comiencen por lo escrito en la línea de comandos con el fin de completarla. Puede ocurrir que se ajuste más de un fichero, en cuyo caso avisa con una señal sonora, tras la cual, si pulsamos de nuevo tab , nos mostrará todos los posibles casos para que completemos nosotros un poco y él pueda afinar más el ajuste. La diferencia entre completar el nombre de comando o el de un argumento radica en el lugar donde se busca. En el primer caso se busca en todos los directorios de la variable de entorno PATH, mientras que en el segundo únicamente en el directorio de trabajo. Bash también puede buscar en el histórico. La combinación de teclas que hace esto es Alt−Tab. Cada cierto tiempo conviene borrar el fichero .bash_history. Existe uno por usuario. Tema 1. El Shell de Linux Página:3/3 1 El Shell de Linux Página:1/3
3