Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
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
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:
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
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
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
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 -
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 -
13
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 ~]$
(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
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
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
La fecha de ayer:
$date --date "yesterday"
La fecha de maana:
$date --date "tomorrow"
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
17
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
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
El comando clear le permite limpiar la pantalla, tambin puede utilizar el mtodo abreviado CTRL-L.
19
2 Manipulacin de archivos
Manipulacin de archivos
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
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
Manipulacin de archivos
$ ../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
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
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
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
Listar los archivos que comianzan con a y tienen exactamente cuatro caracteres:
$ ls a???
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
25
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
los
archivos
README
de
los
directorios
/usr/share/doc/dovecot: $ ls /usr/share/doc/{pam,dovecot}/README
/usr/share/doc/pam
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
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
Tamaos del sistema de archivos que contiene el directorio actual en formato fcil de interpretar:
$ df -h .
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 *
27
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...]
Crea un archivo vaco denominado archivo1 en el directorio corriente y un archivo vaco denominado archivo2 en el directorio imgenes.
28
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...]
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
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
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 .
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/
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
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
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
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,
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
3 Usuarios y grupos
Usuarios y grupos
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
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
Indica cundo se inici por ltima vez el sistema. Indica el nivel de ejecucin actual. Muestra una cabecera para los campos.
whoami
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
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
38
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
ls -ld
nos permiten examinar los permisos de archivos y son los siguientes (de izquierda a
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
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:
42
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>
(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:
43
x (eXecute, ejecucin).
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/
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
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:
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 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
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
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
47
5 El sistema de archivos
El sistema de archivos
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
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
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,
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
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.
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>
-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:
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
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 .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
El sistema de archivos
zip
es la siguiente:
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...]
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
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
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
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
6 El editor vi
El editor vi
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
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.
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
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
El editor vi
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
65
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
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
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
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
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:
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
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
PATH
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,
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
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
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
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
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)
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
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
8 Redirecciones y tuberas
Redirecciones y tuberas
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
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
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
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
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
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
84
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
85
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
-lineas
Es el nmero de lneas a imprimirse desde el principio del archivo. El valor predeterminado es 10.
86
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
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
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
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
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
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
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.
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
10 Expresiones regulares
Expresiones regulares
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
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
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
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.
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
Expresiones regulares
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
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
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>
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
Expresiones regulares
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
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
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
Expresiones regulares
(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
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
awk
BEGIN { ALERTA = 70 CRITICO = 90 } $5 >= ALERTA && $5 <= CRITICO { print "Atencion:",$6,"Uso:",$5"%" } $5 >= CRITICO { print "Critico:",$6,"Uso:",$5"%" }
Y obtendr un reporte indicando los sistemas de archivos que se encuentran en estado de alerta o crtico.
103
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
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.
# ; .
106
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"
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
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
108
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
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
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
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
#!/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
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
112
expr
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
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
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
fi exit 0
116
12 Impresin y comunicacin
Impresin y comunicacin
Imprimiendo en Linux Control de la impresora Imprimiendo desde aplicaciones Utilidades de impresin Utilizacin de correo electrnico
118
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.
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
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
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
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.
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
Control de procesos rbol de procesos Las seales Control de trabajos Agendando procesos para su ejecucin Agendando la ejecucin peridica de procesos
124
El comando comunes:
a u x w -u <usuario>
ps
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
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.
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
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
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 &
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:
128
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.
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:
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
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>
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>:
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
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
133
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
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
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
Flags U U U UG
MSS 0 0 0 0
Window 0 0 0 0
irtt 0 0 0 0
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
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, ...)
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
IN IN IN IN
MX MX NS A
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
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
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
$ ftp 192.168.1.1
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 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 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
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:
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:
local.
141
Copia archivos locales en el equipo remoto utilizando el tipo actual de transferencia de archivos.
mput:
Sintaxis:
mput archivos_locales [...] archivos_locales:
remoto.
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
$ 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
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
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
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.
~/.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