LE101-Laboratorios
April 5, 2017 | Author: hgrg91 | Category: N/A
Short Description
Download LE101-Laboratorios...
Description
Operación del sistema operativo GNU/Linux – Guía de laboratorios
Índice de contenido Introducción al sistema operativo LINUX...............................................................................3 Introducción al sistema operativo LINUX...............................................................................4 Conceptos básicos.................................................................................................................4 Organización del árbol de archivos........................................................................................5 Introducción a la línea de comandos......................................................................................5 Manipulación de archivos........................................................................................................7 Navegando el árbol de directorios..........................................................................................8 Listar el contenido de directorios............................................................................................9 Comodines de la línea de comandos.....................................................................................9 Comprobando espacio disponible........................................................................................11 Manipulación de archivos y directorios................................................................................ 12 Permisos de acceso a archivos y directorios.......................................................................15 El sistema de archivos...........................................................................................................18 Sistema de archivos.............................................................................................................19 Enlaces duros.......................................................................................................................19 Enlaces simbólicos...............................................................................................................20 Búsqueda de archivos..........................................................................................................22 Copias de seguridad.............................................................................................................23 Redirecciones y tuberías.......................................................................................................25 Redireccionando la entrada, salida y error estándar........................................................... 26 Filtros y procesamiento de cadenas.....................................................................................27 Filtros y procesamiento de cadenas.....................................................................................28 El editor de flujo sed.............................................................................................................31 Procesando texto con awk...................................................................................................32 Scripts del shell.......................................................................................................................34 Scripts del shell.....................................................................................................................35 Impresión y comunicación.....................................................................................................44 Impresión..............................................................................................................................45 Comunicación.......................................................................................................................45 Control de procesos y herramientas del sistema............................................................... 47 Control de procesos..............................................................................................................48 Herramientas del sistema.....................................................................................................50
1 Introducción al sistema operativo LINUX
Introducción al sistema operativo LINUX
Introducción al sistema operativo LINUX Este laboratorio lo ayudará a afianzar sus conocimientos básicos sobre LINUX.
Conceptos básicos 1. ¿Qué se entiende por “free software”?. El término en inglés “free software” o software libre se refiere a libertad, no precio. Software libre se refiere a la libertad que tienen los usuarios de ejecutar, copiar, distribuir, estudiar, cambiar y modificar el software. Por lo tanto, la posibilidad de tener acceso al código fuente es una condición necesaria para el software libre. Para que las libertades sean reales, deben ser irrevocables. “Software libre” no significa “no comercial”. 2. ¿Cual sería la diferencia entre LINUX y el sistema operativo GNU/Linux? Linux es el núcleo, el programa del sistema que asigna los recursos de la máquina a los otros programas que se ejecuten. El núcleo es una parte esencial de todo sistema operativo, pero inútil por sí sólo; sólo puede funcionar en el contexto de un sistema operativo completo. La mayoría de las distribuciones de sistemas operativos que utilizan Linux como núcleo son básicamente versiones modificadas del sistema operativo GNU. GNU comenzó a desarrollar en 1984, años antes de que Linus Torvalds escribiera su núcleo. Linux no es un paquete GNU; esto es, no fue desarrollado bajo el auspicio del Proyecto, ni contribuido al Proyecto GNU de forma específica. Por tanto, el sistema operativo debería ser conocido como GNU/Linux. 3. ¿Qué es GNU? ¿Que es GPL? El Proyecto GNU fue iniciado en 1984 con el propósito de desarrollar un sistema operativo compatible con Unix que fuera software libre: el sistema GNU (GNU es un acrónimo recursivo para “GNU No es Unix“). La GPL (General Public License/Licencia Pública General) de GNU es un conjunto específico de términos de distribución para proteger con copyleft a un programa. Copyleft es la regla que implica que cuando se distribuya el programa, no se pueden agregar restricciones para denegar a otras personas las libertades centrales. Esta regla no entra en conflicto con las libertades centrales, sino que más bien las protege. 4. En LINUX cada usuario pertenece a un grupo. ¿Para que son utilizados los grupos de usuarios? ¿Que es el UID y GID? Cada usuario debe tener un nombre de inicio de sesión o “login” para ingresar al sistema y pertenece a uno o más grupos. Los grupos permiten organizar usuarios de funciones o características similares de tal modo que puedan definirse permisos de acceso sobre los archivos y directorios en base a los grupos. Esto Ing. Ivan Ferreira
4
Introducción al sistema operativo LINUX
permite que la administración de la seguridad y configuración restricciones del sistema sea mas sencilla. Por ejemplo, si definimos que todos los miembros del grupo “admin” tienen permiso de escritura sobre un archivo, en caso de que un nuevo usuario sea dado de alta en el departamento de administración, para que este pueda escribir en el archivo solamente debe pertenecer al grupo “admin”, y no es necesario modificar los permisos sobre el archivo en sí. Cada usuario y grupo tiene un identificador numérico que es utilizado por el sistema para diferenciar a los usuarios, conocidos como UID y GID. El sistema no reconoce diferencia entre los usuarios según el nombre del usuario, por lo tanto, si dos usuarios con nombres distintos tienen el mismo ID, el sistema Linux no podrá diferenciar quién es quién.
Organización del árbol de archivos 1. Explique la función de cada uno de los directorios que se encuentran en la raíz del sistema operativo Linux. Cuál es la norma utilizada para definir la jerarquía del árbol? Refiérase a la sección “Organización del árbol de archivos” del manual “Operación del sistema operativo Linux”
Introducción a la línea de comandos 1. Visualice la pagina del manual de cal, en base a la sintaxis indicada en la pagina del manual, ¿cual seria la forma correcta de visualizar el calendario del mes de diciembre del año actual?. ¿Es correcto el comando?: $ cal 12
De no ser correcto, ¿por que no lo es? De acuerdo con la página “man cal”, la sintaxis del comando es: cal [[month] year] Lo cual indica que si especificamos un número, este será considerado como el año, especificando dos números, indicaríamos tanto el mes como el año. Por tanto el comando cal 12 sería incorrecto para visualizar el calendario de diciembre del año actual, debe especificarse también el año. 2. Utilice el comando date para mostrar la fecha en el siguiente formato:
5
●
Día-Mes-Año
●
Año-Mes-Día
Red Hat Certified Engineer
Introducción al sistema operativo LINUX
$ $ $ $
●
"La fecha de hoy es: DD-MMM-AA"
●
"Hoy es el DIA de NOMBRE_MES de AÑO_4_DIGITOS"
date date date date
+"%d-%m-%Y" +"%y-%m-%d" +"La fecha de hoy es %d-%m-%y" +"Hoy es el %d de %B de %Y"
3. Si usted ha dejado por descuido su sesión abierta, y otro usuario toma el control de su terminal e intenta cambiar la contraseña, ¿podrá realizarlo? Las probabilidades son bajas ya que para realizarlo debería conocer su contraseña actual, puesto que al ejecutar el comando “passwd”, se solicitará la contraseña actual para definir una nueva.
Ing. Ivan Ferreira
6
2 Manipulación de archivos
Manipulación de archivos
Navegando el árbol de directorios 1. Identifique en qué directorio se ubica por defecto al iniciar sesión. ¿Como es llamado este directorio? Al iniciar sesión por defecto se ubicará en un directorio por debajo del /home cuyo nombre es igual al nombre de usuario utilizado. Es conocido como directorio HOME. 2. Explique el concepto de rutas absolutas y rutas relativas Una ruta absoluta indica el camino a seguir para ubicar un archivo a partir de la raiz del sistema de archivos, ejemplo: /boot/grub/grub.conf La ruta relativa indica el camino que debe ser seguido para ubicar un archivo a partir de la ubicación actual, utilizando “.” y “..” para indicar el directorio actual o superior respectivamente, por ejemplo, suponiendo que se encuentra en su directorio HOME, para localizar el mismo archivo anterior: ../../boot/grub/grub.conf Para hacer referencia a un archivo en el directorio actual usando la ruta relativa: ./backup.sh 3. Considere la siguiente estructura de directorios: / |-| | | | | | | | |-`--
home |-- jose | `-- doc | |-| `-`-- luis `-- doc |-`-tmp usr `-- share `-- doc
archivo1.txt archivo2.txt
archivo3.txt archivo4.txt
Suponiendo que su directorio actual es jose, que comando debe utilizar para cambiarse al directorio tmp usando la ruta absoluta? $ cd /tmp
Ing. Ivan Ferreira
8
Manipulación de archivos
4. Que comando debería utilizar para retornar inmediatamente a su directorio HOME? $ cd
5. Suponiendo que su directorio actual es /home/luis/doc, que comando debería utilizar para acceder al archivo archivo1.txt usando la ruta relativa? ../../jose/doc/archivo1.txt
6. Suponiendo que su directorio actual es /tmp, que comando debería utilizar para acceder al directorio /usr/share/doc utilizando la ruta relativa? $ cd ../usr/share/doc
7. Que comando puede utilizar para retornar al directorio tmp? $ cd -
Listar el contenido de directorios 1. Sin moverse de su directorio HOME, liste el contenido del directorio /boot en formato largo. $ ls -la /boot
2. Sin moverse de su directorio HOME, liste el contenido del directorio /etc/rc.d/init.d ordenado por tamaño. $ ls -laS /etc/rc.d/init.d
3. Sin moverse de su directorio HOME, liste el contenido del directorio /boot ordenado por fecha de modificación del archivo. $ ls -lat /boot
4. Sin moverse de su directorio HOME, liste el contenido del directorio /var/log mostrando el tamaño de los archivos en formato humanamente leíble. $ ls -lah /var/log
5. ¿Cuál es la diferencia entre el resultado de los comandos ls -la /boot y ls -lad /boot? La opción -d implica que se mostraran los atributos del directorio /boot y no de su contenido.
Comodines de la línea de comandos 1. Sin moverse de su directorio personal, utilice el comando ls -lad para listar 9
Red Hat Certified Engineer
Manipulación de archivos
todos los archivos del directorio /etc cuyo nombre comienzan con “h” y terminan con “s”. $ ls -lad /etc/h*s
2. Sin moverse de su directorio personal, utilice el comando ls -lad para listar todos los archivos del directorio /etc cuyo nombre comienzan con “h” y tienen exactamente 5 caracteres. $ ls -lad /etc/h????
3. Sin moverse de su directorio personal, utilice el comando ls -lad para listar todos los archivos del directorio /etc cuyo nombre comienzan con “p” o con “s” y tienen exactamente 6 caracteres. $ ls -lad /etc/[ps]?????
4. Sin moverse de su directorio personal, utilice el comando ls -lad para listar todos los archivos del directorio /etc cuyo nombre contiene “pp” en cualquier parte del nombre. $ ls -lad /etc/*pp*
5. Sin moverse de su directorio personal, utilice el comando ls -lad para listar todos los archivos del directorio /etc cuyo nombre contiene un numero del 1 al 6 en cualquier parte del nombre. $ ls -lad /etc/*[1-6]*
6. Sin moverse de su directorio personal, utilice el comando ls -lad para listar todos los archivos del directorio /etc cuyos nombres no comiencen con una vocal. $ ls -lad /etc/[!aeiouAEIOU]*
7. Sin moverse de su directorio personal, utilice el comando ls -lad para listar todos los archivos del directorio /etc cuyos nombres no comiencen con una vocal y terminen en vocal. $ ls -lad /etc/[!aeiouAEIOU]*[aeiouAEIOU]
8. Explique cuál sería el resultado del siguiente comando: $ ls -la /usr/{bin,sbin}/??
El comando listaría todos los archivos cuyo nombre tiene exactamente dos caracteres y se encuentran en el directorio /usr/bin o /usr/sbin.
Ing. Ivan Ferreira
10
Manipulación de archivos
Comprobando espacio disponible 1. Verifique si /home es un sistema de archivos independiente de la raíz con el comando df. Si /home fuese un sistema de archivos independiente de la raíz, tendría su propio punto de montaje en el resultado de la salida del comando df, por ejemplo: $ df /home S.ficheros Bloques de 1024 Usado Dispon Ocupado Montado en /dev/mapper/homevg-homelv 15460896 11428648 4032248 74% /home
De lo contrario se vería de la siguiente forma: $ df -P / S.ficheros Bloques de 1024 Usado Dispon Ocupado Montado en /dev/mapper/rootvg-rootlv 6063688 3912400 1843272 68% /
Indicando que /home es simplemente un directorio más en la raíz del sistema de archivos. 2. Verifique cuanto espacio disponible existe en el sistema de archivos que contiene el directorio /tmp $ df /tmp S.ficheros Bloques de 1024 Usado Dispon Ocupado Montado en /dev/mapper/rootvg-rootlv 6063688 3912400 1843272 68% /
Existen 1843272 KB disponibles, lo que seria equivalente a 1.8 GB. 3. Compruebe cuanto espacio utiliza en disco el directorio /usr/bin con el comando du, utilice el comando bc para calcular el porcentaje de espacio utilizado por ese directorio con respecto al total de espacio del sistema de archivos que lo contiene. Obtenemos la cantidad de espacio utilizado por el directorio /usr/bin $ du -sk /usr/bin 139660 /usr/bin
Obtenemos el espacio total del sistema de archivos que contiene a /usr/bin $ df -k /usr/bin S.ficheros Bloques de 1024 Usado Dispon Ocupado Montado en /dev/mapper/rootvg-rootlv 6063688 3912400 1843272 68% /
Calculamos el porcentaje de uso: $ bc -ql 139660/6063688*100
11
Red Hat Certified Engineer
Manipulación de archivos 2.30321876719250726600
El porcentaje que ocupa el directorio /usr/bin con respecto al espacio total del sistema de archivos que lo contiene, es 2.3%. 4. Compruebe cuanto espacio utiliza en disco su directorio HOME con el comando du, utilice el comando bc para calcular el porcentaje de espacio utilizado por ese directorio con respecto al total de espacio del sistema de archivos que lo contiene. Primero, nos ubicamos en el directorio HOME con el comando “cd” y obtenemos el espacio utilizado por el mismo utilizando el “.” para indicar el directorio actual. $ cd $ du -sk . 30740 .
Luego determinamos el espacio de total del sistema de archivos que contiene nuestro directorio HOME. $ df -k . S.ficheros Bloques de 1024 Usado Dispon Ocupado Montado en /dev/mapper/homevg-homelv 15460896 11428648 4032248 74% /home
Calculamos el porcentaje de uso. $ bc -ql 30740/15460896*100 .19882418198790031300
Para este caso, este directorio HOME ocupa apenas 0.19 % del total del sistema de archivos. 5. Identifique con du el directorio que ocupa mas espacio en /usr/share/doc. $ du -sk /usr/share/doc/*
Manipulación de archivos y directorios 1. Sin moverse de su directorio personal, cree la siguiente estructura de directorios en el
Ing. Ivan Ferreira
12
Manipulación de archivos
. |-| | | | | `--
docs |-- informes `-- planillas |-- enero |-- febrero `-- marzo reportes |-- culminados `-- en_proceso
Opción 1, paso a paso: $ $ $ $ $ $ $ $ $
mkdir mkdir mkdir mkdir mkdir mkdir mkdir mkdir mkdir
docs docs/informes docs/planillas docs/planillas/enero docs/planillas/febrero docs/planillas/marzo reportes reportes/culminados reportes/en_proceso
Opción 2, usando la opción -p para minimizar la cantidad de comandos $ $ $ $ $ $
mkdir mkdir mkdir mkdir mkdir mkdir
-p -p -p -p -p -p
docs/informes docs/planillas/enero docs/planillas/febrero docs/planillas/marzo reportes/culminados reportes/en_proceso
2. Sin moverse de su directorio personal, cree el archivo ene01.txt dentro del directorio enero con el comando touch $ touch docs/planillas/enero/ene01.txt
3. Sin moverse de su directorio personal, cree el archivo feb01.txt dentro del directorio febrero con el comando touch $ touch docs/planillas/febrero/feb01.txt
4. Sin moverse de su directorio personal, elimine el directorio en_proceso con el comando rmdir $ rmdir reportes/en_proceso
5. Sin moverse de su directorio personal, elimine el directorio reportes con el
13
Red Hat Certified Engineer
Manipulación de archivos
comando rmdir. ¿Se ejecuto correctamente el comando? ¿Cual fue el error reportado? A que se debe esto? $ rmdir reportes/ rmdir: reportes: El directorio no esta vacio
Con el comando rmdir, no es posible borrar directorios que no se encuentran vacíos. 6. Sin moverse de su directorio personal, elimine el directorio reportes usando el comando rm $ rm -fr reportes
7. Sin moverse de su directorio personal, cree en el directorio /tmp el directorio llamado abso, utilizando la ruta absoluta $ mkdir /tmp/abso
8. Sin moverse de su directorio personal, cree en el directorio /tmp el directorio llamado rela, utilizando la ruta relativa $ mkdir ../../tmp/rela
9. Cree un directorio llamado temporal en su directorio home $ mkdir temporal
10. Copie todos los archivos del directorio /etc que comienzan con p al directorio temporal $ cp /etc/p* temporal
11. Cambie el nombre del directorio temporal a temp $ mv temporal temp
12. Elimine el directorio temp $ rm -fr temp
13. Cual es la diferencia entre los comandos cat, more y less? El comando cat no permite visualizar el archivo pagina por pagina o linea por linea, more y less si lo permiten, less ademas permite utilizar las flechas de dirección para visualizar el documento y resalta las coincidencias de una búsqueda, sin embargo, se debe tener en cuenta que el comando less no existe en todos los sistemas operativos Unix. 14. Como puede hacer para buscar una cadena de texto dentro al visualizar un archivo Ing. Ivan Ferreira
14
Manipulación de archivos
con more y less? Presionando la tecla “/” (barra) e ingresando el texto a buscar.
Permisos de acceso a archivos y directorios 1. Cree la siguiente estructura de directorios con los permisos indicados: . |-- [drwxrwxr-x] docs | `-- [drwxr-x---] planillas | |-- [drwxrwxr-x] enero | |-- [drwxrwxr-x] febrero | `-- [drwxrwxr-x] marzo `-- [drwx------] reportes |-- [drwx------] culminados `-- [drwx------] en_proceso $ $ $ $ $ $ $ $ $ $ $ $ $
mkdir chmod mkdir chmod mkdir mkdir mkdir chmod mkdir chmod mkdir mkdir chmod
docs 775 docs docs/planillas 755 docs/planillas docs/planillas/enero docs/planillas/febrero docs/planillas/marzo 775 docs/planillas/* reportes 700 reportes reportes/culminados reportes/en_proceso 700 reportes/*
2. ¿Que permisos debería tener un archivo para permitir que el propietario pueda leer y escribir en el, el grupo leer y los otros ningún permiso? ¿Con qué comando puede establecer esos permisos? Los permisos deberían ser 640. Ejecute chmod 640 3. Que permisos debería tener un archivo para permitir al propietario leer, escribir y ejecutar un archivo, al grupo y los otros solamente ejecutar? ¿Con qué comando puede establecer esos permisos? Los permisos deberían ser 711. Ejecute chmod 711 4. Cual debería ser el valor del umask para que los directorios se creen con los siguientes permisos rwxrwxr-x?
15
Red Hat Certified Engineer
Manipulación de archivos
El umask debería ser 002 5. Cual debería ser el valor del umask para que los directorios se creen con los siguientes permisos rwxr-xr-x? El umask debería ser 022 6. Cual debería ser el valor del umask para que los directorios se creen con los siguientes permisos rwxr-x---? El umask debería ser 027 7. Cual debería ser el valor del umask para que los directorios se creen con los siguientes permisos rwx------? El umask debería ser 077 8. Cual deberia ser el valor del umask para que los archivos se creen con los siguientes permisos rw-rw-r--? El umask debería ser 002 9. Cual debería ser el valor del umask para que los archivos se creen con los siguientes permisos rw-r--r--? El umask deberia ser 022 10. Cual debería ser el valor del umask para que los archivos se creen con los siguientes permisos rw-------? El umask debería ser 077 11. Describa la función de los permisos SUID, SGID y Sticky con un ejemplo de cada uno. SUID sobre un archivo ejecutable permite que el programa se ejecute bajo los privilegios del usuario propietario. Por ejemplo, es posible crear un programa llamado startdb cuyo propietario sea el usuario oracle y el bit SUID activo, es decir, permisos 4755, cualquier usuario que ejecute el programa, lo ejecutara como si fuese el usuario oracle. El permiso SGID sobre un directorio permite que los archivos que se crean dentro, hereden el grupo propietario del directorio, en lugar de ser creados bajo el grupo primario del usuario creador. Esto permite a miembros del mismo grupo modificar archivos creados por otros usuarios del mismo grupo. Ejemplo, si el directorio /contab pertenece a root del grupo contab, y los permisos son 775: Ing. Ivan Ferreira
16
Manipulación de archivos ●
Si juan del grupo juan, crea un archivo llamado con1.txt, el archivo se creara con propietario juan, grupo propietario juan y permisos 664. Esto no permitiría a otros miembros del grupo editar el archivo.
Sin embargo, si el directorio /contab pertenece a root del grupo contab, y los permisos son 2775, es decir SGID activo: ●
Si juan del grupo juan, crea un archivo llamado con1.txt, el archivo se creara con propietario juan, grupo propietario contab y permisos 664. Esto si permitiría a otros miembros del grupo editar el archivo.
El permiso Sticky debe ser activado en directorios que permiten la escritura a todos. Este permiso indica que un archivo puede ser borrado únicamente por el usuario root o el propietario del archivo. Ejemplo, el directorio /tmp tiene el permiso sticky activo, de lo contrario, cualquier usuario podría borrar archivos que no le pertenecen, ya que el permiso de escritura sobre el directorio para todos lo permite. 12. Que permisos deben ser establecidos a directorios que permiten la escritura a todos? Principalmente debería establecerse el permiso Sticky con el comando chmod 1777 .
17
Red Hat Certified Engineer
3 El sistema de archivos
El sistema de archivos
Sistema de archivos 1. Explique con sus propias palabras el concepto de sistema de archivos. Refiérase a http://es.wikipedia.org/wiki/Sistema_de_archivos
Enlaces duros 1. Ejecute las siguientes acciones y evalúe el resultado. Anote sus observaciones. Copie el archivo /etc/hosts a su directorio HOME. $ cd $ cp /etc/hosts .
2. Utilice el comando ls -lai para examinar el numero de inodo del archivo y el contador de enlaces. Anótelos. $ ls -lai hosts 14643 -rw-r--r-- 1 iferreira iferreira 1730 jun 12 15:48 hosts
Inodo 14643, contador de enlaces igual a 1. 3. Cree un enlace duro al archivo hosts de su home con el nombre hosts2. $ ln hosts hosts2
4. Utilice el comando ls -lai para examinar el numero de inodo de los archivos y el contador de enlaces. Anótelos y compárelos con la salida anterior. $ ls -lai hosts hosts2 14643 -rw-r--r-- 2 iferreira iferreira 1730 jun 12 15:48 hosts 14643 -rw-r--r-- 2 iferreira iferreira 1730 jun 12 15:48 hosts2
El número de inodo es el mismo, indicando que ambos nombres permiten el acceso al mismo conjunto de datos en disco. El contador de enlaces se ha incrementado en uno. 5. Verifique el propietario, permisos y tamaños de los archivos hosts y hosts2. Anótelos. $ ls -lai hosts hosts2 14643 -rw-r--r-- 2 iferreira iferreira 1730 jun 12 15:48 hosts 14643 -rw-r--r-- 2 iferreira iferreira 1730 jun 12 15:48 hosts2
Son exactamente iguales los atributos ya que apuntan al mismo inodo. El contador de enlaces se incremento en 1.
19
Red Hat Certified Engineer
El sistema de archivos
6. Cambie los permisos del archivo host2 a rw-r-----. $ chmod 640 hosts2
7. Verifique el propietario, permisos y tamaños de los archivos de hosts y hosts2. Anótelos y compárelos con la salida anterior. $ ls -lai hosts hosts2 14643 -rw-r----- 2 iferreira iferreira 1730 jun 12 15:48 hosts 14643 -rw-r----- 2 iferreira iferreira 1730 jun 12 15:48 hosts2
Los permisos fueron modificados y el cambio se refleja en ambos archivos. 8. Visualice el contenido de los archivos hosts y hosts2. $ cat hosts $ cat hosts2
9. Elimine el archivo hosts. $ rm hosts
10. Visualice el contenido del archivo hosts2. ¿El contenido puede ser visualizado? ¿Por que? $ cat hosts2
Si, el contenido puede ser visualizado, ya que al eliminar el archivo hosts, solo se ha eliminado un enlace, no el archivo en si. Es posible notar que el contador de enlaces esta nuevamente en 1.
Enlaces simbólicos 1. Ejecute las siguientes acciones y evalúe el resultado. Anote sus observaciones. Utilice el comando ls -lai para examinar el numero de inodo y el contador de enlaces del archivo hosts2. Anótelos. $ ls -lai hosts2 14643 -rw-r----- 1 iferreira iferreira 1730 jun 12 15:48 hosts2
Inodo 14643, contador de enlaces igual 1 2. Cree un enlace simbólico al archivo hosts2 con el nombre hosts. $ ln -s hosts2 hosts
3. Utilice el comando ls -lai para examinar el numero de inodo de los archivos y el contador de enlaces. Anótelos y compárelos con la salida anterior. Ing. Ivan Ferreira
20
El sistema de archivos $ ls -lai hosts hosts2 14815 lrwxrwxrwx 1 iferreira iferreira 6 jun 12 15:58 hosts -> hosts2 14643 -rw-r----- 1 iferreira iferreira 1730 jun 12 15:48 hosts2
El enlace simbólico hosts apunta al archivo hosts2, sin embargo, es un archivo totalmente diferente como lo indica el numero de inodo. 4. Verifique el propietario, permisos y tamaños de los archivos hosts y hosts2. Anótelos. $ ls -lai hosts hosts2 14815 lrwxrwxrwx 1 iferreira iferreira 6 jun 12 15:58 hosts -> hosts2 14643 -rw-r----- 1 iferreira iferreira 1730 jun 12 15:48 hosts2
Los permisos y el tamaño de los archivos son diferentes. 5. Cambie los permisos del archivo host2 a rw-rw-r--. $ chmod 664 hosts2
6. Verifique el propietario, permisos y tamaños de los archivos hosts y hosts2. Anótelos. $ ls -lai hosts hosts2 14815 lrwxrwxrwx 1 iferreira iferreira 6 jun 12 15:58 hosts -> hosts2 14643 -rw-rw-r-- 1 iferreira iferreira 1730 jun 12 15:48 hosts2
7. Cambie los permisos del archivo host a rw-------. $ chmod 664 hosts2
8. Verifique el propietario, permisos y tamaños de los archivos hosts y hosts2. Anótelos y compárelo con la salida anterior. $ ls -lai hosts hosts2 14815 lrwxrwxrwx 1 iferreira iferreira 6 jun 12 15:58 hosts -> hosts2 14643 -rw------- 1 iferreira iferreira 1730 jun 12 15:48 hosts2
Los permisos de un enlace simbólico no pueden ser cambiados, al ejecutar el comando chmod sobre un enlace, tiene efecto en el archivo al cual apunta. 9. Elimine el archivo hosts2 $ rm hosts2
10. Visualice el contenido del archivo hosts. ¿El contenido puede ser visualizado? ¿Por que? $ cat hosts cat: hosts: No existe el fichero o el directorio
21
Red Hat Certified Engineer
El sistema de archivos
El contenido no puede ser visualizado ya que el enlace apunta a un archivo no existente.
Búsqueda de archivos 1. Realice las siguientes búsquedas. Buscar archivos regulares del directorio /etc $ find /etc -type f -ls
2. Buscar archivos de tipo bloque del directorio /dev $ find /dev -type b -ls
3. Buscar archivos de tipo caracter del directorio /dev $ find /dev -type c -ls
4. Buscar archivos de tipo socket en el directorio /tmp $ find /tmp -type s -ls
5. Buscar directorios dentro de /etc cuyo nombre comience con "rc" $ find /etc -type d -name "rc*" -ls
6. Buscar archivos que fueron modificados hace 30 días o mas a partir del directorio actual. $ find . -type f -mtime +30 -ls
7. Buscar archivos que fueron modificados hace 30 días o menos a partir del directorio actual. $ find . -type f -mtime -30 -ls
8. Buscar archivos cuyo nombre termine en ".log" que fueron modificados hace 30 días o mas y moverlos al directorio /tmp/backup. $ find . -type f -name "*.log" -mtime +30 -exec mv {} /tmp/backup \;
9. Buscar archivos a partir del directorio actual cuyo nombre termine en ".log" que fueron modificados hace 30 días o mas y comprimirlos con el comando gzip. $ find . -type f -name "*.log" -mtime +30 -exec gzip {} \;
10. Buscar archivos cuyo tamaño sea mayor a 100 MB en el directorio /usr. $ find /usr -type f -size +100m -ls
Ing. Ivan Ferreira
22
El sistema de archivos
11. Buscar todos los archivos dentro del directorio /etc que contengan el texto localhost. $ find /etc -type f -exec grep -l localhost {} \;
Copias de seguridad 1. Realice una copia de seguridad de todo el directorio docs creado en su HOME. El nombre del archivo tar debe ser /tmp/.tar. Utilice las variables de entorno USER y HOME en el comando. $ tar cvf /tmp/$USER.tar $HOME
2. Verifique la copia de seguridad creada listando el contenido de la copia de seguridad realizada. $ tar tvf /tmp/$USER.tar
3. Elimine el archivo ene01.txt. $ rm docs/planillas/enero/ene01.txt
4. Restaure el archivo ene01.txt. $ cd / $ tar xvf /tmp/$USER.tar docs/planillas/enero/ene01.txt
5. Identifique el tamaño que ocupa todo su directorio HOME. Realice una copia de seguridad de su directorio home con el comando tar a un archivo dentro del directorio /tmp, verifique el tamaño del archivo tar creado y compárelos. $ $ $ $
cd du -sk . tar cvf /tmp/$USER.tar $HOME ls -la /tmp/$USER.tar
6. Elimine el tarfile creado y ejecute nuevamente una copia de seguridad con el comando tar comprimiendo los datos con gzip y verifique el tamaño del archivo tar creado. $ rm /tmp/$USER.tar $ tar zcvf /tmp/$USER.tgz $HOME $ ls -la /tmp/$USER.tgz
7. Elimine el archivo tar creado y ejecute nuevamente una copia de seguridad con el comando tar comprimiendo los datos con bzip2 y verifique el tamaño del archivo tar creado.
23
Red Hat Certified Engineer
El sistema de archivos $ rm /tmp/$USER.tgz $ tar jcvf /tmp/$USER.tz2 $HOME $ ls -la /tmp/$USER.tz2
8. Suponiendo que utiliza un dispositivo de cinta, investigue la forma de hacer más de un backup al mismo medio y la forma de restaurar un backup específico de este medio. El dispositivo de cinta en Linux permite el acceso a través de dos archivos especiales: ●
/dev/st0
●
/dev/nst0
Al utilizar /dev/st0, una vez finalizado el backup, la cinta es rebobinada. Si se lanzara otro backup al mismo medio, sera sobrescrito el anterior. Al utilizar /dev/nst0, una vez finalizado el backup, la cinta NO es rebobinada. Si se lanzara otro backup al mismo medio, sera anexado manteniendo el backup anterior. Para restaurar un backup especifico de un medio que contiene múltiples backups debemos utilizar el comando mt para posicionar la cinta. El comando: $ mt -f /dev/nst0 rewind
Retrocede la cinta El comando: $ mt -f /dev/nst0 fsf 1
Avanza la cinta una copia de seguridad, permitiendo restaurar la segunda existente en el medio, con el comando: $ tar xpvf /dev/nst0
9. ¿Existe algún beneficio en utilizar compresión por software, por ejemplo, utilizando las opciones -j o -z del comandor tar, cuando se realiza backup a un dispositivo de cinta? No, al contrario, tiene un impacto negativo debido a que la compresión de datos ya es realizado por el dispositivo de cinta, comprimirlo por software antes de enviar al dispositivo lo único que logra es hacer mas lento el proceso de backup y consumir mayor cantidad de CPU durante el proceso.
Ing. Ivan Ferreira
24
4 Redirecciones y tuberías
Redirecciones y tuberías
Redireccionando la entrada, salida y error estándar 1. Realice una copia de seguridad de todo el directorio docs creado en su HOME. El nombre del archivo tar debe ser /tmp/.tar. Utilice las variables USER y HOME en el comando. La salida de información direccionela a un archivo llamado /tmp/.log y la salida de error a un archivo llamado /tmp/.err. $ tar cvf /tmp/$USER.tar $HOME/docs > /tmp/$USER.log 2> /tmp/$USER.err
2. Utilice el comando mail para enviar el contenido del archivo /tmp/.err a usted mismo redireccionando la entrada estándar. $ mail -s "Errores de backup" $USER < /tmp/$USER.err
3. Busque con el comando find en el directorio /var todos los archivos que terminen en ".log". Los mensajes de error deben ser completamente ignorados redireccionando el error estándar a /dev/null. $ find /var -type f -name "*.log" 2> /dev/null
4. Busque con el comando find en el directorio /var todos los archivos cuyo propietario no sea root. Redireccione la salida estándar y el error estándar al mismo archivo. $ find /var -type f ! -user root -ls > find.log 2>&1
5. Identifique cuantos archivos de nombre README existen en el directorio /usr/share/doc utilizando los comandos find y wc. $ find /usr/share/doc -type f -name README | wc -l
6. Busque todos los archivos de tipo bloque del directorio /dev y a través de una tubería, visualice el resultado con el comando more. $ find /dev -type b -ls | more
7. Identifique el directorio que ocupa mas espacio en /usr/share/doc con el comando du y ordenelo por tamaño con el comando sort, mostrando los únicamente los 10 de mayor tamaño con el comando head. $ du -sk /usr/share/doc/* | sort -nrb | head
Ing. Ivan Ferreira
26
5 Filtros y procesamiento de cadenas
Filtros y procesamiento de cadenas
Filtros y procesamiento de cadenas El archivo /etc/passwd el un archivo el cual contiene la lista de usuarios del sistema. El archivo se compone de campos separados por dos puntos ":". El orden de los campos del archivo es el siguiente: ●
Nombre de usuario o login
●
Contraseña (obsoleto)
●
UID
●
GID
●
Descripcion (opcional) - Generalmente el nombre completo de la persona.
●
Directorio HOME
●
Shell
Utilice el siguiente archivo passwd de ejemplo. Puede crear un archivo con este contenido en su directorio home: root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin news:x:9:13:news:/etc/news: gnarwl:x:390:390:Email autoreply agent:/var/lib/gnarwl:/bin/false juan.perez:x:515:516::/home/juan.perez:/bin/bash ogomez:x:516:517::/home/ogomez:/bin/bash
NOTA: Todos estos ejercicios requieren que la expresión regular inicie con ^ y termine con $. 1. Utilizar el comando cut para obtener el nombre de todos los usuarios del sistema listados en el archivo passwd. $ cut -f 1 -d ":" passwd
2. Utilizar el comando cut para obtener el nombre de todos los usuarios, su UID y GID del sistema listados en el archivo passwd.
Ing. Ivan Ferreira
28
Filtros y procesamiento de cadenas $ cut -f 1,3,4 -d ":" passwd
3. Utilizar el comando cut para obtener el nombre de todos los usuarios, su UID y GID del sistema listados en el archivo passwd y mostrar la salida separada por un tabulador utilizando el comando tr. $ cut -f 1,3,4 -d ":" passwd | tr “:” “\t”
4. Utilizar el comando egrep con expresiones regulares para obtener el nombre de todos los usuarios del sistema listados en el archivo passwd cuyo login tenga 4 caracteres. $ egrep "^....:x.*$" passwd
Consideramos que el primer campo es el nombre. Al inicio de la línea (^) deben existir 4 caracteres cualquiera (.) luego encontramos el separador de campo “:” seguido de una “x” y luego cualquier texto (.*) hasta el fin de línea ($). 5. Utilizar el comando egrep con expresiones regulares para obtener el nombre de todos los usuarios del sistema listados en el archivo passwd cuyo login tenga 4 caracteres o menos. $ egrep "^..?.?.?:x.*$" passwd
Consideramos que el primer campo es el nombre. Al inicio de la línea (^) debe existir 1 caracter cualquiera (.), luego 3 caracteres cualquiera cero o una vez (.?) luego encontramos el separador de campo “:” seguido de una “x” y luego cualquier texto (.*) hasta el fin de línea ($). 6. Utilizar el comando egrep con expresiones regulares para obtener el nombre de todos los usuarios del sistema listados en el archivo passwd cuyo nombre de login comience con a,c,r,p. $ egrep "^[acrp].*$ passwd
Consideramos que el primer campo es el nombre. Al inicio de la línea (^) debemos encontrar los caracteres a, c, r o p ([acrp]) y luego cualquier texto (.*) hasta el fin de línea ($). 7. Utilizar el comando egrep con expresiones regulares para obtener el nombre de todos los usuarios del sistema listados en el archivo passwd cuyo nombre de login comience con a,c,r,p y su shell sea bash. $ egrep "^[acrp].*/bin/bash$ passwd
Consideramos que el primer campo es el nombre. Al inicio de la línea (^) debemos encontrar los caracteres a, c, r o p ([acrp]) y luego cualquier texto (.*), como el ultimo campo es el nombre del shell, debemos encontrar /bin/bash al final de
29
Red Hat Certified Engineer
Filtros y procesamiento de cadenas
línea ($). 8. Utilizar el comando egrep con expresiones regulares para obtener el nombre de todos los usuarios del sistema listados en el archivo passwd cuyo nombre de login comience con a,c,r,p, su shell sea bash y su directorio home se encuentre por debajo de /home. $ egrep "^[acrp].*x:[0-9]+:[0-9]+:.*:/home/.+:/bin/bash$ passwd
Consideramos que el primer campo es el nombre. Al inicio de la línea (^) debemos encontrar los caracteres a, c, r o p ([acrp]) y luego cualquier texto (.*) hasta el segundo campo que es una “x”, luego encontramos el separador de campo “:”, luego el UID el cual es un valor numérico “([0-9])” que debe repetirse una o mas veces (+), seguido del separador de campos “:”, seguido del GID el cual es un valor numérico “([0-9])” que debe repetirse una o mas veces (+), seguido del separador de campos “:”, una descripción la cual es opcional por tanto podría existir o no cualquier texto (.*), seguido del separador de campos “:”, hasta el campo del directorio home el cual debe comenzar con /home/ y luego cualquier carácter (.) al menos una vez (+) para representar un directorio por debajo de /home, finalmente el ultimo campo es el nombre del shell, por tanto debemos encontrar /bin/bash al final de línea ($). 9. Utilizar una combinación del comando egrep con expresiones regulares y cut para obtener el nombre de todos los usuarios del sistema listados en el archivo passwd cuyo UID sea menor a 20. $ egrep "^.*x:1?[0-9]:.*$" passwd | cut -f 1 -d ":"
Consideramos que el primer campo es el nombre. Al inicio de la línea (^) debemos encontrar cualquier texto (.*) hasta el segundo campo que es una “x”, luego encontramos el separador de campo “:”, luego el UID el cual debe contener un número 1 cero o una vez (?), no no aparece el número 1 tenemos UID < 10, si aparece, tenemos UID > 10, luego debe aparecer un número del 0 al 9 ([0-9]), luego el separador de campo “:” y finalmente cualquier texto (.*) hasta el final de línea ($). 10. Utilizar una combinación del comando egrep con expresiones regulares y cut para obtener el nombre de todos los usuarios del sistema listados en el archivo passwd cuyo nombre de login contenga un punto, por ejemplo juan.perez. $ egrep "^.+\..+x:.*$" passwd | cut -f 1 -d ":"
Consideramos que el primer campo es el nombre. Al inicio de la línea (^) debemos encontrar cualquier carácter (.) una o mas veces (+) seguido de un punto el cual se encuentra “escapado” para eliminar su significado especial dentro de la expresión regular (\.), seguido de cualquier carácter (.) una o mas veces (+) hasta el segundo campo el cual es una “x”, luego el separador de campo “:” y finalmente cualquier Ing. Ivan Ferreira
30
Filtros y procesamiento de cadenas
texto (.*) hasta el final de línea ($). 11. Utilizar una combinacion de los comandos, ls, grep y alias, para crear un alias llamado lld, el cual listara en formato largo unicamente los directorios del directorio actual. $ alias lld="ls -la | grep ^d"
12. Utilizar una combinacion de los comandos, ls, grep, cut y alias, para crear un alias llamado lsd, el cual listara en formto corto (solo el nombre) únicamente los directorios del directorio actual. $ alias lsd='ls -la | grep ^d | tr -s " " | cut -f 9 -d " "'
13. Utilizar una combinación de los comandos head y tail para mostrar únicamente la quinta línea del archivo passwd $ head -5 passwd | tail -1
14. Utilizar el comando egrep con expresiones regulares para obtener la lista de todos los usuarios del sistema listados en el archivo passwd cuyo UID sea mayor a 500. $ egrep "^.*x:([1-9]+[0-9]+|[5-9]+)[0-9]+[0-9]+:.*$" passwd
Esta expresión regular relativamente compleja busca números que van desde 500999 o 1000 hasta 9999, siendo: ●
[5-9]+[0-9]+[0-9]+ La busqueda de números entre 500 y 999
●
[1-9]+[0-9]+[0-9]+[0-9]+ La búsqueda de números entre 1000 y 9999
●
([1-9]+[0-9]+|[5-9]+) La búsqueda de números que sean mil y algo ([1-9]+[09]+) “o” (|) quinientos y algo ([5-9]+). Se los indica entre paréntesis separado por “pipe” para indicar uno u otro.
●
([1-9]+[0-9]+|[5-9]+)[0-9]+[0-9]+ Representaría los números que sean mil para arriba o quinientos para arriba.
El editor de flujo sed 1. Utilizando el archivo passwd del ejemplo de los ejercicios de "Filtros y procesamiento de cadenas", realice las siguientes tareas: Modifique todas las líneas que contienen /bin/false como shell por /bin/nologin. $ sed 's/\/bin\/false/\/bin\/nologin/' passwd
31
Red Hat Certified Engineer
Filtros y procesamiento de cadenas
2. Modifique el shell de todos los usuarios cuyo nombre de login contenga un punto por /bin/nologin. $ sed '/^.*\..*x:.*$/ s/\/bin\/bash/\/bin\/nologin/' passwd
3. Muestre la línea 5 del archivo passwd. $ sed -n '5 p' passwd
4. Muestre desde la línea 5 a la 10 del archivo passwd. $ sed -n '5,10 p' passwd
5. Muestre solamente las líneas que corresponde con usuarios que no tienen como shell /bin/nologin. $ sed -n '/^.*nologin$/! p' passwd
Procesando texto con awk 1. Utilizando el archivo passwd del ejemplo de los ejercicios de "Filtros y procesamiento de cadenas", realice las siguientes tareas: Muestre el nombre de login, el UID y el GID de cada usuario. $ awk -F ":" '{ print $1,$3,$4 }' passwd
2. Muestre el nombre de login, el UID y el GID de cada usuario, separado por un tabulador. $ awk -F ":" -v OFS="\t" '{ print $1,$3,$4 }' passwd
3. Muestre el nombre de login, el UID y el GID de cada usuario con el siguiente formato: "Nombre de usuario: UID: GID: " $ awk -F ":" '{ print "Nombre de usuario:",$1,"UID:",$3,"GID:",$4 }' passwd
4. Muestre la lista de usuarios cuyo UID es mayor a 100. $ awk -F ":" '$3 > 100 {print $1}'
passwd
5. Muestre la lista de usuarios cuyo GID es 0. $ awk -F ":" '$4 == 0 {print $1}' passwd
6. Muestre la lista de usuarios que no tienen un shell asignado. $ awk -F ":" '/^.*:$/ { print $1 }' passwd
Ing. Ivan Ferreira
32
Filtros y procesamiento de cadenas
7. Muestre la cantidad total de usuarios del archivo. $ awk -F ":" 'END { print NR }' passwd
8. Muestre el nombre de login, el UID, el GID de cada usuario que tiene como shell /sbin/nologin. $ awk -F ":" '/^.*\/sbin\/nologin$/ { print $1,$3,$4}' passwd
9. Muestre el nombre de login, el UID, el GID de cada usuario cuyo nombre de login contiene un punto. $ awk -F ":" '/^.+\..+$/ { print $1 }' passwd
33
Red Hat Certified Engineer
6 Scripts del shell
Scripts del shell
Scripts del shell Es recomendado que realice los laboratorios de esta sección utilizando como referencia la guía LE-101 - Linux Enterprise Operacional. En esta sección, creará un script para realizar copias de seguridad. Iniciará con un script simple el cual irá modificando hasta obtener el resultado deseado. Inicialmente, cree un script con el comando vi que muestre un menú al usuario llamado script1.sh con el siguiente contenido: #!/bin/bash # Seccion menu principal echo echo echo echo echo echo echo echo echo
"Menu princpal" "=============" "1"2"3“0-
Crear backup" Listar backup" Restaurar backup" Salir”
-n "Seleccione una opcion: "
Guarde el archivo. Para poder ejecutar el script, debe establecer los permisos correcto, para ello ejecute el comando: $ chmod 755 script1.sh
Ejecute el script con el comando: $ ./script1.sh
El menú debe ser visualizado. Ahora, agregará al script la sección que permite al usuario seleccionar una opción del menú, con el comando interno read. Copie el archivo script1.sh a script2.sh $ cp script1.sh script2.sh
Edite el archivo script2.sh como sigue: #!/bin/bash # Seccion menu principal echo "Menu princpal"
35
Red Hat Certified Engineer
Scripts del shell echo "=============" echo echo "1- Crear backup" echo "2- Listar backup" echo "3- Restaurar backup" echo “0- Salir” echo # El usuario ingresa una opcion echo -n "Seleccione una opcion: " read OPCION # Mostramos al usuario que opcion ha seleccionado echo "Usted selecciono la opcion $OPCION"
Guarde el archivo y ejecútelo: $ ./script2.sh
En este punto, usted debe poder seleccionar una opción del menú y el script mostrará la opción seleccionada. Copie el script2.sh a script3.sh: $ cp script2.sh script3.sh
Edite el archivo script3.sh y agregue la sección que permitirá la ejecución del comando apropiado según la opción seleccionada por el usuario. Para verificar que acción debe ejecutarse según la opción ingresada por el usuario, utilizará la sentencia case: #!/bin/bash # Seccion menu principal echo echo echo echo echo echo echo echo
"Menu princpal" "=============" "1"2"3"0-
Crear backup" Listar backup" Restaurar backup" Salir"
# El usuario ingresa una opcion echo -n "Seleccione una opcion: " read OPCION # Se comprueba que opcion ha ingresado el usuario y se ejecuta la accion case $OPCION in 0) echo "Programa finalizado"
Ing. Ivan Ferreira
36
Scripts del shell exit 0 ;; 1) echo "Creando backup de $HOME para $USER" tar cf /tmp/$USER.tar $HOME echo "Backup Finalizado" ;; 2) echo "Listando backup" tar tf /tmp/$USER.tar ;; 3) echo "Recuperando backup" cd /tmp tar xvf /tmp/$USER.tar ;; *) echo "Opcion invalida" ;; esac
Ejecute el script con el comando: $ ./script3.sh
En este punto, debe tener un script de backup básico funcional. Si el usuario ingresa una opción inválida, el programa muestra el mensaje apropiado y finaliza. Ahora modifique el script para que se muestre el menú continuamente hasta que el usuario ingrese una opción válida. Para ello utilizará una sentencia while. Copie el script script3.sh a script4.sh y modifiquelo como sigue: #!/bin/bash # Seccion menu principal echo echo echo echo echo echo echo echo
"Menu princpal" "=============" "1"2"3"0-
Crear backup" Listar backup" Restaurar backup" Salir"
# Definimos una variable para verificar si ha ingresado
37
Red Hat Certified Engineer
Scripts del shell # una opcion valida. VALIDO=0 # Mientras VALIDO=0 la opcion seleccionada es invalida # y se volvera a solicitar que ingrese la opcion while [ $VALIDO -eq 0 ] do # El usuario ingresa una opcion echo -n "Seleccione una opcion: " read OPCION
# Se comprueba que opcion ha ingresado el usuario y se ejecuta la accion # Si la opcion seleccionada esta entre los valores correctos, se # establece VALIDO=1 case $OPCION in 0) VALIDO=1 echo "Programa finalizado" exit 0 ;; 1) VALIDO=1 echo "Creando backup de $HOME para $USER" tar cf /tmp/$USER.tar $HOME/oper_ago echo "Backup Finalizado" ;; 2) VALIDO=1 echo "Listando backup" tar tf /tmp/$USER.tar ;; 3) VALIDO=1 echo "Recuperando backup" cd /tmp tar xvf /tmp/$USER.tar ;; *) VALIDO=0 echo "Opcion invalida" ;; esac done
Ejecute el script script4.sh: $ ./script4.sh
Ing. Ivan Ferreira
38
Scripts del shell
En este punto, si ingresa una opción incorrecta, debe volver a solicitar que ingrese una opción válida. Hasta ahora, los scripts han sido interactivos. El problema es si de es deseado automatizar la ejecución de un backup, el script no debe ser interactivo. Para lograr esto, creamos scripts que utilizan parámetros posicionales. En el siguiente script, en lugar de presentar un menú, indicaremos en el primer argumento si se desea crear, listar o extraer un backup utilizando la variable $1. Edite un archivo llamado script5.sh con el siguiente contenido: #!/bin/bash # Verificamos si el usuario ha ingresado al menos un argumento # Si el numero de argumentos pasado ($#) es igual a cero, # no se ha ingresado un argumento, por tanto mostramos un mensaje # de sintaxis if [ $# -eq 0 ] then echo "Uso: $0 -c|-t|-l|-x-r" exit 1 fi # Definimos variables para mayor conveniencia y simplicidad de los comandos LOGFILE=/tmp/$USER.log ERRFILE=/tmp/$USER.err TARFILE=/tmp/$USER.tar # Verificamos la opcion ingresada por el usuario ($1 = primer argumento) # El argumento -c crea un backup, -t o -l listan el backup y -x o -r # restauran el backup dentro del directorio /tmp. Cualquier otra opcion es # invalida case $1 in -c) echo "Creando backup" tar cvf $TARFILE $HOME > $LOGFILE 2> $ERRFILE echo "Backup finalizado" ;; -t|-l) echo "Listando backup" tar tvf $TARFILE ;; -x|-r) echo "Recuperando backup" cd /tmp tar xvf $TARFILE ;; *)
39
Red Hat Certified Engineer
Scripts del shell echo "Opcion invalida" ;; esac
Establezca los permisos apropiados y ejecute el script sin argumentos, luego con las opciones -c y -l $ $ $ $
chmod 755 script5.sh ./script5.sh ./script5.sh -c ./script5.sh -l
Copie el archivo script5.sh a script6.sh. Modifique el script para identificar si el backup fue creado correctamente. De haber existido algun error, debe enviarse por correo a usted mismo el archivo de registro de errores: #!/bin/bash # Verificamos si el usuario ha ingresado al menos un argumento # Si el numero de argumentos pasado ($#) es igual a cero, # no se ha ingresado un argumento, por tanto mostramos un mensaje # de sintaxis if [ $# -eq 0 ] then echo "Uso: $0 -c|-t|-l|-x-r" exit 1 fi # Definimos variables para mayor conveniencia y simplicidad de los comandos LOGFILE=/tmp/$USER.log ERRFILE=/tmp/$USER.err TARFILE=/tmp/$USER.tar # Verificamos la opcion ingresada por el usuario ($1 = primer argumento) # El argumento -c crea un backup, -t o -l listan el backup y -x o -r # restauran el backup dentro del directorio /tmp. Cualquier otra opcion es # invalida case $1 in -c) echo "Creando backup" tar cvf $TARFILE $HOME > $LOGFILE 2> $ERRFILE # Verificamos si el valor de retorno ($?) del comando anterior (el tar) # es diferente de 0. De ser asi, quiere decir que el comando termino con error # y se envia un mail al usuario if [ $? -ne 0 ] then echo "Errores durante el backup. Consulte el archivo $ERRFILE" mail -s "Errores durante el backup" $USER < $ERRFILE else
Ing. Ivan Ferreira
40
Scripts del shell echo "Backup finalizado correctamente" fi ;; -t|-l) echo "Listando backup" tar tvf $TARFILE ;; -x|-r) echo "Recuperando backup" cd /tmp tar xvf $TARFILE ;; *) echo "Opcion invalida" ;; esac
1. Cree un script para identificar el nombre del último día del mes. #!/bin/bash # El comando muestra el calentario con cal, filtra las lineas vacias # con grep, muestra solo la ultima linea con tail y muestra la cantidad # de columnas. A partir del numero de columna se puede identificar el dia COLUMNA_ULT_DIA=`cal | grep -v "^$" | tail -1 | awk '{ print NF }'` # El comando muestra el calentario con cal, filtra las lineas vacias # con grep, muestra solo la ultima linea con tail y muestra el numero que # corresponde con el ultimo dia del mes ULT_DIA_NUMERO=`cal | grep -v "^$" | tail -1 | awk '{ print $NF }'` # Establecemos el nombre del dia segun la columna obtenida case $COLUMNA_ULT_DIA in 1) DIA=Domingo ;; 2) DIA=Lunes ;; 3) DIA=Martes ;; 4) DIA=Miercoles ;; 5) DIA=Jueves ;; 6)
41
Red Hat Certified Engineer
Scripts del shell DIA=Viernes ;; 7) DIA=Sabado ;; esac echo "El ultimo dia del mes es $DIA $ULT_DIA_NUMERO"
2. Cree un script para verificar si cualquiera de los sistemas de archivos reportados por el comando df -t ext3 supera 90% de su capacidad utilizada, de ser así, debe enviar una alerta al administrador del equipo por medio del comando mail, con la salida del comando df como cuerpo del mensaje. #!/bin/bash ARCHIVO_TEMP=/tmp/df.log df -h -P -t ext3 > /tmp/df.log # # # # # #
Con el comando cat visualizamos el resultado del comando df almacenado en el archivo temporal. Con el comando tr eliminamos el signo de %. Con el comando grep evitamos que se muestre la cabecera del comando df. Con el comando awk, se muestra la linea cuyo %Uso es mayor a 90 y con el comando wc se cuenta cuantas lineas ha retornado el comando. El valor se almacena en la variable ALERTA
ALERTA=$(cat /tmp/df.log | tr -d "%" | grep -v Uso | awk '$5 > 90 { print $0 }' | wc -l) if [ $ALERTA -ne 0 ] then echo "ALERTA! Uno de los sistemas de archivos supera el 90% de utilizacion" mail -s "ALERTA de espacio libre" $USER < /tmp/df.log fi
3. Cree un script llamado backup.sh que reciba como opciones: ●
-c Para crear un backup
●
-l o -t Para listar un backup
●
-e o -x Para extraer un backup
Cualquier otra opción o la omisión de la opción, debe indicar error de sintaxis. El script debe recibir como segundo argumento el directorio que se desea hacer backup, si no se especifica uno, debe hacer backup del directorio HOME. El archivo resultante debe llamarse /tmp/-.tar. Siendo el Ing. Ivan Ferreira
42
Scripts del shell
nombre de usuario que ejecuto el script y la fecha en formato mm-ddaaaa. Asegúrese de mantener un log de la ejecución del backup.
43
Red Hat Certified Engineer
7 Impresión y comunicación
Impresión y comunicación
Impresión 1. Utilice el comando pr para formatear y mostrar las 2 primeras paginas del archivo /etc/samba/smb.conf, enviando la salida al comando lpr, imprimiendo 2 copias. $ pr +1:2 /etc/samba/smb.conf | lpr -# 2
2. Verifique con el comando lpq si la impresora hplj2 tiene trabajos pendientes. $ lpq -P hpjl2
3. Busque todos los archivos regulares que no tienen un propietario y envie el resultado a la impresora hplj3. $ find / -nouser | lpr -P hplj3
4. Modifique su archivo .bash_profile con el editor vi, para establecer como impresora predeterminada la impresora llamada hplj. $ vi .bash_profile
Agregar: export PRINTER=hplj
Grabar y salir. 5. Cancele el trabajo numero 50 de la impresora hplj. $ lprm -P hplj 50
Comunicación 1. Envíese a usted mismo una copia del archivo /etc/hosts como cuerpo de mensaje utilizando el comando mail, con el asunto "archivo host". $ mail -s "archivo host" $USER < /etc/hosts
2. Una vez ingresado el comando mail, identifique las ordenes requeridas para:
45
●
Visualizar el mensaje numero 10
●
Borrar los mensajes del 1 al 20
●
Borrar todos los mensajes
●
Listar nuevamente los mensajes recibidos
Red Hat Certified Engineer
Impresión y comunicación
Deberá ejecutar: ●
10 [ENTER]
●
1-20 d [ENTER]
●
* d [ENTER]
●
h [ENTER]
Ing. Ivan Ferreira
46
8 Control de procesos y herramientas del sistema
Control de procesos y herramientas del sistema
Control de procesos 1. En una terminal, identifique el tty asociado. $ tty
2. Abra una nueva terminal, identifique el tty asociado. $ tty
3. En la primera terminal, ejecute el comando yes. $ yes
4. En la segunda terminal, visualice la lista de procesos e identifique: ●
Que porcentaje de cpu esta consumiendo el proceso "yes".
●
A que hora fue lanzado el proceso.
●
Desde que tty fue lanzado el proceso.
●
Cual es su estado actual.
$ ps auxw | more ●
Visualizar columna %CPU
●
Visualizar columna START
●
Visualizar columna TTY
●
Visualizar columna STAT
5. En la primera terminal, detenga el proceso utilizando la combinación de teclas CTRL+Z. Que se observa en la terminal? [1]+ Stopped yes > /dev/null
6. En la segunda terminal, visualice la lista de procesos e identifique: ●
Que porcentaje de cpu esta consumiendo el proceso "yes".
●
Cual es su estado actual.
$ ps auxw | more ●
Visualizar columna %CPU
●
Visualizar columna STAT
Ing. Ivan Ferreira
48
Control de procesos y herramientas del sistema
7. En la primera terminal, envíe el proceso a segundo plano. $ bg
8. En la segunda terminal, identifique el proceso y envíe con el comando kill la señal SIGTERM. $ ps auxw | grep yes
Identificar el PID y ejecutar: $ kill
9. En la primera terminal, ejecute el comando yes, redireccionando la salida estándar y el error estandar a /dev/null, y envíelo a segundo plano directamente. $ yes > /dev/null &
10. En la segunda terminal, envíe la señal SIGKILL al proceso yes con el comando killall. $ killall -9 yes
11. En la primera terminal, ejecute el comando yes, redireccionando la salida estándar y el error estándar a /dev/null, y envíelo a segundo plano directamente. $ yes > /dev/null 2>&1 &
12. Vuelva a poner el proceso en primer plano y cancele el comando yes $ fg
Presionar CTRL+C 13. En la primera terminal, con el comando find, busque todos los archivos de tipo bloque en el directorio /dev, envíe el resultado al archivo /tmp/find.out, los errores deben ser enviados a /dev/null. Envíe la búsqueda a segundo plano. $ find /dev -type b -ls > /tmp/find.out 2> /dev/null &
14. Verifique los trabajos ejecutándose en segundo plano con el comando jobs. $ jobs
15. Envíe la señal SIGKILL al proceso "yes" utilizando su numero de job. $ kill %1
16. Utilice el comando time para identificar cuanto tiempo demora el comando:
49
Red Hat Certified Engineer
Control de procesos y herramientas del sistema
find /etc -name host $ time /etc/ -name hosts
17. Utilizando el comando "w", identifique usuarios que han estado inactivos mas de una hora. $ w
Observar la columna IDLE.
Herramientas del sistema 1. Agende en cron una tarea que ejecute su script de backup diariamente a las 19:00 Hs. $ crontab -e
Agregar: 0 19 * * * $HOME/backup.sh
Guardar y salir. 2. Agende en cron una tarea que se ejecute todos los domingos a las 01:00 y busque todos los archivos que pertenecen a usted en el directorio /tmp y los borre. $ crontab -e
Agregar: 0 1 * * 0 /bin/find /tmp -user $LOGNAME -exec rm {} \;
Guardar y salir. 3. Agende en cron una tarea que ejecute el script /usr/local/bin/reporte.sh el 27 de cada mes. $ crontab -e
Agregar: 1 0 27 * * /usr/local/bin/reporte.sh
Guardar y salir. 4. Agende en cron una tarea que se ejecute los lunes, miercoles y viernes, enviando por mail un reporte de los archivos con tamaño mayor a 50 MB encontrados en el directorio /tmp. $ crontab -e
Ing. Ivan Ferreira
50
Control de procesos y herramientas del sistema
Agregar: 1 0 * * 1,3,5 /bin/find /tmp -size +50m -ls | /bin/mail -s "Archivos grandes" $LOGNAME
Guardar y salir 5. ¿Con que frecuencia se ejecutaria la siguiente tarea? */5 * * * * /usr/local/sbin/check_database.sh Cada cinco minutos. Esta sintaxis es especifica de Linux. 6. Salve una copia de todas las entradas en cron al archivo cron.bak $ crontab -l > cron.bak
7. Elimine todas las entradas agendadas en cron $ crontab -r
8. Recupere las entradas agendadas a partir del archivo cron.bak $ crontab cron.bak
9. Cree un script dentro de su directorio ~/bin para borrar todos los archivos de nombre *.txt mas viejos a 30 dias que se encuentran en su HOME con el nombre dirclean.sh. Con el comando at, ejecute el script dirclean.sh, el día domingo a las 18:00 Horas. $ vi $HOME/bin/dirclean.sh
Agregar: find $HOME -type f -name "*.txt" -mtime +30 -exec rm {} \;
Guardar y salir. $ at 18:00 sunday $HOME/bin/dirclean.sh
Presionar CTRL+D.
51
Red Hat Certified Engineer
View more...
Comments