Está en la página 1de 314

ix n U i ix n n U U ix ix n n U n U ix U x n i ix n U n U ix ix nix n n U U ix U i ix n n Un U U ix ix

Curso VzAIX01

UNIX/AIX Basics for Operators

Ramn Barrios Lascar 2010

Le dedico este libro y todo mi trabajo a la mujer que ha soportado que pase horas y horas frente a un jugando con computadoras que parecen primitivas. Oh Estefana!

Marcas registradas En este documento aparecen una cantidad de trminos que son marcas registradas o marcas comerciales de IBM u otras compaas. IBM es una marca registrada de International Business Machines Corporation. Las siguientes sin marcas registradas de International Business Machines Corporation en los Estados Unidos de Amrica y otros pases: AIX DB2 DB2 UDB POWER POWERparallel PowerPC eServer SP pSeries

Intel es una marca registrada de Intel Corporation en los Estados Unidos de Amrica y otros pases. UNIX es una marca registrada de The Open Group en los Estados Unidos de Amrica y otros pases. Sun y Sun Solaris son unas marca registrada por Sun Microsystems Corporation en los Estados Unidos de Amrica y otros pases. Linux es una marca registrada de Linus Torvalds en los Estados Unidos de Amrica y otros pases. Microsoft Windows es una marca registrada de Microsoft Corporation en los Estados Unidos de Amrica y otros pases. Edicin de septiembre de 2010. Ramn Barrios Lascar 2003, 2010. Todos los derechos reservados. Este documento no puede ser reproducido sin el permiso y consentimiento expreso de Ramn Barrios Lascar.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

Contenidos
INTRODUCCIN .............................................................................................................................................9 OBJETIVOS AUDIENCIA EL CONCEPTO GENERAL CAPACIDADES DEL HARDWARE
Los Procesadores La Memoria De Acceso Directo, RAM Los Buses Externos Las Comunicaciones Externas El Substrato Electrnico El Sistema De Manejo De Los Recursos De Hardware Capacidades Base (por Ser Unix) Capacidades Logradas Debido Al Hardware Que Soporta Capacidades nicas

9 9 11 15
15 17 18 19 19 20 23 23 24

INTRODUCCIN A SISTEMAS IBM P5 Y PSERIES ........................................................................................11

CAPACIDADES DEL SOFT WARE

23

SISTEMAS OPERATIVOS UNIX ......................................................................................................................27 HISTORIA, TERMINOLOGA DEFINICIONES COMPONENTES DE UN SISTEMA UNIX EL KERNEL O NCLEO DEL SISTEMA OPERATIVO SISTEMAS DE ARCHIVOS/DE ARCHIVADO
Nomenclatura De Archivos Conceptos: Directorios Conceptos: Archivos Conceptos: Archivos Especiales Nodo

27 29 31 33
33 34 34 34 37 38 38 38 42 43 44 46 46

INTRFACES DE USUARIO: INTRPRETE DE COMANDOS (SHELL)


Intrprete De Comandos Original: Sh Intrprete De Comandos De La Universidad De Berkeley: Csh Intrprete De Comandos Comercial AT&T: Ksh Intrprete De Comandos De Cdigo Abierto: Bash Gnome (GNU Network Object Model Environment) KDE (K Desktop Environment) CDE (Common Desktop Environment) Editor Ed Editor Vi

37

INTERFACES DE USUARIO: AMBIENTES DE ESCRITORIO GRFICO

41

APLICACIONES GENERALES EN UNIX: EDITORES DE TEXTO APLICACIONES GENERALES EN UNIX: AMBIENTES DE DESARROLLO PERFILES DE USUARIOS Y DE GRUPOS DE USUARIO COMANDOS BSICOS DE SESIN DE USUARIO
Entrar Al Sistema Quin Soy (qu Usuario Soy): Whoami Quienes Estn En El Sistema (qu Usuarios Estn Conectados): Who A Qu Grupos Pertenezco: Groups Cambiar Mi Contrasea: Passwd Salir Y Desconectarse De La Sesin: Logout

45 49 51 53
53 53 54 54 54 55

COMANDOS BSICOS DE UNIX ...................................................................................................................53

ESTRUCTURA ESTANDAR DE LOS COMANDOS

58
3

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

Acerca De Los Comandos Acerca De Las Opciones Qu Fecha Y Hora Es En El Servidor: Date Cunto Se Demora Una Tarea: Time Calendario: Cal

58 58 60 60 61

COMANDOS RELACIONADOS CON LA FECHA Y LA HORA ..........................................................................60

COMUNICACIN CON OTROS USUARIOS ...................................................................................................64 UNIX Y LAS COMUNICACIONES MENSAJES DIRECTOS A LA SESIN: WRITE COVERSACIN (CHAT) CON OTROS USUARIOS: TALK MENSAJES A TODO EL MUNDO: WALL CORREO ELECTRNICO: MAIL
Modo Interactivo Y Lectura Del Correo Electrnico Modo Directo Y Envo De Nuevos Mensajes De Correo Electrnico

64 66 68 70 72
72 74

ARCHIVOS Y DIRECTORIOS: MANEJO DE DIRECTORIOS ...........................................................................76 DIRECTORIOS LISTAR CONTENIDOS DE DIRECTORIO: LS


Uso Bsico Del Comando listar Contenidos Del Directorio Listar Contenidos De otro Directorio Listar Incluyendo Los archivos Normalmente Ocultos

76 78
78 78 79

LISTAR CONTENIDOS DE DIRECTORIO CON DETALLES: LS L MOVERSE ENTRE DIRECTORIOS: CD CREAR DIRECTORIOS: MKDIR CAMBIAR NOMBRE DE DIRECTORIO (O MOVER): MV REMOVER DIRECTORIOS: RMDIR
Remover Una Jerarqua De Directorios: Rmdir p Crear Toda Una Estructura De Directorios: Mkdir p

80 82 84 86 88
88 85

ARCHIVOS Y DIRECTORIOS: MANEJO DE ARCHIVOS .................................................................................90 ARCHIVOS LISTAR ARCHIVOS: LS LISTAR ARCHIVOS CON DETALLES: LS L CREAR ARCHIVO VACO: TOUCH COPIAR ARCHIVOS: CP
Nombres De Los Archivos Nombres Por Ruta Absoluta Y Por Ruta Relativa

90 94 96 98 100
100 100 101 102 102 104 106 106 108 91 92

MOVER O RENOMBRAR ARCHIVOS: MV AGREGAR NOMBRES A ARCHIVOS: LN

Uso De Cp Para Hacer Una Copia Sencilla De Un Archivo Uso De Cp Para Copiar Varios Archivos Uso Del Comando Cp Para Copiar Directorios Completos: Cp -R Uso De Mv Para Renombrar Un Archivo Uso De Mv Para Mover Varios Archivos Agregarle Un Nuevo Nombre A Un Archivo Individual Agregarle Un Enlace Simblico A Un Archivo Individual Agregarle Enlaces Simblicos A Mltiples Archivos A La Vez Remocin De Directorios

102 104 106 108 110

AGREGAR ENLACES SIMBLICOS: LN S

REMOVER ARCHIVOS Y NOMBRES DE ARCHIVOS: RM DETERMINAR TIPO DE ARCHIVO: FILE

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

EDICIN DE ARCHIVOS DE TEXTO: VI ......................................................................................................112 ARCHIVOS DE TEXTO EDITAR ARCHIVOS EXISTENTES CON VI CREACIN DE NUEVOS ARCHIVOS DE TEXTO MOVERSE DENTRO DE UN ARCHIVO
Moverse De A Lneas Moverse De A Pginas O Pantallas Moverse Segn El Contexto Editores De Texto: Vi Modos De Vi

112 114 116 118


118 118 119 112 112

INSERCIN DE NUEVOS CONTENIDOS DE TEXTO (EN VI) COMANDOS BSICOS DE EDICIN DE TEXTO (DE VI) BUSCAR Y REEMPLAZAR TEXTOS CONTENIDOS (DENTRO DE VI) TABLEROS DE RECORTES: CORTAR, COPIAR Y PEGAR EDITAR Y TRABAJAR CON MS DE UN ARCHIVO DE TEXTO PERSONALIZACIN DEL EDITOR DE TEXTO VI
Uso Prctico De Los Archivos De Opciones De Vi Formato De Un Archivo De Opciones De Configuracin De Vi

120 122 124 126 128 130


132 132

EL AMBIENTE DE TRABAJO: PROCESOS Y VARIABLES ..............................................................................134 EL AMBIENTE DE TRABAJO PROCESOS LISTAR PROCESOS
Iniciar Y Detener Procesos Listado Bsico De Procesos: Ps Listado De Todos Los Procesos: Ps e Listado Largo (tcnico) De Los Procesos: Ps l Listado Completo (full) De Informacin De Los Procesos: Ps f Variantes BSD - Listado Extendido De Procesos: Ps U NombreUsuario Listado Extra Extendido De Procesos, En BSD: Ps aux Acerca De Las Columnas: %CPU Acerca De Las Columnas: %MEM Acerca De Las Columnas: STATE Ejecucin De Procesos de Fondo (en Background) Listar Procesos De Fondo Manejo De Las Tareas De Fondo Con Fg Y Con Bg Seales A Procesos: Combinaciones De Tecla Y El Comando Kill Sintaxis Del Comando Kill Acerca De Las Seales Listar Las Variables De Ambiente Del Intrprete Shell Definicin De Nuevas Variables En El Intrprete Shell Uso Del Comando Export Paso De Variables Nuevas No Preexistentes En El Intrprete Uso Del Comando Kill Para El Envo De Seales A Grupos De Procesos

134 136 138


138 138 138 139 140 141 142 143 143 144 144 145 145 146 146 150 151 152 153 154 136

PROCESOS DE FONDO

144

VARIABLES DE AMBIENTE

150 152 154

PASO DE VARIABLES ENTRE GRUPOS DE PROCESOS PASO DE SEALES ENTRE GRUPOS DE PROCESOS

SEGURIDAD Y PERMISOS DE ARCHIVOS ...................................................................................................156 ARQUITECTURA DE SEGURIDAD DE UNIX PROCESOS Y PERMISOS USUARIOS Y GRUPOS DE USUARIOS PERMISOS DE ARCHIVOS: LS -L
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

156 158 160 164


5

PERMISOS DE DIRECTORIOS: LS -LD CAMBIAR PERMISOS: CHMOD CAMBIAR PROPIETARIO: CHOWN CAMBIAR IDENTIDAD DE USUARIO: SU EL INTRPRETE DE COMANDOS COMODINES (DE NOMBRES)
El Intrprete De Comandos Y El Uso De La Multitarea El Intrprete De Comandos Y Los Metacaracteres Comodn Bsico ? (cualquier Un Caracter Del Nombre) Comodn Amplio * (cualesquiera Caracteres Del Nombre) Comodn [xyz] (cualquier Un Caracter De La Lista) Comodn [!xyz] (cualquier Caracter Que No Est En La Lista) Comodn [x-z] (cualquier Caracter Que Est En Un Rango) Comodn [!x-z] (cualquier Caracter Que No Est En El Rango

166 168 170 172 174 176


176 177 178 178 179 179 174 174

USO EFECTIVO DEL INTRPRETE DE COMANDOS ...................................................................................174

EJECUCIN DE COMANDOS EN SECUENCIA EJECUCIN CONDICIONAL DE COMANDOS

182 184
184 184 185 186 187 188 188 190 190 191 193

REDIRECCIN: ARCHIVOS

Cdigos De Retorno De Una Ejecucin Ejecucin Condicional: Ejecucin Slo Si El Anterior Ejecuta Sin Error Ejecucin Condicional: Ejecucin Slo Si El Anterior Ejecuta Con Error Archivos Estandar: entrada Estandar, salida Estandar, salida De Errores Estandar Redireccin De La Entrada Desde Un Archivo Redireccin De La Salida Hacia Un Archivo Redireccin De Los Mensajes De Error Hacia Un Archivo Redireccin De La Salida Sin Destruir Redireccin De Los Mensajes De Error Sin Destruir Combinaciones De Redirecciones Variables De Ambiente Importantes En El Shell

186

SUBSTITUCIN DE VARIABLES

192 196 198 200


200 201 202 198

SUBSTITUCIN DE COMANDOS REDIRECCIN: TUBERAS ESCAPES


Comandos Filtro

Escape De Un nico Caracter: Smbolo \ Escape De Todos Los Significados Especiales: ' Escape De No Todos Los Significados Especiales: "

UTILIDADES DE TEXTO ..............................................................................................................................204 EL CONCEPTO VOLCAR TEXTO A LA SALIDA ESTNDAR: CAT CONTAR CARACTERES, PALABRAS, LNEAS: WC NUMERAR LNEAS DE TEXTO: NL PAGINAR TEXTO: PG OBTENER PRIMERAS LNEAS DE TEXTO: HEAD OBTENER LTIMAS LNEAS DE TEXTO: TAIL OBTENER COLUMNAS DE TEXTO: CUT COMBINAR TEXTO EN COLUMNAS: PASTE COMBINAR TEXTO EN COLUMNAS: JOIN FILTRAR LNEAS DE TEXTO: GREP EXPRESIONES REGULARES BSICAS (EN GREP) FILTRADO AVANZADO DE LNEAS DE TEXTO: EGREP
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

204 206 208 210 214 216 218 222 226 230 234 238 242
6

EXPRESIONES REGULARES EXTENDIDAS (EN EGREP) ORDENAR LNEAS DE TEXTO: SORT TRANSLITERAR CARACTERES: TR UTILIDADES, MS UTILIDADES BSQUEDA DE ARCHIVOS: FIND
Criterios De Seleccin En Find Acciones En Find Operadores Lgicos En Find

246 250 256 262 264


264 267 268

UTILIDADES AVANZADAS DE ARCHIVOS Y DIRECTORIOS .......................................................................262

EJECUCIN DE COMANDOS EN CANTIDADES DE ARCHIVOS: XARGS COMPRIMIR ARCHIVOS 1: COMPRESS & UNCOMPRESS COMPRIMIR ARCHIVOS 2: GZIP & GUNZIP EMPACAR ARCHIVOS: TAR COMANDOS VARIOS
Comando Host Comando Hostname Comando Uptime Comando Du Comando Sum Comando Cksum Comando True Comando Yes

274 278 282 286 292


292 292 292 293 294 294 294 295

USO AVANZADO DEL INTRPRETE DE COMANDOS: .................................................................................296 USO DEL INTRPRETE COMO UN LENGUAJE DE PROGRAMACIN PRUEBAS LGICAS: TEST
Desarrollo De Shell Scripts Pruebas Lgicas Bsicas Pruebas Lgicas Con Cadenas De Texto Pruebas Lgicas Con Archivos

296 298
298 300 300 296

OPERADORES Y OPERACIONES: EXPR COMANDOS DE CONTROL DE FLUJO: IF, THEN, ELSE & FI COMANDOS DE CONTROL DE FLUJO: FOR, DO & DONE COMANDOS DE CONTROL DE FLUJO: WHILE, DO & DONE MANIPULACIN DE VARIABLES: LET

302 306 308 310 312

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

Introduccin
Objetivos
El presente curso pretende, mostrar, explicar y poner en prctica una serie de comandos y tcnicas que permiten a un individuo trabajar con sistemas UNIX, Linux, POSIX y parecidos. La idea del mismo es dar los conocimientos suficientes a un usuario u operador para poder trabajar cmoda y eficientemente a travs del uso de una cuenta de acceso a un sistema multiusuario como los mencionados en modo texto; es decir a travs del uso de comandos y toda la sintaxis de un intrprete de comandos estilo Bourne. Al tomar este curso y aprender lo que aqu se pretende, el estudiante logra los conocimientos necesarios para trabajar en sistemas como Sun Solaris, Hewlett-Packard HPUX, Digital/Compaq/HP UNIX /Tru64, SCO OpenServer/OpenDesktop, SCO UnixWare, QNX y QNX Centrino, FreeBSD/NetBSD/OpenBSD, prcticamente todas las distribuciones de Linux, y muy especialmente, IBM AIX. Adicionalmente los comando son usables tambin en la interfaz de texto del sistema Mac OS X.

Audiencia
Este documento y el curso relacionado est dirigido a profesionales de sistemas, sin experiencia o capacitacin previa en el manejo de sistemas UNIX, pero que saben trabajar y conocen de sistemas de cmputo en general, como sistemas estaciones Microsoft Windows y Apple Mac OS X.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

10

Introduccin a sistemas IBM p5 y pSeries


El concepto general

Desde su introduccin, los sistemas de servidor multiusuario basados en tecnologa POWER disponibles al pblico por IBM han sido sistemas muy avanzados que ofrecen: Muy alto desempeo (tal vez el ms) en su gama de precios Flexibilidad en las configuraciones Las ms avanzadas y variadas herramientas y mecanismos de disponibilidad del mercado Un sistema operativo capaz de usar toda la funcionalidad del hardware Soporte a tecnologas de terceros tecnologas abiertas y estndares de la industria-. Para comprender a cabalidad las capacidades que ofrecen estos sistemas es bueno concentrarnos en los mercados principales a los que IBM ofrece soluciones basadas en POWER: Organizaciones que, bajo ningn concepto, pueden dejar de disponer de sus servidores centrales ms que unas horas al ao mximo. Organizaciones que usan aplicaciones de servidor de datos, en especial como ncleo central en un esquema distribuido cliente/servidor.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

11

Organizaciones que funcionan o hacen disponibles sus servicios las 24 horas del da, los 365 das del ao. Estas organizaciones tampoco tienen amplias ventanas de tiempo para mantenimientos del sistema, es ms ni an para tareas rutinarias, como las necesarias crticas- copias de respaldo. Organizaciones con ms de una sede, que centralizan sus datos en un nico punto, con un complejo pero muy eficiente sistema de comunicaciones. Organizaciones en las que centenares, tal vez miles de usuarios usan aplicaciones cuyas fuentes de datos estn contenidos en unos muy pocos sistemas, pero en las que los mismos datos son tal vez contenedores con mltiples o muchos terabytes. Si analizamos detenidamente, muchsimas organizaciones en nuestro pas clasifican en uno o ms de los parmetros arriba mencionados, pero en especial: Organizaciones financieras: bancos, corporaciones financieras y de crdito, corredores de bolsa. Empresas de servicios pblicos (las llamadas utilities): agua, energa, telefona, gas. Instituciones del estado, en especial las relacionadas con la seguridad y el sistema impositivo. Entidades relacionadas con la salud: hospitales y clnicas. Mirando los conceptos de diseo y desarrollo, los requerimientos de funcionalidad y capacidad de las organizaciones que adquieren servidores p de IBM, es preciso que tanto el hardware como el software se reconozcan mutuamente, que empalmen y sincronicen, de manera que se tengan servidores siempre disponibles (en realidad con cinco nueves). IBM ofrece entonces: Servidores basados en hardware de alto desempeo, con: Mltiples procesadores, cada uno con muy alto desempeo. Se ofrecen servidores p con hasta 256 procesadores POWER 6 o POWER 6+ o Power7 (usables como 512 procesadores lgicos) en configuraciones SMP (no de cluster). Grandes cantidades de espacio de ejecucin, RAM. Se ofrecen servidores p con hasta 8TB de RAM (s, 8192GB de memoria de acceso directo). Amplia capacidad de expansin en tarjetas. Servidores base y Es bueno record ar que IBM expansiones externas para lograr sistemas con capacidad de significa Int ernacional centenares de ranuras, todas usables internamente, todas configuradas Business Machines, es decir mqui te automticamente la Plug And Play. Muchas de estas ranuras, cuando negocionas yinesrnacionales de s, te siempre ha sido y ser el no todas, soportando estndares como PCI-X con conectado en mercado que maneja, y para el que disea caliente. sus solucione Amplsima capacidad de expansin en espacio de disco. Servidores
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow
s y productos.

12

base y expansiones para lograr servidores con capacidad en centenares de terabytes de espacio. Recordando que las versiones actuales del sistema operativo AIX puede manejar exabytes de espacio en disco. Los mejores esquemas de deteccin, dignstico y reaccin ante los errores. Los sistemas p han sido diseados desde el comienzo para mejorar, por encima de toda la industria, cmo los mismos reaccionan ante los errores. Es de notar que IBM viene trabajando en estos temas desde la dcada de los setenta, para implementar y ofrecer esquemas adecuados en sus sistemas mainframe de la poca. Las mismas tecnologas las ha ido evolucionando y mejorando para ofrecer en todos sus sistemas i (antes iSeries y AS/400), sus sistemas z (antes zSeries y S/390) y lo que nos atae de momento, los sistemas p (antes pSeries y RS/6000).

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

13

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

14

Capacidades del hardware


IBM viene ofreciendo a sus clientes y el mercado en general- servidores de negocios centrndose en unas pocas pero avanzadsimas tecnologas: Los procesadores IBM ofrece servidores con procesadores POWER 6 y Power7 en las familias p, e i. Los mismos procesadores han evolucionando desde su invencin e implementacin de fines de los ochenta al da de hoy. Entre otras muchas caractersticas estn: Ancho de dato nativo de 64 bits, pero, pudiendo manejar sin emulaciones por software datos a 32, 128 y 256 bits, segn el caso. Los sistemas operativos actuales corren a 64 bits es decir nativos- en estos procesadores. Los mismos pueden trabajar en dos orientaciones de palabra, tanto little-endian como big-endian, siendo nativos en little. AIX siempre ha sido little-endian. Esta ltima orientacin de palabra es la natural de TCP/IP, por eso a veces se le denomina orden de red. Doce (12) unidades paralelas de ejecucin (pipelines), con diferente funcionalidad, pero funcionando todas al tiempo si es necesario. Diferentes unidades se encargan de los accesos a RAM (fectch, load, store), los clculos con enteros y con unidades menores como los bytes, los clculos con nmeros de punto flotante. Recuerde que por ser tecnologa RISC, la RAM no es accedida directamente por el procesador, si no que se usa como una remote data store. Los procesadores actuales tienen un archivo de registros con 64 direccionables directamente, todos con el ancho nativo. Al mismo tiempo tienen un archivo de registros temporales fantasma con capacidad para contener hasta 210 estados de registro en etapas parciales de ejecucin. Esto ltimo le permite despachar ms operaciones en paralelo que cualquier otro ofrecimiento real y actual en el mercado. Procesadores con la posibilidad de procesar instrucciones de dos hilos de ejecucin diferentes simultneamente. Esta capacidad lleva por nombre en IBMSimultaneous Multi-threading (SMT). En otras arquitecturas se conoce con otros nombres, por ejemplo Hyper-Threading. Los procesadores Power6 actuales son todos fabricados con doble ncleo (dual core) o con cuadruple ncleo (quad core); los procesadores Power7 actuales son todos fabricados con ocho ncleos (octo core). Estas caracterstica de fabricacin implica que cada dos, cuatro u ocho procesadores estn litografiados en un mismo substrato de silicio. Cuando dos o ms procesadores estn en el mismo substrato pueden llegar a comunicarse a la velocidad nativa a la que trabajan, no en divisores, como las otras tecnologas. Cuando un cliente adquiere un sistema con un solo

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

15

procesador, realmente adquiere un magazn de procesador con un chip de doble ncleo, pero con uno de ellos permanentemente desactivado. En el mismo substrato donde se han litografiado los procesadores se incluyen tanto la memoria cach de nivel 1 (L1), funcionando a la misma velocidad que el ncleo de cada procesador, y la memoria cach de nivel 2 (L2), funcionando a la mitad de la velocidad que cada ncleo. Cada procesador posee, maneja y accede, su propio cach L1, de 192KB, y su accede a un banco compartido de cach L2, de 1.9MB (realmente 3x640KB). El cach L2 funciona tambin a la mitad de la velocidad del procesador. En una circuitera y tarjetera externa a cada procesador, pero protegidas por el mismo magazn contenedor se encuentra la memoria cach de nivel 3 (L3) que, a pesar de ser independiente es controlada directamente por una rea dedicada de transistores (cada procesador tiene un controlador integrado de memoria y de cach) dentro de cada procesador. Cada banco de cach L3 es de 36MB por par de procesador. Se dice que cada POWER 5 o posterior incluye un chip RAM Cache Controller. Todo lo anterior es vigilado permanentemente por circuitera de diagnstico integrada; diseada e implementada con, y al mismo tiempo que cada procesador, controllador y banco de cach. Los mecanismos de diagnsticos ni son externos ni son agregados a cada elemento, son una parte fundamental del diseo y de la fabricacin del mismo, con puertos de comunicaciones al mundo exterior. Ahora, todos los puertos de comunicaciones del sistema de diagnstico son manejados externamente a cada elemento diagnosticado, para que del mismo no dependa la deteccin de las fallas.
rvidor POWER no funcionar Usando los mismos puertos de diagnstico, el sistema detecta, si p r o c e s a d o r todos sus es estn configura, maneja la energa, y en especial la temperatura de desactivados por fallas. todos los elementos. El avanzado sistema de manejo de energa de los procesadores POWER 5 usados en los sistemas p5 contnuamente apaga y enciende los subsistemas que no se estn usando, de manera que, cuando se hayan en reposo ni consumen prcticamente energa y por consiguiente tampoco disipan calor. Note que un se

Note que adicionalmente a todo, un sistema p puede funcionar con algunos de los elementos arriba mencionados totalmente desactivados por fallas. Lo normal es que el sistema de monitoreo automtico apagar y virtualmente desconectar los elementos fallidos. Mientras uno de los sistemas operativos dependientes tenga recursos para continuar el sistema como un todo, proseguir en operacin; en muchos casos sin que los usuarios cliente sean conscientes de los hechos.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

16

Ms an, tanto los registros, como los bancos de cach, como las lneas internas de comunicaciones funcionan con ECC2 todo el tiempo. La memoria con ECC2 puede detectar fallas de hasta dos bits por byte, y corregir cambios de un bit por byte, automticamente, sin concurso del sistema operativo o de hardware externo. La memoria de acceso directo, RAM IBM se ha caracterizado desde los inicios por notar que estos servidores sirven a una multitud de usuarios, de hecho centenares, tal vez miles. Esto hace que normalmente ejecutan mltiples procesos simultneamente, y cada uno con un lote de ejecucin (working set) grande, los servidores p, son capaces de: Soportar la expansin a miles de gigabytes, en las ofertas actuales, hasta 2TB de RAM mxima. Este ofrecimiento es de los ms grandes del mercado. Soportar los chips de RAM de ltima tecnologa, que permitan amplios anchos de banda. Los servidores actuales soportan DDR1 y DDR2 (double data rate), siendo ofrecidos siempre con DDR2, a menos que el cliente solicite ms de 512GB de RAM, ya que las ofertas actuales de mercado no hacen posible armar 2TB de RAM con unos pocos chips DDR2. Trabajar siempre con controladores de RAM, lneas de acceso y pastillas de memoria con deteccin y correccin automtica de errores chip-kill. IBM usa y slo soporta memoria con ECC2. Adicionalmente a esto, el sistema de deteccin y correccin de errores de hardware visualiza permanentemente la RAM, y en el caso de errores contnuos sobre un mismo SIPP de RAM, puede llegar a desactivarlo, sin que se pierda la pastilla completa. Este tipo de cambios son registrados en memoria no voltil (NVRAM) para que sobreviva a reinicios del sistema. Soportar simultneamente la comunicacin de los mltiples procesadores y mltiples pastillas DDR sin generarse conflictos y bloqueos contnuamente. Esto como un ofrecimiento nico del mercado, los servidores p5 incluyen una circuitera que implementa un switch de RAM de alta velocidad (high speed RAM switch), con un ancho de banda de entre 16GB/s y 270GB/s segn el modelo, superior a todo lo otro en el mercado. Este switch permite la funcionalidad avanzada de los buses de RAM, que logra acceso simultneo en paralelo de los procesadores, los controladores de memoria cach y los dispositivos con DMA sin conflictos. Manejar tanto los controladores de RAM como los controladores de cach con doble entrada (dual ported), de manera, que en el caso de la RAM, puede ser accedida al tiempo por los procesadores (el controlador de cach realmente) y por las tarjetas adaptadoras con uso de DMA, sin conflictos; y, en el caso de los bancos de cach, puede ser accedida al tiempo por los procesadores y por la RAM, sin conflictos. Los

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

17

accesos adems pueden ser de lectura o de escritura, simultneamente, y sin problemas. Los buses externos Los servidores IBM p5 son diseados con base en una jerarqua de buses jerarquizados, con correccin de errores ECC2 permanente, con zonas de intercambio de alta velocidad (buffers), y todos con una variante de PCI (Peripheral Component Interconnect). Los servidores p5 ofrecen: Mltiples, realmente decenas, de buses PCI en diversas variantes, desde PCI estndar de 32bits y a 33MHz hasta los ltimos PCI-X, de 64 bits y a 512MHz. Todos estos buses, con manejo de errores permanente, a travs de puertos de deteccin, configuracin, manejo de errores, y de energa independientes. Acceso externo a todos los buses, es decir aquellos que incluyen ranuras para tarjetas adaptadoras, con funcin de desactivado, es de decir de apagado lgico. Estos buses de acceso externo son armados de manera que soportan normalmente una nica ranura por bus. Esto logra aislar los problemas, evitar la interferencia intertarjetas y facilita las funciones de particionamiento lgico dinmico (Dynamic Logical Partitioning, DLPAR). Mltiples buses PCI Express con funciones de conectado y desconectado en caliente (hot plug). Esto, combinado con las funciones arriba mencionadas logra el mejor manejo de cambios de hardware en caliente de la RIO2 es sigla de Remote Input/ industria para el segmento de los servidores intermedios. Output, vers Soporte a expansiones externas con conectividad a travs de un bus externo intermedio de muy alta velocidad (2GB/s), adicionado con un bus de manejo de poder (RIO2-GX + SPCN). Las mencionadas expansiones hacen que se puedan agregar buses PCI (de diversas variantes) y que los mismos sean vistos como buses locales, externos, pero vistos y usables como si fueran internos. Las caractersticas anteriores todas manejadas con configuracin automtica, usando el estndar que PCI incluye para ello.
ion 2, S y s t e m Po w e y SPCN de r Control Network.

Adicionalmente, los servidores p5 incluyen buses USB (Universal Serial Bus) versin 2, estndar de la industria, que soporta dispositivos de baja velocidad como teclados, ratos y disqueteras externas. Como es en las otras plataformas, USB no solo es de deteccin automtica, si no de conectado y desconectado en caliente.

Tanto PCI com o USB son estndares diseados, implementados, y de Intel Corporat licenciados ion.

Para cerrar el crculo, los servidores POWER han sido diseados para tener un ancho de banda amplio a los sistemas de almacenamiento, por ello estos mismos son o SCSI de ltima
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 18

generacin (actualmente UltraSCSI 320) o de canal de fibra de ltima generacin (Fiber Channel de hasta 4Gb/s). Mientras que todo sistema de almacenamiento por bus SCSI es visto como una data store local, con deteccin y configuracin automtica de los componentes, los sistemas de almacenamiento FC pueden verse como una data store local o remota, pero en ambos casos, con deteccin y configuracin automtica. Igual que siempre, en ambos casos, con manejo dinmico de errores, usando las funciones que cada protocolo de hardware incluye e implementa. Las comunicaciones externas Como los sistemas p5 normalmente no son usados directamente, si no que prestan todos sus servicios a infinidad de usuarios a travs de una o ms redes, es crucial que se puedan implementar eficientemente las comunicaciones. Los servidores p5 ofrecen:
El fu nc io na m ie nt o au to crossover que tie implementadas las tar n e n jet red IBM sigue el estn as de dar MDIX

Dos puertos de red integrados en una sola tarjeta de redes ethernet con soporte a 10, 100 y 1000 Mb/s. Dicha tarjeta incluye una antememoria en hardware de 4MB, para evitar que las congestiones se den en la misma, adems de que tiene acceso directo a la RAM, esto es, DMA. Como todas las tarjetas ethernet ofrecidas por IBM, tiene funciones de auto-crossover, es decir que detecta y selecciona automticamente la polaridad de la seal del medio, as como la velocidad y el modo duplex/simplex. Opciones de red ethernet adicionales, como tarjetas con soporte slo a 10/100 Mb/s o con soporte a 10000 Mb/s. Opciones para la descarga de la funcionalidad de chequeo de paquetes IP, de esta forma se elimina la tarea a la pila IP de sistema operativo esta tarea, aliviando la carga a el(los) procesador(es). Tarjetas adaptadoras de red con la funcionalidad de IPSEC integrada, para eliminar esta tarea igual que en el caso anterior- a la pila IP del sistema operativo. Opciones de redes adicionales, como Token Ring, FDDI y ATM. Adicionalmente, soportan encendido a travs de la red (wake-up on lan). El substrato electrnico Las tarjetas principales (system planars o io planars en la documentacin de IBM) de los servidores p5 son fabricados con tecnologa de ocho capas. Esto permite ms planos para la implementacin de lneas de comunicaciones entre dispositivos. No es por capricho, es una decisin consciente, necesaria para la implementacin de los canales de comunicaciones por donde se hace la deteccin, configuracin, manejo del poder y de la temperatura de todos,
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 19

los dispositivos agregados. Note que la mayora de los ofrecimientos de otros proveedores son creados con tecnologa de cuatro o cinco capas, lo que dificulta la implementacin de este tipo de esquemas en los ofrecimientos de la competencia. El sistema de manejo de los recursos de hardware Mientras que los ofrecimientos de terceros en este rango de mercado incluyen soporte a funcionalidad de manejo de los recursos de hardware, y de las fallas de los mismos, los servidores p5 de IBM van mucho ms all: incluyen un procesador POWER (especficamente PowerPC 405GT) corriendo de lneas de poder y software independientes, y con comunicaciones independientes con el mundo exterior. Este procesador, y otros chips adicionales de soporte se engloban en una funcionalidad denominada procesador de servicio (service processor, SP), el que tiene las funciones de: Manejar el poder, es decir implementar las funciones de encendido y apagado del servidor, sus subsistemas y componentes. El procesador de servicio implementa la manera de desconectar buses PCI, para poder hacer la remocin y conexin sin riesgos de tarjetas adaptadoras en caliente. Manejar la temperatura, es decir implementar los esquemas de revolucin dinmica de los ventiladores internos. El procesador de servicio monitorea la temperatura interna y externa, y aumenta las revoluciones de los ventiladores cuando la temperatura interna aumenta, como cuando la carga en los subsistemas es alta o cuando alguno(s) de los ventiladores falla y hay que suplir su funcin. Manejar los errores, es decir, monitorear los subsistemas y los componentes, aislar y desactivar los componentes fallidos, reportar los mismos al software que ejecuta arriba. El procesador de servicio implementa la funcin que desactiva automticamente un componente (as sea un procesador) cuando el mismo falla de manera grave. El procesador de servicio publica unas interfaces de diagnstico genricas, que permiten usar herramientas an cuando el sistema est en funcionamiento pleno. El procesador de servicio inicializa el hardware, y mientras lo hace reporta sus avances en una pantalla LCD disponible en todos los servidores llamada panel de operador (operator panel). La lista de los cdigos relevantes al progreso, y a los errores, para cada modelo de servidor se incluye en los manuales anexados a cada sistema cuando se enva al cliente y tambin disponible en lnea en la pgina de IBM relevante a este hardware. Contnuamente el procesador de servicio monitorea todos los componentes del sistema, pudiendo, segn el modelo de mquina, captar informacin de hasta tres cientos (300) puntos simultneamente.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 20

Finalmente, el procesador de servicio, junto con unos chips de apoyo implementa las funciones del hipervisor (hypervisor). El hipervisor implementa las funciones de Micro Particionamiento Lgico Dinmico con Virtualizacin Avanzada POWER (Dynamic Logical Micro Partitioning with Advanced Power Virtualization). Esta funcionalidad permite hacer, en un solo servidor fsico la consolidacin de mltiples servidores independientes, y que a pesar de ello sigan siendo semi-independientes: Un servidor p5 puede dividirse en un cierto nmero segn el modelo- de servidores independientes, cada uno con sus propios procesadores, tarjetas controladoras de almacenamiento, tarjetas de comunicaciones La s io de red y memoria RAM, adems de su propia copia de sistema Microfu nciti ne s de Lo gi ca l part oning de penden enteramente de operativo y dems software. l hardwar Cada divisin, llamada particin lgica dinmica o LPAR, puede tener procesadores propios o porciones de procesadores de un pool de procesadores compartidos. Cada LPAR tiene una cierta cantidad de memoria RAM asignada. Cada divisin puede tener tarjetas adaptadoras controladoras propias, reales asignadas y no compartidas, o puede usar una representacin en software de una o ms de las mismas. La mencionada representacin, llamada tarjeta controladora SCSI virtual cliente es el resultado de compartir una tarjeta controladora virtualizada servidor real, asignada, de otra LPAR. Cada divisin puede tener tarjetas adaptadoras de red propias, asignadas y no compartidas, o puede usar una representacin de software de una o ms de las mismas. Puede tambin usar una tarjeta controladora de red virtual cliente que es el resultado de compartir una tarjeta de red virtualizada servidor real, asignada de otra LPAR. Cada LPAR puede trabajar sus recursos segn uno de varios perfiles de recursos definidos con anterioridad. Es posible cambiar en un momento cualquiera la definicin de la cantidad y cules son los recursos, esta caracterstica es la que le da la connotacin de particionamiento dinmico. Lo que significa que sin destruir o apagar las LPARs, pueden cambiarse sus asignaciones de procesador, RAM, y tarjetas. Cun inmediatamente toman los cambios los sistemas operativos que corren en las particiones vara, dependiendo de cul sistema operativo sea, y de cul sea la versin. Note que para funcionar, un servidor microparticionado o virtualizado es autocontenido, es decir no depende de adiciones externas, pero, para definir la configuracin, es necesario un hardware y software adicional, adquirible como opcin nica llamada Consola de Manejo de
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 21
e, pero la Advanc ed Dynamic POWER Virt ua dependen de lization adicional licencia s o f t w a r e do de IBM.

Hardware (Hardware Management Console). Esta consola se conecta a unos puertos ethernet propios e independientes del procesador de servicio para definir y guardar la configuracin de particionamiento y virtualizacin. Como se habr observado y notado, en conjunto, las carctersticas avanzadas de estos servidores p5 hacen un ofrecimiento al que difcilmente se acercan los productos y paquetes de la competencia en este segmento, mucho menos en el mismo rango de precios y con una integracin tan completa.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

22

Capacidades del software


En 1985, IBM adquiri acceso a, y derechos sobre el cdigo fuente de UNIX, directamente del propietario original, es decir los laboratorios Bell de AT&T (American Telephone & Telegraph). A partir del mismo cre una versin que corriese sobre un hardware que planeaba lanzar al mercado. Posteriormente adquiri el acceso a software originado en la Universidad de California, Captulo Berkeley (UCB), el software en mencin, llamado Distribucin de Software de Berkeley (BSD) era una variante de UNIX con Esta breve histor caractersticas interesantes, entre ellas la integracin con redes IP. Al ia de AIX invalida cu del origen integrar los dos, y derivar la versin para el hardware POWER, IBM logr legal alquier que le pueda ge duda nerar al su excelente variante de UNIX denominada Advanced Interactive cliente el usar este sistema operativo. Executive o AIX. Este sistema operativo ha ido evolucionando con el hardware de los servidores POWER, en sus variantes a travs del tiempo (RS/6000, pSeries y ahora p5), y con ello a expandido su funcionalidad para hacer uso integral de las capacidades del hardware IBM. Capacidades base (por ser UNIX) AIX es una variante especfica y de cdigo cerrado de UNIX, y como tal ofrece: Capacidades multitarea y multi-hilo, con manejo preferencial dinmico de las prioridades. Capacidades integrales multiusuario. Capacidades de manejo en tiempo real de las prioridades. Confiable, administrable, servible Estable, seguro hasta cierto punto-. Expansible muchsimo-. Por otro lado, dependiente en su totalidad de lo que IBM ofrece. Capacidades logradas debido al hardware que soporta Adicionalmente a lo que un UNIX tradicional ofrece, AIX agrega: Soportar todo el hardware que IBM suministra para este segmento de mercado (a excepcin de los servidores OpenPower, de procesador POWER 5, pero artificialmente limitados a soportar slo Linux). Deteccin y configuracin automtica de todo el hardware soportado, incluyendo el soporte al hardware virtual representado en las controladoras y tarjetas de comunicaciones cliente de virtualizacin. Adicionalmente el soporte a discos

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

23

duros virtuales, que son slo la representacin de porciones compartidas de discos duros reales. Uso especfico de las funciones de los procesadores. En especial AIX en p5 reconoce las funciones avanzadas de los procesadores, como la funcin SMT (Symmetrical Multi Threading), para, uno, activar el SMT desde el mismo inicio, dos, despachar eficientemente las tareas de manera que se puedan ejecutar en paralelo. Adicionalmente, cuando AIX ve que las tareas que constituyen las cargas son pocas despacha las mismas al mismo procesador, de manera que los dems no trabajen y as el sistema de manejo y ahorro de energa pueda ponerlos en suspenso (standby) para un real ahorro de energa y una disminucin significativa en la disipacin de calor y menos ruido porque las revoluciones de los ventiladores tambin bajan-. Deteccin y autoconfiguracin segn las porciones de mquina asignadas a la LPAR en la que est instalado y corriendo. Este decir que AIX asumir, en caliente los cambios dinmicos en las asignaciones de CPU, de RAM, de ranuras PCI con tarjetas tan pronto como se hagan, sin necesidad de reinicios. Adems de esto, puede ejecutar comandos que hagan, entre otras cosas cambios en la configuracin del software que se ejecuta encima de AIX, para que el mismo tambin asuma los cambios. Capacidades nicas Manejo declarativo de las asignaciones de recursos por carga, a travs de los servicios incluidos del Manejador de Carga de Trabajo (Workload Manager). Con este software se clasifican dinmicamente los procesos en clases, y segn la clase se pueden imponer lmites mnimos y mximos de asignacin de CPU, de RAM y de ancho de banda de I/O. Con el WLM se puede hacer que ciertos servicios siempre tengan una preferencia, o que obtengan siempre una porcin suficiente de los recursos que necesitan. Manejo avanzado de las situaciones de software, a travs del sistema Manejo y Control de los Recursos (Resource Management and Control). Con este software se puede preprogramar, para que cuando se de una situacin, como un consumo en demasa de un sistema de archivos, el sistema ejecute automticamente una respuesta, un comando predeterminado. Manejo avanzado de las situaciones de hardware, en especial de los errores. El ncleo del sistema operativo recibe mensajes del sistema de manejo de errores del hardware y reacciona inmediatamente, al menos para reportarlo. El sistema operativo puede notar que un procesador est fallando mucho y no volver a despachar tareas al mismo. Puede activarse la funcin de revisado permanente
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 24

de la RAM (memory scrubbing), y si algo de la misma est fallando mucho no volver a usar las pginas de RAM relacionadas. El sistema operativo puede notar que un disco tiene problemas para escribir uno o ms sectores de disco y puede reubicar los datos en otro lugar, predeterminado como reemplazo para salvar el dato antes de que se pierda definitivamente. Si el sistema operativo tiene configuradas Direcciones IP Virtuales (Virtual IP Addressing, VIPA), tendr asociadas ms de una tarjeta de red con una sola direccin IP; con una de las tarjetas activa y otra en espera. Si la tarjeta de red activa falla, se activar la tarjeta en espera, con la direccin IP y la direccin fsica asociadas MAC addresscon la VIPA. Si el sistema operativo tiene configurados Canales Ethernet (EtherChannels), tendr asociadas ms de una tarjeta de red con una sola direccin IP y con una sola direccin fsica, y todas las tarjetas de red activas, siendo agregadas. Cuando hay fallas en las tarjetas, el canal ethernet agregado sigue funcionando, como si estuviese completo. En AIX se puede activar Descubrimiento Automtico del mejor MTU para una Ruta (Automatic Path MTU Discovery), en donde, usando paquetes ICMP de tipo echo pings-, AIX activamente analiza las rutas hasta todos sus clientes remotos, para descubrir el mejor MTU en esa ruta. El mejor MTU en este caso es el tamao mayor de paquete en el que contnuamente no se pierden los mismos. En AIX se pueden activar mltiples enrutadores predeterminados para: (i) si uno de los enrutadores predeterminados tiene menor costo siempre usarlo, a menos que se pierda la comunicacin con el mismo por un tiempo. Cuando se deja de usar uno de los enrutadores predeterminados comenzar a comunicarse usando otro de los enrutadores predeterminados, que le siga en costo. Despus de un tiempo, AIX intentar revisar si el enrutador de menor costo responde nuevamente usando ecos ICMP, ping - y, si lo hace, volver a trabajar permanentemente con el mismo. (ii) Usar OSPF (Open Shortest Path First, protocolo de enrutamiento avanzado inventado por Cisco), y con el mismo determinar cmo balancear la carga en las comunicaciones por mltiples rutas, para no usar solamente una ruta o enrutador preferido. En AIX estn incluidos o se pueden usar (por ejemplo implementaciones descargables de Internet) los protocolos de comunicaciones y de seguridad que la industria ha preferido o estandarizado, para que el sistema se No se esper a que un pueda considerar realmente abierto: IPv4, IPv6, ARP, RARP, EtherChannel sig a funcionando TCP, UDP, ICMP, IGMP, RIP, OSPF, BGP, EGP, SMB, CIFS, SSL, cuando todas las tarjetas que lo compo SSH, Kerberos, LDAP, DHCP, DDNS, NFS v2/v3/v4, NIS, NIS+, tiempo.nen deja de funcionar al SLIP, PPP, IPX/SPX, ATM, X.25, Frame Relay, y otros. Con AIX se incluyen muchos paquetes de software de cdigo
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 25

abierto, siendo IBM patrocinador de tanto Linux como de paquetes base de la Internet actual, tales como Sendmail, Bind, RouteD, GateD, ISC DHCP, OpenSSL, OpenSSH, Samba, Apache. AIX tiene uno de los mejores esquemas de manejo de inventario de paquetes de software que se puedan encontrar en cualquier tipo de plataforma, no slo en UNIX. AIX tiene integrado el software Manejador de Volmenes EtherChannel es Lgicos (Logical Volume Manager, LVM), hace ms de una el nombre co m er ci al qu e us a Ci sc o, dcada. Con el LVM se hace el manejo del espacio en discos de empresa qu e se funcin. En otro invent la manera flexible, poderosa, pero sobre todo, totalmente s ambientes hacer lo mismo se denomina dinmico, y en donde casi todo se hace en caliente. Este ethernet bondin g o channel agregation software es tan reconocido que versiones anteriores son la base para los manejadores de espacio de otros sistemas operativos UNIX como Digital OSF/1 y HP-UX. IBM en 2000 regal cdigo fuente para que en Linux se pudiera implementar un LVM usable y funcional. AIX puede usar (i) el software incluido IPSEC, para la seguridad IP. O (ii) se pueden definir reglas locales de cortafuegos (firewall) para que se controlen los protocolos que entran, salen, o se enrutan a travs de la mquina. Por ltimo, AIX puede ser administrado por comandos de lnea, por mens validados, por interfaz grfica o por una pgina web, o a travs de un cliente grfico cliente/servidor instalable en Windows o Linux x86.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

26

Sistemas Operativos UNIX


Historia, Terminologa Definiciones
1970 1980 1990 2000 2010

FreeBSD NetBSD OpenBSD BSD (Berkeley Software Distribution)


Bill Joy

8.1 4.4 4.6

SunOS (Stanford University) NextStep Xenix


SCO - Microsoft

Solaris (Sun Microsystems)


3.2

11.0
Darwin

Mac OS X
Apple

6.4

GNU
Richard Stallman Linus Torvalds

GNU/Hurd

Linux Minix
Andrew S. Tanenbaum

2.6.26 3.0

Unix Time Sharing System (Bell Labs)


Ken Thompson - Dennis Ritchie

10

HP-UX (Hewlett-Packard) AIX (IBM) UnixWare (Novell/Univel/SCO) Irix (Silicon Graphics)

11 6.1 7.1 6.5

Los sistemas UNIX (oficialmente UNIX) tienen una muy larga historia, siendo desarrollados inicialmente en las dcadas de 1960s y 1970s, por un grupo de empleados de la compaa norteamericana AT&T, entre los que se destacan Ken Thompson, Dennis El lenguaje C fue desarrollado C. Ritchie y Douglas McIlroy. Los sistemas UNIX se han ido derivando en po r B ri an K er ni gh an y Dennis C. Ritchi diversas ramas, desarrolladas a travs del tiempo tanto por AT&T como e. UNIX fue desarrol El sistema lado por Ken por numerosas otras compaas comerciales. Desde comienzos de la Th om ps on y dcada de 1990, tambin se han desarrollado variantes libres, creadas por Ritchie. El mismo!D en ni s C . grupos no muy unidos de desarrolladores diseminados a lo ancho del planeta. Durante los finales de la dcada de 1970 y durante la dcada de 1980, la influencia de UNIX en los mbitos acadmicos llev a una la adopcin en gran escala de UNIX en empresas incipientes (en especial de la variante BSD originada en la Universidad de California, sede
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 27

Berkeley), de las cuales la ms notable es Sun Microsystems. Hoy en da, adicionalmente a las variantes comerciales certificadas de UNIX (como IBM AIX) se han popularizado ambientes estilo UNIX como Linux y las versiones BSD libres. Los sistemas UNIX son ampliamente usados como estaciones de trabajo y como servidores (especialmente con la reciente popularidad de los sistemas Linux). El ambiente UNIX y el modelo de programas cliente servidor fueron elementos esenciales en el desarrollo de la Internet y en la reforma de la computacin centrada en las redes en vez de estar centrada en los sistemas de computadoras individuales. Ambos, UNIX y el lenguaje C de programacin fueron desarrollados en AT&T y distribuidos a numerosas organizaciones gubernamentales y acadmicas, causando que ambos fuesen portados a numerosas familias de sistemas, mucho ms que otros sistemas La propiedad inte lectual de los operativos. Como resultado, UNIX se volvi sinnimo de sistema abierto. cdigos fuentes UNIX fue diseado para ser portable, multi-tarea y multi-usuario, en una configuracin de ejecucin por tiempo compartido. Los sistemas UNIX se caracterizan por varios conceptos: el uso de archivos de texto para almacenar datos; un sistema de archivado jerrquico; tratar los dispositivos y ciertos esquemas de comunicacin entre procesos como archivos; y por el uso de una gran cantidad de programas pequeos que pueden encadenarse muy fcilmente a travs de tuberas en un intrprete de comandos, en vez de tenerse programas grandes, poderosos, complejos y monolticos que realicen de todo. Todo esto junto se denomina la filosofa UNIX.
originales de UNIX estuvieron en entredicho a principios de l debido a los ale siglo XXI, gatos de la compaa The SCO Group. Af or tu na da m en te en lo s estrados judiciale s se resolvi el asunto a favor de en la segunda Novell Inc. se agosto de 2007 mana de . Todos los derechos in tel relacionados co e c t u a l e s n original de UNIX so el cdigo n de Novell, compa propiedad a que ha asegurado pblica m no va a demanda ente que r a nadie nadie diferente de SCO Groupdebido a su propiedad intelectual.

Actualmente, una compaa o grupo de desarrolladores que deseen usar el nombre UNIX debera certificar su producto, que le da derecho entre otras cosas- a usar el nombre UNIX. Qu compone a un UNIX, cmo se comporta y cmo funciona est estandarizado, segn unos documentos actualmente llamados Single Unix Specification v3, o UNIX 03 para acortar. Este mismo estndar tambin es el estndar IEEE POSIX 1003.1 e ISO/IEC 9945. Es decir que usar UNIX no vuelve a la compaa o individuo totalmente dependiente de los caprichos y conveniencia de una compaa o grupo de desarrolladores.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

28

Componentes de un Sistema UNIX

Shells

Applicacio nes

GUIs

SistemadeArchivado Ncleo Hardware driver


Tarj

Los sistemas UNIX modernos son muy modulares, permitiendo combinarse, descombinarse o recombinarse los mdulos segn sean las necesidades de la implementacin. La mayora consta de los siguientes mdulos: Ncleo del sistema o kernel Sistema de archivado o file system Intrprete de comandos o shell Ambiente grfico de escritorio o GUI Editores de texto Lenguajes de programacin Sistemas de control Numerosas utilidades Teniendo esta mentalidad, por ejemplo, la empresa canadiense QNX ofrece y vende una solucin para instalar en sistemas de control de automviles que es una versin de UNIX sin intrprete de comandos ni ambientes de escritorio, constando slo del ncleo del sistema, del sistema de archivado y los sistemas de control; pero tambin vende una solucin del mismo UNIX que incluye el resto de los mdulos aqu mencionados, ofrecido como una solucin integral para estaciones de desarrollo; y adems vende otra solucin del mismo que

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

29

incluye un ambiente grfico como sistema de consola de conductor para vehculos modernos de lujo. La mayora de los UNIX estn hechos de manera que algunos de los mdulos pueden ser reemplazados por otros sin cambio fundamental en la funcionalidad, por ejemplo IBM AIX puede instalarse en sistemas de archivo JFS o JFS2; Solaris puede instalarse con ambiente grfico Motif o con ambiente grfico Gnome; y Linux puede instalarse en PCs modernos con kernel de 32 o kernel de 64 bits. En los siguientes apartes se describen y se explican con mayor detalle la funcin y particularidad de los mdulos que componen a un sistema operativo tpico UNIX, y cmo se relacionan entre s.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

30

El Kernel o Ncleo del Sistema Operativo

Shells

Applicacio nes

GUIs

SistemadeArchivado Ncleo Hardware driver


tarjeta

Las principales tareas de un sistema operativo avanzado son: Administracin de la memoria Control de los procesos Administracin de los sistemas de archivado Control de la entrada y salida (I/O) Estas tareas son llevadas a cabo a travs de un conjunto de instrucciones dado por el sistema operaciones. Estas instrucciones son denominadas llamados al sistema (system calls), que son responsables de funcionar como interfaz para los programas de los usuarios y forman en conjunto- lo que es conocido como el ncleo (kernel) del sistema operativo. Mirndolo de esta manera, los sistemas operativos estilo UNIX no corren, si no que el conjunto de funciones que lo forman es usado o invocado por las aplicaciones que ejecutan arriba.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

31

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

32

Sistemas de Archivos/de Archivado

Shells

Applicacio nes

GUIs

SistemadeArchivado Ncleo Hardware driver


tarjeta

UNIX en un sistema operativo en el que, al igual que en DOS y MS Windows, la organizacin de los datos usables es en una estructura jerrquica de archivos, organizada en directorios, presentando una estructura de rbol invertido a los usuarios, en donde los directorios son ramas y los archivos son hojas. A diferencia que en DOS y MS Windows, en los UNIX en un momento dado hay slo un rbol, sin importar cuntos discos y unidades haya en el sistema, y de se nico rbol dependen toas las ramas-directorios. En principio se puede suponer que no existe una limitacin en cuanto a amplitud y profundidad del rbol, pero en la prctica s existen lmites; lmites que dependen de la clase de UNIX, de la versin, del espacio disponible, del formato, etc. En la prctica, en todos los UNIX modernos los limites son suficientemente grandes como para que el trabajo de todos los das pueda realizarse sin estar tenindolos en cuenta. Nomenclatura de archivos En todo UNIX el concepto de archivo es bsico. Toda la informacin del sistema est almacenada de alguna manera en archivos, donde cada uno tiene un apuntador nico que usa el sistema operativo para llegar a los datos contenidos y al menos un nombre, que usan los usuarios para indicar al sistema operativo cual apuntador usar. Es clave reconocer que en un mismo sitio no pueden haber dos archivos con el mismo nombre, ni tampoco dos archivos diferentes con el mismo apuntador.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

33

Conceptos: Directorios En UNIX un directorio es un archivo con un formato interno especial que usa el sistema operativo como catlogo parcial de unos contenidos. Como dentro de un directorio pueden haber otros directorios y archivos, con stos se arma la estructura que los usuarios ven como jerrquica. Como los directorios son archivos especiales todas las reglas que aplican para los archivos tambin aplican para los directorios. Note que en UNIX, los archivos s ocupan espacio en disco. Conceptos: Archivos En UNIX un archivo es una entrada en un catlogo que se usa a travs de un nombre. Dicha entrada le sirve al sistema para acceder a un apuntador, y con dicho apuntador las aplicaciones de los usuarios pueden acceder a la informacin en bytes- que les interesa a los usuarios guardar o leer. Los archivos que los usuarios normalmente usan en UNIX se llaman archivos corrientes, ya que hay otros como los directorios- que no se usan como archivo, pero que realmente lo son. Toda la informacin en UNIX est guardada en archivos, y toda informacin puede manipularse manipulando archivos. En UNIX los archivos comunes son considerados por el sistema operativo como sin estructura, son los programas los que los interpretan con una estructura. La idea de Este concepto es muy poderoso, por lo que -al menos en teora- todo archivos y directorios den tro de otros programa puede abrir y manipular cualquier archivo. Como para el directorios en W indows viene de DOS, y en DO sistema operativo los archivos no tienen una estructura implcita, el S viene de CP/ M , qu e co pi di nombre del archivo no tiene ninguna relacin forzosa con sus parcialmente de ch a id ea UNIX pero basndose ms en contenidos, ni los contenidos con el nombre. Qu implica esto ltimo? VAX-. Que una foto no tiene porqu tener nombre terminado en .JPG o un archivo cuyo nombre contiene MP3 no tiene porqu ser de msica. Adicionalmente, en todo UNIX los archivos tienen dos partes. Una parte es la que ms les interesa a los usuarios, y es lo que comnmente llamamos datos. Otra parte ms le interesa al sistema, y es lo que comnmente llamamos metadatos. Todos los archivos tienen metadatos, an si se ven vacos y no contienen datos, as que si un archivo existe ocupar por lo menos el espacio que ocupan sus metadatos bsicos. Conceptos: Archivos especiales nodo Los sistemas operativos UNIX necesitan acceso a cierta informacin clave e importante para funcionar, informacin que no se almacena tpicamente en disco, o que no est almacenada si no que es generada en caliente, dinmicamente. Y, como se supone que toda la informacin est en archivos, a los creadores de UNIX se les ocurri que dicha informacin se accediera tambin usando archivos. Por lo anterior en UNIX existen unos archivos de los que
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 34

lo nico que importa son los metadatos, y por ello no tienen espacio en disco ni reservado ni usable- para la parte de datos, slo para los metadatos. Estos archivos especiales estn marcados particularmente en su rea de metadatos especficamente en su apuntador nico- y hay de varios tipos segn el fin. Existen: Archivos especiales nodo para acceder al hardware del sistema como un archivo.
Los usuarios acos tu trabajar en ento mbrados a rn reconocern lo qu o grfico e se conoce como propiedad es metadatos. En U como los NIX hay ms metadatos que las pr fcilmente visible opiedades s.

Archivos especiales de nodo para leer informacin dinmica del sistema como si sta estuviera en archivos estticos. Archivos especiales del sistema para trabajar conexiones de red como si fueran archivos. Archivos especiales del sistema para pasar informacin rpidamente entre programas locales, como si un programa guardara informacin y otro la leyera, pero ambos trabajando prcticamente al tiempo.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

35

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

36

Intrfaces de Usuario: Intrprete de Comandos (Shell)

Shells

Applicacio nes

GUIs

SistemadeArchivado Ncleo Hardware driver


tarjeta

Un intrprete de comandos es una aplicacin que ejecuta como cualquier otra en el sistema operativo, pero que tiene una finalidad: presenta un indicador donde los usuarios pueden escribir instrucciones para que el sistema las ejecute. Lo especial del intrprete de comandos de UNIX es que desde siempre (casi cuarenta aos) ha sido programada por desarrolladores para programadores, por lo que siempre se ha contado en UNIX con un mtodo de programacin fcil. De hecho todos los intrpretes de comandos de UNIX disponibles son e implementan un lenguaje de programacin bastante completo todo el tiempo. Como cada uno de los intrpretes de comandos de UNIX implementa un lenguaje y como lo dice el nombre interpretado, no compilado- pueden en todo momento hacerse programas, an si no se guardan en un archivo si no que se digitan directamente en el indicador. Intrprete de comandos original: sh El intrprete de comandos estndar original de UNIX fue desarrollado por El indicador de manda tos de DOS (y de MS W Stephen Bourne, un empleado de AT&T en 1977. Este intrprete de indows) est ligeramente m comandos no es muy cmodo de trabajar de manera interactiva porque no parecido a los int o d e l a d o comandos de U rpretes de tiene manejo avanzado del teclado (menos de las teclas de cursor) y un NIX lenguajes de prog , pero los manejo difcil del histrico de comandos previos. Sin embargo, como se los intrpretes ramacin de de completos, a di UNIX son desarroll pensando en que fuera una herramienta de programacin fe lenguaje disponib rencia del le en DOS. tiene muy buenas facilidades en su lenguaje, como variables, redireccin, estructuras de control, funciones, y manejo de cadenas de texto slo limitadas por la memoria. Este intrprete de comandos es tan funcional que fue
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 37

estandarizado completamente en POSIX y por ello debe incluirse obligatoriamente en todo UNIX certificado. IBM AIX y Sun Solaris incluyen Bourne Shell por si se necesita. Intrprete de comandos de la Universidad de Berkeley: csh A comienzos de la dcada de 1980 Bill Joy desarroll un intrprete de comandos para la nueva variante de UNIX BSD. Como en UNIX normalmente se desarrollan las aplicaciones en lenguaje C Bill Joy hizo que el nuevo intrprete trabajara la programacin Tom Christia en, con un lenguaje siguiera la sintaxis de este lenguaje de manera muy cerca, hacker Perlnsms el segundo escribi un docu conocido pero que al mismo tiempo no presentara problemas para el operador m f a m o s o t i t u ento muy lado La acostumbrado a operar interactivamente con sh. Programacin Cs h Aunque este intrprete de comandos es ms avanzado que el anterior sh, al no estar especificadas todas las construcciones de lenguaje, algunas sentencias se prestan para ser comprendidas por los programadores de manera diferente a como las interpreta el shell, por ello muchos desarrolladores evitan activamente el contacto con C Shell (algunos desarrolladores famosos han hecho poltica activa en contra del intrprete C).
Co Daina (Csh Pr nsiderada ogramming Considered Harm ful).

IBM AIX incluye C Shell (/usr/bin/csh) por si se necesita. Sun Solaris incluye C Shell y es el intrprete predeterminado del usuario root pero no de los otros usuarios. Intrprete de comandos comercial AT&T: ksh El intrprete de comandos Korn Shell fue desarrollado por David Korn, un empleado de AT&T para ser usado como intrprete estandar de AT&T UNIX. Este software fue propietario y comercial pero estandarizado en 1988. La idea principal de este intrprete fue hacerlo totalmente compatible con los scripts desarrollados para Bourne Shell, y al mismo tiempo lograr que tanto el trabajo interactivo como las facilidades de programacin aumentaran totalmente. Es de notar que David Korn logr las tres metas simultneamente. La versin ms comn es ksh88, pero algunos UNIX incluyen tambin ksh93. Ambas versiones cumplen a cabalidad el estandar POSIX. AT&T convirti al Korn Shell en un proyecto de cdigo fuente abierto en 2000. IBM AIX incluye Korn Shell 88, y es el intrprete predeterminado para todos los usuarios; incluye Korn Shell 93 como /usr/bin/ksh93. Sun Solaris incluye Korn Shell 88 como /usr/ bin/ksh88; incluye Korn Shell 93 y es el intrprete predeterminado para todos los usuarios diferentes de root. Intrprete de comandos de cdigo abierto: bash El intrprete de comandos Bourne Again Shell es un proyecto de cdigo fuente abierto creado como una mejora de las funcionalidades disponibles en Bourne Shell, C Shell y Korn
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 38

Shell. Este proyecto naci en 1987 y se ha popularizado mucho, tanto que es el intrprete predeterminado en los Linux y en Mac OS X. Desde el principio se plane que fuera completamente compatible con Bourne Shell (el intrprete original) pero que al mismo tiempo sirviese para programar y fuese mucho ms fcil de usar interactivamente que los anteriores. Bourne Again Shell (bash) es compatible con Bourne Shell, cumple el estndar POSIX y puede hacerse que funcione totalmente como Bourne Shell. La gran diferencia de Bourne Shell con los otros intrpretes es el uso interactivo del teclado y las facilidades para completar comandos y nombres de archivos, directorios, mquinas y usuarios. Bourne Again Shell se incluye como extra en Sun Solaris. Se incluye en el CD BonusPak de AIX; es el intrprete predeterminado en Linux y en Mac OS X.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

39

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

40

Interfaces de Usuario: Ambientes de Escritorio Grfico

Shells

Applicacio nes

GUIs

SistemadeArchivado Ncleo Hardware driver


tarjeta

Los UNIX modernos pueden usarse interactiva y grficamente, es ms, unos de los primeros sistemas operativos en contar con una interfaz grfica fueron los UNIX, con la aparicin del sistema X Window System, desarrollado en el MIT (Massachussets Institute of Technology) en 1984; y una variante, NeXTSTEP fue completamente grfica desde el lanzamiento en 1989 (realmente desde las vistas previas en 1986). El esquema y protocolo actual llamado X11 es la base de los entornos grficos de casi todos los UNIX (hay otros, como Photon en QNX Neutrino y Aqua en Mac OS X, pero ambos incluyen y soportan tambin X11). Ahora, X11 no implementa un ambiente grfico si no un esquema para la especificacin de pixeles, coordenadas, colores, y eventos de teclado y Mouse entre otros, por lo que encima de X11 se desarrollan los verdaderos ambientes de escritorio grfico. Ahora, como X11 es tambin un protocolo de red, las aplicaciones grficos desarrolladas con base en X11 pueden y de hecho funcionan a travs de una red. Con base en X11 se han desarrollado mltiples ambientes de escritorio grfico, siendo los ms conocidos:

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

41

Gnome (GNU Network Object Model Environment)

Gnome es un proyecto internacional de cdigo fuente abierto que produce dos ambientes: el ambiente de escritorio grfico Gnome y el ambiente de desarrollo Gnome. La idea del ambiente grfico Gnome es la de implementar un ambiente de escritorio grfico con ideas comunes a los otros ambientes populares, que sea fcil de usar, que sea completo y que se pueda traducir a todos los idiomas necesarios. El proyecto Gnome fue iniciado por Miguel de Icaza y Federico Mena en agosto de 1997. Gnome es actualmente el ambiente grfico predeterminado de las distribuciones de Linux ms conocidas (Red Hat Enterprise Linux y Ubuntu Linux) y de Sun Solaris 10. Est disponible en diversas plataformas de cdigo abierto y comerciales como OpenBSD, FreeBSD, numerosos Linux, IBM AIX y hasta Apple Mac OS X. El patrocinador principal de Gnome es la compaa Red Hat. En AIX est incluido en el CD BonusPak, en Solaris el ambiente grfico predeterminado (Sun Java Desktop) es una variante de Gnome.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

42

KDE (K Desktop Environment)

KDE es un proyecto internacional iniciado en 1996 por Matthias Ettrich para hacer un ambiente de escritorio grfico basado en tecnologas de cdigo abierto. KDE est basado en un juego de bibliotecas de funciones que a su vez se basan en Qt, un juego de bibliotecas de funciones desarrolladas en C++ por la compaa noruega Trolltech. KDE incluye adems del ambiente de escritorio grfico un juego de funcionalidades que permiten incluir numerosas aplicaciones en el proyecto: aplicaciones de ofimtica, de multimedia, cientficas y dems. KDE se centra todo alrededor de la integracin de objetos, y as funciona muy bien: integrado. KDE es adems transparente a la red, permitiendo que las aplicaciones hechas con KDE trabajen archivos locales y remotos que se acceden a travs de los protocolos que el escritorio actual implementa, siendo tpicamente ms de una docena. KDE tuvo un inicio muy lento, los desarrolladores iniciales se centraron en crear las bibliotecas de objetos y de funciones ms necesarias y ltimamente se han concentrado ms en las aplicaciones. Con esto ltimo, el desarrollo de todo el ambiente se ha acelerado y han logrado ms y mejor compatibilidad y desempeo ptimo en ms ambientes. Las ideas de KDE hacen que, con el reuso de clases y objetos el ambiente como un todo consuma menos recursos. KDE es actualmente el entorno grfico predeterminado de las distribuciones de Linux ms conocidas en Europa (SuSE Linux y Mandriva). Est disponible en numerosas plataformas de cdigo abierto y comerciales como OpenBSD, FreeBSD, numerosos Linux, IBM AIX y hasta Apple Mac OS X. El patrocinador principal de KDE es la compaa SuSE.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

43

En AIX est incluido en el CD BonusPak, para Solaris es descargable de la pgina oficial de KDE. La nueva versin 4 prxima a salir este ao ser lanzada simultneamente para UNIX/Linux, Windows y Mac OS X sin necesidad de X11. CDE (Common Desktop Environment)

CDE es un ambiente de escritorio grfico propietario y comercial basado parcialmente en un juego de bibliotecas de funciones llamado Motif. CDE sali de la Iniciativa de Software Abierto Comn (COSE), un proyecto en conjunto de Hewlett-Packard, IBM, Novell y Sun Microsystems, iniciado en 1993. Para el 2000, CDE era considerado el estndar de hecho para las interfaces grficas de los ambientes UNIX. En 2001, tanto HP como Sun decidieron cambiarse de CDE a Gnome como base del ambiente grfico para HP-UX como para Sun Solaris, sin embargo, en 2003, HP decidi devolver HP-UX al ambiente CDE por considerar que Gnome no cumpla con los estndares de estabilidad y confiabilidad que necesitaba HPUX. Sun Microsystems contina usando Gnome como base de Java Desktop System, el ambiente grfico de Solaris, pero tanto como HP-UX y AIX centran sus ambientes grficos predefinidos en CDE.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

44

Aplicaciones generales en UNIX: Editores de Texto

Shells

Applicacio nes

GUIs

SistemadeArchivado Ncleo Hardware driver


tarjeta

Originalmente UNIX fue creado para desarrollar manuales tcnicos es decir texto-, y como el sistema apenas se estaba creando, haba de desarrollar y programar las utilidades, a partir de cdigo fuente para compilar es decir texto-; por todo ello, las herramientas ms centrales de los sistemas UNIX son las que procesan texto puro, y de ellas las ms importantes son los editores de texto (a diferencia de otras plataformas donde el editor de texto es algo muy bsico y casi despreciable). En UNIX siempre ha habido al menos un editor de texto poderoso, pero obvio, esto como todo ha ido evolucionando con el tiempo. En un sistema UNIX moderno pueden encontrarse hoy en da editores de texto como: ed ex vi Emacs inED nano Gedit Kate Como muchas cosas en UNIX, algunos de los editores arriba mencionados son estndares y otros no. En especial, de arriba, ed, ex, vi estn estandarizados (en POSIX), y adems son requeridos para que un UNIX pueda llamarse UNIX.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 45

Editor ed El editor ed es uno de los originales en UNIX, es una aplicacin de desarrollo muy sencillo (pero no de uso muy sencillo), rpida y liviana. Es un programa editor de texto por comandos de lnea, cmo se muestra en el ejemplo siguiente:
$ ed prog.c ? prog.c a int main() { printf( Hola mundo!\n ); return 0; } . w q $

Esta secuencia de teclas crea el siguiente archivo:


int main() { printf( Hola mundo!\n ); return 0; }

guardndolo en prog.c, donde el primer comando confirma que se crear el nuevo archivo prog.c, y que se le agregar texto con el comando a (append), se termina de entrar texto en el comando a con un punto solo en una lnea, se guarda el archivo con el comando w (write) y se sale del editor con el comando q (quit). Aunque es muy til, y se pueden hacer macros con ed, ya no es muy usado, estando los usuarios ms acostumbrados a trabajar con editores de texto que tienen no comandos, si no interfaces. Pero, ed sigue siendo til para desarrollar macros. Editor vi El editor vi (se supone que es Visual Editor) es un editor de texto modal estandarizado completamente en POSIX, incluido en IEEE Spec 1170. Es un editor de Aprenderemos a texto muy poderoso, pero por ser modal es un poco difcil de usar en us todo un captulo ar vi en dedicado al un comienzo, pero dar los primeros pasos en l no es demasiado mismo complicado. Aunque haya disponibles en todos los UNIX ms editores de texto (tal vez de modo grfico como dtpad, gedit, kate y ms), este editor est incluido en el estndar UNIX03 como obligatorio, por lo que todos los UNIX lo incluyen y vale la pena aprender a usarlo. vi es usable en los ambientes ms inhspitos (editar un archivo de configuracin no es fcil a travs de un acceso remoto de comandos a 9600bps). Los sistemas UNIX tienen vi disponible hasta en el modo de recuperacin cuando el sistema no sube completo.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 46

Nota: Cuando se habla de modal se habla de la caracterstica que tiene vi as como otras aplicaciones de la poca- de que las teclas funcionan y tienen significado segn el modo en el que la aplicacin est.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

47

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

48

Aplicaciones generales en UNIX: Ambientes de Desarrollo

Shells

Applicacio nes

GUIs

SistemadeArchivado Ncleo Hardware driver


tarjeta

Como el diseo original del sistema UNIX en AT&T se debi a la necesidad de que unos desarrolladores desarrollaran documentacin tcnica (realmente manuales de desarrollo) que no haba como imprimir adecuadamente en el momento, el sistema UNIX original inclua las herramientas de desarrollo de manera estndar. Tambin, cuando comenz a popularizarse ms UNIX fue cuando entr en la academia, donde la Universidad de California sede Berkeley (UCB) mejor an ms las facilidades para los desarrolladores. Por todo ello, UNIX tradicionalmente ha sido un ambiente de programadores para programadores, por lo que ha habido la fcil manera de hacer desarrollo en estos sistemas. Mientras un UNIX de cdigo libre (open source) incluye todas las herramientas de desarrollo en los medios de instalacin, es comn que un UNIX comercial tpico (como Sun Solaris o IBM AIX) NO incluya el ambiente de desarrollo para los lenguajes C y C++. De todas maneras lo comn para el desarrollo en UNIX es: Editor de texto sensible al contexto de desarrollo (o que al menos maneja la sintaxis). FreeBSD y OpenBSD ponen a disposicin del administrador ambientes completos de desarrollo de cdigo abierto como KDevelop. Apple incluye XCode en los medios originales de instalacin, siendo ste es el ambiente integrado de desarrollo basado en GCC con el que se desarrolla todo el sistema operativo al interior de dicha compaa. Facilidades para el manejo de versiones de cdigo: CVS o al menos RCS. CVS es Concurrent Versions System y RCS es Revisions Control System. Es de notar que
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 49

otros ambientes de manejo de versiones estn disponibles para UNIX, algunos gratis y de cdigo abierto. Compiladores e intrpretes: Todos los UNIX deben incluir algunos intrpretes de lenguajes porque estn estandarizados por POSIX. Lo bsico son los shells, que adems de interpretar interactivamente los comandos tambin son intrpretes de lenguajes bastante completos existen hasta libreras para desarrollo grfico en ksh-. Adicionalmente los UNIX incluyen sed, awk, Perl y muchas veces Python. Los UNIX modernos incluyen tambin un ambiente de Mquina Virtual de Java (aqu se incluyen Mac OS X, AIX y Solaris). Algunos UNIX incluyen GCC, The GNU Compiler Collection en los medios originales, aunque no se instale de manera predeterminada (aqu se incluyen AIX y Mac OS X). Adicionalmente, aunque cada compaa que produce un ambiente UNIX comercial excepto Apple- tiene y vende su propio ambiente integrado de desarrollo, es posible conseguir y descargar GCC (The GNU Compiller Collection) para cada hardware y versin de UNIX especfica. IBM ofrece los ambientes de desarrollo XL (XL C, XL C++, XL Cobol, XL PL1, XL Fortran). IBM ofrece adems la familia de soluciones Rational Rose, para modelado y desarrollo en Windows, Linux, AIX, Sun Solaris y HP-UX; con los ambientes IBM Rational Rose se puede modelar y desarrollar en C, C++, Java, ADA y Corba. Del editor/modelador original IBM Racional sali una herramienta de desarrollo de cdigo abierto muy conocida llamada Eclipse. Sun ofrece Sun Studio (para desarrollo C, C++ y Fortran), y Java Studio Creator y Java Studio Enterprise (para desarrollo Java obviamente). Java al fin y al cabo es un producto Sun.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

50

Perfiles de Usuarios y de Grupos de Usuario


Los sistemas UNIX han sido casi desde el comienzo sistemas multiusuario, por lo que para trabajar con ellos no se necesita nicamente el hardware y el software, si no adems un perfil de usuario. Un perfil de usuario ms comnmente llamada una cuenta de usuario- es una definicin junto con un nombre y un mtodo de acceso y de control de acceso- que permiten conectarse, identificarse y autenticarse con un sistema UNIX para iniciar y ejecutar tareas y aplicaciones. Cuando se hace la instalacin predeterminada estn creados en un sistema UNIX numerosos perfiles de usuario y perfiles de grupos de usuario, pero la mayora de estas cuentas de usuario son para uso interno de los procesos del sistema operativo, no para el uso interactivo de los usuarios. En un sistema UNIX tradicional slo una cuenta de usuario permite el uso interactivo, y esta cuenta lleva por nombre usuario root. Como esta cuenta de usuario trabaja con el identificador interno nmero cero (0) el sistema operativo no le forza controles de seguridad, por lo que tpicamente puede ejecutar toda tarea sin limitaciones por permisos o controles de seguridad. Los sistemas UNIX ms modernos en especial los basados en cdigo fuente abiertoadicionalmente solicitan la creacin de al menos un perfil de usuario adicional para bloquear el acceso directo a la cuenta de usuario ilimitada root entre estos tenemos FreeBSD y Mac OS X-. Como cualquiera que sepa cmo es el nombre de la cuenta podra usarla en especial root siempre existe y est disponible en algunas variantes de UNIX como Solaris y AIX-, los sistemas multiusuario implementan alguna manera de autenticacin, siendo la tpica una contrasea. Teniendo ambos, el nombre de la cuenta y la contrasea correspondiente, hay ya como conectarse y trabajar con UNIX. Una manera tpica si el ambiente es pequeo estacin de trabajo- es directamente en la consola, que comnmente muestra un ambiente grfico de entrada XDM en AIX, GDM en Solaris y window_login en Mac OS X-. La otra manera tpica si el ambiente es grande servidor- es conectarse desde un cliente usando TELNET en AIX y Solaris- o SSH en OpenBSD, FreeBSD y Mac OS X-. Como este curso est orientado al uso remoto de servidores, el estudiante debe buscar la manera de obtener acceso a un indicador de comandos, que se obtiene localmente ejecutando la aplicacin Terminal en Mac OS X, Gnome Terminal en Solaris y DtTerm en AIX. Note que aunque Solaris, AIX y OpenBSD no obliguen a crear una cuenta de usuario noroot para el trabajo diario, es mejor crear una lo ms pronto y trabajar directamente con sta siempre.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

51

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

52

Comandos Bsicos de UNIX


Comandos Bsicos de Sesin de Usuario
Como se mencion antes, las primeras acciones de un usuario UNIX para trabajar en un sistema son conectarse, identificarse y autenticarse. Adems debera conocer unos comandos mnimos, comandos que conoceremos a continuacin. Entrar al sistema Para entrar al sistema primero hay que conectarse, comnmente usando TELNET o SSH. El sistema preguntar un nombre de cuenta de usuario y luego de entrarse (y presionando ENTER) preguntar comnmente una contrasea. Esto se llama identificarse (informar quin soy) y autenticarse (demostrar que s soy). Note que es muy comn que al escribir la contrasea no se vea nada:

Quin soy (qu usuario soy): whoami Un comando bsico que permite saber en qu cuenta (o bajo qu identidad de usuario) est trabajando un intrprete de comandos es whoami:
[YOU HAVE NEW MAIL] e@abe:e/> whoami e e@abe:e/>

Como se observa, slo informa el nombre de la cuenta.


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 53

Quienes estn en el sistema (qu usuarios estn conectados): who Para saber con quienes se comparte el trabajo interactivo con el mismo sistema existe estndar en UNIX el comando who:
e@abe:e/> who root pts/0 e pts/1 root pts/2 e@abe:e/> Aug 07 18:18 Aug 07 18:24 Aug 07 18:27 (Moe.lan) (Moe.lan)

Hay dos usuarios conectados, pero un usuario (root) tiene dos sesiones. Como se observa el comando muestra: El nombre de cada usuario por sesin. En este caso son root y e. Cmo se llama el archivo que representa la ventana o conexin. En este caso son pts/X. Cundo inici la sesin. Muestra la fecha y la hora. Desde dnde se inici la sesin. Si no muestra, tpicamente es la consola grfica de la mquina. Si muestra algo entre parntesis es el nombre de red o direccin de red de la mquina cliente desde donde se inici la sesin. A qu grupos pertenezco: groups Como cada perfil de usuario est incluido o asociado a al menos un grupo de usuariosexiste el comando groups, con el que se puede conocer a cules grupos pertenece la cuenta de usuario actual:
e@abe:e/> groups system staff adm security cron printq audit perf shutdown e@abe:e/>

El usuario del ejemplo pertenece a bastantes (9) grupos simultneamente! Cambiar mi contrasea: passwd Cuando un administrador del sistema crea una nueva cuenta/perfil de usuario le asigna una primera contrasea. Como esta contrasea se la informa al nuevo propietario de la cuenta para que pueda conectarse, son dos personas las que conocen dicha contrasea, y como un secreto que conocen dos personas ya no es secreto, una de las primeras acciones que debera realizar un usuario despus de conectarse la primera vez es cambiar la contrasea de su cuenta a algo que slo el usuario conozca. Para cambiar la propia contrasea se usa el comando passwd:
e@abe:e/> passwd Changing password for "e" e's Old password: e's New password: AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 54

Enter the new password again: e@abe:e/>

Salir y desconectarse de la sesin: logout Todo lo que se haga o se ejecute desde una cuenta de usuario se reconoce en el sistema como viniendo de dicho usuario. Si un usuario deja una sesin abierta y se realizan operaciones negativas, perjudiciales o dainas lo ms seguro es que se responsabilice al usuario, por ello, debera cerrar su sesin apenas termine de trabajar con la misma. Hay varias maneras de cerrar la sesin. Con el comando simple logout, con el comando simple exit o con la combinacin de teclas ctrl d estas dos ltimas slo funcionan si es la nica instancia del intrprete de comandos que ha iniciado el usuario. Cuando un usuario entra a un UNIX, el subsistema de autenticacin del sistema operativo le busca dos atributos entre otros-, para llevar a cabo un par de cosas: Busca un atributo directorio personal o inicial de la cuenta de usuario. Si encuentra dicho atributo el sistema primero se para en tal directorio para continuar. Si el directorio no se encuentra tpicamente al usuario se lo ubica en / usr/guest o en /. Es posible hacer que ms de un usuario compartan un mismo directorio inicial ya no directorio personal-, pero esta prctica no es muy comn. Busca un atributo programa inicial de la cuenta de usuario. Si encuentra dicho atributo el sistema ejecuta al programa inicial como si fuera el usuario. Si el programa inicial no se encuentra, el usuario es expulsado inmediatamente entre correctamente su contrasea. Es comn que sistemas sin mucha personalizacin dejen a los usuarios en algn ambiente intrprete de comandos, ya que es la configuracin bsica y predeterminada de los sistemas. preconfigura a los usuarios para que inicien con /usr/bin/ksh (el AIX Korn Shell 88), incluso al usuario root. preconfigura a los usuarios para que inicien con /usr/bin/ksh (el Solaris Korn Shell 93), pero con /usr/bin/csh (el C Shell) para el usuario root. Mac OS X preconfigura a los usuarios para que sus sesiones de texto sean con /usr/bin/bash (el Bourne Again Shell), y no permite el acceso al usuario root el usuario root ni siquiera tiene contrasea para acceder-. FreeBSD preconfigura a los usuarios para que sus sesiones de texto sean con /usr/bin/bash (el Bourne Again Shell), y /usr/bin/sh (Bourne Shell original) para el usuario root.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

55

OpenBSD preconfigura a los usuarios para que inicien con /usr/bin/ksh (el Korn Shell 93), incluso para el usuario root.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

56

Los UNIX no tiene n un estndar de todos los com andos, pero s cumplen obligat oriamente un estndar com a comando para la n d o p o r mayora de los comandos.

En este punto es do diferencia Apple nde ms se Mac OS X de los otros Unix. El formato predeterminado de disco de Mac OS X no es sens m ay s cu la s, en ible a las to nombres de lo nc es lo s s comandos tampoco.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

57

Estructura estandar de los comandos


Aunque los UNIX no tienen un estndar que deban seguir todos los comandos, s hay un estndar de hecho que siguen casi todos los comandos:
comando opciones argumentos

Bsicamente lo que hay que observar es que primero se escribe el comando, segundo posiblemente- se escriben las opciones, y de ltimo los argumentos. Acerca de los comandos La mayora de los comandos en UNIX son programas-archivo ejecutables, que el sistema operativo busca por nombre en unas ubicaciones estandarizadas pero configurables en disco. Como la mayora de formatos de disco de la mayora de los UNIX diferencian entre maysculas y minsculas en los nombres, entonces los comandos se diferencian entre maysculas y minsculas. Unos comandos son internos de cada intrprete de comandos (aqu se llaman builtins), y en este caso tambin cumplen con el formato y la sensibilidad a las maysculas, incluso en sistemas como Apple Mac OS X que no es sensible por lo general. Note que los comandos son en ingls o abreviaturas del ingls sin importar como est configurado un sistema UNIX realmente un sistema UNIX no est instalado en un idioma, est configurado con al menos un idioma-. Siguiendo una antigua tradicin los comandos en los sistemas UNIX son abreviaturas muy cortas de nombres obvios de operaciones (por ejemplo para copiar archivos se usa cp, abreviatura de la operacin copy en ingls!). Acerca de las opciones Las opciones son switches que cambian algo en el funcionamiento de un comando, y, como no siempre se quiere cambiar el funcionamiento bsico de un comando, son pues, opcionales. La mayora de las veces las opciones son letras individuales que casi siempre deben llevar un prefijo cuando se escriben sueltas y que no llevan un prefijo cuando no se escriben sueltas. Un ejemplo: el comando cp puede preguntar si se copia archivo por archivo cuando se le especifican varios, pero normalmente no lo hace, a menos que se incluya la opcin i, y normalmente no quiere destruir archivos si se pudiese pero los permisos dicen que no, pero se le puede dar la opcin f. Si se quieren usar ambas opciones se puede usar cp i f o se puede usar cp if Ntese tambin que casi nunca el rden de las opciones afecta, pero s la diferenciacin entre maysculas y minsculas. Se ver comando por comando conforme sea el caso.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 58

Las primeras mq uinas donde se usaron los conceptos de s er vi do r y de c lie nt e/ servidor fueron UNIX. Ntese ta m bi n qu e TC P/ IP fu e desarrollado en los UNIX de la familia ambientes BSD.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

59

Comandos relacionados con la fecha y la hora


El tiempo (la fecha y la hora) es un tem muy importante en un servidor, en especial notando que muchos usuarios acceden a los servicios del servidor al mismo La tiempo, y que UNIX est muy asociado con el concepto de servidor. Note es suma de user mas sys no igual a real que los sistemas UNIX siempre estn anotando ciertos eventos en algn sistema es multit porque el area, as que ap tipo de registro cronolgico de eventos casi siempre un simple archivo tamar te de nu es tr a ta re a bin hace otras ta reas. de texto-. Como los sistemas UNIX tienen muy buenas capacidades de trabajo para el acceso remoto, y que a muchos de estos sistema se ingresa desde mltiples pases/husos horarios, cul ser la hora que aplica para los eventos? Pues la hora en el servidor! Qu fecha y hora es en el servidor: date El comando date sin parmetros muestra la hora del servidor, en un formato estandarizado y teniendo en cuenta la ubicacin geogrfica y de horario de verano. Adicionalmente tiene unas opciones que permiten seleccionar cmo quiere que se muestra la fecha y o la hora. Lo ms sencillo, sin opciones:
e@abe:e/> who am i root pts/0 Aug 13 20:11 e@abe:e/> date Mon Aug 13 21:06:42 EST 2007 e@abe:e/> (moe.lan)

Y ahora, con opciones:


e@abe:e/> date Mon Aug 13 21:07:21 EST 2007 e@abe:e/> date +"%Y-%m-%d %H:%M:%S" 2007-08-13 21:07:38 e@abe:e/> date +"%Y-%m-%d %H:%M:%S" 2007-08-13 21:07:46 e@abe:e/>

Note que los sistemas UNIX son muy precisos en llevar la hora exacta, pero slo si se mantienen encendidos, y que, adicionalmente, en UNIX se inventaron un protocolo para el mantenimiento de una hora sincronizada con una central a travs de la red hace un par de dcadas. Cunto se demora una tarea: time Muchas veces es necesario conocer cunto se demora una tarea o comando. En los sistemas UNIX no hay que buscar un cronmetro y esforzar el pulso, slo hay que conocer el comando adecuado: time.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

60

Cuando se antepone el comando time a un comando o juego de comandos, el sistema ejecuta el comando o juego de comandos, y al final reporta tres contadores: Cunto se demor el comando ejecutando instrucciones dentro del ncleo del sistema en UNIX se llama tiempo de kernel o sys time-, cunto se demor el comando ejecutando instrucciones dentro del propio programa o comando en UNIX se llama tiempo unprivileged o user time-, cunto se demor el comando ejecutando para el usuario, o tiempo de reloj de pared en UNIX se llama wall clock time o real time-. Un ejemplo:
e@abe:e/> time nslookup www.interfacelift.com Server: dsldevice.lan Address: 192.168.1.254 Non-authoritative answer: Name: www.interfacelift.com Address: 209.85.64.50 real 0m0.21s user 0m0.01s sys 0m0.01s e@abe:e/>

Calendario: cal Como los seres humanos contamos ms los das, las semanas y los meses que los minutos y los segundos, todos los sistemas UNIX incluyen el comando cal, que sirve para ver o revisar de manera sencilla un calendario. El comando tiene tres posibles maneras de uso: El comando slo, sin opciones ni argumentos, El comando con un nico nmero, El comando con dos nmeros. Cuando se usa el comando slo, cal muestra un calendario representando el mes actual real:
e@abe:e/> cal August 2007 Sun Mon Tue Wed Thu 1 2 5 6 7 8 9 12 13 14 15 16 19 20 21 22 23 26 27 28 29 30 Fri 3 10 17 24 31 Sat 4 11 18 25

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

61

Cuando se usa cal con un nico nmero, muestra el calendario del ao dado el nmero, sin hacer ningn tipo de correccin de siglo, es decir ni 7 ni 07 representan 2007, 7 indica el ao sptimo a partir de Cristo!.
e@abe:e/> cal 2007 January Sun Mon Tue Wed Thu 1 2 3 4 7 8 9 10 11 14 15 16 17 18 23 24 25 26 27 30 November Sun Mon Tue Wed Thu 1 4 5 6 7 8 11 12 13 14 15 18 19 20 21 22 25 26 27 28 29 2007 Fri Sat 5 6 12 13 19 20 28 Fri 2 9 16 23 30 29 Sat 3 10 17 24 February Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 28 29 30 31

December Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Cuando se usa el comando cal con dos nmeros, el comando muestra un calendario del mes del primer nmero en el ao segundo nmero:
e@abe:e/> cal 5 1974 May 1974 Sun Mon Tue Wed Thu Fri 1 2 3 5 6 7 8 9 10 12 13 14 15 16 17 19 20 21 22 23 24 26 27 28 29 30 31 Sat 4 11 18 25

Trivia: Quin sabe qu pasa con el calendario de 1752?

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

62

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

63

Comunicacin con otros usuarios


UNIX y las comunicaciones
Desde los meros comienzos no exactamente desde el inicio, la verdad- UNIX ha sido multiusuario, por lo que ha tenido buenas facilidades de comunicacin con otros usuarios del mismo o de diferente sistema. Mientras en otros sistemas han ido evolucionando, muchas de las cosas que han sido novedad en los ltimos aos, los usuarios de UNIX las dan por sentado porque las han tenido de alguna manera por dcadas. En UNIX es muy fcil cuando se conoce que TCP/IP naci en UNIX, siendo BSD el primer ambiente con una implementacin funcionando, y siendo las ideas de sockets de TCP/IP desarrolladas para BSD el estndar de hecho como se programan todas las implementaciones de TCP/IP en todos los otros sistemas en la actualidad. En UNIX siempre ha habido correo, en UNIX naci TCP, naci TCP/IP, naci TELNET, FTP, SMTP, POP, IMAP, y muchsimos protocolos ms. En NeXTSTEP -un UNIX - se inventaron HTTP y se hizo la primera implementacin de un navegador (browser) y de un servidor de pginas, y en el mismo sistema operativo se implement HTML!. En UNIX se inventaron CGI y JavaScript. En UNIX se inventaron las direcciones de correo buzn@dominio, y en UNIX se inventaron el chat centralizado y el distribuido por TCP/IP. Sin UNIX no existira la Internet global como existe hoy en da. Por algo Sun Microsystems en el ms grande auge de sus mquinas con Solaris acu The network Is the computer. Tan importante es UNIX en la Internet, que el modo de transmisin de datos nativo de la red es el modo como escribe UNIX texto dentro de un socket.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

64

El usuario debe finalizar el mensaje presiona ndo ctrl d

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

65

Mensajes directos a la sesin: write


Una manera sencilla de comunicarse con otro usuario actualmente presente en el sistema es usando mensajes directos escritos con el comando write. La sintaxis bsica es muy sencilla: write nombreUsuario. Como este comando slo enva mensajes directos a la ventana de sesin a la terminal realmente-, el que escribe/enva debera verificar primero que el usuario al que le va a enviar el mensaje est conectado en el sistema y que tiene una sesin interactiva de sistema operativo. Ejemplo: Un usuario en su sesin:
0 root@abe:/> who root pts/0 e pts/1 0 root@abe:/> write e Hola usuario! 0 root@abe:/> Aug 14 19:18 Aug 14 19:36 (moe.lan) (moe.lan)

y el otro usuario en su sesin:


e@abe:e/> Message from root on abe (pts/0) [Tue Aug 14 19:37:50 EST 2007] ... Hola usuario! <EOT>

Como puede observarse, el comando write no muestra un indicador al usuario que lo usa para mostrarle que ya puede escribir, pero de hecho, s le recibe al usuario y s enva el mensaje. El usuario al que le envan un mensaje no tiene una manera para responder el mensaje segn la herramienta, es decir, esta no es una herramienta interactiva. Si el usuario que recibe un mensaje quiere responder debera usar lo mismo: write otroUsuario. Los mensajes que se envan usando write aparecen encima del texto que est observando en su sesin el usuario destinatario, as que dicho texto no tiene nada que ver con el texto del archivo si el destinatario est trabajando un archivo en un editor de texto. Ahora, como puede ser incmodo, el usuario puede controlar si recibe o no los mensajes de otros usuarios, usando el comando mesg, pero, estos controles no funcionan si quien enva es el usuario todopoderoso root. Ejemplo: Un usuario se bloquea:
2 root@abe:/> mesg n 1 root@abe:/>

El otro usuario intenta comunicarse:


e@abe:e/> write root write: 0803-031 Permission denied. AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 66

Y si el usuario no puso bloqueos:


1 root@abe:/> mesg y 0 root@abe:/>

El otro usuario puede enviar:


e@abe:e/> write root Hola super usuario! Soy e

Al otro usuario le aparece:


0 root@abe:/> Message from e on abe (pts/1) [Tue Aug 14 19:52:04 EST 2007] ... Hola super usuario! Soy e <EOT>

El comando write puede usarse tambin para comunicarse instantneamente con otros usuarios en otros sistemas si en ambos sistemas est corriendo el servicio writesrv o equivalente-. Es muy raro hoy en da encontrar sistemas de stos. Si se tienen disponibles se usara write usuario@sistema, donde aplica la misma regla, el usuario debe estar conectado en se momento y no debe haber bloqueado la recepcin de mensajes.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

67

Coversacin (Chat) con otros usuarios: talk


Xxx

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

68

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

69

Mensajes a todo el mundo: wall


Como el comando write es especfico, enva mensajes a un nico usuario que debe estar conectado a la mquina en el momento del envo de los mensajes, no es muy prctico para hacer anuncios. Afortunadamente los sistemas UNIX incluyen un comando para hacer anuncios, este comando es wall (write all), que enva un mismo- mensaje a todos los usuarios que en el momento estn conectados con una sesin interactiva. El uso del comando wall es muy sencillo: se usa wall, sin parmetros, y en la nueva lnea que aparece se escribe el texto a anunciar, la cantidad de lneas que sean necesarias, y se finaliza con ctrl d, solo, en una lnea. El mensaje ser recibido por todos los usuarios conectados interactivamente que no hayan bloqueado la recepcin de los mensajes al igual que write, los mensajes que root enva no se pueden bloquear-. Ejemplo: El usuario que enva,
e@abe:e/> wall Esta alguien ahi??? ^D Broadcast message from e@abe (pts/1) at 21:15:30 ... Esta alguien ahi???

y uno de tantos posibles usuarios,


1 root@abe:/> Broadcast message from e@abe (pts/1) at 21:15:30 ... Esta alguien ahi???

La verdad, es muy sencillo.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

70

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

71

Correo electrnico: mail


El concepto de correo electrnico, como lo conocemos en Internet es el mismo de los sistemas UNIX, ya que el correo de Internet bsicamente SMTP- es el correo inter-sistemas como se lo inventaron en UNIX. Ahora, antes del correo inter-sistemas, UNIX tuvo y tiene correo intra-sistema, para la comunicacin entre los usuarios de un mismo sistema, y para la comunicacin del sistema operativo y las aplicaciones que ejecuta con los usuarios en el mismo servidor. Para ambos usos se usa el mismo comando: mail tambin hay otros comandos-. Modo interactivo y lectura del correo electrnico El primer modo se usa para leer el correo en el buzn de entrada, para ello simplemente se ejecuta el comando mail sin parmetros u opciones. Ejemplo:
e@abe:e/> mail Mail [5.2 UCB] [AIX 5.X] Type ? for help. "/var/spool/mail/e": 1 message 1 new >N 1 root Fri Jun 8 18:38 23/822 ?

"diagela message from abe"

Cuando as se ejecuta el comando muestra el buzn de entrada del usuario actual (normalmente es /var/spool/mail/nombreUsuario, pero realmente no es importante). Luego de mostrar encabezados de correos suficientes para llenar la pantalla, el programa mail muestra un indicador, a la espera de comandos. La pantalla inicial del programa mail muestra: La versin del programa y del sistema operativo El nombre del buzn de entrada, cuntos mensajes tiene y cuntos sin leer. La lista de los mensajes en el buzn, as: o El mensaje actual se indica con un smbolo > o El estado del mensaje o El nmero ordinal del mensaje de correo en el buzn o El remitente del mensaje de correo o La fecha de recepcin del mensaje o El nmero de lneas/el nmero de caracteres en el mensaje. Estos contadores incluyen los encabezados de correo. o El ttulo o asunto del correo.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 72

El indicador de comandos del programa mail, ? Dentro de los estados de mensaje se encuentran:
N P U

Un mensaje nuevo Un mensaje preservado en un buzn de sistema

Mensaje sin leer, es decir un mensaje que no se ley en las anteriores invocaciones del programa mail, y que tampoco se ha ledo en esta.
*

Un mensaje guardado en un archivo o buzn

Un mensaje sin smbolo de estado es un mensaje que ya ha sido leido pero que no ha sido guardado.

Dentro de los comandos posibles hay muchos- estn: delete listaMensajes (d) Marca el mensaje actual o los de la lista de mensajes para que sean borrados cuando se salga del buzn actual. Pueden desmarcarse para borrado mientras no se salga de la sesin o el buzn actual. dt Marca para borrar el mensaje actual y muestra el siguiente mensaje. (ex o x) Sale de mail sin cambiar los contenidos originales del buzn de exit correo. (folder) Se cambia a un nuevo buzn de correo. Todos los file nuevoBuzn cambios en el buzn de correo actual son aplicados. Debe darse el nombre completo del nuevo buzn o alguna de las abreviaturas:
o o o o # % & +Nombre

Buzn previo Buzn del sistema (normalmente /var/spool/mail/nombreUsuario) Buzn personal (normalmente /home/nombreUsuario/mbox) Un archivo dentro del directorio de buzones

folders Listar buzones en su directorio de buzones headers listaMensajes (h) Lista los encabezados del grupo de mensajes actual del buzn de correo o de la lista de mensajes especificada. hold listaMensajes (ho) Marca el mensaje actual o los dados por la lista de mensajes para que sean mantenidos en el buzn de sistema (normalmente /var/ spool/mail/nombreUsuario). mail listaDirecciones (m) Abre el editor para crear un nuevo mensaje para enviar a los destinos dados por la lista de direcciones.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

73

mbox listaMensajes Marca el mensaje actual o los dados por la lista de mensajes para que sean movidos al buzn personal (normalmente /home/nombreUsuario/ mbox). new
listaMensajes

como no ledos.

Marca el mensaje actual o los dados por la lista de mensajes

next

(n) Muestra el siguiente mensaje, seleccionndolo como mensaje actual

(q) Deja el buzn actual y se sale del programa mail. Todos los cambios quit pendientes al buzn son aplicados: Los mensajes ledos pero no borrados ni grabados son movidos al buzn personal, los mensajes marcados para eliminacin son perdidos definitivamente, los mensajes marcados con hold son mantenidos en el buzn de sistema. reply mensaje (r) Permite responder al remitente y a todos los destinatarios del correo actual, o al mensaje dado. Reply mensaje (R) Permite responder al remitente del mensaje actual o al del mensaje dado. (u) Marca el mensaje actual, o los especificados, undelete listaMensajes como no borrados para que no se pierdan al salir del buzn actual. unread listaMensajes (U) Marca el mensaje actual, o los especificados, como no ledos. z+ z(z) Muestra el siguiente grupo de encabezados de mensajes. Muestra el anterior grupo de encabezados de mensajes.

Modo directo y envo de nuevos mensajes de correo electrnico El segundo modo se usa nicamente para enviar correos, este modo invoca usando el comando mail con argumentos posiblemente con opciones tambin-, en donde el comando mail asume que los argumentos son buzones destinatarios de correo. Ejemplo:
e@abe:e/> mail -s "Mensaje prueba Nro 1" ElgisRamon@gmail.com Este es un mensaje de prueba que muestra que el correo de UNIX es el mismo correo de Internet. Este correo slo contiene texto. No es ms. . Cc: e@abe:e/>

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

74

Como se observa, puede incluirse la opcin s con un texto entre comillas para darle un ttulo o asunto al mensaje de correo. Cuando inicia en este modo el programa mail entra inmediata y automticamente en modo redaccin de correo que finaliza cuando se escribe un carcter punto (.) slo en una lnea. Al final del mensaje el programa mail solicita unos destinatarios de copia opcionales y luego de poner el mensaje en el buzn de salida termina la ejecucin.

En DOS/Windows el separador de nombres de directorios es \, en el antig uo Mac pero en UNIX (inclu OS era :, so el nuevo Mac OS X) es /.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

75

Archivos y Directorios: Manejo de Directorios


El concepto de directorio es muy importante, tan importante que es algo con lo que se relacionan los usuarios de las computadoras tpicas desde los primeros das: los que en UNIX llamamos directorio en otros ambientes se llama carpeta. En los ambientes de computadoras ms populares (es decir Microsoft Windows y Apple Mac OS X) se usa el trmino carpeta cuando se habla de operaciones en ambiente grfico, y se usa el trmino directorio cuando se habla de operaciones en ambiente de comandos. Los directorios en Mac OS X son los directorios de los que se hablar en este apartado ya que Mac OS X es un UNIX. Los directorios en Windows son bsicamente los que se mencionarn aqu porque son los que ha usado Windows heredado de DOS, y DOS los hered de CP/M y CP/M los hered de UNIX, con un toque de VAX/VMS. La diferencia fundamental para un usuario que viene del ambiente de MS Windows, es que en esos ambientes y todos los relacionados hay un rbol de directorios que inicia en una raz por cada unidad de disco siendo unidad bsicamente un dispositivo fsico de almacenamiento de acceso directo-. En UNIX hay un nico directorio raz de donde lgicamente no fsicamente- se desprende toda una jerarqua de directorios, unos contenidos dentro de otros.

Directorios
Los directorios son archivos especiales en UNIX. Realmente son archivos dentro de las estructuras grabadas en disco- pero tienen una finalidad especial en el sistema: con los directorios se arma el concepto de rbol jerrquico de contenidos a los que estamos acostumbrados en muchas plataformas adems de los UNIX -. Los directorios en UNIX realmente son archivos especiales catlogo que contienen/son una tabla de nombres y nmeros de ndice de lo que est contenido dentro de el directorio. Como son especiales los directorios se trabajan con unos comandos diferentes de los que se permiten para los archivos comunes. Los directorios son tan archivos en UNIX que cumplen las mismas reglas que cumplen los archivos: Los directorios pueden tener casi cualquier nombre de entre uno (1) y dos cientos cincuenta y cinco caracteres (255), en un UNIX moderno. El nico carcter que no se permite en los nombres es / Dos directorios o dos archivos o un directorio y un archivo no pueden tener el mismo nombre completo.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

76

Los directorios tienen la misma estructura de ndice que tiene todo archivo, slo que estn marcados con una d, para reconocerlos como directorio. Como la estructura de ndice de archivos incluye dueo, permisos y fechas y horas, los directorios tambin tienen estos atributos. Los directorios ocupan espacio, que mnimo es lo que ocupa la tabla que lista sus contenidos. En un UNIX moderno el tamao de un directorios es un mltiplo exacto de una unidad de espacio de disco y nunca es cero. Ntese que en UNIX los programas todos- ejecutan bajo el concepto de directorio actual, que es muy importante para el programa y para el sistema en s. Es necesario que el usuario sepa cul es el directorio actual, porque es dnde los programas tpicamente buscan la informacin. Como muchas veces as es la configuracin predeterminadas- el usuario no sabe a simple vista en qu directorio actual est trabajando, los UNIX incluyen el comando pwd (print working directory), que simplemente muestra en cul directorio estoy trabajando actualmente:
e@abe:e/> pwd /home/e

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

77

Listar contenidos de directorio: ls


Uso bsico del comando listar contenidos del directorio Lo ms bsico que necesita uno conocer de los directorios siendo bsicamente una tabla de contenidos- es qu contiene. Esta lista de contenidos se obtiene usando el comando ls (list). Cuando se usa as, sin argumentos ni opciones muestra la lista de slo nombres de lo contenidos en el directorio actual. El comando ls, a menos que se le indique (realmente casi todos los comandos) ignora y no lista los archivos lo que incluye a los directorios- cuyos nombres comiencen por punto (.) as en UNIX archivo oculto es aquel cuyo nombre comienza con punto-. Ejemplo:
e@abe:e/> ls LitteFile MadRamon 1.png SubDir_2 fecha actual.txt smit.log smit.script smit.transaction subdir1

Como se observar, muestra los nombres de lo contenido en el directorio actual, sin diferenciar qu son, es ms sin incluir ms informacin aparte del nombre de cada tem. Listar contenidos de otro directorio Si se necesita obtener la lista de lo contenido dentro de otro directorio diferente del directorio actual, y no queremos o no podemos movernos a dicho otro directorio se puede agregar como argumento al comando ls. Es ms, puede indicarse que se listen los contenidos de varios directorios a la vez si se le dan como argumentos independientes al comando ls. Ejemplo:
e@abe:e/> ls / WebSM.pref WebSM.pref_wsmmonitoring.data audit bin bosinst.data cdrom cluster dev etc getinfo.sh home image.data lib lost+found lpp mnt opt proc sbin smit.log smit.script smit.transact tftpboot tmp u unix usr var websm.script wsmcustomtool

Como se observa, incluye slo los nombres, pero mostr lo de otro directorio sin tener que irnos al mismo.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

78

Listar incluyendo los archivos normalmente ocultos Muchos directorios contienen archivos que normalmente estn ocultos porque ls y muchos otros comandos los ignoran. Puede hacerse que ls incluya dichos archivos en sus listados si se agrega la opcin A. Re Ejemplo:
e@abe:e/> ls LitteFile MadRamon 1.png e@abe:e/> ls -A .Xauthority .profile .sh_history e@abe:e/> SubDir_2 fecha actual.txt .ssh LitteFile MadRamon 1.png smit.log smit.script SubDir_2 fecha actual.txt smit.log

cuerde: los dire UNIX s ocupan es ctorios en pacio!

smit.transaction subdir1 smit.script smit.transaction subdir1

Si se observa detenidamente se notar que muchos tems son los mismos, pero como en la segunda invocacin se especific que haba que incluir los ocultos en los listados, pues, aparecen ms, todos con nombres que inician con punto (.). Nota cules son?

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

79

Listar contenidos de directorio con detalles: ls l


Todos los archivos incluso los directorios porque tambin son archivostienen unas propiedades llamadas metadatos en UNIX -. Estas propiedades pueden revisarse muy fcilmente con el comando ls cuando se le agrega la opcin l (long listing). Ejemplo:
e@abe:e/> ls -l total 88 -rw-r--r-1 e system -rw-r--r-1 e system drwxr-xr-x 2 e system -rw-r--r-1 e system -rw-r--r-1 e system -rw-r--r-1 e system -rw-r--r-1 e system drwxr-xr-x 2 e system e@abe:e/> ls -l / total 856 -rw-r--r-1 root system -rw-r--r-1 root system WebSM.pref_wsmmonitoring.data drwxr-x--2 root audit lrwxrwxrwx 1 bin bin -rw-r--r-1 root system drwxr-xr-x 2 root system drwxr-xr-x 3 root system drwxrwxr-x 5 root system drwxr-xr-x 27 root system -rwxr-xr-x 1 root system drwxr-xr-x 7 bin bin -rw-r--r-1 root system lrwxrwxrwx 1 bin bin drwx-----2 root system drwxr-xr-x 45 bin bin drwxr-xr-x 2 bin bin drwxr-xr-x 11 root system dr-xr-xr-x 1 root system drwxr-xr-x 3 bin bin -rw-r--r-1 root system smit.log -rw-r--r-1 root system smit.script -rw-r--r-1 root system drwxrwxr-x 2 root system drwxrwxrwt 9 bin bin lrwxrwxrwx 1 bin bin lrwxrwxrwx 1 root system boot/unix_64 drwxr-xr-x 36 bin bin AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 0 17804 256 29 10181 544 291 256 Aug Aug Aug Aug Apr Apr Apr Aug 14 14 14 14 10 10 10 14 23:15 23:16 23:17 23:15 16:02 16:00 16:00 23:17 LitteFile MadRamon 1.png SubDir_2 fecha actual.txt smit.log smit.script smit.transaction subdir1
Note que ls lista el nombre del item dado como argumento si es un archivo, pero lista los nombres de los cont el argumento es un enidos si directorio!

6892 Apr 16 13:14 WebSM.pref 84 Apr 16 13:11 256 8 5793 256 256 8192 8192 2287 256 8062 8 256 4096 256 4096 0 256 304408 audit bin -> /usr/bin bosinst.data cdrom cluster dev etc getinfo.sh home image.data lib -> /usr/lib lost+found lpp mnt opt Los enlaces sim proc ar ch iv os es blicos son pe ci al es qu e sbin apuntan a otro tem parecido a un a . Son algo cceso directo de Windows o un alias de Mac. 11526 Aug 14 19:34 22352 256 8192 5 21 Aug Apr Aug Apr Apr 14 10 14 10 10 19:34 08:21 23:32 07:57 10:55 smit.transaction tftpboot tmp u -> /home UNIX -> /usr/lib/ Jan Apr Apr Apr Jul Aug Aug Jun Jun Apr Apr Apr Aug Jan Apr Aug Apr Aug 10 10 18 11 11 14 12 08 18 18 10 10 09 10 13 14 10 14 2006 07:57 22:01 12:43 23:39 15:00 13:48 18:43 21:57 22:02 07:57 07:57 22:13 2006 00:37 23:32 20:06 19:34

4096 Jun 18 21:43 usr 80

drwxr-xr-x -rw-r--r--rw-r--r--

30 root 1 root 1 root

system system system

4096 Aug 09 12:31 var 11806 Apr 16 13:13 websm.script 1152 Apr 16 13:12 wsmcustomtools.data

Es un listado largo y complejo. Hay mucha informacin, a saber: El primer ejemplo muestra el uso de ls con la opcin l, pero sin argumentos, es decir, un listado con detalles del directorio actual. El segundo ejemplo muestra el uso de ls con la opcin l y con argumento, es decir, un listado con detalles de un directorio especfico. Qu incluye el listado? Una primera columna con el tipo y los permisos de cada uno de los tems. De los permisos se hablar ms adelante.
En UNIX . . es un subdirectorio que existe dentro de cada direct or m g ic am en te io y que ap un ta al directorio que contiene al presente!

El nmero de nombres que tiene en total cada tem s los archivos y directorios en UNIX pueden tener varios nombres simultneamente-. El nombre o nmero interno del usuario dueo de cada tem. El nombre o nmero interno del grupo de usuarios que tiene acceso a cada tem. El tamao en bytes de cada tem. Ciertos tems archivos especiales- no tienen tamao, para ellos el listado incluye otra informacin en esta columna. La fecha y hora de ltima modificacin, de forma mes da hora si la ltima modificacin sucedi hace mximo seis meses; de forma mes da ao si la ltima modificacin sucedi hace ms de seis meses. El nombre del tem. Si el tem es un enlace simblico muestra el nombre nombreDelItemApuntado.
->

El tipo de un tem archivo es un carcter o letra. Define qu puede contener y cmo lo interpreta el sistema operativo. Define tambin qu operaciones son vlidas. Dentro de los tipos de archivos se encuentran:
d l

Aparece un guin (-) en los archivos comunes. Se muestra para los directorios nicamente.

Enlace simblico. Tratar de usar un enlace simblico (excepto por eliminar y mover) lleva a usar el archivo o tem al que apunta el enlace simblico. Especial. Es un tem que existe para usar una pieza de hardware como archivo.
b

Especial. Es un tem que existe para usar una pieza de hardware o el resultado de una funcin de software como archivo.
c 81

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

Y ms!

Moverse entre directorios: cd


Como en un sistema UNIX tpico hay muchsimos directorios (tal vez miles), una operacin muy importante es moverse o cambiarse de directorio. Para cambiarse o moverse de directorio se usa el comando cd, que tiene cuatro modos de sintaxis diferentes:
cd nombreDirectorio

Si se le da un nombre de directorio el comando CD mira dos casos: si el nombre dado comienza con el smbolo / entonces el nombre es absoluto y el comando cd intenta buscar el directorio a partir de la raz absoluta de la jerarqua de directorios; si el nombre dado comienza con otra cosa el comando cd intenta buscar el directorio destino a partir del directorio actual, como si fuera un subdirectorio de donde el usuario est ubicado presentemente. Si se le da como argumento el smbolo ~, el comando cd averigua cul es el directorio inicial o personal del usuario que lo est invocando, e intenta moverse a dicho directorio personal. Si se le da el smbolo -, el comando cd averigua cul fue el ltimo directorio donde el usuario estaba antes de moverse al actual e intenta moverse a dicho directorio previo. Si se usa el comando cd sin argumentos, el comando asume que se invoc cd ~ y busca el directorio personal o inicial del usuario que lo est invocando, para intentar moverse all.

cd ~

cd -

cd

Ejemplos:
e@abe:e/> pwd /home/e e@abe:e/> cd /home e@abe:home/> pwd /home e@abe:home/> cd .. e@abe:/> pwd / e@abe:/> cd usr e@abe:usr/> pwd /usr e@abe:usr/> cd /home/e e@abe:e/> pwd /home/e e@abe:e/> cd /usr e@abe:usr/> pwd /usr e@abe:usr/> cd (el usuario inicia en su directorio personal) (el usuario ahora est en un directorio que se busc desde la raz) (el usuario ahora est en un nivel superior) (el comando busc a partir del directorio donde estaba ubicado)

(el comando puede navegar varios niveles en un solo paso) (reporta a dnde llevar, como se verificar) (el comando cambi al usuario a donde estaba antes)

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

82

e@abe:e/> pwd /home/e

(el comando solito lleva al directorio personal)

Nota: Siendo un sistema multiusuario con una arquitectura de seguridad, los permisos de los directorios definen qu usuarios pueden entrar o deambular por cada uno.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

83

Crear directorios: mkdir


Como cada usuario quiere organizar su informacin de la manera que ms prctica le parece, existe el comando para crear nuevos directorios. Es un comando muy sencillo con el que se pueden crear directorios donde se tengan permisos, y en un UNIX tpico no se manejan permisos poder crear directorios, slo se manejan poder escribir en un directorio, con ste ltimo es suficiente para poder crear directorios!. El comando es sencillo:
mkdir nuevoDirectorio

Tambin se le puede decir que cree varios nuevos directorios:


mkdir nuevoDirectorio1 nuevoDirectorio2

Como todos los comandos, si el nombre del nuevo directorio no comienza con el smbolo / el comando intentar crear el nuevo como subdirectorio del directorio actual. Adicionalmente, con sas sintaxis, si al comando se le da toda una ruta o camino jerrquico, slo intentar crear como directorio el ltimo elemento de toda la ruta, todo lo otro ya deber existir. Ejemplo:
e@abe:e/> ls LitteFile SubDir_2 MadRamon 1.png fecha actual.txt e@abe:e/> mkdir NuevoSubDir e@abe:e/> ls LitteFile SubDir_2 MadRamon 1.png fecha actual.txt NuevoSubDir smit.log e@abe:e/> ls -l total 88 -rw-r--r-1 e system -rw-r--r-1 e system drwxr-xr-x 2 e system drwxr-xr-x 2 e system -rw-r--r-1 e system -rw-r--r-1 e system -rw-r--r-1 e system -rw-r--r-1 e system drwxr-xr-x 2 e system e@abe:e/> smit.log smit.script smit.script smit.transaction subdir1 0 17804 256 256 29 10181 544 291 256 Aug Aug Aug Aug Aug Apr Apr Apr Aug 14 14 15 14 14 10 10 10 14 23:15 23:16 21:05 23:17 23:15 16:02 16:00 16:00 23:17 LitteFile MadRamon 1.png NuevoSubDir SubDir_2 fecha actual.txt smit.log smit.script smit.transaction subdir1 smit.transaction subdir1

Otro ejemplo ms:


e@abe:e/> mkdir /tmp/ejemplo/mi_dir mkdir: 0653-357 Cannot access directory /tmp/ejemplo. /tmp/ejemplo: A file or directory in the path name does not exist. e@abe:e/> mkdir /tmp/ejemplo /tmp/ejemplo/mi_dir e@abe:e/> ls -ld /tmp /tmp/ejemplo /tmp/ejemplo/mi_dir AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 84

drwxrwxrwt drwxr-xr-x drwxr-xr-x e@abe:e/>

10 bin 3 e 2 e

bin system system

8192 Aug 15 21:08 /tmp 256 Aug 15 21:08 /tmp/ejemplo 256 Aug 15 21:08 /tmp/ejemplo/mi_dir

El uso de la opcin d del comando ls es nuevo en esta gua, no se haba mencionado. Cuando se usa el comando ls con un directorio como argumento, el mismo no lista al directorio si no lo contenido en el directorio. Si se agrega la opcin d al comando ls el mismo lista los directorios, no sus contenidos. Como se est usando tambin la opcin l, entonces el comando muestra un listado completo de propiedades de los directorios, no de los contenidos de los directorios. Crear toda una estructura de directorios: mkdir p Como se ve en el ejemplo, cuando al comando simple mkdir se le da toda una ruta de directorios asume slo que se necesita crear el ltimo elemento de la ruta (asi con mkdir / uno/dos/tres/cuatro asume que uno, dos y tres existen y que slo hay que crear cuatro). Como muchas veces se necesita todo el camino, existe una variante de mkdir para que cree los elementos de una ruta que hagan falta:
mkdir p /undir/segdir/tercdir/cuartodir

Ejemplo:
e@abe:e/> mkdir dirA/dirB/dirC mkdir: 0653-357 Cannot access directory dirA/dirB. dirA/dirB: A file or directory in the path name does not e@abe:e/> mkdir -p dirA/dirB/dirC e@abe:e/> ls -ld dirA dirA/dirB dirA/dirB/dirC drwxr-xr-x 3 e system 256 Aug 15 22:19 drwxr-xr-x 3 e system 256 Aug 15 22:19 drwxr-xr-x 2 e system 256 Aug 15 22:19 exist. dirA dirA/dirB dirA/dirB/dirC

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

85

Cambiar nombre de directorio (o mover): mv


A veces no se tiene una estructura jerrquica de directorios y subdirectorios como se deseara. Si se necesita cambiar el nombre de un directorio (o de un archivo) se puede usar el comando mover, simplemente se usa un nuevo nombre que no exista. Si se necesita mover un directorio para que est en otro sitio dentro del mismo sistema, slo hay que usar tambin el comando mover, pero en este caso el nombre destino existe y es un directorio donde se pueda meter el directorio original. En resumen: Para renombrar, asumiendo que nuevoNombre no existe:
mv elDirectorio nuevoNombre

Para mover, asumiendo que nombreContenedor s existe y s es un directorio:


mv elDirectorio nombreContenedor

Como se observar, es el mismo comando con la misma sintaxis, la diferencia radica en si el segundo nombre dado como argumento existe y es directorio. Ejemplo:
e@abe:e/> ls LitteFile SubDir_2 smit.script MadRamon 1.png fecha actual.txt smit.transaction NuevoSubDir smit.log subdir1 e@abe:e/> mv NuevoSubDir Antiguo_SubDir e@abe:e/> ls Antiguo_SubDir SubDir_2 smit.script LitteFile fecha actual.txt smit.transaction MadRamon 1.png smit.log subdir1 e@abe:e/> mv Antiguo_SubDir subdir1 e@abe:e/> ls LitteFile SubDir_2 smit.log MadRamon 1.png fecha actual.txt smit.script e@abe:e/> ls subdir1 Antiguo_SubDir e@abe:e/>

smit.transaction subdir1

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

86

En el comando, qu que no slo se pu iere decir ed dos nombres, si en escribir no cuntos nombres uno quiera o necesite.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

87

Remover directorios: rmdir


As como se crean nuevos directorios, pueden borrarse los que ya no se necesiten. Toca cumplir condiciones: deben tenerse los permisos suficientes, y adems, el comando rmdir slo sabe borrar directorios vacos:
rmdir directorioVaco

Ejemplo:
e@abe:e/> rmdir dirA rmdir: 0653-611 Directory dirA is not empty. e@abe:e/> rmdir dirA/dirB/dirC e@abe:e/> ls -ld dirA dirA/dirB drwxr-xr-x 3 e system 256 Aug 15 22:19 dirA drwxr-xr-x 2 e system 256 Aug 15 22:23 dirA/dirB

Remover una jerarqua de directorios: rmdir p As como puede crearse toda una jerarqua de directorios, unos dentro de otros, puede tambin borrarse toda una jerarqua de directorios si se usa la opcin p del comando rmdir:
rmdir p /undir/segdir/tercdir/cuartodir

Ejemplo:
e@abe:e/> ls -ld dirA dirA/dirB dirA/dirB/dirC drwxr-xr-x 3 e system 256 Aug 15 22:19 dirA drwxr-xr-x 3 e system 256 Aug 15 22:25 dirA/dirB drwxr-xr-x 2 e system 256 Aug 15 22:25 dirA/dirB/dirC e@abe:e/> rmdir -p dirA/dirB/dirC e@abe:e/> ls -ld dirA dirA/dirB dirA/dirB/dirC ls: 0653-341 The file dirA does not exist. ls: 0653-341 The file dirA/dirB does not exist. ls: 0653-341 The file dirA/dirB/dirC does not exist. e@abe:e/>

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

88

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

89

Archivos y Directorios: Manejo de Archivos


Otro concepto que manejan los usuarios de otras plataformas como se maneja en UNIX es el concepto de archivo. En UNIX, parecido a lo que se maneja en otras plataformas un archivo es un conjunto de bytes que se usan a travs de un nombre, que fsicamente no necesariamente estn contiguos, pero que lgicamente se usan como si estuvieran contiguos, uno seguido del otro. En UNIX es donde se comenz a manejar el concepto de archivo como se maneja ahora en la mayora de las plataformas, pero hay diferencias.

Archivos
En UNIX un archivo siempre se considera desde el punto de vista del sistema operativocomo una secuencia de bytes sin estructura. En UNIX un archivo se encuentra y se accede a travs de una estructura especial de disco por fuera del archivo que se llama nodo ndice o ms comnmente inodo. En este inodo se encuentran los metadatos de cada archivo, as, en disco, para UNIX el inodo tiene una estructura pero el archivo no. Hay unas cosas que hacen especial el tratamiento de los archivos en UNIX: En cada inodo hay un marcador de tipo, lo que define tipos de archivo. Ya se ha mencionado, por ejemplo, que los directorios son un tipo de archivo. Un archivo est atado a su inodo, y para un dado archivo no cambia jams, hasta que se elimine del todo el archivo. Un archivo tiene un nico inodo y un inodo da acceso (podra decirse apunta a) un nico archivo. El nombre de un archivo est registrado en alguna (o algunas) tablas directorio, donde hay una relacin de algn inodo con algn nombre, para cada archivo contenido en el directorio. Un archivo puede tener de hecho muchos tienen tpicamente- ms de un nombre, en un mismo o en ms de un directorio. En cada inodo hay un contador de cuntos nombres tiene el archivo al que el inodo apunta, sin incluir o mencionar cules son esos nombres ni dnde estn. Temporalmente un archivo puede existir sin nombre, pero no es usable por las aplicaciones mientras as est. Existen archivos especiales en donde el inodo realmente se usa para apuntar y dar acceso a piezas de hardware y funciones de software, pero que no apuntan a archivos que guardan datos. Estos archivos especiales se usan exactamente como se usan otros archivos. Esta ltima particularidad es una caracterstica nica y muy poderosa de UNIX: los diseadores originales intentaron que todo en el sistema pudiera accederse como se usan
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 90

los archivos normales. As, en UNIX si se tienen los permisos se puede trabajar la memoria del sistema como un archivo, los discos, las cintas de copias de respaldo, los puertos, etc., como si fueran archivos comunes. Nombres de los archivos En general los sistemas UNIX son muy, muy liberales en cuanto a los nombres de los archivos. Hay pocas reglas: No pueden haber dos o ms archivos con el mismo nombre en el mismo directorio, independientemente del tipo de los archivos. La mayora de los UNIX soportan nombres de archivos sin importar el tipo- muy largos, de al menos 255 caracteres UNICODE. La mayora de las veces las restricciones existen en los formatos de disco que almacenan a los archivos. Todos los UNIX soportan nombres con casi cualquier carcter, lo nico en comn es que no puede incluirse el smbolo /. Tanto Mac OS X, como Solaris, como AIX soportan todo tipo de caracteres: espacios, smbolos, caracteres nacionales localizados (como o ), puntos, etc. La mayora de las restricciones a los nombres no las impone el sistema operativo en la mayora de los UNIX, si no el formato de disco donde se almacenan los archivos y sus nombres-. Por ejemplo, muchos UNIX entienden el formato de disco bsico de Windows (FAT), en el que hay muchas ms restricciones a los nombres de los archivos que las mencionadas aqu. Casi todos los formatos de disco de UNIX diferencian los nombres en maysculas de los en minsculas. Si as es, entonces para el sistema operativo habr diferencia! Los UNIX no manejan el concepto de extensin de nombre, as que no se necesita un sufijo al final de los archivos (en especial no un sufijo de tres letras despus de un punto). Un nombre de archivo puede contener varias veces el carcter punto (.) o ningn punto. Como los UNIX son liberales con los nombres, y los contenidos de los archivos son bytes nicamente para el sistema operativo, el nombre y el contenido de los archivos no tienen relacin directa. Un archivo no tiene que tener nombre terminado en .exe para ser programa o en .jpg para ser imagen. En cada directorio hay una tabla interna- que tiene los nombres cortos de los archivos sin ruta- que contiene, relacionados con el inodo que apunta a lo que en realidad es el archivo. Muchos caracteres en el intrprete de comandos de modo texto tienen significado especial, por ello es mejor evitar usarlos en los nombres a menos que se est dispuesto a expresarle al shell remueva el significado especial de esto.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 91

Nombres por ruta absoluta y por ruta relativa Cuando en el sistema operativo se menciona un archivo, se puede mencionar de dos maneras: Por ruta absoluta es cuando en algn programa o en el sistema operativo se menciona un archivo dando la ruta completa para poder ubicarlo. Las rutas absolutas son nombres que incluyen directorios y subdirectorios y que comienzan con el smbolo slash (/), es decir que a partir de la raz de todo se siguen los directorios y subdirectorios uno a uno hasta encontrar el archivo. Ejemplo:
/ /home/juancho/foto_vaca.jpg

Por ruta relativa es cuando en algn programa o en el sistema operativo se menciona un archivo dando un nombre que no comienza con el smbolo /. Las rutas relativas pueden ser el nombre nicamente (como archivo.txt) o pueden ser con ruta parcial (como subdir/archivo.txt). Cuando se usa una ruta relativa el sistema tiene en cuenta el directorio actual, usndolo como prefijo de nombre, y unindolo al nombre dado con un smbolo / intermedio. Ejemplo: Si el usuario juancho est ubicado en su directorio personal y menciona
foto_vaca.jpg

el sistema entiende /home/juancho/foto_vaca.jpg

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

92

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

93

Listar archivos: ls
El comando ls (list) realmente no lista archivos, lista directorios que lo que ms contienen son archivos:
[255 e@Moe ~] ls Desktop Library Documents Movies Downloads Music Pictures Public Sites dlmgr_.pro drbd.conf

Es claro que la mayora de las cosas dentro de un directorio son archivos, y que lo otro, que casi siempre son directorios tambin son archivos. Ahora, si se lista un archivo, a menos que se diga otra cosa, el comando lista el nombre del archivo dado:
[0 e@Moe ~] ls drbd.conf drbd.conf

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

94

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

95

Listar archivos con detalles: ls l


El comando ls cuando tiene la opcin l presenta un listado largo, que incluye muchos detalles de los archivos dados o contenidos en el directorio especificado (o contenidos en el directorio actual si no se especifica nada). Ejemplo:
e@abe:e/> ls total 88 -rw-r--r--rw-r--r-drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x -l 1 1 2 1 1 1 1 3 e e e e e e e e system system system system system system system system 0 17804 256 29 10181 544 291 256 Aug Aug Aug Aug Apr Apr Apr Aug 14 14 14 14 10 10 10 15 23:15 23:16 23:17 23:15 16:02 16:00 16:00 21:15 LitteFile MadRamon 1.png SubDir_2 fecha actual.txt smit.log smit.script smit.transaction subdir1

Es fcil reconocer del listado cules tems son archivos comunes: la primera columna tiene un menos (-) como primer carcter. Tambin se puede notar: La segunda columna es un nmero, es el nmero de nombres (oficialmente the link count). Casualmente en el listado superior, todos los archivos comunes tienen un nico nombre, como es tpico. Todo archivo tiene un dueo, casi siempre quin cre originalmente al archivo. Es lo que aparece en la columna tres (3) del listado. Todo archivo tiene un grupo, casi siempre el grupo principal del usuario dueo. Es lo que aparece en la columna cuatro (4) de un listado como el de arriba. Los archivos comunes y los directorios tienen tamao. En los listados de ls aparecen en bytes.
l

El sistema maneja tres marcas de tiempo con fecha y hora por cada archivo (en cada inodo): o Fecha y hora de ltimo uso, sin importar cul uso. Se llama oficialmente fecha de ltimo acceso o atime. o Fecha y hora de la ltima modificacin de los contenidos. Se llama oficialmente fecha de ltima modificacin o mtime. o Fecha y hora de la ltima modificacin de los metadatos. Se llama oficialmente fecha de ltimo cambio o ctime. Como no est especificado en el estndar, la mayora de los UNIX no mantienen una fecha de creacin, aunque muchos creen que s, ya que el nombre ctime es fcil confundirlo con creation time.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 96

De manera predeterminada el comando ls l muestra en la sexta columna la fecha de la ltima modificacin. Si se usa la opcin c con ls l se muestra la fecha de los ltimos cambios al inodo, y se usa la opcin u con ls l se muestra es la fecha del ltimo uso.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

97

Crear archivo vaco: touch


Como para los sistemas UNIX un archivo es slo una secuencia de bytes sin un significado especial, el sistema no incluye en s un comando crear archivo nuevo. Los archivos normalmente se crean con la misma aplicacin que despus se usar para leer y/o procesar la informacin que contienen. As para crear un nuevo archivo de audio se usa una aplicacin de grabado o edicin de audio, para crear un documento hoja de clculo se usa una aplicacin de hojas de clculo y as. Sin embargo en el sistema viene un comando que cambia las fechas de los archivos (la de ltimo acceso, la de ltimo cambio o de ltimo cambio del inodo), que casualmente si se le da como argumento algn nombre de archivo que no existe, lo crea nuevo, archivo comn, sin contenidos y le cambia la fecha puede invocarse de manera que no cree archivos si se desea-. Para crear un nuevo archivo puede usarse:
touch nombreNuevo

y si el nombreNuevo no corresponde con ningn archivo, lo crea nuevo, vaco. Ejemplo:


e@abe:e/> ls -l total 88 -rw-r--r-1 e system -rw-r--r-1 e system drwxr-xr-x 2 e system -rw-r--r-1 e system -rw-r--r-1 e system -rw-r--r-1 e system -rw-r--r-1 e system drwxr-xr-x 3 e system e@abe:e/> touch NuevoVacio.txt e@abe:e/> ls -l total 88 -rw-r--r-1 e system -rw-r--r-1 e system -rw-r--r-1 e system drwxr-xr-x 2 e system -rw-r--r-1 e system -rw-r--r-1 e system -rw-r--r-1 e system -rw-r--r-1 e system drwxr-xr-x 3 e system 0 17804 256 29 10181 544 291 256 Aug Aug Aug Aug Apr Apr Apr Aug 14 14 14 14 10 10 10 15 23:15 23:16 23:17 23:15 16:02 16:00 16:00 21:15 LitteFile MadRamon 1.png SubDir_2 fecha actual.txt smit.log smit.script smit.transaction subdir1

0 17804 0 256 29 10181 544 291 256

Aug Aug Aug Aug Aug Apr Apr Apr Aug

14 14 16 14 14 10 10 10 15

23:15 23:16 17:22 23:17 23:15 16:02 16:00 16:00 21:15

LitteFile MadRamon 1.png NuevoVacio.txt SubDir_2 fecha actual.txt smit.log smit.script smit.transaction subdir1

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

98

IMPORTANTE: Si al co se le da como mando segundo nombre el de un archivo existente, si puede sobreescribe ta l archivo sin consultar o adverti r!
cp

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

99

Copiar archivos: cp
Una operacin lo ms de comn: Se tienen uno o ms archivos y se necesita tener copias de los mismos, para tener otros nuevos con exactamente los mismos contenidos. En UNIX, para copiar unos archivos se usa el comando cp (copy) que tiene varios modos de uso, usos que se describen a continuacin. Uso de cp para hacer una copia sencilla de un archivo Para hacer una copia sencilla de un archivo simplemente se da a cp como argumento el nombre del archivo original a copiar y el nombre como quiere que se llame la copia nueva. Dependiendo de como se use la ruta del segundo argumento, puede hacerse la copia en algn otro lado. Ejemplos:
cp archivoOriginal archivoNuevo que contiene archivoOriginal) cp archivoOriginal /ruta/archivoOriginal est ubicada en otro directorio pero que lleva el mismo nombre) cp archivoOriginal /ruta/ cp archivoOriginal /ruta/nuevoNombre otro y est en otro directorio) cp /ruta/archivoOriginal . la copia tiene el mismo nombre que el original) (ahora existe un nuevo archivo que contiene exactamente lo (ahora hay una copia de un archivo del directorio actual que (lo mismo que en el ltimo ejemplo, pero se escribe menos) (ahora hay una copia del archivo original, pero el nombre es (ahora hay una copia del archivo original en el directorio actual,

Uso de cp para copiar varios archivos Para hacer copias de varios archivos en una sola operacin- se dan los nombres de cada uno, como argumentos, separados por espacios, y adems el nombre de un directorio destino, tambin separado por espacios de los otros argumentos. Note que lo ltimo debe ser un directorio, si no lo es, el comando termina, reportando un error: cp arch1 arch2
arch3 /dir/destino

Ejemplos:
e@abe:e/> ls -l total 88 -rw-r--r-1 e system 0 Aug 14 23:15 -rw-r--r-1 e system 17804 Aug 14 23:16 -rw-r--r-1 e system 0 Aug 16 17:22 drwxr-xr-x 2 e system 256 Aug 14 23:17 -rw-r--r-1 e system 29 Aug 14 23:15 -rw-r--r-1 e system 10181 Apr 10 16:02 -rw-r--r-1 e system 544 Apr 10 16:00 -rw-r--r-1 e system 291 Apr 10 16:00 drwxr-xr-x 3 e system 256 Aug 15 21:15 e@abe:e/> cp "MadRamon 1.png" smit.log LitteFile cp: LitteFile: The system call does not exist on this LitteFile MadRamon 1.png NuevoVacio.txt SubDir_2 fecha actual.txt smit.log smit.script smit.transaction subdir1 system.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

100

e@abe:e/> cp "MadRamon 1.png" smit.log LitteFile subdir1 e@abe:e/> ls subdir1 Antiguo_SubDir LitteFile MadRamon 1.png smit.log

Uso del comando cp para copiar directorios completos: cp -R El comando cp puede usarse tambin para copiar directorios completos, logrndose duplicados de la estructura completa de sus contenidos. Hay dos modos de uso: Si se usa dando como destino un nombre que no existe se crea una estructura copia del original. La copia lleva como nombre el segundo IMPORTANTE: Si al comando argumento dado. mv se le da Si se usa dando como destino un nombre de un directorio preexistente se crea una copia con la estructura completa, con el mismo nombre del original, pero como subdirectorio del nombrado como segundo argumento dentro del segundo-. Ejemplos:
e@abe:e/> cp e@abe:e/> ls total 88 -rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x drwxr-xr-x e@abe:e/> cp e@abe:e/> ls total 88 -rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x drwxr-xr-x e@abe:e/> -R subdir1 subdir2 -l 1 e 1 e 1 e 2 e 1 e 1 e 1 e 1 e 3 e 3 e -R subdir2 -l 1 1 1 3 1 1 1 1 3 3 e e e e e e e e e e system system system system system system system system system system SubDir_2 system system system system system system system system system system 0 17804 0 256 29 10181 544 291 256 256 Aug Aug Aug Aug Aug Apr Apr Apr Aug Aug 14 14 16 14 14 10 10 10 16 16 23:15 23:16 17:22 23:17 23:15 16:02 16:00 16:00 17:37 17:59 LitteFile MadRamon 1.png NuevoVacio.txt SubDir_2 fecha actual.txt smit.log smit.script smit.transaction subdir1 subdir2
como segundo nombre el de un archivo existente, si puede sobreescribe ta l ar consultar o adverti chivo sin r!

0 17804 0 256 29 10181 544 291 256 256

Aug Aug Aug Aug Aug Apr Apr Apr Aug Aug

14 14 16 16 14 10 10 10 16 16

23:15 23:16 17:22 18:00 23:15 16:02 16:00 16:00 17:37 17:59

LitteFile MadRamon 1.png NuevoVacio.txt SubDir_2 fecha actual.txt smit.log smit.script smit.transaction subdir1 subdir2

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

101

Mover o renombrar archivos: mv


Otras dos operaciones muy comunes en todos los ambientes son renombrar un tem, y mover de sitio un tem. Ambas operaciones son lo mismo en UNIX, y por ello ambas se hacen con el mismo comando, mv (move). El uso de mv es bsicamente el mismo de cp, pero siendo otro, ste no deja copia. Uso de mv para renombrar un archivo Para hacer una copia sencilla de un archivo simplemente se da a mv como argumento el nombre del archivo original a renombrar y el nombre como quiere que se llame definitivamente. Dependiendo de como se use la ruta del segundo argumento, puede moverse a algn otro lado. Ejemplos:
mv archivoOriginal archivoNuevo archivoOriginal, se llama archivoNuevo) mv archivoOriginal /ruta/archivoOriginal sitio, sigue teniendo el mismo nombre) mv archivoOriginal /ruta/ menos) mv archivoOriginal /ruta/nuevoNombre mismo nombre, ahora es nuevoNombre) (ahora existe el archivo, pero ya no se llama (se movi el archivo del directorio actual a un nuevo (lo mismo que en el ltimo ejemplo, pero se escribe (ahora el archivo est en otro sitio, y no tiene el

mv /ruta/archivoOriginal . (ahora se trae el archivo de donde estaba al directorio actual, sigue con el mismo nombre, archivoOriginal)

Uso de mv para mover varios archivos Para hacer movimiento de varios archivos en una sola operacin- se dan los nombres de cada uno, como argumentos, separados por espacios, y adems el nombre de un directorio destino, tambin separado por espacios de los otros argumentos. Note que lo ltimo debe ser un directorio, si no lo es, el comando termina, reportando un error: mv arch1 arch2
arch3 /dir/destino

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

102

IMPORTANTE: Si al co se le da como mando segundo nombre el de un archivo existente, si puede sobreescribe ta l archivo sin consultar o adverti r!
ln

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

103

Agregar nombres a archivos: ln


En UNIX hay una operacin que no es posible hacer con los archivos en la mayora de los otros sistemas: agregarle nombres a los archivos. La operacin es semejante a la de copiar archivos, pero en este caso lo que queda no es un nuevo archivo con los mismos contenidos, queda un nuevo nombre por el que se puede acceder a un archivo por eso parece una copia, pero el archivo es uno solo-. UNIX no maneja casos especiales de primer nombre o ltimo nombre, as que todos los nombres son equivalentes y ninguno es principal. Agregarle un nuevo nombre a un archivo individual Se usa el comando ln (link) para agregarle nombres (oficialmente en UNIX se llaman links), cuya sintaxis es muy parecida a la de cp y mv:
ln nombreOriginal nombreNuevo

Dependiendo de cmo se usen los argumentos, los dos nombres pueden estar en el mismo o en diferentes directorios, pero, los UNIX por lo general necesitan que ambos estn en el mismo contenedor fsico. Como ambos nombres son un mismo archivo y un archivo tiene un nico inodo, ambos nombres llevan al mismo inodo. Como el sistema operativo usa esta operacin para mantener la estructura de rboles para directorios, este comando no puede ponerle nombres adicionales a directorios. Ejemplo:
e@abe:e/> ls -li total 48 72 -rw-r--r-1 e system 0 Aug 14 23:15 LitteFile 180 -rw-r--r-1 e system 17804 Aug 14 23:16 MadRamon 1.png 179 -rw-r--r-1 e system 0 Aug 16 17:22 NuevoVacio.txt 12320 drwxr-xr-x 3 e system 256 Aug 16 18:00 SubDir_2 177 -rw-r--r-1 e system 29 Aug 14 23:15 fecha actual.txt 12288 drwxr-xr-x 3 e system 256 Aug 16 17:37 subdir1 12292 drwxr-xr-x 3 e system 256 Aug 16 17:59 subdir2 e@abe:e/> ln "fecha actual.txt" "dato viejo" e@abe:e/> ls -li total 56 72 -rw-r--r-1 e system 0 Aug 14 23:15 LitteFile 180 -rw-r--r-1 e system 17804 Aug 14 23:16 MadRamon 1.png 179 -rw-r--r-1 e system 0 Aug 16 17:22 NuevoVacio.txt 12320 drwxr-xr-x 3 e system 256 Aug 16 18:00 SubDir_2 177 -rw-r--r-2 e system 29 Aug 14 23:15 dato viejo 177 -rw-r--r-2 e system 29 Aug 14 23:15 fecha actual.txt 12288 drwxr-xr-x 3 e system 256 Aug 16 17:37 subdir1 12292 drwxr-xr-x 3 e system 256 Aug 16 17:59 subdir2

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

104

Con la opcin i del comando ls se logra que ste genere listados donde se incluye el nmero del inodo de cada item. Como se ve en el ejemplo, dato viejo y fechaactual.txt tienen el mismo inodo, por lo que trabajar uno es exactamente lo mismo que trabajar el otro. Si se intenta borrar un archivo que tiene varios nombres hay que borrar todos los nombres que tenga, ya que mientras al archivo le quede al menos un nombre se podr usar por se nombre que quede y no ser borrado. Cuando ya no tenga ni un nombre, y tampoco est abierto por ninguna aplicacin el sistema desconectar al archivo de su nodo y ya no podr ni accederse a l ni recuperarse.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

105

Agregar enlaces simblicos: ln s


Como no se pueden tener dos nombres al mismo archivo en diferente contenedor fsico de almacenamiento ni se pueden hacer enlaces tradicionales a directorios entonces en UNIX hay otro estilo de enlace que se puede usar en todos los casos. Este otro estilo de enlace se llama enlace simblico y es realmente un nuevo archivo, de tipo especial l que realmente apunta al nombre del archivo original. Como es otro archivo ocupa espacio aparte y tiene su propio inodo. Cuando se crea un enlace simblico a un archivo no se le aumenta al archivo original la cuenta de nombres que se almacena en el inodo. Cuando se borra un archivo enlace simblico tampoco se afecta el original, pero cuando se borra el archivo original el enlace simblico no sirve, porque sigue apuntando al nombre del archivo original que ya no existe. Por otro lado, usar un enlace simblico realmente hace que el sistema operativo redirija la operacin y los programas realmente usan el archivo original. Agregarle un enlace simblico a un archivo individual Se usa el comando ln con la opcin s para agregarle enlaces simblicos (oficialmente en UNIX se llaman symbolic links pero tradicionalmente se usa symlinks), cuya sintaxis es muy parecida a la de cp y mv:
ln s nombreOriginal nombreNuevo

Dependiendo de cmo se usen los argumentos, los dos nombres pueden estar en el mismo o en diferentes directorios, o en reas totalmente diferentes del sistema. Si el archivo original est en algn otro lado puede obviarse el segundo nombre, lo que hace un enlace simblico nuevo en el directorio actual, que cuando se use haga acceso al archivo original en algn otro lado:
ln s /ruta/nombreOriginal

Agregarle enlaces simblicos a mltiples archivos a la vez Si se quieren tener en un directorio mltiples enlaces simblicos de manera que cada uno apunte a algn archivo diferente simplemente se usa:
ln s /ruta1/archivo1 /ruta2/archivo2 /directorio/destino

Comando que un una sola operacin crea un enlace simblico llamado /directorio/ destino/archivo1 apuntando a /ruta1/archivo1, uno llamado /directorio/destino/ archivo2 apuntando a /ruta2/archivo2, y as sucesivamente. Ejemplos:
e@abe:e/> date Thu Aug 16 23:00:45 EST 2007 AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 106

e@abe:e/> date > actual.txt e@abe:e/> ls -l actual.txt -rw-r--r-1 e system 29 Aug 16 23:00 actual.txt e@abe:e/> cat actual.txt Thu Aug 16 23:00:53 EST 2007 e@abe:e/> ln -s actual.txt hoy.txt e@abe:e/> ls -l actual.txt hoy.txt -rw-r--r-1 e system 29 Aug 16 23:00 actual.txt lrwxrwxrwx 1 e system 10 Aug 16 23:01 hoy.txt -> actual.txt e@abe:e/> cat hoy.txt Thu Aug 16 23:00:53 EST 2007 e@abe:e/> date > hoy.txt Hay que record ar que un e@abe:e/> cat hoy.txt archivo realmen te se borra Thu Aug 16 23:02:33 EST 2007 cuando se queda sin nombres. e@abe:e/> cat actual.txt Thu Aug 16 23:02:33 EST 2007

Se nota cmo editar los contenidos de actual.txt o de hoy.txt resulta en lo mismo, los contenidos de actual.txt son los que cambian, pero se nota cmo no son el mismo archivo, es ms actual.txt mide 29 bytes, pero hoy.txt mide 10 bytes (el nombre actual.txt son 10 caracteres).

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

107

Remover archivos y nombres de archivos: rm


Como el espacio se va acabando pronto, es necesario un comando que borre lo que ya no se necesita para liberar el espacio para otras cosas. Es casi una ley: no importa de cunto espacio se disponga, pronto se acaba. En UNIX hay que tener mucho cuidado con lo que se borra, ya que si se trabaja en modo texto no hay proteccin: el archivo borrado es muy muy difcil de recuperar, no hay trashcan, y como funcionan los sistemas operativos no hacen muy fcil el desarrollo de utilidades estilo Undelete. El comando borrar o eliminar se llama rm (remove) y es muy sencillo (demasiado) de usar. Slo hay que darle como argumentos los nombres que se quieren borrar. Si se tienen suficientes permisos como para borrar los archivos el comando ni siquiera valida o confirma, simplemente borra. Ejemplos:
e@abe:e/> ls LitteFile SubDir_2 fecha actual.txt subdir2 MadRamon 1.png actual.txt hoy.txt NuevoVacio.txt dato viejo subdir1 e@abe:e/> rm fecha\ actual.txt hoy.txt e@abe:e/> rm SubDir_2 rm: 0653-603 Cannot remove directory SubDir_2. e@abe:e/> ls LitteFile NuevoVacio.txt actual.txt subdir1 MadRamon 1.png SubDir_2 dato viejo subdir2

Remocin de directorios Hay que notar que para borrar directorios se usa el comando rmdir, pero que ste slo borra directorios que estn vacos. Por eso el comando rm tiene una funcin adicional: la posibilidad de remover directorios con todo lo que contienen es decir que borra aunque no estn vacos-. Este es un comando muy peligroso, por favor fjese antes de enviar el comando: rm R item1 item2 Ejemplo:
e@abe:e/> ls subdir2 Antiguo_SubDir LitteFile MadRamon 1.png e@abe:e/> rm -R subdir2 e@abe:e/> ls subdir2 ls: 0653-341 The file subdir2 does not exist. smit.log

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

108

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

109

Determinar tipo de archivo: file


Como el nombre y los contenidos de un archivo en UNIX no tienen relacin directa, en UNIX hay disponible que un comando que revisa los contenidos y haciendo un anlisis intenta reportar qu clase de archivo es cada uno de los nombrados como argumentos. El comando se llama file, y es de muy sencillo uso. Ejemplos:
e@abe:e/> file LitteFile actual.txt LitteFile: empty actual.txt: ascii text e@abe:e/> file subdir1 subdir1: directory e@abe:e/> file /tmp /tmp: directory

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

110

A mediados de lo s por la poca en setentas que apareci vi- se usaba m ucho de texto avanza un editor do con una infinidad de com binaciones de teclas y casi c secuencia de cara u a l q u i e r cteres como co m an do s. Su no m br e es TECO.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

111

Edicin de Archivos de Texto: vi


Archivos de Texto
Desde el comienzo UNIX se plane para trabajar texto, grandes cantidades de texto, por ello, desde siempre ha habido muchas utilidades para el manejo de texto. De todas las utilidades para el manejo de texto la central es la herramienta de creacin de contenido y de edicin-: el editor de texto. Editores de Texto: vi En UNIX se cuenta con mltiples editores de texto, que varan de plataforma a plataforma, pero hay unos que estn estandarizados en los libros POSIX y en la especificacin UNIX oficial (la ltima siendo Single UNIX Specification v3 o UNIX 03), de stos el ms importante es vi. Este editor, llamado por el comando que lo invoca toma el nombre de un editor anterior llamado ex, que era una versin moderna de otro anterior con el cual mantiene la compatibilidad llamado ed-. En ex, usar el comando vi lleva al modo visual de edicin normalmente se trabaja a travs de comandos, parecidos a las actuales macros de los editores de ambiente grfico-. El modo visual de ex es exactamente el actual comando vi. Es ms hoy en da son el mismo programa (son dos links o nombres del mismo archivo), y si se invoca ex inicia en modo comandos, y si se invoca vi inicia en modo visual. Modos de vi
vi es un editor de texto modal, y qu es modal? que vi sea modal significa que las teclas

que se presionen tienen un efecto diferente del modo en que est trabajando vi en el momento. Cuando vi est en modo insercin de texto las letras y smbolos del teclado simplemente insertan los caracteres de las teclas en el archivo que se est editando; pero, cuando vi est en modo comando muchas letras y smbolos del teclado realizan funciones, funcionan como comandos. Esto puede verse raro, pero tiene un razonamiento directo: El teclado de la terminal donde se desarroll vi no tena muchas teclas, en especial no tena teclas de funcin, bsicamente la tecla shift y la tecla control. Si se usan las teclas bsicas para los comandos no hay que usar combinaciones especiales de teclas, por lo que las manos del usuario se estresan menos el principal origen del sndrome del tunel del Carpio-.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

112

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

113

Editar archivos existentes con vi


Editar archivos de texto ya existentes con vi es muy sencillo, simplemente se puede abrir uno con vi nombreArchivo o se pueden abrir varios simultneamente dndolos todos como argumentos como siempre, separados por espacios-:
vi archivo1 archivo2 archivo3

vi los abrir todos, en diferentes pantallas. Siendo un programa de terminal de texto no

hay manera de cambiar la apariencia de las pantallas. vi simplemente los abrir todos y mostrar en la primera pantalla el primero de los archivos. Como se observa, vi muestra en la ltima lnea informacin de estado: Nombre del archivo, entre comillas dobles Si el archivo no puede ser guardado muestra [Read El nmero de lneas de texto El nmero de caracteres Para cambiarnos de pantalla simplemente se usa el comando :n (s, dos puntos n).
only]

Para salir de vi, si nicamente se est editando un archivo se usa el comando :q (dos puntos q), pero si se est editando ms de un archivo se usa :q! (dos puntos q admiracin). Este ltimo comando funciona para todos los casos. Si se intenta salir con :q y hay varios archivos abiertos, vi reportar en la lnea de estado There are x more files to edit. En cambio, si se intenta cambiar al siguiente archivo
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 114

cuando ya est en el ltimo archivo (no hay siguiente) vi mostrar en la lnea de estado No more files to edit.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

115

Creacin de nuevos archivos de texto


Crear nuevos archivos de texto con vi es muy sencillo, se hace de la misma manera como se abren archivos existentes, simplemente se nombra o nombran en la lnea de comandos, y si vi nota que no existe cada uno- se prepara para crearlo, nuevo. Ahora vi realmente no crea el archivo si no en el momento que se guarde.
vi nombreNuevo

Como se observa, vi muestra una pantalla llena de smbolos ~, donde cada smbolo ~ representa una lnea no existente en el archivo. Tambin vi muestra informacin en la lnea de estado: Nombre del nuevo archivo a crear, entre comillas dobles El texto informativo [New
file]

Para salir del archivo o los archivos se usa el mismo comando que antes :q (dos puntos q) Ahora, como los archivos nuevos no existen realmente si no cuando se guarden en disco, hay que guardar, y esta operacin se realiza con el comando :w (dos puntos w) por archivo. Cuando vi guarda un archivo, reporta en la lnea de estado el nombre del archivo guardado, entre comillas dobles, el nmero de caracteres y el nmero de lneas en el archivo recin guardado. Ahora, si el usuario puede sobreescribir un archivo por ejemplo es el dueo del archivo- pero los permisos del mismo dicen que debera estar protegido, cuando se intente guardar vi reportar The file has read permission only, pero podr escribirse de todas maneras sobre el archivo si se usa el comando :w! (dos puntos w admiracin).

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

116

Muchas veces el usuario est trabajando un archivo y quiere terminar de trabajar, por ello necesita guardar y salir de vi. Estas dos operaciones pueden llevarse a cabo con: Comando :w y el comando :q Comando combinado :wq Comando :x Todos los tres comandos son sinnimos. Ahora, si el usuario ha hecho cambios en un archivo y desea salir, pero no desea mantener los cambios, es decir le interesa salir sin guardar vi no se lo permitir, reportando No write since the file was last change. Si el usuario realmente desea salir de vi sin guardar deber usar entonces el comando :q! (dos puntos q admiracin).
Como es posible sacar a vi del modo comando y que los comandos aqu mencionados no funcionen de ber recordar qu e pa ra en tr ar a m od o comando se pu ede presionar escape las ve ces necesarias (hasta que vi pite !)

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

117

Moverse dentro de un archivo


vi tiene numerosas maneras de moverse dentro de un archivo, dependiendo de lo que el

usuario necesite y del modo en el que vi est. Lo ms bsico es que si se tiene una terminal moderna o un programa cliente con una muy buena emulacin- se pueden usar las teclas flecha de movimiento de cursor . Tambin podrn usarse las tclas AvPgina y RetrPgina. Moverse de a lneas Ahora, cuando vi inicia normalmente est en modo comando, y en este modo funcionan tambin:
h, suprimir o control h para moverse un carcter a la izquierda. Equivalente a la

tecla .

l o espacio para moverse un carcter a la derecha. Equivalente a la tecla . k o control p para moverse una lnea arriba. Equivalente a la tecla . j, control j o control n para moverse una lnea abajo. Equivalente a la tecla . + para moverse a la siguiente lnea, ubicndose en el primer carcter visible (en

esa lnea). lnea).

- para moverse a la lnea anterior, ubicndose en el primer carcter visible (en esa

Moverse de a pginas o pantallas Cuando vi est en modo comando funcionan:


control f para avanzar una pantalla completa. Equivalente AvPgina. control b para retroceder una pantalla completa. Equivalente a RetrPgina. controld para avanzar media pantalla. controlu para retroceder media pantalla. controle para desplazar una lnea hacia arriba la pantalla. controly para desplazar una lnea hacia abajo la pantalla. shifth para llevar el cursor a la primera lnea de la pantalla. shiftm para llevar el cursor a la lnea en la mitad de la pantalla. shiftl para llevar el cursor a la ltima lnea en la pantalla.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

118

Moverse segn el contexto Segn el modo en que est trabajando vi las siguientes teclas varan en su funcionamiento, pero si el archivo que se trabaja es un archivo de texto sencillo, y se est en modo comando funcionan:
0 para moverse al inicio de la lnea actual. $ para moverse al final de la lnea actual. ) para moverse al inicio de la siguiente frase. ( para moverse al inicio de la anterior frase. } para moverse a justo antes del siguiente prrafo. { para moverse a justo antes del actual prrafo.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

119

Insercin de nuevos contenidos de texto (en vi)


Entrar nuevo texto en vi es muy fcil. Existen varias maneras, dependiendo de dnde se est y de dnde se quiere que aparezca el nuevo texto agregado. En modo comando funcionan:
i para insertar texto justo antes de la posicin del cursor. Agrega texto si se est al

final de una lnea.

a para agregar texto justo despus de la posicin del cursor. shift i para insertar texto al comienzo de la lnea sin importar dnde est el

cursor en la lnea. la lnea.

shift a para agregar texto al final de la lnea sin importar dnde est el cursor en o para agregar una lnea en blanco despus de la actual. shift o para agregar una lnea en blanco antes de la actual.

Todos estos comandos cambian el modo de vi, apenas se usen vi se cambia a modo insercin de texto y as permanecer. Puede cambiarse al modo comando usando la tecla escape.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

120

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

121

Comandos bsicos de edicin de texto (de vi)


vi tiene unos comandos sencillos para modificar texto, son necesarios en las operaciones del

da a da con texto. Funcionan cuando se est en modo comando:


x para borrar el carcter debajo del cursor. Borra el carcter a la izquierda del

cursor si se est al final de la lnea. se est al comienzo de la lnea. a continuacin.

X para borrar el carcter anterior al cursor. Borra el carcter debajo del cursor si r y un carcter para reemplazar el carcter debajo del cursor por el que se escriba R y texto para sobreescribir un texto original. Si se escriben n caracteres se

sobrescribirn los n caracteres a partir de la posicin del cursor. Se termina la sobreescritura presionando escape.
. para repetir la ltima operacin, sin importar cul operacin de edicin haya

sido.

u para deshacer el ltimo cambio o edicin hecha. U para deshacer todos los cambios hechos en la lnea actual. >> para indentar la lnea actual. << para de-indentar la lnea actual. ~ para cambiar el carcter debajo del cursor de minsculas a maysculas y

viceversa.

shift j para unir la lnea que sigue con la actual, para que no sea la lnea que

sigue sino una parte al final de la lnea actual.

Ninguno de estos comandos deja a vi en modo insercin, vi permanece en modo comando.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

122

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

123

Buscar y reemplazar textos contenidos (dentro de vi)


vi es muy poderoso, y aunque a primera vista se ve primitivo, tiene comandos de bsqueda

y movimiento muy poderosos. Mientras se est en modo comando funcionan:


control g para que vi muestre en la lnea de estado el nombre del archivo

(dentro de comillas dobles), si el archivo es de slo lectura (muestra [Read Only]), si el archivo ha recibido cambios (muestra [Modified]), muestra en qu lnea en el archivo se est, cuntas son y la posicin porcentualmente cunto es.
shift g para ir a la ltima lnea del archivo. nmero shift g para ir a la lnea con la posicin nmero. As para ir a la primera

lnea se dar 1G cuando se est en modo comando. Si el archivo no tiene la lnea nmero vi reporta con una alarma sonora.
/texto para ir a la prxima lnea que contenga el texto dado (busca hacia

adelante o abajo). Si el texto no se encuentra vi reporta The exists. arriba). Si el texto no se encuentra vi reporta The

pattern does not

?texto para ir a la previa lnea que contenga el texto dado (busca hacia atrs o pattern does not exists. n despus de una bsqueda para que vi vuelva a buscar en el mismo sentido. As

si se hizo una bsqueda con / vi volver a buscar hacia adelante.

N despus de una bsqueda para que vi vuelva a buscar pero ahora en el sentido

contrario. As si se hizo una bsqueda con ? vi volver a buscar, pero ahora hacia adelante.
/texto/+nmero para que vi busque un texto hacia adelante y se ubique nmero

lneas despus de la que contiene el texto. lneas antes de la que contiene el texto.

/texto/-nmero para que vi busque un texto hacia adelante y se ubique nmero ?texto?+nmero para que vi busque un texto hacia atrs y se ubique nmero

lneas despus de la que contiene el texto. lneas antes de la que contiene el texto.

?texto?-nmero para que vi busque un texto hacia atrs y se ubique nmero :%s/original/reemplazo/ para que vi reemplace en todas las lneas del archivo

el texto original por el reemplazo la primera vez que aparezca en cada lnea. Normalmente vi diferencia las maysculas de las minsculas. vi reporta cuntas lneas sufrieron modificaciones.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

124

:%s/original/reemplazo/g para que vi reemplace en todas las lneas del archivo

el texto original por el reemplazo todas las veces que aparezca en cada lnea. Normalmente vi diferencia las maysculas de las minsculas. vi reporta cuntas modificaciones hizo y en cuntas lneas.
Recuerde que las pr te cl a o co m bi esiones de na ci on es de control slo fu nc modo comando ionan en . Para llegar al modo comando se usa la tecla escape.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

125

Tableros de recortes: Cortar, copiar y pegar


vi como los editores de texto ms modernos tiene un tablero de recortes o

portapapeles (oficialmente se llama el undo buffer), pero a diferencia de la mayora de los editores modernos tiene tableros nombrados. Todos sirven para copiar, cortar y pegar. Mientras vi est en modo comando funcionan:
dw corta desde donde est el cursor hasta el final de la palabra actual. nmero dw corta las nmero palabras a partir de las palabra actual. d$ corta desde donde est el cursor hasta el final de la lnea actual. d0 corta desde donde est el cursor hasta el inicio de la lnea actual. dd corta la lnea actual. nmero dd corta las nmero lneas a partir de la lnea actual. d) corta desde donde est el cursor hasta el final de la frase actual. d} corta desde donde est el cursor hasta el final del prrafo actual yw copia desde donde est el cursor hasta el final de la palabra actual. nmero yw copia las nmero palabras a partir de la palabra actual. y$ copia desde donde est el cursor hasta el final de la lnea actual. y0 copia desde donde est el cursor hasta el inicio de la lnea actual. yy copia la lnea actual. nmero yy copia las nmero lneas a partir de la lnea actual. y) copia desde donde est el cursor hasta el final de la frase actual. y} copia desde donde est el cursor hasta el final del prrafo actual. p pega los contenidos del tablero de recortes justo despus de donde est el

cursor. Si son lneas pega justo despus de la lnea actual. cursor. Si son lneas pega justo antes de la lnea actual.

P pega los contenidos del tablero de recortes justo antes de donde est el

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

126

Recuerde que las pr te cl a o co m bi esiones de na ci on es de control slo fu nc modo comando ionan en . Para llegar al modo comando se usa la tecla escape.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

127

Editar y trabajar con ms de un archivo de texto


Aparte de poder dar a vi ms de un archivo de texto en la lnea de comandos original como ya se ha visto, desde dentro de una sesin se pueden trabajar varios archivos an si no se cargaron originalmente con la invocacin. Hay varias invocaciones que podrn interesar. Estando en modo comando funcionan: graba el archivo que se est editando en la pantalla, con el nombre que ya tiene. Si el archivo no ha sido modificado o no tiene permisos de escritura no lo intenta guardar.
:w :w! graba el archivo que se est editando en la pantalla, con el nombre que ya

tiene, aunque no haya sido modificado o el archivo no tiene permisos de escritura. Si el sistema operativo no permite las modificaciones obviamente no se podr grabar el archivo.
:w nuevoNombre graba el archivo que se est editando con un nuevo nombre

(bsicamente la funcin Guardar como que se encuentra disponible en los editores modernos)
:w! nuevoNombre graba el archivo que se est editando con un nuevo nombre,

aunque no se hayan hecho modificaciones o no tenga permisos de escritura.


:e otroArchivo abre para edicin el archivo mencionado en el comando.

:e! re-abre para edicin el archivo actual, descartando todos los cambios hechos

que no hayan sido guardados

:e+ otroArchivo abre para edicin el archivo mencionado, y automticamente se

ubica al final del mismo (se abre el archivo para agregar contenido).

:e+nmero otroArchivo abre para edicin el archivo mencionado, y automticamente se ubica en la lnea nmero especificada. Si otroArchivo puede abirse pero no tiene tantas lneas como para ubicarse en la lnea especificada lo abre pero reporta Not that many lines exist in the file.
:e# vuelve a abrir el otro archivo, el ltimo que se estaba editando. :r otroArchivo importa otro archivo en el que se est editando, es decir lee las

lneas del otroArchivo y las inserta justo despus de la lnea actual en el archivo que se est editando.
:r !unComando ejecuta unComando, y las lneas de texto producidas por el

comando las inserta justo despus de la lnea actual en el archivo que se est editando.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

128

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

129

Personalizacin del editor de texto vi


El editor de texto vi tiene una serie de opciones que gobiernan cmo funciona. Estas opciones gobiernan cmo reacciona a los comandos, como muestra contenido en la pantalla y cmo se manipulan las lneas de texto. Para ver las opciones actualmente en efecto en vi se usa el comando :set muestra a continuacin:
all como se

Como puede apreciarse, hay muchas opciones, pero no todas son de uso comn. Entre las ms tiles estn:
autoindent (ai)

opcin que activa la indentacin automtica de las nuevas lneas de texto, para alinearlas con las inmediatamente anteriores. Para desactivar la funcin se usa noautoindent o noai. opcin que activa el grabado automtico de un archivo antes de cambiarse al siguiente en una sesin. Para desactivar la funcin se usa noautowrite o noaw. opcin que activa la proteccin de los archivos para que no se puedan insertar caracteres de control en el mismo. Para desactivar la funcin se usa nobf. opcin que hace que el editor ignore la diferencia entre maysculas y minsculas en las bsquedas y los reemplazos. Para desactivar la funcin se usa noignorecase o noic.

autowrite (aw)

beautifying text (bf)

ignorecase (ic)

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

130

list

opcin que hace que el editor muestre los caracteres tabulador dentro del archivo como ^I y los finales de lnea como $. Para desactivar la funcin se usa nolist. opcin que hace que el editor muestre el nmero de cada lnea en la primera columna de la pantalla. Para desactivar la funcin se usa nonumber o nonu. opcin con la que se le define a vi cuntos caracteres de ancho ocupa un tabulador inicial o la indentacin automtica. El valor predeterminado es sw=8. opcin con la que se activa la muestra automtica del carcter pareja de (, ), {, }. La funcin se desactiva con noshowmatch o nosm. opcin con la que se activa el aviso en la ltima lnea cuando vi est en modo insercin de texto. La funcin se desactiva con noshowmode o nosmd. opcin con la que se le define a vi cuntos caracteres espacio debe usar para presentar en un archivo cada carcter tabulador. El valor predeterminado es ts=8. opcin con la que se activa la definicin del ancho flexible de pgina. Con esta opcin la presentacin de una lnea mayor que el margen fluye a la siguiente lnea de pantalla. El valor predeterminado es wm=0 con lo que el texto no fluye. opcin con la que se activa que las bsquedas reinicien en la primera lnea del archivo cuando pasen de la ltima. La opcin se desactiva con nowrapscan o nows. opcin con la que se configura cmo corta y fluye las lneas vi cuando una lnea sea ms larga que el margen especificado con wm=. Tiene cuatro posibles valores general, word, rigid, y flexible.

number (un)

shiftwidth (sw=)

showmatch (sm) showmode (smd)

tabstop (ts=)

wrapmargin (wm=)

wrapscan (ws)

wraptype (wt=)

A todas estas opciones pueden drsele valor en cualquier momento, usando :setopcin o tal vez :set opcin=valor. Cuando as se usa, la opcin slo aplica para la sesin actual de edicin, es decir, que si se sale del editor vuelven a aplicar los valores predeterminados. Si se desea que vi tenga una cierta configuracin y que dicha configuracin aplique para todas las invocaciones del editor hay que guardarlas en un archivo de configuracin. vi nunca guarda las opciones automticamente, el archivo debe ser creado. Cuando vi se ejecuta, a menos que se le de la opcin para que no lo haga, busca el archivo / etc/.exrc, si lo encuentra carga las opciones de configuracin que all encuentre; luego busca el archivo .exrc en el directorio personal o inicial del usuario, si lo encuentra carga las
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 131

opciones de configuracin que all encuentre; y por ltimo busca un archivo .exrc en el directorio actual de invocacin del comando, y si lo encuentra carga las opciones que all encuentre. Uso prctico de los archivos de opciones de vi Ahora, cmo se usa en la prctica esto? Como /etc es un directorio nico en el sistema, y todos los usuarios tienen derecho a buscar cosas all, si hay un archivo .exrc ste aplicar para todos los usuarios del sistema, as que en este archivo debern configurarse opciones de vi que aplique para todos los usuarios usarios que usen vi, claro est-. Como el directorio personal es como el nombre lo indica, propio de cada usuario, si hay un archivo .exrc en el directorio personal, las opciones que all se encuentren aplicarn para todas las invocaciones de vi de usuario, pero slo para el usuario. Si se necesitan trabajar unos archivos de texto que estn en algn otro directorio y la configuracin tpica de vi no aplica, puede crearse un archivo .exrc con las opciones, y stas slo aplicarn mientras se est trabajando el directorio. Formato de un archivo de opciones de configuracin de vi Un archivo de opciones de vi es muy sencillo, es simplemente un archivo de texto que tiene lneas con las opciones como se escriben en el modo comando de vi, pero sin el carcter : (dos puntos) como prefijo. vi ignora las lneas en blanco y las lneas que comienzan con el carcter (comillas dobles). Un archivo vlido de opciones de vi podra ser:
no diferenciar maysculas de minsculas set ignorecase mostrar nmeros de lnea set number avisar cuando est en modo insercin showmode

Recuerde que como el archivo debe llamarse .exrc normalmente no aparecer en los listados (el nombre comienza con punto).

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

132

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

133

El ambiente de trabajo: procesos y variables


El ambiente de trabajo
env env env env

41329= telnetd

33571=ksh

hijode

hijode

3128=cron
hijode

env
hijode

1=init

5739=inetd

env
hijode

hijode hijode

env

env

132231=ksh

132231=ksh 51301=dbmgr

Los sistemas operativos UNIX tienen todos una arquitectura de ejecucin donde cada instancia de comando o programa que se ejecuta en el sistema obtiene una vista de un universo virtual, donde l es el nico programa en ejecucin. Ahora, en la realidad todos los UNIX son sistemas multitarea y multiusuario, y por ello, dentro de esa arquitectura hay, por cada programa en ejecucin que oficialmente se llama proceso- un espacio que se llama el ambiente. El mencionado ambiente es un rea de memoria que existe dentro del universo virtual de cada proceso. En dicho ambiente escribe el cargador de procesos unos valores que definen cmo reacciona el programa al universo virtual y cmo reacciona el sistema operativo ante lo que el proceso le solicita. Lo que hay en el ambiente son valores guardados a manera de variables, aunque no todos los valores que all se encuentra se consideran variables en s. Como cada proceso ve al sistema como todo para s, ya que lo que tiene es una vista que le arma un universo virtual propio, no hay manera de hacer que un proceso directamente altere los valores que hay en el ambiente de otro proceso. Algunos de los valores que estn en el ambiente oficialmente llamado environment- de un proceso son fciles de revisar por el proceso, ya que estn en casillas nombradas con nombre y con valores que se consideran texto. Estos pares se llaman variables de
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 134

ambiente y permiten que de cierta manera un proceso le pase informacin a otro proceso mientras sea un nuevo proceso hijo que el proceso original inicie. Adicionalmente adicionales a las variables de ambiente- en el ambiente de cada proceso hay: Un nmero nico nico dentro del sistema- que identifica al proceso. Oficialmente se llama identificador de proceso o process ID (PID). Este es un nmero entero positivo siempre. El nmero identificador de proceso del otro proceso que orden el inicio o arm la ejecucin del proceso. Oficialmente se llama identificador de proceso padre o parent process ID (PPID). El nmero identificador del usuario que orden el inicio o invoc el proceso, as sea indirectamente. Oficialmente se llama identificador del usuario real o real user ID (RUID). El nmero identificador del usuario con el que se le maneja toda la seguridad a las operaciones que realice el proceso; y, casi siempre es el mismo identificador del usuario real. Oficialmente se llama identificador del usuario efectivo o effective user ID (EUID). Una lista de nmeros identificadores de grupos a los que el usuario que orden la invocacin del proceso pertenece. Oficialmente se llama identificadores de grupos reales o real group IDs (RGIDs). Una lista de nmero identificadores de grupos con los que se le maneja la seguridad a las operaciones que realiza el proceso; y casi siempre es la misma lista de grupos que est en RGIDs. El momento exacto en el tiempo en que se inici el proceso. Oficialmente se llama tiempo de inicio o starting time (STIME). Cunto lleva ejecutando el proceso en total, teniendo en cuenta que se ejecuta por perodos muy cortos porque casi siempre tiene que compartir las CPUs del sistema con muchos otros procesos. Oficialmente se llama tiempo de ejecucin o execution time (TIME). Uno o ms nmeros para el manejo de prioridades. Comnmente son dos nmeros, una base y un variable. El directorio actual donde est trabajando el proceso. Comnmente es el directorio desde donde se invoc el proceso. Oficialmente se llama directorio actual de trabajo o current working directory (CWD).

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

135

Procesos
Como cada proceso es una instancia de un programa o comando en ejecucin, cada proceso en el sistema necesita de algo de CPU (por lo menos uno turnos cuando no consume mucho), cierta cantidad de RAM, y hace ciertas operaciones de I/O. Todo proceso en el sistema afecta en algo, entonces puede al usuario interesarle: Sus propios procesos cunto afectan a los dems. Cun afectado se ven sus propios procesos afectados por lo que hacen los procesos de los dems. Ntese que cmo afectan a los dems y cmo son afectados por los dems es el resultado indirecto de estar en el mismo sistema, no es algo directo porque los UNIX son un ambiente protegido de ejecucin, que no permite que un proceso pueda manipular directamente el ambiente donde otro proceso existe y se ejecuta. Iniciar y detener procesos Como un proceso es una instancia de programa y comando en ejecucin, iniciar un proceso es simplemente invocar un comando o iniciar un programa. Este slo hecho inicia al menos un proceso algunos programas cuando inician ejecutan otros programas accesorios que necesitan para funcionar-. Detener oficialmente un proceso en UNIX es decirle a un programa que termine de la manera que al programa se le dice. Por ejemplo: la mayora de lo que uno llama comando es un programa que realiza una tarea sencilla, y cuando el programa termina dicha tarea el slo programa termina, sin necesidad de solicitarle. Como un proceso es un programa en ejecucin, si un programa termina, el proceso que lo representa desaparece de la lista de procesos. Por otro lado, programas como vi, que trabaja interactivamente necesita que se le diga termine usando algn tipo de comando interno o men; en el caso de vi, se le dice usando el comando escape :q! o escape :x!

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

136

El comando ps es uno de los pocos importan tes que no estn tot a estandarizados en l m e n t e UNIX. Hay dos va todos los ria la informacin qu ciones en e muestra ps y en lo que sig opciones de ps. nifican las Un que aplica para a variante, AI Solaris deriva del X y para UNIX original de AT&T y otra variante aplica para Mac OS X deriva de los UNIX BSD.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

137

Listar procesos
Listado bsico de procesos: ps Para listar procesos se usa un comando muy sencillo llamado ps (process status). Este es un comando increblemente variado, donde casi todas las letras del alfabeto son opcin. Afortunadamente la ejecucin ms sencilla, sin opciones, es usable:
[0 e@Moe ~] ps PID TT STAT 8009 p1 S TIME COMMAND 0:00.03 -bash

La ejecucin del comando ps sin opciones slo obtiene un listado de los procesos del usuario que lo invoca, en la ventana de sesin actual y sin muchos detalles. Muestra, a saber: Una lnea con ttulos de columnas (PID, TT, STAT, TIME, COMMAND) Para cada proceso una lnea o rengln de texto. El nmero identificador nico de cada proceso debajo del ttulo PID. El nombre corto de la ventana de sesin debajo del ttulo TTY . Unas letras que describen el estado del proceso que la lnea representa. Un tiempo en minutos:segundos.fraccin, que acumula todo el tiempo que el proceso a usado dentro de la(s) CPU(s) del sistema bajo el ttulo TIME. El nombre del proceso, derivado del nombre del comando. Note que como cada proceso tiene acceso a su ambiente, un proceso puede cambiar el ttulo que aqu se muestra, bajo el ttulo de columna COMMAND. Listado de todos los procesos: ps e Cuando se necesite listar la informacin de todos los procesos del sistema exceptuando los miniprocesos internos del ncleo o kernel- se puede usar la opcin e del comando ps. Esta opcin hace que ps muestra las columnas seleccionadas segn el caso (si no se dan ms opciones el identificador de proceso o PID, la terminal de control o TTY, el tiempo acumulado en ejecucin de CPU o TIME, y el nombre del comando. Si al comando ps e se le agregan otras opciones, se mostrar lo que las otras opciones seleccionen, pero para todos los procesos. Listado largo (tcnico) de los procesos: ps l Si se necesita informacin detallada acerca de los procesos, puede usarse tal vez la opcin l del comando ps que presenta unas columnas con detalles ms tcnicos acerca de los procesos seleccionados (slo de la sesin actual sin ms opciones, procesos de un usuario con u o todos los procesos con e). El comando muestra, varias columnas, a saber:
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 138

UID

Esta columna muestra el usuario que inici o bajo cuya identidad est corriendo cada proceso. Esta columna muestra el identificador nico de cada proceso mostrado. Esta columna muestra el proceso padre desde donde se inici el proceso.

PID PPID C

Esta columna muestra el porcentaje aproximado actual de turnos de CPU que est usando cada proceso. Esta columna muestra cundo se inici cada proceso. Si el proceso inici hoy muestra la hora (en formato HH:MM:SS, la horas de 00 a 23), y si se inici antes, muestra la fecha. Esta columna muestra la terminal de control del proceso. Cuando el proceso no est relacionado con una terminal muestra ?. Esta columna muestra el tiempo acumulado de CPU, con el total de consumo de CPU sumando los turnos de ejecucin desde que el proceso inici. Esta columna muestra el nombre de cada proceso como est registrado en la memoria. Muchas veces muestra el nombre completo del archivo ejecutable del procesos, pero como esta informacin est en el ambiente de cada proceso y los mismos pueden escribir en su propio ambiente puede mostrar otra informacin o informacin incompleta.

STIME

TTY

TIME

CMD

Listado completo (full) de informacin de los procesos: ps f Si se necesita informacin detallada acerca de los procesos, puede usarse tal vez la opcin f del comando ps que presenta unas columnas con detalles ms tcnicos acerca de los procesos seleccionados (slo de la sesin actual sin ms opciones, procesos de un usuario con u o todos los procesos con e). El comando muestra, varias columnas, a saber:
UID

Esta columna muestra el nombre del usuario que inici -o bajo el que se inici- el cada proceso. Como siempre, esta columna muestra el nmero identificador nico del proceso. Esta columna muestra el nmero identificador del proceso padre de cada uno de los procesos. Esta columna muestra el consumo promedio porcentual -redondeado a entero- de cada uno de los procesos. Esta columna muestra cundo se inici cada uno de los procesos. Si el proceso inici hoy mismo muestra la hora, pero si no, muestra la fecha nicamente.
139

PID

PPID

STIME

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

TTY

Esta columna muestra la terminal de control del proceso. Cuando el proceso no est relacionado con una terminal muestra ? Esta columna muestra muestra el tiempo acumulado de ejecucin, contando la suma de los turnos de procesador que ha consumido cada proceso desde el momento del inicio. Esta columna muestra, si es posible, el comando que constituye el proceso, con todo y la sintaxis de inicio.

TIME

Ejemplo:

CMD

0 root@abe:/> ps -f UID PID PPID root 135342 249876 root 249876 172188

C STIME 1 00:30:24 3 00:30:22

TTY pts/0 pts/0

TIME CMD 0:00 ps -f 0:00 -bash

Variantes BSD - Listado extendido de procesos: ps U nombreUsuario Si se quiere o se necesita la informacin acerca de todos los procesos en un sistema iniciados por o relacionados con un usuario puede usarse el comando psUnombreUsuario. Este comando es muy comn en ambientes de servidor dedicado donde un sistema bsicamente fue adquirido para ejecutar una aplicacin y lo dems es accesorio. Esta versin del comando muestra, a saber: El identificador nico de cada proceso, bajo la columna PID, como siempre. El nombre de la terminal de control o de interaccin con el proceso, bajo el ttulo de columna TT. El estado del proceso bajo la columna STAT. De los estados se hablar ms adelante. El tiempo acumulado de ejecucin, en minutos:segundos.fraccin. El nombre largo del programa/proceso, lo ms completo posible. Ejemplo:
[0 e@moe:~] ps -U e PID TT STAT TIME COMMAND 115 ?? Ss 0:29.51 /System/Library/Frameworks/ ApplicationServices.framew 122 ?? Ss 0:23.59 /System/Library/CoreServices/loginwindow.app/ Contents 133 ?? Ss 0:00.58 /System/Library/CoreServices/pbs 138 ?? S 0:13.01 /System/Library/CoreServices/Dock.app/Contents/ MacOS/ 139 ?? S 0:00.37 aped 141 ?? S 6:54.35 /System/Library/CoreServices/SystemUIServer.app/ Conte

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

140

142 ?? S 1:07.88 MacO 147 ?? S 0:14.01 Reso 148 ?? S 0:01.23 iCalAlarmSc 149 ?? S 1:48.19 UniversalAccessPref.p

/System/Library/CoreServices/Finder.app/Contents/ /Library/PreferencePanes/Growl.prefPane/Contents/ /Applications/iCal.app/Contents/Resources/ /System/Library/PreferencePanes/

Puede obtenerse un listado donde se muestre completa la ltima columna el nombre completo del programa/proceso- si se agrega la opcin w al comando ps:
[0 e@moe:~] ps -wU e PID TT STAT TIME COMMAND 115 ?? Ss 0:29.86 /System/Library/Frameworks/ ApplicationServices.framework/Frameworks/ATS.framework/Support/ATSServer 122 ?? Ss 0:23.67 /System/Library/CoreServices/loginwindow.app/ Contents/MacOS/loginwindow console 133 ?? Ss 0:00.58 /System/Library/CoreServices/pbs 138 ?? S 0:13.05 /System/Library/CoreServices/Dock.app/Contents/ MacOS/Dock -psn_0_393217 139 ?? S 0:00.37 aped 141 ?? S 7:02.79 /System/Library/CoreServices/SystemUIServer.app/ Contents/MacOS/SystemUIServer -psn_0_524289

Listado extra extendido de procesos, en BSD: ps aux Si se quiere o necesita la informacin de todos los procesos del sistema, puede usarse entre otros- el comando ps con opciones: La opcin a solicita que el comando ps muestre todos los procesos de todos los usuarios incluidos los propios- independiente de la ventana de sesin desde donde se controlan. La opcin u solicita que el comando ps muestre informacin adicional acerca de los procesos. Incluye informacin: PID, usuario, porcentaje promedio de CPU consumido, porcentaje promedio de RAM consumida, tamao virtual del proceso, tamao residente del proceso, terminal de control, estado, tiempo de inicio, tiempo acumulado de CPU, y nombre del comando. La opcin x solicita al comando ps que muestre informacin de los procesos que no tienen una terminal de control. Ejemplo:
[0 e@Moe ~] ps -aux USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND e 7987 2.5 -5.2 391148 108204 ?? S 7:01AM 4:24.98 /Applications/ Microsoft Office 2004/Microsoft Word -psn_0_39452673 e 3901 1.1 -0.4 246928 8292 ?? S Sat08PM 5:36.87 /Applications/ Utilities/Terminal.app/Contents/MacOS/Terminal -psn_0_3932161

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

141

windowse 3830 1.0 -4.4 835992 91932 ?? Ss Sat08PM 55:17.99 /System/Library/ Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Resources/ WindowServer -daemon e 3845 0.4 -0.6 262328 13264 ?? S Sat08PM 15:00.64 /System/Library/ CoreServices/SystemUIServer.app/Contents/MacOS/SystemUIServer -psn_0_655361 e 4010 0.3 -1.8 308184 36992 ?? S Sat09PM 38:04.42 /Applications/ iTunes.app/Contents/MacOS/iTunes -psn_0_7864321 e 8009 0.1 -0.0 27892 948 p1 S 7:17AM 0:00.14 -bash e 3890 0.1 -11.5 602380 240140 ?? S Sat08PM 31:15.49 /Applications/ Safari.app/ Contents/MacOS/Safari -psn_0_3145729 root 40 0.1 -0.1 30248 1912 ?? Ss Sat10AM 3:44.29 /usr/sbin/configd root 41 0.0 -0.1 33144 1836 ?? Ss Sat10AM 0:06.13 /usr/sbin/ coreaudiod root 42 0.0 -0.1 27780 1132 ?? Ss Sat10AM 0:05.27 /usr/sbin/ diskarbitrationd root 44 0.0 -0.0 28320 508 ?? Ss Sat10AM 0:00.17 /usr/sbin/memberd -x root 45 0.0 -0.0 27864 392 ?? Ss Sat10AM 0:01.73 /usr/sbin/notifyd root 46 0.0 -0.1 29204 1660 ?? Ss Sat10AM 0:01.72 /usr/sbin/ securityd root 48 0.0 -0.0 27672 852 ?? Ss Sat10AM 0:12.89 /usr/sbin/ distnoted root 49 0.0 -0.1 31456 2124 ?? Ss Sat10AM 0:05.36 /usr/sbin/ DirectoryService root 52 0.0 -0.0 27248 172 ?? Ss Sat10AM 3:52.75 /usr/sbin/update root 63 0.0 -0.1 38280 2368 ?? S Sat10AM 0:08.28 /usr/sbin/blued root 64 0.0 -1.2 71476 25204 ?? Ss Sat10AM 1:29.30 /System/Library/ CoreServices/coreservicesd e 71 0.0 -0.6 98476 11580 ?? Ss Sat10AM 1:34.34 /System/Library/ Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Support/ATSServer root 82 0.0 -0.0 27768 104 ?? Ss Sat10AM 0:00.01 /usr/libexec/ crashreporterd root 114 0.0 -0.3 47288 5740 ?? Ss Sat10AM 1:49.11 /System/Library/ Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mds root 132 0.0 -0.2 30600 3520 ?? Ss Sat10AM 0:10.09 /usr/sbin/cupsd L root 150 0.0 -0.0 27508 260 ?? Ss Sat10AM 0:10.92 ntpd -f /var/run/ ntp.drift -p root 164 0.0 -0.0 29308 60 ?? Ss Sat10AM 0:00.00 nfsiod -n 4

Como se puede observar la lista puede llegar a ser muy grande habindose extrado la informacin de una estacin de trabajo bsicamente con un nico usuario-. Acerca de las columnas: %CPU La columna %CPU del comando ps -aux muestra un promedio porcentual de lo consumido en turnos de CPU por cada proceso desde el momento en que se inici. Como cada proceso inicia y consume CPU- desde un momento del tiempo diferente, los porcentajes no se refieren a los mismos momentos del tiempo y por ello las sumatorias o cualquier otro clculo no tienen que sumar un valor especfico. Adicionalmente, si un proceso lleva das de iniciado y casi nunca ha consumido pero ahora ltimo consume bastante el promedio no lo indicar. As que esta columna no es un indicador definitivo de cules procesos afectan ahora ms en el sistema. Adicionalmente, en algunos UNIX la cantidad de CPU en un sistema es un
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 142

valor lgico, virtual o fsicamente cambiable, y este comando no siendo consciente de estono tiene en cuenta estos factores de cambio, por lo que la informacin mostrada es slo un indicador gua, no un valor realmente exacto. Acerca de las columnas: %MEM La columna %MEM del comando ps aux muestra un promedio porcentual de lo consumido en pginas de memoria por cada proceso desde el momento en que se inici. Igual que en el punto anterior, como cada proceso inicia y ocupa memoria- desde un momento diferente del tiempo, los porcentajes no se refieren a los mismos momentos del tiempo y por ello las sumatorias o cualquier otro clculo no tienen que sumar un valor especfico. Adicionalmente, si un proceso lleva das de iniciado y casi nunca ha consumido pero ahora ltimo consume bastante el promedio no lo indicar. As que esta columna no es un indicador definitivo de cules procesos afectan ahora ms en el sistema. Adicionalmente, en algunos UNIX la cantidad de RAM en un sistema es un valor lgico, virtual o fsicamente cambiable, y este comando no siendo consciente de esto- no tiene en cuenta estos factores de cambio, por lo que la informacin mostrada es slo un indicador gua, no un valor realmente exacto. Acerca de las columnas: STATE La columna STAT o STATE del comando ps aux o ps U o ps w muestra dos caracteres que resumen el estado actual del proceso actual cuando se ejecut el comando ps-. Bsicamente muestra:
I

para los comandos inactivos (idle). Estos procesos llevan durmiendo, sin hacer nada ms de veinte (20) segundos. es el indicador para un proceso en ejecucin, no necesariamente en CPU cuando se ejecut el comando ps. La letra indica runnable. es el indicador para los procesos durmientes (sleeping). Este carcter se usa para los procesos que llevan durmiendo mximo unos veinte (20) segundos. es el indicador para los procesos forzosamente detenidos (stopped). Estos procesos estn en el mencionado estado debido a una seal externa a ellos. Estos procesos no recontinuarn a menos que externamente se les seale. es el indicador para los procesos que estn en una espera no interrumpible. Estos procesos casi siempre estn a espera de una respuesta de I/ O o de hardware y no pueden ser detenidos en medio de la operacin. es el indicador para los residuos de procesos terminados que no han sido recolectados por los procesos padre. El carcter resume al estado zombie.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

143

Procesos de fondo
Los UNIX son sistemas multitarea y multiusuario, por ello, aunque no lo parezca al usuario desprevenido, pueden an desde una nica ventada de terminal o de sesin, iniciarse mltiples procesos, aunque normalmente no visibles simultneamente como se puede en un ambiente grfico multi-ventanas. Ejecucin de procesos de fondo (en background) La manera ms fcil de iniciar procesos que se ejecuten mientras se trabaja con otras cosas en la lnea de comandos es usando el smbolo & (and) al final de un comando. Ejemplo: Si se necesita probar la conectividad con ping- mientras se hace otra cosa en la lnea de comandos se puede intentar:
[0 e@Moe ~] ping -q localhost & [1] 1106 PING localhost (127.0.0.1): 56 data bytes [127 e@Moe ~] telnet localhost 22 Trying ::1... Connected to localhost. Escape character is '^]'. SSH-1.99-OpenSSH_4.5 ntese lo que reporta el & esta es salida del comando
La mencionada aqu no es la nica manera de hacer manejo de sesiones y de procesos m ul tit ar ea en U N IX . O tr a manera es el uso del comando screen.

Mientras todo sigue, el comando terminado en & se ejecuta sin acceder a la terminal (ni teclado ni control de pantalla). Ntese que los sistemas UNIX pondrn a un proceso de fondo en pausa automticamente si y cuando intente controlar la terminal de sesin (por ejemplo especificando posicin, colores o atributos a un aviso de texto) o si intenta leer de la terminal (el teclado se mantiene ocupado con lo que el usuario est trabajando interactivamente). Listar procesos de fondo Para listar los procesos de fondo asociados con trabajos iniciados desde ventana de sesin actual se usa el comando jobs. Es muy sencillo:
[0 e@Moe ~] ping -q localhost & [1] 1158 [PING localhost (127.0.0.1): 56 data bytes esta es salida del comando [0 e@Moe ~] jobs [1]- Running ping -q localhost & [2]+ Stopped vi [0 e@Moe ~]

Como se observa, de manera predeterminada muestra tres (3) columnas: La primera columna muestra el nmero del trabajo (entre smbolos []). Esta columna tiene anexa adems un ms (+) o un menos (-). El smbolo se usa para
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 144

indicar cules trabajos son usables para el cambio rpido con los comandos fg, bg y kill que se mencionarn ms adelante. La segunda columna muestra el estado del proceso que es representado por la tarea (job). El estado Running aplica para jobs cuyo proceso tiene estado R como se ha mencionado en la descripcin del comando ps. El estado Stopped aplica para jobs cuyo proceso tiene estado T en la descripcin del comando ps. La tercera columna describe el comando ejecutado que constituye el trabajo. Aunque no se usa mucho, si se tienen muchos trabajos en una ventana de sesin, es til conocer que con jobs %nmero puede listarse slo un trabajo de fondo, y que con jobs %texto pueden listarse todos los trabajos de fondo cuyo comando comienza con el texto especificado. Manejo de las tareas de fondo con fg y con bg La idea principal de tener tareas de fondo es la posibilidad de hacer provecho de la multitarea de UNIX aunque se tenga una nica terminal de sesin de modo texto. Cuando se tienen trabajos multitarea que aparecen en los listados del comando jobs se puede: Llevar el intrprete del shell al fondo, y traer una de las tareas de fondo a sesin interactiva. El comando fg o fg %+ trae la ltima tarea, que es la que normalmente aparece con un smbolo de + despus del nmero de tarea en los listados de jobs. Si el proceso est detenido (Stopped) adems de traerlo a la sesin interactiva el proceso es recontinuado. El comando fg %- trae la penltima tarea. El comando fg %nmero trae la tarea listada con dicho nmero en jobs. Hacer que una tarea que aparece con estado Stopped reinicie si se puede- pero mientras contina trabajando en el fondo con el comando bg. El comando bg o bg %+ hace continuar la tarea que se lista con el smbolo + junto a su nmero de tarea en el comando jobs. Puede hacerse continuar la penltima tarea con bg %o puede seleccionarse cualquiera con bg %nmero tambin. Seales a procesos: combinaciones de tecla y el comando kill Como se dise la arquitectura de proteccin de procesos de los sistemas UNIX. Un proceso cualquiera no puede intervenir fcilmente en lo que sucede en cualquier otro proceso o el ambiente de otro proceso. Hay oficialmente unas maneras como se un proceso puede interactuar con otro. Una manera es a travs del uso de seales. Las seales son mensajes sencillos que un proceso puede enviar a otro, o que el sistema enva a procesos automticamente como respuesta a ciertos eventos, como el uso de ciertas combinaciones de tecla.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

145

Note especialmente que las seales generadas automticamente por el sistema siempre son a un grupo de procesos, no a un nico proceso. Note que un proceso o tarea puede programarse para que ignore ciertas seales que se le enven, pero no todas las seales son ignorables. Un grupo de procesos es el conjunto de programas iniciado en alguno especfico y que contiene los procesos hijos y los hijos de los hijos y as sucesivamente-. El comando bsico para el envo de seales a procesos es kill. Este comando de desafortunado nombre se usa para enviar seales especficas a procesos o trabajos especificados. Como se ha diseado en UNIX, el comando no interacta con el proceso o procesos destino, el comando solicita al proceso maestro init que enve la seal al proceso o procesos destino. Algunas combinaciones de teclas como control c, control z, control \ hacen que el ncleo del sistema enve seales idnticas a las de kill a todo un grupo de procesos. Sintaxis del comando kill El primer uso del comando kill es el de poder listar las posibles seales que se pueden enviar. No todas las seales estn estandarizadas a travs de toda la amplia gama de sistemas en la familia UNIX. Para listar qu seales estn disponibles para enviar en el sistema actual se usa kill l:
[1 e@Moe ~] kill -l 1) SIGHUP 2) SIGINT 5) SIGTRAP 6) SIGABRT 9) SIGKILL 10) SIGBUS 13) SIGPIPE 14) SIGALRM 17) SIGSTOP 18) SIGTSTP 21) SIGTTIN 22) SIGTTOU 25) SIGXFSZ 26) SIGVTALRM 29) SIGINFO 30) SIGUSR1 3) 7) 11) 15) 19) 23) 27) 31) SIGQUIT SIGEMT SIGSEGV SIGTERM SIGCONT SIGIO SIGPROF SIGUSR2 4) 8) 12) 16) 20) 24) 28) SIGILL SIGFPE SIGSYS SIGURG SIGCHLD SIGXCPU SIGWINCH

Para enviar una seal se usa kill seal nmeroProceso o para enviar una seal a una tarea se usa kill seal %nmeroTarea. Para enviar una seal a todo un grupo de procesos se usa kill seal nmeroGrupo. Las seales, en el comando kill, pueden especificarse usando el nmero obtenido del listado, el nombre completo (tambin obtenido del listado) o el nombre cortado, sin el prefijo SIG. Acerca de las seales Algunas de las seales son tpicas o estn estandarizadas: La seal 1, HUP o SIGHUP (hang up) es enviada automticamente por el sistema a todos los procesos del grupo relacionados con una ventana de sesin que ha sido
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 146

cerrada, desconectada o que ha sufrido desconexin en las comunicaciones. Como muchos de los procesos que implementan servicios en los ambientes UNIX son procesos que no estn relacionados con ventanas de sesin, esta seal se reusa mucho para sealar a un proceso de servicio que reinicie o que recargue su configuracin. La seal 2, INT o SIGINT (interrupt) es enviada automticamente generalmentepor el sistema a el proceso interactivo actual cuando se presiona la combinacin de teclas control c. La seal 3, QUIT o SIGQUIT es enviada automticamente por el sistema a el proceso interactivo actual cuando se presiona una combinacin de teclas predefinida. Comnmente se usa la tecla control\ para esta seal. Normalmente esta seal hace que el proceso que la recibe termine pero que al terminar genere un archivo de depuracin core. La seal 9, KILL o SIGKILL es enviada nicamente a travs de un comando, tpicamente el del mismo nombre, kill. Esta seal no es ignorable y al proceso destino no se le da tiempo para haga los pasos de limpieza necesarios para un cierre ordenado, por lo que el proceso que la recibe termina inmediatamente e irrevocablemente. La seal 10, BUS o SIGBUS (bus error) es una seal que genera y enva el sistema a un proceso o tarea cuando se dan ciertos errores de hardware o cuando hay corrupcin en un archivo ejecutable en ejecucin. Esta seal siempre termina un proceso inmediatamente a menos que el proceso est bloqueando estas seales-. La seal 11, SEGV o SIGSEGV (segment violation) es una seal que genera y enva el sistema a un proceso cuando encuentra que el mismo ha intentado acceder a una direccin de memoria por fuera de su entorno virtual de ejecucin. Esta seal siempre termina irremediablemente al proceso. La seal 15, TERM o SIGTERM (termination) es una seal con la que se le solicita a un proceso su terminacin. El proceso que la recibe puede ignorarla, y si no la ignora puede hacer un cierre ordenado. Esta es la seal predeterminada del comando kill, as usar kill nmeroProceso hace el envo de esta seal TERM. La seal 17, STOP o SIGSTOP es una seal con la que se solicita al proceso maestro init que congele a un proceso o grupo de procesos y los deje en estado Stopped. Esta seal no es ignorable ni bloqueable por los procesos. Esta seal es generada y enviada automticamente por el sistema cuando se presiona una combinacin de teclas. Comnmente se usa la combinacin control z para hacer envo de esta seal.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 147

La seal 19, CONT o SIGCONT (continue) es una seal con la que se le solicita al proceso maestro init que descongele a un proceso o grupo de procesos para que dejen de estar Stopped. Como los procesos estn congelados realmente no estn en ejecucin- no es ignorable ni bloqueable. Los comandos fg y bg usan esta seal para hacer que un trabajo de fondo que est en estado Stopped sigue en ejecucin.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

148

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

149

Variables de ambiente
Muchos procesos en UNIX necesitan de los valores en las variables de ambiente para funcionar o simplemente para hacer lo correcto o lo que se espera; adicionalmente, muchos de los programas en UNIX necesitan invocar subprogramas sencillos para realizar su labor (el editor vi no sabe corregir ortografa o imprimir, por ejemplo). La manera ms sencilla de pasar informacin en estos casos es una manera estandarizada en UNIX: un proceso puede seleccionar la informacin inicial del ambiente de con la que todos sus procesos hijos inician prcticamente no se puede seleccionar la informacin relacionada directamente con la seguridad-. Cuando se trata del intrprete de comandos shell un programa que casi lo nico que hace es invocar subprogramas-, hay cmo fcilmente revisar las variables del ambiente donde est trabajando y cmo seleccionar la informacin que copia a sus subprogramas hijos. Una variable de ambiente como se ha mencionado es un valor limitado bsicamente por la memoria disponible en el sistema- considerado como texto, manejado a travs de una etiqueta o nombre de variable. Como muchsimas otras cosas en UNIX, se diferencia entre maysculas y minsculas. Listar las variables de ambiente del intrprete shell Si el intrprete que se est usando es Bourne, Bourne Again o Korn, para revisar las variables de ambiente se usa el comando set:
[0 e@Moe ~] set BASH=/bin/bash BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="powerpcapple-darwin8.0") BASH_VERSION='2.05b.0(1)-release' CDPATH=.:/Users/e/:/Users/e/Documents:/ CLICOLOR=1 COLUMNS=80 DIRSTACK=() DISPLAY=:0.0 EUID=501 GROUPS=() HISTFILE=/Users/e/.bash_history HISTFILESIZE=500 HISTIGNORE='*rot*' HISTSIZE=500 HOME=/Users/e HOST=Moe HOSTNAME=Moe.local HOSTTYPE=powerpc IFS=$' \t\n' LANG=en_US.UTF-8

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

150

Ahora, como el shell no todas las variables las copia a los subprocesos hijos, existe otro comando que muestra de las variables del ambiente cules se copiarn a los subprocesos hijos. Este ltimo comando es export:
[0 e@Moe ~] export declare -x CDPATH=".:/Users/e/:/Users/e/Documents:/" declare -x CLICOLOR="1" declare -x DISPLAY=":0.0" declare -x HISTIGNORE="*rot*" declare -x HOME="/Users/e" declare -x HOST="Moe" declare -x HOSTNAME="Moe.local" declare -x LANG="en_US.UTF-8"

Como puede observarse las variables de ambiente que se copian a los procesos hijos son un subconjunto de las variables de ambiente del shell. Esta no es la situacin para los otros programas. Definicin de nuevas variables en el intrprete shell Para crear una nueva variable de ambiente en el intrprete shell se usa una sintaxis muy sencilla:
nombreVar1=valor1

Como se observa simplemente se nombra una variable y se una con un valor por medio de un smbolo de igual (=) sin espacios alrededor. La variable asume un valor nico, por lo que nicamente se puede asignar un valor. Si se necesita insertar un valor multi-palabra en una variable se ponen comillas sencillas o dobles dependiendo exactamente de lo que se necesite hacer- alrededor de los valores mltiples, para que se entienda como un nico valor:
nombreVar1=valor multi palabras

Note que si la variable nombrada con nombreVar1 no existe se crea con la ejecucin de la sentencia anterior, pero si la variable previamente exista simplemente se reusa pero se le define un nuevo valor, con lo que el valor anteriormente guardado en la Note que siempr e se menciona variable se pierde definitivamente. c op ia s de Las variables del intrprete shell existen nicamente en memoria, con lo que el lmite de lo que se puede almacenar en una variable est limitado por la memoria disponible en el sistema, y adems, los valores almacenados en las variables se pierden cuando se cierre el intrprete shell o termine la sesin.
va ri ab procesos hijos re le . Lo s cib que pueden m en copias odificar con libertad sin que se variables en el pr afecten las oceso padre shell.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

151

Paso de variables entre grupos de procesos


env

41329=telnetd
env
hijode

Para que un proceso pase variables a otros procesos deber cumplirse una nica condicin: como los sistemas UNIX son de memoria protegida lo nico factible es pasar copias de ciertas variables de ambiente a los procesos hijo nuevos, justo en el momento de la creacin de los procesos hijo-. Cuando se trata del intrprete de comandos shell se especifica qu subconjunto de las variables del ambiente del shell se copiarn a los comandos ejecutados, comandos que inician procesos hijo. Existen dos maneras: Una copia de cada una de las variables de la lista de exportadas es recibida en el ambiente por cada uno de los procesos hijos de intrprete o shell. Puede especificarse un juego de variables con valor en la lnea de comandos que inicia un nuevo proceso. Estas variables son insertadas en el ambiente del nuevo proceso aunque no hacen parte del ambiente del intrprete de comandos. Uso del comando export El comando export es muy sencillo. Si una variable existe puede usarse
export nombreVariable

para que la misma quede marcada como de copia al ambiente de todos los procesos hijos nuevos, de aqu en adelante. Si la variable no existe el intrprete shell define el nombre, para que cuando una variable con el nombreVariable sea definida, automticamente se trate como de copia a los procesos hijos. Puede tambin definirse una variable, asignrsele valor y definirla como de copia a los procesos hijo, todo en una sola operacin con
export nombreVar1=valor1 nombreVar2=valor mltiple 2

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

152

Las variables del intrprete shell se remueven de la memoria con unset. Remover con unset una variable definida como de copia a los procesos hijos la remueve tambin de la lista de copia, y si se vuelve a definir como variable no nace nuevamente como variable definida de copia a los procesos hijos. Para remover una variable de la memoria y al mismo tiempo de la lista de copia- se usa:
unset nombreVariable

Note que las variables no exportadas slo existen en el ambiente del intrprete y por eso ningn otro proceso o comando tiene acceso a las mismas o los valores contenidas en ellas. Paso de variables nuevas no preexistentes en el intrprete Si necesita insertar una o algunas variables en el ambiente de un nuevo proceso desde el intrprete shell sin que hagan parte del ambiente del shell se usa una sintaxis muy clara:
nombreVar1=valor1 nombreVar2=valor mltiple2 comandoNuevo

como se observa, simplemente se usa la sintaxis como tradicionalmente se define una variable en el shell las que no se copian a los procesos hijos- pero al final El proceso init de la lnea se incluye el comando que se necesita que se ejecute como seales a proces no enva os proceso hijo. Esta sintaxis indica al intrprete shell que cree o haga una que el originador a menos y el destino ej ec ut en ba jo copia modificada de unas variables nicamente para ser insertadas en el un m is m o usuario o el orig inador sea el ambiente del nuevo proceso hijo iniciado con la ejecucin del usuario root. comandoNuevo. Note que las variables nuevas o las copias modificadas como se ven el ltimo comando anterior slo existen durante la ejecucin del nuevo proceso hijo. No existen como se ve en el intrprete shell, no existen despus de la lnea que inicia al nuevo proceso, no existen en ninguno de los otros procesos del sistema.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

153

Paso de Seales entre Grupos de Procesos


seal entregada
2

env

1=init
env
1 3

env

27525=kill
favorenviar seal

41329=telnetd
env
hijode

seal entregada

131271=ksh

Dada la arquitectura de procesos de los sistemas Unix, todas las seales (las mencionadas cuando se habl del comando kill) que se envan a un proceso lder de grupo son enviadas no solo al proceso lder, si no que son directamente heredadas por sus procesos hijos. As, cuando un usuario tiene una sesin de terminal remota usando SSH contra un servidor Unix. y en la misma inicia al editor vi, tiene no un proceso, si no un grupo de procesos: Un proceso SSHD que recibe la conexin en el servidor requerida por el cliente SSH remoto. Un intrprete de comandos en el servidor UNIX. Una instancia del editor vi, en la misma sesin de terminal. Si en la mquina cliente se cierra la ventana de terminal remota, como el sistema detecta la falla en la conexin TCP/IP, genera y enva una seal hang up o SIGHUP al proceso lder de grupo, en este el sshd que recibe la sesin en el servidor. Como es todo un grupo de procesos, la seal SIGHUP se le enva tambin al intrprete de comandos y al editor de texto, todo simultneamente. Uso del comando kill para el envo de seales a grupos de procesos Para enviar seales a todo un grupo de procesos se usa la sintaxis:
kill s nombreSeal procesoLder

o
kill nmeroSeal procesoLder

o
kill -- -procesoLder

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

154

La primera sintaxis enva la seal seleccionada por nombre con la opcin s a todos los procesos de un grupo, iniciando con su procesoLder, y a todos sus descendientes, simultneamente. La segunda sintaxis enva una seal seleccionada dado su nmero a todo un grupo, iniciando con un proceso lder, y a todos sus descendientes, simultneamente. La tercera sintaxis enva la seal predeterminada 15 o TERM al lder de un grupo y a todos sus descendientes, simultneamente.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

155

Seguridad y permisos de archivos


Arquitectura de Seguridad de UNIX

PID=142U=juanG=it

u=rw-g=r-u=juang=bog

dir1
u=rw-g=r-u=anag=it

X
PID=3001U=rootG=system

arch1
u=rw-g=r-u=joseg=barr

arch1

Cada instancia de un programa en ejecucin es una tarea diferente. Cada una de esas tareas se denomina proceso, y cada proceso est compuesto en memoria por varias secciones. Una de esas secciones, a manera de encabezado de proceso se llama ambiente (environment). Dentro de el ambiente del proceso hay numerosas variables que afectan cmo funciona el proceso en s. Desde el punto de vista de la seguridad, para controlar qu puede y qu no puede hacer un proceso se tienen dentro del ambiente de cada uno unas variables crticas: una variable tiene el nmero interno del usuario bajo el que el proceso est en ejecucin, y otra variable tiene una lista de nmeros internos de grupos a los que est afiliado el proceso porque cuando inici el usuario estaba afiliado a los mencionados grupos. Cada llamado a sistema, como abrir archivo, leer archivo, escribir en archivo, enviar paquete, pedir memoria, cambiar la hora, tiene unas caractersticas que definen quin puede usar dichos llamados a funcin. Con este esquema el funcionamiento multitarea con permisos y privilegios est asegurado y funciona. Aunque puede verse un poco complicado en la teora y en el esquema, en la prctica es sencillo y se mostrar cmo se usa ms adelante. Slo hay que tener en cuenta: Todo el esquema de seguridad se basa en nmeros: nmero de usuario, nmeros de grupo, no en los textos que son el nombre de un usuario y los nombres de los grupos.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

156

Existe un usuario, de nmero cero (0), llamado root al que los controles de seguridad y/o permisos no le aplican. Ningn usuario en general puede entrometerse con los procesos que estn corriendo con la identidad de otro usuario. Esta regla no aplica para el usuario nmero 0, es decir root. Todos los archivos del sistema tienen un juego triple de permisos, que controlan qu usuarios pueden acceder. Como muchos dispositivos de hardware se representan y usan a travs de un archivo en el directorio /dev se pueden controlar los permisos del hardware. Esta regla no aplica para el usuario nmero 0, es decir root. Todos los usuarios y grupos tienen propiedades. Las propiedades de un usuario pueden cambiarse dinmicamente, pero generalmente los cambios los toma el usuario la prxima vez que se conecte al sistema. Para conectarse al sistema hay primero que identificarse comnmente escribiendo el nombre de usuario, que es una palabra sencilla, y luego que autenticarse, tambin comnmente usando una contrasea, que casi siempre es tambin una palabra, pero no tan sencilla. Los mtodos de identificacin y de autenticacin en el sistema son flexibles, cambiables, parametrizables y extensibles.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

157

Procesos y Permisos

PID=142U=juanG=it

u=rw-g=r-u=juang=bog

dir1
u=rw-g=r-u=anag=it

X
PID=3001U=rootG=system

arch1
u=rw-g=r-u=joseg=barr

arch1

Cuando un proceso trata de ejecutar un llamado a sistema se validan dos cosas: si es una funcin comn y sin limitaciones o si es una funcin restringida; o si es una funcin que accede a algo que tiene permisos. Algunas funciones se consideran restringidas y slo estn disponibles a los procesos que se ejecutan bajo la identidad del usuario root nicamente. Dentro de estas funciones estn pero no siendo una lista exhaustiva-: Conectarse a un puerto TCP o UDP local que tenga nmero inferior a 1024. Enviar o recibir paquetes IP con transportes diferentes de TCP y de UDP (OSPF, ICMP, etc). Manipular la fecha, hora o el huso horario del sistema. Hacer ms prioritario un proceso, propio o ajeno. Manipular cualquier informacin de un proceso de otro usuario. Acceder al hardware directamente. Ejecutar un proceso con la identidad de otro usuario sin conocer la contrasea del mismo. Ninguno de los llamados a funcin del sistema mencionados arriba es ajustable o parametrizable para que su seguridad se maneje diferente. Siempre se manejan tal como se describen.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

158

Ahora, muchas otras funciones del sistema estn restringidas por permisos, y as, dependen de la herramienta que se use, y de los archivos y directorios que en el momento intente acceder y de los permisos de los mismos. Estas funciones entonces s son parametrizables.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

159

Usuarios y Grupos de Usuarios

Usuario0=root

Grupo0=system
security audit perf printq

Gruposfuncionales
shutdown

Usuariosprotegidos admin=true

staff

Otrosgrupos

Jerarquadeusuarios

Jerarquadegrupos

Cuando un sistema es instalado y despus, cuando se configuran ms paquetes de software y cuentas de usuario-, hay un sinnmero de cuentas de usuario en teora usables. Esas cuentas de usuario adems estn posiblemente- agrupadas en grupos de usuario. Todo usuario tiene: Un nombre nico de usuario, denominado el username. Un nmero nico de usuario, denominado el userid o UID. Una lista de hasta treinta y dos (32) grupos a los que pertenece. De todos los grupos a los que pertenece, uno se denomina grupo primario o primary group. Cada grupo tiene: Un nombre nico de grupo, denominado el groupname. Un nmero nico de grupo, denominado el groupid o GID. Adicionalmente cada usuario puede estar protegido por un atributo mal llamado atributo admin. De todos los usuarios del sistema hay slo uno que es especial, se usuario es el de UID igual a cero (0) siempre, independientemente del nombre de usuario (username) que tenga. A este usuario el sistema nunca le forza el cumplimiento de los permisos, sus procesos pueden invocar cualquier llamado a funcin del sistema y puede intervenir en lo que hacen los procesos de cualquier otro usuario. La cuenta del usuario cero no se bloquea automticamente por intentos fallidos de autenticacin. Existe un grupo en el sistema que puede invocar numerosos llamados a funcin del sistema, aunque no puede saltarse la seguridad. Este grupo de nmero cero ya est creado cuando el sistema es instalado, puede administrar numerosas cosas en el sistema y lleva por nombre system. Cuando el sistema est recin instalado, slo un usuario pertenece al grupo system,
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 160

este usuario es root. Los usuarios que pertenecen al grupo system pueden instalar, actualizar y desinstalar software y drivers de dispositivos de hardware-, y pueden administrar dispositivos y pueden administrar el espacio del sistema a travs del LVM (volmenes por ejemplo). Pre-creados en el sistema hay otros grupos, denominados funcionales. Los usuarios que se asignen a estos grupos pueden realizar ciertas labores de operacin y administracin, por ello, en sistemas grandes, es bueno tener usuarios comunes que colaboran, sin acceder ni conocer la contrasea del usuario root, si no que trabajan porque por pertenecer a algn grupo funcional tienen el privilegio de usar ciertas funciones de administracin. Entre estos grupos funcionales estn: Grupo security: Los usuarios asignados a este grupo pueden listar, crear, cambiar y borrar cuentas de usuario y cuentas de grupo. Pueden cambiar polticas y contraseas. No pueden editar directamente los archivos que tienen que ver con la seguridad del sistema, ni pueden administrar los usuarios que tienen el atributo de proteccin admin en true. Inicialmente este grupo est vaco. Grupo audit: Los usuarios asignados a este grupo pueden configurar el sistema de auditora de seguridad, y pueden hacer todo tipo de reportes a partir de la informacin que este sistema genera. Inicialmente este grupo est vaco. Grupo printq: Los usuarios asignados a este grupo pueden administrar las colas de impresin y los dispositivos impresoras administrados a las mismas. Pueden manipular los trabajos de impresin, inclusive los ajenos. Inicialmente este grupo est vaco. Grupo perf: Los usuarios de este grupo pueden ejecutar todo tipo de comandos relacionados con la toma de estadsticas y cifras de desempeo, inclusive los que al invocarlos perjudican el mismo desempeo. Inicialmente este grupo est vaco. Grupo shutdown: Los usuarios asignados a este grupo pueden bajar el sistema por medio del uso de comandos como shutdown, reboot, fasthalt, fastboot y halt. Inicialmente este grupo est vaco. Grupo adm: Los usuarios asignados a este grupo pueden tomar estadsticas bsicas del sistema, pueden ver los reportes generados por la ejecucin del sistema de contabilidad de comandos y pueden manipular la programacin de tareas y a cron. Inicialmente este grupo est vaco. Grupos internos: Existen otros grupos para uso interno del sistema. A estos grupos como el grupo bin- no deben asignarse usuarios porque se compromete la integridad del sistema.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

161

Adicionalmente existe creado en el sistema desde el comienzo un grupo llamado staff, sin ningn tipo de privilegios al que se asigna todo usuario que se cree y al que especficamente no se le asigne un grupo. Todo grupo adicional que se cree en el sistema se considera sin privilegios por parte del sistema operativo.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

162

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

163

Permisos de Archivos: ls -l

- rwx rwx rwx

usuario

grupo

archivo

archivo!

permisosqueaplicana esteusuario permisosqueaplicana estegrupo cuandointentaacceder aestearchivo

permisosqueaplicanatodos losotrosusuariosygrupos

cuandointentaacceder aestearchivo

Para revisar los permisos de unos archivos se usa el comando


ls l nombres

Cuando se usa el comando, la primera columna incluye un campo de diez caracteres que si inician en guin (-), este rengln es efectivamente un archivo. Los permisos de un archivo se interpretan de la siguiente manera: Si en la terna de permisos que aplica para el proceso hay una r, el proceso s tiene permisos para leer los contenidos del archivo en cuestin. Si no hay una r si no un guin en la primera posicin, el proceso no tiene permisos para leer los contenidos. Si en la terna de permisos que aplica para el proceso hay una w, el proceso s tiene permisos para escribir o cambiar los contenidos del archivo en cuestin. Si no hay una w si no un guin en la segunda posicin, el proceso no tiene permisos para escribir en los contenidos. Si en la terna de permisos que aplica para el proceso hay una x, el proceso s tiene permisos para usar el archivo y sus contenidos como si fuera un programa, es decir invocar o ejecutar el archivo. Si no hay una x si no un guin en la tercera posicin, el proceso puede usar al archivo como datos nicamente. Las propiedades externas de un archivo, que se ven con el comando ls l archivo a excepcin del nombre- son cambiables nicamente si la identidad con la que est ejecutando el proceso en cuestin es la misma que la que tiene el archivo. Es decir las propiedades slo las manipula el dueo de un archivo independientemente de los permisos que tenga. Para saber cul de la terna de permisos aplica a un proceso se sigue el siguiente razonamiento:

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

164

Si la identidad del proceso que intenta acceder al archivo y el propietario usuario- que tenga marcado el archivo son la misma se le aplica la primera terna de permisos del archivo y no se miran las otras dos ternas. La primera terna de permisos se llama de usuario. Si el grupo que tiene marcado el archivo est dentro de la lista de grupos que tiene en el ambiente el proceso que intenta acceder al tal archivo se le aplica la segunda terna de permisos del archivo y no se miran las otras dos ternas. La segunda terna de permisos se llama de grupo Si el usuario bajo el que corre un proceso no es el que tiene marcado el archivo, ni el grupo que tiene marcado el archivo est dentro de la lista del ambiente del proceso se mira la tercera terna de permisos nicamente. La tercera terna de permisos se llama de otros.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

165

Permisos de Directorios: ls -ld


d rwx rwx rwx usuario grupo directorio

permisosqueaplicana esteusuario directorio! permisosqueaplicana estegrupo cuandointentaacceder aestedirectorio permisosqueaplicanatodos losotrosusuariosygrupos cuandointentaacceder aestedirectorio

Para revisar los permisos de unos archivos se usa el comando


ls ld nombres

Cuando se usa el comando, la primera columna incluye un campo de diez caracteres que si inician en la letra d, este rengln es efectivamente un directorio. Los permisos de un directorio se interpretan de la siguiente manera: Si en la terna de permisos que aplica para el proceso hay una r, el proceso s tiene permisos para listar lo que hay en el directorio en cuestin. Si no hay una r si no un guin en la primera posicin, el proceso no tiene permisos para listar los contenidos del directorio. Si en la terna de permisos que aplica para el proceso hay una w, el proceso s tiene permisos para cambiar el listado que es el directorio. Si no hay una w si no un guin en la segunda posicin, el proceso no tiene permisos para modificar el listado que es el directorio. Poder cambiar los listados que constituyen al directorio implica crear, renombrar, borrar archivos y directorios contenidos en el directorio en cuestin. Si en la terna de permisos que aplica para el proceso hay una x, el proceso s tiene permisos para pararse dentro del directorio con el comando cd (o equivalente), o para pasar por l para llegar a un subdirectorio. Si no hay una x si no un guin en la tercera posicin, el proceso no puede ni pararse en el directorio ni pasar por l para llegar a un subdirectorio. Las propiedades externas de un directorio, que se ven con el comando ls ld archivo a excepcin del nombre- son cambiables nicamente si la identidad con la que est ejecutando el proceso en cuestin es la misma que la que tiene el directorio. Es decir las propiedades slo las manipula el dueo de un directorio independientemente de los permisos que tenga. Para saber cul de la terna de permisos aplica a un proceso se sigue el siguiente razonamiento:
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 166

Si la identidad del proceso que intenta acceder al archivo y el propietario usuario- que tenga marcado el directorio son la misma se le aplica la primera terna de permisos del directorio y no se miran las otras dos ternas. La primera terna de permisos se llama de usuario. Si el grupo que tiene marcado el directorio est dentro de la lista de grupos que tiene en el ambiente el proceso que intenta acceder al tal directorio se le aplica la segunda terna de permisos del directorio y no se miran las otras dos ternas. La segunda terna de permisos se llama de grupo Si el usuario bajo el que corre un proceso no es el que tiene marcado el directorio, ni el grupo que tiene marcado el directorio est dentro de la lista del ambiente del proceso se mira la tercera terna de permisos nicamente. La tercera terna de permisos se llama de otros.
Slo el dueo de un directorio tiene el archivo o privilegio de poder modificar sus permisos, independientem ente de los permisos que ya tenga.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

167

Cambiar Permisos: chmod


- rw- r-- --chmodu+xarchivo

usuario

grupo

archivo

- rwx r-- --chmodgo+rxarchivo

usuario

grupo

archivo

- rwx r-x r-x

usuario

grupo

archivo

Para cambiar los permisos de un archivo o directorio o de varios a la vez- se usa el comando chmod. La sintaxis del mismo es sencilla: Para agregar unas letras de permisos a un(os) archivo(s) o directorio(s)
chmod ternas+permisos archivo

Para remover unas letras de permisos a un(os) archivo(s) o directorio(s)


chmod ternas-permisos archivo

Para especificar con qu letras de permisos debe quedar un(os) archivo(s) o directorio(s)
chmod terna=permisos archivo

Intentar agregar una letra de permisos que ya tiene o intentar una letra de permisos que un archivo no tiene no es error. As, como en el ejemplo, si un archivo tiene permisos rw-r----- y se usa chmod agregar una x en la terna del usuario y quedar rwxr-----.
u+x,

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

168

Un usuario pued e qu gr up os es conocer a t as ig na do invocando el com ando sencillo groups.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

169

Cambiar Propietario: chown


- rw- r-- --usuario grupo archivo
comandoparasloroot

chownotrousuarchivo

- rwx r-- ---

otrousu

grupo

archivo

comandoparaeldueo

chgrpotrogruarchivo

- rwx r-x r-x

otrousu

otrogru

archivo
comandoparasloroot

chownusuario.grupoarchivo

- rwx r-x r-x

usuario

grupo

archivo

Para cambiar el propietario de un archivo o directorio (o de varios a la vez) se usa el comando chown. La sintaxis es muy sencilla:
chown nuevoDueo archivo

Para cambiar el dueo y el grupo de un archivo al mismo tiempo se usa


chown nuevoDueo.nuevoGrupo archivo

Para cambiar el grupo de un archivo (o de varios a la vez) se usa el comando chgrp. La sintaxis es muy sencilla tambin:
chgrp nuevoGrupo archivo

Ntese que el comando chown slo puede ser invocado por el usuario root, no puede ser usado ni por el dueo actual del archivo en UNIX. Es decir, la propiedad de un archivo no puede ser entregada, slo root puede cambiarla. Ntese que el comando chgrp puede ser invocado por el usuario dueo de un archivo, pero que el grupo que se vaya a asignar debe ser uno de los asignados al usuario dueo. Cuando el usuario root usa chgrp para cambiar el grupo, puede asignar un grupo cualquiera hasta uno inexistente- an uno no asignado al dueo del archivo en cuestin.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

170

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

171

Cambiar Identidad de Usuario: su


juancho@abe:/home/juancho> whoami juancho juancho@abe:/home/juancho> ls l /etc/security ls: /etc/security: The file access permissions do not allow the specified juancho@abe:/home/juancho> su roots password: ********* (texto escrito no visible) juancho@abe:/home/juancho> whoami root juancho@abe:/home/juancho> id uid=501(juancho) gid=0(system) groups=1(staff),7(security),9(printq),10(audit) juancho@abe:/home/juancho> ls l /etc/security total 6656 -rw------1 root security 14 Jan 31 12:23 .ids -rw-rw---1 root security 254 Jun 21 2004 .profile juancho@abe:/home/juancho> exit juancho@abe:/home/juancho> whoami juancho juancho@abe:/home/juancho> su roots password: ******** (texto escrito no visible) root@abe:/> whoami root root@abe:/> id uid=0(root) gid=0(system) groups=2(bin),3(sys),7(security),8(cron),10(audit) root@abe:/> exit juancho@abe:/home/juancho

Si se necesita acceder a unas funciones del sistema slo por un momento y se conoce la contrasea de la cuenta de otro usuario que s tiene permiso para ejecutar dichas funciones del sistema no es necesario desconectarse. Todo sistema UNIX inclusive AIX- incluye la funcin sustituir usuario a travs del comando su. ste es fcil de usar. Si se invoca el comando
su usuarioDestino

el mismo solicita la autenticacin del usuario normalmente la contrasea- y si sta es correcta se obtienen las credenciales de seguridad de usuarioDestino. Si se invoca el comando
su usuarioDestino

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

172

el comando solicita igualmente la autenticacin del usuario normalmente la contrasea- y si sta es correcta se obtienen las credenciales de seguridad del usuarioDestino, y adems, se ejecuta el archivo de inicializacin de dicho usuario, por lo que tambin se obtienen las variables de configuracin del usuario en el ambiente. El comando su no obliga a especificar un usuario, si no se especifica el comando asume que el usuario est intentando convertirse u obtener las credenciales de- en root.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

173

Uso efectivo del intrprete de comandos


El intrprete de comandos
El realmente los- intrpretes de comandos son quizs la herramienta ms avanzada que tienen los UNIX. Los intrpretes shell son muy poderosos debido a que: Implementa un lenguaje de programacin completo. Interpreta comodines de nombre de archivo, para que los programas no tengan que hacer la interpretacin. Es multitarea como ya se observ anteriormente-, permite manejar mltiples tareas con una sola invocacin, una sola sesin y un solo indicador de comandos. Tiene caractersticas avanzadas que se vern en este aparte como redireccin y ejecucin condicional-. Implementa muchos de los comandos ms bsicos, para no depender del sistema operativo y no tener que ejecutar otro proceso en esos casos. El intrprete de comandos y el uso de la multitarea Como ya se observ en el aparte Procesos de Fondo del captulo Procesos y Variables, el intrprete shell estndar permite un uso multitarea, con comandos y combinaciones de tecla para el cambio de tareas, listar, terminar. Todo comienza con el uso del smbolo &, pero como se vi, hay mucho ms. Es de notar ya que no se mencion en el captulo Procesos y Variables- que los trabajos de fondo estn asociados a la sesin del shell de hecho el shell en esos casos es lder del grupo de procesos-, por lo que el usuario no puede desconectar su sesin, ya que, aunque de pronto los procesos de fondo no son directamente visibles, s estn y son dependientes del shell. Si un usuario quiere desconectarse de una sesin usando el comando exit pero tiene jobs en ejecucin el shell no se lo permitir y le mostrar un mensaje:
root@ibmserver1:/> jobs [2] + Running [1] - Stopped (SIGTSTP) root@ibmserver1:/> exit There are stopped jobs. root@ibmserver1:/> sleep 600 vi /.profile

El intrprete de comandos y los metacaracteres El intrprete de comandos cada vez que recibe la tecla que le indica iniciar ejecucin -la tecla ENTER cuando no se le impide la interpretacin- simplemente no se dedica a iniciar la
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 174

ejecucin no ms: hace todo un ciclo de interpretacin de lo que se entr en la lnea o lneas de comandos, y dependiendo de lo que se obtenga, inicia la ejecucin. Una de las primeras cosas que logra el intrprete de comandos shell es el de reemplazar, cuando los encuentra en la o las lneas de comandos, unos caracteres que considera especiales. Estos caracteres especiales tienen un significado ms all de ser simples caracteres de texto por eso reciben el nombre de metacaracteres. Los metaracteres en los intrpretes de comandos que cumplen con Posix son:
$, { y } $, (, ), ` >, <, &, | *, ?, [, -, !, ] ! , , y \ ;

Para el uso e interpretacin de variables de ambiente Para el uso de expansin de comandos Para la redireccin y las tuberas Para el reemplazo de caracteres de nombre (comodines) Para el manejo de la historia de comandos
Por el uso que tie ne comandos como n, algunos find, tar, cpio s interp retan comodines!

Para evitar el uso de los significados especiales de los otros metacaracteres Como separador de comandos

Bsicamente en este captulo aprenderemos el uso de estos smbolos para alcanzar las funciones especiales que tienen los intrpretes de comandos POSIX.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

175

Comodines (de nombres)


El intrprete de comandos interpreta ciertos caracteres como comodines para facilitarle al usuario expresar conceptos como todos los archivos, todos los archivos que terminan en .c, los archivos MP3 que cuyo nombre comienza con Depeche. Es posible que los usuarios estn algo familiarizados con el uso sencillo de comodines en el intrprete de comandos de MS-DOS o MS-Windows, o con el uso ms bsico de los comodines en Unix. Es de notar que en muchos otros ambientes los comandos que interpretan los comodines son los comandos de manipulacin masiva de archivos, como comandos de copia, movimiento, copias de respaldo y compresin; pero en UNIX, los comodines son interpretados donde es ms conveniente: en la lnea de comandos del intrprete de mandatos shell. Por qu es ms conveniente que los comodines los interprete el shell? Porque el shell siempre los interpreta y porque as la mayora de los comandos no tienen entonces que hacerlo! As, puede uno ahorrar escribir un nombre largo como pl-insert_new_student.sql cuando haya que editarlo si uno usa algo como vi *new_st*sql, o si uno sabe que slo hay un nombre parecido simplemente vi *student.sql. Y esto notando que vi no interpreta comodines en la lnea de comandos, el shell siempre interpreta los comodines antes de iniciar la ejecucin de lo que unos escribe! Los comodines en el intrprete estndar Posix, como ya se mencion son:
* ? [ ! ]

Comodn bsico ? (cualquier un caracter del nombre) El comodn ms bsico es el smbolo ?. Este se interpreta al usarlo dentro de un nombre de archivo existente como un caracter cualquiera del nombre, exceptuando por el punto inicial que denota un archivo oculto. Ejemplos:
e@abe:e/> ls LitteFile archivoZ.txt fileA.txt MadRamon 1.png archivoaB.txt fileB NuevoVacio.txt archivoab.txt fileC actual.txt dato viejo fileD archivoA.txt fechaActual.txt fileE archivoAB.txt fileA.c fileF archivoE.txt fileA.cob fileG e@abe:e/> ls archivo?.txt archivoA.txt archivoE.txt archivoZ.txt e@abe:e/> fileH fileI nuevoArchiv2.txt procesos.txt ramon.txt subdir1

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

176

Como se observa, el smbolo ? permite seleccionar los nombres de los archivos sin especificar un nico caracter en una posicin. En el caso del ejemplo, ls Archivo?.txt significa ls ArchivoCualquierCaracter.txt, as que se listan los archivos cuyo nombre es Archivo, un caracter cualquiera, un punto y txt. Se observa que slo toma los nombres que existen, as que aparecen los nombres con las letras que existen -no se incluyen por ejemplo ArchivoB.txt o ArchivoC.txt, porque esos archivos no existen-. Note que la interpretacin siempre la hace el shell, no ls. Se usa ls nicamente porque es til como comando sin efectos negativos colaterales. Comodn amplio * (cualesquiera caracteres del nombre) El segundo comodn ms bsico es el smbolo *. Este se interpreta al usarlo dentro de un nombre de archivo existente como cualesquiera caracteres del nombre, incluyendo no caracteres, y exceptuando el punto inicial del nombre de los archivos ocultos. Ejemplos:
e@abe:e/> ls LitteFile archivoA.txt fileA.c fileG MadRamon 1.png archivoAB.txt fileA.cob fileH NuevoVacio.txt archivoE.txt fileA.txt fileI actual.txt archivoZ.txt fileB nuevoArchiv2.txt archivo A.txt archivoaB.txt fileC procesos.txt archivo.part.txt archivoab.txt fileD ramon.txt archivo.txt dato viejo fileE subdir1 archivo23.txt fechaActual.txt fileF e@abe:e/> echo file* fileA.c fileA.cob fileA.txt fileB fileC fileD fileE fileF fileG fileH fileI e@abe:e/> echo archivo*.txt archivo A.txt archivo.part.txt archivo.txt archivo23.txt archivoA.txt archivoAB.txt archivoE.txt archivoZ.txt archivoaB.txt archivoab.txt e@abe:e/>

Como puede observarse, con la primera ejecucin se especifica seleccionar todos los archivos cuyo nombre comienza con file y el resto del nombre puede ser cualquier cosa incluso nada-; en este ejemplo aparecen archivos que tienen una letra en la parte seleccionada por *, pero tambin archivos que tienen una letra un punto y un sufijo variable; en el segundo ejemplo se especifica seleccionar todos los archivos cuyo nombre comienza con archivo luego tiene un * para indicar que pueden ser cualquier cantidad de cualesquiera caracteres -incluso nada- y luego un punto y el sufijo txt, en este ejemplo aparecen archivos que no tienen nada entre archivo y .txt -este es el caso de archivo.txt-, y que tienen diferentes letras entre archivo y .txt, maysculas, minsculas, nmeros, y hasta caracteres como espacio y punto.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

177

Comodn [xyz] (cualquier un caracter de la lista) Parecido al comodn ? existe la posibilidad de indicar que deben seleccionarse los archivos que tienen algo en una posicin, pero no cualquier cosa como el smbolo ?, si no uno de unos cuantos caracteres dados. Para esta especificacin se usa una lista de opciones, que se incluye entre smbolos [ y ], como se muestra en los siguientes ejemplos. Ejemplos:
LitteFile archivoA.txt fileA.c fileG MadRamon 1.png archivoAB.txt fileA.cob fileH NuevoVacio.txt archivoE.txt fileA.txt fileI actual.txt archivoZ.txt fileB nuevoArchiv2.txt archivo A.txt archivoaB.txt fileC procesos.txt archivo.part.txt archivoab.txt fileD ramon.txt archivo.txt dato viejo fileE subdir1 archivo23.txt fechaActual.txt fileF e@abe:e/> echo file[BFD] Note que si el id ioma en que fileB fileD fileF est trabajando el usuario es e@abe:e/> echo archivo[aA2]*txt ingls el caracter archivo23.txt archivoA.txt archivoAB.txt archivoaB.txt entre la n y la o; no est ni archivoab.txt con tilde estn las vocales junto a las vocales sin tilde!

En el primer caso de los ejemplos se indic que se deban seleccionar los archivos cuyo nombre comiencen con file y luego tengan un caracter seleccionado de B, F o D, nicamente. En el segundo caso se indic que se seleccionaran los archivos cuyo nombre comienza con archivo y luego tienen un caracter seleccionado de a, A y 2, luego tienen cualquier cosa -incluso nada- y finalmente el nombre termina en txt. Este segundo ejemplo muestra como el shell interpreta todos los smbolos comodn indistintamente, y se pueden combinar. Comodn [!xyz] (cualquier caracter que no est en la lista)

Muy semejante al comodn de lista [xyz], que selecciona un caracter del nombre que est en la lista, existe el comodn lista negada [!xyz], que selecciona un caracter del nombre que no est en la lista. Note que como casi cualquier caracter puede ser usado en los nombres de los archivos en UNIX, es posible que la lista haya que sobre-especificarla, porque de lo contrario, de pronto, selecciona mucho. Ejemplos:
e@abe:e/> ls LitteFile MadRamon 1.png NuevoVacio.txt actual.txt archivo A.txt archivo.part.txt archivo.txt archivo23.txt archivoA.txt archivoAB.txt archivoE.txt archivoZ.txt archivoaB.txt archivoab.txt dato viejo fechaActual.txt fileA.c fileA.cob fileA.txt fileB fileC fileD fileE fileF fileG fileH fileI nuevoArchiv2.txt procesos.txt ramon.txt subdir1

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

178

e@abe:e/> echo archivo[!aA2]*txt archivo A.txt archivo.part.txt archivo.txt archivoE.txt archivoZ.txt e@abe:e/> echo [!af]*.txt NuevoVacio.txt nuevoArchiv2.txt procesos.txt ramon.txt

En el primer caso del ejemplo se indica que se seleccionen los archivos cuyo nombre comience con archivo y luego tengan un caracter que no sea ni a, ni A ni tampoco 2, y que luego tengan cualquier cosa y finalmente el nombre termine en txt; se nota como selecciona archivos cuyo nombre es archivo luego un espacio o archivo y luego un punto, o archivo luego E o Z, pero en ningn caso a, A o 2. En el segundo caso del ejemplo se indica que se seleccionen archivos cuyo nombre termine en .txt, y que casi nada del nombre importa, mientras no comience ni con a ni con f; se obserca como se seleccionan archivos .txt cuyos nombres comienzan con N, con n, con p o con r, nunca con a ni con f. Comodn [x-z] (cualquier caracter que est en un rango) Muy parecido al comodn [xyz] donde se indica que se seleccione un Note pueden com binarse listas y rangos en una nico caracter de una lista de posibilidades dada posibilidad por especificacin. posibilidad existe otra sintaxis para indicarle al shell que debe seleccionar Pregunte cmo! archivos cuyos nombres concuerdan en una posicin con un caracter dado un rango ascendente. La sintaxis es simplemente escribir [, el caracter donde comienza el rango, un smbolo menos (-), el caracter donde termina el rango, y el smbolo ]. Note que el caracter inicio del rango debe ser numricamente menor (debe aparecer primero) que el de fin del rango en el cdigo de pgina de representacin del texto en el idioma que est configurado el usuario. Ejemplos:
e@abe:e/> ls LitteFile archivoA.txt MadRamon 1.png archivoAB.txt NuevoVacio.txt archivoE.txt actual.txt archivoZ.txt archivo A.txt archivoaB.txt archivo.part.txt archivoab.txt archivo.txt dato viejo archivo23.txt fechaActual.txt e@abe:e/> echo file[C-F]* fileC fileD fileE fileF fileA.c fileA.cob fileA.txt fileB fileC fileD fileE fileF fileG fileH fileI nuevoArchiv2.txt procesos.txt ramon.txt subdir1

En el anterior muy sencillo ejemplo se indic seleccionar los archivos cuyo nombre inicia con file, y que luego tienen un caracter cualquiera del rango que va de C a F, es decir C, o D, o E o F. Comodn [!x-z] (cualquier caracter que no est en el rango De manera semejante al comodn [x-z] que permite seleccionar archivos existentes dado un caracter de una lista de opciones donde se indica el inicio de un rango que arma la lista y
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 179

donde se indica donde termina el rango donde termina la lista existe otra sintaxis donde se especifica que debe seleccionarse un nico caracter que no est en un rango dado. Igual que en el caso del rango, el primer caracter usado debe ser numricamente menor (debe aparecer primero) que el de fin del rango en el cdigo de pgina de representacin del texto en el idioma que est configurado el usuario. Ejemplos:
e@abe:e/> ls LitteFile archivoA.txt fileA.c MadRamon 1.png archivoAB.txt fileA.cob NuevoVacio.txt archivoE.txt fileA.txt actual.txt archivoZ.txt fileB archivo A.txt archivoaB.txt fileC archivo.part.txt archivoab.txt fileD archivo.txt dato viejo fileE archivo23.txt fechaActual.txt fileF e@abe:e/> echo file[!C-F]* fileA.c fileA.cob fileA.txt fileB fileG fileH fileI fileG fileH fileI nuevoArchiv2.txt procesos.txt ramon.txt subdir1

Note que este ejemplo tambin es muy sencillo: se indica al shell que debe seleccionar los archivos existentes cuyo nombre comienza con file y que luego tienen un caracter que no est en el rango C a F -es decir el caracter no es C, ni D, ni E ni F- y que luego el nombre tiene cualquier cosa.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

180

El cdigo de re torno de una secuencia de co mandos es el cdigo de retorn o de los comandos del ltimo nicamente.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

181

Ejecucin de Comandos en Secuencia


Muy a menudo necesitamos ejecutar en UNIX varios comandos en secuencia, donde no necesariamente unos dependen de otros. Por esta razn existe en los intrpretes de comandos la sintaxis comando ; comando donde se entran los comandos inmediatamente, en una sola lnea, pero los comandos se ejecutan en secuencia, donde el segundo comando slo se ejecuta cuando el primero termine, y sin importar si el primer comando o el segundo- termina bien o mal. Ejemplo:
root@ibmserver1:/> sleep 60 root lft0 Sep root pts/0 Sep root pts/1 Sep root pts/3 Sep root pts/3 Sep root@ibmserver1:/> ; who ; who am i 03 10:05 03 10:05 (:0.0) 04 13:46 (192.168.0.12) 04 13:55 (192.168.0.12) 04 13:55 (192.168.0.12)

En la lnea arriba mostrada, se entraron tres comandos en lnea, pero slo el primero (sleep 60) comienza ejecucin. Tan pronto como el primero termine el segundo (who) comienza ejecucin; y, cuando el segundo termine, el tercero (whoami) se ejecutar. Slo cuando el ltimo termine volver a aparecer el indicador de mandatos del intrprete para recibir ms comandos. Ntese como el intrprete no separa de manera alguna la ejecucin o lo que muestra la ejecucin- de un comando de otro. En el ejemplo la ltima lnea root parece repetida porque la ltima lnea de who es casualmente la que muestra el comando who am i.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

182

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

183

Ejecucin Condicional de Comandos


A veces, se quieren ejecutar varios comandos en secuencia, pero con condiciones: Ejecutar un comando pero slo si el comando anterior termin perfectamente. Ejecutar un comando pero slo si el comando anterior no termin perfectamente. En UNIX se manejan muy fcilmente estas secuencias, pero hay que introducir un concepto en el que estos casos se basan: cdigos de retorno. Cdigos de Retorno de una Ejecucin Todos los programas en UNIX o son hechos directamente en lenguaje C o son hechos indirectamente en lenguaje C. Este ltimo caso es el de muchos programas: no son hechos en C pero s en algn otro lenguaje de programacin que fue hecho en C; esta es la situacin de los programas hechos en Java, Perl, Python, AWK, Oracle PL/SQL, y muchos ms.
De las variables del se hablar ms ad intrprete elan libro, muy pronto te en este . Pe no ta rs e qu e la ro puede s como ? se co va ri ab le s nsideran del ambiente, tema ya considerado.

En C hay una sentencia clave con la que deberan terminar todos los programas: return. Esta sentencia recibe como parmetro un nmero entero que se supone recibe el sistema operativo. Como el diseo y desarrollo de UNIX y de C son muy cercanos, los sistemas UNIX siempre capturan el nmero entero que los programas en C entregan. Este valor en UNIX lleva el nombre de cdigo de retorno, y puede leerlo tanto el sistema operativo como el programa padre que invoca a cada proceso. En el caso de los intrpretes de comandos como bash y ksh, cada ejecucin de comandos guarda en la variable ? el cdigo de retorno de la ltima invocacin. Como esta variable ? no es una lista o arreglo, slo un nmero entero, solo guarda el nmero entero retornado por la ltima invocacin, y cualquier valor anterior se pierde definitivamente. En el caso del ejemplo mostrado en el apartado Ejecucin de Comandos en Secuencia, como son tres comandos, los dos primeros cdigos de retorno de los comandos sleep y who- se pierden y slo queda guardado el cdigo de retorno del comando who am i. Ejecucin Condicional: Ejecucin slo si el anterior ejecuta sin error Para poder ejecutar un comando si el comando anterior se ejecuta sin error primero hay que conocer que para los intrpretes Bourne (sh), Korn (ksh) y Bourne Again (bash) una ejecucin se considera sin error si cuando termina un comando devuelve un cero (0) en la variable ?. Para ejecutar un comando2 nicamente si el comando1 termina sin error se usa:
comando1 && comando2

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

184

Ntese que el comando1 puede tener opciones y argumentos, y el comando2 posiblemente tambin, la sintaxis slo depende de los smbolos &&. Ejemplo:
root@ibmserver1:/> whoami && echo "Ese soy yo!" root Ese soy yo! root@ibmserver1:/>
Leer directamente de no ti en e se nt l teclado id o si un programa corre en multi-tarea y m un sistema ul Quin puede decir ti-usuario. quin tiene el teclado en un momento dado?

Como se observa, como el comando whoami se ejecuta sin error el comando echo ejecuta inmediatamente inmediatamente termina whoami-.

Ejecucin Condicional: Ejecucin slo si el anterior ejecuta con error Para ejecutar un comando si el comando anterior se ejecuta con error primero hay que conocer que para los mismos sh, ksh y bash, una ejecucin se considera con error si cuando termina un comando devuelve un nmero cualquiera diferente de cero (0) en la variable ?. Para ejecutar un comando2 nicamente si el comando1 termina con error se usa:
comando1 || comando2

Ntese que igual que con &&, el comando1 puede tener opciones y argumentos, y el comando2 posiblemente tambin, la sintaxis slo depende de los smbolos ||. Ejemplo:
root@ibmserver1:/> rmdir /tmp || echo "No pudo borrarse / tmp!" rmdir: 0653-611 Directory /tmp is not empty. No pudo borrarse /tmp! root@ibmserver1:/>

Hay programas que necesitan leer directamente de de un a vi rt ua l teclado o liz ac i n de l te cl ad o, y qu e escribir en la pant ne ce si ta n all o a l m e n o a de texto, s en una virtualizacin de text que estos program o. Se dice as la entrada estnd no usan o ar o no usan la salida estndar.

Ntese cmo se ejecut arriba el segundo comando (echo) debido a que el primer comando (rmdir) termin con un error.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

185

Redireccin: Archivos
En UNIX hay un concepto muy poderoso: casi todo o es un archivo o puede trabajarse como un archivo. Por esta razn muchos programas fueron programados para que no asuman que reciben entrada -en especial texto- desde el teclado directamente, si no desde una especie de archivo virtual individual llamado la entrada estndar, y para que no escriban lo que producen -en especial texto- a la pantalla, si no a una especie de archivo virtual individual llamado la salida estndar. Archivos estandar: entrada estandar, salida estandar, salida de errores estandar Como se viene mencionando, la mayora de los programas en Unix que necesitan informacin textual de entrada no leen directamente del teclado, si no que leen de un archivo virtual individual llamado la entrada estandar o, en ingls stdin. Este archivo es de lectura secuencial, no recibe escritura, y los programas asumen que est abierto antes de comenzar. Este archivo normalmente lo abre y lo pone a disposicin de los programas que siguen el programa que recibe la conexin del usuario (en modo texto casi siempre es un proceso llamado getty, y para las conexiones remotas inetd o sshd). Los programas tampoco asumen que tienen una pantalla a disposicin, si no que escriben sus avisos y el texto en general que producen en un archivo virtual individual llamado la salida estandar o, en ingls stdout. Este archivo es de escritura secuencial, no permite la lectura, y los programas asumen que est abierto Note que no puede usar un mismo archi vo para la antes de comenzar. Igual que con la entrada estndar, este archivo re di re cc i n de la en tr ad normalmente lo abre y lo pone a disposicin de los programas que siguen estndar y de la salida estndara simultneamente ! el programa que recibe la conexin del usuario. Los programas tampoco asumen que deben mandar los mensajes de error a un archivo -aunque algunos s-, mientras que algunos no muy bien diseados mezclan los mensajes de aviso, alerta o error con los dems textos en la salida estndar, la mayora en UNIX escribe dichos textos adicionales en otro archivo virtual individual llamado la salida estndar de errores, o en ingls stderr. Este archivo, como la salida estndar, es de escritura secuencial, no permite la lectura, y los programas asumen que est abierto antes de comenzar. Igual que con los otros, este archivo normalmente lo abre y lo pone a disposicin de los usuarios el programa que recibe la conexin del usuario. Ahora... en conjunto de qu se trata esto? Cuando un usuario se conecta de manera local, y en modo texto, un programa como getty conecta la entrada estndar con una virtualizacin del teclado local -para permitir la multitarea-, conecta la salida estndar con una virtualizacin de la pantalla textual local AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 186

para permitir la multitarea y la multiplexacin con los mensajes urgentes del sistema-, y conecta la salida de errores estndar con una virtualizacin de la pantalla textual local -para permitir tambin la multitarea, la multiplexacin con los mensajes de error del sistema, y para poder usar el mismo dispositivo fsico que la salida estndar-. Al final del proceso, los programas locales de modo texto parecen estar leyendo lo que uno les escribe en el teclado, y parecen estar escribiendo mensajes directamente en la pantalla, tanto su salida normal como sus mensajes y avisos de error. Cuando un usuario se conecta de manera remota, y en modo texto, un programa como inetd o sshd conecta la entrada estndar con una virtualizacin de un socket de TCP/ IP, de manera que un texto que llega dentro de paquetes generados por Note qu un cliente sea recibido como texto en la entrada del programa -que parece m i s m o ea rnoh ipuede usar un c vo para l a re di re cc i n de estar leyendo del teclado remoto-. Adicionalmente el mismo programa la en tr ad a estndar y de la sa lid conecta la salida estndar con una virtualizacin de un socket de simultneamente a estndar ! TCP/IP -casi siempre el mismo de la entrada- de manera que el texto que los programas que siguen sea empacado en un paquete de red y pueda aparecer en una pantalla en el cliente remoto. De igual manera se hace con la salida estndar de errores. Redireccin de la entrada desde un archivo Muchas veces hay que darle o mucho texto a un programa para que lo procese -y no se desea tener que escribirlo todo directamente, o hay que darle como entrada de texto lo que hay en un archivo. Para ambos casos se invent la redireccin de la entrada estndar. Para hacer redireccin de la entrada estndar en el intrprete shell simplemente se agrega <nombre_archivo a la sintaxis del comando que debe leer de un archivo y no de la virtualizacin del teclado. Note que el archivo debe existir antes de que inicie el comando, ya que la redireccin la hace el shell antes de iniciar el comando, y adems es el shell quien debe poder encontrar y abrir el archivo nombre_archivo para lectura. Ejemplo:
e@abe:e/> write root < MiNombre.txt Message from e on abe (pts/0) [Sun Sep 2007] ... Ramon Barrios Lascar <EOT> e@abe:e/> cat MiNombre.txt Ramon Barrios Lascar 9 21:21:33 EST
Note que no pu ede usar un mismo archi vo para la re di re cc i n de la en tr ad a estndar y de la sa lida estndar de errores simult neamente!

En el ejemplo se puede notar como el comando write no tuvo que esperar a que el usuario escribiera el mensaje directamente -y lo terminara con control d-, si no que ley, pero el shell ya le haba preparado que lo que leera sera el archivo MiNombre.txt.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 187

Redireccin de la salida hacia un archivo Ms comn que darle a un comando la entrada almacenada previamente en un archivo es necesitar almacenar lo que muestra -comnmente texto- en un archivo, para poder revisarlo con calma, reportarlo a otro o simplemente porque aparece tan rpidamente en la ventana de texto que no es posible leerlo mientras va a apareciendo. Para hacer redireccin de la salida estndar de un comando se usa una sintaxis muy sencilla que de pronto es conocida ya por los usuarios de otros ambientes: simplemente se agrega >nombre_archivo a la sintaxis del comando al que se le quiere redirigir la salida. Note que igual que con los otros casos, es el shell el que abre el archivo an antes de ejecutar el comando al que se le redirige la salida. Atencin: el shell abre el archivo para salida con la opcin O_CREAT, lo que hace que si no existe lo crea, pero si ya existe lo destruye y luego lo crea nuevo! Ejemplos:
[0 e@Moe ~] ps -u USER PID %CPU %MEM VSZ TIME COMMAND e 4971 0.1 0.1 27892 0:00.07 -bash [0 e@Moe ~] ps -u > datos.txt [0 e@Moe ~] cat datos.txt USER PID %CPU %MEM VSZ TIME COMMAND e 4971 0.0 0.1 27892 [0 e@Moe ~] date Mon Sep 10 09:48:04 COT 2007 [0 e@Moe ~] date > datos.txt [0 e@Moe ~] cat datos.txt Mon Sep 10 09:48:08 COT 2007 RSS 944 TT p1 STAT STARTED S 9:47AM
Note que no pu ede usar un mismo archi vo para la re di re cc i n de la en tr ad a estndar y de la sa lida estndar simultneamente !

RSS 944

TT p1

STAT STARTED S 9:47AM

0:00.10 -bash

En los ejemplos se observa cmo lo que genera un comando se almacena en un archivo -en el ejemplo datos.txt-, y en el segundo ejemplo se muestra cmo sin aviso el shell crea nuevo el archivo datos.txt, perdindose los contenidos anteriores del mismo. Redireccin de los mensajes de error hacia un archivo Comn tambien es la necesidad de almacenar los avisos de alerta, advertencia o mensajes de error que algunos comandos generan. En muchos casos sirve almacenar todo el texto generado por la ejecucin de un comando en un nico archivo, pero si el texto general generado por un comando es mucho, de pronto se necesita que los textos de los mensajes de error estn registrados en un archivo aparte. Para hacer la redireccin de la salida estndar de errores de un comando se usa una sintaxis sencilla tambin: se agrega 2>nombre_archivo a la sintaxis normal del comando del
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 188

que se quieren capturar los mensajes de errores y almacenarlos en el archivo seleccionado. Note que igual que con los otros casos, es el shell el que abre el archivo an antes de ejecutar el comando al que se le redirige la salida estndar de errores. Atencin: el shell abre el archivo para salida con la opcin O_CREAT, lo que hace que si no existe lo crea, pero si ya existe lo destruye y luego lo crea nuevo! Ejemplos:
[0 e@Moe ~] rm /etc/hosts override rw-r--r-- root/wheel for /etc/hosts? y rm: /etc/hosts: Permission denied [1 e@Moe ~] rm /etc/hosts 2> mensajes.txt n [0 e@Moe ~] cat mensajes.txt [0 e@Moe ~] r--r-- root/wheel for /etc/hosts?

En el ejemplo se observa cmo los mensajes no se muestran en la ventana de sesin del usuario, pero s quedan almacenados en el archivo seleccionado mensajes.txt. Redireccin de la entrada desde archivos here A veces, es necesario hacer que un comando lea la entrada estndar, pero no se quiere estar presente a la hora del comando para escribir del teclado dicha entrada estndar. Para esta situacin, que la verdad no es tan comn como las dos anteriores, existe la redireccin de entrada desde archivos here. Para redirigir la entrada estndar de un comando, y que no la tome de un archivo, si no que la tome del comando escrito se usa la siguiente sintaxis:
comando << TERMINADOR linea1 de texto linea2 de texto ... TERMINADOR

Ejemplo:
[0 e@Moe /Volumes] wc -l << FIN > Primera linea > Segunda linea > Tercera linea > Cuarta linea > FIN 4

En el ejemplo, el comando wc -l cuenta el nmero de lneas en un archivo, o en la entrada estndar, y en este caso la entrada estndar es todo lo escrito hasta que en una lnea aparezca nicamente el texto indicado como terminador -en el ejemplo el texto FIN-.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

189

Redireccin de la salida sin destruir Muy a menudo se necesita captura la salida de varios comandos, pero si se usa la redireccin tradicional > lo que el ltimo comando genere como salida ser lo nico que quede en el archivo. Para capturar acumulando o agregando, la salida estndar de un comando en un archivo simplemente en el shell se agrega a la sintaxis del comando >> nombre_archivo, donde nombre_archivo es donde se quiere guardar la salida, archivo que si no existe es creado nuevo antes de iniciar la ejecucin del comando redirigido, o al que se le agrega al final del contenido si exista previamente. Ejemplos:
[0 e@Moe /Volumes] ls nuevoRegistro.txt ls: nuevoRegistro.txt: No such file or directory [1 e@Moe /Volumes] ps -u >> nuevoRegistro.txt [0 e@Moe /Volumes] cat nuevoRegistro.txt USER PID %CPU %MEM VSZ RSS TT STAT STARTED e 4971 0.0 0.1 27892 896 p1 S 9:47AM [0 e@Moe /Volumes] date >> nuevoRegistro.txt [0 e@Moe /Volumes] cat nuevoRegistro.txt USER PID %CPU %MEM VSZ RSS TT STAT STARTED e 4971 0.0 0.1 27892 896 p1 S 9:47AM Mon Sep 10 18:20:30 COT 2007

TIME COMMAND 0:01.00 -bash TIME COMMAND 0:01.00 -bash

Como se puede observar en el ejemplo, el se crea el archivo nuevoRegistro.txt con la ejecucin del primer comando -el ps-, y con la ejecucin del segundo obtiene nuevos contenidos, pero no se pierde lo ya guardado con el primer comando. Redireccin de los mensajes de error sin destruir De igual manera como se pueden guardar los textos de salida estndar de los comandos, acumulando al final del archivo, sin perder lo anteriormente guardado, se puede redirigir la salida estndar de errores, tambin sin perder lo anteriormente guardado. Para redirigir la salida estndar de errores sin sobreescribir el archivo simplemente en el shell se agrega a la sintaxis del comando 2>> nombre_archivo, donde nombre_archivo es un archivo de texto que si no existe es creado antes de iniciar la ejecucin del comando, pero si existe se abre para escritura en modo O_APPEND (agregar al final). Ejemplo:
[0 e@Moe /Volumes] rm archivo1.txt 2>> ~/mensajes.txt [1 e@Moe /Volumes] rm archivo2.txt 2>> ~/mensajes.txt [1 e@Moe /Volumes] cat ~/mensajes.txt rm: archivo1.txt: No such file or directory rm: archivo2.txt: No such file or directory

Como se nota en el ejemplo, con la ejecucin del primer comando -rm archivo1.txt- se crea el archivo mensajes.txt, y con la ejecucin del segundo comando se agregan contenidos al mismo. Si se observa el archivo generado mensajes.txt, slo hay texto de mensajes de error
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 190

(como se recordar, el comando rm genera texto con los errores, con la ejecucin normal no muestra ni un solo mensaje). Combinaciones de redirecciones Todos los tipos de redireccin se pueden combinar -mientras tenga sentido-, y en muy pocos casos el rden como se combine importa, pero, no puede mencionarse un mismo archivo ms de una vez. Para enviar la salida estndar de un comando a un archivo, y para, al mismo tiempo enviar la salida estndar de errores al mismo archivo se agrega a la sintaxis del comando
> nombre_archivo 2>&1

Lo anterior debe interpretarse como redirigir la salida a nombre_archivo, y los errores al primero. Ntese que como se usa >, la ejecucin destruye Note que los sis nombre_archivo porque lo crea nuevo. temas Para enviar la salida estndar de un comando a un archivo, sin destruirlo, y para, al mismo tiempo, enviar la salida estndar de errores al mismo archivo se agrega a la sintaxis del comando
>> nombre_archivo 2>>&1

Unix diferencian las m ay las minsculas en sculas de lo de las variables de s nombres ambiente!

Note que hay m s su st it uc i n de estilos de pregunte al instru va ri ab le s, ctor cules!

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

191

Substitucin de Variables
Se ha mencionado ms de una vez que las variables del ambiente de un proceso afectan cmo hace un proceso ciertas tareas. En especial ciertas variables de ambiente afectan cmo funciona el -los?- intrprete de comandos, cmo ejecuta los comandos que se le dan y la apariencia que tiene. En un captulo anterior titulado Ambiente de Trabajo: Procesos y Variables se mencion cmo se listaban, creaban, modificaban y borraban variables del ambiente del shell. Tambin se vi en dicho captulo cmo se hace para publicar las variables de ambiente para que los procesos hijos -del shell- tengan unas copias. Las variables de ambiente existen en el shell, pero no hemos visto an cmo se pueden usar directamente en el shell! Para usar el valor de una variable en el shell se escribe ${nombre_variable} en donde quiera el valor que contiene la variable en el intrprete. Si el nombre no se presta para confusiones puede usarse simplemente $nombre_variable; as si se tiene una variable llamada Host, y se quiere obtener o usar el valor en el momento se escribe ${Host} o simplemente $Host. A la hora de la ejecucin el shell usar el valor dentro de la variable, y no la variable. Ejemplos:
0 root@abe:/> echo $Host 0 root@abe:/> Host=abe.iknow.com 0 root@abe:/> echo Mi servidor es ${Host} Mi servidor es abe.iknow.com 0 root@abe:/> printf "La maquina usada en los ejemplos es $Host\n" La maquina usada en los ejemplos es abe.iknow.com

En el ejemplo se puede observar que la variable Host inicialmente es nula. Usar una variable inexistente o una variable nula en el intrprete de comandos no es error a menos que as se configure el shell. Como segundo paso se crea -o se llena, no lo sabemos- la variable con un nuevo valor y se usa primero con la sintaxis ${variable} y luego se usa con la sintaxis $variable. Aunque lo ms comn es usar $variable, la sintaxis completa ${variable} existe porque las sustuciones de variables son literales y en algunos casos se presta para confusiones:
0 root@abe:/> MES=Sept 0 root@abe:/> echo Estamos en ${MES}iembre Estamos en Septiembre 0 root@abe:/> echo Estamos en $MESiembre Estamos en

Si se observa en detalle el ejemplo, cuando la variable no tiene texto alrededor el shell no tiene problemas en identificar el nombre de la misma y por ello extrae el valor y lo usa, pero despus, como se us la sintaxis sencilla, el shell cree que la variable es MESiembre -ya que es

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

192

un nombre vlido de variable- y como la variable no existe la reemplaza en la ejecucin por un nulo. Variables de ambiente importantes en el shell Existen ciertas variables importantes que modifican cmo hace su trabajo el shell y cmo interpreta lo que el usuario le escribe. Entre esas variables importantes se encuentran: Esta variable es ajustada por el proceso que hace la autenticacin del usuario cuando se conecta -normalmente login-. Contiene la ruta al directorio inicial o personal del usuario.
HOME

Contiene el nombre del usuario con el que se autentic el usuario actual -comnmente lo mismo que retorna whoami, pero no siempre-.
LOGNAME

Esta variable debe contener una lista de directorios separados por : (dos puntos) donde deben buscarse los comandos entrados en el shell sin ruta.
PATH

Esta variable puede contener una lista de directorios separados por : (dos puntos) donde deben buscarse directorios dados como parmetros a cd sin ruta.
CDPATH

Esta variable puede contener un texto o expresin que el shell usar como indicador de mandatos de primer nivel -lo que muestra casi siempre para solicitar instrucciones-.
PS1

Esta variable puede contener un texto o expresin que el shell usar como indicador de mandatos de segundo nivel -lo que muestra cuando hay una instruccin de control sin completar, o una expresin sin terminar, como cuando hay que cerrar unas o unas .
PS2

El shell ksh busca esta variable cada vez que inicia -sea porque el usuario apenas se conecta o porque el usuario inicia ksh a mano. Si es un archivo ejecutable el shell ksh lo ejecuta justo apenas inicia.
ENV 1..9.. 0

El shell almacena en la variable 1 el primer parmetro que se le pase, en la variable 2 el segundo parmetro que se le pase, y as sucesivamente. El shell almacena en la variable 0 el nombre del programa actual -el shell-. Si se est dentro de un shell script contiene el nombre del programa actual tambin, pero esta vez es el shell script. En esta variable se debe almacenar el nombre de la emulacin de terminal actual. Con este valor los programas que controlan el cursor y hacen uso de atributos de pantalla encuentran -en un directorio especfico en cada UNIX- los archivos necesarios para dicho control de cursor y de atributos de pantalla.
TERM

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

193

Con esta variable se puede indicar al comando man dnde encontrar la documentacin de los comandos. Debe ser una lista de directorios separados por : (dos puntos).
MANPATH

Con esta variable el shell sabe como separar las palabras (tokens) que componen la instruccin justo entrada. Es una lista de caracteres simplemente. De manera estndar inicia en espacio, tabulador, retorno de carro.
IFS

Ejemplos:

En esta variable el shell almacena el entero cdigo de retorno del ltimo comando ejecutado.
?

Cada vez que se usa esta variable (que se obtienen sus contenidos) el shell genera un nmero pseudo-aleatorio entero pequeo.
RANDOM

En esta variable el shell almacena el nmero de segundos que han pasado desde que inici -el shell-.
SECONDS

0 root@abe:/> echo $HOME / 0 root@abe:/> echo $LOGNAME root 0 root@abe:/> echo $PATH /usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java14/jre/bin:/usr/ java14/bin:/usr/local/bin:/opt/freeware/bin:/usr/local/sbin:/usr/local/bin:/ opt/freeware/sbin:/opt/freeware/bin:/usr/local/sbin:/usr/local/bin 0 root@abe:/> echo $CDPATH 0 root@abe:/> echo $PS1 $? $LOGNAME@$HOST:$PWD> 0 root@abe:/> echo $PS2 ... 0 root@abe:/> echo $ENV //.kshrc 0 root@abe:/> echo $1 0 root@abe:/> echo $0 -bash 0 root@abe:/> echo $TERM xterm 0 root@abe:/> echo $MANPATH :/usr/share/man:/opt/freeware/man 0 root@abe:/> echo $IFS 0 root@abe:/> echo $RANDOM 30151 0 root@abe:/> echo $SECONDS 8454

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

194

Note que la su bstitucin de comandos no us a la entrada o la salida estndar de que necesita in l comando formacin de otro. El she ll captura informacin y hace un reemplazo de text o literal.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

195

Substitucin de Comandos
Gran parte del enorme poder que tienen los sistemas UNIX est basado en una idea sencilla: cada herramienta o comando debera hacer una sola cosa pero hacerla lo mejor posible, as el comando listar usuarios no debera ordenarlos segn un criterio, pero debera haber un comando ordenar que puede ordenar lo mejor posible cualquier cantidad de tems, y debera haber una manera de combinarlos. Esta es la base de la filosofa Unix y es como trabajan todos los UNIX en general. Una manera de combinar comandos es a travs de la sustitucin de comandos. De qu se trata? de obtener los textos generados por algn comando y usarlos como parte de la sintaxis de otro comando. Para sustituir los textos generados por un comando y usarlos como parte de la sintaxis de otro comando se agrega a la sintaxis del segundo comando, en el sitio donde se necesita el texto del primer comando, la construccin `primer comando`. Note que la comilla inversa o acento grave es el smbolo a la izquierda del 1 en un teclado qwerty en ingls. Como este smbolo en algunos teclados es algo complicado de obtener, puede usarse la construccin $ (primer comando) en el mismo sitio de la sintaxis del segundo comando, y as obtener lo mismo. Este tipo de sustitucin es ms clara con unos ejemplos: Ejemplo: El usuario necesita todos los das crear un archivo de registro .log que contenga lo del da nicamente, por eso sera mejor que el archivo llevase dentro del nombre la fecha. La mejor manera es usando un comando que automticamente obtenga la fecha y la convierta en un nombre de archivo. Note que la redireccin no aplica porque el comando no necesita ni recibe entrada estndar -por ejemplo-.
e@abe:e/> ls *log ls: 0653-341 The file *log does not exist. e@abe:e/> touch app_$(date +'%Y%m%d').log e@abe:e/> ls *log app_.log app_20070913.log

En el ejemplo se observa cmo se aprovecha que puede usarse el comando date para obtener la fecha en el momento de ejecucin y en algn formato prctico. Se usa substitucin de comandos para capturar el texto generado por date y usarlo como parte de la sintaxis del comando touch. Podra haberse usado date +'%Y%m%d', usar las facilidades para copiar y pegar y luego escribir el comando touch con la sintaxis adecuada. Si se usa substitucin de comandos el shell ejecuta en varias fases: Ejecuta primero lo que est entre $( ) o ` `, capturando el texto. Reemplaza en lo escrito por el usuario $( ) o ` ` y lo que lleva dentro por los textos capturados.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 196

Ejecuta el comando transformado. Ntese que pueden anidarse varias ejecuciones con substitucin de comandos, pero usando las comillas inversas es difcil, usando $( ) es fcil. Pregunta: Cmo puedo guardar el directorio actual en una variable?

Note que algunos teclados no tienen | si no un smbolo de barra cortada . Si el teclado no tiene la barr a completa el smbolo de barr a totalmente equi cortada es valente y se puede usar.

Ntese: algunos com reciben por entra andos no da estndar fcilmente, p ero en la documentaci n pueden informar cmo. Muchos usan una sintaxis de a brir archivo con el archivo -

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

197

Redireccin: Tuberas
En algunos casos se necesita que un comando procese directamente los datos generados por otro (algo semejante a la substitucin de comandos), pero los datos los puede usar el segundo comando -el procesador- tomndolos de un archivo, o mejor, de la entrada estndar. Este es el caso mencionado en querer una lista ordenada de los usuarios del sistema; hay un comando que genera la lista sin ordenar, y hay un comando que ordena cualesquiera tems. Estos casos en general traducen a conectar la salida estndar de un comando directamente a la entrada estndar de otro comando. Para conectar la salida estndar de un primer comando con la entrada estndar de otro comando se usa la construccin primer comando | segundo comando. En los intrpretes shell Posix el smbolo de barra vertical (llamado comnmente en ingls pipe) conecta la salida estndar del comando justo antes de l con la entrada estndar del comando justo despus. Ejemplo:
e@abe:e/> echo "Hola super usuario" | write root Message from e on abe (pts/0) [Wed Sep 19 00:41:51 EST 2007] ... Hola super usuario <EOT> e@abe:e/> echo "Cuerpo del mensaje More...de correo More... More...Ramon Barrios Lascar | mail -s Mensaje 2007-09-19" RamonBarriosLascar@gmail.com

Note que en el intrprete shell los dos comandos se ejecutan inmediata y simultneamente para poder hacer la conexin del archivo salida estndar de uno con el archivo entrada estndar del segundo. No use comandos que tengan alguna dependencia temporal. Comandos filtro En Unix se dice que un comando es un filtro cuando dicho comando lee o puede leer texto de la entrada estndar y cuando bota o puede botar texto producido por la salida estndar. Estos comandos se supone que de alguna manera transforman -como un paso de una cadena de produccin- lo que reciben y lo pasan al siguiente comando de una cadena. Un comando que es filtro puede estar al comienzo de una secuencia de tuberas, en la mitad, o al final de una cadena de tuberas. Algunos comandos pueden usarse slo para iniciar o terminar una secuencia de tuberas, pero entonces no se les denomina filtros.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

198

Unix no asume que lo que pasa de un comando a otro en una combinacin de comandos por tubera es texto, no hace transformaciones, por lo que puede no ser texto y funciona, aunque la mayora de los comandos lo que procesan y generan -al menos en las tuberas- es texto.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

199

Escapes
Como se ha observado, el shell hace una interpretacin bastante extensa del texto que se escribe en la lnea de comandos, haciendo reemplazos contnuamente basndose principalmente en ciertos smbolos, por esa razn cuando se quieren usar los smbolos como parte de un comando hay el problema de hacer que el intrprete shell no los reemplace. El caso ms comn es el uso de los espacios. El caracter espacio es el separador de tems usado principalmente, buscando ste el shell separa lo que se da despus del nombre del comando en opciones, argumentos, y cada uno de los argumentos los distingue de los otros porque se separan por espacios. En especial la sintaxis para guardar un valor dentro de una variable de ambiente es variable=valor, pero qu si el valor que se necesita dentro de una variable est compuesta de varias variables? Cuando se usa el trmino escape dentro de esta seccin se quiere decir hacer que el significado no sea el comn; as que escapar un espacio es hacer que el espacio no tenga el significado como separador de tems que normalmente tiene; escapar un smbolo de pesos es hacer que el smbolo pesos no signifique usar valor de variable que normalmente tiene, y as. En UNIX -realmente en el intrprete shell POSIX- hay tres maneras de hacer que un o unos caracteres no tengan el significado que normalmente tienen, es decir de escaparlos. Escape de un nico caracter: smbolo \ Para quitarle el significado especial a un nico caracter o smbolo -o lo contrario, para darle significado especial a un caracter que normalmente no tiene- se usa el caracter smbolo \ (en ingls backslash). Este smbolo cuando se antepone a un caracter especial le quita su significado especial y lo convierte en un caracter de texto simple: un * Note que pocos caract ya no significar todos los caracteres posibles en un nombre de archivo, tienen significado espeeres ci al cuando llevan co mo prefijo a significar simplemente asterisco. Algunos caracteres normales se \. Deber consul tars de C para sabe e una gua convierten en especiales cuando no lo son pero se les antepone un r cules son todos. smbolo \ -estos son los escapes del lenguaje C-. Ejemplos A:
e@abe:e/> echo * LitteFile MadRamon 1.png MiNombre.txt NuevoVacio.txt actual.txt app_.log app_20070913.log archivo A.txt archivo.part.txt archivo.txt archivo23.txt archivoA.txt archivoAB.txt archivoE.txt archivoZ.txt archivoaB.txt archivoab.txt dato viejo fechaActual.txt fileA.c fileA.cob fileA.txt fileB fileC fileD fileE fileF fileG fileH fileI nuevoArchiv2.txt procesos.txt ramon.txt subdir1 e@abe:e/> echo \* * e@abe:e/> echo La variable con mi directorio es $HOME

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

200

La variable con mi directorio es /home/e e@abe:e/> echo La variable con mi directorio es \$HOME La variable con mi directorio es $HOME

En el primer ejemplo se usa el smbolo * y como no se toma ningn cuidado especial el shell lo interpreta con su significado de siempre todos los caracteres posibles en los nombres de los archivos y como est slo termina significando todos los archivos. Como echo repite simplemente el texto que se le de como argumentos simplemente muestra los nombres de todos los archivos. En el segundo ejemplo se le quita el significado especial al asterisco, usando \*, y como echo simplemente repite escribiendo a la salida estndar los argumentos que se le den, la salida obtenida es un simple *. En el tercer ejemplo se usa $HOME que normalmente obtiene el contenido N de una variable -en este caso HOME-, que se da a echo, que muestra el texto, obote que no hay la manera de tener unas ' dent incluyendo el contenido de la variable. En el cuarto ejemplo se vara un encerrado en ' ' ro de texto . poquito simplemente agregando \ al smbolo $, lo que logra que $ no sea especial -donde significa obtener valor contenido en la variable que sigue-, as que un $ es un simple $, por lo que al lado de un nombre de una variable no obtiene el valor de la variable, as que echo simplemente repite un texto, un smbolo pesos y un texto que casualmente es el nombre de una variable. Ejemplo B:
e@abe:e/> echo "Texto compuesto de\ndos lineas" Texto compuesto de dos lineas e@abe:e/> echo "Mostrar es un backslash es especial: \\" Mostrar es un backslash es especial: \

En este nuevo ejemplo se usa \ a la inversa: el caracter n que normalmente no tiene nada de especial al tener un escape como prefijo se convierte en un smbolo especial -porque tiene un significado especial dentro de una cadena de texto en lenguaje C-, en este caso en un cambio a siguiente lnea. El ejemplo termina mostrando dos lneas porque a mitad, un caracter del texto significa cambio a siguiente lnea. En el segundo caso mostrado se demuestra cmo obtener un backslash que no tenga significado especial -donde especial quiere decir hacer escape al caracter que sigue-, hay que usar un backslash para quitare el significado especial al backslash que sigue! Escape de todos los significados especiales: ' Si son varios los smbolos o textos a los que se le quiere remover todo tipo de significados especiales tal vez sea ms sencillo usarlos en otra sintaxis: encerrarlos entre un par de smbolos comilla recta sencilla no tipogrfica, es decir hacer una construccin como 'texto'. Cuando un texto en la lnea de comandos est encerrado entre ' ' todos los caracteres dentro del par de ' ' pierden su significado especial. Cuando se indica todos es todos, ni an el smbolo \ tiene significado especial dentro de un par de ' '.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 201

Ejemplos:
e@abe:e/> echo 'Texto comun y especial \*' Texto comun y especial \* e@abe:e/> echo 'Texto menos especial' Texto menos especial e@abe:e/> Variable='Varias palabras en una variable' e@abe:e/> echo $Variable Varias palabras en una variable e@abe:e/> echo '$Variable' $Variable

Se observa cmo el comando echo muestra \* cuando stos smbolos estn encerrados en ' ya que ni \ ni * son especiales cuando as estn encerrados. Como se ve en el segundo caso del ejemplo, los caracteres sin significado especial siguen siendo caracteres comunes cuando estn dentro de las comillas rectas no tipogrficas. En el tercer caso de los ejemplos se muestra cmo hacer que un texto de varias palabras se tome como un nico tem. Dentro de las comilla ' ni los espacios son especiales, en se ejemplo, lo que se guarda en la variable es un nico tem, el que tenga espacios no tiene nada de especial. En el el ltimo caso se muestra como la sustitucin de variables no tiene efecto dentro de las comillas simples no tipogrficias, porque el smbolo de pesos como cualquier otro caracter est sin significado especial mientras est dentro de ' '. Escape de no todos los significados especiales: " Cuando son varios los smbolos dentro de un texto que se entra en el indicador de mandatos del shell pero se quieren hacer ciertas excepciones se puede usar otro tipo de escape. Este otro tipo de escape del que se hace mencin es el encerrar el texto entre " ". Cuando se encierra un texto entre " " la mayora de los smbolos y caracteres pierden su significado especial, exceptuando por !, $, , \, {, }. As, ni los espacios, ni ?, ni *, ni tienen significado especial, son simples smbolos. Los caracteres que cuando tienen un prefijo \ toman significado especial dentro de las comillas dobles " " siguen convirtindose en especiales cuando tienen ese prefijo. Ejemplos:
e@abe:e/> echo "Esta es una comilla ' verdad?" Esta es una comilla ' verdad? e@abe:e/> echo "Contenidos de \$HOME: $HOME" Contenidos de $HOME: /home/e e@abe:e/> echo "Para decir \"Todos los nombres\" se usa *" Para decir "Todos los nombres" se usa *

En el primer caso de los ejemplos se nota cmo una comilla sencilla no tiene significado especial dentro de un par de comillas dobles (" "). En el segundo caso de los ejemplos se nota cmo el backslash (\) sigue teniendo dentro de " " el significado de siempre: hacer que lo que sigue no tenga significado especial si normalmente lo hace, hacer que lo que siga tenga significado especial si normalmente no lo hace. Se muestra en el tercer caso de los
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 202

ejemplos cmo obtener unas comillas literales (") dentro de un par de comillas " ", usando backslash. Se muestra tambin cmo el * no tiene significado especial dentro del par de " ".

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

203

Utilidades de Texto
El Concepto
Cuando inici el diseo y desarrollo de UNIX, por all en la prehistoria de finales de la dcada de los sesentas lo imperativo en AT&T era que se obtuviera un sistema para procesar ingentes cantidades de texto que finalmente se convertiran en manuales tcnicos de servicio. Por esta razn nica, desde el comienzo se pens en que UNIX tuviese mltiples comandos de manipulacin de texto que pudieran combinarse para obtener lo que AT&T necesitaba -y lo que los usuarios queran hacer-. Un UNIX tpico termina entonces siendo un sistema con ingentes cantidades de comandos cuyo producido es texto, casi siempre texto plano sin formato (inicialmente ASCII, pero despus interpretable con cdigos de pgina), y textos que pueden pasarse y mandarse de un comando a otro, en secuencias y cadenas. En un UNIX normal, sin instalaciones adicionales o agregados se dispone de centenares de comandos, muchos de ellos -decenas- son y existen nicamente para procesar texto. Estos comandos existen y han existido por dcadas, y han sido optimizados a travs del tiempo, por lo que es difcil encontrar implementaciones para lo mismo que sean tan o ms eficientes. Dentro de lo que veremos en este captulo estn: Cmo ordenar texto -y archivos de texto-. Cmo filtrar texto -y archivos de texto-. Cmo cortar texto, juntar, combinar. Otras operaciones con texto -y archivos de texto-.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

204

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

205

Volcar texto a la salida estndar: cat

cat

Para volcar un texto a la salida estndar en UNIX normalmente hay simplemente que redirigirla, pero en muchos casos es prctico tener un comando. Este comando lleva por nombre cat (catenate), que lee la entrada estndar o los archivos dados como argumento y vuelca, sin pausa ni separacin los contenidos de todos a la salida estndar. La sintaxis de cat es muy sencilla:
cat [ -r ] [ -v [ -e ] [ -t ] ] [ archivo ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. La opcin r se usa para que cat reemplace en la salida varias lneas en blanco consecutivas por una sola. La opcin v se usa para que cat reemplace en la salida los caracteres de control por ^octal donde octal es el nmero de tres octales que representa al caracter de control. Al mismo tiempo cat reemplaza en la salida otros caracteres no mostrables por M-x donde x es un caracter ASCII que resulta de apagar el bit ms significativo del caracter no mostrable por un 0. Cuando se usa la opcin v tambin se pueden usar las opciones e y t. La opcin e se usa para que cat muestre un smbolo $ para representar el fin de cada lnea. La opcin t se usa para que cat reemplace en la salida el caracter tabulador por un ^I. Ejemplos:
0 root@abe:/etc> cat passwd AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 206

root:!:0:0::/:/usr/bin/bash daemon:!:1:1::/etc: bin:!:2:2::/bin: sys:!:3:3::/usr/sys: adm:!:4:4::/var/adm: uucp:!:5:5::/usr/lib/uucp: guest:!:100:100::/home/guest: nobody:!:4294967294:4294967294::/: lpd:!:9:4294967294::/: lp:!:11:11::/var/spool/lp:/bin/false invscout:!:6:12::/var/adm/invscout:/usr/bin/ksh snapp:!:200:13:snapp login user:/usr/sbin/snapp:/usr/sbin/snappd ipsec:!:201:1::/etc/ipsec:/usr/bin/ksh nuucp:!:7:5:uucp login user:/var/spool/uucppublic:/usr/sbin/uucp/uucico sshd:!:202:201::/var/empty:/usr/bin/ksh j:!:505:0:Ramon Barrios Lascar:/home/j:/usr/bin/ksh ldapdb2:!:205:14::/home/ldapdb2:/usr/bin/ksh e:!:501:0:Ramon Barrios Lascar:/home/e:/usr/bin/ksh 0 root@abe:/etc> cat -vte passwd root:!:0:0::/:/usr/bin/bash$ daemon:!:1:1::/etc:$ bin:!:2:2::/bin:$ sys:!:3:3::/usr/sys:$ adm:!:4:4::/var/adm:$ Note que el com ando uucp:!:5:5::/usr/lib/uucp:$ an ms opcione wc tiene s, opciones guest:!:100:100::/home/guest:$ qu e pu ed e re vi sa r en la nobody:!:4294967294:4294967294::/:$ documentacin. lpd:!:9:4294967294::/:$ lp:!:11:11::/var/spool/lp:/bin/false$ invscout:!:6:12::/var/adm/invscout:/usr/bin/ksh$ snapp:!:200:13:snapp login user:/usr/sbin/snapp:/usr/sbin/snappd$ ipsec:!:201:1::/etc/ipsec:/usr/bin/ksh$ nuucp:!:7:5:uucp login user:/var/spool/uucppublic:/usr/sbin/uucp/uucico$ sshd:!:202:201::/var/empty:/usr/bin/ksh$ j:!:505:0:Ramon Barrios Lascar:/home/j:/usr/bin/ksh$ ldapdb2:!:205:14::/home/ldapdb2:/usr/bin/ksh$ e:!:501:0:Ramon Barrios Lascar:/home/e:/usr/bin/ksh$

Como se notar, en el primer caso de los ejemplos cat vuelca los contenidos del archivo a la salida estndar, sin hacer ms. En el segundo caso de los ejemplos cat muestra los caracteres especiales como smbolos -el archivo no contiene caracteres especiales- y los fines de lnea con unos smbolos $.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

207

Contar caracteres, palabras, lneas: wc

wc

20

Contar texto es una de las operaciones ms bsicas. Uno de los comandos cuenta lneas, palabras y caracteres, y puede decrsele que cuente y reporte cualesquiera de los tres. Para todo lo mencionado se usa el comando wc (word count), que no slo cuenta palabras como indicara el nombre en ingls-. La sintaxis es muy sencilla:
wc [ -c | -w | -l ] [ archivo ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. El smbolo | indica posibilidad, se usa para mostrar las posibles opciones, no hace parte de la sintaxis. Pueden drsele entre cero y tres opciones. Pueden drsele cero o ms archivos. Cuando no se dan archivos wc lee de la entrada estndar. La opcin c es para que cuente y reporte los caracteres en la entrada estndar o los archivos dados. La opcin w es para que cuente y reporte las palabras en la entrada estndar o los archivos dados. La opcin l es para que cuente y reporte las lneas en la entrada estndar o los archivos dados. Si no se dan archivos cuenta y reporta lo ledo por entrada estndar. Si se dan archivos no lee de la entrada estndar.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

208

Si se dan varios archivos cuenta y reporta por cada archivo y reporta un total al final del reporte. Ejemplos:
0 root@abe:/etc> wc sudoers 29 98 604 sudoers 0 root@abe:/etc> wc -l /etc/passwd /etc/group 18 /etc/passwd 29 /etc/group 47 total 0 root@abe:/etc> who | wc -l 1

El primer caso del ejemplo muestra cmo cuando no se dan opciones reporta tres nmeros: el nmero de lneas, el nmero de palabras y el nmero de caracteres, en se orden. El segundo caso de los ejemplos muestra cmo puede solicitarse una nica estadstica, en este caso el nmero de lneas, y como se indicaron dos archivos como argumentos primero se reporta por archivo y al final un total. El tercer caso de los ejemplos N qu muestra cmo pueden reportarse estadsticas de un texto que no est en aotem e el comando nl tiene n s op un archivo, en este caso, como no se indicaron argumentos el comando qu e pu ed e ciones, ropciones re vi sa en la documentacin. wc lee de la entrada estndar, que termina siendo la salida estndar del comando anterior, que se conect con el smbolo |.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

209

Numerar lneas de texto: nl


1 2 3 4

nl

5 6 7 8 9 10

A menudo hay que listar archivos -o texto que no necesariamente est en un archivo-. Esta operacin a veces se usa para indicar dnde lgicamente se ubica algo, y es ms fcil si se reporta usando nmeros de lnea. La manera ms fcil de listar texto con las lneas numeradas es usando el comando nl (number lines). Este comando toma un archivo o si no se da el archivo la entrada estndar, y lo muestra con las lneas numeradas, posiblemente segn unas opciones dadas. La sintaxis puede parecer complicada -por el nmero de opciones- pero la verdad es muy sencilla:
nl [-b modo] [-n formato] [-s separador] [-w nmero] [-l nmero] [ archivo ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. Pueden drsele cero o ms opciones. Pueden drsele ninguno o un archivo. Cuando no se indica archivo el comando nl lee el texto de la entrada estndar. La opcin b se usa para escoger el modo como se numeran las lneas. El modo a indica que se numeran todas las lneas, el modo t indica que se numeran las lneas que sean visibles -no contara las lneas vacas o de slo blancos y/o tabuladores, el modo ppatrn numera slo las lneas que cumplen con un patrn -el patrn es una expresin regular-. El modo predeterminado es el modo t. La opcin n se usa para escoger el modo como se muestran los nmeros de lneas. El modo ln muestra los nmeros justificados a la izquierda, y sin ceros a la izquierda, el modo rn muestra los nmeros justificados a la derecha, y sin ceros a la izquierda, el modo rz muestra los nmeros con un ancho fijo, completados con ceros a la izquierda. El modo predeterminado es el modo rn.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 210

La opcin s se usa para especificar un separador entre los nmeros y las lneas de la entrada. El separador predeterminado es un caracter tabulador. La opcin w se usa para escoger un ancho de columna para los nmeros de lnea. El ancho de columna predeterminado es 6. La opcin l se usa para indicar que varias lneas en blanco cuentan como una sola, as si se usa -l 3 el comando nl contara hasta tres lneas en blanco seguidas como una sola. El valor predeterminado de la opcin l es 1. Ejemplos:
0 root@abe:/etc> nl passwd 1 root:!:0:0::/:/usr/bin/bash 2 daemon:!:1:1::/etc: 3 bin:!:2:2::/bin: 4 sys:!:3:3::/usr/sys: 5 adm:!:4:4::/var/adm: 6 uucp:!:5:5::/usr/lib/uucp: 7 guest:!:100:100::/home/guest: 8 nobody:!:4294967294:4294967294::/: 9 lpd:!:9:4294967294::/: 10 lp:!:11:11::/var/spool/lp:/bin/false 11 invscout:!:6:12::/var/adm/invscout:/usr/bin/ksh 12 snapp:!:200:13:snapp login user:/usr/sbin/snapp:/usr/sbin/snappd 13 ipsec:!:201:1::/etc/ipsec:/usr/bin/ksh 14 nuucp:!:7:5:uucp login user:/var/spool/uucppublic:/usr/sbin/uucp/ uucico 15 sshd:!:202:201::/var/empty:/usr/bin/ksh 16 j:!:505:0:Jorge Valbuena:/home/j:/usr/bin/ksh 17 ldapdb2:!:205:14::/home/ldapdb2:/usr/bin/ksh 18 e:!:501:0:Ramon Barrios Lascar:/home/e:/usr/bin/ksh 0 root@abe:/etc> nl passwd group 1 root:!:0:0::/:/usr/bin/bash 2 daemon:!:1:1::/etc: 3 bin:!:2:2::/bin: 4 sys:!:3:3::/usr/sys: 5 adm:!:4:4::/var/adm: 6 uucp:!:5:5::/usr/lib/uucp: 7 guest:!:100:100::/home/guest: 8 nobody:!:4294967294:4294967294::/: 9 lpd:!:9:4294967294::/: 10 lp:!:11:11::/var/spool/lp:/bin/false 11 invscout:!:6:12::/var/adm/invscout:/usr/bin/ksh 12 snapp:!:200:13:snapp login user:/usr/sbin/snapp:/usr/sbin/snappd 13 ipsec:!:201:1::/etc/ipsec:/usr/bin/ksh 14 nuucp:!:7:5:uucp login user:/var/spool/uucppublic:/usr/sbin/uucp/ uucico 15 sshd:!:202:201::/var/empty:/usr/bin/ksh 16 j:!:505:0:Jorge Valbuena:/home/j:/usr/bin/ksh 17 ldapdb2:!:205:14::/home/ldapdb2:/usr/bin/ksh 18 e:!:501:0:Ramon Barrios Lascar:/home/e:/usr/bin/ksh 1 root@abe:/etc> nl -w 2 -s\)\ -n ln passwd AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 211

1 ) 2 ) 3 ) 4 ) 5 ) 6 ) 7 ) 8 ) 9 ) 10) 11) 12) 13) 14) 15) 16) 17) 18)

root:!:0:0::/:/usr/bin/bash daemon:!:1:1::/etc: bin:!:2:2::/bin: sys:!:3:3::/usr/sys: adm:!:4:4::/var/adm: uucp:!:5:5::/usr/lib/uucp: guest:!:100:100::/home/guest: nobody:!:4294967294:4294967294::/: lpd:!:9:4294967294::/: lp:!:11:11::/var/spool/lp:/bin/false invscout:!:6:12::/var/adm/invscout:/usr/bin/ksh snapp:!:200:13:snapp login user:/usr/sbin/snapp:/usr/sbin/snappd ipsec:!:201:1::/etc/ipsec:/usr/bin/ksh nuucp:!:7:5:uucp login user:/var/spool/uucppublic:/usr/sbin/uucp/uucico sshd:!:202:201::/var/empty:/usr/bin/ksh j:!:505:0:Jorge Valbuena:/home/j:/usr/bin/ksh ldapdb2:!:205:14::/home/ldapdb2:/usr/bin/ksh e:!:501:0:Ramon Barrios Lascar:/home/e:/usr/bin/ksh

En el primer caso de los ejemplos se muestra cmo es el listado predeterminado del comando nl. Se da un nico archivo. En el segundo caso de los ejemplos se muestra cmo el comando nl ignora los archivos dados despus del primero -puede compararse con el primer caso-. En el tercer caso de los ejemplos se muestra cmo los nmeros de lnea ocupan menos espacio porque se indic que van en una columna de dos caracteres de ancho -con la opcin w2-, se separan con un parntesis y un espacio -con la opcin s) -, y que los nmeros se justifican a la izquierda -con la opcin nln-.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

212

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

213

Paginar Texto: pg
Para leer textos en un archivo o en la entrada estndar no siempre se usa vi. En especial vi no puede leer texto que no est en un archivo -no puede leer textos de la entrada estndar-. Ms flexible y rpido -y sin peligro de editar inadvertidamente el archivo- es usar el comando pg (paginate) que lee textos y los muestra por salida estndar (casi siempre por pantalla) por pginas que llenan la pantalla y luego se detiene para esperar comandos. La sintaxis de pg es:
pg [ +nmero | +/patrn/ ] [ -e ] [ -f ] [ -s ] [ archivo ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. El smbolo | indica posibilidad, se usa para mostrar las posibles opciones, no hace parte de la sintaxis. Pueden drsele cero o ms opciones. Pueden drsele cero o ms archivos. Cuando no se le dan archivos el comando pg lee de la entrada estndar. Con +nmero se indica que el comando pg debe comenzar a mostrar en cierto nmero de lnea. Con +/patrn/ se indica que el comando pg debe comenzar a mostrar a partir de la primera lnea que contenga el patrn de texto. Con la opcin e se indica que el comando pg no debe esperar un Enter entre archivo y archivo. Con la opcin f se indica que el comando pg no debe partir las lneas que no caben en la pantalla. Con la opcin s se indica que el comando debe resaltar todos los mensajes e indicadores en la ltima lnea de la pantalla. Ejemplos: Para mostrar un archivo reporte.txt por pginas se usara:
pg reporte.txt

Para mostrar un archivo reporte.txt por pginas, comenzando con Agosto (estando este texto en una lnea con las maysculas tal cual) se usara:
pg +/Agosto/ reporte.txt

El comando pg es interactivo, con numerosos comandos mientras est funcionando. Este comando tiene un indicador de comandos en la ltima lnea de la pantalla, donde recibe:
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 214

Un nmero, lo que hace que pg se salte a la pgina de ese nmero.


+nmero, lo que hace que pg avance en el texto actual nmero pginas. -nmero, lo que hace que pg retroceda en el texto actual nmero pginas. l hace que pg avance una lnea (el comando es una ele). nmerol hace que pg salte a una parte del texto donde la lnea nmero est de

primera en la pantalla (el comando es nmero ele).


+nmerol hace que pg avance nmero lneas en el texto (el comando es mas

nmero ele).
-nmerol hace que pg retroceda nmero lneas en el texto (el comando es

menos nmero ele).


$ hace que pg vaya a la ltima pgina del texto. No funciona cuando pg est

leyendo la entrada estndar.

/texto/ hace que pg busque avanzando texto. nmero/texto/ hace que pg busque avanzando texto, y se ubique en la nmero

ocurrencia que encuentre.

?texto? hace que pg busque retrocediendo texto. nmero?texto? hace que pg busque retrocediendo texto, y se ubique en la nmero ocurrencia que encuentre. n hace que pg muestre el siguiente archivo de los argumentos. Puede usarse nmeron para que muestre el nmero archivo siguiente (este modo es nmero

ene).
p hace que pg muestre el anterior archivo de los argumentos. Puede usarse nmerop para que muestre el nmero archivo siguiente (este modo es nmero

pe).
s archivo hace que pg guarde el texto actual en el archivo nombrado.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

215

Obtener primeras lneas de texto: head

head

Muchas veces interesan de un texto slo unas pocas lneas del inicio del mismo -por ejemplo es un listado de los usuarios que ms consumen un recurso y nos interesan los ms consumidores nicamente-. Para obtener las primeras lneas de un texto se usa el comando sencillo head. La sintaxis es de verdad sencilla:
head [ -nmero | -n nmero | -c nmero ] [ archivo ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. El smbolo | indica posibilidad, se usa para mostrar las posibles opciones, no hace parte de la sintaxis. Debe darse una opcin. Pueden drsele cero o ms archivos. Cuando no se dan archivos head lee de la entrada estndar. Cuando a head se le dan varios archivos muestra las primeras lneas del texto combinado de los archivos, no muestra las primeras lneas de cada texto. Cuando se usa -nmero el comando head muestra las primeras nmero lneas del (de los) archivo(s). Esta es la sintaxis antigua del comando. Cuando se usa -n nmero el comando head muestra lo mismo, las primeras nmero lneas del archivo. Cuando se usa -c nmero el comando head muestra los primeros nmero caracteres del archivo.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

216

Ejemplos:
0 root@abe:/etc> cat passwd root:!:0:0::/:/usr/bin/bash daemon:!:1:1::/etc: bin:!:2:2::/bin: sys:!:3:3::/usr/sys: adm:!:4:4::/var/adm: uucp:!:5:5::/usr/lib/uucp: guest:!:100:100::/home/guest: nobody:!:4294967294:4294967294::/: lpd:!:9:4294967294::/: lp:!:11:11::/var/spool/lp:/bin/false invscout:!:6:12::/var/adm/invscout:/usr/bin/ksh snapp:!:200:13:snapp login user:/usr/sbin/snapp:/usr/sbin/snappd ipsec:!:201:1::/etc/ipsec:/usr/bin/ksh nuucp:!:7:5:uucp login user:/var/spool/uucppublic:/usr/sbin/uucp/uucico sshd:!:202:201::/var/empty:/usr/bin/ksh j:!:505:0:Jorge Valbuena:/home/j:/usr/bin/ksh ldapdb2:!:205:14::/home/ldapdb2:/usr/bin/ksh e:!:501:0:Ramon Barrios Lascar:/home/e:/usr/bin/ksh 0 root@abe:/etc> head -n 5 passwd root:!:0:0::/:/usr/bin/bash daemon:!:1:1::/etc: bin:!:2:2::/bin: sys:!:3:3::/usr/sys: adm:!:4:4::/var/adm: 0 root@abe:/etc> head -c 50 passwd root:!:0:0::/:/usr/bin/bash daemon:!:1:1::/etc: bi

En los ejemplos primero se muestra el archivo completo, usando cat. El segundo caso muestra el uso tpico, con la opcin n para obtener slo algunas de las primeras lneas. El tercer caso de los ejemplos usa la opcin c para obtener slo algunos de los caracteres del inicio del texto, puede observarse que la tercera lnea del texto no aparece completa.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

217

Obtener ltimas lneas de texto: tail

tail

As como muchas veces slo nos interesan las primeras lneas de un texto -para lo que se usa head- otras muchas veces slo nos interesan las ltimas lneas de un texto. Para esto otro existe el comando tail, que muestra las ltimas lneas de un texto o las lneas a partir de una posicin hasta las ltima. La sintaxis de tail es parecida a la del comando head:
tail [ -n signmero | -c signmero | -k signmero ] [ -f ] [archivo ... ]

o tambin:
tail -r [ -n nmero ] [ archivo ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. El smbolo | indica posibilidad, se usa para mostrar las posibles opciones, no hace parte de la sintaxis. Puede darse cero o una opcin. Pueden drsele cero o ms archivos. Cuando no se dan archivos tail lee de la entrada estndar. Cuando se dan varios archivos tail muestra los ltimos contenidos de la combinacin de todos los archivos, no muestra los ltimos contenidos de cada archivo. El parmetro signmero es un nmero individual, o +nmero o -nmero. Cuando se da un nmero individual tail muestra las ltimas nmero unidades del texto (sean lneas, caracteres o kilobytes). Cuando se da +nmero el comando tail muestra las ltimas unidades del texto a partir de la nmero unidad entrada (sean

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

218

lneas, caracteres o kilobytes). Cuando se da -nmero el comando muestra las ltimas nmero unidades del texto (igual que cuando no se usa signo). La opcin n se usa para que las unidades sean lneas, as que el comando tail mostrar las ltimas lneas del texto. La opcin c se usa para que las unidades sean caracteres, as que el comando tail mostrar los ltimos caracteres del texto. La opcin k se usa para que las unidades sean kilobytes, as que el comando tail mostrar los ltimos kilobytes del texto. La opcin f se usa para que tail no termine, se quedar leyendo indefinidamente y si encuentra ms contenido en el final del texto ir mostrndolo. La opcin r se usa para que las ltimas lneas las muestre en sentido inverso. Slo puede mostrar mximo los ltimos 20KB del texto. Cuando no se dan opciones tail funciona como si se hubiera indicado -n10, es decir mostrar las ltimas diez lneas del texto. Ejemplos:
0 root@abe:/etc> cat passwd root:!:0:0::/:/usr/bin/bash daemon:!:1:1::/etc: bin:!:2:2::/bin: sys:!:3:3::/usr/sys: adm:!:4:4::/var/adm: uucp:!:5:5::/usr/lib/uucp: guest:!:100:100::/home/guest: nobody:!:4294967294:4294967294::/: lpd:!:9:4294967294::/: lp:!:11:11::/var/spool/lp:/bin/false invscout:!:6:12::/var/adm/invscout:/usr/bin/ksh snapp:!:200:13:snapp login user:/usr/sbin/snapp:/usr/sbin/snappd ipsec:!:201:1::/etc/ipsec:/usr/bin/ksh nuucp:!:7:5:uucp login user:/var/spool/uucppublic:/usr/sbin/uucp/uucico sshd:!:202:201::/var/empty:/usr/bin/ksh j:!:505:0: Jorge Valbuena:/home/j:/usr/bin/ksh ldapdb2:!:205:14::/home/ldapdb2:/usr/bin/ksh e:!:501:0:Ramon Barrios Lascar:/home/e:/usr/bin/ksh 0 root@abe:/etc> tail -n 5 passwd nuucp:!:7:5:uucp login user:/var/spool/uucppublic:/usr/sbin/uucp/uucico sshd:!:202:201::/var/empty:/usr/bin/ksh j:!:505:0:Ramon Barrios Lascar:/home/j:/usr/bin/ksh ldapdb2:!:205:14::/home/ldapdb2:/usr/bin/ksh e:!:501:0:Ramon Barrios Lascar:/home/e:/usr/bin/ksh 0 root@abe:/etc> tail -n +5 passwd adm:!:4:4::/var/adm: uucp:!:5:5::/usr/lib/uucp: AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 219

guest:!:100:100::/home/guest: nobody:!:4294967294:4294967294::/: lpd:!:9:4294967294::/: lp:!:11:11::/var/spool/lp:/bin/false invscout:!:6:12::/var/adm/invscout:/usr/bin/ksh snapp:!:200:13:snapp login user:/usr/sbin/snapp:/usr/sbin/snappd ipsec:!:201:1::/etc/ipsec:/usr/bin/ksh nuucp:!:7:5:uucp login user:/var/spool/uucppublic:/usr/sbin/uucp/uucico sshd:!:202:201::/var/empty:/usr/bin/ksh j:!:505:0:Jorge Valbuena:/home/j:/usr/bin/ksh ldapdb2:!:205:14::/home/ldapdb2:/usr/bin/ksh e:!:501:0:Ramon Barrios Lascar:/home/e:/usr/bin/ksh

En los ejemplos el primer caso muestra el archivo completo. El segundo caso de los ejemplos muestra cmo se usa tail para obtener las ltimas lneas de un archivo (con la opcin n nmero). El tercer caso muestra cmo se usa tail para obtener las lneas de un archivo desde la nmero dado hasta la ltima (con la opcin n +nmero).

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

220

Note que el com ando cut no corta -como se pensara dado el nombre-, realm en hace es selecciona te lo que r.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

221

Obtener columnas de texto: cut

cut

Otra necesidad en el procesamiento de texto que a veces surge es la de obtener una o ms de las columnas de un texto -o quitar una de las columnas-. Para hacer algo as no se necesita una herramienta de programacin, se necesita tan slo conocer una utilidad sencilla de UNIX que lleva por nombre cut. Con cut se pueden obtener columnas de texto dado un separador -de columnas- o dadas las posiciones exactas de los caracteres. Cuando al comando cut se le indican unas columnas esas son las que se copiarn de la entrada -o de los archivos- a la salida estndar, las dems se ignoran. La sintaxis del comando cut es sencilla:
cut [ -c columnas ] | [ -f columnas [ -d separador ] [ -s ] ] [ archivo ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. El smbolo | indica posibilidad, se usa para mostrar las posibles opciones, no hace parte de la sintaxis. Debe darse una de las opciones c o f. Pueden drsele cero o ms archivos. Cuando no se dan archivos cut lee de la entrada estndar. Las columnas que se especifican son las que aparecen en la salida estndar. Las columnas pueden especificarse como nmero individual -as 5 indica la quinta columna-; pueden especificarse como una lista de nmeros separados por comas (,) -as 5,7,9 indican la columna quinta, sptima y novena-; pueden especificarse como un rango de nmeros, donde 5-9 indican las columnas de la quinta a la novena, inclusive; y pueden usarse combinaciones. Cuando se usa un rango de columnas y no se indica el inicio el comando cut asume que se deben copiar desde la primera columna -as que -5 indica las columnas hasta la quita-, y cuando
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 222

se usa un rango pero no se especifica la ltima el comando cut asume que se deben copiar hasta la ltima -as que 5- indica las columnas desde la quinta hasta la ltima-. La opcin c indica al comando cut que las columnas se estn especificando por posicin exacta de caracteres en el texto. El primer caracter del texto est en la posicin 1. La opcin f indica al comando cut que las columnas se estn especificando visualmente, donde una columna se separa de la siguiente por exactamente un separador. El separador predeterminado es un tabulador. Cuando se usa la opcin f pueden usarse las opciones d y s. La opcin d se usa para indicar al comando cut cul es el caracter separador de columnas. La opcin s se usa para indicar al comando cut que no debe copiar a la salida las lneas del texto que no tienen el separador de columna en ninguna parte. Ejemplos:
e@abe:e/> cat /etc/passwd root:!:0:0::/:/usr/bin/bash daemon:!:1:1::/etc: bin:!:2:2::/bin: sys:!:3:3::/usr/sys: adm:!:4:4::/var/adm: uucp:!:5:5::/usr/lib/uucp: guest:!:100:100::/home/guest: nobody:!:4294967294:4294967294::/: lpd:!:9:4294967294::/: lp:!:11:11::/var/spool/lp:/bin/false invscout:!:6:12::/var/adm/invscout:/usr/bin/ksh snapp:!:200:13:snapp login user:/usr/sbin/snapp:/usr/sbin/snappd ipsec:!:201:1::/etc/ipsec:/usr/bin/ksh nuucp:!:7:5:uucp login user:/var/spool/uucppublic:/usr/sbin/uucp/uucico sshd:!:202:201::/var/empty:/usr/bin/ksh j:!:505:0:Jorge Valbuena:/home/j:/usr/bin/ksh ldapdb2:!:205:14::/home/ldapdb2:/usr/bin/ksh e:!:501:0:Ramon Barrios Lascar:/home/e:/usr/bin/ksh e@abe:e/> cut -f1 -d: /etc/passwd root daemon bin sys adm uucp guest nobody lpd lp

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

223

invscout snapp ipsec nuucp sshd j ldapdb2 e e@abe:e/> ps -ef | head -n8 | cut -c-15,49UID PID CMD root 1 /etc/init root 69832 /usr/sbin/rsct/bin/rmcd -a IBM.LPCommands -r root 73906 /usr/sbin/syslogd root 82038 /usr/sbin/syncd 60 root 86030 /usr/ccs/bin/shlap64 root 94314 /usr/lib/errdemon root 114794 /usr/sbin/hostmibd

En el primer caso de los ejemplos se usa cat para volcar a la pantalla el archivo completo. En el segundo caso de los ejemplos se usa cut para obtener slo la primera columna del texto (con la opcin f1, pero el texto tiene columnas separadas por el smbolo : se indica esto a cut con d:, ya que de manera predeterminada busca un tabulador). En el tercer caso de los ejemplos usa cut para obtener un listado parcial de procesos; en este caso como el texto generado por ps viene con columnas armadas con ancho exacto se usa cut con la opcin c para indicar dichas columnas: primero hasta cierta posicin, y luego desde cierta posicin hasta el final. Ntese que cut no es usable fcilmente con columnas de ancho variable y que separan columna de columna usando algo variable; para estos casos es mejor usar otra herramienta.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

224

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

225

Combinar texto en columnas: paste

paste

Con el comando cat pueden combinarse dos o ms textos o archivos de manera que queden uno seguido del otro, pero qu se usa cuando hay que combinar unos textos uno al lado del otro? Tampoco hay que usar una compleja herramienta de programacin, hay que usar una herramienta sencilla que conoceremos enseguida: el comando paste. Este comando junta dos o ms textos o archivos y los copia a la salida estndar de manera que los de la entrada se convierten en columnas de la salida estndar. La sintaxis del comando paste es:
paste [ -d lista ] [ -s ] [ archivo1 archivo2 ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. Pueden drsele cero o ms archivos. El comando paste es til de verdad con al menos dos archivos. Cualesquiera de los archivos de la entrada pueden ser reemplazados por -. El argumento - se usa para indicar dnde debe ir -en las columnas- el texto ledo de la entrada estndar. La opcin d se usa para dar una lista de caracteres individuales que deban usarse como separadores de columna. As el primer caracter de la lista se usar para separar la primera columna de la segunda -de la salida-, el segundo caracter de la lista se usar para separar la segunda columna de la tercera -de la salida-. Si hay ms caracteres en la lista que columnas en la salida los caracteres sobrantes se ignoran. Si hay menos caracteres en la lista, las ltimas columnas son separadas usando repetidamente el ltimo caracter de la lista. La opcin s se usa para que paste no arme las columnas tomando igual cantidad de lneas de cada columna de texto, si no que arme las columnas tomando lneas
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 226

del primer archivo de texto hasta el final, luego tomando lneas del segundo archivo de texto hasta el final, y as sucesivamente. Ejemplos:
e@abe:e/> cat Numeros.txt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 e@abe:e/> cat Romanos.txt i ii iii iv v vi vii viii ix x

Los dos primeros casos de los ejemplos simplemente muestran cmo son los contenidos de los archivos Numeros.txt y Romanos.txt. Se usa cat para volcar los contenidos a la salida.
e@abe:e/> paste Numeros.txt Romanos.txt 1 i 2 ii 3 iii 4 iv 5 v 6 vi 7 vii 8 viii 9 ix 10 x 11 12 13 14 15

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

227

El tercer caso de los ejemplos muestra el funcionamiento predeterminado de paste: junta lado a lado los archivos dados, separando los contenidos con un tabulador intermedio.
e@abe:e/> paste -d"|" Numeros.txt Romanos.txt | head -n 5 1|i 2|ii 3|iii 4|iv 5|v

El cuarto caso de los ejemplos muestra cmo usar la opcin d del comando paste para que el listado combinado generado tenga las columnas separadas por medio de otro caracter. Note cmo hay que escapar el smbolo | para que no tenga el significado de redireccin tradicional.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

228

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

229

Combinar Texto en Columnas: join


En los sistemas UNIX est disponible un comando que muchos usuarios ni siquiera imaginan que podra existir. El comando join de los sistemas Unix hace el equivalente a las sentencias SQL SELECT ... INNER JOIN, SELECT ... RIGHT OUTER JOIN, SELECT ... LEFT OUTER JOIN. Este comando combina archivos usando campos que estn presentes en los dos archivos que se usan como entrada. La sintaxis del comando join es:
join [ -1 campo ] [ -2 campo ] [ -a nm | -v nm ] [ -e texto ] [ -o campos ] [ -t sep ] archivo1 archivo2

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. El smbolo | indica posibilidad, se usa para mostrar las posibles opciones, no hace parte de la sintaxis. Deben darse dos archivos ordenados. Uno de los archivos puede reemplazarse por un argumento -. Cuando uno de los argumentos es - el comando join lee la entrada estndar y lo combina con el otro argumento, que se asume es un archivo. La opcin 1 necesita un nmero de campo o columna, columna que se usar como llave para hacer el join en el primer archivo, es decir en archivo1. Se supone que los valores en esta columna se encuentran tambin como valores en una columna del segundo archivo, es decir archivo2. El comando join asume que el archivo1 est ordenado segn esta columna o campo. La opcin 2 necesita un nmero de campo o columna, columna que se usar como llave para hacer el join en el segundo archivo, es decir en archivo2. Se supone que los valores en esta columna se encuentran tambin como valores en una columna del primer archivo, es decir archivo1. El comando join asume que el archivo2 est ordenado segn esta columna o campo. La opcin t se usa para especificar cul es el caracter separador de columnas en ambos archivos de entrada (archivo1 y archivo2) y en la salida estndar generada. Si este caracter se repite seguido el comando join asume que hay columnas con campos vacos. La opcin e se usa para especificar un texto que se usar para presentar en la salida para reeemplazar -en caso de que se desee- los valores nulos en las columnas de la salida.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

230

La opcin o se usa para indicar cules de las columnas de los archivos de entrada se incluirn en la salida generada por join. Cada columna deber especificarse como 1.nmero o 2.nmero, donde 1.nmero indica que el comando join deber copiar la columna nmerosima del primer archivo a la salida, y 2.nmero indica que el comando join deber copiar la columna nmerosima del segundo archivo a la salida. La opcin a se usa para hacer un OUTER JOIN, donde en la salida se incluirn lneas de uno de los archivos de entrada que no tienen campos comunes adicionales a las lneas que se incluyen que son las que tienen campos comunes. La opcin a necesita un argumento 1 o 2, indicando de cul de los archivos se toman las lneas adicionales. La opcin v se usa para que en la salida se filtren las lneas de los archivos de entrada que tienen los campos comunes del join. La opcin v no genera lneas para las lneas con campos comunes del join. La opcin v necesita un argumento 1 o 2 que le indique las lneas de cul de los archivos se copiarn a la salida. Si se incluyen la opciones v y a, como la opcin v es ms fuerte, se ignora la a. Ejemplos:
e@abe:~> cat Celulares.list Ramn Barrios (315)313-7269 Jorge Valbuena (313) 571-6462 Jairo E. Soler (315) 797-1397 Carlos Castilla (313) 433-7386 Jorge Molina M. (315) 344-8150 Alessio Di Mare (311) 688-1162 Jorge Russo X. (311) 818-8709 Omar Villalba (313) 388-7017 Yeimy Fontalvo (300) 817-4126 e@abe:~> cat Empresas.txt Alessio Di Mare Redsis Jairo E. Soler Net.Solutions Jorge Molina M. SENA Jorge Russo Redsis Jorge Valbuena iKnow Ramn Barrios iKnow Yasser Barrios SupraImpresores Yeimy Fontalvo e@abe:~> join -11 -21 -t' ' -e 'N/D' Empresas.txt Celulares.txt Alessio Di Mare Redsis (311) 688-1162 Jairo E. Soler Net.Solutions (315) 797-1397 Jorge Molina M. SENA (315) 344-8150 Jorge Russo Redsis (311) 818-8709 Jorge Valbuena iKnow (313) 571-6462 Ramn Barrios iKnow (315)313-7269 Yeimy Fontalvo N/D (300) 817-4126 e@abe:~> join -t' ' -e '***' -o 0,2.2,1.2 Empresas.txt Celulares.txt Alessio Di Mare (311) 688-1162 Redsis AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 231

Jairo Jorge Jorge Jorge Ramn Yeimy

E. Soler Molina M. Russo Valbuena Barrios Fontalvo

(315) 797-1397 (315) 344-8150 (311) 818-8709 (313) 571-6462 (315)313-7269 (300) 817-4126

Net.Solutions SENA Redsis iKnow iKnow ***

Los primeros dos casos de los ejemplos simplemente muestran los archivos como son. El primer archivo tiene dos columnas, est ordenado por la primera -nombre-, y tiene como separador un tabulador. El segundo archivo tiene dos columnas, est ordenado por la primera -nombre-, y tiene como separador tambin un tabulador. El tercer caso del ejemplo muestra un join usando la primera columna del primer archivo (-1 1), y la primera columna del segundo archivo (-2 1), indica que se use como separador un tabulador (el argumento de la opcin t), y que los campos de las columnas de la salida que estn nulos se completan con N/D (el argumento de la opcin e). En el caso cuarto de los ejemplos se muestra cmo no hay necesidad de indicar la primera columna en los archivos porque es el valor predeterminado para las opciones 1 y 2; tambin se dice que el separador es tabulador aunque es el valor predeterminado para la opcin t; se escoge unas columnas -y un orden- para la salida (la columna del join, con el valor mgico 0, la segunda columna del segundo archivo con 2.2, y la segunda columna del primer archivo con 1.2); tambin se indic que los campos nulos se muestren como *** (el valor de la opcin e).

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

232

Expresiones re gu un cruce entre lares son ex matemticas y un presiones lenguaje de pr og ra m ac i n ba autmatas celular sa do en es.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

233

Filtrar lneas de texto: grep


xyz xyz

xyz

grep
xyz

xyz xyz

Una de las operaciones ms comunes al trabajar con textos son las bsquedas. Muchas de esas bsquedas se hacen para efectos de filtrado: a veces se busca para filtrar lo que no contiene lo que se busca, a veces se busca para filtrar lo que s contiene lo que se busca. En los sistemas UNIX hay mltiples maneras de hacer filtrados de texto, dentro de editores de texto, y a travs de comandos de lnea, es decir, por fuera de los editores. Una de las maneras es usando alguno de los comandos de una familia basada en expresiones regulares. El primero y central de la familia de comandos lleva por nombre grep (general regular expression print), comando que busca texto y filtra, para mostrar slo lneas de texto que cumplan con la expresin regular dada. El comando grep tiene una sintaxis base sencilla, pero el primero de los argumentos debe ser una expresin regular que puede llegar a ser bastante complicada. La sintaxis de grep es:
grep [-i] [-v] [-c] [-l] [-q] [-w] [-x] [ -e expr ] [ expr ] [ archivo ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. Pueden drsele a grep cero o ms archivos. Si a grep no se le dan archivos leer de la entrada estndar. En la sintaxis expr es una expresin regular bsica. Si en la sintaxis no se usa la opcin e entonces la expresin es obligatoria, asumindose como la expresin regular al primer argumento. La opcin i se usa para que grep ignore la diferencia entre maysculas y minsculas (hace a grep case insensitive). La opcin v se usa para que grep filtre negativamente, as seleccionar las lneas que no cumplan con la expresin regular.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 234

La opcin c se usa para que en vez de copiar a la salida estndar las lneas que cumplen la expresin regular, simplemente reporta en la salida estndar cuntas de las lneas concuerdan o cumplen la expresin regular. Si se usa la opcin v reportar cuntas lneas no cumplen la expresin regular. La opcin l se usa para que grep reporte en la salida estndar los nombres de los archivos que contienen alguna lnea -al menos- que cumple la expresin regular, y no reporte las lneas. La opcin q se usa para que grep no reporte ni las lneas que cumplen, ni los archivos que las contienen. Con esta opcin grep slo reporta verdadero o falso como cdigo de retorno. Como siempre, verdadero en el intrprete verdadero es un cdigo de retorno cero (0) y falso es un cdigo de retorno diferente de cero. La opcin w se usa para que grep asuma que la expresin es una palabra, no una expresin regular. La opcin x se usa para que grep asuma que la lnea completa debe cumplir la expresin regular, no una parte de la misma nicamente para ser reportada. Ejemplos A:
0 root@abe:/home/e> cat Empresas.txt Alessio Di Mare Redsis Jairo E. Soler Net.Solutions Jorge Molina M. SENA Jorge Russo Redsis Jorge Valbuena V. iKnow Ramn Barrios Lascar iKnow Yasser Barrios Lascar SupraImpresores Yeimy Fontalvo 0 root@abe:/home/e> grep iknow Empresas.txt 1 root@abe:/home/e> grep iKnow Empresas.txt Jorge Valbuena V. iKnow Ramn Barrios Lascar iKnow 0 root@abe:/home/e> grep -i iknow Empresas.txt Jorge Valbuena V. iKnow Ramn Barrios Lascar iKnow

En el primer caso de los ejemplos A se muestra el archivo completo, simple, con cat. El segundo caso de los ejempos A muestra cmo se hace una bsqueda o filtrado sencillo, con texto literal, usando grep. Se da como primer argumento el texto iknow, y como no se dan opciones, grep hace una bsqueda donde una lnea completa se copiar a la salida estndar si en alguna parte aparece el texto literal dado como primer argumento. Como no se dan opciones grep diferenciar las maysculas de las minsculas, y por ello el texto no se encuentra, y as no se muestra ni una lnea en la salida.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

235

El tercer caso de los ejemplos A muestra el resultado de una bsqueda literal donde el texto s se encuentra: las lneas se copian a la salida estndar tal como aparecen en el archivo dado. El cuarto caso de los ejemplos A muestra el uso de la opcin i, que hace las bsquedas insensibles a las maysculas, entonces en este caso se da el primer argumento todo en minsculas, pero como no importa lo encuentra aunque est un poquito diferente y las lneas se copian como estn en el archivo. Ejemplos B:
0 root@abe:/home/e> grep -iv iknow Empresas.txt Alessio Di Mare Redsis Jairo E. Soler Net.Solutions Jorge Molina M. SENA Jorge Russo Redsis Yasser Barrios Lascar SupraImpresores Yeimy Fontalvo 0 root@abe:/home/e> grep -ni iknow Empresas.txt 5:Jorge Valbuena V. iKnow 6:Ramn Barrios Lascar iKnow

En el primer caso de los ejemplos B muestra el uso combinado de las opciones i (para que no diferencie las maysculas de las minsculas) y v (para hacer una bsqueda negada). Como a grep se le indica que la expresin es el literal iknow, sin diferenciar, pero usando la opcin v, copiar a la salida las lneas que no cumplen con el patrn de bsqueda, as que se muestran las lneas que no contienen iknow. El segundo caso de los ejemplos B muestra el uso de la opcin n, y como tambin se incluye la opcin i la bsqueda ser indiferente a las maysculas y minsculas. En este caso se muestra el nmero de lnea como prefijo de cada lnea que cumple con el patrn de bsqueda (se muestra en nmero como prefijo, con un smbolo de dos puntos (:) como separador. Ejemplos C:
1 root@abe:/home/e> grep -e Mar -e Al *.tsv Celulares.tsv:Alessio Di Mare (311) 688-1162 Empresas.tsv:Alessio Di Mare Redsis

En el caso de los ejemplos C se muestra el uso de la opcin e: se da una nica expresin de bsqueda, pero pueden darse varias veces la opcin e. Cuando se usa varias veces se asume AND, es decir que para ser copiada a la salida una lnea debe cumplir con todos los patrones de bsqueda simultneamente. En el ejemplo se muestran las lneas que cumplen ambos patrones, sin importar el orden en que los cumplen. En el ejemplo tambin se puede notar cmo la presentacin de los resultados en la salida estndar cambia cuando a grep se le dan como argumentos ms de un archivo -en el ejemplo grep recibe dos archivos:
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 236

Celulares.tsv, y Empresas.tsv-. Cuando grep recibe ms de un archivo de entrada como

argumentos, a cada lnea mostrada le agrega como prefijo el nombre del archivo de donde sali la lnea, separndolo -el nombre- de la lnea mostrada con un smbolo dos puntos (:).

Expresiones re gu unes expresiones lares son concisas que describen una porcin de texto.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

237

Expresiones Regulares Bsicas (en grep)


Las expresiones regulares son un lenguaje muy rico, pero a la vez pueden hacer cosas bastante complejas. Por ello, algunas herramientas -en este caso grep- implementan un subconjunto de las mismas, de manera que no se conviertan en algo demasiado complejo de usar. En el tpico anterior vimos unos ejemplos donde se usaban unos de los casos ms bsicos: los caracteres alfabticos son parte de la simbologa de las expresiones regulares bsicas. A continuacin se define la simbologa usada en las expresiones regulares bsicas. Un smbolo punto (.) representa un caracter nico cualquiera, por ejemplo una letra, un nmero, un smbolo visible, an un espacio; excepto un caracter de fin de lnea o retorno de carro. Un smbolo asterisco (*) representa una secuencia del caracter o grupo inmediatamente anterior. La secuencia puede tener cero o ms caracteres del inmediatemente precedente. Un smbolo acento circunflejo (^) si aparece al inicio de una expresin representa un anclaje al inicio de una lnea o cadena de texto. Un smbolo pesos ($) si aparece al final de una expresin representa un anclaje al final de una lnea o cadena de texto. Una lista de caracteres encerrada en [ ] representa un nico caracter cualquiera de la lista de caracteres encerrada. Un rango de caracteres encerrado en [ ] representa un nico caracter cualquiera del rango de caracteres encerrado. Un rango de caracteres comienza con un caracter, sigue con un smbolo menos (-), y termina con un caractere numricamente superior o posterior al que comienza el rango. Una lista de caracteres encerrada en [^ ] representa un nico caracter cualquiera que no est en la lista de caracteres encerrada. Un rango de caracteres encerrado en [^ ] representa un nico caracter cualquiera que no est en el rango de caracteres encerrado. Un rango de caracteres comienza con un caracter, sigue con un smbolo menos (-), y termina con un caractere numricamente superior o posterior al que comienza el rango. Los smbolos ., *, $, pierden su significado especial cuando estn encerrados dentro de [ ]. El smbolo ^ no tiene el significado especial negativo dentro de [ ] si no es el primer caracter inmediatamente despus de [. El smbolo menos
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 238

(-) que se usa para definir una lista no tiene dicho significado especial dentro de [ ] si est de primero o de ltimo en los caracteres encerrados. Cuando se encierra una parte de la expresin regular entre pares \( \) la parte encerrada queda memorizada en un registro numerado, contando desde la izquierda los pares \(. Los registros numerados se recuperan o usan con \nmero. Note que como algunos -muchos?- de los smbolos de las expresiones regulares tienen significado especial en el shell, es mejor encerrarlos en ya que as el shell no los interpreta con el significado que normalmente les da. Ejemplos:
0 root@abe:/home/e> cat Celulares.tsv Alessio Di Mare (311) 688-1162 Carlos Castilla V. (313) 433-7386 Jairo E. Soler (315) 797-1397 Jorge Molina M. (315) 344-8150 Jorge Russo (311) 818-8709 Jorge Valbuena V. (313) 571-6462 Omar Villalba (313) 388-7017 Ramn Barrios Lascar (315)313-7269 Yeimy Fontalvo (300) 817-4126 0 root@abe:/home/e> grep '.R' Celulares.tsv Jorge Russo (311) 818-8709 0 root@abe:/home/e> grep '^R' Celulares.tsv Ramn Barrios Lascar (315)313-7269 0 root@abe:/home/e> grep '\(.\)\1' Celulares.tsv Alessio Di Mare (311) 688-1162 Carlos Castilla V. (313) 433-7386 Jorge Molina M. (315) 344-8150 Jorge Russo (311) 818-8709 Omar Villalba (313) 388-7017 Ramn Barrios Lascar (315)313-7269 Yeimy Fontalvo (300) 817-4126 0 root@abe:/home/e> grep -v '[09]' Celulares.tsv Alessio Di Mare (311) 688-1162 Carlos Castilla V. (313) 433-7386 Jorge Valbuena V. (313) 571-6462

En el primer caso de los ejemplos simplemente se usa cat para volcar a la salida todo el archivo Celulares.tsv. En el segundo caso de los ejemplos se indica a grep que debe copiar a la salida estndar las lneas que tienen un caracter cualquiera (.) y luego una R. Si se observa bien hay otra lnea con una R, pero no tiene antes un caracter porque est al comienzo de la lnea. En el tercer caso de los ejemplos se busca un caracter cualquiera, y al mismo tiempo se le memoriza -como es el primer grupo capturado entonces est en la memoria -oficialmente registro- nmero 1, seguido de los contenidos de la memoria -registro- nmero 1; esta construccin busca dos caracteres repetidos; y como muestra lo listado, efectivamente
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 239

funciona. El caso del cuarto ejemplo busca lneas que tengan un caracter que puede ser cero (0) o puede ser nueve (9), y con la opcin v, lista las otras lneas, las que no cumplen. Esta sintaxis y construccin lista las lneas que no tienen cero o nueve, que segn la lgica son las lneas que no tienen un cero y que no tienen un nueve.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

240

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

241

Filtrado avanzado de lneas de texto: egrep


xyz xyz

xyz

egrep
xyz xyz

xyz xyz xyz

Como algunas de las bsquedas posibles matemticamente no son posibles con el juego de expresiones regulares bsicas que grep soporta, y como no es conveniente complicar al comando grep, se cre un comando que soporta lo que se llama expresiones regulares extendidas, que permiten cosas que con las bsicas no son posibles, y que adems facilita lo que con grep es simplemente difcil. El comando lleva por nombre egrep (extended general regular expression print). Sintaxis del comando egrep:
egrep [-h] [-i] [-l] [-n] [-s] [-v] [-w] [-x] [-f arch1] [-e expr] [ expr ] [ archivo ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. Pueden drsele a egrep cero o ms archivos. Si no se le dan archivos egrep lee de la entrada estndar. En la sintaxis expr es una expresin regular bsica. Si en la sintaxis no se usa la opcin e entonces la expresin es obligatoria, asumindose como la expresin regular al primer argumento. Como muchas de las expresiones incluyen caracteres especiales que pueden ser interpretados por el shell la expresin debera encerrarse entre . La opcin i se usa para que egrep ignore la diferencia entre maysculas y minsculas (hace a egrep case insensitive). La opcin v se usa para que egrep filtre negativamente, as seleccionar las lneas que no cumplan con la expresin regular.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

242

La opcin c se usa para que en vez de copiar a la salida estndar las lneas que cumplen la expresin regular, simplemente reporta en la salida estndar cuntas de las lneas concuerdan o cumplen la expresin regular. Si se usa la opcin v reportar cuntas lneas no cumplen la expresin regular. La opcin l se usa para que egrep reporte en la salida estndar los nombres de los archivos que contienen alguna lnea -al menos- que cumple la expresin regular, y no reporte las lneas. La opcin q se usa para que egrep no reporte ni las lneas que cumplen, ni los archivos que las contienen. Con esta opcin egrep slo reporta verdadero o falso como cdigo de retorno. Como siempre, verdadero en el intrprete verdadero es un cdigo de retorno cero (0) y falso es un cdigo de retorno diferente de cero. La opcin w se usa para que egrep asuma que la expresin es una palabra, no una expresin regular. La opcin x se usa para que egrep asuma que la lnea completa debe cumplir la expresin regular, no una parte de la misma nicamente para ser reportada. La opcin f se usa para que egrep lea las expresiones regulares de un archivo dado su nombre (el argumento arch1 de la opcin f). La o las expresiones regulares dentro del archivo debern estar en lneas individuales cada una. La opcin e permite dar una expresin regular con la que se intentar probar cada lnea de cada uno de los archivos dados como argumentos. La opcin slo permite una expresin regular extendida, pero puede darse mltiples veces la opcin e. Esta opcin no es realmente necesaria, pero es prctica cuando se quieren dar varias expresiones simultneamente o cuando la expresin regular a usar inicia con el smbolo menos (-). Ejemplos A:
0 root@abe:/home/e> cat Empresas.txt Alessio Di Mare Redsis Jairo E. Soler Net.Solutions Jorge Molina M. SENA Jorge Russo Redsis Jorge Valbuena V. iKnow Ramn Barrios Lascar iKnow Yasser Barrios Lascar SupraImpresores Yeimy Fontalvo 0 root@abe:/home/e> egrep iknow Empresas.txt 1 root@abe:/home/e> egrep iKnow Empresas.txt Jorge Valbuena V. iKnow Ramn Barrios Lascar iKnow 0 root@abe:/home/e> egrep -i iknow Empresas.txt Jorge Valbuena V. iKnow AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 243

Ramn Barrios Lascar

iKnow

En el primer caso de los ejemplos A se muestra el archivo completo, simple, con cat. El segundo caso de los ejempos A muestra cmo se hace una bsqueda o filtrado sencillo, con texto literal, usando egrep. Se da como primer argumento el texto iknow, y como no se dan opciones, egrep hace una bsqueda donde una lnea completa se copiar a la salida estndar si en alguna parte aparece el texto literal dado como primer argumento. Como no se dan opciones egrep diferenciar las maysculas de las minsculas, y por ello el texto no se encuentra, y as no se muestra ni una lnea en la salida. El tercer caso de los ejemplos A muestra el resultado de una bsqueda literal donde el texto s se encuentra: las lneas se copian a la salida estndar tal como aparecen en el archivo dado. El cuarto caso de los ejemplos A muestra el uso de la opcin i, que hace las bsquedas insensibles a las maysculas, entonces en este caso se da el primer argumento todo en minsculas, pero como no importa lo encuentra aunque est un poquito diferente y las lneas se copian como estn en el archivo. Ejemplos B:
0 root@abe:/home/e> egrep -iv iknow Empresas.txt Alessio Di Mare Redsis Jairo E. Soler Net.Solutions Jorge Molina M. SENA Jorge Russo Redsis Yasser Barrios Lascar SupraImpresores Yeimy Fontalvo 0 root@abe:/home/e> egrep -ni iknow Empresas.txt 5:Jorge Valbuena V. iKnow 6:Ramn Barrios Lascar iKnow

En el primer caso de los ejemplos B muestra el uso combinado de las opciones i (para que no diferencie las maysculas de las minsculas) y v (para hacer una bsqueda negada). Como a grep se le indica que la expresin es el literal iknow, sin diferenciar, pero usando la opcin v, copiar a la salida las lneas que no cumplen con el patrn de bsqueda, as que se muestran las lneas que no contienen iknow. El segundo caso de los ejemplos B muestra el uso de la opcin n, y como tambin se incluye la opcin i la bsqueda ser indiferente a las maysculas y minsculas. En este caso se muestra el nmero de lnea como prefijo de cada lnea que cumple con el patrn de bsqueda (se muestra en nmero como prefijo, con un smbolo de dos puntos (:) como separador. Ejemplos C:
1 root@abe:/home/e> egrep -e Mar -e Al *.tsv

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

244

Celulares.tsv:Alessio Di Mare Empresas.tsv:Alessio Di Mare

(311) 688-1162 Redsis

En el caso de los ejemplos C se muestra el uso de la opcin e: se da una nica expresin de bsqueda, pero pueden darse varias veces la opcin e. Cuando se usa varias veces se asume AND, es decir que para ser copiada a la salida una lnea debe cumplir con todos los patrones de bsqueda simultneamente. En el ejemplo se muestran las lneas que cumplen ambos patrones, sin importar el orden en que los cumplen. En el ejemplo tambin se puede notar cmo la presentacin de los resultados en la salida estndar cambia cuando a grep se le dan como argumentos ms de un archivo -en el ejemplo grep recibe dos archivos: Celulares.tsv, y Empresas.tsv-. Cuando grep recibe ms de un archivo de entrada como argumentos, a cada lnea mostrada le agrega como prefijo el nombre del archivo de donde sali la lnea, separndolo -el nombre- de la lnea mostrada con un smbolo dos puntos (:).

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

245

Expresiones Regulares Extendidas (en egrep)


Las expresiones regulares extendidas son un lenguaje an ms rico, con las que se pueden hacer bsquedas y comparaciones bastante complejas. Algunos de los comandos de Unix implementan las expresiones regulares bsicas, pero algunas otras herramientas implementan las expresiones regulares extendidas (por ejemplo uno que no hemos revisado, sed), pero en especial el comando ya mencionado egrep. A continuacin se define la simbologa usada en las expresiones regulares extendidas. Un smbolo punto (.) representa un caracter nico cualquiera, por ejemplo una letra, un nmero, un smbolo visible, an un espacio; excepto un caracter de fin de lnea o retorno de carro. Un smbolo asterisco (*) representa una secuencia del caracter o grupo inmediatamente anterior. La secuencia puede tener cero o ms caracteres del inmediatemente precedente. Un smbolo interrogacin (?) indica que el caracter o tem inmediatamente anterior puede aparecer cero o una vez, mximo. Un smbolo ms (+) indica que el caracter o tem inmediatamente anterior puede aparecer una o ms veces. Un smbolo acento circunflejo (^) si aparece al inicio de una expresin representa un anclaje al inicio de una lnea o cadena de texto. Un smbolo pesos ($) si aparece al final de una expresin representa un anclaje al final de una lnea o cadena de texto. Una lista de caracteres encerrada en [ ] representa un nico caracter cualquiera de la lista de caracteres encerrada. Un rango de caracteres encerrado en [ ] representa un nico caracter cualquiera del rango de caracteres encerrado. Un rango de caracteres comienza con un caracter, sigue con un smbolo menos (-), y termina con un caractere numricamente superior o posterior al que comienza el rango. Una lista de caracteres encerrada en [^ ] representa un nico caracter cualquiera que no est en la lista de caracteres encerrada. Un rango de caracteres encerrado en [^ ] representa un nico caracter cualquiera que no est en el rango de caracteres encerrado. Un rango de caracteres comienza con un caracter, sigue con un smbolo menos (-), y termina con un caractere numricamente superior o posterior al que comienza el rango.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 246

Los smbolos ., *, $, pierden su significado especial cuando estn encerrados dentro de [ ]. El smbolo ^ no tiene el significado especial negativo dentro de [ ] si no es el primer caracter inmediatamente despus de [. El smbolo menos (-) que se usa para definir una lista no tiene dicho significado especial dentro de [ ] si est de primero o de ltimo en los caracteres encerrados. Cuando se encierra una parte de la expresin regular entre pares ede parntess ( ) la parte encerrada se considera una subexpresin, que bsicamente se trata como un tem o elemento nico. El smbolo barra vertical (|) dentro de las expresiones regulares extendidas sirve para indicar alternativas, de las cuales es posible escoger o concordar con una. Se pueden indicar cuntas repeticiones de un item se permiten o deben darse en una expresin regular si se usa la construccin {min,max} como sufijo de un item. Por ejemplo, a{2,5} indica que se necesita para concordancia un mnimo de dos aes y un mximo de cinco. Si se omite el primer nmero egrep asume cero (0), si se omite el segundo nmero no se asume un mximo. As ? es equivalente a {0,1} o {,1}, + es equivalente a {1,}, y * es equivalente a {0,}. Ejemplos:
e@abe:e/> cat Celulares.tsv Alessio Di Mare (311) 688-1162 Carlos Castilla V. (313) 433-7386 Jairo E. Soler (315) 797-1397 Jorge Molina M. (315) 344-8150 Jorge Russo (311) 818-8709 Jorge Valbuena V. (313) 571-6462 Omar Villalba (313) 388-7017 Ramn Barrios Lascar (315)313-7269 Yeimy Fontalvo (300) 817-4126 e@abe:e/> egrep '3.[15]' *.tsv Celulares.tsv:Alessio Di Mare (311) 688-1162 Celulares.tsv:Jairo E. Soler (315) 797-1397 Celulares.tsv:Jorge Molina M. (315) 344-8150 Celulares.tsv:Jorge Russo (311) 818-8709 Celulares.tsv:Ramn Barrios Lascar (315)313-7269 e@abe:e/> egrep '8[^-]' *.tsv Celulares.tsv:Alessio Di Mare (311) 688-1162 Celulares.tsv:Carlos Castilla V. (313) 433-7386 Celulares.tsv:Jorge Molina M. (315) 344-8150 Celulares.tsv:Jorge Russo (311) 818-8709 Celulares.tsv:Omar Villalba (313) 388-7017 Celulares.tsv:Yeimy Fontalvo (300) 817-4126 e@abe:e/> egrep '(^|[^a-zA-Z])[a-zA-Z]{5} ' *.tsv Celulares.tsv:Jairo E. Soler (315) 797-1397 Celulares.tsv:Jorge Molina M. (315) 344-8150 Celulares.tsv:Jorge Russo (311) 818-8709 AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 247

Celulares.tsv:Jorge Valbuena V. Celulares.tsv:Yeimy Fontalvo Empresas.tsv:Jairo E. Soler Empresas.tsv:Jorge Molina M. Empresas.tsv:Jorge Russo Empresas.tsv:Jorge Valbuena V. Empresas.tsv:Yeimy Fontalvo

(313) 571-6462 (300) 817-4126 Net.Solutions SENA Redsis iKnow

El primer caso de los ejemplos simplemente muestra cmo es el archivo Celulares.tsv (usando cat). El segundo caso de los ejemplos usa egrep para buscar nmeros celulares que sean 315 o 310, pero realmente no se fija en el segundo dgito, slo en el primero y el tercero. Usa un tres (3) literal para la concordancia, luego un punto (.) para indicar cualquier cosa, note que no dice cualquier dgito, y usa [15], para indicar o un 1 o un 5. El tercer caso usa egrep para buscar los nmeros ocho (8) que no est seguidos por un menos (-), as que usa una algo artificial construccin 8[^-] es decir ocho seguido de un caracter que no est en una lista, pero la lista slo tiene un menos. El cuarto y ltimo de los casos de ejemplo busca una palabra de cinco letras, sea en maysculas o minsculas; auque la construccin es como artificial se explica enseguida: [azA-Z] significa una letra minscula o mayscula cualquiera, siendo letra slo lo vlido en ingls. {5} significa cinco repeticiones de lo inmediatamente anterior. [a-zA-Z]{5} significa cinco letras minsculas o maysculas. [a-zA-Z]{5} significa cinco letras minsculas o maysculas seguidas de un espacio. (^|[^a-zA-Z]) significa inicio de lnea o algo que no es letra minscula o mayscula. (^|[^a-zA-Z])[a-zA-Z]{5} significa cinco letras minsculas o maysculas al comienzo de lnea o precedidas de algo que no es letra y seguidas de un espacio.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

248

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

249

Ordenar lneas de texto: sort


8 3 4 1 10 6 5 9 2 7

1 2 3 4

sort

5 6 7 8 9 10

Quizs despus de las bsquedas la operacin ms necesitada dentro de lo que se denomina procesamiento de datos (data processing) es lo que se llama ordenamiento. Es tan profundo el tema que aunque hay diversos algoritmos siempre hay gente trabajando en mejorar los algoritmos. Para ordenar texto columnar en UNIX se incluye un comando obviamente denominado sort. Es un comando sencillo muy potente que puede llegar a consumir -como cualquier rutina de ordenamiento- bastante CPU y bastante RAM. La sintaxis estndar de sort es:
sort [ -A ] [ -b ] [ -c ] [ -d ] [ -f ] [ -i ] [ -k Llave ] [ -n ] [ -r ] [ -t separador ] [ -u ] [ archivo ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. A sort pueden drsele cero o ms archivos. Si no se le dan archivos sort lee la entrada estndar. La opcin A indica a sort que debe usar nicamente los valores ASCII de los caracteres para hacer el ordenamiento. La opcin b indica a sort que debe ignorar los espacios y tabuladores para buscar la primera o ltima columna de un campo. La opcin c se usa para que sort no ordene, slo reportar verdadero o falso, indicando si los archivos de entrada estn ya ordenados segn indiquen las opciones. Como siempre, el valor verdadero en el intrprete de comandos shell es un cdigo de retorno cero (0).

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

250

La opcin d se usa para que sort ordene segn diccionario. En estos ordenamientos slo se tienen en cuenta las letras, nmeros y espacios. La opcin f indica a sort que debe pasar todas las letras a comparar a maysculas. La opcin i se usa para que sort ignore todo caracter no visible en las comparaciones. La opcin k es la ms importante ya que con la misma se define la llave de ordenamiento. Esta opcin puede usarse mltiples veces. La opcin k necesita una definicin de campos y columnas as:
[inicioCampo[.inicioColumna]][ModifInic][,[finCampo[.finColumna]]ModifFin]]

Donde la llave inicia con un campo (dado el nmero inicioCampo), posiblemente en un caracter de ese campo (dado el nmero inicioColumna), tal vez con algn modificador (dado ModifInic). La llave termina con un campo (dado el nmero finCampo), posiblemente en un caracter de ese campo (dado el nmero finColumna), tal vez con un modificador (dado ModifFin). Los modificadores son los b, c, f, n, i, r, con el mismo significado que las opciones de la mismas letras. La opcin n se usa para que sort haga un ordenamiento numrico. Los campos pueden tener espacios o tabuladores iniciales, pueden tener signos, decimales o radicales. La opcin r se usa para que sort haga un ordenamiento en orden inverso, segn digan las otras opciones. La opcin t se usa para indicar a sort cul es el separador de campo. La opcin u (unique) indica a sort que debe reportar slo una de las lneas iguales segn la llave de ordenamiento. Ejemplos:
e@abe:e/> cat Empresas.tsv Alessio Di Mare Redsis Jairo E. Soler Net.Solutions Jorge Molina M. SENA Jorge Russo Redsis Jorge Valbuena V. iKnow Ramn Barrios Lascar iKnow Yasser Barrios Lascar SupraImpresores Yeimy Fontalvo

Se muestra en este caso simplemente cmo son los contenidos del archivo Empresas.tsv.
e@abe:e/> sort -c Empresas.tsv && echo "Empresas.tsv est ordenado!" Empresas.tsv est ordenado!

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

251

Se usa la opcin c en este segundo caso para decir a sort que revise si el archivo Empresas.tsv est ordenado. Como no muestra salida debern usarse las facilidades del shell para revisar el cdigo de retorno.
e@abe:e/> sort -rA Empresas.tsv Yeimy Fontalvo Yasser Barrios Lascar SupraImpresores Ramn Barrios Lascar iKnow Jorge Valbuena V. iKnow Jorge Russo Redsis Jorge Molina M. SENA Jairo E. Soler Net.Solutions Alessio Di Mare Redsis

En este tercer caso se usa la opcin r para que el ordenamiento sea inverso. Se us la opcin A para que el ordenamiento no use la definicin del idioma del Unix donde sort est corriendo.
e@abe:e/> sort -t' ' -k 2 Empresas.tsv Yeimy Fontalvo Jairo E. Soler Net.Solutions Alessio Di Mare Redsis Jorge Russo Redsis Jorge Molina M. SENA Yasser Barrios Lascar SupraImpresores Jorge Valbuena V. iKnow Ramn Barrios Lascar iKnow

En este cuarto caso se define que el separador de campos es un caracter tabulador, y se define como llave de ordenamiento la columna 2 (segn el separador definido). Se nota como sort ordena primero las columnas en blanco, luego las columnas que inician en mayscula y luego las columnas que inician en minscula.
e@abe:e/> sort -f -t' ' -k 2 Empresas.tsv Yeimy Fontalvo Jorge Valbuena V. iKnow Ramn Barrios Lascar iKnow Jairo E. Soler Net.Solutions Alessio Di Mare Redsis Jorge Russo Redsis Jorge Molina M. SENA Yasser Barrios Lascar SupraImpresores

En este quinto caso se define que el separador de campos es un caracter tabulador, y se define como llave de ordenamiento la columna 2 (segn el separador definido), tambin se indica usando la opcin f que deben convertirse a maysculas las minsculas antes de las comparaciones. Se nota como ordena primero las columnas en blanco, luego un ordenamiento alfabtico, sin importar las minsculas o maysculas.
e@abe:e/> sort -f -t' Yeimy Fontalvo ' -k 2 -u Empresas.tsv

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

252

Jorge Valbuena V. iKnow Jairo E. Soler Net.Solutions Alessio Di Mare Redsis Jorge Molina M. SENA Yasser Barrios Lascar SupraImpresores

En este sexto caso se muestra el resultado de la opcin u. Slo se diferencia del caso quinto en la inclusin de la opcin u. En este caso se hace que sort slo muestre la primera de las lneas que incluya el campo que se usa como llave de ordenamiento.
e@abe:e/> sort -t' ' -k1.2 Empresas.tsv Jairo E. Soler Net.Solutions Ramn Barrios Lascar iKnow Yasser Barrios Lascar SupraImpresores Yeimy Fontalvo Alessio Di Mare Redsis Jorge Molina M. SENA Jorge Russo Redsis Jorge Valbuena V. iKnow

En este caso sptimo se hace un ordenamiento usando la segunda letra del primer campo (k1.2) , definiendo de paso que el separador de campos es un caracter tabulador.
e@abe:e/> cat Numeros.txt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

El caso octavo simplemente muestra los contenidos de un nuevo archivo Numeros.txt usando cat.
e@abe:e/> sort Numeros.txt 1 10 11 12 13 14 15 2 3 4 AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 253

5 6 7 8 9

El caso noveno muestra cmo el ordenamiento predeterminado de sort no es el adecuado para nmeros de longitud variable.
e@abe:e/> sort -n Numeros.txt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

El caso dcimo muestra cmo la opcin n es lo comnmente ms adecuado cuando sort tiene que comparar campos numricos para hacer un ordenado.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

254

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

255

Transliterar caracteres: tr

password

tr

p455w0rd

A veces es necesario reemplazar -o eliminar- caracteres individuales de un texto. Para esta operacin sencilla se usa el comando estndar tr (transliterate) que lee de la entrada estndar, reemplaza unos caracteres individuales por otros y el resultado lo genera en la salida estndar. La sintaxis del comando sencillo tr es:
tr [ -c|-cds|-cs | -C|-Cds|-Cs|-ds| -s] [ -A] caracteres1 caracteres2

o tambin
tr { -cd|-cs|-Cd|-Cs| -d| -s} [ -A] caracteres

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. Si se dan dos cadenas de caracteres como argumentos no es obligatorio dar alguna opcin. Los smbolos { y } indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. Si se dan una cadena de caracteres como argumento es obligatorio dar alguna opcin. El smbolo | indica posibilidad, se usa para mostrar las posibles opciones, no hace parte de la sintaxis. A tr pueden drsele una o dos cadenas -secuencias- de caracteres. Como tr entiende un subconjunto de las expresiones regulares extendidas las cadenas deberan estar encerradas entre . La opcin A se usa para indicar que tr debe usar ordenamiento puramente ASCII cuando se le den rangos de caracteres, no debe tener en cuenta los ordenamientos segn el idioma en que est funcionando el UNIX donde corre. La opcin C se usa para indicar que tr no debe tomar el valor de la cadena caracteres1 si no que debe tomar el valor del complemento de caracteres1. El complemento se define como los otros caracteres que componen el conjunto nacional segn el idioma definido por la variable de ambiente LC_COLLATE. La opcin c se usa para indicar que tr no debe tomar el valor de la cadena de caracteres1 si no que debe tomar del valor del complemento de caracteres1. El complemento se define como los otros caracteres que componen el juego de caracteres ASCII.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 256

La opcin d hace que tr no reemplace caracteres si no que elimine caracteres al copiar la entrada estndar a la salida estndar. Cuando se usa junto con la opcin c o la opcin C no elimina de la entrada estndar los caracteres de caracteres1 si no los caracteres que no estn en caracteres1. La opcin s hace que tr reemplace toda una secuencia de caracteres por el primero de la secuencia (dados por caracteres1). Cuando se dan dos argumentos junto con la opcin s se reemplazar toda una secuencia de caracteres (dados por caracteres1) por un caracter (tomado de caracteres2). Los valores en caracteres1 y caracteres2 pueden ser: un texto literal alfanumrico; o c1-c2, donde c1 aparece primero que c2 en el ordenamiento de texto segn el idioma del UNIX donde se ejecuta tr; [C*nmero], equivalente a la repeticin nmero veces del caracter C; [C*] cuando se usa en caracteres2 para hacer que esta secuencia de caracteres tenga la misma longitud que caracteres1; [:clase:] especifica uno cualquiera de todos los caracteres contenidos en una clase de alnum, alpha, blank, cntrl, digit, graph, lower, print, punct, space, upper, xdigit; [=C=] especifica uno cualquiera de todos los caracteres de una clase de caracteres idiomtica, as en espaol [=e=] incluye e y ; \CarControl especifica un caracter de control de alert (\a), backspace (\b), form feed (\f), new line (\n), carriage return (\r), tab (\t), vertical tab (\v), backslash (\\); o un [ literal con \[ o un menos (-) literal con \-. Ejemplos:
e@abe:e/> cat Celulares.tsv Alessio Di Mare (311) 688-1162 Carlos Castilla V. (313) 433-7386 Jairo E. Soler (315) 797-1397 Jorge Molina M. (315) 344-8150 Jorge Russo (311) 818-8709 Jorge Valbuena V. (313) 571-6462 Omar Villalba (313) 388-7017 Ramn Barrios Lascar (315)313-7269 Yeimy Fontalvo (300) 817-4126

En este primer caso simplemente se muestran los contenidos del archivo Celulares.tsv usando el comando cat.
e@abe:e/> tr -d 3 < Celulares.tsv Alessio Di Mare (11) 688-1162 Carlos Castilla V. (1) 4-786 Jairo E. Soler (15) 797-197 Jorge Molina M. (15) 44-8150 Jorge Russo (11) 818-8709 Jorge Valbuena V. (1) 571-6462 Omar Villalba (1) 88-7017 Ramn Barrios Lascar (15)1-7269 AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 257

Yeimy Fontalvo

(00) 817-4126

En este segundo caso de los ejemplos se muestra primero el uso adecuado de tr: No lee archivos, nicamente lee de la entrada estndar. Se usa la opcin d para indicar que tr debe buscar el caracter 3 y no incluirlo en la salida.
e@abe:e/> tr -d 83 < Celulares.tsv Alessio Di Mare (11) 6-1162 Carlos Castilla V. (1) 4-76 Jairo E. Soler (15) 797-197 Jorge Molina M. (15) 44-150 Jorge Russo (11) 1-709 Jorge Valbuena V. (1) 571-6462 Omar Villalba (1) -7017 Ramn Barrios Lascar (15)1-7269 Yeimy Fontalvo (00) 17-4126

En este tercer caso de los ejemplos se usa la opcin d con una cadena de dos caracteres, lo que indica que debe borrar de la salida cualquier aparicin de cualquiera de los dos caracteres, aunque la cadena completa 83 no aparece en le texto origen. tr toma los caracteres individuales.
e@abe:e/> tr '0123456789' 'OI2EAS6TB9' < Celulares.tsv Alessio Di Mare (EII) 6BB-II62 Carlos Castilla V. (EIE) AEE-TEB6 Jairo E. Soler (EIS) T9T-IE9T Jorge Molina M. (EIS) EAA-BISO Jorge Russo (EII) BIB-BTO9 Jorge Valbuena V. (EIE) STI-6A62 Omar Villalba (EIE) EBB-TOIT Ramn Barrios Lascar (EIS)EIE-T269 Yeimy Fontalvo (EOO) BIT-AI26

En este cuarto caso de los ejemplos se usan dos argumentos de igual longitud, as cada vez que se encuentre en la entrada el primer caracter del argumento1 se reemplaza por el primer caracter del argumento2 en la salida (0 se reemplaza por O), cada vez que se encuentre en la entrada el segundo caracter del argumento1 se reemplaza por el segundo caracter del argumento2 (1 se reemplaza por I), y as.
e@abe:e/> tr '[:lower:]' '[:upper:]' < Celulares.tsv ALESSIO DI MARE (311) 688-1162 CARLOS CASTILLA V. (313) 433-7386 JAIRO E. SOLER (315) 797-1397 JORGE MOLINA M. (315) 344-8150 JORGE RUSSO (311) 818-8709 JORGE VALBUENA V. (313) 571-6462 OMAR VILLALBA (313) 388-7017 RAMN BARRIOS LASCAR (315)313-7269 YEIMY FONTALVO (300) 817-4126

En este quinto caso de los ejemplos se usan clases de caracteres para que tr reemplace los caracteres en minsculas en la entrada por los equivalentes en maysculas en la salida. tr no
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 258

conoce las maysculas adecuadas de cada caracter en minsculas. Pero la a minscula aparece en la clase :lower: en la misma posicin que la A mayscula aparece en la clase :upper:.
e@abe:e/> tr '[:digit:]' 'abcde' < Celulares.tsv Alessio Di Mare (dbb) 688-bb6c Carlos Castilla V. (dbd) edd-7d86 Jairo E. Soler (db5) 797-bd97 Jorge Molina M. (db5) dee-8b5a Jorge Russo (dbb) 8b8-87a9 Jorge Valbuena V. (dbd) 57b-6e6c Omar Villalba (dbd) d88-7ab7 Ramn Barrios Lascar (db5)dbd-7c69 Yeimy Fontalvo (daa) 8b7-ebc6 e@abe:e/> tr '[:digit:]' 'abcde*' < Celulares.tsv Alessio Di Mare (dbb) 688-bb6c Carlos Castilla V. (dbd) edd-7d86 Jairo E. Soler (db*) 797-bd97 Jorge Molina M. (db*) dee-8b*a Jorge Russo (dbb) 8b8-87a9 Jorge Valbuena V. (dbd) *7b-6e6c Omar Villalba (dbd) d88-7ab7 Ramn Barrios Lascar (db*)dbd-7c69 Yeimy Fontalvo (daa) 8b7-ebc6

En estos dos casos se muestra cmo funciona tr cuando la segunda secuencia de caracteres de los argumentos es ms corta que la primera: slo una parte de la clase -en los ejemploses reemplazada en la salida.
e@abe:e/> tr '[:digit:]' 'abcd[e*]' < Celulares.tsv Alessio Di Mare (dbb) eee-bbec Carlos Castilla V. (dbd) edd-edee Jairo E. Soler (dbe) eee-bdee Jorge Molina M. (dbe) dee-ebea Jorge Russo (dbb) ebe-eeae Jorge Valbuena V. (dbd) eeb-eeec Omar Villalba (dbd) dee-eabe Ramn Barrios Lascar (dbe)dbd-ecee Yeimy Fontalvo (daa) ebe-ebce

Es este otro caso se usa [C*] para que la segunda cadena de caracteres de los argumentos tenga la misma longitud de la primera, repitindo los ltimos caracteres las veces que sea necesario.
e@abe:e/> tr -s '[:digit:]' < Celulares.tsv Alessio Di Mare (31) 68-162 Carlos Castilla V. (313) 43-7386 Jairo E. Soler (315) 797-1397 Jorge Molina M. (315) 34-8150 Jorge Russo (31) 818-8709 Jorge Valbuena V. (313) 571-6462 Omar Villalba (313) 38-7017 Ramn Barrios Lascar (315)313-7269 AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 259

Yeimy Fontalvo

(30) 817-4126

Este otro caso muestra cmo hacer que los caracteres que se repitan en de la cadena de los argumentos en la entrada sean reemplazados por slo uno en la salida, usando la opcin s (squeeze) del comando tr.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

260

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

261

Utilidades avanzadas de archivos y directorios


Utilidades, ms utilidades
Aunque en la lnea de comandos del intrprete shell de UNIX hay unas tareas u operaciones que son ms difciles de hacer que en la interfaz grfica cuando slo hay que hacerlas o repetirlas una o dos veces, la mayora de las tareas que haya que repetir muchas veces es muchsimo ms fcil y rpido hacerlas combinando comandos. As un UNIX tpico o estndar incluye muchos, muchsimos comandos para todo. Como la entidad central que contiene datos en un UNIX es el archivo, la mayora de los comandos de UNIX operan sobre archivos. En este apartado trataremos algunos de los muchos comandos necesarios para hacer operaciones sobre archivos, en especial sobre mltiples archivos.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

262

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

263

Bsqueda de archivos: find


Dentro de toda la cantidad de herramientas con las que cuenta un operador Unix hay una que tienen reconocimiento especial ya que se le denomina la navaja suiza del administrador UNIX, esta herramienta lleva el nombre de find. El comando find navega recursivamente rboles de directorios y selecciona archivos y directorios segn una serie de criterios que se le den, a los archivos y directorios seleccionados puede hacerle una serie de acciones que indique quien lo invoca. La sintaxis general de find es muy sencilla:
find directorio ... -criterio ... -accin ...

Donde: Slo directorio es obligatorio segn el estndar POSIX. En algunos sistemas UNIX ni un directorio como argumento es obligatorio, asumiendo en este caso el directorio actual. Pueden darse uno o ms directorios, usando rutas relativas o absolutas. Como cada directorio es un argumento, debern separarse por espacios como todo argumento en el shell -realmente deben separarse por $IFS-.
find navega recursivamente -usando mtodo infijo- cada uno de los directorios

que se den como argumento. find no sigue los enlaces simblicos.

Los criterios son de seleccin, que indican cules de los archivos y directorios se seleccionarn para realizar en ellos, uno a uno las acciones. Como el criterio predeterminado es todos si no se da un criterio de seleccin find llevar a cabo las acciones para todos y cada uno de los archivos y directorios encontrados al navegar recursivamente cada uno de los directorios argumento. Las acciones indican qu hay que hacer con cada uno de los archivos y directorios seleccionados al navegar recursivamente los directorios iniciales dados, segn los criterios de seleccin dados. La accin predeterminada, cuando no se dan las acciones es -print. Criterios de seleccin en find El comando find tiene muchsimos criterios posibles de seleccin, que, como se pueden observar, no necesitan de abrir o leer los archivos para revisar sus contenidos, porque todos usan los atributos externos visibles o legibles. Como ya se mencion, el criterio predeterminado en find es todos. Los criterios se listan a continuacin: Criterio -inum nmeroInodo evala verdadero si el archivo o directorio que se est evaluando tiene nmeroInodo como su inodo en disco.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 264

Critero -type tipo evala verdadero si el tipo de lo que se est evaluando -segn los contenidos de su inodo- concuerdan. Los tipos son f (archivo), d (directorio), l (enlace simblico), p (tubera), s (socket), b (dispositivo de bloque), c (dispositivo de caracter). Criterio -links nmero evala verdadero si el archivo o directorio que se est evaluando tiene el nmero exacto de nombres o enlaces fuertes. El criterio links -nmero evala verdadero si el archivo o directorio que se est evaluando tiene menos nombres o enlaces que nmero. El criterio -links +nmero evala verdadero si el archivo o directorio que se est evaluando tiene ms nombres o enlaces que nmero. Criterio -user unUsuario evala verdadero si el archivo o directorio que se est evaluando tiene como propietario a unUsuario. El criterio -user puede ser usado con un nmero como parmetro si es un entero y no se resuelve como usuario en el sistema. Criterio -nouser evala verdadero si el archivo o directorio que se est evaluando tiene como propietario algo que no puede ser resuelto en el sistema no tiene un dueo vlido definido-. Criterio -group unGrupo evala como verdadero si el archivo o directorio tiene como grupo a unGrupo. El criterio -group puede ser usado con un nmero como parmetro si es un entero y no se resuelve como grupo en el sistema. Criterio -nogroup evala verdadero si el archivo o directorio tiene como grupo algo que no puede ser resuelto en el sistema -no tiene un grupo vlido definido-. Criterio -perms nmeroOctal evala verdadero si el archivo o directorio tiene exactamente los permisos nmeroOctal. El criterio -perms -nmeroOctal evala verdadero si el archivo o directorio tiene activos al menos los permisos equivalentes a nmeroOctal. Criterio -perms modo evala verdadero si el archivo o directorio tiene exactamente los permisos modo, como se usan en el comando chmod. El criterio perms -modo evala verdadero si el archivo o directorio tiene activos al menos los permisos que estn en modo como se usan en el comando chmod. Criterio -size bloques evala verdadero si el tamao del archivo o directorio cuando se redondea a bloques de 512 bytes -redondeo hacia arriba- es igual a bloques. El criterio -size -bloques evala verdadero si el tamao del archivo o directorio cuando se redondea a bloques de 512 bytes -redondeo hacia arriba- es menor que bloques. El criterio -size +bloques evala verdadero si el tamao
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 265

del archivo o directorio cuando se redondea a bloques de 512 bytes -redondeo hacia arriba- es mayor que bloques. Criterio -size bytesc evala verdadero si el tamao del archivo o directorio es exactamente bytes Bytes. El criterio -size -bytesc evala verdadero si el tamao del archivo o directorio es menor que bytes Bytes. El criterio -size +bytesc evala verdadero si el tamao del archivo o directorio es mayor que bytes Bytes. Criterio -atime n evala verdadero si el tiempo de acceso del archivo o directorio menos el momento actual dividido entre 86400 (descartando residuos) es n. Note que 86400 segundos son 24 horas. Si el UNIX donde se use find no cumple con UNIX03 entonces -atime n evala verdadero si el tiempo de ltimo uso del archivo o directorio est entre n-1 y n mltiplos de 24 horas. Criterio -ctime n evala verdadero si el tiempo de cambio de inodo del archivo o directorio menos el momento actual dividido entre 86400 (descartando residuos) es n. Note que 86400 segundos son 24 horas. Si el UNIX donde se use find no cumple con UNIX03 entonces -ctime n evala verdadero si el tiempo de cambio de inodo del archivo o directorio est entre n-1 y n mltiplos de 24 horas. Criterio -mtime n evala verdadero si el tiempo de modificacin del archivo o directorio menos el momento actual dividido entre 86400 (descartando residuos) es n. Note que 86400 segundos son 24 horas. Si el UNIX donde se use find no cumple con UNIX03 entonces -mtime n evala verdadero si el tiempo de modificacin del archivo o directorio est entre n-1 y n mltiplos de 24 horas. Criterio -amin n evala verdadero si el tiempo de acceso del archivo o directorio est entre n y n-1 minutos. El criterio -amin -n evala verdadero si el tiempo de acceso del archivo o directorio es menor a n minutos. El criterio -amin +n evala verdadero si el tiempo de acceso del archivo o directorio es mayor a n minutos. Criterio -cmin n evala verdadero si el tiempo del ltimo cambio del inodo del archivo o directorio est entre n y n-1 minutos. El criterio -cmin -n evala verdadero si el tiempo del ltimo cambio del inodo del archivo o directorio es menor a n minutos. El criterio -cmin +n evala verdadero si el tiempo del ltimo cambio del inodo del archivo o directorio es mayor a n minutos. Criterio -mmin n evala verdadero si el tiempo de modificacin del archivo o directorio est entre n y n-1 minutos. El criterio -mmin -n evala verdadero si el tiempo de modificacin del archivo o directorio es menor a n minutos. El criterio -mmin +n evala verdadero si el tiempo de modificacin del archivo o directorio es mayor a n minutos.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 266

Criterio -newer archivo evala verdadero si el tiempo de modificacin del archivo o directorio es posterior al de modificacin del archivo de referencia dado como archivo. Criterio -name especificacin evala verdadero si el archivo o directorio lleva por nombre o su nombre cumple con la evaluacin de shell especificacin. Oficialmente especificacin no va entre comillas sencillas, pero como se usan los mismos comodines que en el shell lo comn es evitar que ste ltimo los interprete encerrndolos en comillas sencillas . Criterio -depth hace que find navegue recursivamente los directorios a la manera posfija, evaluando primero los contenidos de los directorios, antes que el directorio mismo. Criterio -fstype tipoFs evala verdadero si el archivo o directorio est contenido en un sistema de archivos de tipo tipoFs. Criterio -prune evala siempre verdadero. Hace que find detenga la recursividad si el argumento como parmetro es un directorio. Criterio -xdev hace que find navegue recursivamente sin cambiarse de sistema de archivos y se mantenga en el mismo sistema de archivos que cada uno de los parmetros. Acciones en find El comando find tiene muchas menos acciones que criterios. Acciones son lo que puede hacer find con cada uno de los archivos o directorios seleccionados. La accin predeterminada -cuando no se indican acciones- en find es -print. Las acciones se listan a continuacin: La accin -print hace que find reporte en la salida estndar los nombres de los archivos o directorios que va seleccionando. Si el argumento de directorio inicial est dado como una ruta absoluta -print listar nombres como rutas absolutas, de lo contrario usar nombres como rutas relativas. La accin -ls hace que find reporte en la salida estndar los nombres de los archivos o directorios que va seleccionado, con detalles adicionales. Si el argumento de directorio inicial est dado como una ruta absoluta -ls listar nombres como rutas absolutas, de lo contrario usar nombres como rutas relativas. El comando find reporta, en orden, el nmero de inodo, el tamao en Kilobytes, los permisos, el nmero de nombres, el usuario, el grupo, el tamao en Bytes, el tiempo de ltima modificacin y el nombre.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

267

La accin -exec ComandoCompleto hace que find ejecute ComandoCompleto con cada archivo seleccionado. ComandoCompleto debera terminar en \; o ; para evitar la interpretacin del shell. Si dentro de ComandoCompleto se encuentra el par {} el comando find reemplazar el nombre del archivo o directorio seleccionado para hacer la ejecucin del comando. Devuelve verdadero si ComandoCompleto pudo ejecutarse y termin con cdigo de retorno cero (0) por lo que puede usarse como un criterio. La accin -ok
ComandoCompleto para cada archivo seleccionado. ComandoCompleto debera ComandoCompleto hace que find pregunte si ejecuta

terminar en \; o ; para evitar la interpretacin del shell. Si dentro de ComandoCompleto se encuentra el par {} el comando find reemplazar el nombre del archivo o directorio seleccionado para hacer la ejecucin del comando. Devuelve verdadero si ComandoCompleto pudo ejecutarse y termin con cdigo de retorno cero (0) por lo que puede usarse como un criterio. Operadores lgicos en find Adems de tener infinidad de criterios de seleccin y acciones sobre los archivos y directorios seleccionados, find tiene operadores lgicos, que permiten combinar los criterios de seleccin. Se tienen: Operador lgico -a (AND). Evala a verdadero si ambos criterios (el de antes de -a y el de despus de -a) evalan a verdadero. El segundo criterio nunca ejecuta si el primero evala a falso. Operador lgico -o (OR). Evala a verdadero si alguno de los criterios (el de antes de -o y el de despus de -o) evala a verdadero. El segundo criterio nunca ejecuta si el primero evala a verdadero. Operador lgico ! (NOT). Evala a verdadero si el criterio que le sigue evala a falso. Parntesis de agrupacin \( y \). Ejemplos:
e@abe:e/> find . . ./.profile ./.sh_history ./procesos.txt ./actual.txt ./dato viejo ./LitteFile ./.ssh ./ramon.txt ./MadRamon 1.png AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 268

./.Xauthority ./subdir1 ./subdir1/Antiguo_SubDir ./subdir1/MadRamon 1.png ./subdir1/smit.log ./subdir1/LitteFile ./nuevoArchiv2.txt ./fechaActual.txt ./NuevoVacio.txt ./archivoAB.txt ./archivoA.txt ./fileA.txt ./fileA.c

... Este primer caso de los ejemplos simplemente muestra cmo listar recursivamente una estructura de rbol en UNIX usando find. Slo se le da un directorio inicial, en este caso el actual (.).
e@abe:e/> find . -ls 64 4 drwxr-xr-x 65 1 -rw-r--r-66 9 -rw------182 3 -rw-r--r-67 1 -rw-r--r-177 1 -rw-r--r-72 0 -rw-r--r-4 1 drwxr-xr-x 183 1 -rw-r----180 18 -rw-r--r-185 1 -rw------12288 1 drwxr-xr-x 12352 1 drwxr-xr-x Antiguo_SubDir 12289 18 -rw-r--r-MadRamon 1.png 12290 10 -rw-r--r-smit.log 12291 0 -rw-r--r-LitteFile 68 1 -rw-r--r-nuevoArchiv2.txt 4 1 1 1 1 1 1 2 1 1 1 3 2 e root e e e e e e e e e e e system system system system system system system system system system system system system system system system system 4096 248 8770 2413 29 29 0 256 760 17804 147 256 256 Sep Apr Sep Aug Aug Aug Aug Aug Aug Aug Aug Aug Aug 16 11 18 18 16 14 14 14 18 14 19 16 15 20:34 08:53 09:23 21:40 23:02 23:15 23:15 19:18 23:09 23:16 17:02 17:37 21:05 . ./.profile ./.sh_history ./procesos.txt ./actual.txt ./dato viejo ./LitteFile ./.ssh ./ramon.txt ./MadRamon 1.png ./.Xauthority ./subdir1 ./subdir1/

1 e 1 e 1 e 1 e

17804 Aug 16 17:37 ./subdir1/ 10181 Aug 16 17:37 ./subdir1/ 0 Aug 16 17:37 ./subdir1/ 1 Aug 18 21:31 ./

... En este segundo caso de los ejemplos se nota el uso de la accin -ls que incluye los detalles de los archivos seleccionados, como se mencion en las notas acerca del comando. Como no se da un criterio de seleccin, el comando find muestra todos los archivos y directorios del inicial hacia abajo (recursivamente).
e@abe:e/> find . -inum 211 -ls 211 1 -rw-r--r-- 1 e system 31 Sep 14 09:13 ./Romanos.txt

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

269

Este tercer caso de los ejemplos muestra el uso de la opcin de seleccin -inum que selecciona un archivo o directorio dado su nmero de inodo -nico por sistema de archivos-.
e@abe:e/> find . -type d -print . ./.ssh ./subdir1 ./subdir1/Antiguo_SubDir

Este cuarto caso muestra el uso de la opcin de seleccin -type, que con el argumento d hace que find slo seleccione los directorios. Tambin se agrega la opcin de accin -print que muestra los nombres de lo seleccionado. Como es la accin predeterminada en esta situacin no cambia para nada la salida del comando find.
e@abe:e/> find . -perm 64 4 drwxr-xr-x 4 1 drwxr-xr-x 12288 1 drwxr-xr-x 12352 1 drwxr-xr-x Antiguo_SubDir -111 -ls 4 e 2 e 3 e 2 e system system system system 4096 256 256 256 Sep Aug Aug Aug 16 14 16 15 20:34 19:18 17:37 21:05 . ./.ssh ./subdir1 ./subdir1/

... Este quinto caso de los ejemplos muestra el uso de la opcin de seleccin -perm, que cuando se le da un nmero debe ser octal, y si se le da con un smbolo menos (-) asumir al menos estos permisos, tal vez otros adicionales. Como se le da 111 el comando find entiende --x--x--x, que con el menos (-) asume que al menos tenga --x--x--x. Lista con detalles lo seleccionado y se nota que stos s cumplen con el criterio.
e@abe:e/> find /tmp /home -links +2 /tmp /tmp/bos find: 0652-081 cannot change directory : The file access permissions do not find: 0652-081 cannot change directory : The file access permissions do not /tmp/vgdata /tmp/ejemplo /home find: 0652-081 cannot change directory : The file access permissions do not

to </tmp/lost+found>: allow the specified action. to </tmp/wsmdata.196726>: allow the specified action.

to </home/lost+found>: allow the specified action.

... El sexto caso de los ejemplos muestra cmo cuando un usuario usa find, el comando no puede ir donde el usuario manualmente no puede ir (usando cd). En este caso se muestra cmo usar dos directorios para iniciar una bsqueda (simplemente separndolos con espacios), y cmo buscar segn el nmero de nombres (en este caso los que tengan ms de dos nombres).
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 270

e@abe:e/> find /tmp /home -links +2 2> /dev/null /tmp /tmp/bos /tmp/vgdata /tmp/ejemplo /home /home/e /home/e/subdir1 /home/j /home/ldapdb2 /home/ldapdb2/sqllib /home/ldapdb2/sqllib/function /home/ldapdb2/sqllib/spmlog /home/ldapdb2/ldapdb2 /home/ldapdb2/ldapdb2/NODE0000 /home/ldapdb2/ldapdb2/NODE0000/SQL00001

... El sptimo caso de los ejemplos muestra cmo cuando un usuario usa find, el comando no puede ir donde el usuario manualmente no puede ir (usando cd). Para evitar la mezcolanza de lo reportado por find con los mensajes de error se usa redireccin, se mandan los mensajes de error al archivo /dev/null.
e@abe:e/> find /tmp /home ! -user e -ls 2> /dev/null 2 8 drwxrwxrwt 10 bin bin 8192 10 1 drwxr-xr-x 2 root system 256 tmp/.oslevel.datafiles 11 0 -rw-r--r-- 1 root system 0 tmp/.oslevel.datafiles/.oslevel.hold 26 1 -rw-r--r-- 1 root system 62 tmp/.oslevel.datafiles/.oslevel.mlinfo.cache 29 1 -rw-r--r-- 1 root system 5 tmp/.oslevel.datafiles/.oslevel.cache.sum 52 3 -rw-r--r-- 1 root system 3068 tmp/.ctinst.log 106 13 -rwxr--r-- 1 test02 testgrp1 12292 tmp/.DS_Store 120 1 -rw-r--r-- 1 root system 406 tmp/.sr_migrate.log 4 0 -rw------- 1 root system 0 tmp/.strload.mutex 14 49 -rw-r--r-- 1 root system 49464 tmp/.tmpfile.123028 23 1 -rw-r--r-- 1 root system 29 File1.txt 17 4 -rw-r--r-- 1 root system 3584 tlist159808 8 0 -rw-r----- 1 root system 0 Spmi_shm_hook 18 888 -rw-r----- 1 root system 909172 client-2.2.7-4.aix4.3.ppc.rpm Sep 18 09:22 /tmp Aug 9 13:15 / Apr 10 13:18 / Aug Aug 9 12:33 / 9 12:33 /

Aug 17 10:37 / Aug 9 23:56 /

Apr 10 08:47 / Apr 10 11:05 / Apr 10 15:41 / Aug 9 10:42 /tmp/

Apr 13 00:38 /tmp/ Apr 10 20:48 /tmp/ Aug 9 11:55 /tmp/samba-

...
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 271

En este octavo caso de los ejemplos se usa find con un operador lgico NOT (el smbolo !), donde unido con -user e indicia seleccionar los que su dueo no es e, como tal vez no pueda entrar a buscar en ciertos directorios, los mensajes de error se redireccionan a /dev/null (con 2>).
e@abe:e/> find /home -size +10 find: 0652-081 cannot change directory to </home/lost+found>: : The file access permissions do not allow the specified action. /home/e/.sh_history /home/e/MadRamon 1.png /home/e/subdir1/MadRamon 1.png /home/e/subdir1/smit.log /home/e/ibmserver2-lslpp-L.txt find: 0652-081 cannot change directory to </home/j/.ssh>: : The file access permissions do not allow the specified action. /home/ldapdb2/sqllib/db2dump/db2diag.log /home/ldapdb2/sqllib/db2dump/ldapdb2.nfy

... En este noveno caso de los ejemplos se muestra el uso de la opcin de seleccin -size. Con sta se dice a find que seleccione los archivos que miden ms de 5KB (10 bloques de 512B). El comando reporta que no pudo entra a algunos subdirectorios del inicial /home.
e@abe:e/> find /home -mtime -1 -ls 2> /dev/null 66 9 -rw------- 1 e system e/.sh_history 9166 Sep 18 09:29 /home/

En el dcimo caso se le dice a find que seleccione los archivos -o directorios- debajo de / home que han sido modificados hace menos de un da (con la opcin de seleccin -mtime -1), que les liste los detalles (con la accin -ls), y los mensajes de error los mandamos al archivo /dev/null.
e@abe:e/>find /home -type f -a -user e -ok rm {} \; find: 0652-081 cannot change directory to </home/lost+found>: : The file access permissions do not allow the specified action. rm /home/e/.sh_history (?) n rm /home/e/dato viejo (?) y rm /home/e/LitteFile (?)

... En el caso once de los ejemplos se le dice a el comando find que seleccione los archivos que cumplen dos criterios: que sean de tipo f (es decir que sean archivos), usando el criterio de seleccin -type f y (AND) que tengan como dueo al usuario e. Con cada uno de los seleccionados deber ejecutar un rm, pero deber preguntar antes de ejecutar, para ello usando la accin -ok rm {} \;. Se nota cmo find reemplaza el nombre de lo encontrado o seleccionado en la posicin donde est el par de smbolos {} en el comando armado para la accin -ok. Se nota tambin cmo \; pertenece a la sintaxis pero no se usa a la hora de ejecutar el comando. Se nota finalmente cmo es la pregunta que find hace, y cmo se
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 272

puede responder usando y -para dar un s y que find ejecute el comando que arm-, o usando otra cosa -en los ejemplos n- para que find no ejecute el comando que arm. Ejemplo Especial: Para buscar los archivos que cuyo nombre tiene alguna caracterstica y que contienen cierto texto se usa:
find /directorio/inicial -name *.extensin | xargs grep -l texto a buscar

Esta construccin ubica simplemente los archivos a los que amerita revisarles sus contenidos (usando el comando find, que no revisa contenidos), y luego de ubicados se los pasa a grep que los abre y s revisa lnea por lnea para verificar si dentro de los contenidos se encuentra el texto a buscar (grep abre y revisa los contenidos, pero no ubica los archivos). Esta construccin reporta el nombre de cada archivo que contenga el texto a buscar, y la lnea donde el texto se encontr.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

273

Ejecucin de comandos en cantidades de archivos: xargs


1 2 3 4 5 6 7 8 9 10

xargs comandoarg1arg2arg3arg4arg5...

Como muchas veces un administrador usa find para ejecutar un comando en muchsimos archivos, casi siempre a travs de la accin -exec del comando find, y como find ejecuta al comando una vez por cada uno de los archivos seleccionados, y si find selecciona miles de archivo el comando se ejecutar -o al menos se intentar ejecutar- miles de veces. Como muchos o muchsimos de los comandos de UNIX pueden ejecutarse dndole muchos -tal vez centenares- de argumentos, es muy ineficiente ejecutar miles de veces un comando con un argumento, en vez de una vez con miles de argumentos. En muchos caso puede usarse la construccin comandoEjecutar -opciones $(find / directorio /criterios -print), pero si find selecciona miles de archivos la lnea de comandos dentro de $( ... ) quedar muy muy larga, posiblemente generando error, ya que la lnea de comandos del intrprete shell soporta secuencias muy largas, pero no infinitas. Para sobreponerse a todas las situaciones mencionadas los UNIX incluyen un comando llamado xargs que: Recibe nombres de archivos por entrada estndar y con los mismos arma lneas de comandos largas. Conoce las limitaciones de las lneas de comandos del UNIX donde ejecuta para no sobrepasar los topes. Permite especificar cmo deben ser las lneas de comandos que arma. La sintaxis del comando xargs es:
xargs [ -E marcaFin ] [ -I comodn ] [ -L mnimo ] [ -n mximo ] [ -p ] [ -s maxCars ] [ -t ] comando

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 274

El comando xargs necesita una lista de nombres en la entrada estndar. El comando xargs combina comando con cierto nmero de argumentos que ha ledo de la entrada estndar as: La opcin I se usa para indicar a xargs un texto en el comando que deber reemplazarse por cada uno de los nombres ledos de la entrada estndar. Si no se usa se asume el texto predeterminado {}. La opcin L se usa para indicar a xargs cuntos nombres deber usar mnimo para cada invocacin del comando. La opcin n se usa para indicar a xargs cuntos nombres deber usar mximo de lo ledo de la entrada estndar para cada invocacin del comando. Si el comando no tiene el texto de reemplazo ni se us la opcin I xargs tratar de incluir el mximo de nombres posibles sin sobrecargar los lmites de la lnea de comandos del UNIX donde se est ejecutando. Es posible que la ltima ejecucin se ejecute con pocos nombres debido a que xargs va consumiendo la entrada estndar. La opcin p se usa para que xargs pregunte antes de cada invocacin del comando. La opcin s se usa para indicar a xargs que no se limite en el nmero de nombres a usar en cada invocacin, si no que cada invocacin no supere un nmero mximo de caracteres dado por el argumento de la opcin s. La opcin t se usa para hacer trazado (debug) de las ejecuciones de xargs. Ejemplos:
e@abe:e/> echo file[C-H]* | xargs compress -v fileC: Compression: 55.18% This file is replaced fileD: Compression: 55.18% This file is replaced fileE: Compression: 55.18% This file is replaced fileF: Compression: 55.14% This file is replaced fileG: Compression: 55.14% This file is replaced fileH: Compression: 55.18% This file is replaced with with with with with with fileC.Z. fileD.Z. fileE.Z. fileF.Z. fileG.Z. fileH.Z.

En el primer caso de los ejemplos se usa artificialmente xargs para ejecutar un comando sobre muchos archivos, en este caso se le da compress -v a xargs y el arma una lnea de comandos con posiblemente muchsimos argumentos, toda la lnea comenzando con compress -v. Si la lnea de comandos es demasiado grande, el tomara muchos de los argumentos que va leyendo de la entrada estndar y armara la lnea de comandos ms grande posible comenzando con compress -v. Armara una segunda, y as, hasta consumir toda la entrada estndar.
e@abe:e/> echo file[C-H]* | xargs -t compress -v compress -v fileC fileD fileE fileF fileG fileH fileC: Compression: 55.18% This file is replaced with fileC.Z. fileD: Compression: 55.18% This file is replaced with fileD.Z. AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 275

fileE: fileF: fileG: fileH:

Compression: Compression: Compression: Compression:

55.18% 55.14% 55.14% 55.18%

This This This This

file file file file

is is is is

replaced replaced replaced replaced

with with with with

fileE.Z. fileF.Z. fileG.Z. fileH.Z.

En el segundo caso de los ejemplos se le da la misma entrada a xargs, pero se usa la opcin t para poder observar cmo es la lnea de comandos que compress usara -que xargs arma-.
e@abe:e/> echo file[C-H]* | xargs -t compress -v fileC fileD fileE fileC: Compression: 55.18% This file fileD: Compression: 55.18% This file fileE: Compression: 55.18% This file compress -v fileF fileG fileH fileF: Compression: 55.14% This file fileG: Compression: 55.14% This file fileH: Compression: 55.18% This file -n3 compress -v is replaced with fileC.Z. is replaced with fileD.Z. is replaced with fileE.Z. is replaced with fileF.Z. is replaced with fileG.Z. is replaced with fileH.Z.

En el tercer caso de los ejemplos se usa xargs con la misma entrada, pero esta vez adems de usar t para observar los comandos que xargs arma, se usa la opcin n con un 3 para que xargs arme lneas de comandos con mximo tres tems tomados de la entrada estndar.
e@abe:e/> find . -name 'file[C-H]*' | xargs -L 1 -I _ echo mv _ _-Compr mv ./fileG.Z ./fileG.Z-Compr mv ./fileH.Z ./fileH.Z-Compr mv ./fileC.Z ./fileC.Z-Compr mv ./fileD.Z ./fileD.Z-Compr mv ./fileE.Z ./fileE.Z-Compr mv ./fileF.Z ./fileF.Z-Compr

En el cuarto caso de los ejemplos se usa el comando xargs en una situacin tpica: combinado con find. En este caso find busca y selecciona -y reporta- unos ciertos archivos, que pasa a xargs a travs de redireccin, el que armar unas lneas de comandos. Con la opcin -L xargs no armar lneas de comandos imposiblemente grandes, tomar tantos tems de la entrada estndar como le dice el argumento de L, en esta caso un item. Con la opcin -I se indica a xargs que use algo como comodn para ubicar en la lnea de comandos el texto del tem que recin tom de la entrada estndar. En este caso se usa un _. Luego se arma una lnea de comandos con el tem. Para no necesariamente ubicarlo al final de lo dado a xargs como argumento se usa el smbolo de reemplazo, en este caso un _. El smbolo de reemplazo puede usarse hasta cinco veces en una lnea de reemplazo generada por xargs. Como se ve xargs deber armar algo como echo mv Nombre1 Nombre1-Compr, y se nota que en realidad es as, porque se observan unas lneas de salida mv Nombre1 Nombre1-Compr.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

276

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

277

Comprimir archivos 1: compress & uncompress

compress uncompress

Hace tres dcadas unos investigadores y desarrolladores inventaron un algoritmo para comprimir la informacin digital por medio de la codificacin de las repeticiones binarias en los archivos, podo despus en UNIX se desarrollaron un par de comandos: uno toma un archivo y si tiene sentido lo reemplaza por otro comprimido con el nombre ligeramente cambiado -este comando se denomina compress- y el otro toma una comprimido y lo reemplaza por la versin sin comprimir, ajustndole el nombre -este otro comando se denomina uncompress-. El primer comando tiene la sintaxis:
compress [ -c ] [ -f | -F ] [ -v ] [ archivo ... ]

El segundo comando tiene la sintaxis:


uncompress [ -c ] [ -f | -F ] [ -v ] [ archivo ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. El smbolo | indica posibilidad, se usa para mostrar las posibles opciones, no hace parte de la sintaxis. Si a cualquiera de los dos comandos (compress o uncompress) no se le dan archivos como argumento, intentarn leer de la entrada estndar y escribir en la salida estndar. La opcin c se usa para que tanto compress como uncompress escriban en la salida estndar (independientemente de se dio archivo como argumento). As no intentan escribir archivos.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

278

La opcin f (o la opcin F, son exactamente equivalentes) forza la creacin del archivo comprimido o descomprimido, segn el caso. El comando compress no intenta crear el archivo comprimido si ve que el intento de compresin no comprime, que el archivo quedara igual o ms grande. La opcin v se usa para que compress (o uncompress) reporte en la salida estndar de errores la estadstica de compresin por archivo. Ambos comandos intentan crear un archivo con el mismo dueo, grupo, permisos y fechas que el original, pero si no corren como root no podrn crear archivos con usuario diferente del bajo el que ejecutan. Ntese que ninguno de los comandos trabajan archivos empaquetados, as, que si se les dan cinco archivos generarn cinco archivos ms pequeos, no uno slo que contiene copias comprimidas de los cinco. Ejemplos:
e@abe:e/> find . -size 64 4 drwxr-xr-x 66 11 -rw------182 3 -rw-r--r-177 3 -rw-r--r-180 18 -rw-r--r-12289 18 -rw-r--r-MadRamon 1.png 12290 10 -rw-r--r-smit.log 191 3 -rw-r--r-194 3 -rw-r--r-195 3 -rw-r--r-196 3 -rw-r--r-197 3 -rw-r--r-198 3 -rw-r--r-199 3 -rw-r--r-217 104 -rw-r----lslpp-L.txt +2000c -ls 4 e system 1 e system 1 e system 1 e system 1 e system 1 e system 1 e 1 1 1 1 1 1 1 1 e e e e e e e e system system system system system system system system system 4096 10418 2413 2245 17804 17804 Sep Sep Aug Sep Aug Aug 18 18 18 9 14 16 10:56 10:56 21:40 18:06 23:16 17:37 . ./.sh_history ./procesos.txt ./fileH ./MadRamon 1.png ./subdir1/

10181 Aug 16 17:37 ./subdir1/ 2245 2245 2245 2245 2245 2245 2245 105515 Sep 9 Sep 9 Sep 9 Sep 9 Sep 9 Sep 9 Sep 9 Sep 15 18:06 18:06 18:06 18:06 18:06 18:06 18:06 18:14 ./fileB ./fileC ./fileD ./fileE ./fileF ./fileG ./fileI ./ibmserver2-

En este primer caso de los ejemplos se buscan archivos que ameritan ser comprimidos, nicamente, usando find con el criterio -size.
e@abe:e/> compress -v $(find . -size +2000c) . is not a regular file. It is not changed. ./MadRamon: A file or directory in the path name does not exist. 1.png: A file or directory in the path name does not exist. ./subdir1/MadRamon: A file or directory in the path name does not exist. 1.png: A file or directory in the path name does not exist. compress: 0653-054 ./subdir1/smit.log.Z already has a .Z suffix. It is not changed. ./.sh_history: Compression: 50.65% This file is replaced with ./.sh_history.Z. ./ibmserver2-lslpp-L.txt: Compression: 77.47% This file is replaced with ./ ibmserver2-lslpp-L.txt.Z. AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 279

En este segundo caso de ejemplo se combina find con compress usando substitucin de comandos para que se vayan comprimiendo los archivos que find encontr. Se usa compress con la opcin v para que reporte las estadsticas de compresin de cada archivo que se va comprimiendo.
e@abe:e/> find . -name '*Z' -exec uncompress -v {} \; ./procesos.txt.Z: This file is replaced with ./procesos.txt. ./fileH.Z: This file is replaced with ./fileH. ./fileB.Z: This file is replaced with ./fileB. ./subdir1/smit.log.Z: This file is replaced with ./subdir1/smit.log. ./fileC.Z: This file is replaced with ./fileC. ./.sh_history.Z: This file is replaced with ./.sh_history. ./fileD.Z: This file is replaced with ./fileD. ./fileE.Z: This file is replaced with ./fileE. ./fileF.Z: This file is replaced with ./fileF. ./fileG.Z: This file is replaced with ./fileG. ./fileI.Z: This file is replaced with ./fileI. ./ibmserver2-lslpp-L.txt.Z: This file is replaced with ./ibmserver2-lslppL.txt.

En el tercer caso de ejemplo se usa la accin -exec del comando find para invocar uncompress en cada archivo comprimido -que se sabe que tiene el nombre terminado en Z. Se usa uncompress con la opcin v para que reporte los archivos conforme los va descomprimiendo.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

280

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

281

Comprimir archivos 2: gzip & gunzip

gzip gunzip

Como tanto compress como uncompress estn basados en el algoritmo patentado LZW (en este momento el algoritmo es propiedad de Unisys-, Jean-Loup Gailly y Mark Adler lanzaron el 31 de octubre de 1992 un nuevo par de programas diseados para reemplazarlos, todo bajo el auspicio del proyecto GNU. Este nuevo par de programas usan un algoritmo ahora llamado DEFLATE, que es una combinacin de LZ77 y codificacin Huffman. Como este par de comandos hacen parte del proyecto GNU, ambos son de cdigo abierto. Igual que compress, gzip est diseado para comprimir archivos individuales, y gunzip est diseado para descomprimir los archivos creados por gzip. Ntese que gunzip reconoce los archivos creados con compress y puede descomprimirlos. Igual que compress, gzip toma un archivo y lo reemplaza por otro comprimido, con el nombre ligeramente cambiado agregndole .gz, y gunzip toma un archivo .gz comprimido y lo descomprime, generando un archivo sin la extensin .gz. La sintaxis de ambos comandos es sencilla:
gzip [ -c ] [ -f ] [ -v ] [ -dgito | --fast | --best ] [ archivo ... ]

y
gunzip [ -c ] [ -f ] [ -v ] [ -t ] [ -l ] [ archivo ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis. El smbolo | indica posibilidad, se usa para mostrar las posibles opciones, no hace parte de la sintaxis. Si a cualquiera de los dos comandos (gzip o gunzip) no se le dan archivos como argumento, intentarn leer de la entrada estndar y escribir en la salida estndar.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 282

La opcin c se usa para que tanto gzip como gunzip escriban en la salida estndar (independientemente de se dio archivo como argumento). As no intentan escribir archivos. La opcin f (o la opcin F, son exactamente equivalentes) forza la creacin del archivo comprimido o descomprimido, segn el caso. El comando gzip no intenta crear el archivo comprimido si ve que el intento de compresin no comprime, que el archivo quedara igual o ms grande. La opcin dgito (que recibe de 1 a 9) se usa para seleccionar un mtodo de compresin: el ms rpido es 1, que posiblemente genera un archivo poco comprimido, es equivalente a la opcin -fast; el ms lento es 9, que posiblemente genera un archivo mucho ms pequeo, pero consumiendo ms RAM y CPU en el proceso, es equivalente a -best. Lo predeterminado es 6. La opcin v se usa para que gzip (o gunzip) reporte en la salida estndar de errores la estadstica de compresin por archivo. La opcin l se usa en gunzip no para descomprimir archivos, si no para reportar estadsticas de compresin por archivo. La opcin t se usa para que gunzip haga pruebas de integridad en los archivos comprimidos y reporte lo que encuentre incongruente. Ambos comandos intentan crear un archivo con el mismo dueo, grupo, permisos y fechas que el original, pero si no corren como root no podrn crear archivos con usuario diferente del bajo el que ejecutan. Note que como gzip comprime individualmente los archivos, es muy comn primero empacar archivos con tar y comprimir lo que este genera. Estos archivos salidos de la combinacin de los dos comandos casi siempre se encuentran con extensiones .tar.gz o tgz y se denominan tarballs. Ejemplos:
e@abe:e/> find . -size 64 4 drwxr-xr-x 221 3 -rw-r--r-182 3 -rw-r--r-177 3 -rw-r--r-180 18 -rw-r--r-1.png 12289 18 -rw-r--r-MadRamon 1.png 12290 10 -rw-r--r-smit.log 191 11 -rw------10:57 ./.sh_history 193 3 -rw-r--r-+2000c -ls 4 e 1 e 1 e 1 e 1 e 1 e 1 e 1 e 1 e system system system system system system system system system 4096 2245 2245 2245 17804 Sep 18 11:19 . Sep 9 18:06 ./fileH Sep 9 18:06 ./fileB Sep 9 18:06 ./fileC Aug 14 23:16 ./MadRamon

17804 Aug 16 17:37 ./subdir1/ 10181 Aug 16 17:37 ./subdir1/ 10456 Sep 18 2245 Sep 9 18:06 ./fileD 283

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

194 3 -rw-r--r-195 3 -rw-r--r-196 3 -rw-r--r-197 3 -rw-r--r-198 104 -rw-r----ibmserver2-lslpp-L.txt 217 3 -rw-r--r-procesos.txt

1 1 1 1 1

e e e e e

system system system system system system

2245 2245 2245 2245 105515

Sep 9 Sep 9 Sep 9 Sep 9 Sep 15

18:06 18:06 18:06 18:06 18:14

./fileE ./fileF ./fileG ./fileI ./

1 e

2413 Aug 18 21:40 ./

En este primer caso de los ejemplos se buscan archivos que ameritan ser comprimidos, nicamente, usando find con el criterio -size.
e@abe:e/> gzip -v $(find . -size +2000c) gzip: . is a directory -- ignored ./fileH: 72.8% -- replaced with ./fileH.gz ./fileB: 72.8% -- replaced with ./fileB.gz ./fileC: 72.9% -- replaced with ./fileC.gz ./MadRamon: No such file or directory 1.png: No such file or directory ./subdir1/MadRamon: No such file or directory 1.png: No such file or directory ./subdir1/smit.log: 72.3% -- replaced with ./subdir1/smit.log.gz ./.sh_history: 72.5% -- replaced with ./.sh_history.gz ./fileD: 72.9% -- replaced with ./fileD.gz ./fileE: 72.8% -- replaced with ./fileE.gz ./fileF: 72.8% -- replaced with ./fileF.gz ./fileG: 72.8% -- replaced with ./fileG.gz ./fileI: 72.8% -- replaced with ./fileI.gz ./ibmserver2-lslpp-L.txt: 87.0% -- replaced with ./ibmserver2-lslppL.txt.gz ./procesos.txt: 71.6% -- replaced with ./procesos.txt.gz

En este segundo caso de ejemplo se combina find con gzip usando substitucin de comandos para que se vayan comprimiendo los archivos que find encontr. Se usa gzip con la opcin v para que reporte las estadsticas de compresin de cada archivo que se va comprimiendo.
e@abe:e/> find . -name '*gz' -exec gunzip -l {} \; compressed uncompr. ratio uncompressed_name 633 2245 72.8% ./fileB compressed uncompr. ratio uncompressed_name 631 2245 72.9% ./fileC compressed uncompr. ratio uncompressed_name 2902 10456 72.5% ./.sh_history compressed uncompr. ratio uncompressed_name 2842 10181 72.3% ./subdir1/smit.log compressed uncompr. ratio uncompressed_name 631 2245 72.9% ./fileD compressed uncompr. ratio uncompressed_name 633 2245 72.8% ./fileE compressed uncompr. ratio uncompressed_name 633 2245 72.8% ./fileF compressed uncompr. ratio uncompressed_name

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

284

633 compressed 633 compressed 13669 compressed 716 compressed 633

2245 uncompr. 2245 uncompr. 105515 uncompr. 2413 uncompr. 2245

72.8% ratio 72.8% ratio 87.0% ratio 71.6% ratio 72.8%

./fileG uncompressed_name ./fileI uncompressed_name ./ibmserver2-lslpp-L.txt uncompressed_name ./procesos.txt uncompressed_name ./fileH

En el cuarto caso se usa la opcin de accin -exec del comando find para ejecutar gunzip -l en cada archivo comprimido y obtener unas estadsticas de compresin por archivo.
e@abe:e/> find method crc defla c58ff355 defla 4ee49376 defla db9b9031 defla 44d5bb72 defla 4401742b defla ae144046 defla 7cc54b0d defla d675841c defla 58651c7f defla e3f19b59 L.txt defla e1b6233a defla f2d5d36e . -name '*gz' -print | xargs gunzip -vl date time compressed uncompr. ratio Sep 9 18:06 633 2245 72.8% Sep 9 18:06 631 2245 72.9% Sep 18 10:57 2902 10456 72.5% Aug 16 17:37 2842 10181 72.3% Sep 9 18:06 631 2245 72.9% Sep 9 18:06 633 2245 72.8% Sep 9 18:06 633 2245 72.8% Sep 9 18:06 633 2245 72.8% Sep 9 18:06 633 2245 72.8% Sep 15 18:14 13669 105515 87.0% Aug 18 21:40 Sep 9 18:06 716 633 25189 2413 2245 146525 uncompressed_name ./fileB ./fileC ./.sh_history ./subdir1/smit.log ./fileD ./fileE ./fileF ./fileG ./fileI ./ibmserver2-lslpp-

71.6% ./procesos.txt 72.8% ./fileH 82.8% (totals)

En el quinto caso se usa una combinacin de find con xargs con la esperanza de que haya slo una ejecucin de gunzip -vl. As (con las opciones v y l)se obtiene un reporte ms detallado por archivo, pero como es una nica ejecucin, el reporte es ms conciso (y tiene totales).
e@abe:e/> find . -name '*gz' -print | xargs gunzip -v ./fileB.gz: 72.8% -- replaced with ./fileB ./fileC.gz: 72.9% -- replaced with ./fileC ./.sh_history.gz: 72.5% -- replaced with ./.sh_history ./subdir1/smit.log.gz: 72.3% -- replaced with ./subdir1/smit.log ./fileD.gz: 72.9% -- replaced with ./fileD ./fileE.gz: 72.8% -- replaced with ./fileE ./fileF.gz: 72.8% -- replaced with ./fileF ./fileG.gz: 72.8% -- replaced with ./fileG ./fileI.gz: 72.8% -- replaced with ./fileI ./ibmserver2-lslpp-L.txt.gz: 87.0% -- replaced with ./ibmserver2-lslppL.txt ./procesos.txt.gz: 71.6% -- replaced with ./procesos.txt ./fileH.gz: 72.8% -- replaced with ./fileH

En el sexto caso se usa una combinacin parecida, pero no un reporte de compresin (con gunzip -l), si no una descompresin de los archivos, aunque tambin reporta, porque se incluy la opcin v de gunzip.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 285

Empacar archivos: tar

tar

A fines de la dcada de 1980 se notaba cmo la utilitad bsica para llevar a cabo copias de respaldo a cinta de la poca era inadecuada e insuficiente. Por esta razn central se di un nuevo desarrollo que termin tomando la forma del comando tar (tape archive). Este comando y el formato que se desarroll para que el mismo manejara se dirigieron originalmente a ser almacenados directamente en dispositivos en burto (raw devices), no en archivos como es muy comn ahora. Esta utilidad y su formato se estandarizaron en POSIX. 1-1988 y luego en POSIX.1-2001. Aunque originalmente fue una herramienta y un formato para copias de respaldo en dispositivos puramente secuenciales ahora es ms comn como un formato para el transporte de mltiples archivos como un todo. La mayora de las utilidades tar de los sistemas UNIX trabajan lo que ahora se denomina formato USTAR (Uniform Standard Tape Archive), formato que permite almacenar mltiples -muchsimos- archivos, con sus metadatos dentro de uno solo. Como los archivos tar tienen un encabezado por archivo almacenado dentro de l, y este encabezado tiene unos limitantes, conviene saber cules son estos lmites: bsicamente porciones de nombre de mximo cien caracteres y archivos individuales de mximo 8GB. Note que tar archiva pero no comprime, dejando esta tarea a alguna otra utilidad o al dispositivo o medio de almacenamiento. La sintaxis de tar es bastante compleja, pero de manera resumida se tiene:
tar { -c | -r | -x | -u } [ -R ] [ -D ] [ -C directiorio ] [ -L ListaInclusin ] [ -X ListaExclusin ] [ -p ] [ -v ] [ archivo ... ]

Donde: Los smbolos [ y ] indican que las opciones y los argumentos son opcionales, no hacen parte de la sintaxis.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

286

El smbolo | indica posibilidad, se usa para mostrar las posibles opciones, no hace parte de la sintaxis. La opcin c se usa para crear un nuevo archivo de respaldo, copiando los archivos mencionados en ListaInclusin o como argumentos archivo, comenzando desde el inicio del archivo de respaldo (no agrega). La opcin r se usa para agregar archivos a un archivo de respaldo, copiando los archivos mencionados en ListaInclusin o como argumentos archivo, comenzando desde el fin del archivo de respaldo (agrega). Esta opcin es vlida para archivos de sistema de archivo nicamente, no es vlida si el destino de copia es una cinta de respaldo. La opcin x se usa para extraer archivos de una copia de respaldo (restaurar), copiando los archivos mencionados en ListaInclusin o como argumentos archivo, al directorio actual, teniendo en cuenta la ruta de directorio almacenada en el archivo de copia de respaldo. La opcin u se usa para agregar archivos a un archivo de copia de respaldo, pero nicamente si no existen ya dentro de la copia de respaldo, o si la copia dentro de la copia de respaldo tiene fecha de modificacin anterior. Los archivos que se copia se mencionan en ListaInclusin o son mencionados como argumento archivo (actualiza la copia de respaldo). Esta opcin es vlida para archivos de sistema de archivo nicamente, no es vlida si el destino de copia es una cinta de respaldo. La opcin t se usa para que tar lea el medio o archivo de copia de respaldo, pero que no intente crear los archivos (no intente recuperar). Se usa bsicamente junto con la opcin v para listar los contenidos de un medio o archivo de copia. La opcin R se usa para forzar a tar para que procese recursivamente los archivos mencionados en ListaInclusin o dados como argumentos archivo. La opcin D se usa para forzar a tar para que no procese recursivamente los archivos mencionados en ListaInclusin o dados como argumentos archivo. La opcin C se usa para que tar se cambie de directorio antes de procesar (agregar o extraer) los archivos que siguen como parmetro. tar se cambia al directorio dado como argumento de la opcin C. La opcin L con un nombre de archivo como argumento para dar a tar una lista de archivos y directorios a procesar. Esta lista puede usarse como archivos a copiar al medio de respaldo o como archivos a recuperar del medio de respaldo. El archivo dado como argumento a la opcin L debe tener un nombre de archivo a procesar por lnea.
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 287

La opcin X tiene un uso parecido a la opcin L: se usa con un nombre de archivo como argumento para dar a tar una lista de archivos y directorios a excluir de todo procesamiento. Esta lista puede usarse como archivos a excluir de la copia al medio de respaldo o como archivos a no recuperar del medio de respaldo. El archivo dado como argumento a la opcin L debe tener un nombre de archivo a excluir por lnea. La opcin p indica a tar que debe procesar los atributos completos de los archivos: si est copiando a un medio de respaldo deber copiar dueo, grupo, permisos, fechas y dems; si est recuperando deber intentar recuperar dueo, grupo, permisos, fechas y dems. La mayora de sistemas UNIX impiden modificar el usuario dueo de los archivos a menos que se est trabajando como root. La opcin v se usa para que tar vaya reportando los nombres y los detalles de los archivos conforme los copia a o desde un medio o archivo de copia de respaldo. La opcn f es quizs la ms importante: se usa para indicar a tar dnde debe almacenar la copia de respaldo con todo, o de dnde debe extraer lo que se quiere recuperar. El argumento de la opcin f debe ser un dispositivo de almacenamiento secuencial como una cinta (nombre que vara enormemente entre las diferentes variantes de UNIX) o un archivo tradicional. Si al comando tar no se le da la opcin f intentar leer (cuando usa las opciones t o x) o escribir (cuando se usa con c, u o r) a o desde un dispositivo de copia de respaldo predeterminado segn el UNIX donde est en ejecucin -conclusin: siempre use la opcin f para indicarle a tar el medio de almacenamiento de las copias de respaldo-. Ejemplos:
e@abe:e/> ls -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--l archivo* 1 e system 1 e system 1 e system 1 e system 1 e system 1 e system 1 e system 1 e system 1 e system 1 e system 0 0 0 0 105 919 105 105 220 220 Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep 09 09 09 09 09 09 09 09 09 09 19:21 19:21 18:14 19:21 18:05 18:05 18:07 18:07 18:06 18:06 archivo A.txt archivo.part.txt archivo.txt archivo23.txt archivoA.txt archivoAB.txt archivoE.txt archivoZ.txt archivoaB.txt archivoab.txt

El primer caso de los ejemplos simplemente muestra un listado de los archivos que se tienen antes de iniciar el trabajo directamente con tar.
e@abe:e/> tar -cvpf empaque.tar archivo* a archivo A.txt 0 blocks. a archivo.part.txt 0 blocks. a archivo.txt 0 blocks. AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 288

a archivo23.txt 0 blocks. a archivoA.txt 1 blocks. a archivoAB.txt 2 blocks. a archivoE.txt 1 blocks. a archivoZ.txt 1 blocks. a archivoaB.txt 1 blocks. a archivoab.txt 1 blocks. e@abe:e/> ls -l *tar -rw-r--r-1 e system

10240 Sep 18 23:38 empaque.tar

El segundo caso de los ejemplos muestra cmo se usa tar para crear un archivo de respaldo: bsicamente a travs de las opciones c y f. En el ejemplo se agregan las opciones v y p para que adems tar liste los nombres de los archivos conforme los va copiando al respaldo y para que guarde todos los detalles como el dueo y los permisos para poderlos recuperar despus.
e@abe:e/> gzip -v9 *tar empaque.tar: 92.5% -- replaced with empaque.tar.gz

El tercer caso de los ejemplos simplemente usa gzip para comprimir la copia de respaldo creada con tar.
e@abe:e/> rm archivo* && ls -l archivo* ls: 0653-341 The file archivo* does not exist.

El cuarto caso de los ejemplos se deshace -borrando- de los archivos originales. Comprueba tambin que se perdieron.
e@abe:e/> gunzip -c empaque.tar.gz | tar -tvp tar: /dev/rmt0: There is a request to a device or address that does not exist.

El quinto caso de los ejemplos muestra cmo tar no lee la entrada estndar -as que no recibe del comando anterior-.
e@abe:e/> gunzip -c empaque.tar.gz | tar -tvpf -rw-r--r-- 501 0 0 Sep 09 19:21:29 2007 -rw-r--r-- 501 0 0 Sep 09 19:21:29 2007 -rw-r--r-- 501 0 0 Sep 09 18:14:20 2007 -rw-r--r-- 501 0 0 Sep 09 19:21:29 2007 -rw-r--r-- 501 0 105 Sep 09 18:05:31 2007 -rw-r--r-- 501 0 919 Sep 09 18:05:39 2007 -rw-r--r-- 501 0 105 Sep 09 18:07:36 2007 -rw-r--r-- 501 0 105 Sep 09 18:07:45 2007 -rw-r--r-- 501 0 220 Sep 09 18:06:16 2007 -rw-r--r-- 501 0 220 Sep 09 18:06:06 2007 archivo A.txt archivo.part.txt archivo.txt archivo23.txt archivoA.txt archivoAB.txt archivoE.txt archivoZ.txt archivoaB.txt archivoab.txt

El sexto caso de los ejemplos muestra cmo tar puede leer de la entrada estndar o escribir en la salida estndar si se usa la opcin f con un menos (-) como argumento.
e@abe:e/> gunzip -c empaque.tar.gz | tar -xvpf x archivo A.txt, 0 bytes, 0 media blocks. x archivo.part.txt, 0 bytes, 0 media blocks. x archivo.txt, 0 bytes, 0 media blocks. x archivo23.txt, 0 bytes, 0 media blocks. AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 289

x x x x x x

archivoA.txt, 105 bytes, 1 media blocks. archivoAB.txt, 919 bytes, 2 media blocks. archivoE.txt, 105 bytes, 1 media blocks. archivoZ.txt, 105 bytes, 1 media blocks. archivoaB.txt, 220 bytes, 1 media blocks. archivoab.txt, 220 bytes, 1 media blocks.

En el sptimo caso de los ejemplos se usa la misma combinacin de gunzip para descomprimir y de tar con la opcin x y f- para recuperar los archivos contenidos en una copia de respaldo comprimida. Como se incluye la opcin p, tar recuperar con todos los atributos de archivo -incluso con el dueo adecuado a menos que no se use el usuario root para recuperar-.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

290

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

291

Comandos varios
Existen muchsimos comandos tiles en UNIX. Muchos son muy prcticos a la hora de hacer scripts de shell. Comando host El sencillo comando host se usa bsicamente para hacer ejercicio del sistema de resolucin de nombres de un sistema UNIX. La sintaxis bsica es:
host direccin

o
host nombre

Ejemplos:
e@abe:e/> host moe Moe.lan is 192.168.1.8, Aliases: moe, ramon e@abe:e/> host 192.168.1.254 gateway is 192.168.1.254, Aliases: gw

Comando hostname El sencillo comando hostname se usa para configurar o consultar el nombre de la mquina UNIX actual. La sintaxis es:
hostname

o
hostname NuevoNombre

Ejemplo:
e@abe:e/> hostname abe

Comando uptime El comando uptime muestra la informacin de vida del sistema donde se corre. El comando muestra la hora en que se ejecuta, cunto lleva el sistema desde que se inici, el nmero de usuarios conectados con sesin interactiva, y la carga promedio en el ltimo perodo de 1 minuto, 5 minutos y 15 minutos. La carga promedio es el nmero de procesos en estado activo durante el perodo. Ejemplo:
e@abe:e/> uptime 12:00AM up 1 day, 9:20, 10 users, load average: 0.24, 0.10, 0.10

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

292

Comando du El comando du (disk usage) se usa para obtener cunto espacio en disco ocupan unos archivos y/o directorios. Cuando se indican directorios el comando calcula cunto ocupan en disco los archivos contenidos dentro del directorio mas lo que ocupa el directorio en s. La sintaxis de du es:
du [ -a | -s ] [ -k | -m | -g ] [ -H ] [ archivo ... ]

Donde: La opcin a se usa para que du reporte por cada archivo contenido en los directorios dados como argumentos, o en directorio actual si no se da como argumento. El comando du reporta siempre por cada uno de los argumentos dados, aunque sean archivos. La opcin s se usa para que du reporte un resumen total del espacio ocupado por todos los argumentos dados. El comando reportar el resumen del directorio actual si no se le dan argumentos. La opcin k se usa para que el reporte generado por du est dado en kilobytes. La opcin m se usa para que el reporte generado por du est dado en megabytes. La opcin g se usa para que el reporte generado por du est dado en gigabytes. La opcin H se usa para que du siga los enlaces simblicos y tenga en cuenta el espacio ocupado por lo apuntado por el enlace simblico. Si no se dan ni k ni m ni g el comando du reportar en bloques de 512B sin importar el formato en que estn almacenados los archivos en disco. Si a du no se le dan argumentos (ni archivos ni directorios) usar el directorio actual como argumento. Ejemplos:
e@abe:e/> du 0 ./.ssh 0 ./subdir1/Antiguo_SubDir 64 ./subdir1 640 . e@abe:e/> du -ms /tmp /etc du: /tmp/lost+found: The file access permissions do not allow the specified action. du: /tmp/wsmdata.196726: The file access permissions do not allow the specified action. 122.36 /tmp du: /etc/tunables: The file access permissions do not allow the specified action. 16.36 /etc

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

293

Comando sum El comando sum muestra la suma de chequeo y cuntos bloques mide cada uno de los archivos dados como parmetros. Normalmente se usa para verificar que un archivo recin transmitido transmiti y se recibi bien. Si a sum no se le dan archivos como argumentos usar la entrada estndar. La sintaxis bsica de sum es:
sum [ archivo ... ]

Ejemplos:
e@abe:e/> sum Meses.txt /etc/passwd 46778 1 Meses.txt 41837 1 /etc/passwd

El comando sum usa un algoritmo estndar aparecido en BSD Unix 4.3. Comando cksum El comando cksum muestra la suma de chequeo calculada segn un algoritmo ms moderno de 32 bits y cuntos bytes mide cada uno de los archivos dados como parmetros. Normalmente se usa para verificar que un archivo recin transmitido transmiti y recibi bien. Si a cksum no se le dan archivos como argumentos usar la entrada estndar. La sintaxis de cksum es:
cksum [ archivo ... ]

Ejemplos:
e@abe:e/> cksum Meses.txt /etc/passwd 1927595220 175 Meses.txt 3518703885 676 /etc/passwd

El comando cksum usa el algoritmo estndar de verificacin CRC que se usa para verificar las tramas ethernet. Comando true El comando true devuelve un cdigo de retorno verdadero siempre. No muestra ningn tipo de salida. Sintaxis:
true

Ejemplo:
e@abe:e/> true && echo Devuelve VERDADERO Devuelve VERDADERO

Existe un comando false que siempre devuelve un cdigo de retorno falso.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

294

Comando yes El comando yes genera una infinita cantidad de lneas de texto yes cuando se ejecuta. La idea es usarlo redirigido a un comando que est esperando una respuesta positiva. Segn el idioma en que se est trabajando es posible que genere otro texto como respuesta. Sintaxis:
yes [ texto ]

Si se da un texto como argumento, el comando yes genera infinitas lneas repitiendo el texto dado como argumento.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

295

Uso avanzado del intrprete de comandos:


Uso del intrprete como un lenguaje de programacin
Una de las ms poderosas caractersticas de UNIX no es una caracterstica de UNIX, es una caracterstica del intrprete de comandos estndar en UNIX. El intrprete estndar de comandos de UNIX (sea Bourne Shell, Bourne Again Shell, o sea Korn Shell, o sean los otros) siempre recibe los comandos y caractersticas que permiten la programacin. Aunque existen caractersticas, sentencias y comandos que tienen sentido cuando se est en medio de un cdigo programado, todas las sentencias y comandos del intrprete pueden ser usadas en todo momento; es decir, no hay que hacer que el shell est en un modo especial para programar, ni hay ciertas caractersticas que funcionan es cuando el shell las encuentra en un archivo programado. Desarrollo de shell scripts El desarrollo de pequeas -o grandes- rutinas programadas, o utilidades especficas a una instalacin se beneficia enormemente de lo que se denominan shell scripts. Estos son archivos de texto que contienen comandos UNIX, y que muy comnmente harn uso de comandos que se constituyen en las sentencias de control de un lenguaje de programacin muy fcil y a la vez muy poderoso. Como todos los comandos -instalados originalmente o noque haya disponibles en un sistema UNIX son usables desde el intrprete de comandos entonces dentro de un archivo de comandos del intrprete de comandos se pueden usar, as todos los comandos que hayan en un sistema son usables por el lenguaje, como si fueran originales. Hay dos detalles bsicos que hacen ms fcil el uso de un shell script: Que sea ejecutable. Si un script del shell no es ejecutable pero es legible por el usuario el mismo lo podr usar, pero solo si lo usa con el nombre del intrprete como prefijo: ksh /nombre/archivo/script o an sh /nombre/script; pero ser ms cmodo si al script slo hay que invocarlo por su nombre, sin necesidad de el mencionado prefijo. Que el sistema pueda encontrarlo en el PATH. Si un shell script no est encontrable en alguno de los directorios de la variable PATH del usuario al usuario le tocar invocarlo por su nombre completo: /nombre/shellscript; pero ser ms cmodo para el usuario si el sistema lo encuentra fcil: shellscript. Pregunta: cmo se hace que un script de shell sea al mismo tiempo legible y ejecutable? Pregunta: cmo se ajusta la variable PATH del usuario permanentemente?

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

296

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

297

Pruebas lgicas: test


Una de los ms bsicos elementos dentro de un ambiente de programacin son las pruebas lgicas. El lenguaje del shell tiene la posibilidad de hacer pruebas lgicas de una manera muy sencilla: a travs del comando test. El comando test recibe una o ms condiciones lgicas y devuelve un cdigo de retorno cero (0) considerado como verdadero si la prueba lgica da verdadero, y devuelve diferente de cero si la prueba lgica da falso. La sintaxis bsica es muy sencilla:
test pruebaLgica

o
[ pruebaLgica ]

Donde: El comando test es equivalente a [. El comando test ignora el ] final. Si se usa la sintaxis [ ] hay que recordar que es un comando con argumentos, as que los espacios son obligatorios. El comando test devuelve verdadero a travs de un cdigo de retorno cero (0), no genera mensajes por salida. El comando test devuelve falso a travs de un cdigo de retorno diferente de cero, no genera mensajes por salida, a menos que haya errores de sintaxis. Existen muchas clases de pruebas lgicas, que se detallan a continuacin. Pruebas lgicas bsicas El comando test tiene una serie de operaciones lgicas bsicas, que aunque tienen un aspecto extrao cuando se usan con test tienen mucho mejor apariencia cuando se usan con la sintaxis [ ]:
expresin comando ! expresin cadena1 = cadena2 cadena2 (de texto). cadena1 == cadena2 cadena2 (de texto). AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 298

devuelve verdadero si expresin devuelve verdadero. devuelve verdadero si comando devuelve verdadero (0). (~) devuelve verdadero si expresin devuelve falso. () devuelve verdadero si cadena1 (de texto) es igual a () devuelve verdadero si cadena1 (de texto) es igual a

Ejemplos:

() devuelve verdadero si cadena1 (de texto) es diferente de cadena2 (de texto)


cadena1 != cadena2

() devuelve verdadero si expr1 es verdadero y expr2 es verdadero tambin. Si expr1 es falso expr2 nunca se ejecuta.
expr1 -a expr2

() devuelve verdadero si expr1 es verdadero o si expr2 es verdadero. Si expr1 es verdadero expr2 nunca se ejecuta.
expr1 -o expr2

(=) devuelve verdadero si el valor numrico de expr1 es igual al valor numrico de expr2.
expr1 -eq expr2

() devuelve verdadero si el valor numrico de expr1 no es igual al valor numrico de expr2.


expr1 -ne expr2

(>) devuelve verdadero si el valor numrico de expr1 es mayor que el valor numrico de expr2.
expr1 -gt expr2

(<) devuelve verdadero si el valor numrico de expr1 es menor que el valor numrico de expr2.
expr1 -lt expr2

() devuelve verdadero si el valor numrico de expr1 es mayor o igual que el valor numrico de expr2.
expr1 -ge expr2

() devuelve verdadero si el valor numrico de expr1 es menor o igual que el valor numrico de expr2.
expr1 -le expr2

e@abe:e/> [ $(whoami) = "root" ] && echo "Estoy conectado como root!" e@abe:e/> [ $(whoami) != "root" ] && echo "No estoy conectado como root!" No estoy conectado como root!

Los dos primeros casos de los ejemplos muestran el uso de la prueba lgica igual que y no igual que en el comando test. Como el comando test no muestra salida (slo muestra salida de errores cuando hay errores de sintaxis) se usan las construcciones lgicas del shell de ejecucin condicional (&&) para generar un mensaje en caso de que se necesite.
e@abe:e/> ps PID TTY TIME CMD 73924 pts/0 0:00 -bash 233706 pts/0 0:00 ps 315406 pts/0 0:00 -ksh e@abe:e/> echo $$ 315406 e@abe:e/> [ $$ -gt 1000 ] && echo "Mi numero de proceso es mayor que mil" Mi numero de proceso es mayor que mil

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

299

El caso tres de los ejemplos muestra el uso del operador lgico numrico mayor que del comando test. Igual que antes se usa ejecucin condicional en el shell para generar un mensaje con echo.
e@abe:e/> groups system staff security audit perf shutdown e@abe:e/> groups | wc -w 6 e@abe:e/> [ $(groups | wc -w) -lt 10 ] && echo "Mi usuario esta en menos de diez grupos" Mi usuario esta en menos de diez grupos

El caso cuatro de los ejemplos muestra el uso combinado de sustitucin de comandos dentro de test y del uso del operador menor que del comando test. Como en todos los ejemplos, se usa ejecucin condicional en el shell para generar un mensaje con echo. Pruebas lgicas con cadenas de texto Adems de las bsicas (como cadena1 Ejemplos:
e@abe:e/> [ $(whoami) ] && echo "Tengo usuario!" Tengo usuario! cadena = cadena2), el comando test implementa tambin:

devuelve verdadero si cadena no es nula.

-n cadena devuelve verdadero si cadena tiene longitud mayor que cero. -z cadena devuelve verdadero si cadena tiene longitud exactamente igual a

cero.

El primer caso de los ejemplos muestra el uso de cadena en el comando test.


e@abe:e/> [ -n "$LOGNAME" ] && echo "Estoy conectado!" Estoy conectado!

El segundo caso de los ejemplos muestra el uso del operador lgico n del comando test. Pruebas lgicas con archivos Mucha de la funcionalidad del lenguaje de programacin del shell gira alrededor de las necesidades del administrador del sistema. As, como la administracin normalmente manipula archivos, el comando bsico test tiene implementadas unas series de pruebas con archivos:
-r archivo

archivo.
-w archivo

devuelve verdadero si el usuario tiene permiso de lectura sobre el devuelve verdadero si el usuario tiene permiso de escritura sobre
300

el archivo.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

Ejemplos:

-x archivo

el archivo.
-f archivo

devuelve verdadero si el usuario tiene permiso de ejecucin sobre devuelve verdadero si archivo existe y es un archivo comn. devuelve verdadero si archivo existe y es un directorio. devuelve verdadero si archivo existe y es dispositivo de devuelve verdadero si archivo existe y es dispositivo de bloque. devuelve verdadero si archivo existe y tiene tamao mayor que

-d directorio -c archivo

caracteres.
-b archivo -s archivo

cero. devuelve verdadero si el descriptor de archivo nmero est asociado a una terminal. Si no se da nmero asume 1 (la salida estndar).
-t nmero

e@abe:e/> [ -r /etc/passwd ] && echo "/etc/passwd debe ser legible." /etc/passwd debe ser legible. e@abe:e/> [ -w /etc/passwd ] || echo "/etc/passwd no debe ser escribible" e@abe:e/> ls -l /etc/passwd -rw-rw-r-1 root system 676 Sep 17 14:40 /etc/passwd

El primer caso de los ejemplos muestra cmo se puede probar si el usuario actual -con el que se ejecuta test- tiene permisos para leer o escribir un archivo (o directorio).
e@abe:e/> [ -d /etc/security -a -x /etc/security ] && echo "Puedo entrar a / etc/security" Puedo entrar a /etc/security

El segundo caso muestra cmo comprobar que se tiene un directorio y que se tienen permisos para entrar al mismo (usando los operadores de prueba lgica d y x), adems muestra el uso del operador lgico a (AND).
e@abe:e/> [ -b /dev/hdisk3 ] && echo "El dispositivo hdisk3 existe" El dispositivo hdisk3 existe

El tercer caso muestra cmo comprobar la disponibilidad de un cierto dispositivo de bloques en el sistema (el caso se basa en un dispositivo disco en AIX).
e@abe:e/> [ -t ] && echo "Estoy trabajando en una terminal interactiva" Estoy trabajando en una terminal interactiva

El cuarto caso muestra cmo comprobar si se est trabajando interactivamente. En caso de que haya una redireccin [ -t ] devuelve falso.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

301

Operadores y Operaciones: expr


El intrprete de comandos implementa un lenguaje de programacin, y como podremos imaginar hay tres cosas bsicas que manejar en cualquier lenguaje de programacin: valores lgicos, informacin textual e informacin numrica. El shell realmente no est hecho para alto procesamiento matemtico, ya que las operaciones deben realizarse apoyadas en un comando que veremos a continuacin: expr. El comando expr recibe unos operandos y operaciones como argumentos, realiza la operacin y la reporta por salida estndar, as que debern usarse las facilidades del shell para capturar la salida si la queremos usar, en especial si la necesitamos almacenada en alguna variable. La sintaxis es muy sencilla:
expr operando operador operando ...

Donde: El comando necesita hacer las operaciones sobre varios argumentos, as que hay que separrselos con espacios. Las operaciones bsicas son suma (+), resta (-), multiplicacin (*), divisin entera (/), mdulo o residuo (%). Como el * de la multiplicacin es tambin un comodn del shell, hay que escaparlo para que el shell no lo interprete como todos los archivos, usando \*. retorna el valor de oper1 si no es nulo y no es cero, en ambos casos retornando el valor de oper2. Como el smbolo | es especial en el shell entonces habr que usarlo con escape \|.
oper1 | oper2

retorna el valor de oper1 si ambos valores son diferentes de nulo y de cero, de lo contrario devuelve cero. Como el smbolo & es especial en el shell, entonces habr que usarlo con escape \&.
oper1 & oper2

retorna cuntos caracteres de cadena cumplen con la expresin regular exprReg2, asumiendo que est anclada al comienzo (como si tuviera un smbolo ^). Si no concuerda retorna un cero (0). Si se usan parntesis para captura devuelve lo capturado. Como las expresiones comnmente tienen smbolos con significado especial en el shell normalmente exprReg2 est encerrada en ' '. Para captura se usan parntesis con escape \( \).
cadena : exprReg2 match cadena exprReg2 length cadena

exactamente equivalente a cadena

: exprReg2.

retorna la longitud -en caracteres- de cadena.

retorna la primera posicin en cadena1 donde cualquier caracter en cadena2 existe.


index cadena1 cadena2

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

302

Ejemplos:

retorna la subcadena tomada de cadena iniciada en la posicin inicio y con longitud cuntos caracteres.
substr cadena inicio cuntos

e@abe:e/> i=1 e@abe:e/> i=$(expr $i + 1) e@abe:e/> echo $i 2

El caso uno de los ejemplos muestra cmo realizar operaciones matemticas bsicas con las variables del shell: usando variable=$(expr operaciones ...). Ntese cmo debe usarse sustitucin de comandos, sustitucin de variables y espacios para separar los operandos y los operadores.
e@abe:e/> CADENA="Nombre Propio" e@abe:e/> echo "Longitud =" $(expr length $CADENA) expr: 0402-050 Syntax error. Longitud = e@abe:e/> echo "Longitud =" $(expr length "$CADENA") Longitud = 13

El caso dos de los ejemplos muestra cmo es fcil cometer un error de sintaxis con expr. En nuestro ejemplo, la variable de texto contiene dos palabras, pero la operacin length de expr espera un nico operando -argumento- por lo que devuelve Syntax error. Se usan las comillas dobles para que el shell pase un nico argumento al comando expr, pero que al mismo tiempo, la variable est evaluada.
e@abe:e/> CADENA="Nombre Propio" e@abe:e/> set -o vi e@abe:e/> echo "Longitud =" $(expr length '$CADENA') Longitud = 7

En el caso tres de los ejemplos se muestra cmo se evala la longitud de $CADENA no la longitud de los contenidos de la variable CADENA si se usan comillas sencillas!.
e@abe:e/> RESP=s e@abe:e/> if expr "$RESP" : "[yYsS]" >/dev/null then echo RESP comienza con "y", "Y", "s" o "S" fi RESP comienza con y, Y, s o S

El caso cuatro de los ejemplos muestra cmo usar el operador : (match) de expr. Si la primera cadena argumento concuerda con la expresin regular del segundo argumento expr devuelve la longitud de lo que concuerda y adems retorna un cero (verdadero), as que el if se cumple. Como de pronto no conviene ver el 1 que reporta expr, se hace redireccin a / dev/null.
e@abe:e/> if VAL=$(expr "$RESP" : '\([yYsS]\)') then

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

303

echo "RESP begins with 'y', 'Y', 's' o 'S'" echo "VAL=$VAL" fi RESP begins with 'y', 'Y', 's' o 'S' VAL=S

El quinto caso de los ejemplos muestra que se puede capturar la salida de expr para usarla despus. En este caso se usa una expresin regular que contiene \( \) para capturar el texto de la concordancia.
e@abe:e/> expr 7 / 2 3

El sexto caso muestra cmo expr slo hace clculos con enteros.
e@abe:e/> expr index abcdef fd 4

El sptimo caso muestra el uso de la operacin index del comando expr.


e@abe:e/> expr substr "Goodnight Ladies" 11 6 Ladies

El octavo caso de los ejemplos muestra el uso de la operacin substr el comando expr.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

304

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

305

Comandos de control de flujo: if, then, else & fi


Todo lenguaje de programacin necesita sentencias de control de flujo. Como en el shell todo se basa en comandos, lo que aqu tenemos son comandos de control de flujo, el primero que veremos de los mismos es if. Hay varios estilos de la sintaxis:
if comandoCondicin then Comandos si verdadero ... fi

o tambin
if comandoCondicin then Comandos si verdadero ... else Comandos si falso .. fi

pero tambin
if comandoCondicin then Comandos si verdadero ... elif comandoCondicion2 Comandos si Condicin2 verdadera ... else Comandos si falso ... fi

Donde: La sentencia de control if ejecuta comandoCondicin y analiza el cdigo de retorno. Si devuelve verdadero (es decir 0), ejecuta lo anidado (Comandos si verdadero). Si hay una parte else y el comandoCondicin devuelve falso (es decir no 0) ejecuta lo anidado (Comandos si falso). La sentencia de control if puede simular una sentencia case ... select de otros lenguajes de programacin a travs de la parte elif comandoCondicin2. La sentencia de control if termina con un fi. Ejemplos:
if [ "$VAL" = "Y" ] More...then AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 306

More... echo More...elif [ More...then More... echo More...else More... echo More...fi VAL igual S

VAL igual Y "$VAL" = "S" ] VAL igual S VAL igual a otra cosa

En el caso uno de los ejemplos se observa el uso ms tpico del comando test: combinado como comandoCondicin con el comando if.
e@abe:e/> if grep -q root /etc/passwd More...then More... echo root existe en /etc/passwd More...fi root existe en /etc/passwd

En el caso dos de los ejemplos se observa cmo cualquier comando es vlido para usar con if, aunque hay que verificar que el comando si devuelve cdigos de retorno que tengan sentido. En el caso del ejemplo, grep devuelve verdadero si la expresin regular del primer argumento est o se encuentra entre las lneas de los archivos dados.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

307

Comandos de control de flujo: for, do & done


Normalmente una computadora es til para tareas repetitivas. Una tarea que no se repite no amerita programacin la verdad. Existen varias maneras de llevar a cabo tareas repetitivas en el shell. La primera manera que veremos es la de repetir una tarea un nmero finito dado de veces, usando una ligera variacin en un valor en cada una de las repeticiones. Para este estilo de repeticiones existe el comando for en el shell. La sintaxis es muy sencilla:
for variable in lista do comandos ... done

Donde: El comando for crear una nueva variable si no existe. El comando for inicia tomando el primer valor de lista, asignndolo a variable y ejecutando todos los comandos anidados. El comando for prosigue tomando el siguiente valor de lista, asignndolo a variable y ejecutando todos los comandos anidados. El comando for termina con la ejecucin donde variable tiene el ltimo valor de lista. La secuencia de comandos del shell contina en la lnea que sigue a done. Ejemplos:
e@abe:e/> for i in 1 2 3 4 More...do More... echo $i More...done 1 2 3 4

El caso del ejemplo muestra lo bsico del comando for. Ntese cmo la lista se le da literal, expandida, for no recibe un rango y fabrica los elementos.
e@abe:e/> for FIL in *.tsv More...do More... echo "Archivo: $FIL" More...done Archivo: Celulares.tsv Archivo: Empresas.tsv

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

308

En el segundo caso de los ejemplos se observa cmo puede aprovecharse que las sustituciones de comodines del shell generan listas de nombres de archivos, as que pueden usarse con el comando for.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

309

Comandos de control de flujo: while, do & done


Otro estilo de estructura de ejecucin repetitiva no tiene los elementos prefabricados, as que no se sabe inicialmente cuntas repeticiones habr que hacer. Lo que s se sabe es cundo hay que seguir repitiendo o cundo hay que parar. Para este estilo de repeticin existe el comando de shell while. Es tambin muy sencillo (tal vez ms que for):
while comandoCondicin do comandos ... done

Donde: El comando while ejecuta al comandoCondicin y analiza si el cdigo de retorno es verdadero. Mientras el cdigo de retorno de comandoCondicin sea verdadero el comando while ejecutar todos los comandos anidados. Cada vez que termina un ciclo de comandos anidados el comando while reejecuta comandoCondicin, analizando nuevamente si el cdigo de retorno es verdadero. Cuando el comandoCondicin retorne diferente de verdadero el comando while dejar de ejecutar los comandos anidados y terminar. La ejecucin contina en la lnea que sigue a done. Ejemplos:
e@abe:e/> while who | grep -q root More...do More... write root << FIN More... Hola root More...FIN More... sleep 30 More...done e@abe:e/>

El caso de los ejemplos ejecuta un comando who, y un comando grep que busca a root dentro de la lista de usuarios generada por who. El comando ejecutar los anidados write y sleep mientras se encuentre a root conectado como usuario. Estando dentro de un ciclo for o un ciclo while puede romperse usando el comando break. Este incondicionalmente se sale del ciclo y contina en la lnea que sigue al done:
e@abe:e/> i=1 e@abe:e/> while true do printf $i AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 310

i=$(expr $i + 1) [ $i -eq 5 ] && break echo -- done 1 2 3 4

En el ejemplo se muestra el uso del comando break. Ntese cmo se sale inmediatamente del ciclo while, ni siquiera pasa por el comando echo que sigue.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

311

Manipulacin de variables: let


Como la manipulacin aritmtica de variables usando sustitucin de variables y sustitucin de comandos apoyndose en expr es supremamente incmoda, los intrpretes que cumplen POSIX -como Korn Shell- incluyen el comando let. El comando let permite el trabajo aritmtico con variables sin necesidad de estar usando el prefijo $ por ejemplo, adems sabe reconocer las expresiones an cuando no estn separadas por espacios. La sintaxis de let es sencilla:
let expresin

o
let variable=expresin

o tambin
(( expresin ))

Donde: El comando let y la construccin ((


)) son equivalentes.

El comando let devuelve verdadero si las operaciones de las expresiones pudieron ejecutarse y no resultaron en cero (0). El comano let soporta muchos operadores, a saber:
-expr !expr ~expr expr1 * expr2 expr1 / expr2 expr1 % expr2 expr1 + expr2 expr1 - expr2 expr1 << expr2 expr1 >> expr2 expr1 <= expr2 expr1 < expr2 expr1 > expr2 expr1 >= expr2

el negativo de expr
0 cuando expr es diferente de cero, de lo contrario 1

el complemento de expr producto de expr1 y expr2 cociente de expr1 entre expr2 residuo de dividir expr1 entre expr2 suma de expr1 ms expr2 diferencia de expr1 con expr2 desplazamiento de expr2 bits a la izquierda de expr1 desplazamiento de expr2 bits a la derecha de expr1
1 si expr1 es menor o igual que expr2, de lo contrario 0 1 si expr1 es menor que expr2, de lo contrario 0 1 si expr1 es mayor que expr2, de lo contrario 0 1 si expr1 es mayor o igual que expr2, de lo contrario 0 312

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

Ejemplos:

expr1 == expr2 expr1 != expr2 expr1 & expr2 expr1 | expr2 expr1 ^ expr2 expr1 && expr2 expr1 || expr2 var = expr var += expr var var -= expr var *= expr var /= expr var %= expr

1 si expr1 es igual que expr2, de lo contrario 0 1 si expr1 no es igual que expr2, de lo contrario 0

AND de los bits de expr1 con los bits de expr2 OR de los bits de expr1 con los bits de expr2 XOR de los bits de expr1 con los bits de expr2
1 si tanto expr1 como expr2 son no-cero, de lo contrario 0 1 si alguno de expr1 o expr2 es no-cero, de lo contrario 0

asigna el valor de expr a la variable var agrega el valor de la expresin expr al valor actual de la variable resta el valor de la expresin al valor actual de la variable multiplica el valor de la variable por el valor de la expresin divide el valor de la variable entre el valor de la expresin asigna a la variable el valor de dividirla por el valor de la desplaza el valor de la variable expr bits a la izquierda desplaza el valor de la variable expr bits a la derecha asigna a la variable el resultado de var asigna a la variable el resultado de var asigna a la variable el resultado de var
& expr | expr ^ expr

expresin
var <<= expr var >>= expr var &= expr var |= expr var ^= expr

e@abe:e/> let i=1 e@abe:e/> let i+5*4 e@abe:e/> echo $i 1 e@abe:e/> let i=i+5*4 e@abe:e/> echo $i 21 e@abe:e/> let i=5 j=4 e@abe:e/> if (( i*j<25 )) More...then More... echo "i*j es menor que 25" More...fi i*j es menor que 25

Como se observa en los ejemplos, el comando let permite definir variables. De paso las variables quedan definidas como enteras. El comando let deja hacer operaciones aunque el
AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 313

valor se pierda, se nota que no reporta resultados por salida estndar; este estilo de uso slo tiene aplicacin real cuando sirve de comandoCondicin para if o para while. Ms adelante se muestra cmo hacer operaciones con let permite ahorrarse $ en la sustitucin de variables, y permite ahorrarse $( ) para la sustitucin de comandos. Adems, no importan tanto los espacios entre operando y operador. En los ejemplos tambin se muestra cmo se pueden definir y redefinir varias variables en una sola invocacin del comando let. Posteriormente se muestra cmo usar la sintaxis alterna (( )) equivalente a let. Esta sintaxis no solo es ms clara, si no que no es necesario hacer escape de los smbolos que let usa para aritmtica como | o >.

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow

314

También podría gustarte