Está en la página 1de 146

LE-101 - Linux Enterprise Operacional

Tabla de contenido ndice de contenido


Introduccin al sistema operativo LINUX...............................................................................7 El sistema operativo Linux......................................................................................................9 Usuarios y grupos.................................................................................................................11 El usuario root.......................................................................................................................12 Organizacin del rbol de archivos ....................................................................................12 El directorio raz: / ................................................................................................................13 Introduccin a la lnea de comandos....................................................................................14 Ejecucin de comandos y opciones.....................................................................................14 Obtener ayuda......................................................................................................................15 El comando info....................................................................................................................16 Fecha, hora, calendario........................................................................................................16 Manipulacin de contraseas...............................................................................................18 Utilizacin de consolas virtuales...........................................................................................18 Otros comandos bsicos tiles.............................................................................................18 Manipulacin de archivos......................................................................................................20 Directorio actual de trabajo...................................................................................................22 Nombres de archivos............................................................................................................22 Rutas absolutas y relativas...................................................................................................22 El directorio HOME...............................................................................................................23 Cambiando directorios..........................................................................................................23 Listar el contenido de directorios..........................................................................................24 Comodines de la lnea de comandos...................................................................................25 Comprobando espacio disponible........................................................................................26 Crear y borrar archivos y directorios....................................................................................28 Borrar archivos y directorios.................................................................................................29 Mover o renombrar archivos.................................................................................................29 Copiando archivos y directorios...........................................................................................30 Determinando el tipo de un archivo......................................................................................31 Visualizar archivos de texto..................................................................................................32

Usuarios y grupos..................................................................................................................34 Usuario y grupos, concepto..................................................................................................36 El usuario root y otros usuarios del sistema........................................................................ 36 Modelo de seguridad de Linux.............................................................................................36 Comandos para obtener informacin de usuarios...............................................................37 Cambiando la identidad del usuario.....................................................................................37 Permisos de acceso a archivos y directorios......................................................................39 Seguridad de archivos en Linux...........................................................................................41 Tipos de permisos de archivos.............................................................................................41 Examinando los permisos de archivos y directorios............................................................41 Cambiando permisos de archivos........................................................................................42 Permisos especiales.............................................................................................................44 Permisos por defecto de los archivos..................................................................................46 El sistema de archivos...........................................................................................................48 Sistemas de archivos ext2/ext3............................................................................................50 Enlaces o vnculos simblicos (blandos) y duros.................................................................50 Los enlaces o vnculos.........................................................................................................51 Los vnculos simblicos y la limitacin de los vnculos duros..............................................52 Buscando y procesando archivos.........................................................................................53 bzip2 y gzip: comandos de compresin de datos ...............................................................56 El comando zip.....................................................................................................................57 Copias de seguridad con el comando tar.............................................................................57 Nombres de archivos comprimidos comunes y programas asociados................................58 El editor vi................................................................................................................................60 Ejecutar vi ............................................................................................................................62 Comandos de movimiento del cursor ..................................................................................62 Borrar texto ..........................................................................................................................63 Cambiar texto........................................................................................................................ 3 6 Deshaciendo y rehaciendo cambios ...................................................................................63 Grabando y saliendo.............................................................................................................64 Cortando, copiando y pegando............................................................................................64 Otras operaciones tiles.......................................................................................................65 Buscando, reemplazando y usando de expresiones regulares...........................................65

Bsqueda y sustituciones.....................................................................................................65 El intrprete de comandos BASH..........................................................................................67 GNU Bourne-Again Shell y las variables de en .................................................................. 69 Volviendo a llamar a comandos...........................................................................................70 Expansin de la linea de comandos.....................................................................................71 Valores de retorno de los comandos....................................................................................72 Sobrenombres......................................................................................................................72 Scripts de inicializacin y finalizacin...................................................................................72 Historial.................................................................................................................................74 Bsqueda de comandos previamente ejecutados...............................................................74 Substitucin de comandos...................................................................................................74 Redirecciones y tuberas.......................................................................................................76 Descriptores de archivos, entrada, salida y error estndar................................................. 78 Redireccionando la entrada y la salida................................................................................78 Redireccionando el error estndar.......................................................................................79 Sobrescritura y agregado de las redirecciones....................................................................80 Redireccionando la salida estndar y el error estndar.......................................................80 Tuberas................................................................................................................................80 Filtros y procesamiento de cadenas.....................................................................................82 Concepto de filtro ................................................................................................................. 4 8 Traduccin de caracteres ...................................................................................................84 Paginador de la salida por impresora...................................................................................85 Mostradores de ficheros por porciones: tail y head ............................................................86 El comando de ordenacin...................................................................................................87 Supresin de lneas repetidas .............................................................................................88 El comando de seleccin de campos del fichero.................................................................88 El comando de fusin de campos de diferentes ficheros....................................................89 Expresiones regulares...........................................................................................................91 Expresiones regulares..........................................................................................................93 Correspondencia de principio y fin de lnea.........................................................................93 Correspondecia con cualquier caracter................................................................................93 Conjuntos de caracteres.......................................................................................................94 Correspondencia repetida de patrones................................................................................94

Anulacin del significado especial de un caracter...............................................................95 Grupos de caracteres...........................................................................................................95 Bsqueda de patrones dentro de archivos.......................................................................... 96 Buscando archivos segn su contenido...............................................................................97 Editores fuera de lnea.........................................................................................................97 Editor de flujo sed.................................................................................................................98 El awk.................................................................................................................................. 00 1 Variables del awk................................................................................................................101 Programacin en awk.........................................................................................................102 Scripts del shell....................................................................................................................104 Conceptos bsicos de scripts del shell..............................................................................106 Los caracteres especiales ms comunes..........................................................................106 read.....................................................................................................................................107 Parmetros posicionales ...................................................................................................107 Tests de ficheros................................................................................................................108 Tests de comparacin de enteros......................................................................................108 Tests de comparacin de cadenas....................................................................................109 Condicionales.....................................................................................................................109 Bucles.................................................................................................................................111 Bucles for............................................................................................................................111 Bucle while..........................................................................................................................112 Case.................................................................................................................................... 13 1 Scripts de ejemplo..............................................................................................................114 Impresin y comunicacin...................................................................................................116 Imprimir bajo Linux.............................................................................................................118 Viendo la cola de impresin...............................................................................................119 Cancelando un trabajo de impresin..................................................................................119 La variable de entorno PRINTER ......................................................................................119 Enviar correo electrnico....................................................................................................120 Leer el correo......................................................................................................................120 Redireccin de correo.........................................................................................................121 Control de procesos y herramientas del sistema............................................................. 122 El rbol de procesos...........................................................................................................124

Las seales.........................................................................................................................125 kill, killall..............................................................................................................................125 Usando el control de trabajos.............................................................................................126 Agendando la ejecucin peridica de procesos................................................................ 127 Agendando procesos para su ejecucin ...........................................................................128 Nociones bsicas de red......................................................................................................130 Introduccin a las redes IP.................................................................................................132 El comando ping.................................................................................................................132 Obteniendo informacin sobre rutas e interfaces..............................................................133 Informacin sobre rutas......................................................................................................134 Listando las rutas a un host particular................................................................................135 Traduccin entre nombres y direcciones IP.......................................................................135 Listando los registros de un DNS.......................................................................................136 Transfiriendo archivos a travs de la red...........................................................................138 Verificando el estado de los puertos de red.......................................................................141 Shell Seguro (ssh)..............................................................................................................142 Usando el comando scp.....................................................................................................143 Uso del comando sftp.........................................................................................................144 Generar pares de claves....................................................................................................144 Generacin de un par de claves DSA para la versin 2....................................................144

1 Introduccin al sistema operativo LINUX

Introduccin al sistema operativo LINUX

Acerca de esta unidad


En esta unidad se cubren los siguientes tpicos:

El sistema operativo Linux Interfaz del usuario con el sistema operativo Usuarios e inicios de sesin locales Exploracin del sistema de archivos Linea de comandos Ejecucin de comandos y opciones Ayuda Fecha, hora, calendario Manipulacin de contraseas Utilizacin de consolas virtuales

Ing. Ivan Ferreira

Introduccin al sistema operativo LINUX

Introduccin al sistema operativo Linux


El sistema operativo Linux LINUX es un sistema operativo, compatible Unix. Dos caractersticas muy peculiares lo diferencian del resto de los sistemas que podemos encontrar en el mercado, la primera, es que es libre, esto significa que no tenemos que pagar ningn tipo de licencia a ninguna casa desarrolladora de software por el uso del mismo, la segunda, es que el sistema viene acompaado del cdigo fuente. El sistema lo forman el ncleo del sistema (kernel) mas un gran numero de programas / libreras que hacen posible su utilizacin. LINUX se distribuye bajo la GNU Public License: Ingls , por lo tanto, el cdigo fuente tiene que estar siempre accesible. El sistema ha sido diseado y programado por multitud de programadores alrededor del mundo. El ncleo del sistema sigue en continuo desarrollo bajo la coordinacin de Linus Torvalds, la persona de la que parti la idea de este proyecto, a principios de la dcada de los noventa. Da a da, ms y ms programas / aplicaciones estn disponibles para este sistema, y la calidad de los mismos aumenta de versin a versin. La gran mayora de los mismos vienen acompaados del cdigo fuente y se distribuyen gratuitamente bajo los trminos de licencia de la GNU Public License. Las funciones principales de este magnfico sistema operativo son:

Sistema multitarea: En Linux es posible ejecutar varios programas a la vez sin necesidad de tener que parar la ejecucin de cada aplicacin. Sistema multiusuario: Varios usuarios pueden acceder a las aplicaciones y recursos del sistema Linux al mismo tiempo. Y, por supuesto, cada uno de ellos puede ejecutar varios programas a la vez (multitarea). Shells programables: Un shell conecta las ordenes de un usuario con el Kernel de Linux (el ncleo del sistema), y al ser programables se puede modificar para adaptarlo a tus necesidades. Por ejemplo, es muy til para realizar procesos en segundo plano. Multiplataforma: Corre en muchas CPUs distintas, no slo Intel, tambin el Alpha, PowerPC, Itanium, etc. Consolas virtuales mltiples: Varias sesiones de login a travs de las consolas virtuales entre las que se puede cambiar con las combinaciones adecuadas de
Ing. Ivan Ferreira

Introduccin al sistema operativo LINUX

teclas. La memoria se gestiona como un recurso unificado para los programas de usuario y para el cach de disco, de tal forma que toda la memoria libre puede ser usada para cach y ste puede a su vez ser reducido cuando se ejecuten grandes programas. Linux permite un acceso transparente a particiones Windows (VFAT) y acceso de slo lectura a particiones NTFS. El sistema operativo Linux comnmente puede ser estructurado en capas como se muestra en la figura:

Programas de aplicacin Shell Demonios y servicios Kernel Device drivers Hardware

El hardware se encuentra en el centro. El sistema operativo es la interfaz entre los procesos del usuario y el hardware. El kernel de Linux es intencionalmente compacto y diseado para incluir aquellas operaciones que requieren privilegios especiales del sistema para ejecutarse. El kernel es el programa de control central que provee los servicios bsicos del
10 Ing. Ivan Ferreira

Introduccin al sistema operativo LINUX

sistema. Es un archivo ejecutable, se compila desde los archivos fuente, archivos objetos y parmetros configurables. Se carga en memoria cuando el sistema inicia y ejecuta programas y administra los recursos del computador. El kernel espera solicitudes de los procesos del usuario para acceder a los recursos del sistema, como memoria, CPU y dispositivos. Los programas del usuario solicitan servicios al kernel por medio de llamadas del sistema o system calls. Los dispositivos de hardware se comunican con el kernel por medio de interrupciones. El shell rodea al kernel y acta como una interfaz del usuario. El shell es conocido como intrprete de comandos. Administra la ejecucin de procesos en primer y segundo plano, posee un entorno configurable, un lenguaje flexible y proporciona redireccin de la entrada y la salida. Usuarios y grupos El concepto de usuarios y grupos es extremadamente importante, ya que tiene una influencia directa sobre todos los dems conceptos que iremos presentando a lo largo de la unidad. Linux es un sistema multi-usuario verdadero, y para poder usar su sistema GNU/Linux debe poseer una cuenta en el mismo. Los dos parmetros importantes son, el nombre de conexin (comnmente abreviado login) y la contrasea. Estos son los que usar para poder ingresar al sistema. Otra accin que ocurri cuando se cre una cuenta de usuario es la creacin de un grupo. Por defecto, el programa de instalacin habr creado un grupo por usuario. Como veremos ms adelante, los grupos son tiles cuando varias personas tienen que compartir archivos. Por lo tanto, un grupo puede contener tantos usuarios como Ud. desee, y es muy comn ver tal separacin en sistemas grandes. En una universidad, por ejemplo, Ud. puede tener un grupo por cada departamento, otro grupo para los profesores, y as sucesivamente. La inversa tambin vale: un usuario puede ser miembro de uno o ms grupos, hasta un mximo de treinta y dos. Por ejemplo, un profesor de matemticas puede ser un miembro del grupo de profesores y tambin ser miembro del grupo de sus queridos estudiantes de matemticas. Sin embargo, todo esto no le dice como conectarse. Para poder conectarse, tendr que ingresar su nombre de conexin en el prompt Login: y presionar Intro, despus de lo cual aparecer el programa de conexin (denominado login ) que mostrar el prompt Password:, donde deber ingresar la contrasea para esta cuenta. Debido a que la conexin en la consola no hace eco de los caracteres que
11 Ing. Ivan Ferreira

Introduccin al sistema operativo LINUX

representan a la contrasea, deber tener cuidado cuando teclea su contrasea a ciegas. Note que Ud. se puede conectar varias veces usando la misma cuenta sobre consolas adicionales y bajo X . Cada sesin que abra es independiente de las otras, e incluso es posible tener varias sesiones X abiertas concurrentemente. El usuario root Normalmente esta es la cuenta que tiene el administrador del sistema, que es muy probable que sea Ud. Para la seguridad de su sistema, es muy importante que la cuenta de root siempre est protegida por una buena contrasea! Si se conecta como root regularmente es muy fcil cometer un error que puede hacer que su sistema quede intil; un nico error puede hacer que esto ocurra. En particular, si no ha proporcionado una contrasea para la cuenta root, cualquier usuario puede conectarse usando dicha cuenta y alterar cualquier parte de su sistema (incluso de otros sistemas operativos presentes en su mquina!). Obviamente, esto no es una idea muy buena. Vale la pena mencionar que, internamente, el sistema no lo identifica con su nombre de conexin sino con un nmero nico asignado a este nombre de conexin: el UID (User ID, Identificador del usuario). Similarmente, cada grupo se identifica no por su nombre sino por su GID o Group ID, (Identificador del grupo). El UID del usuario root es 0 y el GID es tambin 0. Un sistema de archivos consta de de tipos de datos abstractos (que representan la informacin y las operaciones posibles sobre ellas), que son necesarios para el almacenamiento, organizacin jerrquica, manipulacin, navegacin, acceso y consulta de datos. La mayora de los sistemas operativos poseen su propio sistema de archivos. Organizacin del rbol de archivos Hoy da, un sistema Unix es grande, muy grande. Esto es particularmente cierto con GNU/Linux : la profusin de software disponible lo haran un sistema inmanejable si no hubieran guas para la ubicacin de los archivos en la estructura del rbol. Respecto a eso, la norma reconocida es FHS (Filesystem Hierarchy Standard, Norma para la jerarqua del sistema de archivos). El documento que describe la norma est disponible en diferentes formatos en la Internet en la direccin http://www.pathname.com/fhs/ (http://www.pathname.com/fhs/ ). Slo da un breve sumario, pero debera ser suficiente para que Ud. sepa en que directorio debera buscar (o poner) un archivo dado.
12 Ing. Ivan Ferreira

Introduccin al sistema operativo LINUX

El directorio raz: / El directorio raz contiene toda la jerarqua del sistema. Aqu tiene una lista de los directorios y subdirectorios principales:

Archivos binarios esenciales del sistema. Este directorio contiene los comandos bsicos que usarn todos los usuarios y son necesarios para la operacin del sistema: ls, cp, login, etc.
/bin - Contiene los archivos que necesita el administrador de arranque de GNU/Linux, incluyendo el kernel y el disco RAM inicial. /boot /dev /etc -

Archivos de los dispositivos del sistema (dev por DEVices, Dispositivos).

Este directorio contiene todos los archivos de configuracin especficos a la mquina. Contiene todos los directorios personales de los usuarios del sistema. Este directorio puede, o no montado a travs de NFS.
/home -

Este directorio contiene las bibliotecas esenciales al sistema y los mdulos del kernel, en /lib/modules. Todas las bibliotecas que necesitan los binarios presentes en los directorios /bin y /sbin se deben ubicar aqu, junto con el vinculador ld.so.
/lib -

Directorio que contiene los puntos de montaje para los sistemas de archivos temporales.
/mnt -

- El directorio /media/ contiene los subdirectorios utilizados como puntos de montaje para la media removible, tales como CD-ROMs y discos Zip.
/media

Este directorio es utilizado por el servicio autofs el cual permite montar y desmontar automticamente dispositivos y sistemas de archivos de red .
/misc

Este directorio es utilizado por el servicio autofs el cual permite montar y desmontar automticamente dispositivos y sistemas de archivos de red.
/net - Este directorio contiene los paquetes que no son necesarios para la operacin del sistema y generalmente son compilados e instalados desde el fuente, no desde un formato RPM. /opt

El directorio /proc/ contiene "archivos" especiales que o bien extraen informacin del kernel o bien la envan a ste.
/proc /root -

Directorio personal del usuario root.


Ing. Ivan Ferreira

13

Introduccin al sistema operativo LINUX

contiene los binarios del sistema esenciales para el arranque del mismo, utilizables por cualquier usuario.
/usr -

contiene los binarios del sistema esenciales para el arranque del mismo, slo utilizables por root. Un usuario no privilegiado tambin puede ejecutarlos pero no llegar muy lejos.
/sbin -

Punto de montaje para el sistema de archivos virtual SELinux cuando este esta habilitado en el kernel.
/selinux

El directorio /sys/ utiliza el nuevo sistema de archivos virtual sysfs especfico al kernel 2.6. Ahora con el soporte ms extendido para los dispositivos de conexin en caliente (hot plug) en el kernel 2.6, el directorio /sys/ contiene informacin similar a la que se encuentra en /proc/, pero muestra una vista jerrquica de la informacin de dispositivos especfica con relacin a los dispositivos de conexin en caliente.
/sys

Directorio destinado a contener archivos temporales que pueden crear ciertos programas.
/tmp -

Ubicacin para los datos que los programas pueden modificar en tiempo real (ej: el servidor de correo electrnico, los programas de auditoria, el servidor de impresin, etc.)
/var -

Introduccin a la lnea de comandos La lnea de comandos es la manera ms directa de enviar comandos a la mquina. Si usa la lnea de comandos de GNU/Linux , rpidamente ver que es mucho ms potente y tiene ms capacidades que los intrpretes de comandos que puede haber usado con anterioridad. La razn de esto es que tiene un acceso directo, no slo a todas las aplicaciones X , sino tambin a los miles de utilitarios en modo consola (en oposicin al modo grfico) que no tienen su equivalente grfico, o nunca (o al menos todava!) ser posible mostrar en forma de mens y botones todas las opciones y combinaciones posibles. Ejecucin de comandos y opciones Lo que obtiene en realidad al iniciar este emulador de terminal es un shell. Este es el nombre del programa con el cual Ud. interacta. Ud. se encontrar frente al prompt:
[usuario@localhost ~]$

Esto supone que su nombre de usuario es usuario y que el nombre de su mquina es


14 Ing. Ivan Ferreira

Introduccin al sistema operativo LINUX

(este es el caso si su mquina no es parte de una red existente). Todo lo que aparece despus del prompt es lo que tiene que teclear. Note que cuando Ud. es root el signo $ del prompt cambia por un signo #. (esto slo es vlido con la configuracin predeterminada, ya que puede personalizar todos estos detalles en GNU/Linux ).
localhost

Todos los comandos Unix consisten de una secuencia de letras, nmeros y caracteres. No son validos los espacios dentro del nombre del comando. Algunos comandos validos son mail, cat, man. Linux adems hace diferencia entre maysculas y minsculas, lo que significa que Cat y cat son comandos distintos. Obtener ayuda El comando
man

muestra las pginas de la gua de referencia para un comando dado.

Hay aproximadamente una pgina completa de informacin sobre cat. Pruebe correr man este momento. No espere entender la pagina de manual que se le muestra. Las paginas de manual suponen un cierto conocimiento de Unix, conocimiento que tal vez Ud. no tenga en este momento. Cuando termine de leer la pagina, es probable que vea un bloque en video inverso al nal de la pagina, parecido a --more--" o a Line 1". Se trata del pedido de mas (informacin), que pronto le ser a muy familiar. En lugar de dejar escapar el texto fuera de los limites de la pantalla, man se detiene al final de cada pagina, y espera para ver que ha decidido hacer Ud.. Si desea seguir leyendo, oprima Barra espaciadora y avanzar a una pagina. Si desea terminar con la lectura de la pagina del manual, oprima q . Cuando el autor describe los argumentos de un comando:
comando <argumento no textual> [--opcin={arg1,arg2,arg3}] [argumento_opcional ...]

Los signos < (menor que) y > (mayor que) denotan un argumento obligatorio que no debe ser copiado textualmente, sino que debe reemplazarse de acuerdo con sus necesidades. Por ejemplo, <archivo> se refiere al nombre real de un archivo. Si dicho nombre es pepe.txt, usted debera teclear pepe.txt, y no <pepe.txt> o <archivo>. Los corchetes "[ ]" denotan argumentos opcionales, los cuales puede o no incluir en el comando. Los puntos suspensivos "..." significan que en ese lugar se puede incluir un nmero arbitrario de elementos. Las llaves "{ }" contienen los argumentos permitidos en este lugar. Uno de ellos debe ser puesto aqu.
15 Ing. Ivan Ferreira

Introduccin al sistema operativo LINUX

El man provee adems una funcin de bsqueda de palabras clave. Por ejemplo, digamos que Ud. est interesado en el tema PostScript, el lenguaje de control de impresoras desarrollado por Adobe. Si escribe:
$ man -k ps $ man -k Postscript

Recibir como resultado una lista de todos los comandos, llamadas al sistema, y otras partes documentadas de Linux que contengan la palabra ps" (o Postscript") en su nombre o descripcin breve. Esto puede llegar a ser muy til cuando quiere buscar una herramienta para hacer algo, pero no conoce su nombre o si existe. El comando info El comando info nos sirve cuando el texto de ayuda de man es insuficiente, o directamente no existe una entrada en su base de datos sobre lo que buscamos. El programa info tiene una interfaz navegable: muchas de las pginas tienen enlaces a otras pginas relacionadas, muy similar a como tienen las pginas web. Los enlaces se indican mediante un asterisco (*) seguido por el ttulo del enlace, seguido por un doble dos puntos (::). Para seguir los enlaces, hay que situar el cursor sobre ellos y pulsar la tecla <INTRO>. Para ayudar la navegacin por los documentos, tambin estn las siguientes teclas:
b u n p q

Ir un paso hacia atrs, a la ltima pgina visitada Ir al nivel superior en el rbol de pginas Ir a la siguiente pgina Ir a la pgina previa Salir de info

Fecha, hora, calendario Para obtener la fecha y hora del sistema se debe ejecutar el comando date. El comando date sin argumentos devuelve la fecha y la hora actual. El comando date puede ser formateado de tal forma a obtener la fecha como sea requerido. Ejemplos: Mostrar la hora actual:
$ date

Mostrar la hora en el formato ao, mes, da:


16 Ing. Ivan Ferreira

Introduccin al sistema operativo LINUX

$ date "+%Y-%m-%d" $ date "+Ao: %Y Mes: %m Dia: %d"

La fecha de un mes antes a partir de hoy:


$ date -d '1 month ago'

El mes hace cinco meses del actual:


$ date +%B -d '5 month ago'

La fecha de ayer:
$date --date "yesterday"

La fecha de maana:
$date --date "tomorrow"

La fecha del viernes de la prxima semana:


$ date -d "next week friday"

El comando date tambin puede ser utilizado por el usuario root para cambiar la hora del sistema, el formato del comando es:
# date [MMDDhhmm[[CC]YY][.ss]]

El comando cal muestra un calendario en pantalla, sin opciones, el comando cal mostrar el calendario para el mes corriente. Podemos especificar al comando que muestre un mes determinado o un ao especfico. Por ejemplo: Calendario del mes corriente de este ao:
$ cal

Calendario del ao 2010:


$ cal 2010

Calendario de diciembre de 2010:


$ cal 12 2010

17

Ing. Ivan Ferreira

Introduccin al sistema operativo LINUX

Manipulacin de contraseas Muchas veces es necesario cambiar la contrasea del inicio de sesin. Esto puede ser tan solo por gusto, para mantener la seguridad, por que la contrasea actual ha sido conocida o por polticas que requieren que la contrasea sea cambiada. Para cambiar la contrasea se utiliza el comando passwd. Un usuario no privilegiado puede cambiar tan solo su propia contrasea, ejecutando el comando passwd sin opciones. El usuario root puede cambiar la contrasea de cualquier usuario utilizando el comando passwd nombre_usuario. Ejemplos:
$ passwd # passwd juan

Utilizacin de consolas virtuales Las consolas virtuales permiten el acceso en simultneo de un usuario a ms de una sesin en el sistema operativo. Por defecto, Linux tiene seis consolas virtuales adems de la reservada para la interfaz grfica. Puede cambiarse a cualquiera de ellas ingresando la secuencia de teclas Ctrl-Alt- F<n>1, donde <n> es el nmero de consola a la cual desea cambiarse. Por defecto, la interfaz grfica est sobre la consola nmero 7. Otros comandos bsicos tiles Puede utilizar el comando bc para realizar clculos matemticos. Es una calculadora bsica. Los operadores bsicos son + (suma), - (resta), * (multiplicacin), / (divisin). Para finalizar la calculadora presione las teclas CTRL+D. El comando
tty

le ayudar a determinar en qu terminal est conectado actualmente.

El comando echo le permite desplegar mensajes en la pantalla. Es muy til para la programacin de scripts del shell. Ejemplo:
$ echo Mensaje de informacin

18

Ing. Ivan Ferreira

Introduccin al sistema operativo LINUX

El comando clear le permite limpiar la pantalla, tambin puede utilizar el mtodo abreviado CTRL-L.

19

Ing. Ivan Ferreira

2 Manipulacin de archivos

Manipulacin de archivos

Acerca de esta unidad


En esta unidad se cubren los siguientes tpicos:

Directorio actual de trabajo Nombres de archivos Rutas absolutas y relativas El directorio HOME y directorios de sistema Cambiando directorios Listar el contenido de directorios Comprobando espacio disponible Copiar, mover, renombrar archivos y directorios Crear y borrar archivos y directorios Determinando el tipo de un archivo Visualizar y editar archivos de texto

21

Ing. Ivan Ferreira

Manipulacin de archivos

Manipulacin de archivos
Directorio actual de trabajo Si queremos averiguar en que directorio estamos, basta con digitar pwd y en la linea siguiente saldr el directorio completo donde estamos posicionados. Ejemplo:
$ pwd

Nombres de archivos Un nombre de archivo puede contener cualquier caracter (excepto el caracter nulo caracter ASCII 0 - y una / que es el separador de directorio), incluso los no imprimibles. Linux distingue entre maysculas y minsculas. Los archivos pueden contener hasta 255 caracteres. Como debe haber notado, un nombre de archivo no contiene extensin alguna a menos que Ud. lo prefiera as. Bajo GNU/Linux las extensiones no caracterizan el contenido de un archivo, y tampoco lo hacen bajo otros sistemas operativos si es por eso. No obstante, las as llamadas extensiones del archivo siempre son muy convenientes. El caracter del punto (.) bajo Unix es simplemente un caracter entre otros. Vale la pena mencionar que, bajo Linux los nombres de archivo que comienzan con un punto son archivos ocultos. Rutas absolutas y relativas Una trayectoria o ruta absoluta, indica la forma de ubicar un archivo en el sistema de archivos a partir del directorio raz. Comienza con una /" y especifica todos lo directorios que existen antes del archivo que Ud. desea. Ejemplo:
$ /home/juan/archivo.bash

Una trayectoria o ruta relativa esta referida a su directorio actual. Existen dos directorios que se utilizan solamente para trayectorias relativas: ." y ..". El directorio ." se refiere al directorio actual, y .." es el directorio anterior o directorio padre: son abreviaturas" de directorio, y existen en todos los directorios, aun el directorio raz tiene un directorio anterior: el es su propio directorio anterior. Ejemplo: Un archivo en el directorio actual:
$ ./archivo.bash

Un archivo en el directorio inmediatamente superior:


22 Ing. Ivan Ferreira

Manipulacin de archivos

$ ../archivo.bash

Un archivo 2 directorios por encima del actual


$ ../../archivo.bash

Un archivo en el directorio tmp que se encuentra 2 directorios por encima del actual
$ ../../tmp/archivo.bash

El directorio HOME Cada usuario tiene su propio directorio (denominado su directorio personal, o home en ingls). El es el dueo de este directorio, y de los archivos que va a crear posteriormente en l. El directorio home es el directorio al cual accede automticamente luego de haber iniciado una sesin en el sistema. Cambiando directorios cd: Cambiar de directorio (Change Directory) El comando cd es exactamente el mismo que en DOS , con alguna funcionalidad extra. Puede usar . para referirse al directorio corriente y .. para referirse al directorio padre del directorio corriente. Si ingresa cd solo, ser llevado de vuelta a su directorio personal. Si ingresa llevado al ultimo directorio en el cual estuvo.
cd -

ser

Finalmente, puede especificar el directorio personal del usuario juan ingresando:


$ cd ~juan

Usando ~ solo o seguido de / significa el directorio personal suyo. Note que, como usuario no privilegiado, normalmente no puede ingresar a los directorios personales de otros usuarios (a menos que esos usuarios lo hayan autorizado explcitamente o esa sea la configuracin predeterminada del sistema), excepto si Ud. es root. Ejemplos:
$ $ $ $ $ cd cd cd cd cd .. ../../ /tmp ~

23

Ing. Ivan Ferreira

Manipulacin de archivos
$ cd ~juan

Listar el contenido de directorios ls: listar archivos. El comando ls (LiSt, LiStar) es equivalente a dir de DOS , pero puede hacer mucho ms. De hecho, esto se debe en gran parte al hecho de que los archivos tambin pueden hacer ms. La sintaxis del comando ls es la siguiente:
ls [opciones] [archivo|directorio] [archivo|directorio...]

Si no se especifica archivo o directorio alguno en la lnea de comandos, ls mostrar la lista de los archivos del directorio corriente. Sus opciones son muchas y slo citaremos unas pocas:
-a

Listar todos los archivos, incluyendo los archivos ocultos (en Linux los archivos ocultos son aquellos cuyo nombre comienza con un . ); la opcin -A lista casi todos los archivos, lo que significa que se mostrarn todos los archivos que mostrara la opcin -a excepto . y .. Muestra informacin adicional sobre cada archivo (formato largo) Muestra el tamao en kilobytes junto a cada archivo Muestra el tamao en formato fcilmente leble por el humano junto a cada archivo Listar recursivamente, es decir, todos los archivos y subdirectorios del directorio que se menciona en la lnea de comandos Trata a los directorios de la lnea de comandos como si fueran archivos normales en vez de listar su contenido Organiza el listado por tamao de archivo Lista los archivo en orden inverso lista los archivos ordenados por fecha de creacin o modificacin

-l -s -h -R -d -S -r -t

Puede combinar ms de una opcin en la lnea de comandos, por ejemplo puede listar todos los archivos, en formato largo, ordenados por fecha de modificacin en orden inverso:
$ ls -latr

24

Ing. Ivan Ferreira

Manipulacin de archivos

Comodines de la lnea de comandos Los comodines permiten especificar de forma ms eficiente mltiples archivos en la lnea de comandos.
* ? [] [!] ' {c1,c2}

Es reemplazado por el shell por "cualquier conjunto de caracteres" Es reemplazado por un y solo un caracter en cualquier posicin Corresponde a cualquier caracter que se encuentre entre corchetes Corresponde a cualquier caracter que no se encuentre entre corchetes El caracter ' (comilla simple), elimina el significado especial de los patrones de englobamiento, tambin la barra invertida \ Corresponde con c1 o con c2

Ejemplos: Listar todos los sub-directorios de directorio:


$ ls /directorio/*

Listar todos los archivos README un nivel por debajo de dir:


$ ls /dir/*/README

Listar los archivos que comianzan con a y tienen exactamente cuatro caracteres:
$ ls a???

Listar archivos cuyo nombre comience con a, A, b, B:


$ ls [aAbB]*

Listar archivos uyo nombre comience con cualquier letra del alfabeto:
$ ls [a-zA-Z]*

Listar archivos con nombre que comiencen con un nmero del 0 al nueve, seguido del nmero 5, es decir 05, 15, 25, 35, 45, 55, 65, 75, 85, 95:
$ ls [012345789]5

Un listado igual al anterior pero simplificado con el uso de rangos:


$ ls [0-9]5

25

Ing. Ivan Ferreira

Manipulacin de archivos

Listar todos los archivos cuyo nombre no comience con una vocal:
$ ls [!aeiou]*

Listar todos los archivos cuyo nombre no comience con letras minsculas:
$ ls [!a-z]*

Listar el archivo salarios o el archivo sueldos:


$ ls {salario,sueldo}

Listar cualquier archivo que comience con sal o con sel:


$ ls {sal*,sel*} $ ls {sal,sel}*

Listar

los

archivos

README

de

los

directorios

/usr/share/doc/dovecot: $ ls /usr/share/doc/{pam,dovecot}/README

/usr/share/doc/pam

Ejemplos de diferencias entre comillas simples y comillas dobles. Comillas dobles:


$ echo El valor de la variable $PS1 es $PS1 El valor de la variable [\u@\h \W]\$ es [\u@\h \W]\$

Comillas simples:
$ echo 'El valor de la variable $PS1 es $PS1' El valor de la variable $PS1 es $PS1

Comillas dobles con carcter de escape para evitar la interpretacin de la variable de entorno PS1:
$ echo El valor de la variable \$PS1 es $PS1 El valor de la variable $PS1 es [\u@\h \W]\$

Comprobando espacio disponible El comando df muestra la cantidad de espacio en disco disponible en el sistema de archivos que contiene cada archivo proporcionado como argumento. Si no se especifica ningn argumento, muestra el espacio disponible en todos los sistema de archivos existentes montados. Las opciones ms interesantes son:

26

Ing. Ivan Ferreira

Manipulacin de archivos

-k

Muestra los tamaos en bloques de 1024 bytes (1K). Si no se especifica esta opcin, se mostrarn los tamaos en bloques de 512 bytes. Para convertir los tamaos de bloques a MB, es necesario dividir el tamao reportado por 2048. Muestra informacin adicional sobre cada archivo (formato largo) Muestra el tamao en kilobytes junto a cada archivo Muestra en un formato fcil de interpretar Mustra solamente los sistemas de archivos del tipo indicado

-l -s -H -t

Ejemplos: Tamaos de todos los sistemas de archivos:


$ df -k

Tamaos del sistema de archivos que contiene el directorio actual en formato fcil de interpretar:
$ df -h .

Tamaos del sistema de archivos que contiene el archivo /etc/hosts:


$ df /etc/hosts

El comando du est relacionado a la obtencin de informacin de espacio en disco. Si deseamos conocer el tamao que ocupa en disco un directorio especfico y todo su contenido, utilizaremos el comando du. El comando du tambin muestra el resultado en bloques de 512 bytes y tambin acepta la opcin -k para mostrarlos en bloques de 1024 bytes. La opcin mas til es la opcin -s, que sumariza el total para el argumento dado. Ejemplos: Tamao que ocupan todos los directorios del directorio actual:
$ du -sk *

Tamao que ocupa el directorio actual:


$ du -sk .

27

Ing. Ivan Ferreira

Manipulacin de archivos

Crear y borrar archivos y directorios mkdir: creacin de directorios vacos. (MaKe DIRectory, Crear directorio) se usa para crear directorios. Su sintaxis es simple:
mkdir mkdir [opciones] <directorio> [directorio ...]

Slo una opcin es digna de inters: la opcin -p. La misma hace dos cosas: 1. Crear los directorios padre si es que an no existen. Si no se especifica esta opcin y los directorios padre no existen, mkdir simplemente fallar, quejndose que dichos directorios padre no existen; 2. Retornar silenciosamente si el directorio que Ud. desea crear ya existe. Similarmente, si no especifica la opcin -p, mkdir fallar, quejndose que el directorio ya existe. Aqu tiene algunos ejemplos. Crea un directorio denominado actual:
$ mkdir pepe pepe

en el directorio

Crea un directorio misc en el directorio images creando primero el ltimo si es que no existe:
$ mkdir -p images/misc/

touch: Creacin de archivos vacos. Inicialmente, el comando touch no est orientado a la creacin de archivos sino a la actualizacin de la hora de acceso y modificacin de los archivos. Sin embargo, touch crea los archivos mencionados como archivos vacos si es que no existan. La sintaxis es:
touch [opciones] archivo [archivo...]

Entonces, ejecutar el comando:


$ touch archivo1 imagenes/archivo2

Crea un archivo vaco denominado archivo1 en el directorio corriente y un archivo vaco denominado archivo2 en el directorio imgenes.

28

Ing. Ivan Ferreira

Manipulacin de archivos

Borrar archivos y directorios rm: borrar archivos o directorios El comando rm (ReMove, Quitar) es utilizado para eliminar archivos o directorios. Su sintaxis es la siguiente:
rm [opciones] <archivo|directorio> [archivo|directorio...]

Las opciones incluyen:


-r -R

Borrar recursivamente. Esta opcin es obligatoria para borrar un directorio, vaco o no. Sin embargo, tambin puede usar el comando rmdir para borrar directorios vacos. Pedir confirmacin antes de cada supresin. La opuesta de -i, fuerza la supresin de los archivos o directorios. Muestra en un formato fcil de interpretar Muestra solamente los sistemas de archivos del tipo indicado

-i -f -H -t

Algunos ejemplos: Borrar todos los archivos cuyo nombre termina en .jpg en el directorio imagenes y borrar el archivo archivo1 en el directorio actual, pidiendo confirmacin para cada uno de los archivos
$ rm -i imagenes/*.jpg archivo1

Borra todo el directorio misc/ del directorio images/


rm -Rf images/misc/*

Mover o renombrar archivos mv: mover o renombrar archivos La sintaxis del comando mv (MoVe, mover) es la siguiente:
mv [opciones] <archivo|dir.> [archivo|dir. ...] <destino>

Algunas opciones:

29

Ing. Ivan Ferreira

Manipulacin de archivos
-f -i -v

Fuerza la operacin no hay advertencia alguna en caso de que la operacin sobre-escriba un archivo que ya existe. Lo contrario a -f, pedir confirmacin al usuario antes de sobre-escribir un archivo existente. Modo verboso, reportar todos los cambios y la actividad.

Algunos ejemplos. Mover todos los archivos del directorio /tmp/pics/ cuyos nombres terminan en .png al directorio corriente (.), pidiendo confirmacin antes de sobre-escribir cualquier archivo.
$ mv -i /tmp/pics/*.png .

Cambiar el nombre del archivo pepe a pepito.


$ mv pepe pepito

Mover, sin pedir confirmacin, todos los archivos del directorio corriente cuyos nombres comiencen con archivo junto con todo el directorio imagenes/ al directorio tacho/, y mostrar cada operacin llevada a cabo.
mv -vf archivo* imagenes/ tacho/

Copiando archivos y directorios cp: copiar archivos y directorios


cp

(CoPy, Copiar) permite copiar archivos y directorios. Su sintaxis es la siguiente:

cp [opciones] <archivo|dir.> [archivo|dir. ...] <destino> cp

tiene muchas opciones. Estas son las ms comunes: Copiar recursivamente; obligatoria para copiar un directorio, incluso si est vaco. Pedir confirmacin antes de obre-escribir cualquier archivo que pudiera sobreescribirse. La opuesta de -i, reemplazar cualquier archivo existente sin pedir confirmacin alguna. Muestra en un formato fcil de interpretar Modo verboso , reporta todas las acciones realizadas.
Ing. Ivan Ferreira

-R -i -f -v -t

30

Manipulacin de archivos

Algunos ejemplos: Copia todos los archivos del directorio /tmp/imagenes al directorio imagenes/ ubicado en el directorio corriente. Si se va a sobre-escribir un archivo se pide confirmacin:
$ cp -i /tmp/imagenes/* imagenes/

Copia todo el directorio docs ms todos los archivos del directorio /shared/mp3s al directorio miscosas ubicado en el directorio actual.
$ cp -vR docs/ /shared/mp3s/* miscosas/

Hace una copia del archivo pepe bajo el nombre pepito en el directorio actual.
$ cp pepe pepito

Determinando el tipo de un archivo file: determina el tipo de archivo El comando


file

prueba cada argumento e intenta clasificar el tipo de archivo.

En Linux todo est representado por medio de archivos, inclusive ciertos dispositivos del sistema, como discos, unidades de cinta y puertos de entrada y salida. Existen dos tipos de archivos:

Archivos convencionales: son aquellos que contienen informacin y que generalmente sirven a los programas de aplicacin. Archivos especiales: son aquellos que proveen un interfaz uniforme entre los programas y la E/S al hardware del ordenador

Los archivos pueden clasificarse en:


Archivo regular ( - ): Archivos comunes del sistema operativo, tipo ASCII o binario. Directorios ( d ): Archivos contenedores de otros archivos. Enlaces ( l ): Archivos que referencian a otros archivos. Tuberas ( p ): Archivos que permiten el intercambio de informacin entre procesos.

31

Ing. Ivan Ferreira

Manipulacin de archivos

Archivos especial de bloques ( b ): Archivos que permiten el acceso a dispositivos que manejan la E/S de la informacin por bloques y de forma aleatoria, como los discos duros. Archivos especial de caracter ( c ): Archivos que permiten el acceso a dispositivos que manejan la E/S de la informacin en forma secuencial y por caracter, como las terminales, teclado y mouse. Archivos socket ( s ): Archivos relacionados a una conexin de red.

Visualizar archivos de texto cat: mostrar el contenido de uno o ms archivos en la pantalla No hay mucho ms que decir, este comando simplemente hace eso: mostrar el contenido de uno o ms archivos en la salida estndar, normalmente la terminal. Utilizando redireccin de la salida estndar, puede concatenar uno o ms archivos usando cat. Por ejemplo:
$ cat archivo1 archivo2 > archivo3

less: un paginador Su nombre es un juego de palabras relacionado al primer paginador existente bajo Unix, que se denomina more. Un paginador es un programa que permite al usuario ver archivos largos pgina por pgina (o, ms precisamente, pantalla por pantalla). Hablamos primero de less que de more porque su uso es mucho ms intuitivo. Utilice el comando less para ver archivos grandes, que no entran en una pantalla. Por ejemplo:
$ less /etc/termcap

Para acceder a la pantalla siguiente, pulse [barra espaciadora]; para volver a la pantalla anterior, pulse [b]; para salir, presione [q]. Tambin puede usar las flechas de direccin para navegar con less. Para buscar palabras dentro de un archivo de texto usando escriba la palabra que quiere buscar. Por ejemplo:
/Linux less,

presione [/] y luego

De esta forma buscar las coincidencias dentro del texto de la palabra Linux. Para avanzar a la siguiente coincidencia, presione la tecla [n], para ir a la coincidencia
32 Ing. Ivan Ferreira

Manipulacin de archivos

anterior presione la tecla [N]. De hecho, simplemente presione [h] para la ayuda (en ingls) y eche un vistazo. Pero de todas formas, el objetivo de esta seccin es que Ud. sea capaz de leer archivos largos, y dicho objetivo ya est cumplido. more: paginador de archivos El comando more permite la visualizacin de un archivo por pginas, as como el comando less, excepto que las teclas de control son diferentes. La [barra espaciadora] es utilizada para avanzar una pgina del archivo, la tecla [Enter] para avanzar por lnea y la tecla [b] para retroceder una pgina. Para salir, utilice la tecla [q]. Puede buscar texto de la misma forma que en less, usando la tecla [/].

33

Ing. Ivan Ferreira

3 Usuarios y grupos

Usuarios y grupos

Acerca de esta unidad


En esta unidad se cubren los siguientes tpicos:

Usuario y grupos, concepto Modelo de seguridad de Linux El usuario root y otros usuarios del sistema Comandos para obtener informacin de usuarios Cambiando la identidad del usuario

35

Ing. Ivan Ferreira

Usuarios y grupos

Usuarios y grupos
Usuario y grupos, concepto El Linux es un sistema operativo multiusuario. Cada usuario debe tener un login para iniciar sesin en el sistema y pertenece a uno o ms grupos. Los grupos permiten organizar usuarios de funciones o caractersticas similares de tal modo que stos puedan compartir archivos, hacer ms fcil la administracin de la seguridad y configuracin restricciones del sistema. Cada usuario y grupo tiene un identificador numrico que es utilizado por el sistema para diferenciar a los usuarios, conocidos como UID y GID. El sistema no reconoce diferencia entre los usuarios segn el nombre del usuario, por lo tanto, si dos usuarios con nombres distintos tienen el mismo ID, el sistema Linux no podr diferenciar quin es quin. El usuario root y otros usuarios del sistema Existen tres categoras de cuentas de usuarios, usuario administrativo (root), usuarios regulares y usuarios de servicio. El usuario root tiene el control total del sistema y puede sobrepasar cualquier restriccin de seguridad. Los usuarios regulares tienen privilegios necesarios para realizar las tareas normales en Linux, como guardar archivos en su directorio personal, usar procesadores de texto, navegadores, etc. No pueden realizar la configuracin del equipo o instalacin de software a menos que el usuario root explcitamente lo permita. Como los usuarios regulares no tienen privilegios administrativos, no pueden accidentalmente o intencionalmente manipular archivos de configuracin, borrarlos o infectarlos con algn virus o programa trojano. Existen servicios como samba, apache, mail, proxy, impresin, etc, que tienen su propia cuenta de usuario de servicio. Estas cuentas existen para permitir a estos programas interactuar con el computador y no necesitan de una contrasea vlida. Modelo de seguridad de Linux Linux utiliza un grupo privado de usuarios (UPG, del ingls "User Private Group"), que permite que el manejo de grupos UNIX sea mucho ms fcil. El esquema UPG no aade o cambia nada al modo tradicional UNIX de manejar grupos. Simplemente
36 Ing. Ivan Ferreira

Usuarios y grupos

ofrece una nueva convencin para ello. Cada vez que se crea un nuevo usuario, por defecto, se le asigna un nico grupo. Anteriormente, los usuarios eran, por defecto, agregados a un grupo comn. Esto permite que cualquier persona dentro del mismo grupo, a menos que se haya configurado de lo contrario, pueda acceder al directorio personal de otro usuario y en ocasiones modificar o borrar archivos en l. En el modelo UPG, ningn usuario puede acceder al directorio personal de otro, y si se desea que estos usuarios compartan archivos entre s, se los agrupa en un grupo secundario comn y a este grupo se permite el acceso a un directorio especfico. Comandos para obtener informacin de usuarios Puede utilizar el comando who para averiguar quienes estn utilizando el sistema actualmente. La sintaxis del comando es:
who [opciones]... [ archivo | arg1 arg2 ]

El comando
-b -r -H

who

tiene algunas opciones interesante:

Indica cundo se inici por ltima vez el sistema. Indica el nivel de ejecucin actual. Muestra una cabecera para los campos.
whoami

Tambin puede utilizar el comando sesin.

para averiguar con qu usuario ha iniciado

El comando uptime le proporciona informacin de cuntos usuarios estn actualmente en el sistema, as como el tiempo que el equipo ha estado funcionando y la carga de trabajo hace 1, 5 y 15 minutos. Una carga normal de trabajo depende del equipo, cantidad de procesadores, memoria, etc. El comando id le permite obtener informacin del nombre de usuario, su UID, los grupos a los que pertenece y el GID de cada uno de ellos. La sintaxis del comando es:
id [opcion]... [nombre_usuario]

Para mas informacin acerca del comando Cambiando la identidad del usuario su: Usuario sustituto.
37

id

consulte la pgina man del comando.

Ing. Ivan Ferreira

Usuarios y grupos

El comando su le permite ejecutar un shell con un UID o GID sustituto. La sentencia del comando es:
su [opcion]... [-] [usuario [arg]...]

Si se ejecuta sin opciones, le solicitar que ingrese la contrasea para el usuario root. Si la contrasea proporcionada es correcta, habr iniciado un shell como root y podr realizar tareas administrativas. La alternativa -, como en su -, indica que las variables de entorno del usuario a nombre de quien estamos solicitando un shell, sean inicializadas. Si se especifica un usuario especfico, le solicitar la contrasea para ese usuario, a menos que sea usted el usuario root, a quin no se le solicita ninguna contrasea. La opcin ms interesante es la opcin -c, que ejecuta el comando dado como argumento y finaliza. Por ejemplo, para visualizar el archivo shadow como root ejecute:
$ su -c cat /etc/shadow

La contrasea del usuario root deber ser proporcionada.

38

Ing. Ivan Ferreira

4 Permisos de acceso a archivos y directorios

Permisos de acceso a archivos y directorios

Acerca de esta unidad


En esta unidad se cubren los siguientes tpicos:

Seguridad de archivos en Linux Examinando los permisos de archivos y directorios Tipos de permisos de archivos Categora de usuarios Permisos por defecto de los archivos Cambiando permisos de archivos Permisos especiales

40

Ing. Ivan Ferreira

Permisos de acceso a archivos y directorios

Permisos de acceso a archivos y directorios


Seguridad de archivos en Linux Como dueo del archivo, un usuario puede configurar permisos sobre sus archivos. Estos permisos distinguen tres categoras de usuarios: el dueo del archivo, todos los usuarios que son miembros del grupo asociado al archivo (denominado tambin grupo dueo) pero no son el usuario dueo, y los otros, que son todos los usuarios que no son ni el dueo ni miembros del grupo dueo. Tipos de permisos de archivos Hay tres permisos diferentes: 1. Permiso de lectura (r por Read, Leer): para un archivo, esto permite que se lea su contenido. Para un directorio, esto permite que se muestren los archivos que contiene (es decir, los archivos en este directorio). 2. Permiso de escritura (w por Write, Escribir): para un archivo, esto permite que se modifique su contenido. Para un directorio, esto permite que un usuario agregue y/o quite archivos de este directorio, incluso si no es el dueo de esos archivos. 3. Permiso de ejecucin (x por eXecute, Ejecutar): para un archivo, esto permite su ejecucin (en consecuencia, normalmente slo los archivos ejecutables tienen activo este permiso). Para un directorio, esto permite que un usuario lo recorra (lo que significa poder ingresar a, o pasar por, ese directorio). Note que esto est separado del acceso de lectura: bien puede ser que Ud. pueda recorrer un directorio, pero no leer su contenido! Todas las combinaciones de estos permisos son posibles. Examinando los permisos de archivos y directorios Los comandos directorios.
ls -l

ls -ld

nos permiten examinar los permisos de archivos y son los siguientes (de izquierda a

Los diferentes campos de salida del comando derecha):

ls -l

El primer caracter es el tipo del archivo: contiene un guin (-) si es un archivo regular, una (d) si es un directorio, una (l) si es un enlace, una (c) si es un archivo de caracter, una (b) si es un archivo de bloques, una (p) si es una tubera o una (s) si es un archivo socket.
Ing. Ivan Ferreira

41

Permisos de acceso a archivos y directorios

Los nueve caracteres que siguen representan los permisos asociados con ese archivo. Aqu puede ver la distincin que se hace entre los diferentes usuarios para el mismo archivo: Los primeros tres caracteres representan los derechos asociados con el dueo del archivo, los siguientes tres se aplican a todos los usuarios que pertenecen al grupo pero que no son el dueo, y los ltimos tres se aplican a los otros. Un guin (-) significa que el permiso no est activo.

Luego viene el nmero de vnculos del archivo. Posteriormente veremos que los archivos no slo se identifican por su nombre sino tambin por un nmero (el nmero de i-nodo), y por lo tanto es posible que un archivo en disco tenga varios nombres. Para un directorio, el nmero de vnculos tiene un significado especial, que tambin veremos en administracin.

Luego viene el nombre del dueo del archivo y el nombre del grupo dueo. Finalmente, se muestra el tamao del archivo (en bytes) y la fecha de su ltima modificacin, seguido por ltimo por el nombre del archivo o directorio propiamente dicho.

Cambiando permisos de archivos chmod: Cambiar permisos (modos) de archivos. El comando chmod (CHange MODe, Cambiar el modo) tiene una sintaxis bien particular. La sintaxis general es:
chmod [opciones] <cambio de modo> <archivo|dir> [archivo|dir. ...]

pero lo que lo distingue son las diferentes formas que puede tomar el cambio de modo. Este se puede especificar de dos maneras:

En octal: entonces los derechos del usuario dueo se corresponden con nmeros de la forma <x>00, donde <x> corresponde al permiso asignado:

4 para permiso de lectura 2 para permiso de escritura 1 para permiso de ejecucin;

42

Ing. Ivan Ferreira

Permisos de acceso a archivos y directorios

Similarmente, los derechos del grupo propietario toman la forma <x>0 y los permisos para los otros la forma <x>. Por lo tanto, todo lo que Ud. necesita hacer es sumar los permisos asignados para obtener el modo correcto. Por lo tanto, los permisos rwxr-xr-- corresponden a 400+200+100 (permisos del dueo, rwx) +40+10 (permisos del grupo propietario, r-x) +4 (permisos de los otros, r--) = 754; de esta forma, los permisos se expresan en trminos absolutos. Esto significa que los permisos previos se reemplazan incondicionalmente. Puede utilizar una tabla como la inferior para asignar permisos, luego con prctica, mentalmente podr asignar estos permisos. u R (4) W (2) X (1) 4 2 1 7 g 4 1 5 o 0

El resultado de los permisos en octal calculado en el cuadro es 750, indicando todos los permisos para el usuario propietario, lectura y ejecucin para el grupo propietario y ningn permisos para los dems usuarios.

Con expresiones: aqu los permisos se expresan con una secuencia de expresiones separadas por comas. Por lo tanto una expresin toma la forma:
[categora]+|-|=<permisos>

La categora puede ser una o ms de:


u g o

(User. Usuario, permisos para el dueo) (Group. Grupo, permisos para el grupo propietario) (Others. Otros, permisos para los otros ).

Si no se especifica categora alguna, los cambios se aplicarn para todas las categoras. Un signo + otorga un permiso, un - lo niega. Finalmente, el permiso es uno o ms de:

r (Read, lectura) w (Write, escritura)

43

Ing. Ivan Ferreira

Permisos de acceso a archivos y directorios

x (eXecute, ejecucin).

Las opciones principales son:


-R -v

Cambiar los permisos recursivamente. Modo verboso , muestra las acciones efectuadas para cada archivo.

Ejemplos: Quitar recursivamente el permiso de escritura para los otros sobre todos los archivos y subdirectorios del directorio /shared/docs/.
$ chmod -R o-w /shared/docs

Quitar recursivamente el permiso de escritura para el grupo y para los otros sobre todo el directorio privado/, y quitar el permiso de ejecucin para los otros.
$ chmod -R og-w,o-x privado/

Asignar permiso de lectura y ejecucin para todos:


$ chmod +rwx miarchivo.bash

Permisos especiales Existen permisos especiales para archivos y directorios

T: Sticky (pegajoso) ((t) minscula si el permiso (x) adems est asignado para otros). S: SGID (Set Group ID). ((s) minscula en el grupo si el permiso (x) adems est asignado). S: SUID (Set User ID). ((s) minscula en el usuario si el permiso (x) adems est asignado)

El permiso Sticky en archivos no tiene funcin en Linux. El permiso Sticky en directorio provoca que los archivos contenidos dentro de ese directorio puedan ser borrados nicamente por el usuario propietario y por el usuario root. El permiso SUID en directorios no tiene funcin en Linux. El permiso SUID en archivos permite que si el archivo es ejecutable, en lugar de correr con los permisos del usuario que ejecut el archivo, se ejecutar con los permisos del usuario propietario del archivo.
44 Ing. Ivan Ferreira

Permisos de acceso a archivos y directorios

El permiso SGID en archivos permite que si el archivo es ejecutable, en lugar de correr con los permisos del grupo al que pertenece el usuario que ejecut el archivo, se ejecutar con los permisos del grupo propietario del archivo. El permiso SGID en directorios obliga a que los archivos que se crean por debajo del directorio, hereden el grupo propietario del directorio contenedor. El SGID en directorios es parte del modelo de seguridad User Private Group. Para asiginar los permisos especiales en forma octal debe utilizar:

Sticky: 1000 SGID: 2000 SUID: 4000

Para asignar con expresiones:


Sticky: +t SUID: u+s SGID: g+s

Ejemplos: Establecer sticky, lectura, escritura y ejecucin para todos:


$ chmod 1777 archivo.bash

Establecer sticky:
$ chmod +t hola

Establecer SGID, lectura, escritura y ejecucin para el propietario, lectura y ejecucin para todos:
$ chmod 2755 directorio

Establecer SGID:
$ chmod g+s directorio

Establecer SUID:
45 Ing. Ivan Ferreira

Permisos de acceso a archivos y directorios


$ chmod u+s archivo.bash

Permisos por defecto de los archivos Cuando se crea un archivo o directorio, ste se crea con ciertos permisos por defecto. Los permisos por defecto estn dados por la configuracin del umask. El comando umask permite definir qu permisos tendrn por defecto los archivos y directorios son creados. El comando
$ umask 022 umask

sin parmetros nos devuelve dicho valor :

Los permisos se calculan en base al umask de la siguiente manera:

Para nuevos archivos ejecutables (Programas compilados): 777 022 ----755 Permisos predeterminados Se resta el valor de umask Permisos permitidos

Esto significa que los permisos con los que el archivo ser creado sern 755 (rwxr-xr-x).

Para nuevos archivos de texto o archivos regulares no ejecutables: 666 022 ----644 Permisos predeterminados Se resta el valor de umask Permisos permitidos

En el caso anterior, 666-022 = 644 , es decir , cualquier fichero que creemos con un editor con otros comandos sern creados con permisos 644 (rw-r--r--) . Para cambiar la mscara , usamos el comando deseamos dar :
$ umask 077 umask

con la nueva mscara que le

En cuyo caso , todos los ficheros a partir del se momento , y hasta que finalice la sesin, sern creados con sin permisos para el grupo y los otros.

46

Ing. Ivan Ferreira

Permisos de acceso a archivos y directorios

47

Ing. Ivan Ferreira

5 El sistema de archivos

El sistema de archivos

Acerca de esta unidad


En esta unidad se cubren los siguientes tpicos:

Sistemas de archivos ext2/ext3 Vnculos o enlaces simblicos (blandos) y duros Montando almacenamiento removible Buscando y procesando archivos Utilidades para comprimir y archivar

49

Ing. Ivan Ferreira

El sistema de archivos

El sistema de archivos
Sistemas de archivos ext2/ext3 Sistema de archivos Ext2: El Segundo Sistema de Archivos Extendido (Second Extended Filesystem) (su forma abreviada es Ext2FS o simplemente ext2) ha sido el sistema de archivos predeterminado de GNU/Linux por muchos aos. El mismo reemplaz al Sistema de archivos extendido (Extended File System). De all, el trmino segundo. El sistema de archivos nuevo corrigi ciertos problemas y limitaciones. Ext2FS respeta las normativas usuales para los sistemas de archivos de tipo Unix. El mismo fue diseado para evolucionar desde su concepcin, a la vez de ofrecer una gran robustez y buen rendimiento. Sistema de archivos Ext3: Como su nombre lo sugiere, el Tercer Sistema de Archivos Extendido (Third Extended File System es el sucesor de Ext2FS. El mismo es compatible con este ltimo pero est mejorado por una caracterstica muy interesante: journaling. Una de las mayores fallas de los sistemas de archivos tradicionales como Ext2FS es su baja tolerancia a cadas del sistema abruptas (fallas de energa o programas que se cuelgan). En general, dichos eventos implican un examen prolongado de la estructura del sistema de archivos e intentos para corregir errores, resultando algunas veces en una corrupcin aun mayor del sistema de archivos. En consecuencia puede producirse una prdida total o parcial de los datos grabados. El journaling responde a este problema. Para simplificar, digamos que la idea es grabar las acciones (tales como el guardar un archivo) antes de llevarlas a cabo efectivamente. Podemos comparar su funcionamiento al de un capitn de un bote que anota en su cuaderno de bitcora los eventos diarios. El resultado, un sistema de archivos coherente siempre. Y si ocurren problemas, la verificacin es muy rpida y las reparaciones eventuales, muy limitadas. Por lo tanto, Ext3FS ofrece la tecnologa de sistemas de archivos con journal, a la vez que mantiene la estructura de Ext2FS asegurando una compatibilidad excelente. Enlaces o vnculos simblicos (blandos) y duros Los i-nodos son, junto con el paradigma todo es un archivo, la parte fundamental de cualquier sistema de archivos Unix. La palabra i-nodo es una abreviacin de Information NODE (NODO de Informacin). Los i-nodos se almacenan en el disco en una tabla de i-nodos. Existen para todos los tipos de archivos que se pueden
50 Ing. Ivan Ferreira

El sistema de archivos

almacenar en un sistema de archivos, y esto incluye a los directorios, las tuberas nombradas, los archivos de modo caracter, y as sucesivamente. Los i-inodos tambin son la forma en la que Unix identifica de forma unvoca a un archivo. En Unix, Ud. no identifica a un archivo por su nombre, sino por un nmero de i-nodo. La razn para esto es que un mismo archivo puede tener varios nombres, o no tener ninguno. Los enlaces o vnculos La mejor forma de comprender qu hay detrs de esta nocin de vnculo es por medio de un ejemplo. Creemos un archivo (regular):
$ touch archivo1 $ ls -il archivo1 32555 -rw-rw-r-- 1 jperez jperez 0 sep 10 08:12 archivo1

La opcin -i del comando ls imprime el nmero de i-nodo, que es el primer campo de la salida. Como puede ver, antes de crear el archivo a, no haba archivo alguno en el directorio. El otro campo de inters es el tercero, que es el contador de vnculos del archivo (bueno, de hecho, del i-nodo). De hecho, el comando touch archivo1 puede separarse en dos acciones distintas: 1. Creacin de un i-nodo, al cual el sistema le atribuye el nmero 32555, y cuyo tipo es el de un archivo regular, 2. Creacin de un vnculo a este i-nodo. Por lo tanto, el archivo archivo1 es un vnculo al i-nodo numerado 32555, y por el momento es slo uno: el contador de vnculos muestra un 1. Pero ahora, si ingresamos:
$ ln archivo1 archivo2 $ ls -il archivo? 32555 -rw-rw-r-- 2 jperez jperez 0 sep 10 08:12 archivo1 32555 -rw-rw-r-- 2 jperez jperez 0 sep 10 08:12 archivo2

Habremos creado otro vnculo al mismo i-nodo. Como puede ver, no hemos creado archivo alguno denominado archivo2, sino que slo hemos agregado otro vnculo al inodo numerado 32555 en el mismo directorio y lo denominamos archivo2. Puede ver en la salida de ls -l que el contador de vnculos para el i-nodo ahora es 2, y ya no es
51 Ing. Ivan Ferreira

El sistema de archivos

1. Ahora, si hacemos:
$ rm archivo1 $ ls -il archivo2 32555 -rw-rw-r-- 1 jperez jperez 0 sep 10 08:12 archivo2

Vemos que incluso cuando hemos borrado el archivo original, el i-nodo todava existe. Pero ahora el nico vnculo a l es el archivo denominado archivo2. Por lo tanto, bajo Unix un archivo tiene uno o ms vnculos en uno o ms directorios, los cuales pueden ser considerados el nombre del archivo. Tambin los directorios se almacenan en i-nodos, pero su contador de vnculos, contrariamente a todos los otros tipos de archivos, es el nmero de subdirectorios que contiene. Existen al menos dos vnculos por directorio: el directorio en s mismo (.) y su directorio padre (..). Ejemplos tpicos de archivos que no estn vinculados (es decir, no tienen un nombre) son las conexiones de red: nunca ver el archivo correspondiente a su conexin con un sitio web en su rbol de archivos, sin importar que directorio intente. Similarmente, cuando usa una tubera en el shell, el archivo que corresponde a la misma existe, pero no est vinculado. Los vnculos simblicos y la limitacin de los vnculos duros Los vnculos simblicos son archivos de un tipo particular que slo contienen una cadena de caracteres arbitraria, que puede, o no, apuntar a un nombre de archivo existente. Cuando se menciona un vnculo simblico en la lnea de comandos o en un programa, de hecho se accede al archivo al que apunta, si es que existe. Por ejemplo:
$ echo Hola > miarchivo $ ln -s miarchivo mivinculo $ ls -il total 4 169 -rw-rw-r-- 1 reina reina 6 sep 10 21:30 miarchivo 416 lrwxrwxrwx 1 reina reina 6 sep 10 21:30 mivinculo -> miarchivo $ cat miarchivo Hola $ cat mivinculo Hola

Puede ver que el tipo de archivo para mivinculo es 'l', por Link (Vnculo). Los derechos de acceso para un vnculo simblico son insignificantes: siempre sern rwxrwxrwx. Tambin puede ver que este es un archivo diferente de miarchivo, ya que su nmero de i-nodo es diferente. Pero se refiere al archivo miarchivo de manera simblica, por lo tanto cuando ingresa cat mivinculo, en realidad estar imprimiendo el contenido del archivo miarchivo. Para demostrar que un vnculo simblico contiene una cadena de caracteres
52 Ing. Ivan Ferreira

El sistema de archivos

arbitraria, podemos hacer lo siguiente:


$ ln -s "No soy un archivo existente" otrovinculo $ ls -il otrovinculo 418 lrwxrwxrwx 1 reina reina 20 sep 10 21:43 otrovinculo -> No soy un archivo existente $ cat otrovinculo cat: otrovinculo: No existe el fichero o el directorio

Pero los vnculos simblicos existen porque superan varias de las limitaciones de los vnculos normales ( duros ):

No se puede crear un vnculo a un i-nodo en un directorio que est en un sistema de archivos diferente a dicho i-nodo. No se pueden vincular dos directorios, debido a que el contador de vnculos para un directorio tiene un uso especial como hemos visto. Pero Ud. puede hacer que un vnculo simblico apunte a un directorio y usarlo como si realmente fuera un directorio. Por lo tanto los vnculos simblicos son muy tiles en muchas circunstancias, y muy a menudo, la gente tiende a usarlos para vincular archivos entre s, incluso cuando podra haberse usado un vnculo normal. No obstante, una ventaja de los vnculos normales es que Ud. no pierde el archivo si borra el original. Los permisos de un vnculo no pueden ser modificados, siempre ser 777. Finalmente, si ha observado atentamente, sabr que el tamao de un vnculo simblico es simplemente el tamao de la cadena de caracteres.
rm,

Para borrar un vnculo se utiliza el comando Buscando y procesando archivos

como con cualquier otro archivo.

find: busca archivos basado en criterios. es un utilitario de Unix muy antiguo. Su rol es buscar recursivamente uno o ms directorios y encontrar archivos que se correspondan con un cierto conjunto de criterios en esos directorios. Aunque es muy til, su sintaxis es verdaderamente compleja, y usarlo requiere cierta prctica. La sintaxis general es:
find find [opciones] [directorios] [criterios] [accion]

Si no especifica directorio alguno, find buscar en el directorio corriente. Si no especifica el criterio, esto es equivalente a verdadero, por lo que se encontrarn todos los archivos. Las opciones, criterios y acciones son tan numerosas que solo mencionaremos
53 Ing. Ivan Ferreira

El sistema de archivos

algunas de cada una. Comencemos por las opciones:


-xdev -follow

No extender la bsqueda a los directorios ubicados en otros sistemas de archivos. Seguir los vnculos simblicos si apuntan a directorios. Por defecto no los sigue.

Algunos criterios que pueden ser utilizados para la bsqueda son:


-type <tipo>

Busca los archivos de un tipo dado; <tipo> puede ser uno de: f (archivo regular), d (directorio), l (vnculo simblico), s (socket), b (archivo en modo de bloques), c (archivo en modo caracter) p (tubera nombrada). Encontrar los archivos cuyo nombre se corresponde con el <patron> dado. Con esta opcin, se trata a <patron> como un patrn de englobamiento del shell. Como -name, pero sin distinguir maysculas/minsculas. Encontrar los archivos a los que se han modificado hace <n> das. Tambin puede especificar +<n> o -<n>, en cuyo caso la bsqueda se har para los archivos modificados antes de n das o de <n> das hasta ahora respectivamente. Encontrar los archivos que han sido recientemente que el archivo <archivo>. modificados ms

-name <patron>

-iname <patron> -mtime <n>

-newer <archivo>

Existen muchas otras pruebas, debe referirse a la pgina man para ms detalles. Para combinar las pruebas, Ud. puede utilizar uno de:

<c1> -a <c2>: Verdadero si tanto <c1> como <c2> son verdaderas; -a est implcito, por lo tanto puede ingresar <c1> <c2> <c3> ... si quiere que todas las pruebas <c1>, <c2>, ... sean verdaderas. <c1> -o <c2>: Verdadero si <c1> o <c2> o ambos son verdaderos. Note que -o tiene una precedencia menor que -a, por lo tanto si desea, por ejemplo, los archivos que verifican los criterios <c1> o <c2> y verifican el criterio <c3>, tendr que usar parntesis y escribir ( <c1> -o <c2> ) -a <c3>. Debe escapar (desactivar) los parntesis, ya que si no lo hace el shell los interpretar! -not <c1>: Invertir la prueba <c1>, por lo tanto -not <c1> es verdadero si <c1> es falso.
Ing. Ivan Ferreira

54

El sistema de archivos

Finalmente, puede especificar una accin para cada archivo encontrado. Las acciones ms usadas frecuentemente son:

-print

Simplemente imprime el nombre de cada archivo en la salida estndar. Esta es la accin predeterminada si Ud. no especifica accin alguna. Muestra en la salida estndar el equivalente de archivo que encuentra.
ls -ilds

-ls -exec <comando>

para cada

Ejecutar el comando <comando> sobre cada archivo encontrado. La lnea de comandos <comando> debe terminar con un ;, que deber desactivar para que el shell no lo interprete; la posicin del archivo se representa con {}. Igual que -exec pero pedir confirmacin para cada comando.

-ok <comando>

Ejemplos: Digamos que quiere encontrar todos los directorios en /usr/share. Entonces ingresar:
$ find /usr/share -type d

Suponga que tiene un servidor HTTP, todos sus archivos HTML estn en /var/www/html, que coincide con su directorio corriente. Ud. desea encontrar todos los archivos que no se modificaron en el ltimo mes. Debido a que tiene pginas de varios autores, algunos archivos tienen la extensin html y otros la extensin htm. Desea mover estos archivos en el directorio /var/www/obsolete . Entonces ingresar:
$ find \( -name "*.htm" -o -name "*.html" \) -a -mtime -30 -exec mv {} \ /var/www/obsolete \;

Est bien, este es uno un poco complejo y requiere una pequea explicacin. El criterio es este: \( -name "*.htm" -o -name "*.html" \) -a -mtime -30 que hace lo que queremos: Encuentra todos los archivos cuyos nombres terminan con .htm o con .html \( -name "*.htm" -o -name "*.html" \) , y (-a) que no han sido modificados en los ltimos 30 das, lo que es ms o menos un mes (-mtime -30). Note los parntesis, aqu son necesarios, porque -a tiene una precedencia mayor. Note tambin que los parntesis estn desactivados para el shell. Y finalmente, est el comando a ejecutar para cada uno de los archivos: -exec mv {} /var/www/obsolete \; Aqu tambin, tiene que desactivar el ; para el shell, ya que de no ser as el shell lo interpretara como un separador de comandos. Si no lo hace, find se quejar que le falta un argumento a -exec.
55 Ing. Ivan Ferreira

El sistema de archivos

bzip2 y gzip: comandos de compresin de datos Al principio, bzip2 haba sido escrito como un reemplazo de gzip. Sus relaciones de compresin generalmente son mejores, pero por otra parte, toma ms memoria. La razn por la cual todava est aqu gzip es que todava es ms usado que bzip2. Ambos comandos tienen una sintaxis similar:
gzip [opciones] [archivo(s)] gunzip [opciones] [archivo(s)] bzip2 [opciones] [archivo(s)] bunzip2 [opciones] [archivo(s)]

Si no se especifica un nombre de archivo, tanto gzip como bzip2 esperarn datos de la entrada estndar y enviarn los resultados a la salida estndar. Por lo tanto, puede usar ambos programas en tuberas. Tambin ambos programas tienen un conjunto de opciones en comn:
-1 .. -9 -d -c

Configuran el nivel de compresin. A mayor nmero, mejor compresin, pero mejor tambin significa ms lenta. Descomprimir el(los) archivo(s). Esto es equivalente a usar bunzip2.
gunzip

Volcar el resultado de la compresin/descompresin de los archivos dados en la lnea de comandos a la salida estndar.

Ahora, algunos ejemplos. Digamos que quiere comprimir todos los archivos que terminan con .txt en el directorio actual usando bzip2, entonces usar:
$ bzip2 -9 *.txt

Los archivos quedarn con un nombre que termina en .bz2.


$ gzip -9 *.txt

Los archivos quedarn con un nombre que termina en .gz. Para descomprimir los archivos utilice los comandos
bunzip2

y gunzip respectivamente.
zip, arj

Tambin existen otros utilitarios de compresin para GNU/Linux tales como rar.

56

Ing. Ivan Ferreira

El sistema de archivos

El comando zip El comando


zip

tambin es muy utilizado. La sintaxis del comando

zip

es la siguiente:

zip [opciones ...] [archivo_zip archivo1 archivo2 ... ]

Para comprimir archivos con el comando zip ejecute:


$ zip archivo.zip archivo1 archivo2 archivo3

Para comprimir todo un directorio ejecute el comando:


$ zip -r archivo.zip directorio

Para listar el contenido de un archivo zip utilice el comando:


$ unzip -l archivo.zip

Para descomprimir un archivo ejecute:


$ unzip archivo.zip

Copias de seguridad con el comando tar Al igual que find, tar es un utilitario Unix de larga data, y como tal, su sintaxis es un poco especial. La sintaxis es:
tar [opciones] [archivos...]

Entre las opciones encontramos:


c x t v

Esta opcin se usa para crear nuevos paquetes (respaldos) tar. Esta opcin se usa para extraer los archivos de un paquete tar existente. Listar los archivos de un paquete tar existente. Esto simplemente listar los archivos mientras se agregan o se extraen de un paquete, o, en conjuncin con la opcin t (ver arriba), imprime un listado largo de archivo en vez de uno corto. Crear, extraer o listar los archivos del paquete <archivo>. Si <archivo> es un dispositivo de cinta, como /dev/st0, se listar el contenido del medio. Si el parmetro archivo es - (un guin, la entrada o la salida (dependiendo de si est creando un archivador o extrayendo de uno) ser asociado con la entrada estndar o la salida estndar.

f <archivo>

57

Ing. Ivan Ferreira

El sistema de archivos
c z j p

Esta opcin se usa para crear nuevos paquetes (respaldos) tar. Le dice a tar que el paquete a crear debe comprimirse con gzip, o que el paquete del que se quiere extraer est comprimido con gzip. Le dice a tar que el paquete a crear debe comprimirse con bzip2, o que el paquete del que se quiere extraer est comprimido con bzip2. Cuando se extraen archivos de un paquete, preservar todos los atributos del archivo, incluyendo pertenencia, ltimo tiempo de acceso, y as sucesivamente. Muy til para los volcados del sistema de archivos.

Ejemplos: Hace una copia de seguridad de todos los archivos del directorio personal de jose al archivo /tmp/backup_home.tar:
$ tar cvf /tmp/backup_home.tar /home/jose

Lista el contenido de la copia de seguridad:


$ tar tvf /tmp/backup_home.tar

Restaura la copia de seguridad:


$ tar xvf /tmp/backup_home.tar

Tambin es posible restaurar tan solo algunos archivos especficos de la copia de seguridad, para ello, debe especificar como un argumento ms al comando tar x el nombre del archivo y su ruta, as como se muestra en el comando tar t. Por ejemplo:
$ tar xvf /tmp/backup_home.tar home/jose/miarchivo.txt

La ubicacin donde los archivos son restaurados depende de el comando con el que fueron salvados los archivos. Si se utiliz una ruta absoluta para especificar la lista de archivos, se restauran en su ubicacin original, si se utiliz una ruta relativa para especificar la lista de archivos, se restaurarn en una ruta a partir del directorio actual. El Linux por defecto remueve la raz (/) de los archivos especificados con ruta completa. Nombres de archivos comprimidos comunes y programas asociados Al obtener de Internet o recibir un archivo que debe ser descompactado en Linux, identifique el programa a utilizar segn el nombre del archivo:

58

Ing. Ivan Ferreira

El sistema de archivos
.gz .bz2 .tar.gz o .tgz

Archivo comprimido con gzip. Archivo comprimido con bzip2. Empaquetado con tar y comprimido con gzip. Utilice gunzip para descomprimir el archivo, luego el comando tar, o utilice tar con la opcin z para realizar ambos pasos de una sola vez. Empaquetado con tar y comprimido con gzip2. Utilice bunzip2 para descomprimir el archivo, luego el comando tar, o utilice tar con la opcin j para realizar ambos pasos de una sola vez. Archivo comprimido con zip. Comprimido con el comando compress. Utilice el comando uncompress para descomprimirlo. Generalmente no se instala por defecto en Linux debido a su pobre habilidad de compresin.

.tar.bz2

.zip .Z

59

Ing. Ivan Ferreira

6 El editor vi

El editor vi

Acerca de esta unidad


En esta unidad se cubren los siguientes tpicos:

Iniciando vi Movimientos del cursor Entrando y saliendo del modo insercin Cambiando, borrando, copiando y pegando texto Deshaciendo cambios " Grabando y saliendo Filtrando texto por medio de comandos Linux Buscando, reemplazando y usando de expresiones regulares

61

Ing. Ivan Ferreira

El editor vi

El editor vi
Ejecutar vi El comando vi es utilizado editar archivos de texto. Para ejecutar vi, simplemente tiene que teclear las letras vi seguidas del nombre de fichero que desea crear. Ver a una pantalla con una columna de tildes (~) en el lado izquierdo. vi esta ahora en modo de comando. Cualquier cosa que teclee ser a interpretado como un comando, no como texto que usted desea escribir. Para introducir texto, tiene que teclear un comando. Los dos comandos de entrada bsicos son los siguientes:
i a

Insertar texto a la izquierda del cursor. Aadir texto a la derecha del cursor.

Dado que esta al comienzo de un fichero vaco, no importa cual de estos usar. Escriba uno de ellos, y despus teclee el siguiente texto :
Las pulgas grandes tienen pequeas pulgas<Intro> sobre sus espaldas para que les muerdan.<Intro> Y las pulgas pequeas tienen pulgas mas pequeaas<Intro> <Esc>

Fijese que tiene que pulsar la tecla Esc para finalizar la insercin y volver al modo de comando. Comandos de movimiento del cursor Si bien el Linux es posible desplazarse con las teclas de direccin, es recomendado que aprenda a utilizar las siguientes teclas para mover el cursor dentro del vi:
h j k l

Mueve el cursor un espacio a la izquierda. Mueve el cursor hacia abajo. Mueve el cursor hacia arriba. Mueve el cursor un espacio a la derecha.

Estos comandos se pueden repetir manteniendo la tecla pulsada. Intente mover el


62 Ing. Ivan Ferreira

El editor vi

cursor por el texto ahora. Si intenta un movimiento imposible, por ejemplo, pulsar la tecla k cuando el cursor esta en la lnea superior, la pantalla parpadear a momentneamente o el terminal sonar. Borrar texto

x D dw

Borra el caracter que hay en el cursor. Borra toda la lnea desde la posicin actual del cursor. Borra la palabra que est delante del cursor. Puede indicar mas de una palabra usando d<n>w, siendo <n> la cantidad de palabras que desea borrar. Borra toda la lnea en la que se encuentra el cursor.

dd

Mueva el cursor a la primera lnea y ubquelo de modo que est sobre la n. Pulse la letra x , y la n desaparecer. Ahora pulse la letra i para cambiarse al modo de insercin y vuelva a teclear la n. Pulse Esc cuando haya terminado. Mueva el cursor a la ltima lnea y presione la tecla dd. Este comando borrara toda la lnea sobre la cual est situado. Cambiar texto

r cw

Cambia (reemplaza) el caracter que hay en el cursor. Cambia toda la palabra que est por delante del cursor.

Mueva el cursor a la primera lnea y ubiquelo de modo que est sobre la letra P de la primera palabra pulgas. Pulse la letra r, y el caracter al cual desea cambiar. No necesita volver a pulsar la tecla Esc debido a que no ha entrado en modo edicin. Ahora site el cursor en la segunda lnea al comienzo de la palabra pequeas. Pulse la letra c seguido de w (cw), ahora podr cambiar toda esa palabra por la que desee. Pulse Esc cuando haya terminado. Deshaciendo y rehaciendo cambios

63

Ing. Ivan Ferreira

El editor vi
u :redo

Deshacer la operacin (undo). Reehacer la operacin (Comando ex). Repetir la ltima accin.

Si desea deshacer algn cambio que haya realizado, presione la tecla Esc y a continuacin la tecla u. Si desea rehacer un cambio que deshizo, presione la tecla Esc, luego la tecla dos puntos : y escriba la palabra redo. La tecla . Puede utilizarla para repetir la ltima accin realizada, sea cual fuera que fu. Grabando y saliendo

:w q q! wq wq!

Grabar el archivo. Salir. Salir sin guardar las modificaciones. Guardar y salir. Guardar y salir omitiendo la proteccin de escritura. Slo posible para el propietario del archivo y root.

Asegrese de que est en modo de comando pulsando la tecla Esc. Ahora pulse :w. Esto salvar a su trabajo escribindolo a un fichero de disco. El comando para salir de vi es q. Si quiere combinar el salvar y salir, escriba :wq. Para salir sin guardar los cambios que ha realizado, presione la tecla Esc y luego :q!. Cortando, copiando y pegando

cc yy p

Corta una lnea y cambia a modo insercin. Copia una lnea. Puede indicar <n>yy para copiar <n> lneas. Pega una lnea por debajo del cursor.

64

Ing. Ivan Ferreira

El editor vi

Otras operaciones tiles

o O A I J

Inserta una lnea por debajo del cursor y cambia a modo insercin. Inserta una lnea por encima del cursor y cambia a modo insercin. Agregar texto al final de la lnea. Agregar texto al inicio de la lnea. Unir la lnea inferior con la lnea en la cual est posicionada el cursor.

Buscando, reemplazando y usando de expresiones regulares vi le permite buscar una cadena de texto en el buffer de edicin.
/Linux ?Linux n N J

Busca hacia la derecha y abajo la siguiente instancia de la palabra Linux. Busca hacia la izquierda y arriba la siguiente instancia de la palabra Linux. Repite la ltima bsqueda. Repite la ltima bsqueda en direccin opuesta. Unir la lnea inferior con la lnea en la cual est posicionada el cursor.

La cadena en el comando / or ? puede ser una expresin regular. Los caracteres especiales de una expresin regular son: Bsqueda y sustituciones usa el modo de comandos de ex para llevar a cabo bsquedas y sustituciones. Todos los comandos que empiezan con dos puntos son comandos en modo ex.
vi

Los comandos de bsqueda y sustitucin permiten que se usen expresiones regulares sobre un rango de lneas y sustituir la tira de caracteres que se busca. El usuario puede pedir confirmacin antes de que se realice la sustitucin. Para buscar y sustituir una lnea utilice la siguiente sintaxis:
:<linea_inicial>,<linea_final>s/<texto_a_buscar>/<texto_de_sustitucion>/g

El significado de cada campo, en orden a partir del primero:

65

Ing. Ivan Ferreira

El editor vi
<linea_inicial> <linea_final>

A partir de qu numero de lnea se realizar la bsqueda. Utilice . para indicar desde la lnea actual. Hasta qu lnea se realizar la bsqueda. Utilice . para indicar hasta la lnea actual y $ para indicar a hasta el final del documento. El texto que se busca. El texto que reemplazar a al texto buscado. Realice los cambios en todas las concordancias. Solicitar confirmacin antes de efectuar un reemplazo.

<texto_a_buscar> <texto_de_sustitucion> g c

Ejemplos de bsqueda y reemplazo: Desde el inicio hasta el final, buscar y sustituir los por Los:
:1,$s/los/Los/g

Igual al anterior, utilizando % en lugar de 1,$ para indicar en todo el documento:


:%s/los/Los/g

Borra el contenido de la lnea actual hasta la quinta, buscando cualquier concurrencia de cualquier carcter usando expresiones regulares (^.*) y reemplazando por nada (//):
:.,5s/^.*//g

Sustituye los" con Los" solicitando confirmacin antes de hacer la operacin:


:%s/los/Los/c

Borra los primeros cuatro caracteres de cada lnea, buscando los primieros 4 caracteres de cada lnea usando expresiones regulares (^....) y reemplazando por nada //:
:%s/^....//g

66

Ing. Ivan Ferreira

7 El intrprete de comandos BASH

El intrprete de comandos BASH

Acerca de esta unidad


En esta unidad se cubren los siguientes tpicos

El shell BASH Variables de ambiente Volviendo a llamar a comandos Expansin de la linea de comandos Valores de retorno de los comandos Sobrenombres Funciones del shell Scripts de inicializacin y finalizacin Historial bsqueda de comandos previamente ejecutados

68

Ing. Ivan Ferreira

El intrprete de comandos BASH

El intrprete de comandos BASH


GNU Bourne-Again Shell y las variables de en Bash es un interprete de comandos que ejecuta las rdenes ledas desde la entrada estndar o desde un archivo. Las variables de entorno son variables que se almacenan en memoria durante la ejecucin del shell BASH. Los procesos tienen sus variables de entorno y el shell le permite verlas directamente con el comando echo. Algunas variables interesantes son:
HOME:

esta variable de entorno contiene una cadena de caracteres que representa su directorio personal.
PATH:

esta variable contiene la lista de todos los directorios en los cuales el shell busca los ejecutables cuando Ud. ingresa un comando. Note que predeterminadamente, a diferencia de DOS , el shell no buscar los comandos en el directorio corriente!
USER: UID: PS1:

esta variable contiene una cadena que representa su nombre de conexin.

Contiene su identificador de usuario (UID)

contiene la definicin de su prompt. Generalmente, es una combinacin de secuencias especiales. Puede leer la pgina man bash para ms informacin.
PS2:

contiene la definicin de su prompt secundario. El prompt secundario aparece cuando no se ha finalizado un comando.

Para hacer que el shell muestre el valor de una variable, debe anteponer al nombre de la misma un $. Aqu, el comando echo lo ayudar:
echo "Realizando copia de seguridad del directorio $HOME" tar cvf /tmp/$USER.tar $HOME

Como puede ver, el shell substituye el valor de la variable antes de ejecutar el comando. El comando anterior mostrar un mensaje indicando se est realizando una copia de seguridad, luego ejecutar la copia de seguridad con el comando tar del directorio HOME del usuario que ejecut el comando a un archivo llamado /tmp/<nombre_usuario>.tar.

69

Ing. Ivan Ferreira

El intrprete de comandos BASH

Es posible visualizar la lista completa de variables definidas con el comando

set

o env.

Para definir una variable de ambiente, sta debe ser exportada al shell, de otra forma el shell no tendr conocimiento de la variable. Por ejemplo, puede utilizar los siguientes comandos para modificar la variable PATH:
$ PATH=$PATH:/usr/local/bin $ export PATH

o
$ export PATH=$PATH:/usr/local/bin

Estos comandos hacen que la variable agregando el directorio /usr/local/sbin.

PATH

tenga el mismo valor que tena antes


unset:

Para eliminar la definicin de una variable de ambiente se ejecuta el comando


$ unset VARIABLE

Las variables son muy utilizadas en los scripts del shell. Volviendo a llamar a comandos Puede verse que con las teclas de las flechas para arriba y para abajo. Ud. puede remontarse hasta un nmero de comandos previamente ejecutado igual al definido en la variable de entorno HISTSIZE. Es ms, el histrico es persistente de una sesin a otra, por lo que no va a perder los comandos que ingres en una sesin previa. Las teclas de las flechas izquierda y derecha mueven el cursor hacia la izquierda y hacia la derecha en la lnea corriente, por lo que puede editar sus comandos de esta forma. Pero hay ms en materia de edicin: Ctrl+a y Ctrl+e, por ejemplo, lo llevarn al comienzo y al final, respectivamente, de la lnea corriente. Las teclas Backspace 3 y Supr funcionan como se espera. Un equivalente de Backspace es Ctrl+h y un equivalente de Supr es Ctrl+d. Ctrl+k borrar toda la lnea desde la posicin del cursor hasta el final de la misma, y Ctrl+w borrar la palabra delante del cursor. Ingresar Ctrl+d en una lnea en blanco le har cerrar la sesin corriente, lo cual es mucho ms corto que tener que ingresar exit. Ctrl+c interrumpir el comando en curso de ejecucin, excepto si se encuentra en el proceso de edicin, en cuyo caso interrumpir la edicin y lo devolver al prompt. Ctrl+l borra la pantalla. Finalmente,
70

estn

Ctrl+s

Ctrl+q.

Estas

secuencias

de

teclas

sirven,

Ing. Ivan Ferreira

El intrprete de comandos BASH

respectivamente, para suspender y reanudar el flujo de caracteres sobre una terminal. No son muy usadas, pero sin embargo, puede ocurrir que ingrese Ctrl+s por error (despus de todo, s y d estn muy cerca una de la otra en el teclado...). Entonces, si presiona las teclas pero no ve aparecer caracter alguno en la terminal, primero intente Ctrl+q y preste atencin: aparecern en la pantalla todos los caracteres juntos que ingres entre el Ctrl+s no deseado y Ctrl+q. Puede volver a ejecutar un comando por medio del uso de el caracter de admiracin (!). Ejemplo:
$ ls -la /tmp $ touch /tmp/archivo $ !ls

Expansin de la linea de comandos El completado es una funcionalidad muy til, y todos los shells modernos (bash, inclusive) la tienen. Su rol es darle al usuario el menor trabajo posible. La mejor manera de ilustrarlo es con un ejemplo. Suponga que su directorio personal contiene un archivo cuyo nombre es archivo_con_un_nombre_muy_largo, y Ud. quiere visualizarlo. Suponga que Ud. tambin tiene en el mismo directorio otro archivo denominado archivo_texto. Ud. est en su directorio personal. As que Ud. ingresa la secuencia siguiente:
$ less ar<TAB>

Es decir, ingresa less ar y luego presiona la tecla TAB. El shell ahora extender la lnea de comandos por Ud.:
$ less archivo_

y tambin le dar la lista de elecciones posibles (en su configuracin predeterminada, que se puede personalizar). Luego ingrese la siguiente secuencia de teclas:
less archivo_c<TAB>

y el shell extender la lnea de comandos para darle el resultado que Ud. quiere: less archivo_con_un_nombre_muy_largo Entonces, todo lo que necesita hacer es presionar la tecla Intro para confirmar y leer el archivo. Tambin puede completar comandos, digitando el comienzo del comando y luego presionando TAB.

71

Ing. Ivan Ferreira

El intrprete de comandos BASH

Finalmente puede autocompletar nombres de equipos, usuarios o variables de ambiente anteponiendo los caracteres ~, @ y $ respectivamente. Valores de retorno de los comandos Los comandos devuelven un cdigo de retorno 0 si el comando termina correctamente, o un nmero entre 1 y 255 segn la razn de falla. La pgina del man del comando puede dar informacin acerca de las variables de retorno, por ejemplo, la del fsck. El cdigo de retorno del ltimo comando queda en una variable llamada '?', que se interroga como $?. Por ejemplo:
$ ls $ echo $? 0 $ ls /no ls: /no: No such file or directory $ echo $? 1

Sobrenombres Los sobrenombres o aliases son definiciones de sinnimos o atajos a comandos frecuentemente utilizados, por ejemplo:
$ alias ll=ls -la

Define el alias ll, ahora al ejecutar ll, se ejecutar el comando Para eliminar la definicin de un alias se utiliza el comando

ls -la.

unalias.

Para mostrar los aliases definidos ejecute el comando alias sin opciones. Para mostrar un alias especfico ejecute el comando con el nombre del alias, por ejemplo:
$ alias ll

Scripts de inicializacin y finalizacin Existen tres ficheros en el directorio de un usuario que tienen un significado especial para el shell Bash. Estos ficheros permiten al usuario configurar el entorno de su cuenta automticamente cuando entra en el sistema, cuando arranca un subshell o ejecutar comandos cuando sale del sistema. Los nombres de estos ficheros son .bash_profile, .bashrc y .bash_logout. Si ninguno de estos ficheros existe en el directorio del usuario, /etc/profile es utilizado por el
72 Ing. Ivan Ferreira

El intrprete de comandos BASH

sistema como fichero de configuracin de bash.

es el el mas importante de los tres. Es ledo y los comandos incluidos en el, ejecutados, cada vez que el usuario entra en el sistema. Cualquier cambio hecho en este fichero no tendr efecto hasta que salgamos y entremos en el sistema de nuevo. Una alternativa para no tener que salir del sistema es ejecutar el comando source .bash_profile.
.bash_profile $ cat .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs BASH_ENV=$HOME/.bashrc USERNAME="" PATH=$PATH:/usr/local/pgsql/bin MANPATH=$MANPATH:/usr/local/pgsql/man PGLIB=/usr/local/pgsql/lib PGDATA=/usr/local/pgsql/data export USERNAME BASH_ENV PATH MANPATH PGLIB PGDATA

es ledo cuando el usuario arranca un subshell, escribiendo por ejemplo en la linea de comandos. Esto nos permite ejecutar diferentes comandos para la entrada al sistema o para la ejecucin de un subshell.
.bashrc bash $ cat .bashrc # .bashrc # User specific aliases and functions alias ll=ls -la alias rm=rm -i # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi

es el fichero ledo por Bash, cuando salimos del sistema. Podemos definir, por ejemplo que se borren los ficheros temporales creados en nuestra ultima sesin o registrar el tiempo que hemos estado utilizando el sistema. Si .bash_logout no existe, ningn comando sera ejecutado a nuestra salida.
.bash_logout $ cat .bash_logout # ~/.bash_logout clear

73

Ing. Ivan Ferreira

El intrprete de comandos BASH

Historial El comando history nos permite visualizar la lista de comandos ejecutados previamente. Existen variables de entorno que controlan el comportamiento del historial.
HISTSIZE: HISTFILE:

El nmero de comandos a recordar. El archivo en el cual se almacena el historial, por defecto ~.bash_history.

Si se define a ignorespace, las lneas de comando que comienzan con espacio no se guardan en el historial. La opcin ignoredups evita que comandos duplicados se guarden de forma independiente y la combinacin de ambas opciones es ignoreboth.
HISTCONTROL:

Bsqueda de comandos previamente ejecutados Presionando las teclas CTRL+r, podemos buscar comandos ejecutados previamente. Una vez introducido el patrn, presionando CTRL+r repetidamente iremos recuperando los comandos que concuerden con el patrn. El comando fc puede ser utilizado para listar, recuperar y editar comandos previamente ejecutados. Opciones comunes:
-l -n

Lista los ltimos comandos ejecutados. Edita el comando n de la lista.

Substitucin de comandos La sustitucin de comandos permite que la salida de un comando sea tratada como si fuese escrita en la lnea de comandos. La substitucin de comandos sucede cuando es encerrado de la siguiente forma:
$(comando)

O entre comillas invertidas:


`comando`

Bash realiza la expansin ejecutando el comando y reemplazando el comando con la salida estndar del comando. Por ejemplo:
$ tar cvf /tmp/$USER.tar $(find $HOME -name *.odt)

74

Ing. Ivan Ferreira

El intrprete de comandos BASH

En el ejemplo anterior, el comando find se ejecutar primero y la salida de ste ser utilizado por el comando tar. De esta forma, estamos indicando a tar que haga una copia seguridad de todos los archivos .odt que pueda encontrar en el directorio HOME o cualquier subdirectorio de ste del usuario que ejecuta el comando. En el siguiente ejemplo, se crear un archivo tar que contenga la fecha actual anexado al nombre del archivo:
$ tar cvf /tmp/$USER-$(date +%m-%d-%Y).tar $HOME

En el ejemplo anterior, el comando date es ejecutado primero y el resultado utilizado por el comando tar, de esta forma se anexa al nombre del archivo tar la fecha actual en formato MM-DD-AAAA.

75

Ing. Ivan Ferreira

8 Redirecciones y tuberas

Redirecciones y tuberas

Acerca de esta unidad


En a unidad se cubren los siguientes tpicos:

Descriptores de archivos, entrada, salida y error estndar Redireccionando la entrada y la salida Sobrescritura y agregado de las redirecciones Redireccionando el error estndar Redireccionando la salida estndar y el error estndar

77

Ing. Ivan Ferreira

Redirecciones y tuberas

Redirecciones y tuberas
Descriptores de archivos, entrada, salida y error estndar Cuando un programa Linux desea utilizar un archivo, primero debe abrir ese archivo. Cuando hace esto, el Linux asociar un nmero con el archivo. Este nmero, el cual es usado por el programa cuando lee o escribe a un archivo, es el descriptor de archivo. Un programa tpico abrir tres archivos cuando inicia. Esto archivos son:

Entrada estndar - standard input (stdin) Salida estndar - standard output (stdout) Error estndar - standard error (stderr)

La entrada estndar tiene un descriptor de archivo 0, salida estndar utiliza el 1, y el nmero 2 es usado por el error. En general, estos tres descriptores estn asociados con la terminal desde la cual se inici el proceso, siendo el teclado la entrada. El objetivo de las redirecciones y las tuberas es redirigir estos descriptores. Redireccionando la entrada y la salida Suponga, por ejemplo, que Ud. quiere una lista de los archivos que terminan en .png en el directorio imagenes. Esta lista es muy larga, por lo que Ud. desea almacenarla en un archivo para consultarla a gusto ms tarde. Puede ingresar el comando siguiente:
$ ls imagenes/*.png 1> lista_de_archivos

Esto significa que la salida estndar de este comando (1) se redirecciona (>) al archivo denominado lista_de_ archivos. El operador > es el operador de redireccin de la salida. Si el archivo de redireccin no existe, se crea, pero si existe se sobre-escribe su contenido. Sin embargo, el descriptor predeterminado que redirecciona el operador > es la salida estndar y no es necesario especificarla en la lnea de comandos. Entonces podra haber escrito simplemente:
$ ls imagenes/*.png > lista_de_archivos

78

Ing. Ivan Ferreira

Redirecciones y tuberas

y el resultado ser exactamente el mismo. Luego, puede mirar el archivo usando un paginador de archivos de texto tal como less. Imagine ahora que Ud. quiere saber cuantos de estos archivos hay. En vez de contarlos a mano, puede usar el utilitario denominado wc (Word Count, Contador de palabras) con la opcin -l, que escribe en la salida estndar el nmero de lneas en el archivo. Una solucin es la siguiente:
$ wc -l 0 < lista_de_archivos

y esto da el resultado deseado. El operador < es el operador de redireccin de la entrada, y el descriptor redirigido por defecto es el de la entrada estndar, es decir, 0, y Ud. simplemente tiene que escribir la lnea:
$ wc -l < lista_de_archivos

Redireccionando el error estndar Tambin puede ser til redirigir el error estndar. Por ejemplo, desea saber a cuales directorios de /shared no tiene acceso: una solucin es listar este directorio recursivamente y redirigir los errores a un archivo, a la vez que no se muestra la salida estndar:
$ ls -R /shared > /dev/null 2> errores

lo que significa que se redireccionar la salida estndar (>) a /dev/null, un archivo especial donde todo lo que escribe se pierde (es decir que, como efecto secundario, no se muestra la salida estndar) y el canal de error estndar (2) se redirecciona (>) al archivo errores. Esto es muy til al momento de realizar copias de seguridad agendadas o automatizadas. Por ejemplo con el comando tar, usted puede crear una copia de seguridad de los archivos de su directorio personal de la siguiente forma:
$ tar cvf /tmp/$USER.tar $HOME > /tmp/$USER.log 2 > /tmp/$USER.errs

En el archivo <nombre_usuario>.log obtendr informacin de qu archivos fueron salvados correctamente, y en el archivo <nombre_usuario>.errs ser un registro de errores que ocurrieron durante la copia de seguridad. Sobrescritura y agregado de las redirecciones Cada vez que redireccionamos la salida estndar o el error estndar a un archivo, por defecto este se sobreescribe. Si no deseamos que los archivos se sobreescriban y queremos concatenar el resultado de un comando, redireccionar de la siguiente
79 Ing. Ivan Ferreira

Redirecciones y tuberas

forma: Para redireccionar stdout, utilice >>, por ejemplo:


$ ls -l > lista $ ls -l >> lista

Para redireccionar stderr, utilice 2>>, por ejemplo:


$ ls -l /root 2> lista $ ls -l /root 2>> lista

Redireccionando la salida estndar y el error estndar Si desea que tanto los mensajes de informacin como los mensajes de error sean redireccionados al mismo archivo debe utilizar la siguiente sintaxis:
$ comando > archivo 2>&1

Esta forma de redireccin indica programa que enve los mensajes dirigidos al error estndar al mismo lugar que enva los mensajes salida estndar. Por ejemplo:
$ tar cvf /tmp/$USER.tar $HOME > $USER.log.err 2>&1

Tuberas En el mundo Linux, las tuberas (tambin conocidas como pipes) relacionan la salida estndar de un comando con la entrada estndar de otro comando. Por ejemplo, existen varias opciones disponibles con el comando ls, pero qu pasa si la visualizacin del contenido de un directorio es demasiado rpida como para verla? Vamos a ver el contenido del directorio /etc/ con el comando:
$ ls -al /etc

Cmo podemos visualizar tranquilamente la salida antes de que desaparezca de la pantalla? Una forma es entubando la salida a una utilidad llamada permite ver la informacin por pginas (en la pantalla). Use la barra vertical (|) para entubar comandos.
80 Ing. Ivan Ferreira
less,

un paginador que

Redirecciones y tuberas

$ ls -al /etc | less

De esta manera ver el contenido de /etc/ en una pantalla a la vez. Si desea saber cuantos archivos de tipo pdf existen en su directorio personal, puede utilizar el siguiente comando:
$ ls -l *.pdf | wc -l

La salida del comando ls muestra la lista de archivos pdf, uno por cada linea, y el comando wc -l cuenta la cantidad de lineas resultantes, obteniendo as la lista de archivos existentes.

81

Ing. Ivan Ferreira

9 Filtros y procesamiento de cadenas

Filtros y procesamiento de cadenas

Acerca de esta unidad


En esta unidad se cubren los siguientes tpicos

Contando palabras, lineas y caracteres Ordenando informacin Imprimiendo lineas no duplicadas Imprimiendo columnas y campos Visualizando las primeras lneas de archivos Visualizando las ltimas lneas de archivos Realizando seguimiento de archivos Uniendo archivos

83

Ing. Ivan Ferreira

Filtros y procesamiento de cadenas

Filtros y procesamiento de cadenas


Concepto de filtro Linux ofrece una amplia gama de herramientas capaces de gestionar la informacin contenida en ficheros de texto. Los filtros son rdenes que operan sobre estructuras de datos (ficheros) y proporcionan como salida modificaciones sobre la entrada. Por tanto, son rdenes de gestin de la informacin contenida en ficheros. Los filtros leen el fichero de entrada y escriben el resultado de su operacin sobre la salida estndar. Cada orden de gestin de informacin o filtro realiza unos cambios propios sobre la informacin del fichero de entrada, que dependen del programa especfico utilizado. En general, los filtros nunca modifican el fichero de entrada, simplemente escriben el resultado en la salida estndar. Si se desea que el resultado se almacene en otro fichero deber redireccionarse esta salida. Existen gran variedad de filtros, desde los ms sencillos que operan ligeras modificacines, hasta los ms potentes que llevan a cabo operaciones complejas de manipulacin de informacin, prximas a las manipulaciones de los editores de texto o de las bases de datos. Traduccin de caracteres Traduce o asigna caracteres de un archivo desde una forma a otra. Por ejemplo se puede usar tr para convertir todos los tabuladores en espacios. Este comando permite hacer un slido manejo de caracteres con una estructura bastante sencilla. La sintaxis es:
tr: tr [-d] [-s] [de_cadena] [a_cadena] -d -s

Suprime los caracteres de la cadena inicial. Suprime las repeticiones consecutivas.

Ejemplos: Sistituir : por nueva lnea (line feed):


$ echo $PATH | tr ":" "\n"

84

Ing. Ivan Ferreira

Filtros y procesamiento de cadenas

Remover todos los espacios en blanco de un archivo:


$ tr -d "[:space:]" /etc/hosts

Convertir todas las minsculas en maysculas:


$ tr [:lower:] [:upper:]

Paginador de la salida por impresora El comando pr formatea un archivo y lo visualiza en la salida estndar, aunque el formateo se realiza pensando en la impresora. La sintaxis es:
pr: pr [+pgina] [-columnas] [-m] [-d] [-ncancho] [-wn] [-ln] [-h cadena] [-t] [lista_archivos]

Los nombres de la lista de archivos deben estar delimitados por espacios. Si se deja en blanco, se lee la entrada estndar.
+pagina -columnas -d -nancho

Empieza a imprimir desde la pgina especificada. El valor predeterminado es 1. Especifica un nmero de columnas de salida. Dividiendo la pantalla en tantas partes como indique el nmero. Hace que la salida est a doble espacio. Numera las lneas. c es el caracter que se sita entre el nmero de lnea y la salida normal, el valor predeterminado es el tabulador, ancho es el valor del nmero de posiciones de caracteres + 1 que ocupa el nmero, el valor predeterminado es 5. Establece la longitud de la lnea a n columnas. Para salida en forma de columnas el valor predeterminado es 72. Esta opcin da algunos problemas. Establece la longitud de la pgina en n lneas. El valor predeterminado es 66. El nmero no puede ser inferior a 10. En vez del nombre de archivo, es la cabecera que muestra por defecto, utiliza cadena como cabecera. No imprime la cabecera ni el pie de pgina. Normalmente se imprime una cabecera y un pie de pgina de cinco lneas.

-wn

-ln -h <texto> -t

Ejemplos: Imprime dos archivos en columnas separadas:


$ pr -m -t README1 README2 This is the This is the

85

Ing. Ivan Ferreira

Filtros y procesamiento de cadenas


1st file. 2nd file.

Lista archivos y directorios en dos columnas con doble espaciado:


$ ls -a | pr -t -a -c2 -d

Inserta una cabecera personalizada al texto:


$ pr -h 'Instrucciones de Instalacion' README.txt | lpr

Mostradores de ficheros por porciones: tail y head El comando tail permite visualizar el final de un archivo de texto o hacer el seguimiento del crecimiento de este. La sintaxis es:
tail [-lneas] [-f] [fichero]

-lineas

Es un nmero que representa a las lneas del archivo que se empieza a visualizar. Si a este nmero le precede el signo -, el desplazamiento est relacionado con el final del archivo. Si se utiliza el +, el desplazamiento est relacionado con el comienzo del archivo. Si no se especifica nada, muestra las 10 ltimas lneas. Cuando se utiliza esta opcin y la entrada no es estndar, tail controla el crecimiento del archivo. Esto es un bucle de salida sin fin y tiene que ser terminado con la tecla de interrupcin.

-f

El comando

head

muestra la porcin inicial de un fichero. La sintaxis es:

head [-lneas] [fichero]

-lineas

Es el nmero de lneas a imprimirse desde el principio del archivo. El valor predeterminado es 10.

Ejemplos: Muestra las primeras seis lneas del archivo


$ head -6 archivo.txt archivo.txt

Muestra las ltimas 25 lneas del archivo archivo.txt


$ tail -25 archivo.txt

86

Ing. Ivan Ferreira

Filtros y procesamiento de cadenas

Hace un seguimiento al archivo de registro debug.log


$ tail -f debug.log

El comando de ordenacin ordena las lneas de la entrada estndar. Tiene multitud de opciones, entre las que podemos destacar:
sort: -n -r -u -f -b -k pos1[,pos2]

Ordenacin numrica. Por defecto es alfabtica. Orden inverso. Elimina las lneas duplicadas. Ordena sin distinguir maysculas y minsculas. Ignora los espacios en blanco. Indica la posicin de las claves de ordenacin. El formato de la clave se especifica siguiendo el formato pos1[,pos2], donde el campo consiste en la parte de la lnea entre pos1 y pos2 comenzando desde 1. Por tanto, para ordenar por el segundo campo, utilizara -k 2,2. Si indica pos2 entonces se ordena a partir del segundo campo hasta el final de la lnea.

Ejemplos: Utilice el comando cat para visualizar el archivo /etc/passwd, este archivo posee campos delimitados por dos puntos :, cada campo tiene su significado. Haremos con el archivo las siguientes operaciones: Ordenar el archivo alfabticamente utilizando toda la lnea como campo de ordenamiento:
$ sort /etc/passwd

Ordenar en forma inversa, utilizando el primer campo para el ordenamiento (nombre de usuario) utilizando como delimitador de campos dos puntos (:):
$ sort -t ":" -r -k 1,1 /etc/passwd

Ordenar por el tercer campo, en formato numrico y de forma inversa, utilizando como delimitador de campos dos puntos (:) :
$ sort -t ":" -nr -k 3,3 /etc/passwd

87

Ing. Ivan Ferreira

Filtros y procesamiento de cadenas

Supresin de lneas repetidas Este comando quita las lneas que son idnticas, produciendo una sola lnea de salida. El comando uniq asume que el archivo ya est ordenado puesto que las lneas que son iguales deben ser adyacentes. La sintaxis es:
uniq: uniq [opciones ...] [fichero_entrada] [fichero_salida]

El fichero_entrada se refiere al nombre del archivo que se va a leer, si no se especifica asume la estndar. La salida es el fichero que se va a crear con el resultado. Si no se especifica es la estndar. La salida, si se especifica, no puede ser la misma que la entrada.
-u -d

Slo muestra las lneas que no estn repetidas. Muestra slo las lneas que estn repetidas.

Ejemplos: Lista los nombres de todos los alumnos de la case A y la clase B, ordenando alfabticamente y mostrando solamente las lneas repetidas:
$ cat alu_claseA alu_claseB | sort | uniq -d

Elimina los nombres repetidos del archivo alu_claseA.uniq como resultado:


$ uniq alu_claseA > alu_claseA.uniq

alu_claseA

y crea un archivo

El comando de seleccin de campos del fichero Este comando extrae campos de una lista de archivos. Los campos pueden estar definidos como posiciones de caracteres o relativamente con un separador de campo. El separador por defecto es el tabulador. La sintaxis es la siguiente:
cut: cut [-c <caracteres> | -f <campos> ] [-d <separador> ] [-s] [lista_archivos]

88

Ing. Ivan Ferreira

Filtros y procesamiento de cadenas


-c <caracteres>

Muestra los caracteres especificados por los nmeros (posiciones) de la lista. Puede ser una lista separada por comas, un rango separado por guiones o una combinacin de ambos. Por ejemplo son vlidos: 1,4,5,1-4 y 1-4,5-10,10,25. Muestra los campos especificados mediante los nmeros de la lista. Los campos se distinguen por un caracter separador. Si se repite el separador varias veces seguidas, no se tratan como un separador. Para indicar la lista se hace con la misma sintaxis de los caracteres. Especifica el separador de campo. Un caracter de tabulacin es el valor predeterminado. El separador puede ser cualquier caracter. Suprime las lneas que no tienen separador de campo.

-f <campos>

-d <separador> -s

Ejemplos: Mostrar el primer caracter de cada lnea del archivo:


$ cut -c 1 /etc/passwd

Mostrar el primer, quinto y desde el dcimo a vigsimo caracter del archivo:


$ cut -c 1,5,10-20 /etc/passwd

Muestra el segundo campo del archivo passwd siendo el delimitador dos puntos ::
$ cut -d : -f 2 /etc/passwd

Muestra el tercer campo de un archivo cuyos campos estn separados por espacios:
$ cut -d -f 3 /etc/passwd

Muestra a partir del tercer campo en adelante:


$ cut -d : -f 2- /etc/passwd

El comando de fusin de campos de diferentes ficheros Produce una salida en forma de columnas desde uno o ms archivos, donde cada archivo proporciona una columna de la salida, paste se utiliza frecuentemente con cut para reordenar columnas de un archivo. Si no se especifica nada en contra la salida es la estndar. La sitanxis es:
paste: paste [-d <caracter>] [-s] [lista_archivos]

89

Ing. Ivan Ferreira

Filtros y procesamiento de cadenas


-d <caracter> -s

Especifica el caracter que se utiliza para delimitar cada columna. El valor predeterminado es el tabulador. Pegar un archivo a la vez en lugar de en paralelo.

Ejemplos: Suponga los siguientes archivos:


$ cat nombres Juan Carlos David Jose $ cat direcciones Peru y Artigas Palma y Estrella Oliva y Alberdi Estrella y Coln

Para unirlos ejecute el comando:


$ paste nombres direcciones Juan Carlos David Jose Peru y Artigas Palma y Estrella Oliva y Alberdi Estrella y Coln

Para este caso, los campos estn separados por un tabulador. Para usar un caracter diferente use -d. Para pegar lneas del mismo archivo use la opcin -s:
$ paste -s Juan Carlos David Jose

90

Ing. Ivan Ferreira

10 Expresiones regulares

Expresiones regulares

Acerca de esta unidadad


En esta unidad se cubren los siguientes tpicos:

Bsqueda de patrones con expresiones regulares Comodines Combinacin de expresiones regulares Bsqueda de patrones dentro de archivos Editores fuera de lnea, sed y awk

92

Ing. Ivan Ferreira

Expresiones regulares

Expresiones regulares
Expresiones regulares Las expresiones regulares son cadenas de caracteres (unos normales y otros con significados especiales) que representan un conjunto de cadenas ms complejo en forma de expresiones simples. Debido a que muchos de los caracteres que utilizan expresiones regulares tienen significados especiales en el shell es mejor encerrar la expresiones entre comillas. Las comillas simples ' son las ms seguras, pero a menudo las comillas dobles " son suficientes. En los casos sencillos no es necesario que el patrn est entrecomillado. Correspondencia de principio y fin de lnea Un caracter circunflejo (^) que aparece al principio de una cadena se corresponde con el comienzo de una lnea. Similarmente, el signo dlar ($) al final de una cadena se corresponde con el fin de lnea. No hay ningn caracter especial que se corresponda a un salto de lnea, aunque s es posible identificar una lnea vaca. Por ejemplo:
"^patron" "dado$" "^lugar$" "^$"

Aparicin de la palabra patron al principio de una lnea del fichero. Aparicin de la palabra dado al final de una lnea del fichero. Lnea que slo contiene la palabra lugar. Una lnea vaca.

Correspondecia con cualquier caracter El punto (.) tiene un significado especial y se corresponde con cualquier caracter (incluidos caracteres especiales, dgitos, espacios en blanco, etc.). Ejemplos:
"a..."

Aparicin de una a seguida por tres caracteres cualesquiera, precedidos y acabados por espacio (es decir, aquellas palabras de cuatro letras que comienzan con a como alla, a12%, etc.). Lneas que acaban en una palabra de cuatro letras que empieza por a y terminan con .log.

"a...\.log$"

93

Ing. Ivan Ferreira

Expresiones regulares
"a..."

Aparicin de una a seguida por tres caracteres cualesquiera, precedidos y acabados por espacio (es decir, aquellas palabras de cuatro letras que comienzan con a como alla, a12%, etc.). Lneas que contienen nicamente palabras de al menos tres caracteres que empiezan por AM y acaban en espacio (el punto podra representar otro espacio).

"^AM. $"

Conjuntos de caracteres Los caracteres encerrados entre corchetes [] especifican un conjunto de caracteres que van a ser buscados. Dentro del corchete, un signo menos - entre dos caracteres especifica un rango. Notar que dicho rango tiene que ser ascendente; de lo contrario se pierde la interpretacin. Si el caracter ^ aparece entre corchetes adquiere el significado de negacin del conjunto ([^]). Ejemplos:
"[a-z]" "[a-z]...\.log$" "^[^a-z]" "[-ab]$"

Todas las minsculas. Lneas que acaban en una palabra de cuatro letras que empieza por una letra de la a a la z y terminan con .log. Lneas que no comiencen por letras minsculas (que comiencen con algo distinto de letras minsculas). Concuerda con el caracter -, a, b al final de la lnea.

Correspondencia repetida de patrones A veces interesa buscar un patrn que se repite un nmero determinado de veces. Esta especificacin del nmero de repeticiones se conoce como cierre y su formato general es {n,m} donde n es el nmero mnimo de repeticiones y m el nmero mximo. Si falta n se toma como 1 y si falta m se toma como infinito. Estn disponibles algunas formas abreviadas que suelen utilizar casi todos los programas de manipulacin de textos.

94

Ing. Ivan Ferreira

Expresiones regulares
* + ?

Equivale a {0,} significando que el patrn que le precede va a ser repetido cero o ms veces. Equivale a {1,} significando que el patrn que le precede va a ser repetido una o ms veces. Equivale a {0,1} significando que el patrn que le precede puede ser repetido slo cero o una vez.

Ejemplos: Correspondencia con pp, papa, paaapa, paaeeepeee, pepe, peeepeee:


"pa*pa*"

Correspondencia con papa, paaapaa y paaeeepeee:


"pa+pa+"

Correspondencia con pp y papa:


"pa?pa?"

Anulacin del significado especial de un caracter El caracter de barra invertida (\) delante de otro caracter anula el significado especial de este ltimo. Ejemplo: Aparicin de un punto seguido de una '\' en una cadena:
"\.\\"

Grupos de caracteres Pueden formarse grupos de caracteres cuando stos se encierran entre parntesis (). De esta forma se pueden tratar palabras. Dentro de grupos de caracteres puede utilizarse el caracter de barra vertical '|' para separar opciones alternativas. Ejemplos: Lneas que contienen la palabra pa o papa o papapa y as sucesivamente:
"(pa)+"

95

Ing. Ivan Ferreira

Expresiones regulares

Lneas en que aparece la cadena 'J. L.' o 'J. M.':


"J. (L.|M.)"

Bsqueda de patrones dentro de archivos La familia grep forma un conjunto de tres utilidades para la bsqueda en ficheros de patrones regulares de caracteres.
grep|egrep|fgrep [opciones] [patron] [file] [> file.out]

Hay tres programas en la familia. grep es el primero que apareci y localiza patrones regulares con alguna particularidad. fgrep realiza una bsqueda muy rpida pero los patrones estn delimitados. egrep es una forma extendida de grep que busca patrones regulares de forma completa aunque ello conlleva lentitud de proceso. El comando
-c -i -l -n -s -v -w -f <archivo> -E grep

tiene las siguientes opciones:

Visualiza slo el nmero de lneas en las que coincide el patrn. No hace distincin entre maysculas y minsculas al realizar comparaciones. Visualiza slo los nombres de fichero en las que coincide. Visualiza el nmero de lnea antes de cada lnea. Suprime la visualizacin de los mensajes de error. Visualiza slo aquellas lneas en las que no coinciden con el patrn. Busca el patrn como palabra. Toma el patrn de fichero y no de la lnea de comandos. Modo extendido. Permite expresiones regulares extendidas.

Los patrones utilizan expresiones regulares. Ejemplos: Obviamente, el ejemplo ms simple es la bsqueda de una cadena sobre un fichero. En estos casos es ms potente utilizar fgrep ya que al tratar sobre cada lnea por separado, sin guardar nada en el buffer, puede trabajar sobre ficheros enormes y adems de forma rpida. Por ejemplo, para buscar la palabra root en el archivo /etc/passwd utilice:
# fgrep root /etc/passwd

96

Ing. Ivan Ferreira

Expresiones regulares

Para buscar slo la lnea que comienza con root en el mismo archivo utilice:
# grep ^root /etc/passwd

Un problema muy frecuente es el de conocer cules son los directorios que hay en nuestro directorio de trabajo (sobre todo si el directorio de trabajo contiene muchos ficheros). Una forma simple es:
$ ls -l | grep "^d"

Para buscar archivos que contengan la palabra verdadero o cierto ejecute en el directorio actual:
$ egrep -l "verdadero|cierto" *

Buscando archivos segn su contenido Ahora que ya conoce de expresiones regulares, el comando find y el comando grep, podemos agrupar estas funciones de tal modo a encontrar archivos que contengan un texto dado. Utilizaremos el comando find para buscar archivos regulares y ejecutaremos el comando grep en cada archivo encontrado para verificar si existe la cadena de texto buscada. Por ejemplo:
$ find / -type f -exec grep -l "<patron>" {} \:

El comando find buscar todos los archivos regulares a partir de la raz y pasar el resultado al comando grep, el cual solo mostrar el nombre del archivo (-l) que contenga el patrn dado. Editores fuera de lnea Existen ocasiones en las que el uso de un editor de textos como el vi o emacs puede ser demasiado o no cumplen con lo que queremos realizar. Tal vez se tengan que hacer cambios repetitivos a archivos o tener que procesar datos de una fuente y enviarlos a otro archivo en un orden correcto o tal vez solo queremos una forma simple de hacer el trabajo desde un script o la lnea de comandos. Es aqu donde entran a trabajar los editores fuera de lnea y para nombrar solo 2 veremos el editor de flujo sed y el lenguaje de programacin awk (por Alfred Aho,Peter Weinberg y Brian Kernighan). Lo especial de awk es que es un lenguaje con todas las letras y muy poderoso, pero en ocasiones nos facilitar tareas tediosas de procesamiento de informacin y por esto lo ponemos en el rango de un editor fuera de lnea. Aunque
97 Ing. Ivan Ferreira

Expresiones regulares

esto no quiere decir que es lo nico que puede hacer. Editor de flujo sed No es preciso detallar en demasa el uso de este editor fuera de lnea dada que posee mucha similitud en su uso al editor de textos vi pero si es bueno mostrar algunas de sus funciones y usos tanto en el procesamiento desde un script o en la lnea de comandos. Existen 3 casos especficos en los que se podr usar Sed. 1. Para editar archivos muy largos para editar interactivamente. 2. Para editar archivos de cualquier tamao cuando la secuencia de comandos de edicin es muy complicada para hacer el tipeado confortable en ambiente interactivo. 3. Para usar mltiples funciones globales de edicin eficientemente en un solo paso Existen diferentes formas de realizar una edicin con el sed. Puede hacerse desde la lnea de comando o simplemente guardndolos en un archivo para poder ser usado luego. sed lee la entrada lnea a lnea y realiza los cambios a estas de acuerdo a lo que se le especifique. Luego de hacer estos cambios dirige su salida hacia stdout, la cual puede ser redireccionada. sed acta en forma similar a filtros como el grep y sort pero con la diferencia que con sed se podrn crear programas mas complicados y con una mayor cantidad de funciones. Para definir una estructura de uso del sed veremos 2 formas distintas. La primera es la utilizada en la lnea de comandos a travs de una canalizacin y que tendr esta estructura:
comando | sed <opciones> <descripcin_de_la_edicin>

La segunda opcin para su uso a partir de la lnea de comandos:


sed -f script_de_edicin <archivo>

Con la opcin -f le decimos a sed que a continuacin le pasaremos un archivo donde encontrara las reglas a aplicar en <archivo>. Sed tiene mucho que ver con el editor vi en el rea de bsqueda y reemplazo donde la estructura es la siguiente:
[direccion1 [,direccion2]] descripcion_de_la_edicion [argumentos]

Las direcciones sern reglas que el sed tendr que encontrar en el texto, si se omitieran estas sed realizara en caso de ser posible los cambios en forma global. La descripcion_de_la_edicion indica a sed los cambios que tiene que hacer.

98

Ing. Ivan Ferreira

Expresiones regulares

Por ejemplo, la siguiente instruccin:


/Restringido/ s/\/bash/\/rbash/

Puede estar en un archivo guardado para ser pasado al sed con la opcin -f, sustituye la primera aparicin de "/bash" por "/rbash" en las lneas que contengan "Restringido". Como el patrn de bsqueda contiene el carcter /, ste es escapado usando la barra invertida \ (\/bash). Cuando se ingresan dos direcciones, el cambio se comenzara a efectuar en la lnea que concuerde la primer direccin y se ira aplicando a todas las siguientes hasta que concuerde con la segunda direccin. Las dos direcciones se separan con coma. Por ejemplo
10,30 s/entrada/salida/

Har una sustitucin de "salida" por "entrada" a partir de la lnea n 10 hasta la lnea n 30. Si las direcciones tiene al final un signo "!" (negado) el comando solo se aplicar a aquellas lneas que no concuerden con la direccin dada. Por ejemplo:
10,30! s/entrada/salida/

Este comando se aplicar a todas la lneas, menos a las que estn entre la nmero 10 y la 30 inclusive. Por ejemplo si quisiramos mostrar por la salida estndar las lneas de una archivo que estn entre la 20 y la 40, podremos dar a sed los argumentos necesarios:
$ cat archivo | sed -n "20,40p"

El -n indica a sed que imprima solo las lneas que concuerden con los argumentos pasados, dado que evita que se impriman todos los dems. El comando "p" es para imprimir el patrn que encuentra sed. Existen veces que queremos tener partes de archivos que concuerden con un patrn determinado, por ejemplo, si quisiramos mandar todos los comentarios de un archivo llamado archivo a otro y sabemos que las lneas que lo son comienzan con "#" podemos usar un comando en sed que haga el trabajo por nosotros de forma muy simple:
$ cat archivo | sed -n "/^#/w archivo2"

Debe existir un espacio exacto entre la "w" y el "archivo2" Con el -n indicamos a sed que solo procese las lneas que concuerdan con la direccin que le pasaremos. Con el smbolo "^" le decimos a sed que tiene que encontrar la direccin al principio de la lnea. Y con la w le indicamos que escriba la salida al archivo2.

99

Ing. Ivan Ferreira

Expresiones regulares

Si deseamos eliminar todas las lneas que son comentarios de un archivo utilizaremos el comando d:
$ cat archivo | sed -n "/^#/d"

El awk EL awk es un poderoso lenguaje de programacin que en muchas ocasiones nos sacara de apuros a la hora de tener que hacer script complejos de tratamiento de texto. El awk al igual que el sed lee las lneas completas para realizar sus modificaciones. Uno de los aspectos mas tiles en relacin al awk es que a diferencia del "sed", awk puede dividir las lneas en campos a travs de un separador de campo indicado en el script o en la lnea de comandos. Si no se indica ninguno se tomara como separador de campo un espacio o tabulador. Usando la opcin -F de la lnea de comandos o la variable FS desde un programa hecho en awk se puede especificar un nuevo separador de campo. Por ejemplo si lo que quisiramos es ver los UID que aparecen en el archivo /etc/passwd primero tendramos que saber como separar los campos. En el archivo /etc/passwd se separan por un ":". Ahora tendramos que saber en que campo se encuentra el UID. Es en el campo numero 3, comenzando a contar como el primero de los campos. El 0 es la lnea completa:
$ awk -F : '{print $3}' /etc/passwd

Como vemos lo primero que hicimos fue indicarle al awk cual seria el separador de campo "-F :", luego entre comillas le indicamos que imprima a la salida estndar el campo n 3, '{print $3}'. De esta forma vemos los nombres contenidos en el archivo /etc/passwd. Podramos imprimir mas de un campo a la vez:
$ awk -F : '{print $1,$3,$4}' /etc/passwd

Podramos adems incluir texto adicional al resultado del comando, por ejemplo:
$ awk -F : '{print "Usuario:",$1,"UID:",$3,"GID",$4}' /etc/passwd

Todo el proceso gira en torno a la comparacin de todas las lneas del archivo, la sintaxis es, en general, de la forma:
expresin { accin }

Si la evaluacin de la expresin resulta positiva, se realiza la accin asociada. Por ejemplo, si deseamos mostrar los usuarios del archivo mayor a 500 utilizaremos la siguiente sintaxis:
$ awk -F : '$3 >= 500 { print $1,$3,$4 }' /etc/passwd /etc/passwd

cuyo

UID

es

100

Ing. Ivan Ferreira

Expresiones regulares

Algunos de los operadores que awk puede manejar son los siguientes:
< <= == != >= >

Menor que. Menor o igual que. Igual a. Diferente a. Mayor o igual que. Mayor que.

Otra posibilidad es el usar expresiones regulares para efectuar la bsqueda. Por ejemplo:
$ awk -F : '/^root/ { print $0 }' /etc/passwd

Este comando mostrar toda la lnea que comienza con root. Lo nico que tendremos que hacer es encerrarlo entre barras "/" para que se tomen como expresin regular. Variables del awk Existen diferentes variables integradas, que permiten llevar cuentas de distintos aspectos. Por ejemplo existe la variable NR que llevara la cuenta de los registros que mostremos. Por ejemplo supongamos que necesitamos obtener un listado largo de un directorio, pero solo queremos ver los permisos, el nombre del archivo y el nmero de registro que a pasado por el awk:
$ ls -l | awk '{ print NR,$1,$9}'

Existen muchas ms variables en el awk que son de extrema utilidad. Por ejemplo, en el caso anterior sabamos que el ultimo campo estaba en la posicin nmero 9, pero que ocurre si no sabemos la posicin del ltimo campo o esta varia? Para esto esta la variable NF que lleva la cuenta de la cantidad de campos de cada registro. Por ello en lugar de la anterior forma podramos poner:
$ ls -l | awk '{ print NR,$1,$NF}'

y obtendramos idnticos resultados. Pero un momento, aqu hay algo raro. La variable NR no tiene el signo $, en cambio la variable NF si lo tiene. Esto esta dado as para que no sea reemplazado por el awk. Por ejemplo si hubisemos puesto la variable NF sin signo $, lo que nos esta mostrando no es el ltimo campo, sino la cantidad de campos que ese registro tiene. Esto es, a diferencia del shell, el smbolo de dlar es utilizado para referenciar campos, no para utilizar el valor de las variables.

101

Ing. Ivan Ferreira

Expresiones regulares

Las siguientes variables predefinidas son comnmente utilizadas:


FS

(Field separator). Contiene el caracter que indica a awk en qu punto del registroacaba un campo y empieza el siguiente. Por omisin es un espacio. Se puede indicar un caracter alternativo mediante una instruccin de asignacin como FS = /. Si se deja vaco, cada lectura se realiza dejando un caracter en cada campo. (Number of fields). Contiene el nmero total de campos que contiene el registro que se est leyendo en cada momento. (Record separator).C ontiene el caracter que indica a awk en qu punto del archivo acaba un registro y empieza el siguiente. Es \n por omisin. (Number of record). Contiene el nmero de orden del registro que se est procesando en cada momento. (Output FS). Contiene el separador de campos para la salida generada por awk. La instruccin print inserta en la salida un caracter de separacin cada vez que aparece una coma en el cdigo. (Output RS). Contiene el caracter que awk escribir al final de cada registro. Es \n por omisin.

NF RS NR OFS

ORS

Para redefinir una variable utilice la opcin -v del awk, por ejemplo:
$ awk -v FS=: -v OFS=\t '{ print $1,$3,$4 }' /etc/passwd

El comando anterior redefine las variables predeterminadas FS y OFS indicando que el separador de campos de entrada es : y el separador de campos de salida es un tabulador. Programacin en awk El awk puede ser usado no slo en una lnea. Podramos usarlo tambin como cualquier otro lenguaje para realizar mltiples tareas en una lnea o realizar algo antes de comenzar la lectura y otra despus. Para demarcar el cdigo se utiliza los pares BEGIN-END. Todo lo que aparece despus de la palabra BEGIN, pero en el mismo rengln, se realiza antes de que comience el ciclo, es decir, antes que se procese el texto. Cualquier cosa que este despus de END se realiza despus de que se haya ledo la ltima lnea y cerrado el ciclo. Estas lneas tendrn que estar en un archivo que ser utilizado por el awk para procesar en este ejemplo al archivo /etc/passwd. Un ejemplo seria el siguiente:
BEGIN { FS=":"} { print "Nombre Completo:",$5 } { print "Nombre de Usuario:",$1}

102

Ing. Ivan Ferreira

Expresiones regulares
{ print "UID:",$3,"GID:",$4 } { print " " } END { print "Total de usuarios:", NR}

Este pequeo programa realizado con el vi ser guardado en el archivo awk.src, el nombre se lo damos nosotros, y nos servir para mostrar algunos datos del /etc/passwd mas detalladamente. La forma de ejecutarlo es a travs del modificado "-f" donde le decimos al awk que a continuacin le pasaremos un archivo con el programa que tiene que usar para procesar el /etc/passwd.
$ awk -f awk.src /etc/passwd

Otro ejemplo podra ser este que utiliza disco:

awk

para verificar el estado del espacio en

BEGIN { ALERTA = 70 CRITICO = 90 } $5 >= ALERTA && $5 <= CRITICO { print "Atencion:",$6,"Uso:",$5"%" } $5 >= CRITICO { print "Critico:",$6,"Uso:",$5"%" }

Luego ejecute el comando:


$ df |tr -d % | awk -f /tmp/awk.src

Y obtendr un reporte indicando los sistemas de archivos que se encuentran en estado de alerta o crtico.

103

Ing. Ivan Ferreira

11 Scripts del shell

Scripts del shell

Acerca de esta unidad


En esta unidad se cubren los siguientes tpicos:

Nociones bsicas de scripts Creando scripts en shell Haciendo ejecutable a los scripts Generacin de salida a pantalla Manejando la entrada por teclado Estados de salida Ejecucin condicional Ciclos Saliendo de los ciclos Usando los parmetros posicionales

105

Ing. Ivan Ferreira

Scripts del shell

Scripts del shell


Conceptos bsicos de scripts del shell El shell de Linux es programable y permite la creacin de programas normalmente conocidos como scripts. Una vez creado un archivo de script, es conveniente cambiar el modo del archivo a ejecutable, para ello ejecute el comando:
$ chmod 755 archivo.bash

Entonces para ejecutar un archivo script, introduzca la ruta al archivo. El script se ejecutar en un nuevo shell. Si desea que el script se ejecute en el shell actual, llame al archivo de la siguiente forma:
. archivo.bash

Como en cualquier lenguaje de programacin, en bash hay una serie de caracteres y palabras reservadas que tienen un significado especial. Los caracteres especiales ms comunes Como en cualquier lenguaje de programacin, en bash hay una serie de caracteres y palabras reservadas que tienen un significado especial:
#!/bin/bash

Todos los scripts de shell empiezan con esta linea, que sirve para decirle al sistema operativo que se trata de un fichero ejecutable y que sepa cual es el intrprete que lo tiene que interpretar. Comentario, todo lo que haya tras l en una lnea es ignorado. Separa dos comandos. Seguido del nombre de un fichero, hace que el contenido de ese fichero sea interpretado por la shell como si fuese parte del script, es como un #include de C o el comando source del bash. Las comillas dobles y simples tienen un funcionamiento distinto como se describe ms abajo. Comillas invertidas y $(), se ejecuta lo que hay entre ellos como un comando y se sustituye su salida. Escapa al siguiente carcter.

# ; .

' y " ` o $() \

106

Ing. Ivan Ferreira

Scripts del shell

Comillas dobles: En general los caracteres especiales no son interpretados cuando estn entre comillas dobles. Sin embargo algunos de ellos s son interpretados:

$: Esta permitido referenciar variables dentro de las comillas dobles. \: Se pueden escapar caracteres. `: Se puede realizar sustitucin de comandos, esto es, ejecutar un comando y sustituir la cadena por su salida.

Comillas simples: Dentro de las comillas simples todos los caracteres son interpretados literalmente, ninguno de los caracteres especiales conserva sus significado dentro de ellas. Comillas invertidas: Poner una cadena entre comillas invertidas supone ejecutar su contenido como un comando y sustituir su salida.

read Lee una cadena de la entrada estndar y la asigna a una variable. Ejemplo:
echo -n "Introduzca un valor para VAR1: " read VAR1 echo "El valor de VAR1 es $VAR1"

Tambin puede usarse read para detener momentneamente la ejecucin de un programa.


echo "Presione ENTER para continuar..." read

Parmetros posicionales Es un tipo de variable de shell, almacenan los parmetros de entrada de un script. Tienen los nombres 0, 1, 2, ...y sus valores son $0, $1, $2... La variable # contiene el nmero de parmetros posicionales sin contar con el 0. La variable $ contiene el identificador del proceso bash que corri el script. Ejemplo:
if [ $# -eq 0 ] then echo "Debe especificar al menos un argumento"

107

Ing. Ivan Ferreira

Scripts del shell


echo "Uso: $0 usuario" exit 1 else ps -u $1 exit 0 fi

Primero se comprueba si no se ha dado un argumento al script procesos, si no, se despliega un mensaje de cmo debera ejecutarse el comando y termina con un cdigo de error. Si se ha especificado un argumento, se toma el primer parmetro posicional, el cual contiene el valor del argumento dado y se lo pasa al comando a ser ejecutado. Tests de ficheros Estos tests toman como argumento el nombre de un fichero y devuelven verdadero (0) o falso (1):
-e -f -d -h -r -w -x

Verdadero si el fichero existe. Comprueba que el fichero es un fichero regular (que no es ni un directorio, ni un dispositivo). Devuelve verdadero si se trata de un directorio. Cierto si el fichero es un enlace simblico. Cierto si se tiene permiso para leer el fichero. Cierto si se tiene permiso para escribir el fichero. Cierto si se tiene permiso para ejecutar el fichero.

Ejemplos:
if [ -x /bin/ls ] then echo el fichero es ejecutable fi if [ -e /var/run/proceso ] then echo El proceso ya se est ejecutando fi

Tests de comparacin de enteros Toman dos valores y devuelven verdadero o falso:

108

Ing. Ivan Ferreira

Scripts del shell


-eq -ne -gt -ge -lt -le

Igual a. No es igual a. Mayor que. Mayor o igual que. Menor que. Menor o igual que.

Ejemplo: Este script verifica la cantidad de sesiones de un usuario, si tiene mas sesiones a las establecidas, entonces se lo no se le permite el inicio de sesin. El script deber ser llamado desde el /etc/profile:
LIMIT=2 SESSIONS=`who | grep $USER | wc -l` if [ $SESSIONS -gt $LIMIT ] then echo "Usted ya tiene $SESSIONS activas echo No se permiten nuevos inicios de sesion" exit 0 fi

Tests de comparacin de cadenas Comparan dos cadenas y devuelven verdadero o falso.


= == != < y >

Comparacin de igualdad. Comparacin de desigualdad. El operador ! se puede colocar delante de cualquier test para negar su resultado. Menor que y mayor que.

Ejemplo:
if [ "$USER" != "root" ] then echo "Usted debe ser root para ejecutar este programa" else tar cvf /dev/st0 / fi

Condicionales Las condicionales permiten efectuar comandos basndose en el resultado de los tests.
109 Ing. Ivan Ferreira

Scripts del shell

if [ test 1 ] then Bloque 1 elif [ test 2 ] then Bloque 2 else Bloque 3 fi

Este es el modelo ms general con todas las opciones posibles. Si el valor de retorno de test 1 es 0 (verdadero), las lneas de comandos de "Bloque 1" sern ejecutadas. El resto del bloque if ser ignorado en ese caso. Si el valor de retorno de test 1 no es 0 (por tanto es falso), pero el de test 2 s que es 0, entonces el "Bloque 1" no ser ejecutado, mientras que el "Bloque 2" s que ser ejecutado. El "Bloque 3" ser ignorado. Podemos poner tantos elif como necesitemos. Si ni test 1 ni test 2 ni cualquier otra de otros entonces el "Bloque 3" ser ejecutado.
elif

que pongamos retornan 0,

Usamos fi para terminar la estructura condicional. Las condiciones pueden conformarse por cualquier forma de test. Ejemplos. Este script verifica si un numero introducido es menor, igual o mayor a cinco.
#!/bin/bash echo "Intrduzca un numero: " read NUMERO if [ $NUMERO -lt 5 ] then echo "El numero era menor que 5" elif [ $NUMERO -eq 5 ] then echo "El numero era 5" elif [ $NUMERO -gt 5 ] then echo "El numero era mayor que 5" else echo "No introdujo un numero" fi

Este script verifica si un usuario tiene acceso a un directorio dado. El script puede ejecutarse de dos formas, interactivamente si no se especifica como argumento el directorio o de forma no interactiva, indicando la ruta al directorio como primer argumento.
110 Ing. Ivan Ferreira

Scripts del shell

#!/bin/bash # Uso del script: $0 [ruta_a_dir] # Comprobamos la cantidad de argumentos recibidos # Si no se paso ningun argumento, ejecuta el script # en modo interactivo if [ $# -eq 0 ] then echo -n "Ingrese ruta al directorio: " read DIR # Verificamos que el usurario haya introducido # una ruta, si no, termina el programa con error. if [ -z $DIR ] then echo "Debe introducir una ruta valida" exit 1 fi else DIR=$1 fi # Se verifica si se tiene acceso al directorio cd $DIR > /dev/null 2>&1 # Se verifica if [ $? -eq 0 then echo "Usted else echo "Usted fi el valor de retorno del comando anterior ] tiene acceso a $DIR" no tiene acceso a $DIR"

Bucles Los bucles en bash difieren un poco de lo que son en la mayora de los lenguajes de programacin, pero vienen a cumplir una misin similar; a solucionar el problema de "Quiero que mi script haga esto mientras se de esta condicin", o "Para cada uno de los elementos siguientes, quiero que mi script haga esto otro". As, tenemos dos tipos de bucles diferentes en bash: for y while. Bucles for Su sintaxis bsica es la que sigue:
for VARIABLE in <Lista de valores> do Comando 1 Comando 2 done for (( inicializacion; condicion; incremento )) do Comando 1 Comando 2 done

111

Ing. Ivan Ferreira

Scripts del shell

Ejemplos. Este script obtiene informacin de tres usuarios, root, lp y bin.


for USER in root lp bin do finger $USER done

Este script establece el permiso de ejecucin a todos los archivos del directorio:
for FILE in `ls` do echo "Haciendo ejecutable el archivo $FILE" chmod ugo+x $FILE done

Este script verifica si reponden 5 hosts de la red.


for I in `seq 5` do echo "Haciendo ping a 192.168.0.$I" ping -c 1 192.168.0.$I done

Este script es un simple contador.


for (( i=0; i<10; i++ )) do echo $i done

Bucle while Su sintaxis bsica es la que sigue:


while [ condicion ] do Comando 1 Comando 2 done

Ejemplos. Este script realiza el comando presionando CTRL+C.


while true do df -k sleep 5 done df -k

cada cinco segundos hasta que se cancele

112

Ing. Ivan Ferreira

Scripts del shell

Este script utiliza el comando

expr

para crear un contador que se incrementa de a uno.

CONTADOR=0 while [ "$CONTADOR" -lt 10 ] do echo $CONTADOR CONTADOR=$(expr "$CONTADOR" + 1) done

Este script verifica si un usuario tiene acceso a un directorio dado. Si el usuario no introduce una ruta vlida, el script vuelve a solicitar la ruta al directorio.
#!/bin/bash # Comprobamos la cantidad de argumentos recibidos # Si no se paso ningun argumento, ejecuta el script # en modo interactivo if [ $# -eq 0 ] then echo -n "Ingrese ruta al dir: " read DIR # Verificamos que el usurario haya introducido # una ruta, si no, vuelve a solicitar la ruta. while [ -z $DIR ] do echo -n "Ingrese ruta al directorio: " read DIR done else DIR=$1 fi # Se verifica si se tiene acceso al directorio cd $DIR > /dev/null 2>&1 # Se verifica if [ $? -eq 0 then echo "Usted else echo "Usted fi el valor de retorno del comando anterior ] tiene acceso a $DIR" no tiene acceso a $DIR"

En los bucles break y continue tienen el mismo funcionamiento que en otros lenguajes. break termina el bucle y continue salta a la siguiente iteracin. Case Escribiendo scripts, es muchas veces necesario comprobar si el valor de una variable coincide con alguno de los que nosotros estbamos esperando, y si as es, actuar de una forma u otra dependiendo de este valor. Si bien es posible hacerlo con if, y elif, pero existe otra forma ms eficiente y cmoda de hacer esto: con la estructura case. Se usa como sigue:

113

Ing. Ivan Ferreira

Scripts del shell

case $VARIABLE in valor1) Bloque 1 ;; valor2) Bloque 2 ;; . . . . *) Ultimo Bloque ;; esac valor1 y valor2 son valores que nosotros esperamos que la variable pueda contener, y Bloque 1 y Bloque 2 son los bloques de comandos con lo que queremos que se haga

en cada caso. Podemos poner tantos valores reconocibles como queramos. Los puntos son precisamente para indicar aquello. El * (asterisco) es un comodn exactamete igual que hacamos movindonos entre directorios en captulos anteriores, cualquier cosa que no haya coincidido en alguna de las de arriba coincidir aqu. Esto es completamente opcional. Ejemplo. Este script permite la creacin de un backup si se especifica la opcin -c o create, y lista el backup creado si se indica la opcin -l, -t o --list.
if [ $# -lt 1 ] then echo "Error. Esperaba al menos un parametro" exit 1 fi case $1 in -c|--create) echo "Creando backup de $HOME" tar cvf /tmp/$USER.tar $HOME ;; -l|-t|--list) echo "Listando backup en el archivo /tmp/$USER.tar" tar tvf /tmp/$USER.tar ;; *) echo "Error de sintaxis" echo "Uso: $0 <-c|--create>" echo " $0 <-l|-t|--list>" ;; esac exit 0

Con exit salimos del script, haciendo que el valor devuelto sea 0 (xito) o 1 (error) segn los parmetros fueran reconocidos o no.

114

Ing. Ivan Ferreira

Scripts del shell

Scripts de ejemplo Script utilizado para eliminar archivos mas antiguos a una semana de un directorio especficado:
#!/bin/bash echo Bienvenido $USER echo -n "Introduzca el nombre del directorio donde desea borrar los archivos mas antiguos de una semana: " read DIR cd $DIR 2> /dev/null # Si el valor de retorno es diferente de 0, existio un error. case $? in 0) find $DIR -type f -mtime +7 -ok rm {} \; ;; 1) echo "El directorio que usted introdujo no existe" ;; esac

El siguiente script permite la realizacin de una copia de seguridad del directorio personal. Este script evita la ejecucin simultanea del mismo trabajo de copia de seguridad y los mensajes de informacin y error son registrados a archivos que podrn ser consultados posteriormente.
#!/bin/bash # Definimos los permisos por defecto para los archivos umask 022 # Variables configurables por el usuario # En que directorio se almacenara la copia de seguridad BACKUPDIR=/tmp # A que archivo se hara la copia de seguridad BACKUPFILE=$BACKUPDIR/$USER-`date +%d-%m-%Y`.tar # # # # El backup podria hacerse a cinta en lugar de archivo. Para ello, comente la declaracion anterior de BACKUPFILE y descomente la linea de abajo BACKUPFILE=/dev/st0

# A que archivo se enviaran los mensajes de informacion LOGFILE=$BACKUPDIR/$USER.log # A que archivo se enviaran los mensajes de error ERRFILE=$BACKUPDIR/$USER.errs # Este archivo evita ejecucion simultanea de mas de una tarea de # copia de seguridad para el mismo usuario RUNFILE=/tmp/$USER.run # Inicio del script if [ -e "$RUNFILE" ] then echo "La copia de seguridad para el usuario $USER ya esta en ejecucion" exit 1 else touch $RUNFILE echo "Haciendo copia de seguridad del directorio $HOME" tar cvf $BACKUPFILE $HOME > $LOGFILE 2> $ERRFILE

115

Ing. Ivan Ferreira

Scripts del shell


if [ $? -eq 0 ] then echo "La copia de seguridad ha finalizado sin errores" else echo "La copia de seguridad ha finalizado con errores" echo "El registro de error ha sido enviado a su direccion de correo" mail -s "Errores durante el respaldo" $USER < $ERRFILE fi rm $RUNFILE

fi exit 0

116

Ing. Ivan Ferreira

12 Impresin y comunicacin

Impresin y comunicacin

Acerca de esta unidad


En esta unidad se cubren los siguientes tpicos:

Imprimiendo en Linux Control de la impresora Imprimiendo desde aplicaciones Utilidades de impresin Utilizacin de correo electrnico

118

Ing. Ivan Ferreira

Impresin y comunicacin

Impresin y comunicacin
Imprimir bajo Linux Los usuarios tienen que usar el comando lpr para imprimir un fichero. El comando lpr es responsable de preocuparse por el trabajo inicial para imprimir un fichero, pasando entonces el control a otro programa, cupsd o lpd, el demonio de las impresoras de lneas. Este demonio le dice entonces a la impresora cmo imprimir el fichero. Cuando lpr es ejecutado, primero copia el fichero a un cierto directorio (el directorio de spool) donde el fichero permanece hasta que cupsd/lpd lo imprime. Esto permite que hayan mltiples trabajos a la vez en una cola. Las sintaxis de lpr es bastante familiar:
lpr [ opciones ] [ nombre_fichero ... ]

Si no se especifica un nombre de fichero, lpr asume que la entrada ser efectuada por la entrada estndar (normalmente el teclado o la salida de otro programa). Esto permite que el usuario redirija la salida de un programa al dispositivo de impresin. Por ejemplo:
$ tail /etc/hosts | lpr

El comando lpr acepta varios argumentos en la lnea de comandos que permiten al usuario controlar cmo trabaja. Algunos de los argumentos ms ampliamente usados son:
-P <impresora> -s -# <numero>

Especifica la impresora a usar. Crea un enlace simblico en lugar de copiar el fichero completo al directorio de spooling (til para ficheros grandes). Eespecifica el nmero de copias a imprimir.

Un ejemplo de interaccin con lpr podra ser algo como:


$ lpr -# 2 -sP laser1 archivo

Este comando creara un enlace simblico al fichero archivo en el directorio de spool de la impresora llamada laser1, donde debera ser procesado por cupsd/lpd. Adems
119 Ing. Ivan Ferreira

Impresin y comunicacin

debera imprimir una segunda copia de archivo. Viendo la cola de impresin Algunas veces es til saber qu trabajos estn actualmente en una cola de impresin particular. Esta es la nica tarea del comando lpq. Con la opcin -P puede especificar la cola de impresin que desea verificar. Con la opcin -a puede verificar todas las colas de impresin. Para ver qu hay en la cola de la impresora por defecto utilice:
$ lpq lp is ready and printing Rank Owner Job Files active mwf 31 archivo

Total Size 682048 bytes

Cancelando un trabajo de impresin Otra til caracterstica para cualquier sistema de impresin es la capacidad de cancelar un trabajo que ha sido 'encolado' anteriormente. Para hacer esto, use lprm.
$ lprm -

El comando anterior cancela todos los trabajos de impresin que son propiedad del usuario que envi el comando. Se puede cancelar un trabajo de forma individual obteniendo primero el nmero del trabajo usando lpq, dando entonces el nmero a lprm. Por ejemplo
$ lprm 31

cancelara el trabajo 31 en la impresora por defecto. La variable de entorno PRINTER Todos los comandos del sistema de impresin de Linux aceptan la opcin -P. Esta opcin permite que el usuario especifique que impresora usar como salida. Si un usuario no especifica la impresora a usar, entonces se asumir que la impresora por defecto es el dispositivo de salida. En lugar de tener que especificar la impresora a usar cada vez que se ejecuta un comando de impresin, puede configurar la variable de entorno PRINTER indicando la impresora que desea usar. Esto se hace de diferentes maneras por cada shell. Para el bash puede hacerlo con:
120 Ing. Ivan Ferreira

Impresin y comunicacin

$ PRINTER="nombre_de_impresora"; export PRINTER

Estos comandos pueden ser situados en los scripts de inicio de sesin. Enviar correo electrnico Todo lo que hay que hacer es teclear mail
usuario"

y escribir el mensaje.

Por ejemplo, supongamos que queremos enviar correo a un usuario que se llama sam:
$ mail sam Subject: Documentacion del usuario Solo estoy probando el sistema de correo. [Ctrl-d]

El programa mail es muy simple. Como cat, acepta texto de la entrada estndar, lnea a lnea, hasta que recibe un caracter de fin-de-texto como nico caracter en una lnea: Ctrl-d . As, para enviar nuestro mensaje, tuvimos que pulsar Intro y despus Ctrl-d. Usar mail es la manera ms rpida de enviar correo, y es bastante til cuando se usa con redireccin de entrada y/o salida. Por ejemplo, si quisiramos enviar por correo electrnico el fichero reporte1 a Sam, podramos escribir
$ mail -s "Reporte Numero 1" sam < reporte1

Este comando enviara un correo al usuario sam, el asunto del correo sera Numero 1 y el contenido del correo sera el texto del archivo reporte1. Leer el correo Para leer el correo, debe digitar
$ mail

Reporte

El smbolo peticin de rdenes del programa mail es un &. Las rdenes bsicas de mail son:
h d <lista>

Lista los mensajes recibidos. Borra los mensajes seleccionados. La lista de mensajes consiste en una serie de nmeros separados por espacios, o un rango como 2-5, que equivale a 2 3 4 5.

121

Ing. Ivan Ferreira

Impresin y comunicacin
h s <lista> <archivo> r q

Lista los mensajes recibidos. Guarda los mensajes seleccionados en el archivo indicado. Responder a un mensaje. Salir y guardar los mensajes que han sido ledos y no hayan sido borrados en un fichero llamado mbox en el HOME del usuario.

Para acceder a los mensajes guardados ejecute el comando:


$ mail -f

Un problema del comando mail es que si un mensaje es ms largo que la pantalla, el programa mail no se detiene!. Habr que guardar el mensaje en un fichero y usar more sobre l despus. Redireccin de correo Tambin se puede tener un archivo .forward en su directorio personal. En este archivo puede especificar otra direccin de correo a la cual debern ser reenviados los mensajes que lleguen para usted en este sistema.

122

Ing. Ivan Ferreira

13 Control de procesos y herramientas del sistema

Control de procesos y herramientas del sistema

Acerca de esta unidad


En esta unidad se cubren los siguiente tpicos:

Control de procesos rbol de procesos Las seales Control de trabajos Agendando procesos para su ejecucin Agendando la ejecucin peridica de procesos

124

Ing. Ivan Ferreira

Control de procesos y herramientas del sistema

Control de procesos y herramientas del sistema


El rbol de procesos Al igual que con los archivos, todos los procesos que corren en un sistema GNU/Linux estn organizados en forma de rbol. La raz de este rbol es init. Cada proceso tiene un nmero (su PID, Process ID, Identificador de proceso), junto con el nmero de su proceso padre (PPID, Parent Process ID, Identificador del proceso padre). El PID de init es 1, y tambin su PPID: init es su propio padre. El comando ps es utilizado para mostrar la lista de procesos del sistema. Al enviar este comando sin un argumento se mostrarn solo los procesos iniciados por Ud. en la terminal que est utilizando:
$ ps PID TTY TIME CMD 5162 ttya1 00:00:00 zsh 7452 ttya1 00:00:00 ps

El comando comunes:
a u x w -u <usuario>

ps

tiene una gran cantidad de opciones, y slo veremos las ms

Tambin muestra los procesos iniciados por los otros usuarios. Muestra, para cada proceso, el nombre del usuario que lo inici y la hora a la cual fue iniciado. Tambin muestra los procesos sin terminal de control alguna o con una terminal de control diferente a la que Ud. est utilizando. Salida amplia. Mustra los procesos de un usuario especfico.

La salida de este comando est dividida en campos diferentes: el que ms le interesar es el campo PID, que contiene el identificador del proceso. El campo CMD contiene el nombre del comando ejecutado. Una forma muy comn de invocar a ps es la siguiente:
$ ps aux | less

Esto le da una lista de todos los procesos que se estn ejecutando corrientemente, entonces puede identificar uno o ms procesos que estn causando problemas y, subsecuentemente, puede matarlos.
125 Ing. Ivan Ferreira

Control de procesos y herramientas del sistema

El comando pstree muestra los procesos en forma de estructura de rbol. Una ventaja es que Ud. puede ver inmediatamente quien es el proceso padre de otro: cuando quiere eliminar toda una serie de procesos, y si son todos padres e hijos, es suficiente matar al ancestro comn. Puede usar la opcin -p, que muestra el PID de cada proceso, y la opcin -u que muestra el nombre del usuario que inici el proceso. Como generalmente la estructura de rbol es grande, es ms fcil invocar a pstree de la siguiente manera:
$ pstree -up | less

Esto le da una visin general de toda la estructura de rbol de los procesos. Las seales Cada proceso en Linux puede reaccionar a las seales que se le envan. La seal 15 es la seal que debe enviar a un proceso para finalizarlo normalmente. La seal 9 termina un proceso irrevocablemente, sin darle tiempo de finalizar adecuadamente. Esta es la seal que se deber enviar a un proceso cuando el mismo est trabado o exhibe otros problemas. Se encuentra disponible una lista completa de la seales usando el comando kill kill, killall Estos dos comandos se usan para enviar seales a los procesos. El comando kill necesita el nmero de un proceso como argumento, mientras que el comando killall necesita el nombre de un comando. Los dos comandos opcionalmente pueden recibir el nmero de una seal como argumento. Predeterminada-mente, ambos envan la seal 15 (TERM) a el o los procesos relevantes. Por ejemplo, si quiere matar el proceso con PID 785, Ud. ingresa el comando:
$ kill 785 -l.

Si quiere enviarle la seal 9, entonces ingresa:


$ kill -9 785

Supongamos que quiere matar un proceso del cual Ud. conoce el nombre del comando. En vez de encontrar el nmero de proceso usando ps, puede matar el proceso directamente:
$ killall -9 netscape

126

Ing. Ivan Ferreira

Control de procesos y herramientas del sistema

Pase lo que pase, slo matar a sus propios procesos (a menos que Ud. sea root), por lo que no debe preocuparse acerca de los procesos del vecino que tienen el mismo nombre, ellos no sern afectados. Usando el control de trabajos Control de trabajos se refiere a la habilidad de poner procesos (esencialmente, otra palabra para programas) en background (segundo plano) y ponerlos de vuelta en foreground (primer plano). Esto es como decir, que se quiere ser capaz de ejecutar algo mientras se hacen otras cosas, pero que estn ah otra vez cuando se les quiera decir algo o pararlos. Los dos comandos ms importantes en el shell son fg, para primer plano, y bg, para segundo plano. Para entender como funcionan, use el comando yes en el indicador del sistema.
$ yes

Esto produce el maravilloso efecto de desplazar una larga columna de yes por la parte izquierda de la pantalla, tan rpido que no se pueden seguir. Para pararlo, se podr pulsar Ctrl-C y matarlo, pero esta vez Ud. oprimir Ctrl-Z . Parece haberse detenido, pero habr un mensaje antes del indicador de sistema, ms o menos parecido a este:
[1]+ Stopped yes

Significa que el trabajo yes se ha suspendido en el segundo plano. Se puede hacer que siga ejecutndose tecleando fg en el indicador de sistema, que lo pondr en primer plano otra vez. Si se desea, se pueden hacer otras cosas antes, mientras est suspendido. Pongamos aparte el mensaje que obtuvimos del shell:
[1]+ Stopped yes

El nmero entre corchetes es el nmero de trabajo de este proceso, y se usar cuando se necesite referenciarlo especficamente. (Naturalmente, desde el momento que tengamos en ejecucin mltiples trabajos, se necesita un modo de acceder a cada uno). El +" siguiente indica que se es el trabajo actual" esto es, el proceso ms reciente que se ha movido del primer plano al segundo. Si se tecleara fg", se pondr el trabajo con el +" en primer plano otra vez. (Ms sobre esto despus, cuando se discuta la ejecucin de mltiples trabajos a la vez). La palabra Stopped significa que el trabajo est parado". El trabajo no est muerto, pero actualmente no se ejecuta. Linux lo ha guardado en un estado especial de
127 Ing. Ivan Ferreira

Control de procesos y herramientas del sistema

suspendido, listo para saltar a la accin cuando alguien lo solicite. Finalmente, el es el nombre del trabajo que se ha detenido.

yes

Antes de seguir adelante, matemos este trabajo y lo arrancamos otra vez de forma diferente. El comando se llama kill y se usa del siguiente modo:
$ kill %1 [1]+ Stopped yes $

Ese mensaje sobre el proceso que indica parado" otra vez induce a error. Para saber si an est vivo (eso es, tanto en ejecucin como congelado en un estado suspendido), teclee jobs":
$ jobs [1]+ Terminated yes $

Ahora ya lo sabe: el trabajo ha terminado!. Para enviar directamente un comando a segundo plano sin tener que detenerlo y ejecutar bg, simplemente agregue el smbolo & al final del comando. Por ejemplo:
$ find / -name *tesis* -ls > ls.out &

Agendando la ejecucin peridica de procesos


crontab: crontab

reportar o editar su archivo cron

es un comando que le permite ejecutar comandos a intervalos de tiempo regulares, con la ventaja adicional que no tiene que estar conectado al sistema y que el reporte de salida se le enva por correo electrnico. Los intervalos se pueden especificar en minutos, horas, das, meses o das de la semana. Dependiendo de las opciones,
crontab

actuar diferentemente:

crontab [-u usuario] [-e | -l | -r] crontab [-u usuario] archivo

128

Ing. Ivan Ferreira

Control de procesos y herramientas del sistema


-l -e -r -u <usuario> <archivo>

Mostrar su archivo cron corriente. Editar su archivo cron. Eliminar su archivo cron corriente. Aplicar una de las opciones de arriba para el usuario <usuario>. Slo root puede hacer esto. Las entradas para el cron son ledas desde el archivo especificado.

Comencemos editando un cron. Si ingresa el comando:


$ crontab -e

Estar frente a su editor de texto favorito si tiene definida la variable de entorno EDITOR o la variable de entorno VISUAL, caso contrario se usar vi. Una lnea de un archivo cron se compone de seis campos. Los primeros cinco campos son los intervalos de tiempo para los minutos, horas, das en el mes, meses y das en la semana. El sexto campo es el comando a ejecutar. Las lneas que comienzan con un # se consideran como comentarios y sern ignoradas por crond (el programa que es responsable de ejecutar los archivos crontab). Aqu tiene un ejemplo de entradas cron:
# Si no quiere recibir correo electronico simplemente # "descomente" la siguiente linea # MAILTO="" # # Cada Navidad, enviar un mail a los usuarios del sistema 0 0 25 12 * /bin/mail -s "Feliz Navidad" empresa@linux.com.py < $HOME/feliz_navidad # # Borrar archivos viejos cada martes a las 17 hs... 0 17 * * 2 /usr/bin/find -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1 # # Ejecutar copias de seguridad todos los das a las 18:30 excepto domingos. 30 18 * * 1-6 /usr/local/bin/user_backup.sh # # Verificar el estado de la aplicacin cada 5 minutos */5 * * * * /usr/local/bin/check_status.sh app1

Hay muchas otras maneras de especificar los intervalos aparte de las que se muestran. Por ejemplo, puede especificar un conjunto de valores discretos separados por comas (1,14,23) o un rango (1-15), o un intervalo determinado (*/5) que significa cada cinco. Agendando procesos para su ejecucin
at:

programar un comando, pero solo una vez.

Tambin podra querer ejecutar un comando un da dado, pero no regularmente. Por ejemplo, quiere que se le recuerde de una cita, hoy a las 18 horas. Ud. emplea X , y
129 Ing. Ivan Ferreira

Control de procesos y herramientas del sistema

quiere que se le notifique, por ejemplo, a las 17:30 hs. que debe irse. at es lo que Ud. quiere aqu:
$ at 5:30pm at> xmessage "Hora de irse! Cita a las 6pm" CTRL-D at> <EOT>

Se puede especificar la hora de diferentes maneras:


+<intervalo>: Significa eso, ahora, ms un intervalo opcional. (Si no se especifica el intervalo significa ahora mismo). La sintaxis para el intervalo es <n> (minutes|hours|days|weeks|months). Por ejemplo, puede especificar now + 1 hour (dentro de una hora), now + 3 days (dentro de tres das) y as sucesivamente. now

Especificar la fecha por completo. El parmetro <hora> es obligatorio. at es muy liberal en lo que acepta: por ejemplo, puede ingresar 0100, 04:20, 2am, 0530pm, 1800, o uno de los tres valores especiales: noon (medioda), teatime (la hora del t, 16 hs.) o midnight (medianoche). El parmetro <dia> es opcional.
<hora> <dia>:

Tambin puede indicar una fecha especfica en el formato


MM.DD.AA.

MM/DD/AA, MM/DD/AA

at

tambin acepta opciones diferentes: Imprime la lista de los trabajos que estn programados; el primer campo es el nmero de trabajo. Esto es equivalente al comando atq. Quita el trabajo nmero <n> de la lista. Puede obtener los nmeros de los trabajos con el comando atq o con la opcin anterior. Esto es equivalente al comando atrm <n>.

-l -d <n>

130

Ing. Ivan Ferreira

14 Nociones bsicas de red

Nociones bsicas de red

Acerca de esta unidad


En esta unidad se cubren los siguientes tpicos:

Determinando la conectividad del host Obteniendo informacin sobre rutas e interfaces Listando las rutas a un host particular Traduccin entre nombres y direcciones IP Listando los registros de un DNS Transfiriendo archivos a travs de la red Chequeando el estado de los puertos de red Shell seguro (ssh)

132

Ing. Ivan Ferreira

Nociones bsicas de red

Nociones bsicas de red


Introduccin a las redes IP Una direccin IP es un nmero que identifica de manera lgica y jerrquica a una interfaz de red de un dispositivo (habitualmente una computadora) dentro de una red que utilice el protocolo IP. En su version 4, una direccin IP se representa mediante un nmero binario de 32 bits (IPv4). Las direcciones IP se pueden expresar como nmeros de notacin decimal: se dividen los 32 bits de la direccin en cuatro octetos. El valor decimal de cada octeto puede ser entre 0 y 255. Un ejemplo de representacin de direccin IPv4 sera : 164.12.123.65 Domain Name System (DNS) es una base de datos distribuida y jerrquica que almacena informacin asociada a nombres de dominio en redes como Internet. La asignacin de nombres a direcciones IP es ciertamente la funcin ms conocida de los protocolos DNS. Por ejemplo, si la direccin IP del sitio FTP de mercurio.linux.com.py es 200.64.128.4, la mayora de la gente llega a este equipo especificando mercurio.linux.com.py y no la direccin IP. El comando ping El comando ping es una herramienta de diagnstico para verificar la conectividad entre dos computadoras en una red. Enva paquetes ICMP con una solicitud de respuesta a una direccin IP remota y espera las respuestas ICMP. El resultado de ping sola ser un muy buen indicador de la habilidad de una computadora para enviar paquetes IP en general. Si podas hacer ping a una computadora, tambin podras hacer una conexin ftp o http. Con el advenimiento mayor de el filtrado de paquetes por cuestiones de seguridad, esto se est volviendo menos cierto. Muchos firewalls explcitamente prohben a los paquetes de tipo ICMP bajo las bases de que, El comando ping casi siempre es utilizado sin parmetros adicionales y terminado con un Ctrl +C. Los resultados se ven como sigue:
$ ping mercurio.linux.com.py PING mercurio.linux.com.py (192.168.1.1) from 64 bytes from mango (192.168.1.1): icmp_seq=0 64 bytes from mango (192.168.1.1): icmp_seq=1 64 bytes from mango (192.168.1.1): icmp_seq=2 192.168.1.10 : 56(84) bytes of data. ttl=255 time=0.5 ms ttl=255 time=0.3 ms ttl=255 time=0.3 ms

133

Ing. Ivan Ferreira

Nociones bsicas de red


64 bytes from mango (192.168.1.1): icmp_seq=3 ttl=255 time=0.3 ms 64 bytes from mango (192.168.1.1): icmp_seq=4 ttl=255 time=0.3 ms 64 bytes from mango (192.168.1.1): icmp_seq=5 ttl=255 time=0.3 ms --- mercurio.linux.com.py ping statistics --6 packets transmitted, 6 packets received, 0% packet loss round-trip min/avg/max = 0.3/0.3/0.5 ms

La salida puede dividirse en tres secciones. La primera seccin, la lnea empezando con la palabra "PING", muestra un vistazo del comando. La segunda seccin, las lneas que empiezan con "64 bytes" muestran las respuestas obtenidas. La tercera seccin, todo despus de la lnea "--- mercurio ping statistics ---", muestra un resumen de los resultados. En este caso, los resultados son buenos, ninguno de los paquetes fueron arrojados y todos pasaron suficientemente rpido.
$ ping 192.168.1.3 PING 192.168.1.3 (192.168.1.3) from 192.168.1.114 : 56(84) bytes of data. From 192.168.1.114: Destination Host Unreachable From 192.168.1.114: Destination Host Unreachable From 192.168.1.114: Destination Host Unreachable --- 192.168.1.3 ping statistics --7 packets transmitted, 0 packets received, +6 errors, 100% packet loss

El resultado de este comando nos demuestra que el equipo remoto no ha podido ser alcanzado, esto puede ser por varias razones:

El equipo remoto est apagado. El equipo remoto no tiene conectividad a la red por un problema de cable de red o adaptador de red. El equipo no tiene conectividad a la red por un error en la configuracin TCP/IP. El equipo local no tiene la ruta para llegar al equipo remoto. El equipo local tiene problemas de red, pruebe hacer ping a otro equipo de la red que con seguridad est encendido y funcionando. El equipo local o remoto est protegido por un firewall.

Obteniendo informacin sobre rutas e interfaces El comando ifconfig puede ser utilizado para configurar y mostrar informacin de los adaptadores de red del sistema. La configurar adaptadores de red con el comando ifconfig slo puede ser realizada por el usuario root, sin embargo podemos utilizar el comando para obtener informacin til.
134 Ing. Ivan Ferreira

Nociones bsicas de red

El comando ifconfig acepta como argumento el nombre del dispositivo de red, si utilizamos la opcin -a, se mostrar informacin de todos los adaptadores en el sistema:
$ /sbin/ifconfig -a eth0 Link encap:Ethernet HWaddr 00:50:BF:16:14:83 inet addr:192.168.1.114 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4030418 errors:0 dropped:0 overruns:0 frame:0 TX packets:4765994 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:5 Base address:0xf000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:859960 errors:0 dropped:0 overruns:0 frame:0 TX packets:859960 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0

La interfaz lo (loopback) es una interfaz que siempre existir y permite al computador comunicarse con s mismo. Su direccin IP siempre es 127.0.0.1 y su mscara 255.0.0.0. Con el comando ifconfig usted puede determinar la direccin MAC del adaptador de red, la direccin IP, la mscara de sub red, si est activa la interfaz (UP), si ha ocurrido errores o si ha habido colisiones. Puede saber si est correctamente conectada la interfaz a la red observando los paquetes recibidos. En una red ethernet siempre existen paquetes viajando por la red, por lo tanto, al cabo de unos segundos, el contador de paquetes recibidos debera incrementar. Esto es un buen indicador de conectividad fsica. Informacin sobre rutas El comando netstat es utilizado para obtener informacin y estadsticas de los adaptadores de red. Las opciones mas comunes del comando son:
-n -i -r

No intenta resolver direcciones IP a nombres de host. Mustra estadsticas de las interfaces. Muestra la tabla de rutas.

Por ejemplo:
$ netstat -ni Kernel interfaz table

135

Ing. Ivan Ferreira

Nociones bsicas de red


Iface MTU Met eth0 1500 0 eth1 1500 0 lo 16436 0 RX-OK RX-ERR RX-DRP RX-OVR 4030729 0 0 0 3034378 0 0 0 859986 0 0 0 TX-OK TX-ERR TX-DRP TX-OVR Flg 4766219 0 0 0 BRU 2840321 0 0 0 BRU 859986 0 0 0 LRU

Aqu puede observar las estadsticas de las interfaces de red, si existen muchos paquetes en TX-ERR y RX-ERR puede indicar un problema con el adaptador o el cable de red.
$ netstat -nr Kernel IP routing table Destination Gateway 67.111.97.136 0.0.0.0 192.168.1.0 0.0.0.0 127.0.0.0 0.0.0.0 0.0.0.0 67.111.97.137

Genmask 255.255.255.252 255.255.255.0 255.0.0.0 0.0.0.0

Flags U U U UG

MSS 0 0 0 0

Window 0 0 0 0

irtt 0 0 0 0

Iface eth1 eth0 lo eth1

Con el comando netstat -nr es posible obtener la tabla de rutas del kernel. En este ejemplo puede observar una ruta por cada interfaz de red, estas rutas permiten el acceso del equipo a la red correspondiente a cada interfaz y generalmente se crea automticamente al configurar el adaptador de red. La ltima ruta es la ruta por defecto o default gateway, se la reconoce por la red de destino, que es 0.0.0.0 (cualquier red). Esta ruta es utilizada como ltima alternativa para alcanzar a un host. Listando las rutas a un host particular Esta orden se utiliza para imprimir la ruta que los paquetes siguen desde nuestro sistema hasta otra mquina. Ejemplo:
$ traceroute www.pla.net.py traceroute to centauri.pla.net.py (216.250.196.9), 30 hops max, 38 byte packets 1 66.110.98.137 (66.110.98.137) 3449.476 ms 47.238 ms 27.714 ms 2 192.168.60.33 (192.168.60.33) 13.943 ms 16.494 ms 13.230 ms 3 172.18.0.43 (172.18.0.43) 19.688 ms 16.394 ms 29.014 ms 4 66.110.97.10 (66.110.97.10) 19.052 ms 22.167 ms 21.077 ms 5 10.1.2.25 (10.1.2.25) 20.746 ms 18.795 ms 16.510 ms 6 centauri.pla.net.py (216.250.196.9) 24.975 ms 778.644 ms 674.855 ms

Traduccin entre nombres y direcciones IP La traduccin de nombres de equipo a direcciones IP se conoce como resolucin de nombres. En TCP/IP, todos lo dispositivos de red tienen asignados una direccin IP. La resolucin de nombres permite asignar un nombre fcil de recordar a una direccin IP. Por ejemplo: cuando desea conectarse a una pgina web, usted puede escribir tan slo www.tldp.org, en lugar de 152.2.210.81.
136 Ing. Ivan Ferreira

Nociones bsicas de red

Esta facilidad adems permite que los programas puedan producir su salida en un formato ms humano, por ejemplo el traceroute en lugar de colocar los nmeros IP de las mquinas en las salidas que genera puede utilizar sus nombres. Este tipo de traduccin tambin permite hacer ciertos chequeos de autorizacin por parte de algunos servidores (Web, FTP y otros) que en dependencia de ello dan determinadas facilidades de acceso. El proceso de resolucin de nombres no slo permite traducir nombres a direcciones IP, tambin se puede hacer el proceso inverso, o sea dado un nmero IP determinar el nombre principal asociado a esta. Existen servidores encargados de realizar esta funcin y son conocidos como servidores de nombres de dominio o servidores DNS. Listando los registros de un DNS El comando dig permite listar los recursos de un servidor DNS. Esto permite diagnosticar problemas con la resolucin de nombres. Actualmente dig reemplaza al comando nslookup. Uso:
dig [@servidor] consulta [tipo-consulta] @servidor consulta tipo-consulta

Indica el servidor DNS al cual se enva la consulta. Registro a consultar . Tipo del registro (A, MX, NS, ...)

Los recursos ms comunes son:


NS: Servidores de dominio. MX: Servidores de correo. A: Hosts. CNAME: Aliases, nombres alternativos de servidores.

Ejemplos:
$ dig linux.com.py MX ; <<>> DiG 9.2.1 <<>> linux.com.py mx ;; global options: printcmd

137

Ing. Ivan Ferreira

Nociones bsicas de red


;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10472 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;linux.com.py. ;; ANSWER SECTION: linux.com.py. linux.com.py. ;; AUTHORITY SECTION: linux.com.py. ;; ADDITIONAL SECTION: ns1.linux.com.py. ;; ;; ;; ;; IN MX

86400 86400 86400 86400

IN IN IN IN

MX MX NS A

10 mail.linux.com.py. 20 mail2.linux.com.py. ns1.linux.com.py. 66.150.98.137

Query time: 4 msec SERVER: 127.0.0.1#53(127.0.0.1) WHEN: Mon Mar 15 08:47:17 2004 MSG SIZE rcvd: 119

El comando dig anterior consulta la direccin IP del servidor de correo para el dominio linux.com.py. En la seccin QUESTION SECTION podemos observar la consulta realizada. La seccin ANSWER SECTION muestra el resultado para esa consulta. AUTHORITY SECTION muestra quin es el servidor autoritativo para ese dominio (el servidor que controla los recursos DNS) y ADDITIONAL SECTION muestra informacin adicional, en este caso, la direccin IP del servidor de nombres para el dominio consultado. En el siguiente ejemplo se puede ver que el servidor DNS tiene algn problema pues no ha podido ser alcanzado.
$ dig @192.168.2.1 linux.com.py ; <<>> DiG 9.2.1 <<>> @192.168.2.1 linux.com.py ;; global options: printcmd ;; connection timed out; no servers could be reached

En el siguiente ejemplo se intenta resolver el nombre de host de una mquina que no existe. Se puede observar que la seccin ANSWER SECTION no devuelve un resultado, por tanto se comprueba que el host no existe.
$ dig www.nodominio.com ; <<>> DiG 9.2.1 <<>> www.nodominio.com ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 11979 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.nodominio.com. ;; AUTHORITY SECTION: IN A

138

Ing. Ivan Ferreira

Nociones bsicas de red


com. 10800 IN SOA grs.com. 1079285759 1800 900 604800 900 ;; ;; ;; ;; Query time: 685 msec SERVER: 127.0.0.1#53(127.0.0.1) WHEN: Mon Mar 15 09:27:40 2004 MSG SIZE rcvd: 108 a.gtld-servers.net. nstld.verisign-

El comando host es otra herramienta para realizar consultas de resolucin de nombres, su sintaxis es la siguiente:
host [-l] [-a] [-t tipo-consulta] nombre [servidor] -l -t tipo-consulta -a nombre servidor

Lista un dominio completamente Tipo del registro (A, MX, NS, ...) Realizar una consulta de cualquier tipo (ANY) Dominio host o direccin IP a consultar. Servidor DNS a consultar.

Ejemplos:
$ host www.linux.com.py www.linux.com.py has address 66.110.97.178 $ host -a tldp.org Trying "tldp.org" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7901 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 3, ADDITIONAL: 2 ;; QUESTION SECTION: ;tldp.org. IN ANY MX SOA 0 gabber.metalab.unc.edu. ns.unc.edu. host-reg.ns.unc.edu.

;; ANSWER SECTION: tldp.org. 86400 IN tldp.org. 86400 IN 2004031001 14400 3600 1209600 86400 ;; AUTHORITY SECTION: tldp.org. ;; ADDITIONAL SECTION: ns.unc.edu. 86400 84967 IN IN

NS A

ns.unc.edu. 152.2.21.1

Received 263 bytes from 127.0.0.1#53 in 698 ms

Transfiriendo archivos a travs de la red El comando ftp es utilizado para transferir archivos de un sistema a otro. Para transferir archivos primero debe iniciar una sesin en el equipo remoto:
$ ftp equipo.remoto.com

139

Ing. Ivan Ferreira

Nociones bsicas de red

$ ftp 192.168.1.1

Los comandos mas utilizados del ftp son:

Copia un archivo local en el equipo remoto utilizando el tipo actual de transferencia de archivos.
put:

Sintaxis:
put archivo_local [archivo_remoto] archivo_local:

Especifica el archivo local que se va a copiar.

Especifica el nombre que se asignar al archivo en el equipo remoto. Si no se especifica este parmetro, el archivo adoptar el nombre del archivo_local.
archivo_remoto:

Copia un archivo remoto en el equipo local utilizando el tipo actual de transferencia de archivos.
get:

Sintaxis:
get archivo_remoto [archivo_local] archivo_remoto: archivo_local:

Especifica el archivo remoto que se va a copiar.

Especifica el nombre que se asignar al archivo en el equipo local. Si no se especifica este parmetro, el archivo adoptar el nombre del archivo_remoto. Muestra una lista de todos los archivos y subdirectorios de un directorio

ls, dir:

remoto.

Sintaxis:
ls|dir [directorio_remoto] [archivo_local]

Especifica el directorio cuyo contenido desea examinar. Si no se especifica ningn directorio, se utilizar el de trabajo actual del equipo remoto.
directorio_remoto:

Especifica un archivo local en el cual se guardar la lista del contenido del directorio. Si no se especifica este parmetro, el resultado aparecer en pantalla.
archivo_local:

140

Ing. Ivan Ferreira

Nociones bsicas de red

cd: Cambia el directorio de trabajo en el equipo remoto. Sintaxis:


cd directorio_remoto directorio_remoto:

Especifica el directorio del equipo remoto al cual se desea

cambiar.
hash:

Activa o desactiva la impresin del signo # para cada bloque de datos transferido. El tamao de un bloque de datos es de 2048 bytes. De manera predeterminada, no se imprime este signo.
binary:

Establece el tipo de transferencia de archivos como binario.

Nota: FTP admite dos tipos de transferencia de archivos: ASCII e imagen binaria. Cuando se transfieran archivos ejecutables, deber utilizarse el tipo binario. En modo binario, el archivo se transfiere byte a byte.

Establece el tipo de transferencia de los archivos como ASCII, que es el valor predeterminado.
ascii:

Nota: Cuando se transfieran archivos de texto deber utilizarse el tipo ASCII. En modo ASCII las conversiones de caracteres al juego de caracteres estndar de la red, o desde ste, se realizan automticamente. Por ejemplo, la conversin de los caracteres de fin de lnea se efecta segn los requisitos del sistema operativo de destino.

Activa o desactiva la aparicin de un mensaje de confirmacin. FTP, durante una transferencia de varios archivos, requerir confirmacin para seleccionar los archivos que va a recuperar o a almacenar. Los comandos mget o mput transferirn todos los archivos. De forma predeterminada, esta opcin est activada.
prompt:

Copia archivos remotos en el equipo local utilizando el tipo actual de transferencia de archivos
mget:

Sintaxis:
mget archivos_remotos [...] archivos_remotos:

Especifica los archivos remotos que se van a copiar en el equipo

local.

141

Ing. Ivan Ferreira

Nociones bsicas de red

Copia archivos locales en el equipo remoto utilizando el tipo actual de transferencia de archivos.
mput:

Sintaxis:
mput archivos_locales [...] archivos_locales:

Especifica los archivos locales que se copiarn en el equipo

remoto.

lcd: Cambia de directorio local. Sintaxis:


lcd directorio

Ejecucin del comandos localmente: Cualquier comando ftp que ejecute precedido del signo de admiracin, se ejecutar en el equipo local, por ejemplo, para mostrar el contenido del directorio local use:
!ls

Verificando el estado de los puertos de red En ocasiones es necesario saber si un servicio est activo y funcionando en el sistema. Puede usar el comando netstat -a para obtener informacin de los servicios corriendo en el sistema. Cada servicio utiliza un puerto de red y estos estn listados en el archivo /etc/services. Algunos servicios ms comunes y sus puertos respectivos son:
20/21 22 23 25 110/143 53 80 FTP-DATA/FTP (Transferencia de archivos) SSH (Secure Shell) TELNET (Terminal remota) SMTP (Servicios de envio de correo) POP3/IMAP (Servicios de obtencin de correo) DNS (Resolucin de nombres) HTTP (Servicios WEB)

Estos puertos deben estar en estado LISTEN, es decir escuchando para responder o esperando una conexin. Por ejemplo:

142

Ing. Ivan Ferreira

Nociones bsicas de red

$ netstat -an|grep LISTEN tcp 0 0 0.0.0.0:110 tcp 0 0 0.0.0.0:111 tcp 0 0 0.0.0.0:8080 tcp 0 0 0.0.0.0:80 tcp 0 0 0.0.0.0:21 tcp 0 0 127.0.0.1:53 tcp 0 0 0.0.0.0:22 tcp 0 0 0.0.0.0:23 tcp 0 0 0.0.0.0:25 tcp 0 0 127.0.0.1:953 tcp 0 0 0.0.0.0:443 $ netstat -a|grep LISTEN tcp 0 0 *:smux tcp 0 0 *:mysql tcp 0 0 *:pop3 tcp 0 0 *:sunrpc tcp 0 0 *:webcache tcp 0 0 *:http tcp 0 0 *:ftp tcp 0 0 eth1-www.data:domain tcp 0 0 www.data.com.py:domain tcp 0 0 localhost:domain tcp 0 0 *:ssh tcp 0 0 *:telnet tcp 0 0 *:smtp tcp 0 0 localhost:rndc tcp 0 0 *:https

0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:*

LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN

*:* *:* *:* *:* *:* *:* *:* *:* *:* *:* *:* *:* *:* *:* *:*

LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN

Del resultado de este comando usted puede deducir que efectivamente se estn ejecutando los servicios de mysql, pop3, squid, apache, ftp, ssh, telnet y sendmail entre otros. Shell Seguro (ssh) El comando ssh es un reemplazo seguro para los comandos rlogin, rsh, y telnet. Le permite iniciar sesiones y ejecutar comandos en mquinas remotas. El shell seguro permite que la comunicacin entre el cliente y el servidor sea encriptada, a diferencia de los comandos anteriormente mencionados. Iniciar una sesin en una mquina remota con ssh que es muy parecido a utilizar el comando telnet. Para iniciar una sesin remota a una mquina llamada mercurio.linux.com.py, escriba el comando siguiente en el intrprete de comandos del shell:
$ ssh mercurio.linux.com.py

La primera vez que ejecute ssh a una mquina remota, ver un mensaje similar al siguiente:

143

Ing. Ivan Ferreira

Nociones bsicas de red


The authenticity of host 'mercurio.linux.com.py' can't be established. DSA key fingerprint is 94:68:3a:3a:bc:f3:9a:9b:01:5d:b3:07:38:e2:11:0c. Are you sure you want to continue connecting (yes/no)?

Escriba yes para continuar. Esto le permitir agregar el servidor en su lista de host conocidos como se muestra en el siguiente mensaje:
Warning: Permanently added 'mercurio.linux.com.py' (RSA) to the list of known hosts.

Luego, ver un indicador de comandos preguntndole por su contrasea. Despus de ingresar su contrasea, se encontrar en el indicador de comandos de la mquina remota. Si no especifica un nombre de usuario, el nombre de usuario con el que se ha validado como la mquina local se validar en la mquina remota. Si quiere especificar un nombre de usuario use el comando siguiente:
$ ssh username@mercurio.linux.com.py $ ssh -l nombre_usuario mercurio.linux.com.py

El comando ssh se puede utilizar para ejecutar un comando en una mquina remota sin acceder al indicador de comandos. La sintaxis es:
ssh usuario@host comando.

Por ejemplo, si quiere ejecutar el comando ls /usr/share/doc en la mquina remota penguin.example.net, escriba el comando siguiente en la lnea de comandos del shell:
$ ssh mercurio.linux.com.py ls /usr/share/doc

Una vez que introduzca la contrasea correcta, visualizar el contenido del directorio /usr/share/doc, y regresar al shell de su equipo local. Usando el comando scp El comando scp puede ser usado para transferir archivos entre mquinas sobre una conexin encriptada y segura. Es parecido al comando rcp. La sintaxis general para transferir el archivo local a un sistema remoto es como sigue a continuacin:
$ scp archivo_local usuario@host:/ruta/

Siendo archivo_local el archivo origen local, y usuario@host:/ruta/ especifica el destino. Para transferir un archivo local shadowman a su home en mercurio.linux.com.py, escriba en la lnea de comandos (reemplace username con su nombre de usuario):
144 Ing. Ivan Ferreira

Nociones bsicas de red

$ scp shadowman mercurio.linux.com.py:/home/jperez/docs

Esto transferir el archivo local shadowman a /home/jperez/docs/shadowman en mercurio.linux.com.py. Para transferir un archivo remoto a un directorio local la sintaxis sera:
$ scp mercurio.linux.com.py:/home/jperez/docs/* ./

Este comando transferir todos los archivos del directorio mercurio al directorio actual en el equipo local.

/home/jperez/docs

de

La sintaxis general para transferir un archivo remoto al sistema local es como sigue:
$ scp [usuario@hostremoto|archivo_local] [usuario@host_remoto|archivo_local]

Uso del comando sftp La utilidad sftp puede ser usada para abrir una sesin segura interactiva de FTP. Es similar a ftp excepto que sta utiliza una conexin encriptada segura. La sintaxis general es sftp username@hostname.com. Una vez autentificado, podr utilizar un conjunto de comandos similar al conjunto utilizado por el comando FTP. Generar pares de claves Para evitar el envo de contraseas a travs de la red debemos utilizar el sistema de claves publicas. La clave pblica del usuario se registra de antemano en el servidor y la clave privada se guarda en el cliente. Con este sistema de autentificacin, ningn secreto viaja a travs de la red ni es enviado al servidor. Generacin de un par de claves DSA para la versin 2 Para generar un par de claves DSA para trabajar con la versin 2 del protocolo, escriba el siguiente comando en el intrprete de comandos de la shell:
$ ssh-keygen -t dsa

Acepte la localizacin por defecto del archivo ~/.ssh/id_dsa. Introduzca una palabra de paso diferente a la contrasea de su cuenta y confirme sta introducindola de nuevo. Sugerencia: Una palabra de paso es una cadena de caracteres o palabras utilizadas para autentificar a un usuario. Las palabras de paso se diferencian de las contraseas en que se pueden utilizar espacios o tabuladores en la palabra de paso. Las palabras
145 Ing. Ivan Ferreira

Nociones bsicas de red

de paso son generalmente ms largas que las contraseas porque ellas son habitualmente frases. La clave pblica es escrita a ~/.ssh/id_dsa.pub. La clave privada es escrita a ~/.ssh/id_dsa. Es de suma importancia que no de la clave privada a nadie. Asegrese que ningn otro usuario tiene permiso de escritura sobre los archivos. Cambie los permisos de su directorio .ssh usando el comando:
$ chmod -R 700 ~/.ssh.

Copie el contenido de ~/.ssh/id_dsa.pub a cual quiere conectarse.

~/.ssh/authorized_keys

en la mquina en la

Una vez actualizado el archivo autorized_keys al conectarse nuevamente al host remoto no se solicitar la contrasea, sino la palabra de paso.

146

Ing. Ivan Ferreira

También podría gustarte