0% encontró este documento útil (0 votos)
177 vistas314 páginas

Curso VzAIX - Manual

Curso basico de admon AIX

Cargado por

mauro_2912
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
177 vistas314 páginas

Curso VzAIX - Manual

Curso basico de admon AIX

Cargado por

mauro_2912
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

n i x

i x U i
Curso VzAIX01

n n
UNIX/AIX Basics for Operators

U U
n i x n i x n
ix U i x U i x U
n Un Un
n ix n i x n i x
U ix U ix U i
Ramn Barrios Lascar
2007

n
U ix U ix U n n
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 PowerPC SP
POWERparallel eServer 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 agosto de 2007. Ramn Barrios Lascar 2003, 2007. 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 2


Contenidos
INTRODUCCIN............................................................................................................................................. 9
OBJETIVOS 9
AUDIENCIA 9
INTRODUCCIN A SISTEMAS IBM P5 Y PSERIES........................................................................................ 11
EL CONCEPTO GENERAL 11
CAPACIDADES DEL HARDWARE 15
Los Procesadores 15
La Memoria De Acceso Directo, RAM 17
Los Buses Externos 18
Las Comunicaciones Externas 19
El Substrato Electrnico 19
El Sistema De Manejo De Los Recursos De Hardware 20
CAPACIDADES DEL SOFT WARE 23
Capacidades Base (por Ser Unix) 23
Capacidades Logradas Debido Al Hardware Que Soporta 23
Capacidades nicas 24
SISTEMAS OPERATIVOS UNIX ...................................................................................................................... 27
HISTORIA, TERMINOLOGA DEFINICIONES 27
COMPONENTES DE UN SISTEMA UNIX 29
EL KERNEL O NCLEO DEL SISTEMA OPERATIVO 31
SISTEMAS DE ARCHIVOS/DE ARCHIVADO 33
Nomenclatura De Archivos 33
Conceptos: Directorios 34
Conceptos: Archivos 34
Conceptos: Archivos Especiales Nodo 34
INTRFACES DE USUARIO: INTRPRETE DE COMANDOS (SHELL) 37
Intrprete De Comandos Original: Sh 37
Intrprete De Comandos De La Universidad De Berkeley: Csh 38
Intrprete De Comandos Comercial AT&T: Ksh 38
Intrprete De Comandos De Cdigo Abierto: Bash 38
INTERFACES DE USUARIO: AMBIENTES DE ESCRITORIO GRFICO 41
Gnome (GNU Network Object Model Environment) 42
KDE (K Desktop Environment) 43
CDE (Common Desktop Environment) 44
APLICACIONES GENERALES EN UNIX: EDITORES DE TEXTO 45
Editor Ed 46
Editor Vi 46
APLICACIONES GENERALES EN UNIX: AMBIENTES DE DESARROLLO 49
PERFILES DE USUARIOS Y DE GRUPOS DE USUARIO 51
COMANDOS BSICOS DE UNIX................................................................................................................... 53
COMANDOS BSICOS DE SESIN DE USUARIO 53
Entrar Al Sistema 53
Quin Soy (qu Usuario Soy): Whoami 53
Quienes Estn En El Sistema (qu Usuarios Estn Conectados): Who 54
A Qu Grupos Pertenezco: Groups 54
Cambiar Mi Contrasea: Passwd 54
Salir Y Desconectarse De La Sesin: Logout 55
ESTRUCTURA ESTANDAR DE LOS COMANDOS 57

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


Acerca De Los Comandos 57
Acerca De Las Opciones 57
COMANDOS RELACIONADOS CON LA FECHA Y LA HORA .......................................................................... 59
Qu Fecha Y Hora Es En El Servidor: Date 59
Cunto Se Demora Una Tarea: Time 59
Calendario: Cal 60
COMUNICACIN CON OTROS USUARIOS................................................................................................... 63
UNIX Y LAS COMUNICACIONES 63
MENSAJES DIRECTOS A LA SESIN: WRITE 65
COVERSACIN (CHAT) CON OTROS USUARIOS: TALK 67
MENSAJES A TODO EL MUNDO: WALL 69
CORREO ELECTRNICO: MAIL 71
Modo Interactivo Y Lectura Del Correo Electrnico 71
Modo Directo Y Envo De Nuevos Mensajes De Correo Electrnico 73
ARCHIVOS Y DIRECTORIOS: MANEJO DE DIRECTORIOS........................................................................... 75
DIRECTORIOS 75
LISTAR CONTENIDOS DE DIRECTORIO: LS 77
Uso Bsico Del Comando listar Contenidos Del Directorio 77
Listar Contenidos De otro Directorio 77
Listar Incluyendo Los archivos Normalmente Ocultos 78
LISTAR CONTENIDOS DE DIRECTORIO CON DETALLES: LS L 79
MOVERSE ENTRE DIRECTORIOS: CD 81
CREAR DIRECTORIOS: MKDIR 83
Crear Toda Una Estructura De Directorios: Mkdir p 84
CAMBIAR NOMBRE DE DIRECTORIO (O MOVER): MV 85
REMOVER DIRECTORIOS: RMDIR 87
Remover Una Jerarqua De Directorios: Rmdir p 87
ARCHIVOS Y DIRECTORIOS: MANEJO DE ARCHIVOS................................................................................. 89
ARCHIVOS 89
Nombres De Los Archivos 90
Nombres Por Ruta Absoluta Y Por Ruta Relativa 91
LISTAR ARCHIVOS: LS 93
LISTAR ARCHIVOS CON DETALLES: LS L 95
CREAR ARCHIVO VACO: TOUCH 97
COPIAR ARCHIVOS: CP 99
Uso De Cp Para Hacer Una Copia Sencilla De Un Archivo 99
Uso De Cp Para Copiar Varios Archivos 99
Uso Del Comando Cp Para Copiar Directorios Completos: Cp -R 100
MOVER O RENOMBRAR ARCHIVOS: MV 101
Uso De Mv Para Renombrar Un Archivo 101
Uso De Mv Para Mover Varios Archivos 101
AGREGAR NOMBRES A ARCHIVOS: LN 103
Agregarle Un Nuevo Nombre A Un Archivo Individual 103
AGREGAR ENLACES SIMBLICOS: LN S 105
Agregarle Un Enlace Simblico A Un Archivo Individual 105
Agregarle Enlaces Simblicos A Mltiples Archivos A La Vez 105
REMOVER ARCHIVOS Y NOMBRES DE ARCHIVOS: RM 107
Remocin De Directorios 107
DETERMINAR TIPO DE ARCHIVO: FILE 109

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


EDICIN DE ARCHIVOS DE TEXTO: VI...................................................................................................... 111
ARCHIVOS DE TEXTO 111
Editores De Texto: Vi 111
Modos De Vi 111
EDITAR ARCHIVOS EXISTENTES CON VI 113
CREACIN DE NUEVOS ARCHIVOS DE TEXTO 115
MOVERSE DENTRO DE UN ARCHIVO 117
Moverse De A Lneas 117
Moverse De A Pginas O Pantallas 117
Moverse Segn El Contexto 118
INSERCIN DE NUEVOS CONTENIDOS DE TEXTO (EN VI) 119
COMANDOS BSICOS DE EDICIN DE TEXTO (DE VI) 121
BUSCAR Y REEMPLAZAR TEXTOS CONTENIDOS (DENTRO DE VI) 123
TABLEROS DE RECORTES: CORTAR, COPIAR Y PEGAR 125
EDITAR Y TRABAJAR CON MS DE UN ARCHIVO DE TEXTO 127
PERSONALIZACIN DEL EDITOR DE TEXTO VI 129
Uso Prctico De Los Archivos De Opciones De Vi 131
Formato De Un Archivo De Opciones De Configuracin De Vi 131
EL AMBIENTE DE TRABAJO: PROCESOS Y VARIABLES.............................................................................. 133
EL AMBIENTE DE TRABAJO 133
PROCESOS 135
Iniciar Y Detener Procesos 135
LISTAR PROCESOS 137
Listado Bsico De Procesos: Ps 137
Listado De Todos Los Procesos: Ps e 137
Listado Largo (tcnico) De Los Procesos: Ps l 137
Listado Completo (full) De Informacin De Los Procesos: Ps f 138
Variantes BSD - Listado Extendido De Procesos: Ps U NombreUsuario 139
Listado Extra Extendido De Procesos, En BSD: Ps aux 140
Acerca De Las Columnas: %CPU 141
Acerca De Las Columnas: %MEM 142
Acerca De Las Columnas: STATE 142
PROCESOS DE FONDO 143
Ejecucin De Procesos de Fondo (en Background) 143
Listar Procesos De Fondo 143
Manejo De Las Tareas De Fondo Con Fg Y Con Bg 144
Seales A Procesos: Combinaciones De Tecla Y El Comando Kill 144
Sintaxis Del Comando Kill 145
Acerca De Las Seales 145
VARIABLES DE AMBIENTE 149
Listar Las Variables De Ambiente Del Intrprete Shell 149
Definicin De Nuevas Variables En El Intrprete Shell 150
PASO DE VARIABLES ENTRE GRUPOS DE PROCESOS 151
Uso Del Comando Export 151
Paso De Variables Nuevas No Preexistentes En El Intrprete 152
PASO DE SEALES ENTRE GRUPOS DE PROCESOS 153
Uso Del Comando Kill Para El Envo De Seales A Grupos De Procesos 153
SEGURIDAD Y PERMISOS DE ARCHIVOS................................................................................................... 155
ARQUITECTURA DE SEGURIDAD DE UNIX 155
PROCESOS Y PERMISOS 157
USUARIOS Y GRUPOS DE USUARIOS 159
PERMISOS DE ARCHIVOS: LS -L 163

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


PERMISOS DE DIRECTORIOS: LS -LD 165
CAMBIAR PERMISOS: CHMOD 167
CAMBIAR PROPIETARIO: CHOWN 169
CAMBIAR IDENTIDAD DE USUARIO: SU 171
USO EFECTIVO DEL INTRPRETE DE COMANDOS................................................................................... 173
EL INTRPRETE DE COMANDOS 173
El Intrprete De Comandos Y El Uso De La Multitarea 173
El Intrprete De Comandos Y Los Metacaracteres 173
COMODINES (DE NOMBRES) 175
Comodn Bsico ? (cualquier Un Caracter Del Nombre) 175
Comodn Amplio * (cualesquiera Caracteres Del Nombre) 176
Comodn [xyz] (cualquier Un Caracter De La Lista) 177
Comodn [!xyz] (cualquier Caracter Que No Est En La Lista) 177
Comodn [x-z] (cualquier Caracter Que Est En Un Rango) 178
Comodn [!x-z] (cualquier Caracter Que No Est En El Rango 178
EJECUCIN DE COMANDOS EN SECUENCIA 181
EJECUCIN CONDICIONAL DE COMANDOS 183
Cdigos De Retorno De Una Ejecucin 183
Ejecucin Condicional: Ejecucin Slo Si El Anterior Ejecuta Sin Error 183
Ejecucin Condicional: Ejecucin Slo Si El Anterior Ejecuta Con Error 184
REDIRECCIN: ARCHIVOS 185
Archivos Estandar: entrada Estandar, salida Estandar, salida De Errores Estandar 185
Redireccin De La Entrada Desde Un Archivo 186
Redireccin De La Salida Hacia Un Archivo 187
Redireccin De Los Mensajes De Error Hacia Un Archivo 187
Redireccin De La Salida Sin Destruir 189
Redireccin De Los Mensajes De Error Sin Destruir 189
Combinaciones De Redirecciones 190
SUBSTITUCIN DE VARIABLES 191
Variables De Ambiente Importantes En El Shell 192
SUBSTITUCIN DE COMANDOS 195
REDIRECCIN: TUBERAS 197
Comandos Filtro 197
ESCAPES 199
Escape De Un nico Caracter: Smbolo \ 199
Escape De Todos Los Significados Especiales: ' 200
Escape De No Todos Los Significados Especiales: " 201
UTILIDADES DE TEXTO.............................................................................................................................. 203
EL CONCEPTO 203
VOLCAR TEXTO A LA SALIDA ESTNDAR: CAT 205
CONTAR CARACTERES, PALABRAS, LNEAS: WC 207
NUMERAR LNEAS DE TEXTO: NL 209
PAGINAR TEXTO: PG 213
OBTENER PRIMERAS LNEAS DE TEXTO: HEAD 215
OBTENER LTIMAS LNEAS DE TEXTO: TAIL 217
OBTENER COLUMNAS DE TEXTO: CUT 221
COMBINAR TEXTO EN COLUMNAS: PASTE 225
COMBINAR TEXTO EN COLUMNAS: JOIN 229
FILTRAR LNEAS DE TEXTO: GREP 233
EXPRESIONES REGULARES BSICAS (EN GREP) 237
FILTRADO AVANZADO DE LNEAS DE TEXTO: EGREP 241

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


EXPRESIONES REGULARES EXTENDIDAS (EN EGREP) 245
ORDENAR LNEAS DE TEXTO: SORT 249
TRANSLITERAR CARACTERES: TR 255
UTILIDADES AVANZADAS DE ARCHIVOS Y DIRECTORIOS....................................................................... 261
UTILIDADES, MS UTILIDADES 261
BSQUEDA DE ARCHIVOS: FIND 263
Criterios De Seleccin En Find 263
Acciones En Find 266
Operadores Lgicos En Find 267
EJECUCIN DE COMANDOS EN CANTIDADES DE ARCHIVOS: XARGS 273
COMPRIMIR ARCHIVOS 1: COMPRESS & UNCOMPRESS 277
COMPRIMIR ARCHIVOS 2: GZIP & GUNZIP 281
EMPACAR ARCHIVOS: TAR 285
COMANDOS VARIOS 291
Comando Host 291
Comando Hostname 291
Comando Uptime 291
Comando Du 292
Comando Sum 293
Comando Cksum 293
Comando True 293
Comando Yes 294
USO AVANZADO DEL INTRPRETE DE COMANDOS:................................................................................. 295
USO DEL INTRPRETE COMO UN LENGUAJE DE PROGRAMACIN 295
Desarrollo De Shell Scripts 295
PRUEBAS LGICAS: TEST 297
Pruebas Lgicas Bsicas 297
Pruebas Lgicas Con Cadenas De Texto 299
Pruebas Lgicas Con Archivos 299
OPERADORES Y OPERACIONES: EXPR 301
COMANDOS DE CONTROL DE FLUJO: IF, THEN, ELSE & FI 305
COMANDOS DE CONTROL DE FLUJO: FOR, DO & DONE 307
COMANDOS DE CONTROL DE FLUJO: WHILE, DO & DONE 309
MANIPULACIN DE VARIABLES: LET 311

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


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 8
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 HP-
UX, 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 9


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 64 procesadores POWER 5 o POWER 5+ (usables como 128 procesadores lgicos)
en configuraciones SMP (no de cluster).
Grandes cantidades de espacio de ejecucin, RAM. Se ofrecen servidores p con hasta
2TB de RAM (s, 2048GB de memoria de acceso directo).
Amplia capacidad de expansin en tarjetas. Servidores base y
expansiones externas para lograr sistemas con capacidad de centenares Es bueno recordar que IBM
si gn if ic a In te
de ranuras, todas usables internamente, todas configuradas r
Business Machine n ac io n al
s,
automticamente la Plug And Play. Muchas de estas ranuras, cuando mquinas internacionaeslesdedecir
negocios , y este
no todas, soportando estndares como PCI-X con conectado en sido y ser el
siempre ha
mercado que
caliente. maneja, y para
el que dise
sus soluciones y pr a
oductos.
Amplsima capacidad de expansin en espacio de disco. Servidores

AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 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 5 en las familias p, i y o. 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 IBM-
Simultaneous Multi-threading (SMT). En otras arquitecturas se conoce con otros
nombres, por ejemplo Hyper-Threading.
Los procesadores POWER 5 y POWER 5+ actuales son todos fabricados con doble
ncleo (dual core). Esta caracterstica de fabricacin implica que cada dos
procesadores estn litografiados en un mismo substrato de silicio. Cuando dos
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 procesador, realmente adquiere un magazn
de procesador con un chip de doble ncleo, pero con uno de ellos
permanentemente desactivado.

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


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 POWER 5+ 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.
Usando los mismos puertos de diagnstico, el sistema detecta, configura, maneja la
energa, y en especial la temperatura de todos los elementos. El
Note que un serv
avanzado sistema de manejo de energa de los procesadores no funcionar
idor POWER
si todos sus
POWER 5 usados en los sistemas p5 contnuamente apaga y procesador
es estn
de
enciende los subsistemas que no se estn usando, de manera que, sactivados por fallas.
cuando se hayan en reposo ni consumen prcticamente energa y
por consiguiente tampoco disipan calor.
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.
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

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


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
accesos adems pueden ser de lectura o de escritura, simultneamente, y sin
problemas.

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


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 industria para el
segmento de los servidores intermedios.
Soporte a expansiones externas con conectividad a travs de un bus externo
intermedio de muy alta velocidad (2GB/s), adicionado con un RIO2
es sigla de Remot
bus de manejo de poder (RIO2-GX + SPCN). Las Output, version e Input/
2, y SPCN de
mencionadas expansiones hacen que se puedan agregar buses Ne Sy st em Po w er
Co nt ro l
twork.
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.
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, eTasnto PCI como USB son
tndares di
USB no solo es de deteccin automtica, si no de conectado y implementados, seados,
y licenciados
desconectado en caliente. de Intel Corporat
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 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

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


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:
Dos puertos de red integrados en una sola tarjeta de redes El funcionamiento
ethernet con soporte a 10, 100 y 1000 Mb/s. Dicha tarjeta cr os so ve r qu e auto-
tie ne n
incluye una antememoria en hardware de 4MB, para evitar implementadas las tar
jet
red IBM sigue el estn as de
que las congestiones se den en la misma, adems de que tiene X da r MDI-
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,
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.

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


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.
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,

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


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 de red y memoria
RAM, adems de su propia copia de sistema operativo y dems software.
Cada divisin, llamada particin lgica dinmica o LPAR, puede tener
procesadores propios o porciones de procesadores de un pool de procesadores
compartidos. Las fu nciones de Lo
Micropartitioning gical
Cada LPAR tiene una cierta cantidad de memoria RAM enteramente de de pe nd en
l
asignada. pero la Advanc hardware,
ed Dynamic
P O W E R Vi r t
ualization
Cada divisin puede tener tarjetas adaptadoras controladoras de pe nd en de
so ft w ar e
adicional licencia
propias, reales asignadas y no compartidas, o puede usar una do de IBM.
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
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.

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


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
caractersticas interesantes, entre ellas la integracin con redes IP. Al Esta breve histor
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
su excelente variante de UNIX denominada Advanced Interactive cliente el usar nerar al
este sistema
Executive o AIX. Este sistema operativo ha ido evolucionando con el operativo.

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
duros virtuales, que son slo la representacin de porciones compartidas de
discos duros reales.

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


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
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

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


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 address-
con 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 pueda considerar
realmente abierto: IPv4, IPv6, ARP, RARP, TCP, UDP, ICMP, IGMP, RIP, OSPF,
BGP, EGP, SMB, CIFS, SSL, SSH, Kerberos, LDAP, DHCP, DDNS, NFS v2/v3/v4,
NIS, NIS+, SLIP, PPP, IPX/SPX, ATM, X.25, Frame Relay, y otros.
No se espera
Con AIX se incluyen muchos paquetes de software de cdigo EtherChannel sig que un
a funcionando
abierto, siendo IBM patrocinador de tanto Linux como de cuando todas las
tarje
componen deja de tas que lo
paquetes base de la Internet actual, tales como Sendmail, tiempo.
funcionar al
Bind, RouteD, GateD, ISC DHCP, OpenSSL, OpenSSH, Samba,
Apache.

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


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 Lgicos (Logical
Volume Manager, LVM), hace ms de una dcada. Con el LVM se hace el manejo
del espacio en discos de manera flexible, poderosa, pero sobre todo, totalmente
dinmico, y en donde casi todo se hace en caliente. Este software es
tan reconocido que versiones anteriores son la base para los EtherChannel es
el nombre
manejadores de espacio de otros sistemas operativos UNIX co mercial que
usa Cisco,
empresa que se
como Digital OSF/1 y HP-UX. IBM en 2000 regal cdigo funcin. En otro invent la
s ambientes
fuente para que en Linux se pudiera implementar un LVM hacer lo mismo
se denomina
ethernet bondin
usable y funcional. agrega
g o channel
tion
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

!"#$ !"%$ !""$ &$$$

'())*+, -.&

/)0*+, 1.$

23)4*+, 1.$

*+,56*)(7)8)95+:;0<=()5,>?0(>@A0>:4B
*>885K:9

+A42+56+0=4;:(C5D4>E)(?>09B +:8=(>?56+A45F>G(:?9?0)H?B !$.$


,=(<>4
/)I0+0)3
L.&
F=G52+5J 1.!$
J)4>I
T338)
+M25N5F>G(:?:;0
O/D\WA(C
O/D
P>GQ=(C5+0=88H=4 &.-.&$
R>4AI
R>4A?5S:(E=8C?

F>4>I L.$
T4C()<5+.5S=4)4@=AH

D4>I5S>H)5+Q=(>4U5+9?0)H56*)885R=@?B !$
V)45SQ:H3?:45N5,)44>?5P>0GQ>)
WXNDJ56W)<8)00NX=G7=(CB !!

TYJ56Y*FB Z.L

D4>I[=()56/:E)88\D4>E)8\+M2B #.!

Y(>I56+>8>G:45O(=3Q>G?B -.Z

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 C. Ritchie y
Douglas McIlroy. Los sistemas UNIX se han ido derivando en diversas ramas, desarrolladas a
travs del tiempo tanto por AT&T como por numerosas otras compaas El le
nguaje C fue de
comerciales. Desde comienzos de la dcada de 1990, tambin se han por Brian Ke sarrollado
rn
desarrollado variantes libres, creadas por grupos no muy unidos de Dennis C. Ritchi ighan y
e. El sistema
UNIX fue desarrol
desarrolladores diseminados a lo ancho del planeta. lado por Ken
Thompson y
Dennis C.
El mismo! Ritchie.
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 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, Mac OS X y las versiones BSD libres.

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


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 operativos. Como
resultado, UNIX se volvi sinnimo de sistema abierto.
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
La propiedad inte
varios conceptos: el uso de archivos de texto para almacenar datos; un cdigos fuentes
lectual de los
originales de
sistema de archivado jerrquico; tratar los dispositivos y ciertos esquemas de UNIX estuvieron en entredicho
a principios de
comunicacin entre procesos como archivos; y por el uso de una gran l
debido a los ale siglo XXI,
ga
cantidad de programas pequeos que pueden encadenarse muy fcilmente compaa The SCOtosGrdeoup.la
Afortunadamente
a travs de tuberas en un intrprete de comandos, en vez de tenerse estrados judiciale en los
s se resolvi
programas grandes, poderosos, complejos y monolticos que realicen de el asunto a favor
de
en la segunda Novell Inc.
todo. Todo esto junto se denomina la filosofa UNIX. agosto
semana de
de 2007.
d e r e c h o s i n Todos los
Actualmente, una compaa o grupo de desarrolladores que deseen usar el relaciona telectuale
dos con el c s
nombre UNIX debera certificar su producto, que le da derecho entre original de UNIX so
n
digo
de Novell, compa propiedad
otras cosas- a usar el nombre UNIX. Qu compone a un UNIX, cmo se
asegurado pblica a que ha
comporta y cmo funciona est estandarizado, segn unos documentos no va a demandar aente que m
nadie diferente de nadie
actualmente llamados Single Unix Specification v3, o UNIX 03 para debido
SCO Group-
acortar. Este mismo estndar tambin es el estndar IEEE POSIX 1003.1 e intelectual.a su propiedad
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

!""#$%&%$'
15)##* 789*
()*

1$*2)3&4/)4!.%5$6&/'

+,%#)'
/.$6).
:&.;
-&./0&.)

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

!""#$%&%$'
15)##* 789*
()*

1$*2)3&4/)4!.%5$6&/'

+,%#)'
/.$6).
2&.:)2&
-&./0&.)

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

!""#$%&%$'
12)##* 345*
()*

1$*7)9&:/):!.%2$6&/'

+,%#)'
/.$6).
7&.8)7&
-&./0&.)

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. Este concepto es
muy poderoso, por lo que -al menos en teora- todo programa puede abrir
La id
y manipular cualquier archivo. Como para el sistema operativo los archivos directorea de archivos
ios dentro de y
otros
no tienen una estructura implcita, el nombre del archivo no tiene di rect or io s en Windows vie
ne
de DOS, y en DO
ninguna relacin forzosa con sus contenidos, ni los contenidos con el M, que copi
S viene de CP/
di
nombre. Qu implica esto ltimo? Que una foto no tiene porqu tener parcialmente de cha idea
UNIX pero
basndose ms en
nombre terminado en .JPG o un archivo cuyo nombre contiene MP3 no VAX-.
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 Los usuarios acos
tu
trabajar en en mbrados a
metadatos especficamente en su apuntador nico- y hay de varios tipos reconocern lo qu
torno grfico
e
segn el fin. Existen: como propiedad se conoce
es como los
metadatos. En U
NIX hay ms
Archivos especiales nodo para acceder al hardware del sistema metadatos que las
pr
fcilmente visible opiedades
como un archivo. 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)

!""#$%&%$'
15)##* 789*
()*

1$*2)3&4/)4!.%5$6&/'

+,%#)'
/.$6).
2&.:)2&
-&./0&.)

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 man
Stephen Bourne, un empleado de AT&T en 1977. Este intrprete de DOS (y de MS W datos de
indows) est
ligeramente
comandos no es muy cmodo de trabajar de manera interactiva porque no pa mo
recido a los int d e l a d o
tiene manejo avanzado del teclado (menos de las teclas de cursor) y un comandos de U rpretes de
NIX, pero
manejo difcil del histrico de comandos previos. Sin embargo, como se lolesngua jes de programac los
in de
intrpretes de
desarroll pensando en que fuera una herramienta de programacin completos, a di U NIX son
fe
lenguaje disponib rencia del
tiene muy buenas facilidades en su lenguaje, como variables, redireccin, le en DOS.
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 Christiansen
con un lenguaje siguiera la sintaxis de este lenguaje de manera muy cerca, hack er Perl ms
, el segundo
pero que al mismo tiempo no presentara problemas para el operador escribi un docu conocido
m
f a m o s o t i t u ento muy
acostumbrado a operar interactivamente con sh. Programac
lado La
in Csh Consider
Daina (Csh ada
Aunque este intrprete de comandos es ms avanzado que el anterior sh, Co Progra
nsidered Harmfu mming
l).
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).
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

!""#$%&%$'
15)##* 89:*
()*

1$*2)3&4/)4!.%5$6&/'

+,%#)'
/.$6).
2&.7)2&
-&./0&.)

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 HP-
UX.
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

!""#$%&%$'
15)##* 789*
()*

1$*2)3&4/)4!.%5$6&/'

+,%#)'
/.$6).
2&.:)2&
-&./0&.)

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 texto muy
poderoso, pero por ser modal es un poco difcil de usar en un comienzo, Aprender
emos usar vi
pero dar los primeros pasos en l no es demasiado complicado. Aunque todo un captuloa de di ca
en
mismo do al
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

!""#$%&%$'
15)##* 789*
()*

1$*2)3&4/)4!.%5$6&/'

+,%#)'
/.$6).
2&.:)2&
-&./0&.)

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 de perfiles 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 abierto-
adicionalmente 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 no-
root 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 Aug 07 18:18
e pts/1 Aug 07 18:24 (Moe.lan)
root pts/2 Aug 07 18:27 (Moe.lan)
e@abe:e/>

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 usuarios-
existe 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:
Enter the new password again:

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


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.
AIX preconfigura a los usuarios para que inicien con /usr/bin/ksh (el
Korn Shell 88), incluso al usuario root.
Solaris preconfigura a los usuarios para que inicien con /usr/bin/ksh (el
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.
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 55


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 56
Estructura estandar de los comandos

Aunque los UNIX no tienen un estndar que deban seguir todos los
Los UNIX no tiene
comandos, s hay un estndar de hecho que siguen casi todos los de todos los com
n un estndar
andos, pero s
comandos: cumplen obligat
oriamente un
es t nd ar co m
an
comando opciones argumentos comando para la do po r
mayora de
los comandos.
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. En este punto es
dond
diferencia Apple e ms se
Mac OS X de
Unos comandos son internos de cada intrprete de comandos (aqu se los otros Unix.
El formato
llaman builtins), y en este caso tambin cumplen con el formato y la predeterminado
de disco de
Mac OS X no es
sensibilidad a las maysculas, incluso en sistemas como Apple Mac OS X sens
maysculas, en ible a las
to
que no es sensible por lo general. nombres de lo nces los
s comandos
tampoco.
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

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


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


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 tiempo,
La
y que UNIX est muy asociado con el concepto de servidor. Note que los se s usprarimoneras mquinas donde
los conceptos de
sistemas UNIX siempre estn anotando ciertos eventos en algn tipo de servidor y
de cliente/
servidor fueron
registro cronolgico de eventos casi siempre un simple archivo de tambin que
U NIX. Ntese
TCP/IP fue
texto-. desarrollado en
los ambi
UNIX de la familia entes
BSD.
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 (moe.lan)
e@abe:e/> date
Mon Aug 13 21:06:42 EST 2007
e@abe:e/>

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 59


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-,
La suma de user
cunto se demor el comando ejecutando instrucciones m
es igual a real as sys no
dentro del propio programa o comando en UNIX se llama sistema es multit porque el
area
aparte de nu , as que
tiempo unprivileged o user time-, es
tambin hace otra tra tarea
s tareas.
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 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

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


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
2007

January February
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 1 2 3
7 8 9 10 11 12 13 4 5 6 7 8 9 10
14 15 16 17 18 19 20 11 12 13 14 15 16 17


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

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

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


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 62
Comunicacin con otros usuarios

UNIX y las comunicaciones

Desde los meros comienzos no exactamente desde el inicio, la verdad- UNIX ha sido multi-
usuario, 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 63


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 64
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 Aug 14 19:18 (moe.lan)
e pts/1 Aug 14 19:36 (moe.lan) El usuario debe
0 root@abe:/> write e finalizar el
mensaje presiona
ndo ctrl d
Hola usuario!
0 root@abe:/>

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 65


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 66


Coversacin (Chat) con otros usuarios: talk

Xxx

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


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 68
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 69


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 70
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 71


El indicador de comandos del programa mail, ?
Dentro de los estados de mensaje se encuentran:
N Un mensaje nuevo
P Un mensaje preservado en un buzn de sistema
U 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.
exit (ex o x) Sale de mail sin cambiar los contenidos originales del buzn de
correo.
file nuevoBuzn (folder) Se cambia a un nuevo buzn de correo. Todos los
cambios en el buzn de correo actual son aplicados. Debe darse el nombre
completo del nuevo buzn o alguna de las abreviaturas:
o # Buzn previo
o % Buzn del sistema (normalmente /var/spool/mail/nombreUsuario)
o & Buzn personal (normalmente /home/nombreUsuario/mbox)
o +Nombre 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 72


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 Marca el mensaje actual o los dados por la lista de mensajes
como no ledos.
next (n) Muestra el siguiente mensaje, seleccionndolo como mensaje actual
quit (q) Deja el buzn actual y se sale del programa mail. Todos los cambios
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.
undelete listaMensajes (u) Marca el mensaje actual, o los especificados,
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) Muestra el siguiente grupo de encabezados de mensajes.
z- 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" [email protected]

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 73


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.

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


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. En
DOS/
Los directorios en Mac OS X son los directorios de los que se hablar en de nombrWesindo ws el separador
de directorios es
este apartado ya que Mac OS X es un UNIX. Los directorios en Windows \, en el antig
uo Mac
pero en UNIX (inclu OS era :,
son bsicamente los que se mencionarn aqu porque son los que ha Mac OS X) es /.
so el nuevo
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 deprende 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 75


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 76


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 SubDir_2 smit.log smit.transaction
MadRamon 1.png fecha actual.txt smit.script 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 home smit.script
WebSM.pref_wsmmonitoring.data image.data smit.transact
audit lib tftpboot
bin lost+found tmp
bosinst.data lpp u
cdrom mnt unix
cluster opt usr
dev proc var
etc sbin websm.script
getinfo.sh smit.log 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 77


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.
Ejemplo:
e@abe:e/> ls
LitteFile SubDir_2 smit.log smit.transaction
MadRamon 1.png fecha actual.txt smit.script subdir1
e@abe:e/> ls -A
.Xauthority .ssh SubDir_2 smit.script
.profile LitteFile fecha actual.txt smit.transaction
.sh_history MadRamon 1.png smit.log subdir1
e@abe:e/>

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 78


Listar contenidos de directorio con detalles: ls l

Todos los archivos incluso los directorios porque tambin son archivos- tienen unas
propiedades llamadas metadatos en UNIX -. Estas propiedades pueden
revisarse muy fcilmente con el comando ls cuando se le agrega la Recuerde: los di
re
UNIX s ocupan es ctorios en
opcin l (long listing). pacio!

Ejemplo:
e@abe:e/> ls -l
total 88
-rw-r--r-- 1 e system 0 Aug 14 23:15 LitteFile
-rw-r--r-- 1 e system 17804 Aug 14 23:16 MadRamon 1.png
drwxr-xr-x 2 e system 256 Aug 14 23:17 SubDir_2
-rw-r--r-- 1 e system 29 Aug 14 23:15 fecha actual.txt
-rw-r--r-- 1 e system 10181 Apr 10 16:02 smit.log
-rw-r--r-- 1 e system 544 Apr 10 16:00 smit.script
-rw-r--r-- 1 e system 291 Apr 10 16:00 smit.transaction
drwxr-xr-x 2 e system 256 Aug 14 23:17 subdir1
e@abe:e/> ls -l /
total 856
-rw-r--r-- 1 root system 6892 Apr 16 13:14 WebSM.pref
-rw-r--r-- 1 root system 84 Apr 16 13:11
WebSM.pref_wsmmonitoring.data
drwxr-x--- 2 root audit 256 Jan 10 2006 audit
lrwxrwxrwx 1 bin bin 8 Apr 10 07:57 bin -> /usr/bin
-rw-r--r-- 1 root system 5793 Apr 18 22:01 bosinst.data
drwxr-xr-x 2 root system 256 Apr 11 12:43 cdrom
drwxr-xr-x 3 root system 256 Jul 11 23:39 cluster
drwxrwxr-x 5 root system 8192 Aug 14 15:00 dev
drwxr-xr-x 27 root system 8192 Aug 12 13:48 etc
-rwxr-xr-x 1 root system 2287 Jun 08 18:43 getinfo.sh
drwxr-xr-x 7 bin bin 256 Jun 18 21:57 home
-rw-r--r-- 1 root system 8062 Apr 18 22:02 image.data
lrwxrwxrwx 1 bin bin 8 Apr 10 07:57 lib -> /usr/lib
drwx------ 2 root system 256 Apr 10 07:57 lost+found
drwxr-xr-x 45 bin bin 4096 Aug 09 22:13 lpp
drwxr-xr-x 2 bin bin 256 Jan 10 2006 mnt
drwxr-xr-x 11 root system 4096 Apr 13 00:37 opt
dr-xr-xr-x 1 root system 0 Aug 14 23:32 proc
drwxr-xr-x 3 bin bin 256 Apr 10 20:06 sbin
-rw-r--r-- 1 root system 304408 Aug 14 19:34 smit.log
-rw-r--r-- 1 root system 11526 Aug 14 19:34 smit.script
-rw-r--r-- 1 root system 22352 Aug 14 19:34 smit.transaction
drwxrwxr-x 2 root system 256 Apr 10 08:21 tftpboot
drwxrwxrwt 9 bin bin 8192 Aug 14 23:32 tmp
lrwxrwxrwx 1 bin bin 5 Apr 10 07:57 u -> /home
lrwxrwxrwx 1 root system 21 Apr 10 10:55 UNIX -> /usr/lib/
boot/unix_64
drwxr-xr-x 36 bin bin 4096 Jun 18 21:43 usr
drwxr-xr-x 30 root system 4096 Aug 09 12:31 var
-rw-r--r-- 1 root system 11806 Apr 16 13:13 websm.script

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


-rw-r--r-- 1 root system 1152 Apr 16 13:12 wsmcustomtools.data

Es un listado largo y complejo. Hay mucha informacin, a saber: Note que ls lista
el nombre del
item dado como
El primer ejemplo muestra el uso de ls con la opcin l, pero sin es un archivo,
argumento si
pero lista los
argumentos, es decir, un listado con detalles del directorio actual. nombres de los
cont
el argumento es un enidos si
directorio!
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.
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:
- Aparece un guin (-) en los archivos comunes.
d Se muestra para los directorios nicamente. Los enlaces sim
b
ar ch iv os es pe licos son
l Enlace simblico. Tratar de usar un enlace simblico apuntan a otro te
ci al es qu e
m
(excepto por eliminar y mover) lleva a usar el archivo o parecido a un a . Son algo
cceso directo
tem al que apunta el enlace simblico. de Windows o
un alias de
Mac.
b Especial. Es un tem que existe para usar una pieza de
hardware como archivo.
c Especial. Es un tem que existe para usar una pieza de hardware o el
resultado de una funcin de software como archivo.
Y ms!

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


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 En U N IX ..
subdirectorio que es un
comienza con el smbolo / entonces el nombre es absoluto de existe dentro
cada
y el comando cd intenta buscar el directorio a partir de la raz mgicamenditerectorio y que
ap un ta al
absoluta de la jerarqua de directorios; si el nombre dado directorio que
contiene al
presente!
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.
cd ~ 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.
cd - 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.
cd 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.
Ejemplos:
e@abe:e/> pwd
/home/e (el usuario inicia en su directorio personal)
e@abe:e/> cd /home
e@abe:home/> pwd
/home (el usuario ahora est en un directorio que se busc desde la raz)
e@abe:home/> cd ..
e@abe:/> pwd
/ (el usuario ahora est en un nivel superior)
e@abe:/> cd usr
e@abe:usr/> pwd
/usr (el comando busc a partir del directorio donde estaba ubicado)
e@abe:usr/> cd /home/e
e@abe:e/> pwd
/home/e (el comando puede navegar varios niveles en un solo paso)
e@abe:e/> cd -
/usr (reporta a dnde llevar, como se verificar)
e@abe:usr/> pwd
/usr (el comando cambi al usuario a donde estaba antes)
e@abe:usr/> cd
e@abe:e/> pwd

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


/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 82


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 smit.log smit.transaction
MadRamon 1.png fecha actual.txt smit.script subdir1
e@abe:e/> mkdir NuevoSubDir
e@abe:e/> ls
LitteFile SubDir_2 smit.script
MadRamon 1.png fecha actual.txt smit.transaction
NuevoSubDir smit.log subdir1
e@abe:e/> ls -l
total 88
-rw-r--r-- 1 e system 0 Aug 14 23:15 LitteFile
-rw-r--r-- 1 e system 17804 Aug 14 23:16 MadRamon 1.png
drwxr-xr-x 2 e system 256 Aug 15 21:05 NuevoSubDir
drwxr-xr-x 2 e system 256 Aug 14 23:17 SubDir_2
-rw-r--r-- 1 e system 29 Aug 14 23:15 fecha actual.txt
-rw-r--r-- 1 e system 10181 Apr 10 16:02 smit.log
-rw-r--r-- 1 e system 544 Apr 10 16:00 smit.script
-rw-r--r-- 1 e system 291 Apr 10 16:00 smit.transaction
drwxr-xr-x 2 e system 256 Aug 14 23:17 subdir1
e@abe:e/>
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
drwxrwxrwt 10 bin bin 8192 Aug 15 21:08 /tmp

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


drwxr-xr-x 3 e system 256 Aug 15 21:08 /tmp/ejemplo
drwxr-xr-x 2 e system 256 Aug 15 21:08 /tmp/ejemplo/mi_dir
e@abe:e/>

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 exist.
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 dirA
drwxr-xr-x 3 e system 256 Aug 15 22:19 dirA/dirB
drwxr-xr-x 2 e system 256 Aug 15 22:19 dirA/dirB/dirC

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


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 smit.transaction
MadRamon 1.png fecha actual.txt smit.script subdir1
e@abe:e/> ls subdir1
Antiguo_SubDir
e@abe:e/>

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


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 86
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


En el comando,
qu
As como puede crearse toda una jerarqua de directorios, unos dentro de que no slo se pu iere decir
ed
otros, puede tambin borrarse toda una jerarqua de directorios si se usa dos nombres, si en escribir
no cuntos
nombres uno
la opcin p del comando rmdir: necesite. quiera o

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 87


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 88
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 operativo-
como 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 89


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 90


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 91


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 92
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 Pictures dlmgr_.pro
Documents Movies Public drbd.conf
Downloads Music Sites

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 93


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 94
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 -l
total 88
-rw-r--r-- 1 e system 0 Aug 14 23:15 LitteFile
-rw-r--r-- 1 e system 17804 Aug 14 23:16 MadRamon 1.png
drwxr-xr-x 2 e system 256 Aug 14 23:17 SubDir_2
-rw-r--r-- 1 e system 29 Aug 14 23:15 fecha actual.txt
-rw-r--r-- 1 e system 10181 Apr 10 16:02 smit.log
-rw-r--r-- 1 e system 544 Apr 10 16:00 smit.script
-rw-r--r-- 1 e system 291 Apr 10 16:00 smit.transaction
drwxr-xr-x 3 e system 256 Aug 15 21:15 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 l
aparecen en bytes.
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 95


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 96


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

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


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 98
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
IMPORTANTE: Si
al comando
Para hacer una copia sencilla de un archivo simplemente se da a cp como cp se le da como
nombre el de segundo
argumento el nombre del archivo original a copiar y el nombre como existente,
un archivo
quiere que se llame la copia nueva. Dependiendo de como se use la ruta si puede
sobreescribe ta
l archivo sin
del segundo argumento, puede hacerse la copia en algn otro lado. consultar o adverti
r!

Ejemplos:
cp archivoOriginal archivoNuevo (ahora existe un nuevo archivo que contiene exactamente lo
que contiene archivoOriginal)
cp archivoOriginal /ruta/archivoOriginal (ahora hay una copia de un archivo del directorio actual que
est ubicada en otro directorio pero que lleva el mismo nombre)
cp archivoOriginal /ruta/ (lo mismo que en el ltimo ejemplo, pero se escribe menos)
cp archivoOriginal /ruta/nuevoNombre (ahora hay una copia del archivo original, pero el nombre es
otro y est en otro directorio)
cp /ruta/archivoOriginal . (ahora hay una copia del archivo original en el directorio actual,
la copia tiene el mismo nombre que el original)

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

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


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 argumento dado.
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 -R subdir1 subdir2
e@abe:e/> ls -l
total 88
-rw-r--r-- 1 e system 0 Aug 14 23:15 LitteFile
-rw-r--r-- 1 e system 17804 Aug 14 23:16 MadRamon 1.png
-rw-r--r-- 1 e system 0 Aug 16 17:22 NuevoVacio.txt
drwxr-xr-x 2 e system 256 Aug 14 23:17 SubDir_2
-rw-r--r-- 1 e system 29 Aug 14 23:15 fecha actual.txt
-rw-r--r-- 1 e system 10181 Apr 10 16:02 smit.log
-rw-r--r-- 1 e system 544 Apr 10 16:00 smit.script
-rw-r--r-- 1 e system 291 Apr 10 16:00 smit.transaction
drwxr-xr-x 3 e system 256 Aug 16 17:37 subdir1
drwxr-xr-x 3 e system 256 Aug 16 17:59 subdir2
e@abe:e/> cp -R subdir2 SubDir_2
e@abe:e/> ls -l
total 88
-rw-r--r-- 1 e system 0 Aug 14 23:15 LitteFile
-rw-r--r-- 1 e system 17804 Aug 14 23:16 MadRamon 1.png
-rw-r--r-- 1 e system 0 Aug 16 17:22 NuevoVacio.txt
drwxr-xr-x 3 e system 256 Aug 16 18:00 SubDir_2
-rw-r--r-- 1 e system 29 Aug 14 23:15 fecha actual.txt
-rw-r--r-- 1 e system 10181 Apr 10 16:02 smit.log
-rw-r--r-- 1 e system 544 Apr 10 16:00 smit.script
-rw-r--r-- 1 e system 291 Apr 10 16:00 smit.transaction
drwxr-xr-x 3 e system 256 Aug 16 17:37 subdir1
drwxr-xr-x 3 e system 256 Aug 16 17:59 subdir2
e@abe:e/>

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


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 IMPORTANTE: Si
al comando
mv se le da como
argumento el nombre del archivo original a renombrar y el nombre como nombre el de segundo
un archivo
quiere que se llame definitivamente. Dependiendo de como se use la existente,
si puede
sobreescribe ta
ruta del segundo argumento, puede moverse a algn otro lado. l archivo sin
consultar o adverti
r!
Ejemplos:

mv archivoOriginal archivoNuevo (ahora existe el archivo, pero ya no se llama


archivoOriginal, se llama archivoNuevo)
mv archivoOriginal /ruta/archivoOriginal (se movi el archivo del directorio actual a un nuevo
sitio, sigue teniendo el mismo nombre)
mv archivoOriginal /ruta/ (lo mismo que en el ltimo ejemplo, pero se escribe
menos)
mv archivoOriginal /ruta/nuevoNombre (ahora el archivo est en otro sitio, y no tiene el
mismo nombre, ahora es nuevoNombre)
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 101


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 102
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:
IMPORTANTE: Si
ln nombreOriginal nombreNuevo al comando
ln se le da como
nombre el de segundo
Dependiendo de cmo se usen los argumentos, los dos nombres pueden existente,
un archivo
si puede
estar en el mismo o en diferentes directorios, pero, los UNIX por lo sobreescribe ta
l archivo sin
general necesitan que ambos estn en el mismo contenedor fsico. consultar o adverti
r!

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 103


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 104


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
e@abe:e/> date > actual.txt

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


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
e@abe:e/> cat hoy.txt
Thu Aug 16 23:02:33 EST 2007
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 106


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 Hay que record
ar que un
(demasiado) de usar. Slo hay que darle como argumentos los nombres archivo realmen
te se borra
cuando se queda
que se quieren borrar. Si se tienen suficientes permisos como para borrar sin nombres.

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 smit.log
e@abe:e/> rm -R subdir2
e@abe:e/> ls subdir2
ls: 0653-341 The file subdir2 does not exist.

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


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 108
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 109


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 110
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 A
mediados de los
importante es vi. Este editor, llamado por el comando que lo invoca toma por la poc setentas
a en que aparec
i
el nombre de un editor anterior llamado ex, que era una versin vi- se usaba m
ucho
de texto avanza un editor
moderna de otro anterior con el cual mantiene la compatibilidad infinidad de com
do con una
binaciones de
llamado ed-. En ex, usar el comando vi lleva al modo visual de edicin teclas y casi cualquier
secu cia de cara
normalmente se trabaja a travs de comandos, parecidos a las actuales comanendo cteres com
s. Su nombre o
macros de los editores de ambiente grfico-. El modo visual de ex es TECO. 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 111


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 112
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 only]

El nmero de lneas de texto


El nmero de caracteres
Para cambiarnos de pantalla simplemente se usa el comando :n (s, dos puntos n).
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 113


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 114


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 115


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).

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


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 Como es posible
sacar a vi del
tclas AvPgina y RetrPgina. modo comando
y qu
comandos aqu e los
mencionados
no funcionen de
Moverse de a lneas que para entra
ber recordar
r a modo
comando se pu
Ahora, cuando vi inicia normalmente est en modo comando, y en este escape las ve
ede presionar
ces
modo funcionan tambin: (hasta que vi pite necesarias
!)
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).
- para moverse a la lnea anterior, ubicndose en el primer carcter visible (en esa
lnea).
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 117


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 118


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.
shift a para agregar texto al final de la lnea sin importar dnde est el cursor en
la lnea.
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 119


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 120
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.
X para borrar el carcter anterior al cursor. Borra el carcter debajo del cursor si
se est al comienzo de la lnea.
r y un carcter para reemplazar el carcter debajo del cursor por el que se escriba
a continuacin.
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 121


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 122
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 pattern does not
exists.

?texto para ir a la previa lnea que contenga el texto dado (busca hacia atrs o
arriba). Si el texto no se encuentra vi reporta The 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.
/texto/-nmero para que vi busque un texto hacia adelante y se ubique nmero
lneas antes de la que contiene el texto.
?texto?+nmero para que vi busque un texto hacia atrs y se ubique nmero
lneas despus de la que contiene el texto.
?texto?-nmero para que vi busque un texto hacia atrs y se ubique nmero
lneas antes de la que contiene el texto.
:%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 123


:%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.

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


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: Recuer de que las pr
tecla o combi esiones de
dw corta desde donde est el cursor hasta el final de la palabra naciones de
control slo fu
nc
actual. modo comando ionan en
. Para llegar al
modo comando
se usa la tecla
nmero dw corta las nmero palabras a partir de las palabra escape.
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.
P pega los contenidos del tablero de recortes justo antes de donde est el
cursor. Si son lneas pega justo antes de la lnea actual.

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


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 126
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 Recuerde
archivos an si no se cargaron originalmente con la invocacin. Hay varias tecla o qucoemlas presiones de
binaciones de
invocaciones que podrn interesar. Estando en modo comando control slo fu
nc
modo comando ionan en
funcionan: modo comando
. Para llegar al
se usa la tecla
escape.
:w 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! 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 127


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 128
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 all como se
muestra a continuacin:

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.
autowrite (aw) 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.

beautifying text (bf) 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.
ignorecase (ic) 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.

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


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.
number (un) 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.

shiftwidth (sw=) 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.
showmatch (sm) opcin con la que se activa la muestra automtica del
carcter pareja de (, ), {, }. La funcin se desactiva con noshowmatch o nosm.
showmode (smd) 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.

tabstop (ts=) 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.
wrapmargin (wm=) 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.
wrapscan (ws) 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.

wraptype (wt=) 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.
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 130


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 131


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 132
El ambiente de trabajo: procesos y variables

El ambiente de trabajo

&$'
&$' &$'
&$'

.!()/" 6#;-<1&
6#;-<1&
((23!"456
%&0$&%1
(!)*"+,-$

&$' 6#;-<1& !"#$#%


6#;-<1&

23(/"#$&%1 &$'

6#;-<1&
6#;-<1&

6#;-<1& &$'

&$'
!())(!"456

!())(!"456
2!(7!"189:,

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 133


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 134


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 135


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 136
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: El coman do ps es uno de
pocos important los
[0 e@Moe ~] ps es que no
estn tot
PID TT STAT TIME COMMAND a
estandarizados en l m e n t e
8009 p1 S 0:00.03 -bash UNIX. Hay dos va todos los
ria
La ejecucin del comando ps sin opciones slo obtiene un listado de los la informacin qu ciones en
e muestra ps
y en lo que
sig
procesos del usuario que lo invoca, en la ventana de sesin actual y sin opciones de ps. nifican las
Un
muchos detalles. Muestra, a saber: que aplica para a variante,
AI
Solaris deriva del X y para
UNIX original
Una lnea con ttulos de columnas (PID, TT, STAT, TIME, de AT&T y otra
variante aplica
para Mac OS X
COMMAND) deriva de los
UNIX BSD.

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

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


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 usuario que inici o bajo cuya identidad est
corriendo cada proceso.
PID Esta columna muestra el identificador nico de cada proceso mostrado.
PPID Esta columna muestra el proceso padre desde donde se inici el proceso.
C Esta columna muestra el porcentaje aproximado actual de turnos de CPU
que est usando cada proceso.
STIME 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.
TTY Esta columna muestra la terminal de control del proceso. Cuando el
proceso no est relacionado con una terminal muestra ?.
TIME 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.
CMD 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.

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.
PID Como siempre, esta columna muestra el nmero identificador nico del
proceso.
PPID Esta columna muestra el nmero identificador del proceso padre de cada
uno de los procesos.
C Esta columna muestra el consumo promedio porcentual -redondeado a
entero- de cada uno de los procesos.

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


STIME 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.
TTY Esta columna muestra la terminal de control del proceso. Cuando el
proceso no est relacionado con una terminal muestra ?
TIME 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.
CMD Esta columna muestra, si es posible, el comando que constituye el proceso,
con todo y la sintaxis de inicio.
Ejemplo:
0 root@abe:/> ps -f
UID PID PPID C STIME TTY TIME CMD
root 135342 249876 1 00:30:24 pts/0 0:00 ps -f
root 249876 172188 3 00:30:22 pts/0 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/

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


139 ?? S 0:00.37 aped
141 ?? S 6:54.35 /System/Library/CoreServices/SystemUIServer.app/
Conte
142 ?? S 1:07.88 /System/Library/CoreServices/Finder.app/Contents/
MacO
147 ?? S 0:14.01 /Library/PreferencePanes/Growl.prefPane/Contents/
Reso
148 ?? S 0:01.23 /Applications/iCal.app/Contents/Resources/
iCalAlarmSc
149 ?? S 1:48.19 /System/Library/PreferencePanes/
UniversalAccessPref.p

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

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


e 3901 1.1 -0.4 246928 8292 ?? S Sat08PM 5:36.87 /Applications/
Utilities/Terminal.app/Contents/MacOS/Terminal -psn_0_3932161
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

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


ms en el sistema. Adicionalmente, en algunos UNIX la cantidad de CPU 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: %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.
R es el indicador para un proceso en ejecucin, no necesariamente en CPU
cuando se ejecut el comando ps. La letra indica runnable.
S es el indicador para los procesos durmientes (sleeping). Este carcter se
usa para los procesos que llevan durmiendo mximo unos veinte (20) segundos.
T 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.
U 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.
Z 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 142


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 ntese lo que reporta el &
PING localhost (127.0.0.1): 56 data bytes esta es salida del comando
[127 e@Moe ~] telnet localhost 22
Trying ::1...
Connected to localhost.
Escape character is '^]'.
SSH-1.99-OpenSSH_4.5

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 143


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 mencionada
aqu no es la
La idea principal de tener tareas de fondo es la posibilidad de hacer nica manera de
hacer manejo
de sesiones y
provecho de la multitarea de UNIX aunque se tenga una nica terminal de multitarea en
de procesos
UN
sesin de modo texto. Cuando se tienen trabajos multitarea que aparecen manera es el uso IX. Otra
del comando
screen.
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 144


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 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE
9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG
17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD
21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGINFO 30) SIGUSR1 31) SIGUSR2

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 145


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 generalmente-
por 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 146


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 147


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 148
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]="powerpc-
apple-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 149


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 variable se pierde
definitivamente.
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.

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


Paso de variables entre grupos de procesos

(*,

!"#$%&'()*('+

(*,
-./01+(

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 Note que siempr
e se
copias de varia menciona
bl
para que la misma quede marcada como de copia al ambiente de todos procesos hijos re e . Los
ciben copias
que pueden m
los procesos hijos nuevos, de aqu en adelante. Si la variable no existe el libertad sin que
odificar con
se afecten las
intrprete shell define el nombre, para que cuando una variable con el variables en el pr
oceso padre
shell.
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 151


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 de la lnea se
incluye el comando que se necesita que se ejecute como proceso hijo. Esta sintaxis indica al
intrprete shell que cree o haga una copia modificada de unas variables nicamente para ser
insertadas en el ambiente del nuevo proceso hijo iniciado con la ejecucin del 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 152


Paso de Seales entre Grupos de Procesos

/(97) (*,
(*'8(:7+7
$ "&1*1'

(*,
(*,
"
$-5$5&.1))
#
67,384(*,178
!"#$%&'()*('+ /(97) /(97)
(*'8(:7+7

(*,
01234+(

"#"$-"&./0

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 El proceso init
procesos hijos. seales a proces no enva
os a m enos
que el originador
y el destino
As, cuando un usuario tiene una sesin de terminal remota usando SSH ejecuten bajo
un mismo
usuario o el orig
contra un servidor Unix. y en la misma inicia al editor vi, tiene no un usuario root.
inador sea el
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

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


kill -- -procesoLder

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 154


Seguridad y permisos de archivos

Arquitectura de Seguridad de UNIX

+$3<=(>$3==
!"#$%&'()$*+,-(.$/0
+$*+,-(>$?4>

;/3%

+$3<=(>$3==
+$,-,(>$/0

@ ,39:%

!"#$122%()$3440(.$565078 +$3<=(>$3==
+$*457(>$?,33
,39:%

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 155


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 156


Procesos y Permisos

+$3<=(>$3==
!"#$%&'()$*+,-(.$/0
+$*+,-(>$?4>

;/3%

+$3<=(>$3==
+$,-,(>$/0

@ ,39:%

!"#$122%()$3440(.$565078 +$3<=(>$3==
+$*457(>$?,33
,39:%

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 157


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 158


Usuarios y Grupos de Usuarios

-*&$#+,(./#,,0 5#&1,(./*6*0"3

*"8&#+06
$&)+0
1"#7
5#&1,*(7&48+,4$9"*

1#+40% *;&0),<4
-*&$#+,*(1#,0"2+),*
$)3+4/0#&"

:0#,*(2#&1,*
*0$77

!"#$#%&'$()"(&*&$#+,* !"#$#%&'$()"(2#&1,*

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,
este usuario es root. Los usuarios que pertenecen al grupo system pueden instalar, actualizar

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


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.
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.

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


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 161


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 162
Permisos de Archivos: ls -l

- rwx rwx rwx usuario grupo archivo


!"#$%&'&()*"(+!,%-+.(+
"&/"(*&*+#%'
!"#$%&'&()*"(+!,%-+.(+
"&/"(3#*!'
+#-1%2'5
-*+.0'(%./"./+(+--"0"#
+("&/"(+#-1%2'
!"#$%&'&()*"(+!,%-+.(+(/'0'& -*+.0'(%./"./+(+--"0"#
,'&('/#'&(*&*+#%'&(4(3#*!'& +("&/"(+#-1%2'

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 163


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 164


Permisos de Directorios: ls -ld

d rwx rwx rwx usuario grupo directorio


!"#$%&'&()*"(+!,%-+.(+
"&/"(*&*+#%'
!"#$%&'&()*"(+!,%-+.(+
"&/"(1#*!'
0%#"-/'#%'3
-*+.0'(%./"./+(+--"0"#
+("&/"(0%#"-/'#%'
!"#$%&'&()*"(+!,%-+.(+(/'0'& -*+.0'(%./"./+(+--"0"#
,'&('/#'&(*&*+#%'&(2(1#*!'& +("&/"(0%#"-/'#%'

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 165


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.

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


Cambiar Permisos: chmod

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


!"#$%&'()&*+!",-$

- rwx r-- --- 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 Slo el dueo de
un
directorio tiene el archivo o
Para remover unas letras de permisos a un(os) archivo(s) o directorio(s) privilegio de
poder modificar
sus permisos,
independientemen
chmod ternas-permisos archivo te de los
permisos que ya
tenga.
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 u+x,
agregar una x en la terna del usuario y quedar rwxr-----.

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


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 168
Cambiar Propietario: chown

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


!"#$%&#'(#)*)&+(!",-# !#0+%1#&/+(+&*23#&(##'

- rwx r-- --- otrousu grupo archivo


!#0+%1#&/+(+&43&1)45# !".(/&#'(#.()&+(!",-#

- rwx r-x r-x otrousu otrogru archivo


!"#$%&)*)+(,#6.()/#&+(!",-# !#0+%1#&/+(+&*23#&(##'

- 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 Un usuario pued
e co
archivo en cuestin. qu grupos est nocer a
invo asignado
cando el comando
groups. sencillo

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


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 170
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 171


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 172


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 sleep 600
[1] - Stopped (SIGTSTP) vi /.profile
root@ibmserver1:/> exit
There are stopped jobs.
root@ibmserver1:/>

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 173


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 } 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
, , y \ 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 174


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? Por el uso que tie
ne
Porque el shell siempre los interpreta y porque as la mayora de los comandos como n, algunos
find, tar,
cpio s interp
comandos no tienen entonces que hacerlo! retan comodines!

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 fileH
MadRamon 1.png archivoaB.txt fileB fileI
NuevoVacio.txt archivoab.txt fileC nuevoArchiv2.txt
actual.txt dato viejo fileD procesos.txt
archivoA.txt fechaActual.txt fileE ramon.txt
archivoAB.txt fileA.c fileF subdir1
archivoE.txt fileA.cob fileG
e@abe:e/> ls archivo?.txt
archivoA.txt archivoE.txt archivoZ.txt
e@abe:e/>

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


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 176


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]
fileB fileD fileF
e@abe:e/> echo archivo[aA2]*txt
archivo23.txt archivoA.txt archivoAB.txt archivoaB.txt archivoab.txt

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 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 archivo[!aA2]*txt
archivo A.txt archivo.part.txt archivo.txt archivoE.txt archivoZ.txt

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


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 nico caracter de una
lista de posibilidades dada posibilidad por posibilidad existe otra sintaxis
Note que si el id
para indicarle al shell que debe seleccionar archivos cuyos nombres est trabajando
ioma en que
el usuario es
concuerdan en una posicin con un caracter dado un rango ascendente. ingls el caracter
entre la n y la o; no est
La sintaxis es simplemente escribir [, el caracter donde comienza el ni
con tilde estn las vocales
rango, un smbolo menos (-), el caracter donde termina el rango, y el junto a las
vocales sin tilde!
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 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[C-F]*
fileC fileD fileE fileF

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
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

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


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 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[!C-F]*
fileA.c fileA.cob fileA.txt fileB fileG fileH fileI

Note que este ejemplo tambin es muy sencillo: se indica al shell que
Note pueden com
debe seleccionar los archivos existentes cuyo nombre comienza con file y y rangos en una
binarse listas
especificacin.
que luego tienen un caracter que no est en el rango C a F -es decir el Pregunte cmo!
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 179


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 180
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 ; who ; who am i
root lft0 Sep 03 10:05
root pts/0 Sep 03 10:05 (:0.0)
root pts/1 Sep 04 13:46 (192.168.0.12)
root pts/3 Sep 04 13:55 (192.168.0.12)
root pts/3 Sep 04 13:55 (192.168.0.12)
root@ibmserver1:/>

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)
El cdigo de re
se ejecutar. Slo cuando el ltimo termine volver a aparecer el secuencia de co
torno de una
mandos es el
indicador de mandatos del intrprete para recibir ms comandos. cdigo de retorn
o del
de los comandos ltimo
nicamente.
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 181


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 182
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.
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

Ntese que el comando1 puede tener opciones y argumentos, y el comando2 posiblemente


tambin, la sintaxis slo depende de los smbolos &&.

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


Ejemplo:
root@ibmserver1:/> whoami && echo "Ese soy yo!"
root
Ese soy yo!
root@ibmserver1:/>

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 De las variables
del
primero hay que conocer que para los mismos sh, ksh y bash, una se hablar ms ad intrprete
elan
libro, muy pronto te en este
ejecucin se considera con error si cuando termina un comando devuelve notarse que
. Pero puede
las variables
un nmero cualquiera diferente de cero (0) en la variable ?. como ? se co
nsideran del
ambiente,
tema ya
Para ejecutar un comando2 nicamente si el comando1 termina con error considerado.
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:/>

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 184


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 Leer directamente
del teclado
no tiene sent
fueron programados para que no asuman que reciben entrada -en especial programa corre
ido si un
en un sistema
texto- desde el teclado directamente, si no desde una especie de archivo multi-tarea y
mul
Quin puede decir ti-usuario.
virtual individual llamado la entrada estndar, y para que no escriban el teclado en
quin tiene
un momento
lo que producen -en especial texto- a la pantalla, si no a una especie de dado?
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). Hay programas que
leer directamente necesitan
Los programas tampoco asumen que tienen una pantalla a disposicin, si de una virtuali
del teclado o
no que escriben sus avisos y el texto en general que producen en un za
teclado, y qu cin del
e necesitan
archivo virtual individual llamado la salida estandar o, en ingls escribir en la pant
all
o al m en os a de texto,
stdout. Este archivo es de escritura secuencial, no permite la lectura, y virtualizacin de en un a
texto. Se dice
los programas asumen que est abierto antes de comenzar. Igual que con que estos program
as
la entrada estnd no usan o
la entrada estndar, este archivo normalmente lo abre y lo pone a la salida estndar.
ar o no usan
disposicin de los programas que siguen 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 185


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 un cliente sea
recibido como texto en la entrada del programa -que parece estar leyendo del teclado
remoto-. Adicionalmente el mismo programa conecta la salida estndar con una
virtualizacin de un socket de 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
Note que no pu
simplemente se agrega <nombre_archivo a la sintaxis del comando que ed
mismo archivo e usar un
para la
debe leer de un archivo y no de la virtualizacin del teclado. Note que el redireccin de
la entrada
estndar y de la sa
archivo debe existir antes de que inicie el comando, ya que la redireccin lid
simultneamente a estndar
!
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 9 21:21:33 EST 2007] ...
Ramon Barrios Lascar
<EOT>
e@abe:e/> cat MiNombre.txt
Ramon Barrios Lascar

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 186


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. Note que no pued
mismo archivo e usar un
Atencin: el shell abre el archivo para salida con la opcin O_CREAT, lo redireccin de para la
la entrada
que hace que si no existe lo crea, pero si ya existe lo destruye y luego lo estndar y de la sa
lid
simultneamente a estndar
crea nuevo! !

Ejemplos:
[0 e@Moe ~] ps -u
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
e 4971 0.1 0.1 27892 944 p1 S 9:47AM 0:00.07 -bash
[0 e@Moe ~] ps -u > datos.txt
[0 e@Moe ~] cat datos.txt
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
e 4971 0.0 0.1 27892 944 p1 S 9:47AM 0:00.10 -bash
[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

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 Note
que no pued
todo el texto generado por la ejecucin de un comando en un nico mismo archivo e usar un
para
archivo, pero si el texto general generado por un comando es mucho, de esretdireccin de la entradala
ndar y de la salid
pronto se necesita que los textos de los mensajes de error estn de errores simult a estndar
neamente!
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 que se quieren capturar los mensajes de errores y almacenarlos en el archivo

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


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 Note que
entrada estndar. Para esta situacin, que la verdad no es tan comn como mismo arno puede usar un
chivo para
las dos anteriores, existe la redireccin de entrada desde archivos here. redireccin de la entradala
estnd
Para redirigir la entrada estndar de un comando, y que no la tome de un simultarneyamdeenlatesalida estndar
!
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 188


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 TIME COMMAND
e 4971 0.0 0.1 27892 896 p1 S 9:47AM 0:01.00 -bash
[0 e@Moe /Volumes] date >> nuevoRegistro.txt
[0 e@Moe /Volumes] cat nuevoRegistro.txt
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
e 4971 0.0 0.1 27892 896 p1 S 9:47AM 0:01.00 -bash
Mon Sep 10 18:20:30 COT 2007

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 189


(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 nombre_archivo porque lo crea
nuevo.
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

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


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 Note
que lo
para confusiones puede usarse simplemente $nombre_variable; as si se diferencian lass msisaytesmcuas Unix
las minsculas en las de
tiene una variable llamada Host, y se quiere obtener o usar el valor en el de los nombres
las variables de am
momento se escribe ${Host} o simplemente $Host. A la hora de la
biente!
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 Note que hay m
s
Si se observa en detalle el ejemplo, cuando la variable no tiene texto sustitucin de estilos de
pregunte al instru variables,
alrededor el shell no tiene problemas en identificar el nombre de la ctor cules!

misma y por ello extrae el valor y lo usa, pero despus, como se us la sintaxis

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


sencilla, el shell cree que la variable es MESiembre -ya que es 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:
HOME 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.
LOGNAME Contiene el nombre del usuario con el que se autentic el usuario
actual -comnmente lo mismo que retorna whoami, pero no siempre-.
PATH Esta variable debe contener una lista de directorios separados por :
(dos puntos) donde deben buscarse los comandos entrados en el shell sin ruta.
CDPATH Esta variable puede contener una lista de directorios separados por :
(dos puntos) donde deben buscarse directorios dados como parmetros a cd sin
ruta.
PS1 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-.
PS2 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 .
ENV 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.
1..9.. 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.
0 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.
TERM 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.

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


MANPATH 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).
IFS 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.
? En esta variable el shell almacena el entero cdigo de retorno del
ltimo comando ejecutado.
RANDOM Cada vez que se usa esta variable (que se obtienen sus contenidos) el
shell genera un nmero pseudo-aleatorio entero pequeo.
SECONDS En esta variable el shell almacena el nmero de segundos que han
pasado desde que inici -el shell-.
Ejemplos:
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 193


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 194
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
Note que la su
comilla inversa o acento grave es el smbolo a la izquierda del 1 en un comandos no us
bstitucin de
a la entrada o
teclado qwerty en ingls. Como este smbolo en algunos teclados es algo la salida estndar del coman
do
complicado de obtener, puede usarse la construccin $(primer comando) otquroe . necesita informacin de
El sh el l ca pt
en el mismo sitio de la sintaxis del segundo comando, y as obtener lo informacin y ur a
reemplazo de text hace un
mismo. o literal.

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.

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


Reemplaza en lo escrito por el usuario $( ) o ` ` y lo que lleva dentro por los
textos capturados.
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?

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


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
Note que algunos
estndar de un comando directamente a la entrada estndar de otro tienen | si no un
teclados no
comando. sm bolo de
barra cortada .
Si el teclado
no tiene la barr
Para conectar la salida estndar de un primer comando con la entrada a completa el
smbolo de barr
a
estndar de otro comando se usa la construccin primer comando | totalmente equi cortada es
valente y se
puede usar.
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 Ntese: algunos
com
reciben por entra andos no
da estndar
fcilmente, pe
Message from e on abe (pts/0) [Wed Sep 19 00:41:51 EST ro en la
do cu m en ta ci n
2007] ... informar cmo. pu ed en
Hola super usuario Muchos usan
una sintaxis de a
<EOT> brir archivo
con el archivo -
e@abe:e/> echo "Cuerpo del mensaje
More...de correo
More...
More...Ramon Barrios Lascar | mail -s Mensaje 2007-09-19"
[email protected]

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 197


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 198


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 * ya no significar
todos los caracteres posibles en un nombre de archivo, significar simplemente asterisco.
Algunos caracteres normales se convierten en especiales cuando no lo son pero se les
antepone un 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
La variable con mi directorio es /home/e
e@abe:e/> echo La variable con mi directorio es \$HOME

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


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 de una variable -en
este caso HOME-, que se da a echo, que muestra el texto, incluyendo el contenido de la
variable. En el cuarto ejemplo se vara un 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 Note
que pocos
mostrado se demuestra cmo obtener un backslash que no tenga tienen significad caracteres
o especial
significado especial -donde especial quiere decir hacer escape al cuando llevan co
mo prefijo a
\. Deber consul
caracter que sigue-, hay que usar un backslash para quitare el significado de C pa tarse una gu
ra saber cules a
son
especial al backslash que sigue! todos.

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 ' '.
Ejemplos:

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


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
Not
ejemplos se muestra cmo hacer que un texto de varias palabras se tome obteenequr un e no hay la maner
a de
as ' dentro de te
como un nico tem. Dentro de las comilla ' ni los espacios son en ce rr ado en ' '. xto

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 201


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 202


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 203


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 204
Volcar texto a la salida estndar: 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 205


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:$
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$

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 206


Contar caracteres, palabras, lneas: wc

!" #$

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: Not e que el comando
wc [ -c | -w | -l ] [ archivo ... ] an ms opcione wc tiene
s, opciones
que puede re
visar en la
Donde: documentacin.

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 207


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 muestra cmo pueden
reportarse estadsticas de un texto que no est en un archivo, en este caso, como no se
indicaron argumentos el comando 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 208


Numerar lneas de texto: nl

#
$
%
&
'
!" (
)
*
+
#,

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 Note qu
e el
es ms fcil si se reporta usando nmeros de lnea. La manera ms fcil de an ms opcociomneans,doopnl tiene
que puede re ciones
listar texto con las lneas numeradas es usando el comando nl (number do cumentacin.
visar en la
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

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


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.
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

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


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
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

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 211


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 212
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 213


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 214


Obtener primeras lneas de texto: 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 215


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 216


Obtener ltimas lneas de texto: 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 217


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 218


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 219


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 220
Obtener columnas de texto: 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
Note que el com
son opcionales, no hacen parte de la sintaxis. corta -como se
ando cut no
pensara dado
el nombre-, realm
El smbolo | indica posibilidad, se usa para mostrar las en
hace es selecciona te lo que
r.
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 221


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
invscout

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


snapp
ipsec
nuucp
sshd
j
ldapdb2
e
e@abe:e/> ps -ef | head -n8 | cut -c-15,49-
UID 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 223


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 224
Combinar texto en columnas: 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 225


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 226


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 227


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 228
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 229


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 230


Jairo E. Soler (315) 797-1397 Net.Solutions
Jorge Molina M. (315) 344-8150 SENA
Jorge Russo (311) 818-8709 Redsis
Jorge Valbuena (313) 571-6462 iKnow
Ramn Barrios (315)313-7269 iKnow
Yeimy Fontalvo (300) 817-4126 ***

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 231


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 232
Filtrar lneas de texto: grep

%&'

%&'
%&'
%&'
!"#$ %&'

%&'

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 Expres
iones regu
que se busca. En los sistemas UNIX hay mltiples maneras de hacer un cruce entre lares son
expresione
filtrados de texto, dentro de editores de texto, y a travs de comandos de prmatogemticas y un lenguaje des
ramacin ba
lnea, es decir, por fuera de los editores. Una de las maneras es usando autmatas celular sado en
es.
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).

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


La opcin v se usa para que grep filtre negativamente, as seleccionar las lneas
que no cumplan con la expresin regular.
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

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


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.
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

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


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 236


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 re
gu
expresiones regulares bsicas. unes expresiones lares son
conc isas que
describen una
porcin de
A continuacin se define la simbologa usada en las expresiones regulares texto.
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 237


(-) 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 238


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 239


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 240
Filtrado avanzado de lneas de texto: egrep

%&'

%&'
%&'
%&'
!"#!$ %&' %&'

%&' %&'

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 241


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 242


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
Celulares.tsv:Alessio Di Mare (311) 688-1162
Empresas.tsv:Alessio Di Mare Redsis

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


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 244


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 245


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 246


Celulares.tsv:Jorge Valbuena V. (313) 571-6462
Celulares.tsv:Yeimy Fontalvo (300) 817-4126
Empresas.tsv:Jairo E. Soler Net.Solutions
Empresas.tsv:Jorge Molina M. SENA
Empresas.tsv:Jorge Russo Redsis
Empresas.tsv:Jorge Valbuena V. iKnow
Empresas.tsv:Yeimy Fontalvo

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: [a-
zA-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 247


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 248
Ordenar lneas de texto: sort

, %
' &
( '
% (
%. )
*
!"#$ *
) +
- ,
& -
+ %.

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).
La opcin d se usa para que sort ordene segn diccionario. En estos
ordenamientos slo se tienen en cuenta las letras, nmeros y espacios.

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


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!

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.

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


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' ' -k 2 -u Empresas.tsv
Yeimy Fontalvo
Jorge Valbuena V. iKnow
Jairo E. Soler Net.Solutions
Alessio Di Mare Redsis
Jorge Molina M. SENA
Yasser Barrios Lascar SupraImpresores

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


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
5
6
7
8
9

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


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 253


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 254
Transliterar caracteres: tr

#$%%&'"( !" #)**&+"(

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 255


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
Yeimy Fontalvo (00) 817-4126

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


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
conoce las maysculas adecuadas de cada caracter en minsculas. Pero la a minscula

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


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 ejemplos-
es 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
Yeimy Fontalvo (30) 817-4126

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


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 259


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 260
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 261


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 262
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 263


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
del archivo o directorio cuando se redondea a bloques de 512 bytes -redondeo
hacia arriba- es mayor que bloques.

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


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.
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.

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


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.
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

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


ComandoCompleto pudo ejecutarse y termin con cdigo de retorno cero (0) por
lo que puede usarse como un criterio.
La accin -ok ComandoCompleto hace que find pregunte si ejecuta
ComandoCompleto para 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.

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
./.Xauthority
./subdir1
./subdir1/Antiguo_SubDir
./subdir1/MadRamon 1.png
./subdir1/smit.log
./subdir1/LitteFile
./nuevoArchiv2.txt

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


./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 4 e system 4096 Sep 16 20:34 .
65 1 -rw-r--r-- 1 root system 248 Apr 11 08:53 ./.profile
66 9 -rw------- 1 e system 8770 Sep 18 09:23 ./.sh_history
182 3 -rw-r--r-- 1 e system 2413 Aug 18 21:40 ./procesos.txt
67 1 -rw-r--r-- 1 e system 29 Aug 16 23:02 ./actual.txt
177 1 -rw-r--r-- 1 e system 29 Aug 14 23:15 ./dato viejo
72 0 -rw-r--r-- 1 e system 0 Aug 14 23:15 ./LitteFile
4 1 drwxr-xr-x 2 e system 256 Aug 14 19:18 ./.ssh
183 1 -rw-r----- 1 e system 760 Aug 18 23:09 ./ramon.txt
180 18 -rw-r--r-- 1 e system 17804 Aug 14 23:16 ./MadRamon 1.png
185 1 -rw------- 1 e system 147 Aug 19 17:02 ./.Xauthority
12288 1 drwxr-xr-x 3 e system 256 Aug 16 17:37 ./subdir1
12352 1 drwxr-xr-x 2 e system 256 Aug 15 21:05 ./subdir1/
Antiguo_SubDir
12289 18 -rw-r--r-- 1 e system 17804 Aug 16 17:37 ./subdir1/
MadRamon 1.png
12290 10 -rw-r--r-- 1 e system 10181 Aug 16 17:37 ./subdir1/
smit.log
12291 0 -rw-r--r-- 1 e system 0 Aug 16 17:37 ./subdir1/
LitteFile
68 1 -rw-r--r-- 1 e system 1 Aug 18 21:31 ./
nuevoArchiv2.txt

...
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

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

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


./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 -111 -ls
64 4 drwxr-xr-x 4 e system 4096 Sep 16 20:34 .
4 1 drwxr-xr-x 2 e system 256 Aug 14 19:18 ./.ssh
12288 1 drwxr-xr-x 3 e system 256 Aug 16 17:37 ./subdir1
12352 1 drwxr-xr-x 2 e system 256 Aug 15 21:05 ./subdir1/
Antiguo_SubDir

...
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 to </tmp/lost+found>:
: The file access permissions do not allow the specified action.
find: 0652-081 cannot change directory to </tmp/wsmdata.196726>:
: The file access permissions do not allow the specified action.
/tmp/vgdata
/tmp/ejemplo
/home
find: 0652-081 cannot change directory to </home/lost+found>:
: The file access permissions do not 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).
e@abe:e/> find /tmp /home -links +2 2> /dev/null
/tmp
/tmp/bos
/tmp/vgdata
/tmp/ejemplo
/home
/home/e
/home/e/subdir1

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


/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 Sep 18 09:22 /tmp
10 1 drwxr-xr-x 2 root system 256 Aug 9 13:15 /
tmp/.oslevel.datafiles
11 0 -rw-r--r-- 1 root system 0 Apr 10 13:18 /
tmp/.oslevel.datafiles/.oslevel.hold
26 1 -rw-r--r-- 1 root system 62 Aug 9 12:33 /
tmp/.oslevel.datafiles/.oslevel.mlinfo.cache
29 1 -rw-r--r-- 1 root system 5 Aug 9 12:33 /
tmp/.oslevel.datafiles/.oslevel.cache.sum
52 3 -rw-r--r-- 1 root system 3068 Aug 17 10:37 /
tmp/.ctinst.log
106 13 -rwxr--r-- 1 test02 testgrp1 12292 Aug 9 23:56 /
tmp/.DS_Store
120 1 -rw-r--r-- 1 root system 406 Apr 10 08:47 /
tmp/.sr_migrate.log
4 0 -rw------- 1 root system 0 Apr 10 11:05 /
tmp/.strload.mutex
14 49 -rw-r--r-- 1 root system 49464 Apr 10 15:41 /
tmp/.tmpfile.123028
23 1 -rw-r--r-- 1 root system 29 Aug 9 10:42 /tmp/
File1.txt
17 4 -rw-r--r-- 1 root system 3584 Apr 13 00:38 /tmp/
tlist159808
8 0 -rw-r----- 1 root system 0 Apr 10 20:48 /tmp/
Spmi_shm_hook
18 888 -rw-r----- 1 root system 909172 Aug 9 11:55 /tmp/samba-
client-2.2.7-4.aix4.3.ppc.rpm

...
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

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


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 9166 Sep 18 09:29 /home/
e/.sh_history

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
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:

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


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 272


Ejecucin de comandos en cantidades de archivos: xargs

!
"
#
$
%
&
5.236
'
(
+,-./0,1.23!1.23"1.23#1.23$1.23%1444
)
!*

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 273


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 with fileC.Z.
fileD: Compression: 55.18% This file is replaced with fileD.Z.
fileE: Compression: 55.18% This file is replaced with fileE.Z.
fileF: Compression: 55.14% This file is replaced with fileF.Z.
fileG: Compression: 55.14% This file is replaced with fileG.Z.
fileH: Compression: 55.18% This file is replaced with 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 274


fileE: Compression: 55.18% This file is replaced with fileE.Z.
fileF: Compression: 55.14% This file is replaced with fileF.Z.
fileG: Compression: 55.14% This file is replaced with fileG.Z.
fileH: Compression: 55.18% This file is replaced with 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 -n3 compress -v
compress -v fileC fileD fileE
fileC: Compression: 55.18% This file is replaced with fileC.Z.
fileD: Compression: 55.18% This file is replaced with fileD.Z.
fileE: Compression: 55.18% This file is replaced with fileE.Z.
compress -v fileF fileG fileH
fileF: Compression: 55.14% This file is replaced with fileF.Z.
fileG: Compression: 55.14% This file is replaced with fileG.Z.
fileH: Compression: 55.18% This file 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 275


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 276
Comprimir archivos 1: 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 277


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 +2000c -ls
64 4 drwxr-xr-x 4 e system 4096 Sep 18 10:56 .
66 11 -rw------- 1 e system 10418 Sep 18 10:56 ./.sh_history
182 3 -rw-r--r-- 1 e system 2413 Aug 18 21:40 ./procesos.txt
177 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileH
180 18 -rw-r--r-- 1 e system 17804 Aug 14 23:16 ./MadRamon 1.png
12289 18 -rw-r--r-- 1 e system 17804 Aug 16 17:37 ./subdir1/
MadRamon 1.png
12290 10 -rw-r--r-- 1 e system 10181 Aug 16 17:37 ./subdir1/
smit.log
191 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileB
194 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileC
195 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileD
196 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileE
197 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileF
198 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileG
199 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileI
217 104 -rw-r----- 1 e system 105515 Sep 15 18:14 ./ibmserver2-
lslpp-L.txt

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 278


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-lslpp-
L.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 279


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 280
Comprimir archivos 2: 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 281


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 +2000c -ls
64 4 drwxr-xr-x 4 e system 4096 Sep 18 11:19 .
221 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileH
182 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileB
177 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileC
180 18 -rw-r--r-- 1 e system 17804 Aug 14 23:16 ./MadRamon
1.png
12289 18 -rw-r--r-- 1 e system 17804 Aug 16 17:37 ./subdir1/
MadRamon 1.png
12290 10 -rw-r--r-- 1 e system 10181 Aug 16 17:37 ./subdir1/
smit.log
191 11 -rw------- 1 e system 10456 Sep 18
10:57 ./.sh_history
193 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileD
194 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileE

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


195 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileF
196 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileG
197 3 -rw-r--r-- 1 e system 2245 Sep 9 18:06 ./fileI
198 104 -rw-r----- 1 e system 105515 Sep 15 18:14 ./
ibmserver2-lslpp-L.txt
217 3 -rw-r--r-- 1 e system 2413 Aug 18 21:40 ./
procesos.txt

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-lslpp-
L.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
633 2245 72.8% ./fileG
compressed uncompr. ratio uncompressed_name

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


633 2245 72.8% ./fileI
compressed uncompr. ratio uncompressed_name
13669 105515 87.0% ./ibmserver2-lslpp-L.txt
compressed uncompr. ratio uncompressed_name
716 2413 71.6% ./procesos.txt
compressed uncompr. ratio uncompressed_name
633 2245 72.8% ./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 . -name '*gz' -print | xargs gunzip -vl
method crc date time compressed uncompr. ratio uncompressed_name
defla c58ff355 Sep 9 18:06 633 2245 72.8% ./fileB
defla 4ee49376 Sep 9 18:06 631 2245 72.9% ./fileC
defla db9b9031 Sep 18 10:57 2902 10456 72.5% ./.sh_history
defla 44d5bb72 Aug 16 17:37 2842 10181 72.3% ./subdir1/smit.log
defla 4401742b Sep 9 18:06 631 2245 72.9% ./fileD
defla ae144046 Sep 9 18:06 633 2245 72.8% ./fileE
defla 7cc54b0d Sep 9 18:06 633 2245 72.8% ./fileF
defla d675841c Sep 9 18:06 633 2245 72.8% ./fileG
defla 58651c7f Sep 9 18:06 633 2245 72.8% ./fileI
defla e3f19b59 Sep 15 18:14 13669 105515 87.0% ./ibmserver2-lslpp-
L.txt
defla e1b6233a Aug 18 21:40 716 2413 71.6% ./procesos.txt
defla f2d5d36e Sep 9 18:06 633 2245 72.8% ./fileH
25189 146525 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-lslpp-
L.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 284


Empacar archivos: 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 285


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 286


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 -l archivo*
-rw-r--r-- 1 e system 0 Sep 09 19:21 archivo A.txt
-rw-r--r-- 1 e system 0 Sep 09 19:21 archivo.part.txt
-rw-r--r-- 1 e system 0 Sep 09 18:14 archivo.txt
-rw-r--r-- 1 e system 0 Sep 09 19:21 archivo23.txt
-rw-r--r-- 1 e system 105 Sep 09 18:05 archivoA.txt
-rw-r--r-- 1 e system 919 Sep 09 18:05 archivoAB.txt
-rw-r--r-- 1 e system 105 Sep 09 18:07 archivoE.txt
-rw-r--r-- 1 e system 105 Sep 09 18:07 archivoZ.txt
-rw-r--r-- 1 e system 220 Sep 09 18:06 archivoaB.txt
-rw-r--r-- 1 e system 220 Sep 09 18:06 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.
a archivo23.txt 0 blocks.

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


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 archivo A.txt
-rw-r--r-- 501 0 0 Sep 09 19:21:29 2007 archivo.part.txt
-rw-r--r-- 501 0 0 Sep 09 18:14:20 2007 archivo.txt
-rw-r--r-- 501 0 0 Sep 09 19:21:29 2007 archivo23.txt
-rw-r--r-- 501 0 105 Sep 09 18:05:31 2007 archivoA.txt
-rw-r--r-- 501 0 919 Sep 09 18:05:39 2007 archivoAB.txt
-rw-r--r-- 501 0 105 Sep 09 18:07:36 2007 archivoE.txt
-rw-r--r-- 501 0 105 Sep 09 18:07:45 2007 archivoZ.txt
-rw-r--r-- 501 0 220 Sep 09 18:06:16 2007 archivoaB.txt
-rw-r--r-- 501 0 220 Sep 09 18:06:06 2007 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.
x archivoA.txt, 105 bytes, 1 media blocks.

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


x archivoAB.txt, 919 bytes, 2 media blocks.
x archivoE.txt, 105 bytes, 1 media blocks.
x archivoZ.txt, 105 bytes, 1 media blocks.
x archivoaB.txt, 220 bytes, 1 media blocks.
x 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 289


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 290
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 291


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 292


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 293


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 294


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 no-
que 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 295


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 296
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 devuelve verdadero si expresin devuelve verdadero.
comando devuelve verdadero si comando devuelve verdadero (0).
! expresin (~) devuelve verdadero si expresin devuelve falso.
cadena1 = cadena2 ( ) devuelve verdadero si cadena1 (de texto) es igual a
cadena2 (de texto).

cadena1 == cadena2 ( ) devuelve verdadero si cadena1 (de texto) es igual a


cadena2 (de texto).

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


cadena1 != cadena2 ( ) devuelve verdadero si cadena1 (de texto) es diferente
de cadena2 (de texto)
expr1 -a expr2 () devuelve verdadero si expr1 es verdadero y expr2 es
verdadero tambin. Si expr1 es falso expr2 nunca se ejecuta.
expr1 -o expr2 () devuelve verdadero si expr1 es verdadero o si expr2
es verdadero. Si expr1 es verdadero expr2 nunca se ejecuta.
expr1 -eq expr2 (=) devuelve verdadero si el valor numrico de expr1 es
igual al valor numrico de expr2.
expr1 -ne expr2 () devuelve verdadero si el valor numrico de expr1 no
es igual al valor numrico de expr2.
expr1 -gt expr2 (>) devuelve verdadero si el valor numrico de expr1 es
mayor que el valor numrico de expr2.
expr1 -lt expr2 (<) devuelve verdadero si el valor numrico de expr1 es
menor que el valor numrico de expr2.
expr1 -ge expr2 () devuelve verdadero si el valor numrico de expr1 es
mayor o igual que el valor numrico de expr2.
expr1 -le expr2 () devuelve verdadero si el valor numrico de expr1 es
menor o igual que el valor numrico de expr2.
Ejemplos:
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 298


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 = cadena2), el comando test implementa tambin:

cadena 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.
Ejemplos:
e@abe:e/> [ $(whoami) ] && echo "Tengo usuario!"
Tengo usuario!

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 devuelve verdadero si el usuario tiene permiso de lectura sobre el
archivo.
-w archivo devuelve verdadero si el usuario tiene permiso de escritura sobre
el archivo.

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


-x archivo devuelve verdadero si el usuario tiene permiso de ejecucin sobre
el archivo.
-f archivo devuelve verdadero si archivo existe y es un archivo comn.
-d directorio devuelve verdadero si archivo existe y es un directorio.
-c archivo devuelve verdadero si archivo existe y es dispositivo de
caracteres.
-b archivo devuelve verdadero si archivo existe y es dispositivo de bloque.
-s archivo devuelve verdadero si archivo existe y tiene tamao mayor que
cero.
-t nmero devuelve verdadero si el descriptor de archivo nmero est asociado
a una terminal. Si no se da nmero asume 1 (la salida estndar).
Ejemplos:
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 300


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 \*.
oper1 | oper2 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 \&.
cadena : exprReg2 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 \( \).
match cadena exprReg2 exactamente equivalente a cadena : exprReg2.

length cadena retorna la longitud -en caracteres- de cadena.


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

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


substr cadena inicio cuntos retorna la subcadena tomada de cadena
iniciada en la posicin inicio y con longitud cuntos caracteres.
Ejemplos:
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
echo "RESP begins with 'y', 'Y', 's' o 'S'"

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


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 303


AIX/Unix 5 Basics for Operators Ramn Barrios Lascar iKnow 304
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
More... echo VAL igual Y

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


More...elif [ "$VAL" = "S" ]
More...then
More... echo VAL igual S
More...else
More... echo VAL igual a otra cosa
More...fi
VAL igual S

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 306


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 307


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 308


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 re-
ejecuta 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 309


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 310


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 el negativo de expr
!expr 0 cuando expr es diferente de cero, de lo contrario 1

~expr el complemento de expr


expr1 * expr2 producto de expr1 y expr2
expr1 / expr2 cociente de expr1 entre expr2
expr1 % expr2 residuo de dividir expr1 entre expr2
expr1 + expr2 suma de expr1 ms expr2
expr1 - expr2 diferencia de expr1 con expr2
expr1 << expr2 desplazamiento de expr2 bits a la izquierda de expr1
expr1 >> expr2 desplazamiento de expr2 bits a la derecha de expr1
expr1 <= expr2 1 si expr1 es menor o igual que expr2, de lo contrario 0

expr1 < expr2 1 si expr1 es menor que expr2, de lo contrario 0

expr1 > expr2 1 si expr1 es mayor que expr2, de lo contrario 0

expr1 >= expr2 1 si expr1 es mayor o igual que expr2, de lo contrario 0

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


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

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

expr1 & expr2 AND de los bits de expr1 con los bits de expr2
expr1 | expr2 OR de los bits de expr1 con los bits de expr2
expr1 ^ expr2 XOR de los bits de expr1 con los bits de expr2
expr1 && expr2 1 si tanto expr1 como expr2 son no-cero, de lo contrario 0

expr1 || expr2 1 si alguno de expr1 o expr2 es no-cero, de lo contrario 0

var = expr asigna el valor de expr a la variable var


var += expr agrega el valor de la expresin expr al valor actual de la variable
var

var -= expr resta el valor de la expresin al valor actual de la variable


var *= expr multiplica el valor de la variable por el valor de la expresin
var /= expr divide el valor de la variable entre el valor de la expresin
var %= expr asigna a la variable el valor de dividirla por el valor de la
expresin
var <<= expr desplaza el valor de la variable expr bits a la izquierda
var >>= expr desplaza el valor de la variable expr bits a la derecha
var &= expr asigna a la variable el resultado de var & expr

var |= expr asigna a la variable el resultado de var | expr

var ^= expr asigna a la variable el resultado de var ^ expr

Ejemplos:
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 312


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 313


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

También podría gustarte