ADMINISTRACIÓN DE SISTEMAS OPERATIVOS. UT07: SHELLSCRIPTS

Documentos relacionados
LINUX - El intérprete de órdenes I

Figura 1. Entrada, salida y error estándar.

Linux 101 Explorando la línea de comandos

Prácticas de Fundamentos del Software

Nombre:... Fecha: / 12 /2010

Práctica 6 Redirección de la E/S y filtros

Bloque II: Programación orientada al sistema

Shell Power!!! Comandos básicos de consola

El shell de GNU/Linux

Tema 7:Línea de ordenes del sistema operativo.

PREGUNTAS Y RESPUESTAS RELATIVAS AL USO DE COMANDOS BÁSICOS EN LINUX

Objetivos y Temario CURSO LINUX. PRINCIPIOS BASICOS

LINUX Comandos vía terminal (Tema 13)

Introducción a Linux. El regreso a los años 70: la consola (I)

UNIDAD DIDACTICA 3 REDIRECCIONAMIENTO Y TUBERIAS

Nociones de informática. Qué es una computadora? GNU/Linux. Lo mínimo que hay que saber para empezar a trabajar con una computadora del aula

Inmersión Linux: de 0 a 100 en 30 Horas Tema 4: Shell Scripting. J. Félix Ontañón

Linux Principios básicos de uso del sistema [4ª edición]

PRÁCTICA DE LLAMADAS AL SISTEMA OPERATIVO UNIX

Comandos Básicos Jornadas Octubre 2009 GUL UC3M Tania Pérez

Laboratorio de Sistemas Operativos. Ingenierías Técnicas en Informática de Sistemas y Gestión 2006/2007

Administración UNIX: Programación en bash

Taller de programación shell

Práctica de laboratorio: Trabajo con la línea de comandos de Linux

Sesión 3. Comandos avanzados. Curso 09/10. Mª José Santofimia Escuela Superior de Informática Universidad de Castilla-La Mancha

donde <directorio> es el nombre del directorio al que queremos ingresar.

Introducción a UNIX. Departamento de Lenguajes y Sistemas Informáticos

Programación shell en Unix/Linux ksh, bash, sh (con ejercicios corregidos) (4ª edición)

Mª DOLORES CARBALLAR FALCÓN L

Sistemas Operativos. Práctica 1. del shell bash de Unix Curso 2005/2006

bash Scripting 31 de mayo de 2007

Práctica 2 Manejo de Linux por consola

1. Cómo asignar una IP a mi ordenador? 2. Cómo hago para ver los archivos del directorio anterior? 3. Cómo sé en qué directorio estoy? 4.

Introducción a GNU/Linux 20/08/2015

Comando Sintaxis y Descripción Ejemplo Opciones

1. Por qué decimos que "Linux" es solamente el kernel del sistema operativo que utilizamos?

Creación De Scripts Ejecutables

TP N 4 Redirección de entrada y salida estándar

Verdadero si el archivo fue modificado dentro de los últimos N días. Verdadero si el archivo fue cambiado dentro de los últimos N días.

LÍNEAS DE COMANDO EN LINUX PARA PRÁCTICAS DE REDES I con Raspberry Pi 2. Computer Networks I 1

100 ejercicios básicos sobre Linux

BASH Scripting. Contenidos. BASH: Bourne-Again SHell. Hola mundo!

006. Archivos ocultos e historial

PRÁCTICA 20 MANDATOS DE TRATAMIENTO DE CADENAS. CREACIÓN DE SCRIPTS DE SHELL SENCILLOS

pwd Nos muestra el directorio en el que nos encontramos.

Programación Aplicada

Computer Networks I 1. LÍNEAS DE COMANDO EN LINUX PARA PRÁCTICAS DE REDES I con Raspberry Pi 2

Cátedra de Sistemas Operativos

CAR. Responsable : María del Carmen Heras Sánchez. Asesores Técnicos : Daniel Mendoza Camacho Yessica Vidal Quintanar.

( Tercera Parte ) 16 de Octubre de Versión 1.0

Comandos Básicos Jornadas Marzo 2009 Universidad Carlos III de Madrid Tania Pérez Asensio

Facultad de Ingeniería Universidad de Buenos Aires Sistemas Operativos Lic. Ing. Osvaldo Clúa Lic. Adrián Muccio.

Introducción a Scripts. Cecilia Curlango Rosas

Tema: Introducción a los comandos Linux

Introducción a Linux

Es la estructura que permite ejecutar los comandos solamente si se cumple una determinada condición. La sintaxis más usual:

Shell Scripting II II

.enreda. Cambia la fecha del sistema (si pulsamos Intro aceptamos la fecha predeterminada) Poner Date /T

TRABAJANDO CON ARCHIVOS Y DIRECTORIOS. Sistemas Operativos 3 Wandirys Lappost Díaz

INDICE. XV Agradecimientos. XIX Como leer este libro

Avalon Consultores, C.A. - RIF: J URL:

Resumen de comandos usuales de Unix y uso básico del shell bash

2 Comandos para imprimir lpr le lpr -P printer -h -s le lpq imprime le en la impresora por defecto imprime le en la impresora printer sin pagina de ca

Gestión de procesos en Linux

Línea de comandos en GNU/Linux

Bloque III. Herramientas

Sistemas Operativos. Bourne Again Shell. Dr. Wenceslao Palma M.

GNU/Linux desde la línea de comandos. Pablo Garaizar Sagarminaga (txipi) Alvaro Uría Avellanal (Fermat)

El entorno de programación UNIX. CI-2400 Programación Avanzada en Sistemas de Tipo UNIX Prof. Braulio José Solano Rojas ECCI, UCR

El sistema operativo Linux

Sistemas Operativos. Práctica 1. Curso 2005/2006

Programación shell en Unix/Linux sh, ksh, bash (con ejercicios corregidos) (3ª edición)

Shell Scripting II II

PROGRAMACIÓN DEL INTÉRPRETE DE COMANDOS DE UNIX/LINUX

1.Intérpretes de órdenes. Shells

Prácticas de Fundamentos del Software

Nombre:... Fecha: /12/2010

banner - Produce una salida en forma de carátula banner [-w [n] ] cadenas banner "Mi caratula por impresora" lpr

Formato para prácticas de laboratorio

Shell de Unix ProgPLN

Trabajo con ficheros de texto

Química computacional: Introducción a

Facultad de Ingeniería Universidad de Buenos Aires Sistemas Operativos Lic. Ing. Osvaldo Clúa Lic. Adrián Muccio.

Tema 2: Sistemas Operativos. Linux

Comandos Básicos de Guadalinex

Procesamiento básico de texto en Unix ProgPLN

Comandos Básicos de Linux

UNIX. Curso de Modelado Molecular I INTRODUCCIÓN

Sesión 1. El intérprete de comandos Félix Villanueva Escuela Superior de Informática Universidad de Castilla-La Mancha.

BASH y la Terminal Linux

Tema: Uso de Bash en Linux Parte II.

Programando con el intérprete de órdenes (shell) de UNIX

Línea de comandos o consola o shell

PRÁCTICA 14 GESTIÓN DE USUARIOS EN LINUX Y WINDOWS

Lista de comandos de Linux

ÓRDENES BÁSICAS DEL MS-DOS. MANEJO DE DIRECTORIOS

This obra by Sergio Belkin is licensed under a Creative Commons Atribución-CompartirDerivadasIgual 2.5 Argentina License. Procesos.

Transcripción:

7.0.- Recordatorio A.- Qué shell estamos utilizando? Si queremos saber que versión de shell tenemos instalado podemos usar el comando: #echo $SHELL Este comando nos indica que shell estamos usando y en que directorio está instalado. Si queremos conocer la versión de Bash podemos usar el comando: #echo $BASH_VERSION También podemos saber donde está instalado bash con el comando whereis: #whereis bash Deberíamos obtener,entre otras cosas, /bin/bash Nota: el comando locate lista los archivos que contienen el texto que se pasa como argumento. Por ejemplo, para encontrar archivos que sus nombres contienen la palabra mkdir : #locate mkdir Para conocer todos los shell que disponemos en nuestro equipo: cat /etc/shells Nota: se puede cambiar el shell con el comando chsh Algunas de las características de el Bourne Again Shell son: - Autocompletado de nombres de variables, usuarios, nombres de servidores, comandos y archivos. - Corrección de rutas de archivos en el comando cd. - Soporte a arrays de tamaño ilimitado. 1

B.- Los comodines. Para referirnos a varios ficheros es muy típico usar los comodines. Los más utilizados hasta ahora han sido:?, que sustituye a un sólo carácter. *, que sustitute a 0 ó más caracteres. [conjunto], que sustituye a uno de los caracteres del conjunto (admite rangos). [!conjunto], uno de los caracteres que no esté en el conjunto. Es importante tener en cuenta que los comandos cuando se ejecutan no ven los comodines sino el resultado de la expansión. Nota: para realizar los ejemplos vamos a crear los archivos a1.html a4.html, f1.java f3.java, f1.js f3.js, t1.css t3.css y tema1.c tema3.c en el directorio prueba. Ejemplos de aplicación 1.- Qué mostrarían los siguientes comandos? a) $ls *.html Todos los ficheros terminados en.html. En nuestro caso: a1.html, a2.html, a3.html y a4.html b) $ls tema?.* Todos los ficheros que comiencen por tema, después un carácter y terminen en. Pueden, además, tener después del punto cualquier carácter. En nuestro caso: tema1.c, tema2.c y tema3.c c) $ls t[1-3,e]* Todos los ficheros que empiecen por t1, t2, t3 y te y a continuación cualquier cosa. En nuestro caso: t1.css, t2.css, t3.css, tema1.c, tema2.c y tema3.c Nota: el último comando sería equivalente a ls t[1-3e]*, es decir, sin coma. d) #cp g* /tmp En principio, como en todos los ejemplos anteriores, se produce la expansión del comodín, en este caso del *. Como no existe ningún archivo que comience por g, al comando cp se le pasa el parámetro g* y al no existir ningún archivo con el nombre g* es cuando se produce el error cp: cannot stat 'g*': No such or directory. A continuación se muestra una imagen con la ejecución de todos los ejemplos anteriores 2

Nota: algunos shells no ejecutan el comando si no se produce la expansión (tcsh) y no se produce el error. Nota: podemos ver si la ejecución de un comando ha tenido éxito o no tecleando, después de la ejecución de dicho comando, echo $?. Si el resultado es 0 éxito. Ejemplos pwd es un comando que existe éxito (0). pwdd es un comando que no existe error (127) Ahora, el comando existe y es correcta su sintaxis, pero no se copia nada error (1) Ahora, el comando existe pero no se visualiza nada porque no existe el fichero de nombre q* error (1) 3

Comodín tilde o dash (~) Con Shift+F4, o Shift+F5 (quitando lo que sobra) obtenemos el comodín tilde, el cual se refiere al directorio home de los usuarios. Por ejemplo, con cd ~antonio nos vamos a /home/antonio (si hemos iniciado sesión con antonio bastaría con poner cd ~). Nota: recordar que tecleando cd [INTRO], nos lleva a nuestro directorio de conexión. Comodín llaves El comodín llaves expande una palabra por cada una de las cadenas de caracteres que contiene. Dentro de la llave debe haber, al menos, dos cadenas de caracteres. Ejemplos: 1) $ls t*.{c, js, css, html, java} Muestra, tras la expansión archivos y directorios que comiencen por t, cualquier carácter y tengan extensión c, js, css, html o java o errores. En nuestro caso: 2) Salida en pantalla de $ls t{{2,3},4}.{css,js,java} (aciertos y errores) Otro parecido: $ls t{1,2,3,4,5}*.{css,js,java,html} 3) Salida en pantalla de $ls a{1}.* En este bash, este comando produciría un error a no ser que existiera un fichero con el nombre a{1}.* (cosa poco probable porque no es razonable utilizar como parte de un nombre de fichero los caracteres { y *). Entre las llaves deben aparecer al menos dos opciones. Lo comprobamos: 4

C.- Redirecciones y tuberías. C.1.- Redirecciones Cada programa va a tener asociadas siempre una entrada estándar (por defecto el teclado), una salida estándar (por defecto la consola) y una salida de errores estándar (por defecto también la consola). Si queremos, podemos cambiar la entrada estándar para que el programa reciba datos de un fichero usando el operador de redirección <. Por ejemplo el comando cat, si no recibe argumentos, lee del teclado por la entrada estándar y lo pasa a la salida estándar: $ cat Hola queridos alumnos [intro] Hola queridos alumnos [intro] ^D Podemos cambiar la entrada estándar de cat para que lea de un fichero con: $cat < alumnosaso En el caso concreto del comando cat, también puede recibir como argumento el nombre del fichero a pasar a la salida estándar, con lo que en el caso del comando cat nos podríamos haber ahorrado el operador <. Linux/UNIX dispone de un gran número de comandos que leen de la entrada estándar, realizan una operación con el texto, y escriben en la salida estándar (o en la salida de errores si se produce un error): cat, grep, cut,... El operador de redirección de salida > permite cambiar la salida estándar de un comando, por ejemplo: $ date > ahora Envía el día y hora actuales al fichero ahora. También podemos cambiar a la vez la entrada y salida estándar de un programa usando ambos operadores de redirección. Por ejemplo: $ cat < ficheroa > ficherob También podemos cambiar la salida de errores estándar con el operador de redirección 2>. Por ejemplo: $ cat < ficheroa > ficherob 2> errores Copia el ficheroa en el ficherob y si se produce algún error lo escribe en el fichero errores. Si no queremos sobrescribir un fichero de salida sino añadir el contenido al final podemos usar el operador de redirección >> para la salida estándar o 2>> para los errores estándar. Por ejemplo: $ls p* >> ficheros 2>> errores Añadiría los ficheros que lista ls al fichero ficheros, y si se produjesen errores los añadiría al fichero errores. El operador de redirección 2>> es especialmente útil para almacenar los conocidos logs de errores. Muchas veces no se quiere que un programa muestre mensajes de error en la consola del usuario ni llevarlos a un fichero. En este caso es muy común redirigir su salida de errores estándar al fichero especial /dev/null: $ls *.{c,exe,java} 2> /dev/null Especialmente útil es /dev/null en comandos que, si los ejecuta un usuario normal, acceden a directorios a los que no podemos y comienzan a mostrarse errores que sabemos que son por la falta de privilegios. Como no los queremos ver, redirigimos la salida estándar de errores a este sumidero. 5

Observar la diferencia: $find / -name *.sh $find / -name *.sh 2> /dev/null C.2.- Tuberías Es posible redirigir la salida estándar de un programa a la entrada estándar de otro usando el operador (pipeline). Vamos a ver un ejemplo utilizando un comando muy útil: cut. $cut -d: -f1 < /etc/passwd sort (en este ejemplo podemos ahorrarnos el <). En este caso obtenemos los nombres de los usuarios del equipo ordenados alfabéticamente. En primer lugar, cut busca el delimitador : que lo hace con -d. De los campos que existan separados por : obtiene el primero (-f1, f de field o campo). Nota: si queremos obtener más campos, vamos separando por comas los que queramos, por ejemplo, -f1,3,5. Comando relacionado: tee. Este comando guarda la salida estándar intermedia en un fichero y continúa ejecutando la línea de comandos. Por ejemplo, queremos llevar el contenido de un fichero a otro contando las líneas del mismo: # cat f1 > nuevo # wc -l nuevo Solución: #cat f1 tee nuevo wc -l Nota: si el archivo existe y queremos añadir la información, entonces tee -a f: #cat f1 tee -a nuevo wc -l D.- Ejecución de comandos. Historial de comandos Los comandos que vamos ejecutando se van almacenando en el fichero.bash_history, situado dentro del directorio home de cada usuario. Podemos usar history para obtener un listado completo de los comandos que hemos ejecutado. Si queremos ver los n últimos, podemos teclear history n, por ejemlplo, history 10. El número de comandos almacenados está en la variable HISTSIZE. Cómo podemos saber su valor? Tecleando echo $HISTSIZE. Podemos cambiar este valor en el fichero de configuración.bashrc. Otro comando parecido, aunque menos útil, a history es fc -l. Relacionados con bang : - Para ejecutar el último comando: $!!. - Para ejecutar el comando n: $!n (hay que saber el n ejecutando antes history). - Para ejecutar el último comando que empiece por : $!cadena, por ejemplo $!gr Ejecución secuencial de comandos: separados por el carácter; $ls -l; echo Hola. Además podemos agrupar los comandos en paréntesis y ser tratado como si fuera un sólo comando, es decir, un solo PID: $ (ls-l ; echo Hola) También podemos ejecutar estos comandos en 2º plano: & $ (ls-l ; echo Hola) & 6

E.- Medida del tiempo total de ejecución de un programa El comando time de Linux permite obtener el tiempo total de ejecución de un programa. Su sintaxis es muy sencilla: time seguido del comando cuya ejecución queremos medir (con los parámetros correspondientes). El valor real indica el tiempo total transcurrido en ejecutar el comando. Por ejemplo, si hay otros procesos en el sistema, se contará también el tiempo de los mismos. El valor user se refiere al tiempo de CPU del proceso en cuestión; por lo tanto, se excluye el tiempo de otros procesos o de los retardos del disco. El valor sys es el tiempo de CPU en las llamadas al sistema del proceso. Idealmente, si no hubieran otros procesos y la lectura de disco fuera inmediata, tendríamos que: user + sys = real. 7