LE101-Laboratorios

April 5, 2017 | Author: hgrg91 | Category: N/A
Share Embed Donate


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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF