55
Linux 1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

Embed Size (px)

Citation preview

Page 1: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

Linux 1

Linux RHC030

Modulo La Shell Bash

Relator : Carlos Villanueva

Page 2: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

2© 2007 Linux. Todos los derechos reservados.

Unidad 4 – La Shell Bash Introducción a Bash

Lista de comando y script

Variables de Bash

Expansión de la línea de comando

Personalización de la Shell

Lectura de scripts de shell e inicialización de shell

Page 3: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

3© 2007 Linux. Todos los derechos reservados.

Conceptos Claves La shell por defecto en Red Hat Enterprise Linux es la shell bash.

· La shell bash se puede utilizar de modo interactivo o como un lenguaje de escritura de gran alcance.

·Al arranque Bash ejecuta comandos hallados en el archivo ~/.bashrc, permitiéndole a los usuarios personalizar su shell.

· La shell bash guarda el historial de las líneas de comando ejecutadas. La líneas de comando se pueden recuperar desde el historial.

Introducción a Shell Bash

Page 4: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

4© 2007 Linux. Todos los derechos reservados.

La Shell Bash.

En Linux, la shell es el programa más utilizado y creado para el proyecto “GNU operating system”. .

La shell es lo que usted ve cuando inicia sesión o cuando abre una terminal y lo que más usa para iniciar cada comando.

Aunque hay una variedad de shells disponibles, pero todas siguen la misma conducta básica:

– Escuchar los comandos del usuario,

– Iniciar procesos como se especifica en los comandos

– Informar los resultados al usuario.

Page 5: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

5© 2007 Linux. Todos los derechos reservados.

Los SHELLS de LINUX

Además de BASH, en GNU/LINUX hay varios tipos de SHELLS, cada una con sus características propias, entre los más conocidos podemos nombrar:

KORN SHELL (ksh) – Desarrollado por David Korn de los Laboratorios AT&T Bell en el comienzo de la década del 80.

C SHELL (csh) – Desarrollado por Bill Joy en la Universidad de Berkeley, California.

Page 6: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

6© 2007 Linux. Todos los derechos reservados.

La Shell Bash.

La Shell Bash es la shell usada por defecto en Red Hat Enterprise Linux.

La shell bash no sólo es de fácil uso para tareas sencillas, sino también tiene capacidades de gran alcance para facilitar tareas complejas o incluso hacerlas posibles.

Como dato si vemos el manual del Bash este consta de 4500 líneas.

Page 7: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

7© 2007 Linux. Todos los derechos reservados.

Características de BASH

BASH incluye, entre otras, las siguientes características:

• Edición y completación de comandos.

• Histórico de comandos.

• Control de procesos.

• Funciones SHELL y alias.

• Prompts personalizados

• Operaciones aritméticas.

Page 8: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

8© 2007 Linux. Todos los derechos reservados.

Shells interactivas vs. Scripts de shell

La shell bash está diseñada para ser eficaz para dos tipos diferentes de uso.

Shell Interactiva: esta característica de bash permiten a las personas escribir comandos de una manera más fácil y eficaz.

Scripts de Shell: La shell bash también está diseñada para ser un lenguaje de escritura de gran alcance. Los scripts de la shell bash son programas pequeños escritos mediante la misma sintaxis que se utiliza en la línea de comandos.

Page 9: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

9© 2007 Linux. Todos los derechos reservados.

Shells interactivas vs. Scripts de shell

Los scripts de shell permiten a los usuarios automatizar las acciones repetidas al combinar una serie de comandos.

A diferencia de las shells interactivas, los scripts de shell suelen ejecutar una serie de comandos de modo no interactivo y muchas de estas características de la shell bash proveen una programación lógica (tales como ramas y bucles) para escribir scripts sofisticados.

Page 10: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

10© 2007 Linux. Todos los derechos reservados.

Shells interactivas vs. Scripts de shell

Algunas características de bash, tales como el historial de comandos, que pronto veremos, son casi inútiles en los scripts de shell. Otros rasgos, tales como la sustitución aritmética, pueden no parecer útiles en la línea de comandos, pero pueden ser útiles en un script de shell.

Si la utilidad de una característica de un bash no es de inmediato obvia, trate de verla en otro contexto.

Page 11: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

11© 2007 Linux. Todos los derechos reservados.

Shell de Inicio

En la práctica, los usuarios a veces necesitan iniciar una shell de modo manual. Cada vez que alguien inicie sesión o abra una terminal, una shell se inicia automáticamente. Sin embargo, a veces los usuarios desearían ejecutar una shell diferente u otra instancia de la misma shell. Dado que la shell es sólo "otro programa", nuevas shells pueden iniciarse desde la shell existente. La nueva shell se denomina subshell de la shell original. Cuando se sale de la subshell, el control vuelve a la shell original

Page 12: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

12© 2007 Linux. Todos los derechos reservados.

Shell de Inicio

Cuando inicia una subshell bash, las diferencias aparentes entre la subshell y la shell padre son mínimas y se debe tener cuidado de seguir el rastro de la shell en la que se encuentra.

Ejemplo

Page 13: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

13© 2007 Linux. Todos los derechos reservados.

Inicialización del Bash

Cuando se inicializa la shell bash, este buscará en el directorio de inicio del usuario un archivo titulado .bashrc.

El archivo se emplea para personalizar la shell bash.

Cuando la shell inicia, los comandos listados en el archivo se ejecutan como si fueran escritos en la línea de comandos. Técnicamente, la shell bash "lee" el archivo.

A continuación, madonna edita su archivo ~/.bashrc agregándole el comando cal, para que tras el arranque la shell bash se presente un calendario del mes actual.

Page 14: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

14© 2007 Linux. Todos los derechos reservados.

Inicialización del Bash

Ejemplo

Revisamos el contenido del archivo .bashrc

Page 15: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

15© 2007 Linux. Todos los derechos reservados.

Inicialización del Bash

Resultado

Ahora, cada vez que madonna inicia una shell bash (por ejemplo, iniciando en una consola virtual o abriendo otra ventana de terminal), se presenta un calendario.

Page 16: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

16© 2007 Linux. Todos los derechos reservados.

Inicialización del Bash – Archivos de arranque del BASH

Cuando el BASH es invocado de manera interactiva, primero lee y ejecuta comandos desde el archivo /etc/profile, si es que existe.

Una vez leído este archivo, BASH ejecuta comandos del primer archivo que exista y que BASH pueda leer de entre los siguientes archivos: ~/.bash_profile, ~/.bash_login, y ~/.profile, en ese orden.

Page 17: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

17© 2007 Linux. Todos los derechos reservados.

Inicialización del Bash – Archivos de arranque del BASH

Cuando salimos de una “sesión de login”, BASH lee y ejecuta comandos desde el archivo ~/.bash_logout, si es que este archivo existe.

Page 18: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

18© 2007 Linux. Todos los derechos reservados.

Introducir Comandos

Las shells interactivas repiten el ciclo de escuchar una línea de comandos, evalúan el comando solicitado, realizan todas las acciones solicitadas y muestran los resultados.

La shell escucha al teclado de entrada y emplea la tecla de ENTER para reconocer el final de la entrada como en la siguiente ejecución del comando echo.

Page 19: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

19© 2007 Linux. Todos los derechos reservados.

Historial de Comandos Como conveniencia para los usuarios de shells interactivas,

el comando shell bash mantiene el historial de cada uno de los comandos escritos por el usuario y ofrece una variedad de formas para hacer que los comandos desde este historial estén a su alcance.

La forma más fácil de ver el historial actual es mediante el comando history.

El comando history entrega un historial de los comandos previamente escritos, con cada entrada precedida por un "número de historial“.

Page 20: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

20© 2007 Linux. Todos los derechos reservados.

Historial de Comandos

Ejemplo

Page 21: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

21© 2007 Linux. Todos los derechos reservados.

Gestión del histórico de comandos

Donde guardar el histórico: por defecto el histórico se guarda en ~/.bash_history pero podemos indicar donde guardarlo con la variable HISTFILE.

Formatear la salida del histórico: la variable de entorno HISTTIMEFORMAT nos permite formatear la salida de history, agregando especificaciones de fecha y hora, por ejemplo.

HISTFILE=~/.agenda

Page 22: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

22© 2007 Linux. Todos los derechos reservados.

Gestión del histórico de comandos

Recordar que todas estas variables debemos ponerlas en un archivo donde se activen al arranque, por ejemplo, podría ser el archivo ~/.bash_profile.

$ export HISTTIMEFORMAT='- %F %T - ' $ history 1 - 2009-02-14 00:56:49 - ls / 2 - 2009-02-14 00:56:59 - cd ~ 3 - 2009-02-14 00:57:01 – history…

Page 23: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

23© 2007 Linux. Todos los derechos reservados.

Sustitución del Historial

Como una alternativa a las teclas de dirección, la shell bash también realiza "sustitución de historial", la cual se desencadena por el signo de exclamación.

El siguiente cuadro resume la sintaxis de sustitución de historial más utilizada.

Page 24: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

24© 2007 Linux. Todos los derechos reservados.

Sustitución del Historial

Ejemplo:

Resultado:

Page 25: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

25© 2007 Linux. Todos los derechos reservados.

Conservar el historial entre sesiones

No sólo él se mantiene un historial de comandos dentro de una sesión, sino que también se puede conserva los historiales de comandos entre sesiones.

Cuando se sale de la shell se entrega el historial dentro de un archivo llamado .bash_history en un directorio de inicio del usuario. Tras el arranque, la shell inicializa el historial de comandos desde el contenido de este archivo.

Page 26: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

26© 2007 Linux. Todos los derechos reservados.

Conservar el historial entre sesiones ¿Qué repercusión tienen estas shells interactivas

múltiples (pertenecientes a un mismo usuario) al ejecutar al mismo tiempo?

Puesto que el historial solo se ha guardado en el disco cuando la shell sale, los comandos ejecutados en un proceso bash no están disponibles en el historial de comandos de un proceso bash ejecutado en forma simultánea.

Además, la última shell al salir sobrescribirá las historias de las shells que salieron anteriormente.

Page 27: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

27© 2007 Linux. Todos los derechos reservados.

Variables del historial

Page 28: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

28© 2007 Linux. Todos los derechos reservados.

Ejecución de comandos múltiples

La shell bash permite a los usuarios unir comandos múltiples en una sola línea de comandos separando los

comandos con un ;. Ejemplo:

Page 29: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

29© 2007 Linux. Todos los derechos reservados.

Ejecución de comandos múltiples

El efecto es idéntico al escribir comandos en líneas separadas.

Page 30: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

30© 2007 Linux. Todos los derechos reservados.

Ejecución de comandos en una subshell

La shell bash permite a los usuarios la fácil ejecución de comandos en una subshell, delimitando el comando entre paréntesis.Ejemplo:

Page 31: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

31© 2007 Linux. Todos los derechos reservados.

Ejecución de comandos en una subshell

Page 32: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

32© 2007 Linux. Todos los derechos reservados.

Introducción a los Scripts de shell

•La clave para usar Red Hat Enterprise Linux de modo efectivo es la automatización.

•Un buen administrador de Linux debe ser en realidad extremadamente perezoso cuando se trata de hacer algo aburrido o repetitivo.

•Las secciones anteriores ilustraron la manera de encadenar comandos para ejecutar de modo consecutivo o simultáneo en lugar de esperar a que el comando termine antes de teclear el próximo.

Page 33: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

33© 2007 Linux. Todos los derechos reservados.

Introducción a los Scripts de shell

•También le introdujeron a las características del historial del bash y le mostraron cómo referirse a comandos tecleados previamente.•Sin embargo, aún falta una parte importante de la caja de herramientas del administrador del sistema: la escritura de scripts. •Un script, en su forma más simple, es un texto con una lista de comandos en él. Los comandos se envían a través de un programa específico llamado intérprete, el cual ejecuta un comando a la vez.

Page 34: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

34© 2007 Linux. Todos los derechos reservados.

Introducción a los Scripts de shell

Este intérprete suele ser la shell bash (conocida como /bin/bash o /bin/sh) y cada comando es un comando común de Linux. Otros intérpretes permiten utilizar lenguajes de programación de gran alcance como Perl, Python y Ruby.

Page 35: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

35© 2007 Linux. Todos los derechos reservados.

Datos Importantes:

La primera línea de su script debe especificar a qué intérprete se van a enviar las instrucciones. Esto se hace con una cadena especial llamada "shebang” (pronunciada "shuh-bang"), la cual se ve así: #!. A la shebang le sigue el nombre del intérprete para este script.

Ejemplo: para usar bash como su intérprete, se debería usar #!/bin/sh o #!/bin/bash.

Page 36: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

36© 2007 Linux. Todos los derechos reservados.

Datos Importantes:

La mayoría de los scripts sólo usan #!/bin/sh.

Al referirse al intérprete como #!/bin/bash se habilitan otras características, pero se limita la compatibilidad del script con los sistemas antiguos de Unix y rara vez es necesario.

Page 37: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

37© 2007 Linux. Todos los derechos reservados.

Datos Importantes:

Antes de ejecutar un script, usted debe habilitar el permiso "ejecutable" en él (de lo contrario, es sólo un archivo de texto).

El comando para esto es:

chmod u+x <scriptname>.

Le otorga (y sólo a usted) permiso para ejecutar este script justo como usted haría con otro comando.

Page 38: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

38© 2007 Linux. Todos los derechos reservados.

Datos Importantes:

Si creó un script llamado foo.sh en su directorio de inicio y justo después tecleó foo.sh obtendría el mensaje de error "no existe tal directorio o archivo".

Esto se debe a que cuando teclea un comando hay una serie de directorios en donde Linux busca ese comando.

Page 39: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

39© 2007 Linux. Todos los derechos reservados.

Datos Importantes:Para resolver este problema tiene dos alternativas:1.Usted usar ~/foo.sh o ./foo.sh ("." siempre se refiere al directorio actual).2.Puede colocar el script en un directorio que sea parte de su RUTA. Los usuarios que no son root no tienen permiso para colocar archivos en la mayoría de estos directorios, pero todos los usuarios tienen un bin personal, al cual pueden escribir en su directorio de inicio. Por lo tanto, si foo.sh fuera movido a ~/bin se podría ejecutar al teclear simplemente foo.sh en la línea de comandos.

Page 40: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

40© 2007 Linux. Todos los derechos reservados.

Ejemplo:

Page 41: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

41© 2007 Linux. Todos los derechos reservados.

Valores de retornoUn proceso de salida deja atrás una pequeña parte deinformación cuando muere, llamado el valor de retorno del proceso o estatus de salida.

El proceso padre es responsable de reunir los valores de retorno de los hijos muertos.

Los valores de retorno vienen en forma de enteros los cuales van de 0 a 255.

Una convención de Linux es que un programa devuelve un 0 para implicar "éxito" en lo que estaba intentando hacer, y un valor de retorno de no cero que implica algún tipo de error.

Page 42: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

42© 2007 Linux. Todos los derechos reservados.

Valores de retornoLa shell bash almacena el valor de retorno del comando ejecutado anteriormente en una variable especial llamada ?.El valor de retorno del ultimo programa ejecutado e puede examinarse con el comando echo $?.

Ejemplo:

Page 43: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

43© 2007 Linux. Todos los derechos reservados.

Valores de retorno

En contraste, los siguientes ejemplos muestran cómo responde el comando ls al listar un archivo que no existe.

[elvis@station elvis]$ ls -l /etc/passwordls: /etc/password: No such file or directory[elvis@station elvis]$ echo $?1

Page 44: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

44© 2007 Linux. Todos los derechos reservados.

Ejecución de comandos múltiples de modo condicional

La shell bash usa && y || para unir dos comandos de modo condicional. Cuando los comandos se unen de este modo, el primero siempre se ejecutará. El segundo comando puede que se ejecute o no dependiendo del valor de retorno del primer comando.

Ejemplo:

[elvis@station elvis]$ mkdir /tmp/boring && mv numbers.txt /tmp/boring

Page 45: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

45© 2007 Linux. Todos los derechos reservados.

Page 46: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

46© 2007 Linux. Todos los derechos reservados.

Variables de Bash

Las variables de la shell: Se asignan mediante una sintaxis A=apple. Se examinan con el caracter $, echo $A.

En el nivel de kernel, cada proceso tiene una colección de variables de entorno que los procesos hijos heredan.

El comando export convierte una variable de shell en una variable de entorno.

Los comandos set y env listan las variables de shell y las variables de entorno, respectivamente

Page 47: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

47© 2007 Linux. Todos los derechos reservados.

Ejemplos

Page 48: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

48© 2007 Linux. Todos los derechos reservados.

Creación y Uso de Alias en Linux

Un alias es una cadena que sustituye un texto por otro, cuando es usada como la primera palabra de un comando simple.

Como Configurar un Alias

Un alias puede ser definido en la línea de comandos, en .bash_profile o en .bashrc usando la siguiente sintaxis:

$ alias nombre='aquí escribes el comando completo y con opciones'

Page 49: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

49© 2007 Linux. Todos los derechos reservados.

nombre - Es el nombre que deseas ponerle al alias, Esto quiere decir que "nombre" es un alias para dicho comando. Cada vez que "nombre" es escrito como un comando, bash reemplazará el comando correspondiente junto con las opciones especificadas en su lugar.

Nota: No hay espacios en blanco entre el signo igual (=). Las comillas son necesarias si la cadena que se usara tiene mas de una palabra.

Ejecutando este comando en la línea de comandos se creara un alias temporal. Eso quiere decir que el alias existirá hasta que salgas del terminal. Si guardas el alias en el archivo de inicio del bash (~/.bashrc) entonces el alias será permanente.

Page 50: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

50© 2007 Linux. Todos los derechos reservados.

Ejemplos de AliasLos siguientes alias podrían ser útiles. Puedes configurarlos en el archivo ~/.bashrc.

alias findbig="find . -type f -exec ls -s {} \; | sort -n -r | head -5"

Buscar los 5 archivos mas grandes

Ubicar los procesos bash:alias psg="ps -aux ¦ grep bash"

Lista en formato largo:

alias ll='ls -l'

Page 51: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

51© 2007 Linux. Todos los derechos reservados.

Como Ver todos los AliasEjecuta el comando alias sin ningún argumento para ver la lista de los alias en un shell:

$ aliasalias ..='cd ..'alias ...='cd ../..'alias mnt='mount /mnt/cdrom'alias umnt='umount /mnt/cdrom'alias dus='df -h'

Page 52: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

52© 2007 Linux. Todos los derechos reservados.

Ver Alias individual

Para ver un alias en particular ingresa el comando con el formato "alias nombre" así como se muestra abajo:

$ alias dusalias dus='df -h'

Page 53: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

53© 2007 Linux. Todos los derechos reservados.

Detener Temporalmente el Uso de AliasCuando quieres llamar al comando en vez de a un alias, debes usar (\):

$ \nombredelalias

Por ejemplo, si has creado un alias que se llame cp y ahora deseas usar el comando cp en vez del alias, deberías hacer lo siguiente:

\cp * /backup/archivos/

Page 54: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

54© 2007 Linux. Todos los derechos reservados.

Como Remover un Alias

$ unalias -a$ alias

$ unalias hcl

$ hcl-bash: hcl: comando no encontrado

Como Remover todos los Alias

Page 55: Linux1 Linux RHC030 Modulo La Shell Bash Relator : Carlos Villanueva

55© 2007 Linux. Todos los derechos reservados.