Curso Básico de UNIX Filtros. sort grep find fgrep y egrep tr uniq dd Preguntas y Ejercicios Bibliografía y Referencias Se da el nombe de filtros a un grupo de comandos que leen alguna entrada, realizan una transformación y escriben una salida. Además de los que veremos aquí, incluye comandos tales como head, tail, wc, y cut. sort La comparación u ordenación puede ser por caracteres ASCII o por valor numérico. La ordenación ASCII es la más parecida a la alfabética; sigue el orden del juego de caracteres ASCII. En este ordenamiento, los caracteres idiomáticos (vocales acentuadas, ñ) no se encuentran en el orden alfabético tradicional. En la ordenación numérica se respeta la ordenación por valor numérico de la cadena de caracteres: 101 va después de 21; en ordenamiento ASCII sería al revés. sort arch1 ordena según el código ASCII. sort -n arch2.num ordena numéricamente. Si no se indican campos de ordenación, la comparación se hace sobre toda la línea. Si se indican campos, la comparación se hace considerando la cadena de caracteres iniciada en el primer caracter del primer campo hasta el último caracter del último campo. sort -t: -k1,3 arch1.txt ordena por campos separados por ":", tomando en cuenta para la comparación los caracteres desde el primero del campo 1 hasta el último del campo 3. sort -t: -k1.3,3.5 arch1.txt ordena por campos tomando en cuenta desde el 3er. caracter del campo 1 hasta el 5to. caracter del campo 3. sort -nr arch2.num ordena en orden numérico descendente. sort -k3 arch3.txt ordena alfabéticamente, usando como cadena de comparación la comprendida desde el primer caracter del 3er. campo hasta el fin de lína. Como no se indica separador, los campos se definen por blancos (espacio o tabulador). find El comando find explora una rama de directorios buscando archivos que cumplan determinados criterios. El comando find en GNU es extremadamente potente, permitiendo criterios de búsqueda tales como: el nombre contiene cierta cadena de caracteres o aparea con algún patrón: son enlaces a ciertos archivos; fueron usados por última vez en un cierto período de tiempo; tienen un tamaño comprendido dentro de cierto intervalo; son de cierto tipo (regular, directorio, enlace simbólico, etc.); pertenecen a cierto usuario o grupo; tienen ciertos permisos de acceso; contienen texto que aparea con cierto patrón. Una vez ubicados los archivos, find puede realizar diversas acciones sobre ellos: ver o editar; guardar sus nombres en otro archivo; eliminarlos o renombrarlos; cambiar sus permisos de acceso; clasificarlos por grupos. find /var -name *.log -print busca en el directorio /var los archivos terminados en .log, imprime sus nombres en la salida. find /tmp -size +200k -print busca archivos mayores de 200k. En los argumentos numéricos, +N es mayor que N, -N es menor que N, N es exactamente igual a N. find /var/spool/mail -atime +30 -print busca archivos no accedidos hace más de 30 días. La opción -atime se refiere a tiempo transcurrido desde última lectura, -mtime desde última modificación de estado o permisos, -ctime de contenido. find /var/tmp -empty -exec rm {} \; busca archivos vacíos y los borra. find /home -nouser -ls busca archivos en los cuales en lugar del nombre de usuario dueño aparece un número (UID). Esta situación se da cuando la cuenta de usuario ha sido borrada pero han permanecido los archivos creados por ese usuario. grep El comando grep (Global Regular Expression and Print) permite buscar las líneas que contienen una cadena de caracteres especificada mediante una expresión regular. Lee la entrada estándar o una lista de archivos y muestra en la salida sólo aquellas líneas que contienen la expresión indicada. La sintaxis es grep patrón archivos donde el patrón a buscar es una expresión regular. Crear un archivo con los días de la semana, uno por línea; llamarle dias. grep martes dias grep tes dias muestra las líneas del archivo dias que contienen la cadena "tes". grep unix01 /etc/passwd grep unix0[1-9] /etc/passwd ls -l /usr | grep '^d' lista sólo los subdirectorios del directorio /usr (la línea empieza con "d"). ls -l / | grep '.......rw' lista sólo los archivos que otros pueden leer y escribir en el directorio principal. grep '^[^:]*::' /etc/passwd busca usuarios sin contraseña; caracteres al principio de línea que no sean ":", y luego "::" (el segundo lugar, que es el de la contraseña, está vacío). grep '^[^:]*:\*:' /etc/passwd busca usuarios que no pueden entrar al sistema; tienen un * en el lugar de la contraseña; \ escapa el significado del segundo *, que vale como caracter a buscar. Ninguna expresión regular de grep aparea con un caracter nueva línea; las expresiones se aplican individualmente a cada línea. Entre las opciones de grep se cuentan -i para evitar distinguir entre mayúsculas de minúsculas, -n para mostrar el número de línea y -v para buscar líneas que no contengan la expresión regular indicada. fgrep y egrep Hay dos versiones de grep que optimizan la búsqueda en casos particulares: (fixed grep, o fast grep) acepta solamente una cadena de caracteres, y no una expresión regular, aunque permite buscar varias de estas cadenas simultáneamente; fgrep (extended grep), que acepta expresiones regulares extendidas con los operadores + ? | y paréntesis. egrep no interpreta metacaracteres, pero puede buscar muy eficientemente muchas palabras en paralelo, por lo que se usa mucho en búsquedas bibliográficas; egrep acepta expresiones más complejas, pero es más lento; grep es un buen compromiso entre ambos. fgrep fgrep martes dias busca la cadena martes en el archivo dias. En fgrep y egrep puede indicarse la opción -f buscar.exp, donde buscar.exp es un archivo que contiene la expresión a buscar: cadenas simples para fgrep, expresiones regulares para egrep, separadas por nueva línea; las expresiones se buscan en paralelo, es decir que la salida serán todas las líneas que contengan una cualquiera de las expresiones a buscar. Crear un archivo buscar.fgrep con las cadenas "tes" y "jue", una por línea. El comando fgrep -f buscar.fgrep dias extrae del archivo dias las líneas que contienen estas cadenas. El comando grep soporta fgrep y egrep como opciones -F y -E, respectivamente. grep -F -f buscar.fgrep dias egrep "tes|jue" dias grep -E "tes|jue" dias obtienen el mismo efecto del comando anterior. egrep "([0-9]+ab)*1234" archivo busca cadenas comenzadas opcionalmente por un dígito y los caracteres ab, todo el paréntesis 0 o más veces, y hasta encontrar la cadena 1234. Escribir grep -E es similar a egrep, aunque no idéntico; egrep es compatible con el comando histórico egrep; grep -E acepta expresiones regulares extendidas y es la versión moderna del comando en GNU. fgrep es idéntico a grep -F. tr El comando tr translitera los caracteres de la entrada: sustituye unos caracteres por otros. La sustitución es caracter a caracter. Entre sus opciones se encuentran -d para borrar caracteres; -c para sustituir complemento de los caracteres indicados, es decir, que no sean ésos; y -s para comprimir caracteres repetidos en uno solo. cat dias | tr a-z A-Z convierte todo a mayúsculas. cat dias | tr -d aeiou borra todas las vocales del archivo dias. Agregar al archivo dias líneas en blanco, varias seguidas, intercaladas entre los nombres de los días. cat dias cat dias | tr -s "\n*" convierte varios caracteres nueva línea seguidos en una solo; elimina renglones en blanco. cat nota | tr -c "[a-zA-Z0-9]" "_" transforma todos los caracteres que no sean letras o números en subrayas. cat nota | tr -cs "[a-zA-Z0-9]" "[\n*]" transforma todos los caracteres que no sean letras o números en nuevalínea, y comprime las nuevalíneas repetidas en una sola; deja cada palabra sola en un renglón. ls -l /usr | tr -s " " | cut -f3,4 comprime los blancos en la salida para poder cortar campos. uniq El comando uniq excluye todos los renglones adyacentes duplicados menos uno; es decir, elimina renglones repetidos consecutivos. La opción -c escribe el número de ocurrencias al comienzo del renglón. El siguiente ejemplo muestra las 5 palabras más frecuentes en el conjunto de archivos: cat *.txt | tr -sc A-Za-z '\012' | \ sort | uniq -c | sort -n | tail 5 cat lista todos los archivos, tr comprime el renglón eliminando blancos, sort los ordena, uniq cuenta las ocurrencias y elimina repetidos, sort -n ordena por cantidad de ocurrencias y tail muestra las 5 ocurrencias más frecuentes. dd El comando dd es un convertidor de datos: convierte de ASCII a EBCDIC y a la inversa, cambia los tamaños de los bloques de registros, hace ajuste de blancos y otras transformaciones usuales cuando se manejan transferencias entre sistemas operativos distintos o datos en bruto, sin formato, como en los respaldos en cinta. Preguntas y Ejercicios. Bibliografía y Referencias. Comandos: sort, find, grep, fgrep, egrep, tr, uniq, dd Referencias: páginas man, nodos info, Kernighan-Pike[1987], Coffin[1989]. Víctor A. González Barbone vagonbar en fing edu uy Instituto de Ingeniería Eléctrica - Facultad de Ingeniería - Montevideo, Uruguay. Curso Básico de UNIX Preguntas y Ejercicios. Ficha Referencia: Filtros Estructura de archivos. Estructura del archivo /etc/passwd: #nombre:contraseña:UID:GID:comentarios:dir_propio:shell jperez:Xdio0IKLLP:1130:103:Juan Pérez:/home/jperez:/bin/bash Estructura del archivo /etc/group: #grupo:GID:lista_usuarios docentes:103:victor,german,fernando Estructura del archivo /etc/hosts: #número_IP nombre_máquina alias 10.137.137.250 liebre.cdi.edu.uy liebre localhost mailhost Todos los archivos anteriores pueden tener comentarios (líneas comenzadas por #). 1. Buscar a partir del directorio /var todos los archivos de nombre core y mostrar a) sus nombre; b) sus nombres en listado largo; c) eliminarlos. 2. Un archivo acceso.log de registro de accesos de usuarios a un sistema UNIX, genera un renglón por acceso, el primer campo es el nombre del usuario, y los campos están separados por ":". a) Escribir comandos que muestren el nombre de cada usuario y la cantidad de accesos registrados, en orden alfabético. b) Extraer del archivo acceso.log las líneas correspondientes al usuario jperez del mes de mayo del año 1997. La fecha figura en el formato "1300 15 Mayo 1997"; el primer número es la hora. c) Extraer del archivo acceso.log las líneas que correspondan al usuario jperez o al usuario elopez. 3. En el archivo NoMBreS.tXT un mismo nombre puede estar en mayúsculas y minúsculas, mezcladas de diferentes maneras. Generar una lista de nombres en minúscula con los 7 nombres que aparecen menos veces, sin importar como estén escritos. 4. Un archivo palabras.txt contiene palabras distintas una por línea. Extrar todas las palabras que empiecen y terminen con vocal, en minúscula o mayúscula. 5. Usar el archivo /etc/passwd o el comando ypcat passwd si el sistema usa NIS, para resolver las siguientes preguntas. En estos archivos pueden haber comentarios, líneas empezadas por #, que deben eliminarse de la búsqueda. Recordar que el caracter # es interpretado por el shell. a) eliminar los comentarios. b) extraer una línea que muestre directorio propio y shell del usuario elopez. c) listar los usuarios que usan el shell /bin/bash. d) listar los usuarios que no usan el shell /bin/bash. e) contar la cantidad de usuarios. 6. Realizar las tareas indicadas, si es posible; si no lo es, indicar los motivos. Presentar el archivo /etc/passwd ordenado según los siguientes criterios: a) ordenado por nombre de login de usuario. b) ordenado por número de usuario. c) ordenado por número de grupo y dentro de cada grupo por número de usuario. d) ordenado por número de grupo y dentro de cada grupo por campo de comentario. 7. Encontrar las 5 palabras más frecuentes en el texto historia1.txt, e indicar la cantidad de veces que fue usada cada una. Indicación: transformar primero todas las palabras a minúscula. Víctor A. González Barbone vagonbar en fing edu uy Instituto de Ingeniería Eléctrica - Facultad de Ingeniería - Montevideo, Uruguay. Curso Básico de UNIX Comandos de Usuario Ultima revisión: Set 2001 Propósito Metalenguaje y convenciones Referencias Comandos: apropos banner cal cat cd chmod clear cmp cp cut date diff echo env exit file head hostname id info less ln ls dir vdir mail man mesg mkdir more mv passwd pr printenv ps pwd rm rmdir tail talk touch umask wc whatis which who whoami Propósito: Esta guía resume la sintaxis, opciones más frecuentes y ejemplos de uso de los comandos UNIX de más uso en la práctica. En descripción se presenta nombre del comando, sintaxis resumida, acción principal, opciones más usuales, ejemplos y observaciones, si las hay. Esta guía no puede ni pretende sustituir la consulta de las páginas man. Metalenguaje y convenciones: ... [] {A|B} TAB LF CR ESPACIO blanco UID GID (su) repetición del último item item opcional, puede estar o no item opcional obligatorio, debe tomarse A o B tecla o caracter tabulador caracter nueva línea caracter retorno de carro caracter o tecla de barra espaciadora caracter TAB o ESPACIO, delimita palabras identificador de usuario (número) identificador de grupo (número) requiere permiso de supervisor Los items en minúsculas van tal cual, los items en MAYUSCULAS deben ser sustituídos por valores del usuario. apropos apropos [OPCIONES] PALABRA-CLAVE ... busca entre las descripciones cortas de las páginas del manual la presencia de la palabra clave. -r interpreta cada nombre como una expresión regular -w interpreta cada nombre como conteniendo caracteres comodines apropos man apropos -w man* banner banner MENSAJE Muestra el mensaje (cadena de caracteres) en letras grandes y girado 90°; para imprimir carteles. -wN en un ancho de N columnas banner -w 40 Hola! banner a cal cal [OPCIONES] [[MES]AÑO] Sin parámetros, muestra calendario del mes actual; el año debe indicarse con centuria, 1-1999; el mes en número 1 a 12. -j -y día juliano, contado desde el 1 de enero calendario del año en curso cal cal 1998 cal 11 1997 cal 9 1752 muestra el mes del año en que se saltearon 11 días para compensar años bisiestos. cat cat [OPCIONES] [ARCHIVO ...] Concatena los archivos indicados y los muestra en la salida estándar. Sin argumentos, recibe de la entrada estándar (-). -A -b -E -n -s -t -v -T equivalente a -vET numera las líneas que no están en blanco muestra $ al final de cada línea numera las líneas reemplaza varias líneas en blanco por una sola equivale a -vT muestra caracteres no imprimibles excepto LF y TAB muestra TAB como ^I cat /etc/group cat cap1 cap2 cap3 muestra sucesivamente los archivos cap1, cap2 y cap3. cat cap1 cap2 cap3 > libro reúne los archivos cap1, cap2 y cap3 en el archivo libro. cat arch1 arch2 > arch1 hace perder los datos originales en arch1. cd cd [DIRECTORIO] cambia directorio de trabajo; sin parámetros, cambia al directorio propio del usuario como aparece en $HOME. En Linux, es un comando interno del shell; ver bash(1). cd /etc cd chmod chmod [OPCION] MODO ARCHIVO ... cambia los permisos de acceso a los archivos indicados. No cambia los permisos de los enlaces simbólicos. -v -R verboso, describe acción sobre cada archivo. recursivo, cambia permisos de subdirectorios y sus contenidos chmod -R 0755 documentos/visibles chmod ug+rw-x,o+r-wx cap*.txt clear clear borra la pantalla del terminal. cmp cmp [OPCIONES] ARCH1 ARCH2 [SALTEAR1 [SALTEAR2]] compara dos archivos. Si son iguales, no dice nada; si difieren, marca el byte y el número de línea de la primera diferencia. -l -s número de byte (decimal) y bytes diferentes (octal) para cada diferencia. devueve solamente un valor de retorno, sin escribir nada. Los valores de retorno son 0 si los archivos son iguales, 1 si diferen, >1 si hubo un error. Los valores decimales SALTEAR1 y SALTEAR2 indican la posición de byte donde comienza la comparación en ARCH1 y ARCH2; puede expresarse en hexadecimal precediento el número con 0x, o en octal precediendo con 0. cp cp [OPCIONES] ARCH_ORIGEN ARCH_DESTINO cp [OPCIONES] ARCHIVO ... DIRECTORIO copia ARCH_ORIGEN hacia ARCH_DESTINO; copia los archivos indicados hacia DIRECTORIO. Por defecto no copia directorios. -d -f -i -l -p copia enlaces simbólicos como tales forzoso, sobreescribe archivos destino si existen avisa antes de sobreescribir archivos existentes crea enlaces hard en lugar de copiar los archivos preserva dueño, grupo, permiso y fecha -s -R -v crea enlaces simbólicos en lugar de copiar los archivos recursivo, copia directorios y sus archivos verboso, escribe el nombre de cada archivo que copia cp arch1 /dir1/arch1 cp -vi arch1 arch2 cp -dpRv dir1 /dir2/subdir2 dirtodo mejor forma de copiar exactamente una estructura de directorios, recursivamente, conservando permisos y manteniendo enlaces simbólicos; verboso puede omitirse. cut cut -f CAMPOS [-d DELIM][ARCHIVO ...] cut -c COLUMNAS [ARCHIVO ...] extrae partes de cada línea de los archivos indicados o de la entrada estándar. Los campos y columnas se indican con números 1, 2,... o con intervalos n-m. Intervalos incompletos: -n es 1-n, m- es m hasta el último campo o columna. -f -c -d -s campos numerados, por defecto separados por TAB columnas, ubicación posicional de caracteres en la línea fija el caracter delimitador de campos, TAB por defecto con -f para no imprimir líneas que no contengan el delimitador cat /etc/passwd | cut -d: -f1,3,5-6 cat /etc/passwd | cut -c1-15 ls -l | cut -c57- corta sólo el nombre del archivo, al final (puede requerir ajuste en el valor de columna). date date [OPCION] [+FORMATO] muestra fecha y hora. Con +FORMATO la presenta según el patrón indicado. date [-u|--utc|--universal] [ MMDDHHmm [[CC]YY][.SS] ] fija (su) fecha y hora. -u --utc --universal hora universal (GMT) Formato para fijar la hora: MM DD HH mm CC YY SS mes (01-12) día (01-31) hora (00-23) mminuto (00-59) centuria año segundos (00-59) Formato para presentar la fecha y la hora (+FORMATO): '%H' hora (00-23) '%M' minuto (00-59) '%S' segundos (00-59) '%T' hora en 24 horas (hh:mm:ss) '%X' hora en representación local (%H:%M:S) '%a' '%A' '%b' '%B' '%c' '%d' '%m' '%w' '%x' '%y' '%Y' nombre local abreviado del día nombre local completo del día nombre local abreviado del mes nombre local completo del mes fecha y hora locales día del mes (01-31) mes (01-12) día de la semana (0-6), 0 es Domingo fecha local 2 dígitos del año (00-99) 4 dígitos del año (1970....) diff diff ARCHIVO1 ARCHIVO2 muestra las diferencias existentes entre dos archivos. diff nota1 nota2 echo echo [OPCIONES] MENSAJE ... escribe en la salida estándar los mensajes, separados con un espacio y con LF al final. Muchos shells tienen un comando interno del mismo nombre; éste, fuera del shell, debe invocarse como /bin/echo. -n -e suprime LF al final interpreta estos caracteres especiales, dentro de " " \a campana \b retroceso \c suprime LF al final \f cambio de página \n nueva línea (LF) \r retorno de carro (CR) \t tabulador horizontal \v tabulador vertical \\ barra inversa \nnn caracter ASCII nnn en octal echo echo echo echo Hola Todos! -n Hola Todos! -e "\a" -e "\101" muestra la letra A, que es 101 en octal. env env [OPCIONES][NOMBRE=VALOR]...[COMANDO [ARGUMENTO ...]] Sin argumentos, muestra valores de variables de ambiente; con argumentos, corre el comando indicado con las variables de ambiente modificadas según se indique. -i comenzar con un ambiente virgen, ignorando el actual env env DIR=/etc listadir1 lista el contenido del directorio /etc; listadir es un archivo ejecutable que contiene la línea ls dir1, para listar contenido del directorio dir1. echo Directorio $HOME ls -l $HOME muestra el directorio propio del usuario, guardado en la variable de ambiente HOME. exit exit [N] produce la salida del shell con estado de terminación N (número); si no se indica retorna con 0. file file OPCIONES ARCHIVO intenta determinar el tipo de archivo de que se trata: texto ASCII, código C, script en diversos lenguajes, binario, otros. -z examina archivos comprimidos file cati.c este archivo contiene código C. file adduser este archivo es un script en Perl. file /bin/cat es un ejecutable binario. head head [OPCIONES] ARCHIVO ... muestra la primera parte de un archivo, por defecto 10 líneas. Si son varios archivos muestra un encabezado con el nombre de cada archivo. -v -q -N -n N verboso, imprime encabezamiento con nombre del archivo silencioso, no imprime encabezado con nombre del archivo imprime primeras N líneas, por defecto 10 imprime primeras N líneas head -24 /etc/inetd.conf hostname hostname [NOMBRE] sin argumentos, da el nombre de la máquina; con NOMBRE, fija el nombre de la máquina (su). -h ayuda -f -d -i -a -v --fqdn nombre de máquina completo, con dominio DNS --domain nombre de dominio DNS --ip-address dirección (número IP) --alias nombres de alias verboso id id [OPCIONES] [NOMBRE_USUARIO] muestra información sobre un usuario. Muestra nombre, UID, grupo, GID y grupos suplementarios. Si el id real y el efectivo no corresponden muestra ambos. Las opciones limitan el despliegue. -g -G -n -r -u sólo el grupo primario grupos suplementarios nombre en lugar de número; requiere -u, -g, o -G real en lugar de efectivo; requiere -u, -g o -G sólo el número de usuario (UID) id id webmaster muestra datos del usuario webmaster. info info [NOMBRE] sistema de información de GNU sobre UNIX. info info muestra información sobre info, con tutorial para aprender a manejar info. less less [OPCIONES] [ARCHIVO] programa de paginado y búsqueda similar a more, con más opciones y comandos. Permite movimiento hacia adelante y atrás, pero no lee todo el archivo al principio, por lo que es más rápido. Sus comandos están tomados de more y vi (ver more). --help -? muestra ayuda sobre comandos internos ln ln [OPCIONES] ORIGEN [DESTINO] ln [OPCIONES] ORIGEN ... DIRECTORIO si el último argumento es un directorio, ln crea en ese directorio enlaces a todos los archivos origen con el mismo nombre; si sólo se indica un nombre de archivo, crea un enlace hacia ese archivo en el directorio actual; si se indican dos archivos, crea un enlace con el primer nombre (archivo real) hacia el segundo (enlace). Por defecto, crea enlaces hard y no elimina archivos existentes. -f -i forzoso, elimina archivos destino existentes interactivo, pide confirmación para eliminar archivos -s -v simbólico, crea enlaces simbólicos en lugar de hard verboso, da el nombre de cada enlace creado ln ln ln ln nota nota.ln -s /etc/passwd -s datos.usuario datos.usu.ln -sv datos.usuario LEAME dir2 ls, dir, vdir ls [OPCIONES] [NOMBRE] Para cada nombre de directorio, lista contenido de directorio; para cada nombre de archivo, indica su nombre y datos. La salida está ordenada alfabéticamente por defecto. Sin nombre, lista el directorio corriente. La opción -l muestra, separados por espacios, los campos tipo archivo y permisos, cantidad de enlaces hard, dueño, grupo, tamaño, mes, día, hora o año, nombre. -1 -a -c -C -d -F -i -k -l -r -R -s -t -u -U -x un nombre de archivo por línea todos los archivos, incluso no visibles comenzados por . ordenar por fecha de estado de último cambio (ctime en inodo) salida en columnas con ordenamiento por columnas lista directorios como archivos, no su contenido indica tipo: / directorio, * ejecutable, @ enlace simbólico inodo, número de índice de cada archivo tamaños en KB listado en formato largo invertir ordenamiento listar recursivamente subdirectorios tamaño en bloques de 1024 bytes ordenar por fecha de última modificación (mtime en inodo) ordenar por fecha de último acceso (atime en inodo) no ordenar salida en columnas con ordenamiento por filas dir equivale al ls -C. vdir equivale a ls -l. mail mail [OPCIONES] [DESTINO ...] procesador de correo electrónico de UNIX. Sin argumentos, muestra lista de mensajes en la casilla de entrada y permite manipularlos. Si hay un destino, lee de la entrada estándar hasta un "." aislado en una línea y envía lo leído como mensaje a destino. -v -s -c -b -f -u verboso, muestra detalles de entrega TEMA especifica el tema (subject) del mensaje LISTA envía copias a LISTA de usuarios, separados por coma LISTA envía copia ciega a LISTA de usuarios [ARCH] lee contenido de archivo propio mbox o el indicado USUARIO equivale a mail -f /var/spool/mail/USUARIO Comandos internos de mail: & ? d N q indicador de comandos de mail muestra lista de comandos para manejo de mensajes borra mensaje corriente, marcado con '>' muestra el mensaje número N sale del programa de correo mail -s "Saludos para todos " -c pedro,mateo@nsk.com.uy juan envía un mensaje al usuario juan, tema "Saludos para todos", con copia a usuarios pedro y mateo. man man [OPCIONES] [SECCION] NOMBRE ... Da formato y muestra las páginas del manual en línea. Si no se indica sección, muestra sólo la primera que encuentre; si se indica sección como número 1-9, muestra la página que haya en la sección indicada. Las páginas están organizadas en secciones, reconocidas por un dígito, y eventualmente subsecciones indicadas por una o más letras. -a -d -f -h -k -w muestra páginas en todas las secciones muestra información de depuración propia de man equivalente a whatis muestra ayuda para man equivalente a apropos no imprime las páginas, sino las ubicaciones Secciones del manual: 1 programas ejecutables y guiones (scripts) 2 llamadas al sistema (funciones del núcleo) 3 llamadas a biblioteca (funciones de biblioteca) 4 archivos especiales (generalmente en /dev) 5 formatos de archivos 6 juegos 7 paquetes de macros 8 comandos de administración (su) man -h man man man -a man mesg mesg [y|n] controla acceso de escritura a la terminal propia por otros usuarios, típicamente con programas tales como talk y write. Sin parámetros, muestra el estado: is y si está habilitada escritura, is n si no está habilitada escritura. y n permite a otros escribir mensajes en la terminal no permite a otros escribir mensajes en la terminal mesg mesg y mesg n mkdir mkdir [OPCIONES] [-m MODO] DIRECTORIO ... crea los directorios indicados. Por defecto, el modo es 0777 menos los bits de umask. -m MODO permite fijar el modo para el nuevo directorio; el modo es simbólico y usa el modo por defecto como partida. -p crea primero todos los directorios padre inexistentes, con el modo de umask modificado con u+wx --verbose informa sobre la creación de directorios mkdir dir1 dir2 mkdir -p ltr/jd/jan crea la estructura de directorios ltr/jd/jan. more more [OPCIONES][-N][+/CADENA[-N] [ARCHIVO ...] pagina el texto dividiéndolo en pantallas, presentando una por vez. -N fija tamaño de pantalla en N líneas -d muestra mensajes de ayuda -s comprime en una varias líneas en blanco seguidas -u suprime subrayados +/cadena busca la cadena antes de mostrar +N comienza a mostrar a partir de la línea N Durante el despliegue, reconoce los comandos siguientes, algunos de los cuales pueden ir precedidos de un número multiplicador: h ESPACIO ENTER f b ^L = /PATRON ?/PATRON n . ´ q, Q muestra resumen de estos comandos avanza una pantalla muestra siguiente línea avanza una pantalla; ^F retrocede una pantalla; también ^B (Ctrl-L) redibuja la pantalla muestra número de línea actual busca hacia adelante la expresión regular PATRON busca hacia atrás la expresión regular PATRON repetir última búsqueda repetir el comando anterior ir a lugar de comienzo de última búsqueda sale mv mv [OPCIONES] ARCH_ORIGNEN ARCH_DESTINO mv [OPCIONES] ARCHIVO ... DIRECTORIO cambia de nombre ARCH_ORIGEN, o mueve hacia ARCH_DESTINO si el archivo destino invoca otro directorio; mueve ARCHIVO y los siguientes archivos hacia DIRECTORIO. Entre sistemas de archivos sólo puede mover archivos normales. -f -i -v -u forzoso, sobreescribe archivos destino si existen avisa antes de sobreescribir archivos existentes verboso, escribe el nombre de cada archivo que mueve no mover si existe archivo destino más nuevo o de igual fecha mv nota notanueva mv -vi LEAME LEAME2 mv -v arch1 notanueva LEAME /dir2/subdir2 passwd passwd [OPCIONES] [NOMBRE] cambia la contraseña del usuario. El superusuario puede cambiar las contraseñas de otros usuarios. En general, las contraseñas deben tener entre 6 y 8 caracteres, contener mayúsculas, minúsculas, dígitos 0 a 9 o signos de puntuación; no se admiten contraseñas simples ni parecidas al nombre del usuario. Si el superusuario asigna contraseñas poco seguras no hay advertencia. -x M -n M -n M máximo número de días de validez; luego pide cambiar mínimo número de días antes de poder cambiar número de días de advertencia antes de expirar passwd permite cambiar la contraseña del usuario invocante passwd jperez (su) cambia la contraseña del usuario jperez. pr pr [OPCIONES] ARCHIVO ... escribe en salida estándar un texto con formato, paginado y opcionalmente en varias columnas. +P1[:P2] de página P1 a página P2 -C en C columnas -a escribe las columnas a través y no hacia abajo -d a doble espacio -f separar páginas con salto de página -h reemplazar encabezado con el indicado -l largo de página en líneas; por defecto 66 -m escribir archivos en paralelo uno en cada columna -o margen izquierdo; se suma al ancho indicado por -w -w ancho de página en columnas; por defecto 72 pr pr ls ls -o8 -l23 -h "Lista de usuarios" /etc/passwd -o2 -l22 -h "Lista de servicios" /etc/services | more /etc | pr -2 -b -l23 | more /etc | pr -3 -b -l23 -a | more printenv printenv [VARIABLE] ... muestra el valor de todas las variables de ambiente; si se indica un nombre de variable, puestra el valor de esa variable. printenv TERM ps ps [OPCIONES] [PID] ... informa sobre procesos en ejecución. Para las opciones, no debe usarse -, aunque es aceptado. l u j s a x w formato largo formto usuario, muestra nombre, PID, hora inicio, estado formato trabajos, muestra PGID y SID formato señales mostrar también procesos de otros usuarios. mostrar también procesos sin terminal de control no truncar líneas para caber en un ancho de página; agregar una w para cada línea más sin encabezado sólo procesos en ejecución h r ps auxwww | more muestra todos los procesos en ejecución, en formato usuario, aún los sin terminal, admitiendo hasta 4 líneas por comando. pwd pwd imprime toda la ruta del directorio corriente; todos los componentes mostrados serán los directorios reales, no enlaces simbólicos. El shell tiene una versión interna de pwd, por lo que para ejecutar ésta, que es externa, es preciso escribir ls -l /var/spool/mail muestra /var/spool/mail como enlace simbólico a /var/mail (Debian). cd /var/spool/mail pwd versión interna del shell, muestra /var/spool/mail, el enlace simbólico. /bin/pwd versión externa, muestra /var/mail, el directorio real. rm rm [OPCIONES] NOMBRE ... elimina los archivos indicados; por defecto no elimina directorios. -f -i -r, -R -v ignora archivos inexistentes y nunca pide confirmación interactivo, pregunta antes de eliminar cada archivo. recursivo, borra directorios y su contenido verboso, muestra nombre de cada archivo eliminado rm arch1 arch2 dir1/arch3 rm -riv dir1/subdir1 rm -r * elimina TODOS los archivos y subdirectorios; no avisa. ¡Cuidado! rmdir rmdir [OPCIONES] DIRECTORIO ... elimina directorios vacíos. -p elimina directorios padre si quedan vacíos rmdir dir2 rmdir -p dir1/subdir11/subdir111 tail tail [OPCIONES] ARCHIVO ... muestra la última parte de un archivo, por defecto 10 líneas. Si son varios archivos muestra un encabezado con el nombre de cada archivo. -f -v -q -N -n N continúa tratando de leer; para archivos en crecimiento verboso, imprime encabezamiento con nombre del archivo silencioso, no imprime encabezado con nombre del archivo imprime últimas N líneas idem talk talk USUARIO [TTY] conversar con otro usuario. Si está en la misma máquina, alcanza con el nombre de login del usuario; si está en otra máquina, es preciso usar la forma usuario@maquina. Si el usuario tiene varias sesiones a la vez, puede indicarse la terminal, usualmente en la forma ttyXX. touch touch [OPCIONES] ARCHIVO ... cambia fecha, hora de acceso y/o modificación de los archivos indicados; les pone la fecha y hora actuales. Si los archivos no existen los crea vacíos. -a cambia sólo fecha de acceso -c no crea el archivo si no existe -m cambiar sólo fecha de modificación -r arch_ref fija la fecha según fecha del archivo arch_ref -t MMDDhhmm[[CC]YY][.ss] fija la fecha indicando mes MM, día DD, hora hh y minuto mm; puede agregarse también centuria CC y año YY y segundos ss. touch 01011200 dia1enero.h1 touch ahora.arc touch -r antes.arch arch1 arch2 umask umask [-S] [MODO] fija la máscara para permisos de creación según modo. Si modo se indica con número, es en octal; si no, es en modo simbólico. En general, los permisos de creación serán, para directorios, 0777 menos los bits de máscara; para archivos 0666 menos los bits de máscara. La máscara vigente es la fijada por defecto o la que se fije con este comando. Sin parámetros, umask muestra la máscara vigente. La máscara indica los permisos que se quitan al permiso fijado. -S muestra la máscara, sin fijarla (por defecto, sin parámetros) umask muestra la máscara vigente. umask 022 fija los permisos de creación de archivos en 0666 - 022, es decir, 0644; los de directorios en 2777 - 022, es decir, 2755 (Debian). uname uname [OPCIONES] muestra información de la máquina y del sistema operativo: -a -m -n -p -r -s -v toda la información máquina, tipo de hardware nombre de máquina en la red tipo de procesador edición (release) del sistema operativo nombre del sistema operativo versión del sistema operativo wc wc [OPCIONES] ARCHIVO ... cuenta líneas, palabras y caracteres de los archivos indicados o de la entrada estándar. Si son varios los archivos, imprime una línea por cada uno y un total. -c -w -l sólo caracteres sólo palabras sólo líneas man pwd | wc -l wc /etc/passwd /etc/group whatis whatis [OPCIONES] NOMBRE ... muestra una descripción corta de los comandos similares a nombre. -r interpreta cada nombre como una expresión regular -w interpreta cada nombre como conteniendo caracteres comodines whatis man whatis -w man* which which PROGRAMA ... indica la ruta completa de PROGRAMA, si éste está accesible a través de la variable PATH.. who who [OPCIONES] [am i] Quién está en el sistema. Muestra nombre de login, línea de terminal, hora de ingreso, nombre de máquina remota o display X. am i -H -u -w -m máquina y nombre de login del usuario invocante muestra encabezado de columnas tiempo inactivo; "old" es >24 horas; "." activo reciente si el usuario recibe (+) o no (-) mensajes igual que 'who am i' whoami whoami Muestra identificador del usuario efectivo actual. Si se ha usado su para adoptar otro usuario, muestra el nombre asociado con el usuario adoptado. whoami Referencias: Linux Debian/GNU. Páginas man, info. Víctor A. González Barbone - Ingeniero de Sistemas en Computación - http://iie.fing.edu.uy /~vagonbar E-mail: vagonbar en fing edu uy - E-mail personal: vagonbar@adinet.com.uy Instituto de Ingeniería Eléctrica - Facultad de Ingeniería - Montevideo, Uruguay. Curso Básico de UNIX Comandos de Filtro Referencias dd find grep, fgrep, egrep sort tr uniq dd dd OPCION ... copia un archivo, de entrada estándar a salida estándar por defecto, opcionalmente cambiando tamaño de bloques de entrada salida y realizando diversas conversiones. if=ARCHIVO leer la entrada del archivo indicado. of=ARCHIVO dirigir la salida al archivo indicado. ibs=BYTES leer la entrada en bloques de BYTES bytes. obs=BYTES grabar la salida en bloques de BYTES bytes. bs=BYTES leer y grabar entrada y salida en bloques. conv=CONVERSION[,CONVERSION]... convertir según argumentos. Las opciones numéricas admiten los multiplicadores b para 512, k para 1024. Los argumentos de conversión se separan por comas sin espacios; incluyen: ascii convierte EBCDIC a ASCII. ebcdic convierte ASCII a EBCDIC. ibm convierte ASCII a EBCDIC alternativo. block embloca cada línea de entrada en 'cbs' bytes, reemplaza nueva línea por espacio, rellena con espacios. unblock reemplaza espacios finales de cada bloque con nueva línea. lcase convierte mayúsculas a minúsculas ucase convierte minúsculas a mayúsculas. notrunc no truncar el archivo de salida. find find [DIRECTORIO...] [EXPRESION] Recorre una jerarquía de directorios buscando archivos seleccionados según cierta expresión y muestra información sobre los encontrados. Argumentos numéricos: +N -N N mayor que N menor que N exactamente N. Criterios de búsqueda: -name PATRON -iname PATRON -path PATRON -ipath PATRON -regexp EXP -iregexp EXP -lname PATRON -ilname PATRON -atime N -ctime N -mtime N -amin N -cmin N -mmin N -daystart -size N[bckw] -empty -user UNAME -group GNAME -uid N -gid N -nouser -nogroup el nombre aparea con PATRON; idem,insensible a mayúculas; nombre con vía completa; idem, insensible a mayústulas; nombre aparea con expresión regular EXP idem, insensible a mayúsculas; archivo es un enlace simbólico; idem, insensible a mayúsculas; último acceso N*24 horas atrás último cambio de estado N*24 horas atrás última modificación N*24 horas atrás último acceso N minutos atrás último cambio de estado N minutos horas atrás última modificación N minutos atrás mide tiempos desde las 0 horas de hoy tamaño de N bloques, caracteres, KB o palabras (2 bytes) archivo vacío, regular o directorio archivo del usuario UNAME archivo del grupo GNAME archivo del usuario de número N archivo del grupo de número N archivo sin dueño asignado archivo sin grupo asignado Acciones: -print imprime la ruta completa de los archivos encontrados. -ls lista los archivos encontrados en formato ls -dils -exec COMANDO {} \; ejecuta COMANDO sobre los archivos encontrados find /usr/local/doc -name '*.texi' busca en el directorio indicado los archivos de nombre indicado. find /usr/src -name '*.c' -size +100k -print muestra nombres de archivos terminados en .c con tamaño mayor de 100 K. find . -lname '*sysdep.c' busca enlaces simbólicos del nombre indicado. find /u/bill -amin +2 -amin -6 archivos que fueron leídos entre 2 y 6 minutos atrás. La medición de tiempos se hace desde 24 horas atrás (1 día atrás); para medir tiempos desde las 0 horas del día de hoy, usar la opción -daystart. find ~ -daystart -type f -mtime 1 archivos que fueron modificados ayer. find / -empty -exec rm -rf '{}' ';' busca archivos o directorios vacíos y los elimina. find . -name '*.h' -exec diff -u '{}' /tmp/master ';' compara archivos de "header" (*.h) del directorio corriente contra el archivo /tmp/master. grep, egrep, fgrep grep [ -e PATRON | -f ARCHIVO | PATRON ] OPCIONES ARCHIVO ... recorre los archivos indicados extrayendo las líneas que aparean con un patrón de cadena de caracteres. -G el patrón es una expresión regular básica; opción por defecto -E -F el patrón es una expresión regular extendida el patrón es una cadena fija Existen dos variantes: egrep, similar a grep -E, y fgrep, igual a grep -F. -c sólo muestra la cantidad de líneas -e PATRON usa el patrón indicado; útil cuando el patrón empieza con -f ARCHIVO obtiene los patrones del archivo, uno por línea -h suprime indicación de archivo cuando se busca en varios archivos -i ignora mayúsculas y minúsculas en el patrón y en los archivos -n indicar número de línea -v muestra las líneas que no aparean con el patrón -w aparea el patrón como una palabra -x el patrón aparea con toda la línea sort sort [OPCIONES] [ARCHIVO...] ordena, mezcla o compara todas las líneas de los archivos indicados o de la entrada estándar. Tiene 3 modos de operación: ordenar, verificar orden, mezclar archivos. -c -m verifica si los archivos ya están ordenados mezcla archivos ordenados en uno solo, ordenado -b ignora blancos adelante en la ordenación -d ordena considerando sólo letras, números y blancos -f ordena como si todas fueran mayúsculas -i ignora caracteres no imprimibles (fuera de 040-0176 octal) -n ordena como valores numéricos y no como ASCII -r invertir el sentido de la ordenación -o arch archivo de salida; puede ser el de entrada -t usar el caracter indicado como separador de campos -k POS1[,POS2] campos de ordenación, POS1 hasta POS2 inclusive; o hasta el final si no hay POS2 Las posiciones POS1 y POS2 son de la forma F.C donde F es el número del campo y C es el primer caracter desde el comienzo del campo (para POS1) o desde el final del campo (para POS2); si se omite C se ordena tomando en cuenta el primer caracter del campo. cat cat cat cat /etc/passwd /etc/passwd /etc/passwd /etc/passwd | | | | sort sort sort sort -t: -t: +4 -f | cut -d: -f5 -t: +5 | cut -d: -f6 -t: -n -k3,5 | cut -d: -f4,5 tr tr [OPCION]... CONJ1 [CONJ2] copia entrada en salida traduciendo, comprimiendo o borrando caracteres. CONJ1 y CONJ2 definen un conjunto ordenado de caracteres a transformar. La opción -c reemplaza CONJ1 por su complemento, los caracteres no especificados en el conjunto. -d elimina los caracteres de CONJ1. -s comprime caracteres repetidos en CONJ1 en una sola ocurrencia. -ds primero borra según CONJ1 y después comprime según CONJ2. El formato de CONJ1 y CONJ2 se parece al de las expresiones regulares, pero son sólo listas de caracteres. La mayoría de los caracteres se representan a sí mismos, pero existen las siguientes abreviaturas: \a Control-G, \b Control-H, \f Control-L, \' Control-J, \r Control-M, \t Control-I, \v Control-K, \OOO caracter representado por dígitos octales \\ barra inversa. M-N 0-9 intervalo de caracteres desde el M al N (M anterior al N) equivale a 0123456789 La notación [:CLASE:] expande a los caracteres predefinidos en las clases: alnum alpha blank cntrl digit graph lower print punct space upper xdigit letras y números. letras. espacio. caracteres de control. números. caracteres imprimibles, excluído el espacio. minúsculas caracteres imprimibles, incluído el espacio. signos de puntuación. espacio mayúsculas. dígitos hexadecimales. La traducción se realiza cambiando el primer caracter de CONJ1 por el primer caracter de CONJ2, el 2o. de CON1 por el 2o. de CONJ2, etc. Los caracteres no indicados en CONJ1 pasan incambiados. tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ tr a-z A-Z tr '[:lower:]' '[:upper:]' convierten minúsculas en mayúsculas. tr -d '\000' elimina caracteres nulos (octal 000). tr -cs '[a-zA-Z0-9]' '[\n*]' separa las palabras una por línea. tr -s '\n' comprime caracteres nueva línea en uno solo (elimina líneas en blanco). uniq uniq [OPCION]... [ENTRADA [SALIDA]] muestra una única línea para una entrada ordenada, eliminando líneas repetidas sucesivas. Opcionalmente, puede mostrar solo líneas que aparecen una vez, o sólo líneas que aparecen varias veces. La entrada debe estar ya ordenada; si no lo está, puede usars sort -u para lograr un efecto similar. -f N -s N -c -i -d -u saltear saltear indicar ignorar mostrar mostrar N campos antes de verificar unicidad. N caracteres antes de verificar unicidad. junto a cada línea el número de veces que aparece. mayúsculas y minúsculas al comparar. sólo líneas repetidas. sólo líneas únicas. Los campos son cadenas de caracteres separadas por uno o más blancos (espacios o tabuladores). Si se indican saltear campos y caracteres, los campos se saltean primero. Referencias: Linux Debian/GNU. Páginas man, info. Víctor A. González Barbone vagonbar en fing edu uy Instituto de Ingeniería Eléctrica - Facultad de Ingeniería - Montevideo, Uruguay. 0123414567834142 24280 24 48124 3632 1261255682 012345679 44376 !"#$%&'(%)*"+%',%-,./ (01.20$,10),01.+//-0 34 5.26$.!,0)*16+16"7-"166-0 !"#$%&'(%)*"+%',%-,./ 89-2.."$:.'.)0*,,;;;+<,6="-1,= >?4@A !"#$%&'(%)*"+%',%-,./ B";.C,D==,$B";.)'";.+'<.,,,-6 C.0"EF-F$GHIGJIKGGLFGMG) N"06."7":,*,.O.P(2$QQQ-;.,1-,./)7R,"11"866."76",IS,2,==.1"I T<.8"'K-G:1,==,01.6"U VAAWXYY@AZ@[[\]^Y_@\@\Ỳabb\Yc]dY 01234525471851327 9 9 !" #$ %&'()*+,&- .)*/ %0 1 2 , , '0 / 3 4- .&,,)56 7' &)8 +%, 9% %&: 9)8 + 9, ;4$4<= + 9 <= + 94$4<= /,, ;4$4<< /, << /,4$4<< 7-9 ' %< 01345367895 4336 475374 3974883433661341 13657764767146714754671487786347754353537 367!"16 373366#137315773451747734517334517$6717!77 4773 16716315773567167% 315 4717%4$3171 747776745 5477345177 176 471533 &46714' 3433131345353741( 533 7%4 ) )) * ** + ,49443713-3664434447173537' 3431 8736474 37!7431433134 04535375313 18348571673.3677737311737635676#1&/"0100 557374 73834435445374343012 0124562789 27512274567775827190157621 14595 92695 72 5791 50147 7972 157 1275812657212662795775556215 1 697562945718252472124752924751567758245 5775 8255852672827152 92 1 92695454777 57456878 846 926786 27915251858515 !2424779557557512491 55766282447745 5 45 565456 9266 1555191"5575 2651567758245 5795 12911522 2564776#515627 26745745647756$7 127477745 5727$57 8567758242622251 245952674777 7595452 545 8795751 570621491258126212662 8558691 282655456477 545658126955 "67 22 5575 6524751565 624 257 92515658126 5 29567 22 557225 2151212662%9195 25 525172519158126212662 891 5575878 1 591 24245 786 42462282 1451901 251242&7264257142721424'&(5757172"642445675662"926851575972151 4276279642457"27242751 176245)*0&1922 162462751242745 28262772642762182 145557!921491282 577555 92515 471"65757+,-./0+745694542719122625124222627264222 8728517257455454217 75457 "512 1192 11 1242571422"5242+,234 75565457 6579125124245694557455 5727 242265 624!9214 755 6525191282152 455755726851214625124257142!875 95455269172827586521918718"5745 57 829851745626$152 45 821475121625124257142251242571425727124226839.:2.+;-3<,=-:> ?2642571422"5242+,2=@, 75565457 6576272642455 4566945 22 55745912827455 5727 24226581265121227264251524222A74567 821475757 25162 726425714222755652425162212662272642571425727124226839.:2.+;-3<,=-:B 571422"5242+,2.-- 75565457 65728"A191272642456945 22 5575759725 6972851522 87255792182 11562 1242 1675796247182657456 82147 455 572726425727 24226581264572642926956272642571426686 295 21749 8745 155151622126624584959545175 191442768445 162577522872456215272642455571425727 24226839.:2.+;-3<,=-:C 7457 5745 5456251242&72642571427597215156885145 52 1 7555 9 145912822265557 " 5745647 6658527 2 821472 572477757121467 8214745512427264252 28515 012145654557896 550 954514192949 55146540 15465 05194 9614 16550190 94994515450549 10591450 92557 81469145 9614994 69654545555450914555 9165946 0121 6590 17094 69654540 5949 6914515490 99461465 5450 9255741549650961995145496144 52914 456545996914 549614590 19545569900565249658 559410 9951!9 "56 500 7 414 5092 9946 46146509614599#901945658 746 4556 51256 1654211$7094 6965499#94961 1290 15 55 65465546 16546590 15192 %455655 96914954949 090 1544961 9456 500 1547 &5#521654165956 500 6546 5454 5555550129614150 59 596965691465465 051' 49(1254'59659051150961)59695469*! 01249256145556 9461741459051256 1654211+7 ,55015 616590 1516599% 0156515591910121165969 549 491659699994014947&4961956 500 45565969949 69511 90 17 4 555#52149956 500 995 95549616501296141990 1 92961-99(1254.! /65246556 4619905990 151455655556 461999096 6914990 195 455741459051256 1654211++7 54 555#5215015 616590 1- 014.45165955496145909659 90 1-99(1254.! 4 2195529095096145059 05141415961546556 500 6549 6941 5596141545654%465514012961445995#5096171 2 095 2 05105961010129616556 500 565459 5195473151145565 216 09 05145294 5545050 9! 4 5501 5591 2195545012961456549414195 55901415540 51 9701296154552 2155#509455496165541919%6 6965 691465 0511 9 55955 051515529695490173995 9545 1529450 92554565549 051 5256 151291! 012345689 99944489668119444898141614 6989819823992 4619989696491499846899248298468934919444 894692318161499918946496914 4894999444!64129698914161489 99819823"992 1194448#8998921688116988981 $812345698!4848949999162162496188994498981418 14889 118$992 844969964189141914%998&481'8 141914%481(9611' (4 99494#69811211%99)49'*++,11684899698 94)411961116 2169614184691898 5891121112482924616661964691899 28)466992 489991 6819844969216 -819 2 "*,969189 6148198189894996961 11924619299948189468911 113149 11* 99891491 4641198 589823++, 4629411296998 588199819216 111 1 .1 16 991 2 / $61131012894816189494698282698934(98161 11931889 98 94)4118968(39489&3 &188461548919494#6 99898464)414129694846184898189 0123156789 1111 321 33 113 3 73 1 13 3 1 13 3 !7 113 7 13 3 73 9 2 3 "3 9 2 31 113 1 ""13# #111 $%113 3 73 $%1 13 3 $%1 13 3 !7 3&' ( ) 1 1 1111 1 2 2 1 1* 331 3+1 1 ,8012- 1 31 1& 1 ,11 1 .2 * 1 113 33 8 /31 0 * 118 1 311 23458 1136 1 111 131 131 11 11 18 3. 7 30 313182 11312-1 0 - 1%1 9 36 11112 1 313( 112- 113+111131 .111( 7 3 1 171312 6131 11 1 13+1131 -.11 3 31 18 $6 .11.11 3 31 1012- 3 3+1 36234!8 : 7 30 3. 1 1 3 13182 201%1 9 36 10 1%1 13* 1, ( 7 3( 01345678189 561 564 8 3111618 197598175416 818189779737 178 1511975797158719!"#$1518%777971877158719&#''(9 16785 1157 176)81577 1951997857181794547 * 515411851457 56 8487511146 56 78 5478 51 56 78 551 481897 176)81549781156 8 676 1981 1+517,94- 11+ .9678 15 411994- 11+ 7571486 78 795/4181 *7497116 7971877158776797579715877308767 5 76% 57 56 7/418 51 41587716178 185 46 189 576% 5 (5 15196478 5141118%77 58 5)9 767487431758 7308/4774876 7 184876% 01976% 415115156318 8 1+51 7%75161701976% 7 1+51515 3115631196 818 195 78 514151496197 6)81727 *75 6 815196 78 115 89755/418153 47 527197187715879776% 151667 4 6/8 7975512791518146)841 78514977757777 186719 615 (8195/41811-19 1976% 9578 31551 1871 79730671811540551 6787977767111 74197579751/4777308181976% 7368 315* 57 5 5 818%7 518 8615796 78 891 7415184178975981759757971518 8615 18%777 76% 9977 7368 3153 *7497+7/55149777775748/78811 17/418 57 56 78 5*7 4977/59117/418 51519718771587197 5 1576 51839786 ,19 1576 1839786 486 876 4867618 796478 5149771816 99755915 3915 754873778%17. 67761151579 198171-1647196 78 487 5 %16156 8647941811 17/418 586791551/4 5 9 57/418 591 515197 18771587*75981751839786 1971877158751/8 78(5 117486 78 6157 57/418 519 541186 86 8158 7915 7781-7 (8191-19 5/418151345678 59 576% 59(5:;(1897375117 59 671 4578 1998<9 671=578 +7/59 58 31519 576% 55 818%7 57974976741 57196 818 19 55 518787997> 191+ 115 576% 55118%7797 49741 7179 57 575748 + 1?6776115 9817*757975118%7 8791817976% @ 1@78/1@17153 01234578987 59554889895998 4 1234578987 59554889895998 4 599 123454 854889858988854788 4 84759 0459588875849859554589754957 95 954 584!1"5575 87#897 555 89754988971 $ 5995 55575 889 95598897589897588 412% 59&88759 02%485845 59545 8589'8 58885788897 5 (1)5 *1+5 %1,5 -1)!895 2%59595778 4 59984897 (1,. *1+. %1). -1.. 23459545 89589&888#/ 785 55759 045989&885885 5 58989&85759457 459812587884 (19 )+12 *19 ++ 12+ %19 )) 12 -19 )) 55 ) 12 384 844444487 8987589895599#580489888854 78455485 4#59&86577 9 0123567859 767 66767 7 5567366369667996566751 1567659 7 66767 7 556736636966799 777 9 77656 6751 169369 6676 6737 396 36 55! 56636636 9667996675639 1 013"#67$569"9 367$ %3 "39&'( 6936#67$ 6676976)6675$76 5696 69123569 *63 696%5 763663696671+63 9 369 6$6 '(3 6 56661 01,169) 7*6 6676 6769 36636 56636 9766 971 1-1567659 7 *6366369667 777 999 7766751 1.169) 7*6 6676 6769 56697/73969,- 577 596167 96057 6675/6* 336. 367 96577 5961 119 109 *636636 566675636636 96679963 9 1 012314567817 376474 !"#!"$!%&'()*+,)()* ,*-"%./)01.23456#,7"%+899$/ (:9;<=>=;;89 7?(7)*""!%,%2 @A4""%.&)))0)66#B%>+899$/ (:><>C8;=D< 5/))A)E"7?:/76%E76 5/))F50/ (:9999;CG9H0#&7'7);+8999$ 4)I?4JK) *L:MMKKKF7?JKF5M675)M)N;=>CM79ODCO8C<CCCCM P':KKKF"LF' &L7)B:*L:MMKKK39<F!5F5M6J"LK1)M67M"36K3"7?3"L83F*5" B7")E:*L:MMKKKF'7F'M"L357")M