Está en la página 1de 431

\

InformesTkcnicosCiemat
l 992
Mayo, 2002

Programas de Utilidad UNIX .

Luis Pirez

t
I

DISCLAIMER

Portions of this document may be illegible


in electronic image products. Images are
produced from the best available original
document.
IdomesTicnicosCiemat 992
Mayo, 2002

Programas de Utilidad UNIX

Luis Pirez

Departamento de Informhtica
Toda correspordenica en relacibn con este trabajo debe dirigirse al Servicio de
Informacibny Documentacibn, Centro de lnvestigaciones Energeticas, Medioambientalesy
Tecnolbgicas, Ciudad Universitaria, 28040-MADRID, ESPARA.

Las solicitudes de ejemplares deben dirigirse a este mismo Servicio.

Losdescriptoresse hanseleccionadodel Thesaurodel DOE paradescribir las materias


que contiene este informe con vistas a su recuperacibn. La catalogacibn se ha hecho
utilizando el documento DOE/TIC-4602 (Rev. 1) Descriptive Cataloguing On-Line, y la
clasificaci6nde acuerdo con et documento DOE/TIC.4584-R7 Subject Categoriesand Scope
publicados por el Office of Scientificand Technical Informationdel Departamentode Energia
de los Estdos Unidos.

Se autoriza la reproduccibn de 10s resomenes analiticos que aparecen en esta


publicacibn.

Depdsito Legal: M -14226-1995


-
ISSN: 1135 9420
NIPO: 402-02-001-X

EditorialCIEMAT
CLASIFICAC16N DOE Y DESCRIPTORES

s99
COMPUTERCODES;PROGRAMMING;MANUALS;COMPUTERPROGRAM
DOCUMETATION
Programas de Utilidad UNIX
Pkrez, L.
Centro de C&lculo.CIEMAT. Avda. Complutense, 22.28040 Madrid (Spain).
433 pp. 0 figs. 0 refs.

Resumen

Este manual va dirigido a *:suarios experimentados en el sistema operativo UNIX,de forma que,
con su lectura, obtengan UTImayor rendimiento en el us0 de cualquiera de 10s sistemas UNIX de
distintos fabricantes.

Incluye de manera exhaustiva, la mayoria de comandos UNIX, flujos de control para el us0 de
"scripts" creados por el usuario y la colecci6n de variables en 10sdistintos entornos. Tambikn se han
incluido otros productos, que ya suelen venir con cualquiera de la familia de sistemas operativos
UNIX,por ejemplo: el product0 para programar awk, el servidor de impresi6n LPRng, utilidades
como las de GNU,subsistema batch, etc.

Aunque la base inicial h e un especifico sistema mix, a1escribir el manual seha intentado que sea htil
para cualquiera de 10s sistemas UNLX del mercado: Tru64 unix, aix, iris,hpux, solaris y linux. En
este sentido se han incluido gran cantidad de ejemplos en muchos de 10sapartados.

El prop6sito de este manual, es por tanto el de ser un texto de referencia y consulta, para usuarios
a v m d o s y menos avanzados de cualquier sistema operativo UNIX.

Utilities in UNIX
Perez, L.
Centro de C&lculo.CIEMAT. Avda. Complutense, 22.28040 Madrid (Spain).
433 pp. 0 figs. 0 refs.

Abstract

This manual goes to the users with some or much experience in the unix operating system. In such
manner that they can get more efficiency using the unix of the most vendors.

Include the majority of UNIX commands, shell built-in h t c i o n s to create scripts, and a brief expli-
cation of the variables in several enviroments. In adition, other products are included, more and
more integrated in the most of the Unix operating systems. For example: the scanning and processing
language awk, the print server LPRng, GNU utilities, batch subsystem, etc.

The manual was initially based in an specificunix. But it ahd been written for use of the most unix that
exist: Tru64 unix, aix, iris, hpux. solark y linux. In this way, many examples in the chapter had been
included.

The purpose of this manual is to provide an UNIX reference for advanced users in any of the unix
operating systems family.
Pres entacwn
El manual “‘Programde Vtilidad UNIX” va dirigido a usuarios con experiencia en el sistema
operativo UNIX, con el fin de obtener el dximo rendimiento de 10s sistemas de la familia UMX
instalados en 10s ordenadores del Ciemat.

Esta publicaci6n intenta ser un manual, tanto de consulta como de auto-estudio, que recoge dife-
rentes temas, junto con ejemplos y shell-scripts relativos a las materias que en 61 se tratan.
TambiCn se hacen referencias a mas utilidades, indicando que contienen informaci6n adicional
relacionada con el tema que se est5 tratando, las cuales es conveniente consultar.

Las utilidades tratadas en este manual est411agrupadas en capitulos s@n las funciones que rea-
lizan (aunque puede haber alguna que no esb5 exactamente encuadrada). La mayoria de estas
utilidades e s t b disponibles en ambos sistemas UMX: System V de AT&T (crayb, crayc, jenS0)
y Berkeley (BSD)de la Universidad de California (inf, daxp, fusc, ibml, HP’s). M u c h de ellas
son verdaderas utilidades (es decir, programas), otras son comandos caractdsticos del shell.

En este manual, la representaci6n de las utilidades e s dividida


~ en 10s siguientes apartados:
Descripcidn Lista una descripci6n general de la utilidad
Formato Indica la sintaxis con la que la utilidad debe ser tecleada.
Opciones Describe las opciones, y argumentos de las apciones, de la utilidad
Argumentas Describe 10s argumentos usados por la utilidad al sa ejecutada.
Notas Notas adicionales relativas a la utilidad tratada y a otras utilidades fines.
Ejemplos Contieae ejemplos relacionados con la utilidad tratada.
3
Las @ones y argumentos de las utilidada pueden variar entre 10s sistemas de la familia UNIX
instalados en 10s distintos ardenadores. Este manual ha procurado recoger las opciones y argu-
mentos comunes entre 10s diferentes ordenadares y &tern UNIX. En cualquier caso, siempre
podemos consultar el manual-online de cada ordenador.

La siguiente es la representaci6n de una utilidad cuando es ejecutada en el shell:


$ utilidad [-opciones] argument0 ...
En&& adicwnal suministrada al c o d 0
Salida producida por cl comando

Observemos 10s diferentes t i p de letra: todo el conjunto va en negrilla, per0 la informaci6n


que usualmente debe ser suministrada por el usuario (argumentos y entrada adicional) va en it&
fica, y la salida generada por el comando va en otrofont y en otro nivel.

i
En el “ A P E ” se recoge una sinopsis de varias utilidades UNIX ordenadas alfawcamente.
En la secci6n “Listu A”, se relacionan las utilidades tratadas en este manual; y en la secci6n
“LiStaB”, se relacionan otras utilidades a tener en menta.

Me gustarfa mejorar y emiquaer este manual. Para ello, ruego a 10s usuarios que tengan a$l$n
comentario al respecto, me lo comuniquen con el fin de que esas mejoras queden reflejadas en
siguientes versiones.

Luis Pkrez Garcia


Octubre 2.001
Progrumus de Utilidad UNIX

INDICE

1 .UTILIDADES RELATIVAS AL ENTORNO


.. id ..............................................................................................................
Ut~luiad 1
Utilidad who .......................................................................................................... 3
Utilidad ps ............................................................................................................. 7
utilw kill ........................................................................................................... 13
utilidad sleep ........................................................................................................ 16
.. nice ..........................................................................................................
Utzluiad 17
U t.. ..........................................................................................................
..d W date
Utduhi type ..........................................................................................................
18
21
.. whereis ....................................................................................................
Utzluiad 22
utilw last ........................................................................................................... 23
..
Utlluiad iostat ................................................................................................ 24
U t i l W hash ................................................................................................. 25
Utilidad w .............................................................................................................. 26
uti1w cd ............................................................................................................. 27
U t..c l W mkdir ............................................................................................... 29
Utilidad &mod ..................................................................................................... 30
Utilidad umask ..................................................................................................... 34
uti1w tty ............................................................................................................ 36
U t..r l W stty ........................................................................................................... 37

2 .MANEJO DE FICHEROS
.. file ............................................................................................................
Utduiad 43
Utilidad Is .............................................................................................................. 44
.. cat ............................................................................................................
Ualuiad 47
.. more ........................................................................................................
UtLlW 49
Utilidad pg ............................................................................................................. 52
.. pr .............................................................................................................
Utrlrdad 55
Utilidad cp ............................................................................................................. 58
.. mv ............................................................................................................
Utchiad 60
.. rm ............................................................................................................
Utrluiad 62
Utilidad rmdir ....................................................................................................... 63
.. diff ...........................................................................................................
UtLluiad 64
.. sdiff .........................................................................................................
Utcluiad 69
U t i l W dim ......................................................................................................... 70
Utilidad comm ...................................................................................................... 72
Utilidad cmp .......................................................................................................... 73
Utilidad od ............................................................................................................. 74
Utilidad touch ....................................................................................................... 76
Utiliihdes basename y dirname ......................................................................... 78
Utilidades packy unpack .................................................................................... 80
Utilidades gzip y gunzip ...................................................................................... 82
Programas de Utilidad UNIX

3 .EL SISTEMA DE IMPRESION L P b g


Introduccibn .......................................................................................................... 87
Arquitectum.del software LPRng ....................................................................... 88
Inf'nnaci6n de configuracibn ............................................................................ 89
Infonnacibn printcap ........................................................................................... 89
Verifrcacibny aufor&cibn de pennisos ............................................................ 90
El server Ipd .......................................................................................................... 91
Programas clientes ............................................................................................... 94
UtiZidad Ipr ............................................................................................................ 94
Utilidatilp ......................................................................................................... 97
Utilidad lpq ........................................................................................................... 98
U t i M lpstat .................................................................................................. 100
utilidul lprm ........................................................................................................ 101
.. lpc ............................................................................................................
Uhhdad 102

4 .FILTROS EN LOS SHELL-SCRIPTS


Expresiones regulares .......................................................................................... 107
Concept0 defiuro ................................................................................................. 113
Utilidad tee ............................................................................................................ 113
Utilidad grep ......................................................................................................... 114
Camcteres especiules y expreswnes regulares .................................................. 118
Utilidad sort .......................................................................................................... 119
.. cut ............................................................................................................
U~~ 125
Utilidad uniq ......................................................................................................... 127
Utilidad paste ........................................................................................................ 129
Utilidadjoin .......................................................................................................... 131
U t i W head ......................................................................................................... 133
UtilidM tail ........................................................................................................... 134
Utilidad tr ...................................................................................................... 136

5 .EDITOR sed
Inftoduccibn .......................................................................................................... 139
Format0 ................................................................................................................. 139
Ejecucibn ............................................................................................................... 140
Dueccwnes ............................................................................................................ 141
Subcomandos ........................................................................................................ 142
Ejemphs ................................................................................................................ 145
M a r texfo ........................................................................................................ 145
Sustituir text0 ................................................................................................... 146
Agregar, cambiar e inserZar text0 .................................................................. 148
Bojrar texfo ...................................................................................................... 149
Formatear texfo ............................................................................................... 150
Okas operacwnes ............................................................................................ 152
Programas de Utilidad UNIX

6 .PROGRAMACION EN awk
Introduccibn .......................................................................................................... i53
Fonnato del comando awk .................................................................................. 155
Estructura de un programa awk ......................................................................... 156
Registros y campos ......................................................................................... 157
Ejecucibn de programas awk .............................................................................. 159
Plantillas ................................................................................................................ 160
Expresiones regulares como plantilk .......................................................... 160
Expresiones relacionales como plantilk ..................................................... 161
Expresiones booleanas como plantillus ........................................................ 163
Expreswnes como plantillas ........................................................................... 163
Rango de registros con plantilk ................................................................... 163
Planti& vacib .................................................................................................. 164
Plantilk especiales BEGIN y END ............................................................. 164
Acciones ................................................................................................................. 165
Introduccibn ..................................................................................................... 165
Sentencia next .................................................................................................. 165
Sentencia getline ............................................................................................. 166
Sentencia print ................................................................................................ 166
Sentencia printf ............................................................................................... 168
Redirigir sa& print y printf ...................................................................... 170
Expreswnes ...................................................................................................... 171
Operadores ....................................................................................................... 171
Expresiones constantes ................................................................................... 172
Variables ........................................................................................................... 173
Expresiones de asignacgn ............................................................................. 173
Variables integmdas ........................................................................................ 174
Expresiones aritm&as .................................................................................. 175
Expresiones de comparacibn .......................................................................... 176
Expresiones booleanas .................................................................................... 177
Expreswnes condkwnales ........................................................................ 177
Cadenas y nlimeros ......................................................................................... 178
Sentencias de con!roC de frujo ........................................................................ 179
Funciones .............................................................................................................. 182
Funcwnes integradas ...................................................................................... 182
Funcwnes defuridas por el usuario ............................................................... 184
Matrices ......................................................................................................... 186
Ejemplos ................................................................................................................ 188

.
7 UTILIDADES DE CALCULO
Utilidad expr ......................................................................................................... 193
Utitidad let ............................................................................................................. 196
Utilidad we ............................................................................................................ 199
.. dc .............................................................................................................
Uhlzdad 201
U t i l W bc ............................................................................................................. 203
Utilidad units ........................................................................................................ 206

INDICE 111
Programus de Utilidad UNIX

8 .PROCESO BATCH
Introducci6n .......................................................................................................... 207
Control dejobs ...................................................................................................... 207
Utilidad nohup ...................................................................................................... 209
Utilidud at .............................................................................................................. 210
Utilidbd atq ...................................................................................................... 214
Utihfad a t m .................................................................................................... 214
Utihfud ieave .................................................................................................. 215
Utilidad batch ....................................................................................................... 219
Utilidad crontab ................................................................................................... 220

9 .INFORMACION DE DISCOS
.. quota .......................................................................................................
Utduibd 223
U W u d du ............................................................................................................. 224
UtiliiW df ............................................................................................................. 226
.. find ..........................................................................................................
Utduhd 229

10 .FICHEROS DE CINTA
Utilkhi mt .................................................................................................... 237
U t i l W cpio .................................................................................................. 239
.. tar ....................................................................................................
Utduhd 243
Utilidad dd ..................................................................................................... 245
Utilidad dump ............................................................................................... 248
utilidild resfofe ............................................................................................. 250

11 .SISTEMA DE CONTROL DE VERSIONES (RCS)


Intriduc&n .......................................................................................................... 253
Funciones del RCS ............................................................................................... 254
Comandos del RCS ............................................................................................... 255
FumWrizane con el RCS ............................................................................. 256
Cornando ci ........................................................................................................... 259
Comando co .......................................................................................................... 263
Cornando rcs ................................................................................................. 266
Comando rlog ....................................................................................................... 269
Comando rcsdiif ................................................................................................... 271
Comando ident ..................................................................................................... 272
Comando rcSfreeze ............................................................................................... 272
Comando rcsclean ................................................................................................ 273
Comando rcsmerge .............................................................................................. 274
Seleccionar vemiones ........................................................................................... 275
Identifladores del RCS ........................................................................................ 277
Ramas de venwnes .............................................................................................. 279
Ejemplos ................................................................................................................ 280

IV INDICE
Programas de U t i l W UNIX

12 .COMUNICACION ENTRE SISTEMAS


Introducci6n .......................................................................................................... 297 I

U t i l W telnet ....................................................................................................... 298


Utilidad hostname ................................................................................................ 305
Utilidad uname ..................................................................................................... 306
Ucilidad finger ....................................................................................................... 307
Utilidad mdlx ....................................................................................................... 311
Utilidad ping ......................................................................................................... 329
Utilihd nslookup ................................................................................................. 332
Utilidad netstat ..................................................................................................... 336
Utilidad ftp .................................................................................................... 340
Utilidad rlogin ............................................................................................... 351
..
Uttluiad rsh .................................................................................................... 354
Utilidad rcp ................................................................................................... 357

13 .UTILIDAD make
Introducci6n .................................................................................................. 359
Format0 ......................................................................................................... 362
Fichero de descripci6n (makefde) ................................................................. 363
EspeciJicaci6n de la dependencia .................................................................. 364
Reglas de destino .......................................................................................... 366
Reglas de inferencia ...................................................................................... 367
Reglas de defect0 ........................................................................................... 370
.
Ejecuci6n del makefie Comandos .............................................................. 374
Variables de entorno ...................................................................................... 375
Defnici6n de macros ..................................................................................... 376
Librerihs ........................................................................................................ 380
Enaadas alternativas ..................................................................................... 380
Ejemplos ........................................................................................................ 381

14 .OTRAS UTILIDADES
U t i l W echo ......................................................................................................... 385
Utilidad xargs ................................................................................................ 388
Utilidad test ........................................................................................................... 390
Utilidad typeset ............................................................................................. 395
Utilidad exec .......................................................................................................... 398
Mecanismo history ........................................................................................ 400
Utiliiiad fc ................................................................................................. 402

APENDICE
Tablas de utilidades UNIX ............................................................................. 413
Tabla A ..................................................................................................... 413
Tabla E ..................................................................................................... 415

INDICE V
Programas de U t i l W UNIX

1 - UTILIDADES RELATIVAS AL ENTORNO

En este capftulo se incluyen varias de las utilidades relacionadas con el enforno,tanto del entor-
no del usuario como del entomo del sistema. Algunas de ellas como la utilidad id, s610 visuali-
zan informaci6n; otras, como la utilidad date, a d e h de visualizar la fecha y hora, nos permite
modificar el formato de salida, y a un usuario superuser cambiar la fecha y hora del sistema.

Utilidad id
Descripcih
El comando id visualiza la identidad del usuario en el sistema. La infmmaci6n visualizada con-
tiene 10s identifcadcres de usuario (uid) y de grupo @id) numtricos y nominales. Los identifi-
cadores reales de grupo y usuario esth especificados en el fichero del sistema /etc/passwd. Los
identificadares de grupo adicionales son llamados suplementarios y est411incluidos en el fichero
del sistema /efc/goup.

Formato
id [usuario]
id -G [-nl [uswriol
id -g [-nr][usuariol
id -u[-nr][uswriol

Opciones
-G Visualiza los IDS de grupo (real y suplementario) como un niimero decimal.

-g S610 visualiza el ID numtrico de grupo real como un nfimero decimal.


-n Esta apci6n especificada de la forma: id -G-n, visualiza tocia l a nombres de grupo. E%-
pecificada de la forma: id -g -n, visualiza el nombre de grupo real. Especificada de la
forma:id -u -n,~610visualiza el nombre de usuario.
-r Especificada de la forma: id -g -r, visualiza el ID de grupo real. Especificada de la forma:
id -u-r, visualiza el ID de usuario. Especificada de la forma: id -g -nr visualiza el nom-
bre de grupo real. Especificada de la forma: id -u-nr visualiza el nombre de usuario.

-U S610 visualiza el identificadar de usuario como un niimero decimal.

Argurnentos
usuario Es el usuario del que queremos obtener informaci6n. Si el usuario es omitido, la in-
formaci6n visualizada corresponde a la del usuario alojado en ese terminal. Puede
ocurrir que algunos usuarios con ciertos privilegios tengan identificadores num&icos y
nominales de grupo idt5nticos.

-
1 UTILIDADES RELATIVASALEIUTORh'O 1
Programas de U t i l W UNIX

Notas
Existen otras utilidades que tambien proporcionan informaci6n similar a la de la utilidad id La
utilidad groups visualiza el grupo o grupos al que pertenece un usuario. Los comandas whoami
(ver “Utilidud who“, Pagina 3) y logname visualizan el identifkador de login de un usuario
alojado. La utilidad newgrp permite cambia un grupo activo de un usuario si sus grupos adi-
cionaIes esth especificados en el fichero /etc/gruuup.

Ejemplos
Los comandos id de los siguientes ejemplos son emitidos por el usuario operator. El siguiente
ejemplo visualiza el ID de usuario y de grupo, num&ims y nominales, del usuario ma&:

$ idmartin
uid=322(martin)gid=lOS(dper)

El siguiente comando id, adem de visualizar 10s IDS num&icos y nominales de usuario y de
grupo d e s , visualiza otros IDS de grupo num&icos y nominales, ya que el usuario operator
pertenece a g r u p suplementarios:

$ id
uid=207(operator)gid=20(operator) groups=O(system), 7(terminaI), 19(adm)

El siguiente command-line visualiza todu6 10s IDSnum%icos de grupo (real y suplementarias)


del usuario operator.

$ id -G
200719

El siguiente command-line id visualiza todm 10s nombres de grupo (real y suplemntarim) del
usuario operator:

$ id -G-E
operatorsystemterminaladm

El siguiente ejemplo s610 visualiza el ID num&ico del usuario martin:

$ id -utnaTfiR
322

El siguiente ejemplo visualiza el identificador nominal de grupo real del usuario his:

$ id -g -nr luis
ceca

El siguiente script, llamado procs, visualizar6 los procesos activos pertenecientes al grupo o
grupos del usuario especificado como un argument0 del script. (Ver “Utili& ps”, @ g i 7):~

$ catprocs
#!/binlsh
# script: procs - Viualiza 10s procesos de UII ID de grupo.
#
idgrupo=’id G $1‘
ps -G Usidgrup”

2 -
1 UTIUDADES RELATIVAS AL ENTOW0
Progrurnas de Utilidad UNIX

Utilidud who
Descripcih
La utilidad who identifka 10s usuarios que en ese momento esth alojados en el sistema. Emiti-
da sin opciones o con la apci6n -s, visualiza por defecto la siguiente infamaci6n:

Nombre del usuario (name).


Nombre del terminal (line).
Fecha y hora de login (time).
Identiticador del host. (S610 en System V). (En BSD hay que especificar la opci6n -M).

Con opciones, la utilidad who visualiza otro tip0 de infamaci6n, como: fecha y hora de la IIlti-
ma carga del sistema, procesos expirados, nivel del siskma, actividad del terminal,etc.

Formato
who [-opciones] mhero]
whoam I I who ami
whoami

1 Opciones
-a Especifica todas las opciones.Procesa uno de 10s ficheros hist6ricos con todas las opcicb
nes: et fichero ufmppm defecto, o el fichero wtmp si &e es especifhb.

-b Indica la fecha y hora de la Wma carga del sistema.

-d Visualiza 10s procesos expirados que no han sido regenerados en la carga del sistema. En
el campo exit de la salida, aparecen 10s valaes de tenninacidn y salida de estos procesos.

-h S610 en la versi6n Berkeley. Visualiza un pequefio help de us0 de la utilidad who.

-H Visualiza 10s campos de salida con cabeceras.

-1 Lista 10s terminales que no esth en us0 (10s terminales que el sistema estil esperando que
alguien haga login). En el campo name de la salida,aparece la palabra LOGfN.

-rn S6lo visualiza la informaci6n de defecto relativa al usuario en curso.

-M S610 en Berkeley. Visualiza el ID del host, a d e w de la informaci6n de defecto.

-P Visualiza 10s procesos activos en curso que fueron generadm en la carga del sistema.

-q Visualiza 10s nombres y el nlfmero de usuarios alojados en el sistem en ese momento.

-r Indica el nivel del sistema operativo en curso del proceso de carga, junto con la fecha del
IIltimo cambio, el estado de tmminaci6n del proceso de carga (.?), el id del proceso de
carga (0) y el estado de salida del proceso de carga (8.

-S Es la opci6n de defecto. (Como cuando el comando who se emite sin argumentos).

-
1 U n L J D u E S R E U n V A S A L EhTOWO 3
Promamas de Utiliiiad UNIX

-t Indica el iiltimo cambio hecho a la fecha del sistema por un usuario superuser.

-T Incluye el campo slate visualizando el estado del terminal e indicando qui& puede escri-
bir en ese terminal. Un signo + indica que en el terminal puede escribir cualquier usuario,
un signo - indica que en el terminal s610 puede escribir un usuario supewer y el propie-
t h o del terminal, y un sign0 ? indica que en el terminal se ha producido un mor.

-u Esta apci6n ademh de visualizar la Mormaci6n de defecto, visualiza la actividad del


terminal (Activity en Berkeley e IDLE en System V), y el identifkador del proceso del Zo-
gin-shell de cada usuario en curso (PZD).

Argumentos
am 1Iam i Si al comando who le suministramos uno de estw dos argumentas, la utilidad who
s610 visualiza informaci6n relativa al usuario alojado en ese terminal. Estas especi-
ficaciones son equivalentes a la opci6n -m

whoami En si es un comando. Visualiza el login-name del usuario alojado en ese terminal.


ficirertt Es el nombre del fichero hist6rico que va a sex usado para obtener informaci6n del
accounting. Bta informaci6n estil registrada en el fichero wtmp. Cuando no se es-
pecifica a t e fichero, el comando who obtiene la infarmaci6n del fichero utmp.

Notas
Las utilidades w y finger proparcionan infmmaci6n parecida a la de la utilidad who. La utilidad
w (s610 en Berkeley) visualiza un sumario de la actividad del sistema y de 10s usuarias alojados
en ese momento (ver “UtiZidudw’*, pfigina 26). La utilidad finger visualiza informaci6n relacio-
nada con cada usuario de un sistema local o remoto (ver “Utilidad finger’*,p f i g i 307).
~

Fornuto general de la saW de la utilidad who


El farmato general de las entradas visualizadas en la salida del comando who es el siguiente:

name [state] line time host [activity] [PID] [comments] [exit]

Donde:
name Indica el nombre de login del usuario alojado.

state Es el estado del terminal. (Ver opci6n -T).

line Es el nombre del terminal del usuario alojado, localizado en el directorio/dev.

time Indica la fecha y hora en la que el usuario hizo login.

host Es el identificador del host al que estil conectado el usuario en curso.

activity Es el tiempo transcunido en horas y minutos desde la iiltima vez que el terminal
fue usado. Un punto (.) indica que el terminal fue usado en el iiltimo minuto. UM
entrada mcada con old indica que el terminal no ha sido usado en las filtimas 24
boras. Esta informaci6n es sltil para determinar si un usuario est6 trabajando en el
terminal. En System V la cabecera de este campo va expresada como IDLE.

PID Es el niImero identificador del proceso del login-shell del usuario alojado.

comments S610 en System V. Es el campo de comentario asociado con el terminal registrado


en el fichero/efcknitab.

exit Contiene los valores de terminaci6n y salida (exit-status)de 10s procesos expirados
que no heron regenerados en la carga del sistema.

Para obtener toda esta informaci6n, la utilidad who, nonnalmente examina el fichero hist6rico
uanp. Si en el argumentofidzero especifxamos un fichero, la utilidad who examina el fichero
especificado, a t e f i c k o tiene que ser el fichero hist6rico wclnrp, el cud contiene un historial de
10s logins y logouts de 10s usuarios, generalmente del &a en curso. El formato de salida puede
variar de un sistema a otro.

Ejemplos
El siguiente comando who visualiza la informaci6n de defect0 relativa a 10s usuarios alojadm
en un sistema UNJX con versi6n System V:
$ who
operator console Apr 15 0810
mcero ttypooj! Apr 15 0S:lO (fam5.imaff.csic.s)
jimenez ttypOO5 Apr 15 10:31 (130.206.11.176)
luis #ypOol Apr 15 1501 (ceca76.aemat.e)
ddan ttypoo4 Apr 15 3k15 (130.206.40.11)

El siguiente comando who visualiza informaci6n miis mmpleta que la obtenida par defecto y
con cabeceras, de los usuarim alojados en ese momento en un sistema con versi6n Berkeley:

$ who -uMH
Name Line Time Activity PID Hostname
operator d e Apr 1608:OO 1217 9995
luis #ypl Apr 1616:lO 25015 (inf2.aemat.s)
adminl w Apr 1609:31
Apr 1608:58
1O:U
1045
15134
14850
(130.206.10240)
(cieuxl.ciematcs)
consulta ttyq6

El siguiente comando who visualiza la informaci6n de defecto y el estado del terminal (campo
S7)de cada usuario alojado en ese momento:
$ who -TMH
Name ST Line Time Hostname
operator + console Apr 151750
operator - :O Apr 151750
admin3 + ttypl Apr 17OS:lt (dapcl3)
aplo70 + w Apr 17 1531 (inf2.aemat.s)
cronos3 - w Apr 14 1353 (dapcO5.ckmat.a)

El siguiente comando who visualiza la fecha y hora de la slltima carga del sistema y el nivel del
sistema qerativo en curso:

$ who -br
system boot Apr 15 1R41
run-level 3 Apr 1517:41 3 0 s

I - UTILIDADES R E U n V A S AL ENTORNO 5
Programas de Utilkiad UNIX

El siguiente comando visualiza 10s terminals en 10s que el sistema espera que al@n usuario
haga login (en un sistema con versi6n System V):

$ who 4H
NAME LINE TKME IDLE PID COMMENTS
LOGIN eonsole Apr 171323 244 3759
LOGIN ttypOOl Apr 171546 0:21 8601 (130.206.11.175)

El siguiente ejemplo visualiza un historial de Ios usuarios que han hecho login y logout en un
sistema BSD,desde las 0 horas del dfa en curso hasta el momento de emitir el comando who:

$ who -aHh~/&ftnP
Name ST Line Time Activity PIDlErit
dmacenl + ttypl Apr 1707:45 547 5347
inventar + ttypl Apr 170754 5839
operator + ttypS Apr 1707:B 923 5941
hpamlOO + ttyp7 Apr 170802 6304
ttppl Apr 1708:07 547 5086 id=ttypl kdarit=0
admin3 + ttypl Apr 1708:12 547 6291
eonsdta ttypa- Apr 170832 325 21329
ieepr -#ypc Apr 170838 1:44 5324
ttypa Apr 170839 325 27702 di- t e d exit=O
”. ”. ... ... .. ...
prtracto -t& Apr 1710:45 328 26412
ttBpc Apr 1710:46 1:44 25065 id- t e d ait=O
il2galO ftp27986 Apr 171048 ? 27986 iddtp279 temt=O ai#)
-27986 Apr 1710:48 ? 27986 iddtp279 t e d ariW
... ...
Apr 171500
...
334
o n

15527 id-3tyq4
”. te&
...
clit=o
ttycl4
operatar + -7 Apr 171518 20740
#yro Apr 171531 1:
s 17212 id+ t e d cri#)

El siguiente scripz, llamado saluda, utiliza el mmando whoami para devolver un saludo al
usuario que ejecuta el script sin requerir su nombre:

$ cats-
#!h/bin(sh
-
# script: saluda Devuelvt un saluda
echo “HOLA ’whoad”

El siguiente script, aloja, visualiza si el usuario especificado como argument0 del script, estA o
no alojado en ese nmmento, y si lo est& indica en que terminal o terminales estA alojado:

$ cat abja
#!/biih
-
# script: doja Viiualiza si UII usuario est4 o no dojado.
if who I grep $1 > Idevlnull
then
echo $1 Cstsi dojado en \
‘who I grep $1 I awk ‘{ print $2
C k
echo “$1NO est5 dojada”
fi

$ doja operator
operator st5 alojado en console :O -2

Para m h detalles sobre las utilidades grep, awk y echo, ver b‘CltiZidad grep”, p6gina 114,
“PROGRAMACIONENawk”, p6gina 153 y “Utili& echo”, pAgina 385, respectivamente.

6 I - UTILIDADES mwnvAsuENTORNO
Pragrainas de U t i l W UNIX

Utilidud ps
Descnpcih
La utilidad ps proporciona cierta informaci6nrelativa a 10s procesos activos en curso. Cuando la
utilidad ps es emitida con opciones, &tas controlan la informaci6n visualizada. Emitida sin ap-
ciones, en un System V, la utilidad ps visualiza la siguiente infarmaci6n de los procesos activos
que controla nuestro terminal:

El mimero identificador de cada proceso (PID).


El identificadcx del terminal que controla el proceso (rru).
El tiempo de ejecuci6n acumulativo de cada proceso (TIME).
El nombre de cada comando que se estA ejecutando (CMD).

En un sistema Berkeley, la salida generada por la utilidad ps emitida sin apciones, es ligera-
mente diferente, ask
Las cabecaas 27Yy CMDpueden variar a Tl'y COMMAND, mpectivamente.
No visualiza el proceso coarespondiente al comandops que genera la salida.
Hay una columna adicional con la cabecera S,que indica con l&as el estado del proceso.
(Esta columna es visualizada con todas las opciones,except0 con la opci6n 4).

Fomzato

Opciones
-A Visualiza infarmaci6n de todos los procesos activos. Equivalente a la opci6n -e,
-a Genera iafomaci6n de 10s procesos relacionados directamente con los terminales en
curso, visualizando la salida en columnas bajo las cabeceras: PID, 277' IS], TIME y
CMD. En System V, la opci6n -a tambien genera informaci6n de los procesos rela-
cionados directamentecon 10s terminales en curso, except0 de 10s proma del grupo
de procesos del comienzo de sesi6n (Los login-shells son procesos del grupo de
procesos del comienzo de sesi6n).

-d Visualiza informaci6n de todos 10s procesos activos en curso, except0 de los proce-
sos del grupo de procesos del comienzo de sesi6n, bajo las cabemas: PID, 27Y, [SI,
TIME y CMD.

-e Genera informaci6n de todos 10s procesos activos en curso, visualizando la salida en


columnas bajo las cabeceras PID, 27Y, IS], TIME y CMD.

-f Genera un informe completo de nuestros procesos activos, visuaWndose en colum-


nas bajo las cabeceras: UZD, PZD, PPID, C: S m & Z", TIME y CMD. Esta opci6n
hace que en la columna CMD aparezca el command-line completo.

-Gfistag Genera informaci6n de los procesos de 10s usuarios cuyos identificadcxes de grupo,
numtsricos o nominales, se correspondan con 10s especificah en fistag, visualih-
dose bajo las cabeceras: PID, m, [SI,TIME y CMD.

I - U l l L J D m E S R E U l l V A S A L EhTORh'O 7
Promamas de Utilidad UNIX

-I Visualiza un arnplio informe de nuestros procesos activos en curso, bajo las cabece-
ras: F, S, UID, PID, PPID, C,PRI, NI,ADDR, SZ WCHM, W,TIME y CMD. Si esta
opci6n es emitida en un sistema con versi6n Berkeley junto con la opci6n -f, la in-
formaci6n varfa ligeramente: en lugar de las cabeceras ADDR y SZ aparece la cabece-
ra RSS, y en lugar de la cabecaa 27” aparece la cabecera S T M E D .

-0 fonnat Esta ~ i 6 permite


n al usuario controlar la salida de la utilidad ps, produciendo un
ktado conforme al formato especificado enformuf. LAX especificadores del forma-
tc e s t h definidos en el apartado “Principules especificudores del f o r n o ” , @gha
10. Putxien especificarse mtiltiples apciones -0, en cuyo caso, la especificucibn del
formuto serfi i n t q r a d a como una concatenaci6n con espacios de todos los argu-
mentos de la opci6nfo&.

La especificucibn del formato consta de una lista de campos presentada como un ar-
gumento rlnico. Cada campo consta de un especificador (generalmente, su nombre es
igual que el de las cabeceras generadas par la utilidad ps, per0 en letras min&xulas),
seguido de un sign0 igual y del nombre de la nueva cabecera que va a SK visualiza-
da, de la forma: -0 user-USUARZO. La salida s610 contemplarfi las nuevas cabeceras
con sus mespondientes columnas y en el orden en el que heron especificadas en el
command-line ps.

S610 visualiza informaci6n relativa a los procesos cuyos identificadores nudicos


de proceso @ID) se correspondan con 10s especificados en la lista de PIDs: listup,
bajo las cabeceras:PID, m,
[SI,TIME y CMD.

Visualiza informaci6n relacionada con los procesos que controlan 10s terminales es-
pecificados en la lista de terminales: listrr. JAB ide~icadoresde 10s terminales
pueden ser espec~~cados de dos formas: pur el nombre del fichero del dispitivo
@or ejemplo, try02). y si el nombre del dispositivo comieflza con tfy o top, por 10s
caracteres que siguen al identificador (por ejemplo: 02,004, pOO4, etc.).

Genera infonnaci6n de todos Ios procesos de 10s usuarios cuyos identificadores nu-
mkicos de usuario o nombres de usuario, se correspondan con 10s especificados en
la lista:listau, visualizando la salida en columnas bajo las cabec~as:PID, 27°K [SI,
TIME y CMD. Si esta apci6n es acompaihda de la opci6n -f, en la cabecera UID apa-
recerfiel nombre de usuario, en vez del id num&ico de usuario.

En las opciones que se utilizan fistus como argumentos, el contenido de 1% listas puede ir espe-
cificado de dos formas: con identificadores separados por comas,o con identificadores encerra-
dos entre comillas y separados por comas o espacios.

Notas
Algunas marcas de ordenadores disponen de opciones especiales o de argumentos que generan
amplios informes de los procesos activos. Par ejemplo, la utilidad ps en algunos ordenadares
bajo sistema UNIX System V, incorporan la apci6n -w, la cual genera un amplio informe de
nuestros procesos activos a 20 columnas con sus mespondientes c a m a s .

En otros ordenadores bajo sistema UNM Berkeley, el comando ps dispone de argumentos o es-
pecificadores especiales que emitidos con la opci6n -0 proporcionan informes completos de 10s
procesos activoS en curso. Por ejemplo, el argument0 SCHED muestra un amplio informe de
nuestros procesos, en un sistema de dos prwesadores.

8 I - UlTLIDADES RELATXVAS AL EhTORiVO


Progcamas de Utilidad UNIX

Sa& del comando ps


Como hemos indicado,la salida producida par la utilidad ps es visualizada en columnas con sus
carrespondientescabeuxas, las cuales tienen el siguiente significado:
Cabecera Sianificado

ADDR Es la direcci6n de memoria (residente o de disco) del proceso.

C Es el us0 de CPU del proceso.

CMD Es el nombre del comandoen ejecuci6n con el cud es llamado al proceso.


F Son opciones asociadas con el proceso.
NI Es la prioridad de ejecucibn, establecida por la utilidad nice o por el sistema, su mi-
mer0 es usado para evaluar la prioridad (Ver “ U f i Z Mnice**,p6gina 17).
PID Es el mimero identifkador de cada promo. Si mnocemos este nfimero y soma el
usuario prqiietario del Echeroo el usuario roof,podemos eliminar el proceso.

PPID Es el mlmero identifkador del promo padre.

PRI Es la prioridad del proceso,cuanto maS bajo sea el mlmero, mayor sexit la prioridad.
S Especifica con letras el estado de cada proceso.Los estabs mlis comunes son:

I Inactivo.
s Dormido.
R Enejecuci6a
T Parado.
W Enespera.
2 Terminado.

En Berkeley, las Zefras de estado pueden ir seguidas de otro campo con 10s siguien-
tes Caracmes:

N Indica que la prioridad del promso ha sido rebucida.


+ Indica que es un proceso del grupo de procesos del comienzo de sesi6n.
< Indica que la prioridad del proceso ha sido reducida artificialmente.

STlME Es la h a de comienzo del proceso.

sz T-0 en bloques de la imagen de la memoria del proceso.

TIME Tiempo de ejecuci6n acumulativo del proceso.

TTY Es el identifkador del terminal que controla el proceso.

UID Es el identificador num&ico del usuario propietario del proceso. Si es usada la ap


ci6n -f, ser6 visualizado el nombre del usuario, en vez del id num&ico del usuario.

WC” Es el suceso por el cual el proceso esta en estado de espera o dormido. Si este campo
est6 en blanco, el proceso puede estar en ejecuci6n

I - UllLJDADES RELAllVASAL EhTORNO 9


Programas de Utilidud UNIX

Principales especificadores del formato


La utilidad ps dispone de varia especijicadores del formato para que el usuario pueda controlar
la salida generada por un command-tine ps. Generalmente, la mayorfa de 10s especiflcadmes del
formato tienen los mismos nombres que las cabeceras que genera la utilidad ps por deftxto, per0
en letras mintlsculas.

Los siguientes son los especificadores del fonnato m& u s a h :

Especificador Cabecera Simificado

culrlr ADDR Direcci6n de la memoria residente o de disco.

C C Us0 de procesador.

cmd I cmm CMD Nombre del comando en ejecuci6n.

fW@ F Opciones asociadas con el proceso.

grow GROUP Nombre de grupo asociado con el id de grupo de1 proceso.

ni I nice NI Valor nice; usadopara coqutar la pioridad.

Pa PID IdentUicador numtrico del proceso.

PPM PPID N ~ m ideotificadoc


m del proceso padre.

Pn' PRI Prioridad del proceso.

rssize RSS T W Oen K's de la memoria real del proceso (Berkeley).

s lstate S Estado del proceso.

Stime STIME Hora de comienzo del proceso.

sz sz T W Oen bloques de la memoria del proceso.

time TIME Tiempo de ejecuci6n acumulativo del proceso.

ttu m Terminal que controla el proceso.

Uid UID N~meroidentitkcador del usuario propietario del proceso.

user USER Nombre identificador del usuario propietario del proceso.

vsz VSZ Tamafio en Kbytes de la memoria del proceso.

WCha7.i W
C
" Es el evento por el cud el proceso estA en espera o darmido.

El siguiente, es un ejemplo de especificaci6n del formato, el cud anuIa las cdbeceras: UZD, ITY,
STIME y CMD, poniendo en su lugar: USUARIO, TERMINAL, COMIENZO y C O U D O :

ps -0 'tCser==SUARIO tty=TERMINAL stime=COMIENZO c ~ ~ = C O M ~ " ~

10 -
1 VTILlDADES REWTIVAshL ENTORNO
i

Ejemplos
El siguiente comando ps, emitido sin opciones en un System V, genera la informaci6n & de-
fecto relativa a nuestros procesos. El primer proceso (sh),es el login-shell, y el segundo @s) es
el comando ps que genera esta salida:

$ PS
PID T N TIME CMD
13681 pOOS 0:OS sh
13691 pOO5 0 0 5 ps

El siguiente comando es como el anterior, per0 emitido en un sistema Berkeley. Observemos


que es visualizada una columna adicional, la del estado del proceso (S),y que no es visualizado
el proceso del comando ps. (Un usuario alojado en un sistema Berkeley puede visualizar el m
mando ps que genera la salida, emitiendo el command-fine:ps -Uuserid):

$ PS
PID TrY s TIME CMD
26101 ttpy2 I + 0:00.12 -ksh(kSh)

El siguiente comando visualiza todos los procesos activoS en curso que p e r t e m al usuario o
usuarios de un System V que tengan el rrfmero 1213 como identificador de grupo:

$ PS -G1213
P I D l T Y TIMECMD
75161 pOO5 0 6 5 csh
76623 pO23 0 0 2 csh
77341 pO25 0 0 4 sh
77502 pO25 E49 xmppview
84174 pOO5 1:15 cmacs

El siguiente command-fineps genera un informe completo de todos 10s procesos activos en cur-
so & la usuario marifo:

$ ps -fumarilo
UXD PID PPID C STIME ITY TIME CMD
marilo 2362 11517 0.0 18:OO:44 ?? 0:00.21 kshbinldiario
marilo 11517 18798 0.0 18:OO:OO ?? 0:00.04 ksh/usr/users/maril&kddmrio
mado 18798 1049 0.0 18:OO:Ol ?? 0:OO.Ol sh-c/usr/users/maddbinldiario
marilo 21807 2362 0.0 18:01:53 ?? 000.04 padqlOOd
marilo 12307 10512 0.0 14:58:18 ttyp4 000.54 -ksh(ksh)

El siguiente comando genera un amplio informe de los procesos activos en curso, en un sistema
UNIX con versi6n System V,del usuario emifio:

$ ps -1u emifio
F S UID PID PPID C PRI NI ADDR SZ WCHAN ITY TIME CMD
1 S 2187 31335 31334 0 30 28 341370 128 402414 ? 0:Ol sh
1 S 2187 33087 33086 0 28 20 330454 152 3170760 pOO6 0:Ol csh
101 R 2187 33167 33163 0 446 33 424120 1064 epu-05 1 0:30 cfm
1 S 2187 31369 31346 0 39 28 522350 3700 663077 1 1323 exe.SOf

El siguiente comando ps genera informaci6n de los procesos que controla el terminal console:

$ ps -t consoh?
PID ITY TIME COMMAND
1244 d e 0 0 getty
I

-
1 UTiLlDADES REUTlVASAL Eh'TORNO 11
Programas de Utilidad UNIX

Si queremos visualizar informaci6n de todos 10s procesos activos en curso, except0 de 10s p
cesos de 10s grupos de procesos del comienzo de Ias sesiones, bajo Ias cabec~as:USER,PID y
CMD, emitir el siguiente command-line:

$ ps -0 user,pid$md -d
USER PID CMD
root 155 /usr/sbinlogated
root 196 /usr/binlportxxtap
." ... ."
Si queremos visualizar (bajo la cabecera CMD)el nombre del shell con el que estamos trabajan-
do, emitir el siguiente command-line:

$ ps -p$$
...
El siguiente comando visualiza un amplio informe de nuestros procesos activos en curso, en un
sistema con v ~ s i 6 nBerkeley:

$ ps -flumiuserid
S UID PID PPIDZCPU PRIM Rss WCHAN STARTED TIME COMMAND
I N 213 470 24734 0.0 42 2 364K wait 2000.00 000.05 ksh /usr/,lexportBD
SN 213 23085 470 7.5 46 2 648K socket 2000:00 4:27.81 cxppararfide=export.p
N 213 24734 1061 0.0 46 2 160K wait 20:00:00 0:00.02 sh e /usr/.../esportBD
S 213 11636 11690 0.0 44 0 264K wait 17:43:58 0 : 0 0 S -ksh;hh)

S-queremos visualizar infarmaci6n de todos 10s procesos activos en curso del sistema, emith el
siguientecomando ps:

$pse
...
El siguiente script, llamado pmcesos, genera informaci6n de todos los peocesos activos del
usuario especificado como argument0 del script, visualizAndose bajo las cabec~as:USUARIO,
PROCID, TEFMINAL T W O ,COMIENZO y COMANDO:

$ catprocesos
#!/binlsh
-
# script: proasos Viiualiza 10s proasos del usuario especirrcPda
if ps -feu $1 > ldevlnull
then
ps -0 "user=USUARIOpid=PROCID tQ=TERMINAL \
SZSTAMAROs~~I~I~=COMIENU) C~~=COMANDO" -U $1
else
echo UEI usuario $1 no tiene procesos activos."
ti

$ procesos operator
USUARIO P R O 0 TERMINAL T&O COMIENU) COMANDO
operator 2901 n 1.594M Apr 28 /usrlbinldtsession
Operator 2946 ?? 1.727M Apr 28 dtwm
operator 2947 ?? 152K Apr 28 sh c /usr/biill/&console
operaw 27867 ?? 472K 14:58:14 /usr/dthin/dtscrren-mode qix
operator 10048 ttyp3 272K 07:S?:29 ksh / o r a c l e 7 / I ~ i d s i c o 7 0
operator 12066 ttyp3 248K 07:57:19 -ksh(ksh)
operator 17795 ttyp3 5.531M 07:57:36 runmenu50 MGV
operator 35429 ttyps 176K 15:10:44 shprocesosoperntor
operator 34928 ttyps 272K 15:01:02 -ksh (ksh)

12 -
1 UTIUlhWES REUTIVAS AL EhTOWO
Progrumas de Utilidad UNIX

Utilidad kill
Descripcih
La utilidad kill permite eliminar uno o maS procesos en ejecucidn envkhdoles indicadores o se-
fides. Por defecto, el indicador enviado a cada proceso es el indicador de software,el ntimero
25 (indicador SIGTERM). El proceso que se va a eliminar debe pertenecer al mismo usuario que
emite el comando kill a no ser que sea un usuario superuser. La utilidad kill envia un mensaje
cuando elimina un proceso.

Formato
kill -I [ e ~ - s ~ ]
kill -s nombre-del-indieadorPID ...
kill [-nombre-del-idicador]PID ...
kill [-n~naero-del-hdkador] PID ...
Opciones
-I Si en el argument0 exit-status especificamos un exit-status (un valor num&ico) o el pa-
r-0 especial del shell: $?, el comando kill visualiza el mmbre del indicador de elimi-
naci6n. Si no se hace ninguna especificaci6n, la opci6n -1 visualiza los nombres simb6li-
cos de los indicadmes disponibles en el sistema en curso.

-s nombre-del-indicador
Envfa el indicador especificado en nombre-del-indicadot al prowso. Los nombres sim-
b6licos de 10s indicadares pueden especificarse sin el prefijo SIC. El nombre simb6lico 0
(cero),.el cual rpesenta el valor cero, tambi6n es reconocido.

-nombre-del-indicador I - n h e r o - d e l - e a d o r
Especifica el nombre o el mlmero del indicador que va a ser enviado al proceso. Puede
especificarse cualquiera de los dos: un nombre de indicador sin el prefijo SIC (como
KILL),o un lafmero de indicador (como9).

Argumentos
PID Es el ntimero o ntimeros del identificador de cada proceso (PID) que va a ser elimi-
nado. LQSsiguientes ntimeros de identificaci6n del proceso son PIDs especiales y
pueden sa especificados produciendo las siguientes acciones:

0 El indicador es enviado a los procesos que tengan un ID de grupo del proce-


so igual al ID de grupo del proceso del emisor, excepto a los que tengan PIDs
Oyl.

-2 Si el ID de usuario del emisor no es 0 (root), el indicador es enviado a todos


los procesos que tengan un ID de grupo del proceso igual al ID de usuario del
emisor, excepto a 10s que tengan PIDs 0 y I .

Si el identificador de usuario del emisor es 0 (roof),el indicador es enviado a


todos los procesos, excluyendo los ntimeros de proceso 0 y I.

-
1 UnUDADES R E U T W A S A L EhTORh'O 13
Promamas de Utilidad UNIX

-pid El indicador es enviado a todos 10s procesos cuyo nfimero de grupo del pro-
ceso sea igual al valor absoluto del PID especificado en gid. Advi&ese que
si se especifica un PID negativo, tambien debemos especificar el indicador
que va a sex enviado.

exit-status Un nfimero entm especificando un nfimero de indicador o de exit-stuhcs de un


proceso eliminado par un identificador.

Notas
El shell C y el shell Korn disponen de 10s comandos onintr y trap, respectivamente, para con-
trolar ciei-tos indicadores en 10s shell-scripts. Los indicudores o seiiales es& definidos en el
fichero del sistema:hsr/include/signdh.

El shell visualiza el nfmero de PID de un proceso background cuando lanzamos el proceso con
el comando &. Tambien podemos utilizar la utilidad ps para determinar 10s nfmeros de PID de
cualquier proceso (ver “Utilidzd ps”, Mgina 7).

Si el indicador de eliminaci6n de software (SZGZ’ERM) no elimina el proceso, eliminarlocon un


indicadorRZU (indicador 9).Un proceso puede ignorar un indicador, except0 el indicador 9. Si
el PID 0, es especificadocon el indicador KZLL, todos 10s procesos de nuestro login en curso se-
r h eliminados, y adem& s e r e m desalojados del sistema. (Si estamos alojados como un usua-
rio supewer, no utilizar esk comando).

Si estamos utilizando el shell C o el shell Korn en un proceso background y queremos elimi-


narlo, en el argumnto PZD del comando kill podemos especificar uno de 10s dos identifkado-
res: el identifkador deljob precedido del Caracter 96,o el identifbdor del proceso (PID).

Ejemplos
E1 siguiente comando kill elimina el proceso con PID 1095,envihdole el indicador de defecto.
Advi&se, que el proceso 1095 puede no ser realmente eliminado, ya que puede ignorar el in-
dicador SIGTERM:

$ kill Io95

El siguiente ejemplo es semejante al anterior, per0 explicitamente envfa al proceso el nombre


del indicador:

$ kill -s TERM 1095

El siguiente command-line elimina los procesos I7285 y 15692 que ignoran el indicador de de-
fecto, envitindoles el indicador SZGKZU. Usualmente el indicador SZGKILL no es ignorado:

$ kill -KILL 17285 15692

El siguiente comando elimina todos nuestros procesos buckground submitidos con el car6cter
&, envitindoles el indicador SZGTERM a todos los miembros del grup de procesos del shell.
Aunque el indicador es enviado al shell, no tiene efecto porque el shell ignora el indicador 15:

$ kill 0

14 -
1 UTXLJDADES RELATIVAS At EhTOtUVO
Programas de Utilidad UNIX

El siguiente comando elimina todos nuestros procesos y nos desaloja del sistema, enviando el
indicador SZGKZLL a todos los miembros del grupo de procesos del shell. Ya que el shell no ig-
nora el indicador SZGKZLL, tambih elimina el login-shell y nos desaloja del sistema. Si estamos
utilizando varias sesiones, ate comando cierra la sesi6n en curso:

El siguiente comando envfa el indicador SZGQUZT (indicador n1hero 3) -pr&ciendo un vacia-


do de memoria- a un proceso background, que se est6 ejecutando en nuestro shell en curso:

$ kill -s QUIT %2

El siguiente comando visualiza las sefiuZes o indicudores disponibles en nuestro sistema:

$ kill -I

La salida de este comando puede variar de un sistema a otro. Los siguientes son los indicadores
maS comunes:
Niimero Nombre

Z HUP Generado cuando se desconecta el terminal.


2 ZNT Generado par una intmpci6n de taminal (usualmente con c c f r l - o ) .
3 QUR Terminaci6n de un proceso con dump.
4 ILL Instrucci6n incarrecta (usualmente un mor de tecleo).
5 TRAP Error en depuraci6n de programas.
8 FPE Producido pop un mm aritm&co.
9 KZLL Elimina procesos de forma satisfactoria.
I2 SYS Argument0 m6nm en la llama& al sistema.
13 PZPE Error de d t u r a en unpipe.
I4 ALARM Indicador de alarma del reloj.
15 TERM Sefialde eliminaci6n de software.
USRZ Definido para el usuario como signal I.
usR2 Definido para el usuario como s i g d 2.
STOP El indicador no puede ser ignorado.
ABRT Proceso abortado.
En el siguiente script, prukill, el comando kill determina con que indicador es eliminado el co-
mando sleep. (Si el mmando sleep no es eliminado, sera visualizado el parhetro EXIT). Su-
pongamos que submitimos el scripr a background o a burch, y el PID del proceso del comando
sleep es el 14743, y lo eliminamos con el indicador 9, entonces obtendremos la salida indicada:

ti catpmkill
#!/binlksh
-
# scripf: prukill Muestra el indicador de borrada
sleep 120
kill -I
$?
date
$ prukill &
I
$ kill -9 I4743
prukiIl: 14743 Killed
KtLL
Wed May 5 1517:OOGMT+MO 1999
[l]+ Done prukill &

I - UnLJDADES REUTIVASAL ENTORNO IS


Programas de U t i l W UNIX

Utilidad sleep
La utilidad sleep suspende la ejecuci6n de un proceso, al menos durante el tiempo especificado.

Formato

Argumentos
tiempo ES el tiempo indicado en segundos, que va a ser suspendida la ejecuci6n del prooeso.

Ejemplos
La utilidad sleep pede ser usada en un commund-line para ejecutar un comando al cab0 de
cierto tiempo. El siguiente command-line, a 10s 20 minutos de h a k l o lanzado a background,
nos recuada que tenemos que haca una llamada telef6nica:

$ (sleep 1200; echo “Recuerda,tienes que Uamar por telkfono.”) &

El siguiente script, llamado ricorda, M)S puede sa maS tftil que el ejemplo anterior, ya que con
intemalos de 4 mimtos y durante 20 minutos, nos visualiza UII mensaje recordandonos que te-
nemos que haca una Uamada telef6nica:

$ cat &or&
#Wish
-
# script: riuxda Nos rrcuerda que knemos que llamar por tel6fono.
for i in T i n e s que lkmar por tel6fono.”
do
sleep 240; echo Si
sleep 240; echo $i
sleep 240; echo $i
sleep 240; echo $i
sleep 240; echo $i
done

El siguiente script, llamado espera, verifica cada 10 segundos si el usuario operator est6 aloja-
do en el sistema, visuMndonos mensajes de espera hasta que este usuario hace login, entonces
el script termina y se visualiza el prompt del sistema:

$ cat espera
#!/bin&
-
# script: espera Verifica si el usuario operator est5 dojado.
while true
do
echo “Esperando login operator.”
if who I grep operator > Idevlnull
then
break
else
sleep 10
fi
done

I6 I - UTILJDmES REUTIVASAL ENTORNO


Programas de U t i l W UNIX

Utilidad nice
Descripcih
La utilidad nice permite a cualquier usuario bajar la prioridad al comando que va a ser ejecuta-
do. Usualmente, aunque puede variar de un sistema a olro, el valor de la prioridad nice est4 en-
tre 1 y 19, siendo 1 la prioridad mils alta y 19 la maS baja. El valor de defecto de la prioridad
nice es 10. S610 un usuario superuser puede subir la pioridad a un comando, para ello debe es-
pecificar un n6mero negativo, por ejemplo -IO.

Formato
nice [ - n p r i o m utilidad [argumentos I ...

Opciones
-nprioridad Especifica la nueva prioridad que va a recibir la utilidad que va a ser ejecutada. El
argumentoprioridad es un nclmero enter0 positivo o negativo que modificaril la
prioridad del comando o script especificado en el argument0 u t i W .

Un valor positivo disminuye la prioridad Un valor negativo aumenta la prioridad,


la cud s610 puede sa aumentada por un usuario autorizado.

-priuM 3 equivalente a la @6n - n p r i o M .


(Opt5611en desuso). E

Argurnentos
UtiMiZd E p i f i c a el nombre del comando o script que va a ser ejecutado y al que se le
va a cambiar la prioridad nice.

argumntu Es el argument0o argurnentos que utilice el cornando especificado en u&fad.

Ejemplos
El siguiente command-line asigna al comando cc una prioridad inferior a la de defecto, para
compilar el programa cak.c en modo buckground:

$ nice -n 15 cc c c&.c &


t11 2844

El siguiente ejemplo, asigna una prioridad alta a l comando wall. Por supuesto, si no tenemos
privilegios de superuser, el comando wall sera ejecutado con la prioridad de defecto:

# nice -n -10 wall e<FIN


Dentro de 2 min&s, y dura& 10 minuros, se p a n d
el sisthna por motivos urgentes rekztivos al software.
FIN

La redirecci6n de entrada de la forma <<, es la f’unci6n here document.

-
1 UTILIDADES REUTIVASAL ENTORNO 17
Programas de Utilidad UNIX

Utilidad date
Descripcihn
La utilidad date visualiza la fecha y la hora en curso. Un usuario superuser puede modificar la
fecha y hora del sistema.

Formato
date [-u] [+fonnato]
date [-u][nmdate]

Opciones
-u Visualiza o establece la fecha y hora universal (GMT - Greenwich Mean Time). El sis-
tema opera con la fecha GMT,y la utilidad date la mnvierte a la fecha y hora local.

Argumentos
newdate Establece la fecha y hora del sistema a la nueva fecha y hora especificadasen el ar-
gumento newdate. s610 un usuario superuser puede modificar la fecha y hora del
sistema. El argumentonewdate tiene el siguiente formato:

. Donde:
M M Es el ntimero del mes del aiio, de 01 a 12.
dd Es el ntimero del dfa del mes, de 01 a 31.
hh Es la hora del dfa en reloj de 24 horas, de 00 a 24.
mm Son 10s minutos, de 00 a 59.
ss Son los segundos, de 00 a 60.
yy Son los dos tiltimos dfgitos del aiio, de 00 a 99.
Los parhetros MM,dd, yy y ss pueden ser omitidos, en cuyo cas0 s e r h usados los
valores de estos parhetros en curso. La utilidad date usa la variable de entorno TZ
para determinar la hora carrecta de la zona.

El siguiente comando date emitido por un usuario superuser, establece la fecha a 12


de mayo del aiio en curso, y la hora a las 15:25 (3:25 p.m):

# date 051215:25
Wed May 12 15:25:45 MET 2001

+fonnato Controla el formato de salida de la utilidad date. A mntinuaci6n del signo mAs (+),
en el argumentoformato, va la cudena del formufo, compuesta de un text0 opcional
y de 10s descriptores de campo. Cada descriptor de campo debe ir precedido de un
signo tanto por ciento (96).El sistema reemplazarg cada descriptor de campo por su
valor. Si la cudena del funnato contiene espacios u otros caractem con significado
especial para el shell, la cudena debe ir encerrada entre caractem ap6strofos.

I8 I - UTILJDADES REWTIVASAL EhTORIVO


Progfamas de U t i l W UNIX

Descriptores de campo
La siguiente es UM lista de descriprores de campo y de los valores que representan:

a Nombre abreviado del dfa de la semana,de Sun a Sat. (Dedomingo a dbado).


A Nombre completo del dfa de la semana, de Sunday a Saturday.
b Nombre abreviado del mes, de Jan a Dec. (De enero a diciembre).
B Nombre completodel m a , de January a December.
c Fecha y hora en formato local.
C Los dos primeros carames del afio, de 00 a 99 (el afio dividido por 100 sin decimales).
d Ndmero del dfa del mes,de 01 a 31.
D Fecha en el formato d c l d y y (rneddidaflo).
e Ndmero del &a del m a , de 1 a 3 1.
h Nombre abreviado del mes, de Jan a Dec.
H Ndmero de la hara en el reloj de 24 horas, de 00 a 23.
I Ndmero de la hora en el rdoj de 12 horas, de 01 a 12.
i Dfa del afb, de 001 a 366.
m NCImero del mes del afio, de 01 a 12.
M Ndmero de minutos, de 00 a 59.
n Inserta un c a r k t . de
~ ~meva linea.
P Contiene el indicador ante-meridiem opost-meridiem (por defect0 ,-,M o PM).
r Hora en formato de 12 horas, con la wtaci6n AM/PM (hh:mm:ss AM o hh:mm:ss PM).
S Ndmero de segundos, de 00 a 60.
t Insertauncar~tablllador.
T Hora del dia en el formato hh:mm:ss.
U Ndmero del d€ade la semana,de 1 a 7 (lunes = 1).
U Ndmero de la semana del afb, de 00 a 53 (domingo primer dfa de la semana).
V NCImero de la semana del afio, de 01 a 53 (lunes primer dfa de la semana).
W Ndmero del dia de la semana,de 0 a 6 (domingo = 0).
X Formato de la fecha local.
X Formato de la hora local.
Y Los dos dltimos dfgitos del a80 en curso, de 00 a 99.
Y Aflo en curso con 4 digitos.
z Hora de la zona, si esa &erminada.

Tambib disponemos de 10s caracteres modificadores E y 0, para modificar algunos descripro-


res de campo e indicar un formato diferente al especificado en la variable LC_TIME. Estos son:

Ec Representaci6n alternativa de la fecha y hora locales.


EC Representaci6n alternativa de los dos primeros carames del afio.
Ex Especifica la representaci6n alternativa de la fecha local.
EX Especifica la qresentaci6n almnativa de la hora local.
Ey Rqresentaci6n alternativa del aRo, los dos dltimos dlgitos.
EY Representaci6n altemativa del afio, cuatro digitos.
Od Dfa num&ico de la semana utilizando 10s sfmbolos alternatives.
Oe Dia del mes utilizando 10ssimbolos numtkicos alternativos.
OH Ndmero altemativo de la hora en un reloj de 24 horas.
01 NCImero altemativo de la hora en un reloj de 12 horas.
Om Especifica el mes del aRo,usando los sfmbolos numQicos altemativos.
OM Especifka 10s minutos, usando los sfmbolos num&icos a l t e r ~ t i ~ ~ ~ .
OS Especifica los segundos, usando10s slmbolos num&icos altmnativos.
Ou Representaci6n alternativa del dfa de la semana,de 1 a 7 (lunes = 1).
OV Representaci6n numQica altemativa de la semana del ab, de 01 a 53.

-
1 UTIUDADES REUTIVASAL Eh'TOXNO 19
Programas de Utilidad UNIX

Ejemplos
El siguiente comando visualiza la fecha y hora en curso en diferentes ordenadores:

$ date
Wed May It 1601:22 GMT+02001999
Wed M a y 12 1601:22 MET 1999
mie m a y 12 16:01:22 1999

El siguiente command-linedate visualiza la fecha en curso en un formato de us0 general:

$ date %%h 96n, 19%~'


May 12,1999

El siguiente comando visualiza, en dos lineas, la fecha y hora en 10s formatos Fecha: dd/mm/yy
y Hora: hh:mm:ss:

$ date '+Fecha: 96mf%d%y%n€?ora: %H:%M:%S'


Fecha. 05/12/99
Hora: 17:1231

El siguiente ejemplo asocia descriptores de cmpo del comando date con opciones del script dt,
paravisualizardiferentesti~dedatossegtInlaapci6nuapcionesespecificadas:

$ catdt
# W i h
-
# script: dt V i i b k C C C y~ h m CII ~ C formates.
S
for opcion
do
case $opcion in
-9 date+'FeCha. %d%d%f;;
-h) date+'Hm: %X ;;
d) date +'Hay es %A %dde %B de %P ;;
-H)date +'Son Ias %Ihoms %M minutus %S segundos %p' ;;
*) echo "Opciones permitidas: -f -b d y -€I" ;;
CSaC
done

$ dt -f
Fecha: 13/05/99
$ dt -d -H
Hoy cs Thursday 13 de May de 1999
Son las 05 horas 46 miautos 32 segundas PM

En los scripts se usa con frecuencia la utilidad date con diferentes formatos y usos. El siguiente
script almacena la fecha en una variable para usarla como argument0 del comando grep, locali-
zando la fecha (&a y mes) de cumpleaAos de las personas que contiene un fichero:

$ cat cumpk
#Wish
-
# script: cumple LocoIiza la fecha de nacimiento.
ddmm='date+%d%m'
grep $ddmm fikcumple > ldevlnull
if[$?=O]
then
echo Hoy cumple aiios: .grep $ddmm filexumple I awk '{ print $2, $3 }"
else
exit 1
fi

20 I -UTILJDADESRELhllVAS AL ENTORh'O
Programas de Utilidad UNIX

Utilidad type
Descripcih
La utilidad type indica aSmo podria ser interpretado el argumento suministrado a dicha utilidad,
si fuse un nombre de comando. La infarmaci6nproporcionada por la utilidad type identifica el
nombre especificado, como: un comando del shell, un mmando built-in del shell, unafwtcidn,
un alias, un script, una palabra reswada o un nombre sin aplicar. Tambib puede proporcionar
el path-name del argumento suministrado al cornrnund-line type.

Formato
type nombre ...
Argumentos
nombre Es el nombre o nombres que van a ser interpretados por la utilidad type.

Notas
Otras utjlidades tambien facilitan infarinaci6n parecida a la de la utilidad type. h i , la utilidad
whereis localiza prognunas fuentes y ejecutables (ver “ U t i M whereis”, pagina 22). La utili-
dad which visualiza el path del comando o script especificado. La utilidad whatis visualiza una
sinapis del comando especificado (lista la secci6n NAME del man). La utilidad hash visualiza
las utilidades invocadas durante la sesi6n (ver “Utilidad hash”, pilgina 25). La utjlidad find l e
caliza ficheros conforme a unos criterios de bfisqueda dadm (ver “Utifidad find”, pagina 229).

Ejemplos
La utilidad type es lftil para saber si un nombre es utilizado por el sistema. Si la respuesta &e-
nida es como la indicada en el siguiente ejemplo, es que ese nombre no es utilizado por el sis-
tema y puede ser utilizadotranquilamentepara nombres de scripts, funciones, e&.:

$ type cistar
ktar not found

Veamos varias respuestas dadas pur la utilidad type a distintm &res:

$ type who kill


who is a tracked alias for JusrJbiiwho
kill is a shell builtin

$ type nice lis


nice is JusrJbidnice
s is a function
l
i

$ type rf procesos then


If is an exported alias for Is -1tF I pg
procesos is JusrJusersloperJopemtorJbidprocesos
then is a keyword

-
1 UTILIDADES R E U l l V A S A L ENTORNO 21
Programas de Vtilidad UNIX

Utilidad whereis
Descripcih
La utilidad whereis localiza 10s fuentes, binarios ylo referemias al manual-onlinede 10s pro-
gramas especificados. Cuando se busca una correspondencia, 10s nombres de 10s programas su-
ministrados son despojados de 10scomponentes de 10spath-names del comienzo y de cual@er
extensi6n del final de la fixmajicheru.ext. Las salidas genera& por la utilidad whereis puedea
variar de un sistema a otro.

Formato
whereis [-bms][-u] [-BMS direcfuriu ...-rJprugram...
Opciones
-b Busca el binario ejecutable de un programa,

-m Busca las referencias al manual de paginas de un programa.

-s Investiga el fuente de un programa.


-u Busca entradas inusuales. Un f i c k o se dice que es inusual si no tiene una entra-
da de cada tip solicitado. Asf, el siguiente comando:
whereis -m -u*

sdicita aquellos ficheros del directm-ioen curso que no tengan documentaci6n.

-B direcfuriu Especifica que la bclsqueda va a ser en directorios binarios.

-MdirecfuriuIndica que la biisqueda va a ser en 10s directoriosdel manual de paginas.


-Sdirecfu& La bifsqueda va a realizarse en el directdobinario espificado en directorio.
-f prugrum Termina la lista del tiltimo directdo y marca el comienzo de 10s nombres de 10s
programas que van a ser buscab.

Ejernplos
Para localizar 10s ficheros que se correspondan con el binario, fuente y directorios de defect0 de
referencia al man, del programa cat, emitir el siguiente comando:

$ whereis cat
cat: lsbidcat lusrlbinlcat /usrlshareIman/manl.Wcat.l

Para localizar los programs del directoriohsrhin que no tienen paginas de referencia en el di-
rectorio/usr/shure/dmunI con 10s programas fuente del directorio/usr/src/cmd, emitjr:

$ whereis -u -m-M/usr/share/mdinunl S hsr/src/cmd -f /usrhin/*

22 1 - UTILIDADES munvuu EATORNO


Prugfums de Utilidad UNIX

Utilidad last
Descripcih
La utilidad last visualiza en orden cronol6gico inverso, 10s fogins y logouts previos registrados
en el fichero wtmp. El ficherowtmp registra todos 10s logins y logouts que hayan ocurrido desde
la filtima actualizaci6n del fichero.

Los registros de salida genera& por la utilidad last pueden ser limitados con la apci6n -nli’neas
del command-finelast. La utilidad last tambih permite localizar 10s fogins y fogours por usua-
rio y p a tenninal. Pur cada pr-o es visualizada la siguiente informci611,se@ la sesidn,
siendo listada en primer lugar la sesidn maS reciente:

Hara de comienzo de la sesi6n.


Duraci6n de la sesi6n.
Terminal en el cual tuvo lugar la sesi6n.
Si la sesi6n todavfa permanece activa o si fue cortada por una w g a del sistema.

Fonnato
last [*fineas] [-ffichrol [usuario...I [#y -.I

Opcwnes
-nhm Limita el nttmero de lineas visualizadas al nllmero w lfneas drrdas en -nlineas.

-ffichero La utilidad last usad como base de datos de 10s fogins y logouts el fichero esw-
ficado enfiehero. Si no se especifica ningtEn fichero, la utilidad last toma por de-
fecto 10s datos del fichero wtmp.

Argumentos
usuan.0 S610 visualiza infmmaci6n del usuario o usuaries especificados en usuario.

ttu S610 visualiza los registros de fogins y logouts del tenninal o terminales especifi-
cados en ttu. LQSterminales pueden ser especificados por su nombre completo Opar
ejemplo, Wp8)o por su nombre abreviado @or ejemplo,p8).

Ejemplos
El siguiente ejemplo visualiza 10s registros de fogins y logouts del usuario operator registrados
en el fichero de actividad wtmp:
$ last operator
operator ttys2 dapcllciematm Tue May 26 1553 - 1658 (01:05)
operator ftp dapcl8.ciemat.es Tue May 26 10:03 - 1658 (0o:oo)
operator ttyq3 dapcl8.ciemat.es Tue May 26 OS:45 - 17:31 (W46)
operator ttypb ccca75.ciemat.e~ Tue May 26 08:04 still logged in

wtmp begins Tue May 26 OR53

I - UTIUDADES RELAnVASAL ENTORNO 23


Programas de Utilidad UNIX

Utilidad iostat
(S610 en la versi6n Berkeley)

Descripcwn
La utilidad iostat genera informaci6n relativa a los terminales, discos y CPU, visualizando tres
t i p de informes estadfsticos:

Znforme de utilizaci6n de terminales (tty). Muestra el &mer0 de caractera lefdos (tin) y


escritos (tout)de toda los terminales del sistema.

Znforme de utilizacih de disco. Muestra par cada disco: el ntimero de data transferidos de
lectura y escritura en Kbytes por segundo (bps), y el nhero de transferencias emitidas al
disco a i c o por segundo (tps). Una transferencia es una petici6n de YO al disco Eisico.

Znforme de ufilimcidn de CPU. Muestra: el pcentaje de utilizaci6n de CPU consumido a


nivel de usuario (us), la ejecuci6n de procesos de baja prioridad a nivel de usuario (no, el
porcentaje de utilizaci6n de CPU consumido a nivel de sistema (sy), y el porcentaje de acti-
vidad de CPU a nivel de sistema (id).

Para computa~ata informaci611,la utilidad iostat tiene en menta: las transferencias de datos
concluidas, el nfimero de palabras transferidas de cada disco, y el ntimero de todos los car-
res de entrada y salida & 10s terminales. La informaci6n es actualizada por el kernel en inter-
valos regulares (usualmente 60 veces por segundo).

Formato
iostat [dispositivo . .I [in.terv&l [nkmrol

Argumentos
dispositivo Haw que la utilidad iostat visualice informaci6n de los dispasitivos de disco espe-
cificados en dispositivo. Si el argumento dispositivo no es especificado (0 el dispo-
sitivo no existe en el sistema) la utilidad iostat visualiza los dos primeros dispositi-
vos (aunque el sistema tenga configurados m& de dos dispositivos de disco).

intervafo Hace que la utilidad iostat genere un informe en cada infen&, especificado en
segundos. El primer informe contiene informaci6n desde la tiltima carga del siste-
ma, y cada informesiguiente desde el dltimo intendo. El valor no debe ser cero.

nlimro Especifica el ntimero de informes que van a ser generados por la utilidad iostat.
Por ejemplo, el command-line iostat 1 10, podr6 generar 10 informes estadkticos
en intavalos de un segundo. No se puede especificar el argumento nrimro sin el
argumento intentab, ya que el primer argumento n u a c o para el comando iostat
se asume que va a ser intervab.

Notas
La versi6n Berkeley de UNIX dispone de la utilidad vmstat, la cual facilita estadfsticas relativas
a la memoria virtual, a 10s procesos y a la actividad de CPU. Adicionalmente, el sistema UNIX
dispone de utilidades que facilitan al administrador del sistema la confwi6n del accounting.

24 -
1 UllLIDADES RELATIYASAL ENTORNO
Pro&mas de U t i l W UNIX

Ejemplos
El siguiente command-line iostat visualiza estadfsticas de los terminales, de la CPU y de 10s dos
primeras discos del sistema, proporcionandotres informa en intervalos de dos segundos:

# iostat 2 3
ttp QOPPOO dsk0 CPU
tintout bps tps bps tps us ni sy id
1 52 0 0 68 3 4 1 3 9 2
4 26 0 0 56 6 0 0198
0 26 0 0 0 0 1 0 2 9 8

El siguiente commund-line iostat visualiza stadisticas de los discos dsk2,dsk3 y cdrom2:

# iostat dirk2 &k3 csrom2


tty dskl! dmm2 dsw cpu
tintout bps tps bps tps bps tps usnispid
2 13 11 5 15 5 247 213 1 0 2 92

Utilidad hash
Descripcwn
La utilidad hash memffiza y visualiza las ubicaciones de las utilidades del shell invocadas du-
rante una sesi6n, previas a las invocaciones del comando hash Cuando la utilidad hash es emi-
ti& sin apciones ni argumentas, es &teni& la lista de utilidades previamente invocadas, inclu-
yendo el nombre de path de cada utilidad La lista no incluye las utilidades built-in del shell.

Formato
hash [-r]
hash [uti-

Opciones
-r Purga el contenidode la lista de utilidades previamente invocadas.

A rgumentos
utilFdod Es el nombre de la utilidad (especificada sin purh) que s e d agregada a la lista de utili-
dades invocadas, la cual tambien sera visualizada al emitir la utilidad hash.

Ejemplos
La salida generada por un comandohash puede parecerse a la mostrada en el siguiente ejemplo:

$ hash
date=Jusr/bin/date
Wusrbinfls
mWusr/biirnv
vi=/usdbinlvi

I - UnUDADES R E U n Y A S A L ENTORNO 25
Programas de Utilidad UNIX

Utilidad w
(S610 en la versi6n Berkeley)

Descripcibn
La utilidad w visualiza UM lfnea con un sumario de la actividad en curso del sistema, seguido
de informaci6n relativa a los usuarios alojados en el sistema.

El sumario de la actividad del sistema muestra la siguiente informaci6n:

La h a en curso del sistema.


El tiempo transcurrido desde la tiltima carga del sistema.
El &mer0 de usuarios alojados en el sistema.
El promedio de w g a (load average), dando el ntlmero de jobs en la cola de ejecuci6n de
los filtimos 5 segundos, de los tiltimos 30 segundos y de 10s tiltimos 60 segundos.
El factor nach (Much factor), el cual es una variante del promedio de carga dado en 10s
mismos intmalos; el valar mh pr6ximo a ax0 es el mh alto de la carga.

La informaci6n visualizadapor cada usuario, incluye:

El nombre de cada usuario alojado en el sistema (User).


El nombre abreviado del terminal en el que cada usuario estii alojado (Uy).
La ubicaci6n e i d e ~ i c a c i 6 del
n host remoto al que est4 conectado el usuario @om).
La hora en la que cada usuario hizologin (login @).
Los minutos transcurridos desde que el usuario tecle6 el Wimo dato (idle).
El tiempo en unidades del sistema usado por todos 10s procesos y sus procesos hijos aso-
ciados con el terminal del usuario (JCPrr).
El tiempo en unidades del sistema usado por el proceso en curso (PCPV).
El nombre y argumentos del comando en ejecuci6n (what).

Formato
w [-fm] [-h] [-I] [-SI [usuario]
w -u [-m]

Opciones
-f Suprime el campofrorn de la informaci6n relativa a los usuarios alojados.

-h Suprime el sumario de la actividad del sistema y las cabecaas de la informaci6n rela-


tiva a los usuarios alojados.

-I Visualiza informaci6n relativa a los usuarios en un formato amplio.Este es el defecto.

-m Visualiza la columna factor mach (Machfactor)en vez de la columna promedio de


carga (load average) del sumario de la actividad del sistema.

-S La informaci6n relativa a 10s usuarios es visualizada en un formato mh reducido,


omitiendose las columnas: login,JCPU, PCPU y los argument0 del comando.

-U S610 visualiza el sumario de la actividad del sistema.

26 I - UTILIDADES RELATIVASAL ENTOmO


ProgtStnus de Utilidad UNIX

Argumentos
usuCui0 Limita la informaci6n de salida del comando w a la del usuario dado en usuCui0.

Notas
El sistema uND[ dispone de otras utilidades que facilitan infmrnaci6n del sisterna. hi,la utili-
dad ulidt Visualiza y establece el limite en el tamafio de 10s recuTsoG del siskma. En la VKSi6n
Berkeley, la utilidad uptime visualiza un sumario de la actividad del sistema, la utilidad iostat
genera informes de los terminales, discos y CPU (VK “Utilidud iostat”, pagina 24); la utilidad
vnrstat muestra informes de la memoria virtual y de la CPU. En la VKSi6n System V, la utilidad
sar recopila y visualiza informaci6n de la actividad del sistema.

Ejemplos
El siguiente comando nos visualiza un sumario de la actividad del sistema en curso, seguido de
la informaci6n relativa a 10s usuarios alojados en el sistema en ese momento:

$W
18:B lIP33daR 10:22, 6 users, load average: 2.82, 2.19, 2.13
User #p from b@@ imC JCPU PCPU what
adminl console 1543 250 tehet dperl
ope=* Pl inf.aemat.cS 09:n 353 202 4 w
i12p06 p2 dapc23.demat.c~ 10:B 219 2:18 -k&
cxplo70 p3 ccca76.ciemat.c~ 1543 1 -kh
adminl p4 130.206.10.240 0S:Ol 5days 53 1 -kh
il2gtOl 42 dapcl0.demat.cS 0952 301 301 - k h

Utilidad cd
Descripcibn
El comando cd nos traslada del directorio presente a otro directorio. El directorio especificado
(al que nos vamos a trasladar) debe tener permisos de ejecuci6n.

Formato
cd [directu~o]
cd -
Argumentos
directorio Es el path-nme (absoluto o relativo) del directorio al que nos vamos a trasladar. Si
.
el path-name del directoriocomienza con un caracter /, con un carficter o con dos
..
caractaes ese directorio se convierte en el nuevo directorio de trabajo. Un ca-
..
rikter. m lleva a1 directorio en curso; dos caracteres nos llevan al directorio pa-
dre; un path que comience con un caricter / nos lleva a un directorio que no est6
dentro de nuestra estructura de ficheros en curso; un path que no comience con un
cartlcter / nos lleva a un directorio de nuestra estructura de ficheros en curso.

-
1 UTXLJDADES REUTIVASAL ENTORNO 27
Propramus de Utiliihd UNIX

- -
Si en el comando cd se especifica un carficter (gui6n) como argumento, la utilidad
cd nos devuelve al iiltimo directorio de trabajo utilizado (0 al directorio salvado en
la variable CDPATEI, si &ta est& establecida). Si en el comando cd no se especifica
nin@n directorio, la utilidad cd nos traslada a nuestro directorio de defecto (us&
dose el valor de la variable HOME).

Notas
El comando cd no es realmente una utilidad, es un comando built-in del shell. Los shells d i s p
nen de la variable CDPATH, (cdpath en csh) la cual afecta a la aperaci6ndel comando cd Si la
variable CDPATEI est4 establecida, el comando cd examina la lista de directorios de dicha va-
riable; si dicha variable no est6 establecida, el comando cd ~610examina el directorio de trabajo.

Un usuario siempre puede saber en que directorio se encuentra emitiendo el comando pwd, ya
que este comando visualiza el directorio de trabajo en curso. La variable de entmo PWD con-
tiene nuestro directorio de trabajo en curso.

Ejemplos
En entornos del shell Korn y shell C, el ariktex de escape tilde (-) tambien puede ser especifi-
cad0 en el mmndo cd para trasladamos al directario de defecto de un usuario especficado:

Establezcamos nuestro prompt al path de nuestro directorio de defecto, para facilitar la operati-
va en 10s siguientes ejemplos:

$ Psl=’$PwD> ‘
/usuaridceca/operaton # btamos en nuestro direct~riode defecto.
/ u s u a r i ~ ~ / ~ d o p e r a tcd
o mPROrprogsf# Nos Ueva a uno de nueshs directorios.
/usuarios/ceca/operator/PRO/progsDcd h s r h # Nos Ueva a un d e r i o del sistema.
/usr/malo cd - # Nos lleva d Utimo direaoriousado.
/usuaridceca/operator/PRO/progsb cd
/usuaridceca/operator/PROslceca/operator/cd
PRO>/
-# Bajamos un nivel del directorioen USO.
# Nos traslada a1 directorio raiz
h cd usthin # Vamos 91directorio/usr/bin del sistema.
/ u s r N i cd # Nos devuelve a nuestro directorio de defecto.
/ u s u a r i d c e d o p e r a t w cd bin # Nos traslada a nuestro dircctoriobin.
/usuarioddoperator/bin> cd # Nos cambia a nuestro directorio de defecto.
/usuaridceca/operatom

El siguiente establecimiento de la variable CDPATH pede s m o s iitil, porque desde detamina-


dos lugares nos sa6 maS fficil trasladarnos a nuestros subdirectorios ($HOME/&ecttOrioS):

/usuaridceca/operaton CDPATH=.:..:$HOMEJ ;export CDPATEI


/usuarios/ceca/operatom cd backups # Nos traslada a nuestro subdirectoriobachps.
/usuarias/ceca/operaratormackups>cd hSr/lib # Nos lleva PI d i d o lib del sistema.
/usr/share> cd bin # Nos traslada a nuestro directoriobin.
/usuarios/ceca/operator/bilo

28 I - UTIUDADES iaixnvAs AL ENTORNO


Pro2kamas de U t i W UNIX

Utilidad mkdir
Descripcih
La utilidad mkdir crea el directorio o directurios especificados con permisos de lectura, &tu-
ra y ejecuci6n (modo 777), a no ser que sean alterados pop un establecimiento previo de una
mhcara de modo de permisos con la utilidad umask (ver “ W f i l Wumaslc”,pagina 34).

Formato
mkdir [-opciones] directuriu ...
Opciones
-mmodo Permite especificar el modo de permisos que va a tener el nuevo directorio o directo-
rim. El modo de permisos especificado en modo,puede ser especificado de dos for-
mas: defonna simbblica y defonna absolutu (ver “Wtilidad chmod”, pagina 30). En
modo simMlico, un signo + agrega permisos al modo de defecto y un signo - los b
rra, se asume que el modo inicid eSta establecido a a=-

-P Crea directoPiosintermedios, si asi se requiere, cuando se crean nuevos directarios.

Argumentos
directorio Especifica el nombre o llombres del directorio o directuria que van a ser creados.

Notas
La utilidad mkdir tambih crea las entradas standard del nuevo directorio: un car6ct.a punto (.)
representandose asi mismo, y dos caracteres punto (..)representando el directario padre. Cuando
se crea un nuevo directorio, el directoriopadre debe tener permisos de escritura.
Las utilidades rmdir y rm se utilizan para borrar directorios (ver “WriZjdad rmdir”, p6gina 63 y
“ Utili& rm”, p6gina 62). La utilidad chmod cambia el modo de permisos de ficheros y direc-
torios (ver “ U f i l W chmod”, p6gina 30). La utilidad m a s k establece una maScara de creaci6n
de modo de permisos y directorios (ver “Wfilidadumask”, ptigina 34).

Ejemplos
El siguiente command-line crea los directoriosdit4 y dir5 bajo el directorio de trabajo; el primer
comando mkdir crea el directorio dir4 con modo de permisos de defecto; el segundo comando
mkdir crea el directoriodir5 con modo de permisos 700 usando el m&odo absoluto:
$ mkdir dir4 ;mkdir -m 700 dir5

El siguiente command-line crea la estructura del subdirectoriopru~amas4rugsC/ejecs:


$ mkdir -p prugramas4rugsUejecs

I - UTlLlVtWES R E U T l V A S U EhTORNO 29
Promamas de Utilidad UNIX

Utilidad chmod
Descripcitjn
La utilidad chmod se utiliza para cambiar el modo de 10s ficheros y directmios especmcados,
conforme a la especificaci6n del modo. El modo de un fichero especifica sus permisos de acceso
de lectura, escritura y ejecuci6n. y de otros atributos. El nuevo modo pede ser especificado de
forma simb6lica 0 de forma absoluta. S610 el propie&uio del fiChK0 o un usuario superuser
pueden cambiar el modo de un fichero.

Formato
chmod [-R]
modofichero ...
Opciones
-R Si en el argumentofihero es especificado un directorio, el mmando chmod hace
que los argumentos desciendan recursivamente a l directorio, estableciendo el modo
especificadoen el directorio y en cada uno de los ficheros encontrados.

Argumentos
fichero Son los ficheros o directurios a 10s que van a ser cambiados sus modos.

nwdo Son los permisos de acceso que tiene un fichero, 10s cuales van a sa cambiados. El
cambio del modo puede sa especificado defonna simbblicu o def o r m absolufu.

Especi@acibn del modo enforma sirnb&W


En el cambio simb6lic0, el modo estA compuesto de los siguientes elementos:

[clase]operacidn CpennisoI..

Donde:
clase Es una o maS letras asociadas a uno de 10s tres conjuntos de las distintas clases o ca-
tegorfas de usuario, en relaci6n con los permisos de acceso de un fichero UMX. En
el siguiente ejemplo, las tres clases de usuario: usuario (u), grupo (g) y otros (0) tie-
nen permisos de: lectura (r),escritura (w)y ejecucih (x):

u g o
user group other
rwx rwx rwx

Las letras asociadas con sus correspondientes clases de usuario son:


u (user).Representa al usuario propietario del fichero.
g (group). Representa al grupo al que pertenece el propietario del fichero.
o (other). Representa el rest0 de 10s usuarios (que no sean u ni g).
a (all).Todm 10s usuarios (equivalente a especificar ugo).

30 I - UTILIDADES REwnvAsAL ENTORNO


Progrqmas de U t i l W UNIX

Si en el argument0modo se omite el elemento e h e , el defect0 de la clase de usuario


es a Es k i r , la acci6n del elemento operucidn con sus mespondientes pennisos
recae sobre las tres clases de usuario.

opercrcibn Es la operaci6n que va a ser ejecutada, signifkando 10spermsSos que van a SK cam-
biados. Los siguientes son los aperadores y las acciones que realizan:

+ Agrega 10s permisos especificados.


- Quits 10s ~ m i seSpecificadOS.
~ s
= Cambia 10s pamisos especificados de las clases de usuario especificadas. Si
a1 sign0 = no le sigue un tipo depenniso, el comando chmod borra 10s pa-
misos de las clases de usuario especificadas.

penniso Es uno o m5s camcteres que cm-nden al tipo de permiso, identificando la ope-
roeidtL que va a ser ejecutada sobre elfichero. Los siguientes son 10s caractem que
identifican el tip0 de permiso:

r Permiso delectura
W Permiso de escritura.
X Permiso de ejecuci6n en ficheros, y permiso de br'lsqueda en directories.
X Permiso de ejecuci6n si el fichero dado enjichero es un directario o si el
modo en curso tiene al menos uno de 10s bits de ejecuci6n establecido.
S Es activado el permiso del ID de usuario o de grupo en ejecuci61~
t Fstablece el bit sticky (s610 un usuario superuser puede establecer el bit
sticky (modo 1ooO) y s610 puede ser establecido para la clase user).
I Se produce un blo4ueo preceprivo durante el acceso. (Si es establecido
al& bit de ejecuci611, el ID de grupo es activado).

El siguiente comandochmod utiliza el mbrodo simb6lico para que los usuarios que pertenmen a
nuestro grupo puedan leer y escribir en el f i c k o especificado enfichero:

chmod g+nvfichero

Especi@aci&n del modo enfonna absoluta


En el cambio absoluto, el modo est4 compuesto de un nfimero de tres digitos octales.

nnn

Donde n es un mlmero octal del 0 a17. En un fichero, cada OcufTencia de la clase de permiso (r,
w y x) est5 rqresentada pur un 1 binario y cada ausencia (-) por un 0 binario. Dando valores a
10s dgitos binarios de cada conjunto de permisos, obtendremos por cada conjunto un digit0 oc-
tal, con 10s cuales formaremos un nfimero de tres digitos octales:

n n n
rwx r-x r-x
111 101 101
421 401 401
7 5 5

En este ejemplo vemos que las tres categdas de usuario pueden leer y ejecutar el fichero, per0
s610 el propietario del fichero puede escribir en 8.

-
1 UTILIDADES REUTIVASAL Eh'TORh'O 31
Programas de UtiNad UNIX

El siguiente comando chmod utiliza el metodo absoluto para que 10s usuarios que pertenecen a
nuestro grup, a d e d de leer y ejecutar el fichero especificado enfichero puedan escribir en e,
y el resto de usuarios pueda leerlo y ejecutarlo per0 no escribir en 8:

chmod 775fwhero

En realidad, cada ntlmero octal del modo absoluto se construye por combinaci6n 16gica (logical
OR)de los siguientes valores:

Nhero Sianificado

4000 Establece el ID de usuario en ejecuci6n.


2000 Establece el ID de grupo en ejecuci6n.
I000 Establece el bit s t i e .

0400 Permite que el prqietario lea el fichero.


0200 Permite que el propietario escriba en el fichero.
0100 Permite que el propietario ejecute el fichero y trasladarse a otros directorios.

0040 Permite que los usuarios del grupo (al que pertenece el propietario) lean el fichero.
0020 Permite que 10s usuarios del grupo escriban en el fichero.
0010 P d t e que ]os usuarios de grup ejecuten el fichero y movme entre directmios.

0004 Permite que el resto de usuaries (que no sean user ni group) lean el fichero.
0002 Permite que el rest0de usuarios d b a n en el fichero.
0001 Permite que el rest0de usuarios ejecuten el fichero y trasladarse a otros direx3mios.

El comando Is -I visualiza 10s permisos de acceso de un fichero, y el comando Is -Id visualiza


los permisos de acceso de un directorio (va “Utili& Is”, pfigina 44). El comando umask vi-
sualiza y establece la mAscara de creaci6n del modo de un fichero (VK “Utilidad umask”, Pagina
34). Con las utilidades chown y chgrp podemos cambiar el id de usuario del propietario del fi-
chero y el id de grupo al que pertenece el propietario del fichero, respectivamente.

Recordemos que cada uno de 10s permisos de acceso tiene efectos diferentes en un fichero de-
pendiendo del tip0 de fichero. Por ejemplo:

En un fichero ordinario, el permiso de:


0 Lectura: nos permite leer su contenido.

0 Escritura: nos permite crear, modificar y borrar su contenido.

0 Ejecuci6n: nos permite ejecutiu un fichero como si fuese un comando.

En un fichero directon’o, el permiso de:


0 Lectura: m permite listar su contenido.

0 Escritura: nos permite crear,modificar y borrar los ficheros de ese directurio.

0 Ejecuci6n: nos permite trasladarws de un directorio a otro.

\
En un fichero especial, el permiso de:
0 Lectura: nos permite leer del dispositivo.

0 Escritura: nos permite escribir en el dispositivo.

0 Ejecuci6n: nos permite ejecutar el fichero del dispositivo.

32 I - UTILIDADES REWTlVASAL ENTORNO


Progrumas de Utilidad UNIX

Ejemplos
Los siguientes ejemplos muestran c6mo utilizar la utilidad chmod para cambiar 10s permisos de
a m 0 de un fichero, en este cas0 del ficheroprueba:

$ Is -1prueba
-rw-r+- 1 usuario grup 345 May 4 17:W prueba

Vemos que en el ficheropmeba, las tres clases de usuario no pueden ejecutar el fichero, ya que
ningu~ de ellas tiene permiso de ejecuci6~y que el fichero s610 puede sa escrito por el pro-
pietario del fichero y lefdo por las tres clases de usuario.

Cualquiera de 10s dos comandos chmod siguientes (forma simb6lica y absoluta) agregara los
permisos de ejecuci6n para que las tres clases de usuario puedan ejecutar el ficheroprueba:

$ chmod a+xprueba
$ chmod 755prueba
$ Is -Iprueba
-mxr-xr-s 1 usuario pup0 345May 417:W prueba

Los dos comando6 chmod siguientes (forma simb6lica y absolu~)hacen que el ficheroprueba
s610 pueda sa leido, escrito y ejecutado por el propiietario del fichero:

$ chmod go=prueba

-- $ chmod 700prueba
$ Is -Iprueba
1 usuivio g r u p 345May 4 17:W prueba

En el siguiente ejemplo, cualquiera de 10s dos comandos chmod concede 10s permisos de lectu-
ra, escfitura y ejecuci6n a las tres clases de usuario para que puedan leer, escribir y ejecutar el
ficheropmeba:

$ chmod gouwx prueba


$ chmod 777pmeba
$ Is -1prueba
--rw~rwxrwx 1 usuario p p o 345 May 4 17:W prueba

El siguiente comando chmod quitarfi 10s pamisos de escritura y ejecuci6n de la clase user y
other al directorio especificado en directorb, asf como a todos 10s fichem que &e contenga:

$ chmod -Rog-rx directorio

El siguiente script, llamado permx, puede sernos titil, ya que concedexi4 permisos de ejecuci6n a
las tres clases de usuario del fichero o fichem especificados como argumentos del script:

$ catpennx
#!/binlksh
# script:permx
# Da permisasde ejecucibn a uno o varios fKhetas.
#
chmod +x $*

$ipermxfichero ...
I - UllLIDADES R E U l l V A S A L ENTORNO 33
Programas de Utilidad UNIX

Utilidad umask
Descripcibn
La utilidad umask establece la & m a de creaci6n del modo del fichero del entorno de ejm-
ci6n del shell en curso a los valores especificados en el command-line umask. Esta maScara
afecta al valor inicial de 10s bits de permiso del fichero de 10s subsiguientes ficheros creados.

Fomtato
umask [SI[mbscara]

Opciones
-S Produce una salida simb6lica en el siguiente formato:
a=permisos-usuario, g=permisas-grupo, o=permisos-otros

Los tres valcms son combinaciones de las letras de 10s permisos (r, w, x); la presencia de
una letra indica que esa clase de usuario (u, g, o) tiene establecidos esos permisos.

Argumentos
mffscara Es una c a d e ~specificando la nueva maScara de a&6n del modo del fichero.
Esta cadena pede estar representada pop un valor octal de tres digito6, o p a un va-
lor simb6lico del modo.

En el valor octal, cada digit0 representa 10s t


ip de penniso (lectura, escrituru y
ejecucidn) correspondit5ndose con cada conjunto de la clase de usuario (usuario,
grupo y otros), respectivamente. El valor de cada Cugito octal especificado, primer0
es complementado 16gicamente y despueS interseaionado 16gicamente(AND) con el
corrmndiente dfgito especificado por el sistema en la creaci6n del fichero.

Si queremos obtener, de una forma sencilla, el modo de acceso real de una mhcara
ya establecida @or ejemplo, la &ara 022), o saber la dscara que tenemos que
establecer segh el modo de acceso que queramos que tengan nuestros ficheros (por
ejemplo, el modo 644,realizar respectivamentelas siguientes sustracciones:
777 777
--
022 --
644
755 e M d o d e l a miiscaraO22 133 e= M h r a para el modo 644

En el valor simb6lico del modo, el nuevo valor de la maScara de creaci6n del modo
del fichero es el complement0 16gico de la parte de bits de 10s permisos del fichero
del modo especificado por la c a d e ~simb6lica del modo. En un valor simb6lico del
modo, un signo + hace que 10s bits de 10s permisos indicados sean borrados de la
mAscara de creaci6n del modo del fichero; un signo - hace que 10s bits de Ios permi-
sos indicados sean establecidos en la mAscara.

Si el comando umask es emitido sin el argument0 mbscara, el comando umask visualiza el


valor en curso de la dscara de creaci6n del modo del fichero.

34 I - UTIUDADESREUTIVAS AL ENTORNO
ProHirnus de Utilidad UNIX

Notas
Por convenio, aunque la mhcara de la utilidad umask tenga establecidos permisos de ejecu-
ci6n, en 10s ficheros creados 10s permisos de ejecuci6n son omitidos; per0 en 10s de directories,
10s permisos de ejecuci6n se mantienen. Si decidimos establecer una &cara del modo de crea-
ci6n del fichero para modificar 10s permisos de defecto del sistema, conviene que el comando
umask con la & m a deseada se incluya en nuestros ficheros .fogin y/o .profile.

Ya que el comando umask afecta al entorno de ejecuci6n del shell en curso, la utilidad umask
es suministrada como un comando built-in del shell. Otm utilidad, la utilidad chmod permite
cambiar el modo de acceso de un fichero (ver “Utilidad chmod”, pagina 30).

Ejemplos
Los comandos umask siguientes visualizan, respectivamente, 10s valaes octal y simb6llco de la
mhcara de creaci6n del modo del fichero en curso:

indicandonos que el valor de la & m a es 022, el cud cOTreSpOnde al modo absoluto 755 y al
modo simb6Uco especificado en la salida del comando umask -S.Es deck 10sdirectorios crea-
dos tendrh permisos de ejecuci6n y lectura para las tres clases de usuario y permisos de escritU-
ra para la clase Usuario; por convenio, 10s ficheros creados no tendrih permisos de ejecuci61~

Supongamos que el sistema tiene establecido una masCara de creaci6n del modo del fichero a
000 (modo 777) y queremos que 10s nuevos directories y fickos s610 puedan ser ejecutados,
lei& y escritos por la clase user (w- ), o lo que es lo mismo con un modo 700.

Cualquiera de 10s dos comandos umask siguientes cumplirh nuestros requerimientos:

$ umask 077
$umaskg+rwx
La siguiente secuencia de comandos, es un ejemplo de cdmo salvar la mAscara de creaci6n del
modo del fichero en curso, seguidamente, cambiar el valor de la masCara en curso para crear fi-
cheros y/o directorios con permisos distintos a 10s de defecto del sistema, y despub restaurar el
valor previo de la masCara del sistema:

$umask # Examina d valor de h maiscam en curso.


022
$ savemask=‘umask‘ # Sdva cl valor de la maiscara en curso.
$ echo $savemask # Verifica el valor salvado de la m&cara.
022
$ umask444 # Cambiimos Ia maiscam en curso.
$umask # Verificamos d cambio.
044
$ vifichero # Creamos dirrctorios 910 ficheros.
$ umask $savemask # Restauramos la &cam previa.
$ umask # Verificamos el valor de Ia maiscam restaurada.
022

-
1 UTXLIDADES REUTXVASAL ENTORNO 35
Programas de U t i l W UNIX

Utilidad tty
Descripcibn
La utilidad tty visualiza el pu?h-namedel dispositive de nuestro terminal. Si el comando tty de-
vuelve un exit-status 0, el fichero del standard-input es un terminal; si el exit-status devuelto
por el mmando tty es 1, el fichero del stmdard-input no es un terminal.

Formato

Opciones
-s Suprime la salida generada par el comando tty (el path-name de nuestro terminal).

Notas
Cada vez que un usuario se conecta a un terminal, el sistema le asigna un fichero llamado
/dw/#y. El fichero /dev/#'yes WI fichero especial que identifica nuestro terminal, aunque tam-
bi6n puede tenex otro nombre, como /dev/conso&, /dev&2, e€~.

Ejemplos
La siguiente secuencia de comandos nos muestra si el standard-input es o no un terminal:

!$ tty
Idevftty
$ echo $?
0
$ tty c ~ t e x t o
not a tty
$ echo $?
1

Ya que un terminal conectado al sistema es un fichero, entonces podemas redirigir salidas a ese
fichero, es decir, a un usuario conociendo el nombre de su terminal. El siguiente comando envia
un mensaje al usuario operator (suponiendo que estC alojado en el terminal ttyrd):
$ echo "Say Pelaez ~ E s t dla cinta DAT85 en Ea sala?99>/&v/#yr6

El siguiente script, llamado vterm, tambien verifica si el standard-input es o no un terminal:

$ cat vtenn
#!hinlksb
-
# script: vterm Vericca si el stdin es un terminal.
ifttys
then
echo "El fichero de salida es un terminal"
else
echo "El fiiherode sal& no es un terminal."
fi

36 I -UllUDADES RELAnVASAL Eh'TOMO


Promumas de UtiWad UNIX

Utilidad stty
Descripcih
La utilidad stty establece o visualiza las caracteristicas o pardmetros de E/Sde un terminal de
acuerdo con 10s argumentos especificados. Emitida sin @ones ni argumentos, la utilidad stty
visualiza ckrtas caracteristicas que afectan a la operaci6n del terminal.

Forinato
stty [-opciones] [argument0...I

Opciones
-a Visualiza todos los padmetros en curso establecidos en el terminal.

-g Visualiza parhetros que pueden ser us& como argumentos de otro comando stty.

Argumentos
Los siguientes son algunos de los distintos purhetros para establecer o cambia las caractds-
ticas del terminal que pueden especifhmsecomocrrgumentos del comando stty. Los padmetros
precedidos de un signo menos a-I),
pueden sa activados especificando el parheiro sin el signo
menos, y desactivados especificando el parhetro con el signo menos.

Modos de control
[-bare& Activa o desactiva el bit de paridad cuando nos conectamos con el terminal.

[-kven Selecciona el bit de paridad par.

[-lpar& Selecciona el bit de paridad impar.

cs5 cs6 cs7 cs8 Selecciona el tamaflo del carilcter, si es posible.

ntim Establece la velocidad del terminal, en baudios, al n h e r o dado en nlim,donde


nlim pue& ser: 110,300,600,1200,1800,2400,4800,9600,19200 y 38400.
ispeed ntim Establece la velocidad de entrada del terminal, en baudios, al nfimero especifi-
cad0 en nlim,siendod m uno de 10s ntimeros mostrados en el parilmetro nlim.

ospeed nlim Establece la velocidad de salida del terminal, en baudios, al ntlrnero especifica-
do en nlim, siendo nlim uno de los ntimeros mostrados en el parhetro nlim.

[-Pupcl Para o mama la conexi611al modem. (El parhetro [-lhup es semejante a este).
[-]tread Activa o desactiva el receptor.

E-lclocal Asume una linea con o sin el control del modem.

I - UTILIDADES RELATIVASAL ENTORh'O 37


Programas de U t i l i h i UNIX

Modos de entrada
Ignora o reconoce la intmpci6n en la entrada.

Activa o desactiva el indicador de intmpci6n.

Ignora o reconoce caractma con mores de paridad

Activa o desactiva la verificacidn de paridad de entrada.

Activa o desactiva la referencia a errores de paridad

E l i m i ~o no, un bit en 10s caracteres.

Activa o desactiva el car- nueva linea al retorno de carro en la entrada.

Ignora o reconom el retorno de carro en la entrada.

Activa o desactiva el retorno de carro al car- weva linea en la entrada.


Activa o desactiva 10s caractaes de mayc’lsculas a minrfsculas en la entrada.

Activa o desactiva el control studstup de la salida en un terminal.


Activa un carhter para reiniciar la salida.
Desactiva el control inicidparadade la entrada en un mminal.

Modos de saIida
[-lOPo~t Activa o desactiva la salida de 10s post-proces0s.
[-lolCUC Activa o desactiva 10s caracteres de miniisculas a maylisculas en la salida.

[-locd Activa o desactiva 10scaractera retmo-de-carrdnueva-linea al de nueva linea.


[-Jonocr Activa o desactiva el cariicter retarno de carro en la columna cero.

[+&et Hace que el carficter nueva lfneaejecute o no la funci6n de retorno de carro.

[-lofill Utiliza o no caractera de relleno en la sincronizaci6n del terminal.

[-lof&l Utiliza 10scaracteres delete o null para caractera de relleno.


cr0 crl e12 cr3 Sdecciona la forma de sincronizaci6npara 10s caractera de retarno de carro.

n10 nll Selecciona la forma de sincronizaci6npara 10s caracteres de nueva linea.

tub0 tab1 tab2 Seleccionala forma de sincronizaci6npara 10s tabuladores horizontales.

bs0 bsl Selecciona la forma de sincronizaci6npara el rmoceso.

fPrn Selecciona la forma de sincronizaci6npara el salt0 de p5gina.

38 -
1 UTlLlDADES RELAnVAS AL ENTORNO
Prograhas de Utilidad UNIX

Modos en local
Activa o desactiva la verificaci6n de caracteres asociados con 10s caracteres es-
peciales intr, quit y susp.

Pone en servicio o desactiva la entrada d n i c a . (Entrada relacionada con el


proceso de anulaci6n y borrado).

Activa o desactiva las fulaciones extendidas para 10s datos de entrada.

Permite o no permite la salida dejobs background en el terminal.

Activa o desactiva la visualizaci6n de 10s caracteres tecleadas.

Hace que el caraCtet de borrado (erase) borre o no el dltimo carikter de la linea


en curso de la pantalla.

Hace que la nueva linea sea o no devuelta despueS del carikter kill.

Activa o desactiva la pmentaci6n can6nica de mayclsculas y minlrsculas.

Activa o desactiva la devoluci6n del caraCter weva linea.

Activa o desactiva el carkter kill para borrar caracteres,en vez de echoe.

Activa o desactiva el vaciado de las colas de E/S asociadas con 10s caractera
especiales intr, quit y sup.

Modos de combinacibn
evenp I p e Activa los parbetrosparenb y cs7; desactiva el p a r ~ t r o p a r ~ .

o
w Activa 10s parbetros parenb, cs7 y parudd.

[-MI Activa o desactiva el parbetro icrnl.

[-Ifcase Activa o desactiva 10s parhetros x m e , iuclc y olcuc.

[-WS Preserva (expande a espacios) tabuladores.

ek Establece 10scaracteres erase y kill al defect0 del sistema.

[-Ira Activa o desactiva la entrada y salida de datos. El parbetro cooked es equiva-


lente al parbeiro raw.

sane Inicia todos 10s mados a algunos valores rmnables.

Tamaiio de windows
rows n Establece el tamafio de la pantalla al nlrmero de lineas especificadoen n.

columns n Establece el tamaiio de la pantalla al niimero de columnas especificado en n.

I - UTIUDADES REUTIVASAL EhTORh’O 39


Programas de Utilidad UNIX

Pdmetros de visualizacibn
(Sa0en la versi6nBerkeley)
all Visualiza todos los parfimetrosen curso del terminal. Como la opci6n -a.

speed Visualiza la velocidad del terminal.

Size Visualiza el tamaiio del terminal (lineas y columnas).

Asignacwnes de control
car&ter-especial x
Establece el cardcter-especial al carficter especificado en x. Los caracteres es-
pecial~reconocidos son:

erase Establece el c a r W de borrado del cdcter precedente.

euf Establece el carfictex fin de fichero (end-offile) de un terminal.

euf Establece un delimitador de linea adicional (como un c a r W NL).

discard Establece el caracta de borrado en las salidas de un terminal.


in& Establece el c a r W de intmpci6n Crea un indicador SZGZNZZ

kill Establece el car- de barrado de linea.

quit Establece el carkter de salida (sew SIGQUIT). I&ntico a in@.

reprint Establece el carficter para la reimpresi6n de todos los caracteres.

start Establece el c a r W para reanudar la salida suspendida con stop.

stop Establece el carficter para suspender la salida temporalmente.

susp Establece la suspensi6n de procesosforeground en ese terminal.

weruse Establece el car* de bomado para b a r la palabra p r d e n t e .

Para especificar un cartfcterde CONTROL, el carkter especificado en x debe ir


precedido de un signo acento circunflejo (A), y ambos deben ir encerrados entre
caracteres ap6strofos. Por ejemplo, el siguiente command-line stty:

sttyeruse rAh9

establece el carilcter de borrado del carficterprecedente (erase) a represen-


tado por la secuencia cCtr2-b.

min, time n Establece el valor de min (minim0 ntimero de caracteres en la lectura) o time
(tiempo usado en la trmmisi6n) a1 nfimero especificado en n. Los parametros
min y time son usados en procesos de entrada no canonical (-icmon).

fine nlim Establece la gesti6n de la linea a1 nfimero especificado en nGm.

40 -
1 UTILJDADES REUTIVAS AL Eh'TORh'O
Progrdrhas de U t i l W UNIX

Notas
El sistema UNM dispone de varias utilidades relacionadas con 10s terminals. Ad,la utilidad tty
visualiza el path-name del dispositivo de nuestro terminal (ver “[ltilidad tty”, p@na 36). La
utilidad clear limpia la pantalla de nuestro terminal. Las utilidades tput y tset usan la base de
data taminfo para obtener prestaciones del terminal y utilizarlas en el shell.

La variable TERM se usa para identificar la clase de terminal en uso. Las definiciones de 10s
terminales se encuentran en 10s subdirectorios del directorio del sistema hsriblllenninfo. El
fichero del sistema hsrfinc&i&kemios.h se utiliza para obtener 10s atributos requeridos por 10s
terminals.
La informaci6n gemada par la utilidad stty puede variar de un sistema a ohro. En la inform-
ci6n visualizada por el comando stty, 10s curucteres-de-control son visualizados de la forma:

carricter-de-contro!= v&r
Si la cadena especificada en valor va precedida de un carkter acento circunflejo (A), ese valor
es la representaci6n visual del curdcter-de-CUMRUL,por ejemplo, *h, es <cb.l-h>. Si la cadena
especificada en valor es orndef> (en Berkeley) o A @ (enSystem V) signKica que el c a r e de
control no est4 definido.
Asi mismo, si la velocidad de entrada y salida establecida en el terminal es la misma, la infm-
maci6n de la velocidad visualizada es de la forma:
speed ve&& baud.

y si la velocidad de entrada y salida son distintas, la inEarmaci6n visualizada es de la forma:


ispeed oelocidad baad, ospeeci velocidad baud

Ejemplos
El siguiente ejemplo visualiza ciertas caracterlsticas que afectan a la aperaci6n del terminal:

$ stty
#2 disc, speed 9600 baud; -parity hupcl
erase = ”?
brkint -inpck istrip icrnl +any onkr
echo echoe echok

El siguiente ejemplo visualiza todas las caractedsticas establecidas en un terminal:

$ stty -a
#2 disc; speed 9600 baud; -parity hupcl
erase = A?; werase = “W;W = A U ; intr = quit = A\ smp = A Z
dsusp = AY, cof = A& eo1= <undef>, eo12 = and&, stop = AS
start = ^Q; lnext = AV;discard = +,reprint = A& status t<undeh
time= 0; min = 1
-parenb -parodd cs8 -estopb hupcl cread -clod -ertscts
-ignbrk brkint +par i n p c k istrip -inlcr -ign i d i u c l c
ixon &any -isoff imaxbell
isig icanon -xcase echo echoe -echok s h o d aotlsh -mdmbuf aohang
-tostope c h d -cchoprt echdrc 4twerase iexten aokcrninfo
o p t -0cuc onlcr -ocrnl -onocr -0nlret - 0 T i -ofdel tab sneot

-
1 UTlLJDADES R E U n V A S A L ENTORNO 41
Programas de Utilidad UNIX

Si quexemos conservar las caracterfsticas que vamos a cambia a nuestro terminal, Qtas pueden
sex establecidas en nuestro ficheroprofile. Pur ejemplo, la siguiente Unea incluida en dicho fi-
chero establecer6 el car6cter de m a d o de linea a A K y el car6cter de borrado de car6cte€a AB

$ stty kill rAk9 erase 4Ah9


En el siguiente ejemplo, el primer comando stty visualiza las caractedsticas en curso de un ter-
minal, las cuales son utilizadas seguidamente por el segundo comando stty para establecerlas en
nuestro terminal:

$ stty -g
d20:180SAbd:12b3:lc8:154:O la
$ stty d20:1805:4bd:126:3:1c:8:15:4:0:1a

El siguiente script, llamado clave, primer0 desactiva el parhelro echo de la utilidad stty para
que la palabra tecleada no sea visualizada, y despuQ activa el p a r h m o echo para que dicha
palabra sea visualizada:
$ cat clave
#!/bid&
-
# script: dave Activa y desactiva d d c t e r echo.
stty-echo
echo '%clear la palabra dave: \cn
read palabra
stty echo
echo
tcho "La palabraclave cs Spalabra"

El siguiente script, llamado edita, permite crear con el editor vi ficheros a 132 columnas. Pri-
mer0 salva el valor en cuso de la variable TERM,para en su momento restaurarla al mismo
valor. Segtin las prestaciones de la base de datos tenninfo, la especificaci6n -wpermite escribir
en un terminal mils de 80 columnas (wide mode). Con el pahetro columns de la utilidad stty
establecemos el tamaeo del t~~minal a 132 columnas, y con la utilidad tput inicializamos el
terminal. AI salir del editor vi, una vez creado el fichero, 10s valores del terminal son restableci-
dos a su valor original:

$ cat edita
#!tbidsh
# script:edita
# Crea fsheros a 132 columnas
sabrm=$TERM
TERM=${TERM)-w exportTERM
limpia=*dear*
if [ qlimpia- != ]
then
stty columns 132
i-tput init'
echo "${initerm)\c"
${EDITOR-vi} $*
TERM=${TERM} export TERM
'initerm=*tputinit'
echo "${initerm}\c"
stty columns 80
eke
TERM=${salterrn} export TERM
${EDITOR:-vi}$*
fi

42 I - UIILIDADESR E U n V A S A L ENTORNO
Progrpmas de Utilidad UNIX

2 - MANEJO DE FICHEROS

En este capftulo se incluyen las utilidades maS comunes en el manejo de ficheros. Otras utilida-
des que tambien manejan ficheros, como grep, sed, Ipr, etc., han sido incluidas en otros capf-
Nos, ya que sus hciones e d n m& diferenciadas.

Utilidud fiIe
Descripcidn
La utilidad file lee ficheros de entrada y ejecuta una serie de verificaciones en cada fichero es-
pecificado, intentando identificarlos par el tipo de fichero, visualiz&nddos en el terminal. La
utilidad file utiliza el fichero/etc/magic para identificar 10s ficheros que contienen a l g h tip0 de
ntimro mdgico (es de&, 10s ficheros que contienen un mlmero que iderPtifique su tipo). Si el
fichero a examinar aparece como un fichero de texto, la utilidad file examina 10s primems 512
bytes, tratando de identificar si es un fichero de texto, de datos o de alg6n lenguaje.

Formato
[-ffiiherofl [-mjkheromJfihero
file [e] ...
Opciones
-c Hace que la utilidad file s610 visualice el fichero/etc/mugic en formato legible.

-ffiherof Indica que el fichero especificado enfieherof contiene los nombres de 10s fick-
ros que van a sex visualizados.
-mjkherom Da instrucciones a la utilidad file para usar el fichero especificado ennherom
como un ficheromgic altemativo.

Argumentos
fiihero Es el nombre del fichero (0 ficheros) que va a ser examinado por la utilidad file.

Ejemplos
El siguiente es un ejemplo de identificaci6n de ficheros con el mmando file:

$ file who.salpr4431.Ist binltrsuariosbin pr98.eworprimos.c /devhty


who.sal: asai text
pr4431.k data
binlusuarios: commands text
bin: directory
pr98.emr: empty
prim0S.C: c progmmspedal
ldevltty: character special

2 -MAh'EJO DE FICHEROS 43
Programas de Utilidad UNIX

Utilidad Is
Descripcih
La utilidad Is visualiza, en el smdurd-output, informaci6n relativa a uno o mils ficheros o di-
rectories especificados en el command-line. Por defecto, la salida generada por la utilidad Is es
clasificada alfWcamente por 10s nombres de fichero.

Formato
Is [-opciones] mhero ...Idirecrorio 1 ...
Opciones
Las opciones detaminan el tip0 de informaci6n que va a visualizar la utilidad Is, y el orden en
el que va a ser visualizada (ver "Ejemplos",pagina 46). Si la utilidad Is es emitida sin apciones,
s610 son visualizados 10s nombres de 10s ficheros.

-a Lista todos l a fickos, incluyendo los fichos OCUltoS (aquellos cuyos nombres co-
mienzan con un sign0 punto (.)), los cuales no son usualmente listados.
-c Utiliza la fecha de la tlltima modificaci6ndel inode (fichero creado, modo cambiado, e&.)
para clasificar 10s ficheros cumdo se combina con las @ones -t y/o -1.
-C Clasifica los ficheros pur orden alfaWco en multicolumnas verticales. Este es el defdo.
-d Si se especifka un dkectaio como argumento, s610 lista su nombre si la @6n d es
combinada con la opci6n -1 se obtienen las Caracteristicasde ese directorio.
-F Agrega a los nombres de 10s siguientes tipos de ficheros, uno de los siguientes caracteres:

/ Si es un fichero directorio.
* Si es un fichero ejecutable.
= Si es un fichero socket.
0 Si es un fichero con fink simb6lico.
I Si es un ficheroFIFO.

-g Visualiza la misma infonnaci6n que la opci6n -I, except0 que no incluye la columna pro-
pietario del fichero.

-i Visualiza en la primera columna el niimero de inode de cada fichero.

-1 GmKa un listado de varias columnas pop cada fichero con la siguiente informaci6n:

.
9 El tip0 y el modo de acceso del fichero.
El niimero de finks.
9 El nombre de usuario propietario del fichero.

..
= El nombre de grup al que pertenece el propietario del fichero.
El tamailo en bytes del fichero. (Si es un fichero especial, el nclmero de dispositivos).

.La feeha ( m a dla y hora) de la atima mOdificaci6n


El nombre del fichero.

44 -
2 M N E J O DE FICZIEROS
Progrdmas de Utilidad UNIX

La primera columna (tip0 y modo) consta de 10 caractexes (por ejemplo: -rwxrwxr-x).


El primer carilcta distingue el tip de fichero, y puede ser uno de 10s siguientes:

- Ficheroordinario.
b Fichero especial de bloque.
c Fichero especial de cartfcter.
d Directorio.
1 Link simb6lico.
p Fichero especial FIFO (Ilamadopipe).
s Fichero socket.

El modo de un fichero est4 representado por 10s 9 caractera que van a continuaci6n del
tip (rwxrwxr-x). Los 9 caractaes e s t h divididos en tres juegos de tres caractaes. Cada
juego de tres caractem (MX)qresenta 10s permisos de lectura (r), escritura (w) y ejecu-
ci6n (x) currespondientes a las tres clases de usuario (user, group y other), respectiva-
mente. Un gui6n (-) indica que esa clase de usuario no tiene ese tip0 de permiso.
Una letra s ea la tercera pici6n en los dos primaos juegos de caractem, indica que el
fichero tiene establecidos los permisos de ID de usuario y grupo en ejecuci6n. @ cambio
I
del modo de un fichero puede verse en la secci6n: “UtiMzd chmod”, pagina 30). Cada
lista de ficheros va precedida de una linea de status, indicando el mlmero de bloques ocu-
pados en elfile-system por 10s fickos de ese directorio, en unidades de 5 12 6 1024 bytes
(dependiendo del sistema), incluyendo bloques indirectos.
-m Visualiza los ficheros separados por signos comas.

-n Genera la misma i n f h 6 n que la apci6n -I, except0 que visualiza los IDS nu&cos
de usuario y grupo, en vez de 10s nombres de propieiario y grupo de cada fichero.

-0 Genera la misma salida que la opci6n -I, except0 que no incluye la columna del grupo.

-P Agrega al final de cada nombre de directorio un carkter barra i o c l i ~ d a(0.

-r Visualiza la lista de ficheros en orden aIfWco inverso, o si se usa con la apci6n -t o -u,
en orden de fecha inverso @or el atimo fichero modificado o p a el primer0 accedido).
-R Lisa todos nuestros subdirectorios recursivamente (con sus respectivos ficheros).

-s Lista el tamafio de cada fichero en bloques de 512 6 1024 bytes (segh el sistema).

-t Clasifica la lista de ficheros en orden a la fecha de la fltima modificaci6n.


-U Si se utiliza con la opci6n -t, clasifica par la fecha del atimo fichero accedido. Si se utili-
za con la apci6n -I clasifica por la fecha del tiltimo fichero modificado.
-X Clasifica 10s ficheros por orden alfaWco en multicolumnas horizontales.

Argumentos
fichero I directoh
Son los ficheros o directorios que van a sex listados. Si no es especificado nin@n argu-
mento, la utilidad Is visualiza informaci6n de 10s ficheros del directorio en curso.

2 - M N E J O DE FICffEROS 45
Promamas de U t i l W UNIX

Ejemplos
El siguiente comando Is genera una lista de los ficheros de nuestro directorio en curso, inch-
yendo 10s ficheros ocultos, por orden alfaWco y en multicolumnas, agregando a 10s nombres
de 10s ficheros ejaxtables un signo * y a 10s nombres de 10s directarios un signo /:

$Is-*
J .pmfiie el ejecuta* salidas
.I bid calendar labores text0

El siguiente ejemplo genera una lista con las caractetisticas de 10s ficheros y subdirectories del
directorio en curso, clasificada por la faha de la @timamodificaci6n:

$ Is -It
total 96
drwxr-xr-x2 usuario grupo 4096 May 2109:17 bin
-l-w-r-r-l usuario grupo 108 May 161516 calendar
4w-r-r-1 usuario grupo 22415 May 1011:06 salidas
-rwxr-r-x 1 usuario grupo 948 Mar 281210 l a h
--rw.r-xr-sl osuario grupo 16374 Mar 71600 ejecuta
drop.r+cr-x2 usuario grupo 40% Feb 221059 c
4w-rw-r-I usuario grupo 235 May 301997 t e a

El siguiente script, espacio, visualiza el nfimero total de bytes de 10s ficheros de nuestro directo-
rio en curso, modificados el mes de mayo, de cudquier aillo:
$ cat espatw
#%ink&
-
# script: apacio Vbaliza d nGmero de bytes de 10s fKheros del d
&
o en curso.
Is -1 I grep I8wk'$6 =way" {sum+= $5 }
END {print "T& Usurn" bytes"

$ espacio
Total: 22758 bytes

El siguiente script, llamado Idir, visuaiiza pop orden alfWco, las caracterfsticasde los subdi-
rectorim de nuestro directorio en curso. (Ver "Utilidud grep", p a g i ~114):

$ cat ldir
#!&ish
-
# script: ldir V~ualizalas caracterkticasde 10s subdirectorias del directorio en curso.
Is -dI grep '%'

$ ldir
d m - x r - x 4 usuario grupo 4096 Feb 210820 .
dm-=-x8 U S U ~ ~ ~ O grupo 4096 Feb 121051 ..
dnvrr-xr-x 2 usuario grupo 4096 May2109:17 bin
d m - x r - x 3 usuario grupo 4096 Feb 2 2 1 0 9 c

El siguiente ejemplo visualiza un Iistado completo, clasificado en orden inverso a la fecha de


modificaci611, de los ficheros que contiene nuestro subdirectorio bin:

$ IS -Itr birr
total 5
mr-xr-x 1 usuario g-po 151 Apr 261522aloja
-rwxr-xr-x 1 usuario grupo 345 May 417:06proces0s
-rwxr-xr-x 1 usuario grupo 321 May 121643dt
mr-xr-x 1 usuario grupo 44 May 21 0917 ldir

46 -
2 MANEJO DE FICHEROS
Programas de Utilidad UNIE

Utilidud cat
Descripcih
La utilidad cat lee en secuencia el contenido de 10s ficheros especificados en el command-line y
lo visualiza en el st&rd-output. El comdo cat es firecuentemente utilizado con el cadcter
de redirecci6n >, para comtenar verticalmente 10s ficheros especificados y escribirlos en el
entmo especificado. Tambih es utilizado con los dos caractem de redirecci6n >>, para agre-
gar el contenido de un fichero a otro secuencialmente.

Formato
cat [-opcionesl where ...I

Opciones
-b Numera las lineas de salida, secuencialmente desde 1, except0 las Uneas blancas (s610 en
la versi6n Berkeley).

e Visualiza un &ctm d6lar ($) al final de cada linea de salida; esta apci6n debe usarse
con la opci6n -v.

-n Esta opci6n numera todas las lfneas de salida, secuencialmente desde 1, (~610en el sists
ma Berkeley).
4 Hace que la utilidad cat no visualice mensajes de mor si el f i c k o que se va a tram no
existe.

-t Visualiza Ios tabulaches que contenga el fichero de la forma "I, esta opei6n debe ser
combinada con la opci6n -v.

-U Esta apci6n hace que la utilidad cat no incluya la salida en un buffer.


-V Visualiza 10s caractetes no imprimibles.

Argumentos
fichero Es el nombre o nombres del fichero o ficheros que van a ser tratados y visualizados
por la utilidad cat.

Si en el command-line cat no especificamos ningCln fichero o especificamos un ca-


tactex gui6n (-) como argumento, la utilidad cat lee la entrada del standard-input.
-
Pueden ser especificados mfiltiples caractcres como argumentofihero. Por ejem-
plo, en la siguiente especificaci6n:

catfilel -fife2 >file3

el ficherofife3 contendra la primera entrada del ficherofifel, la segunda entrada del


standard-input (terminada con <Ctrl-d>),y la tercera entrada del ficherofile2.

-
2 MMEJO DE FXCHEROS 47
Progmmas de Utilidad UNIX

Notas
Si el contenido del fichero que queremos visualizar Ocupa rrcls de una pantalla, se aconseja utili-
zar las utilidades more o pg (ver “UtiZidad mare”, pAgina 49 y “Utilidad pg”, pilgina 52, res-
pectivamente). Para visualizar un fichero cuyo contenido no sea texto (por ejemplo, un fichero
de programas ejecutable), utilizar la utilidad od (ver “Utilidad ud”, pAgina 74). La utilidad paste
concatena ficheros horizontalmente (ver “Utilidad paste”, p6gina 129).

En algunos casos, el comando cat debe utilizarse con precauci6n. En el siguiente ejemplo, 10s
datos del fickopnrl se perMan:

catpnrlpnr2 >pml

Ejemplos
El siguiente comando visualizarA en el standard-output el contenido del fichero notas:

$ cat notas
...
El siguiente mmando cat concatena tres ficbos y 10s redirige al nuevo fichero kesJ

El siguiente ejemplo especifica que una cqia del fichero seccion4 es agregada al final del con-
tenido del fichem capiftrlol:

El mmando cat nos permite crear ficheros (no modificarlos), emiti6ndolo de la siguiente forma:

$ cat >pacat
fite texh es inbducido
desde el teclado de un terminal.
Para indicar elfin de
<Cki-d>

Del mismo modo, per0 con 10s caracteres >>, podemos agregar lineas de texto al final del con-
tenido de un fichero existente:

$ cat >>pnrcat
@hero, presionar AD
<Cnl-d,

En el siguiente ejemplo, unpipe envla la salida del comando who al standard-inpcrt del c o w -
do cat, La utilidad cat crea el ficheros&, cuyo contenido seri: en primer lugar el contenido
del fichero cabecerus, seguidamente la salida generada por el comando who, y finalmente el
contenido del fichero inform:

-
$ who I cat cabecerus infonne > salida

-
El car6cter (gui6n) del commd-line hace que la utilidad cat lea el standard-input &put%
del fichero cabeceras y antes del fichero infonne.

48 -
2 M M E J O DE FICHEROS
I

Programas de Utilidad UNIX

Utilidad more
Descripcibn
La utilidad more, tambien invocada como page, es unfiltro que permite visualizar el contenido
de un fichero de forma continua en modo screenful (pantallas completas de texto de UM vez),
pantalla a pantalla. Si emitimos el comando page en vez del comando more, la pantalla del ter-
minal ser6 barrada antes de visualizar cada screenful. Ambas utilidades establecen el terminal a
modo noecho, de modo que las salidas puedan ser continuas.

Por cada screenful visualizada, la utilidad more hace una pausa, mostrando en la filtima linea un
prompt en vfdeo inverso con el nombre del fichero que estA visualizando, junto con un porcen-
taje que indica el 5% del tamafio del fichero que ha sido visualhado hasta ese momento. En res-
puesta a esteprompf, el usuario puede emitir en cada pausa cualquier subcomando de la utilidad
more para controlar la salida del fichero.

Formato
more [-opciones] mhero ."I

Opciones
c Cada screenful comienza d principio de la pantalla del terminal, y barra cada linea
existente antes de visualizar una nueva linea. Est0 evita el desplazamiento de la
pantalla, Wendo m h fkil la lectura mientras la utilidad more estA escribiendo.

-d Visualiza el prompt con i11formaci6n maS explicativa que la visualizada por defecto.
-e Esta apci6n hace que se salga de la utilidad more inmediatamente despub de visua-
lizar la Wma linea del filtimo fichero especificado en el command-line.
-f Cuenta lfneas 16gicas, en vez de lineas fisicas de la panralla; es k i r , las Ueas que
no eman en la pantalla no son ftaccionadas.
-i Ejecuta correspondencia de plantillas sin tener en cuenta las le€ras maflsculas.

-nnfineas Especifica el nclmero de lineas a visualizar por cada screenful. El argumento nlrireas
es un nclmero decimal enter0 y pcsitivo.

-pcmd Inicialmente, par cada fichero examinado, la utilidad more ejecuta el argumento
cmd. Si el argumento cmd es un comando de posici6n, por ejemplo un nclmero de lf-
nea o una expresi6n regular, la posici6n en curso es establecida al representar el re-
sultado final del comando sin escribir lineas intermedias del fichero.

-S Cuando el fichero tiene mclltiples llneas blancas adyacentes, la utilidad more las vi-
sualiza como una linea blanca dnica.

+nrimfin La visualizaci6n del fichero comienza en el rnimero de linea especificado en nrimlin.


+/plantiUaHace que la utilidad more comience la visualizaci6n en la linea que contenga la ex-
presi6n especificada enplantilla.

-
2 MANEJO DE FICHEROS 49
Progmmas de U t i M UNIX

Argumentos
@hero Es el nombre o nombres del fichero o ficheros que van a ser lratados y visualizados
por la utilidad more. Si no especificamos ningtln fichero, la utilidad more toma la
entrada del standard-input.

Subcomandos
La utilidad more praporciona los siguientes subcomandos, 10s cuales pueden ser emitidos cuan-
do la utilidad more hace UM pausa. Estos subcomandos est411 diseflados como 10s del editor vi;
toman efecto inmediatamente, no es necesario pulsar <RETURN>. (El argument0 n es un nfime-
ro opcional que busca la ocurrencia enCsima de la plmtilla; su valor de defecto es 1):

ncRETUR-
nj Los dos comandos avanzan n lineas. El defecto (es deck, si no damos valaes a n)
avanza 1 lfnea.

napace>
ncCtrl-f>
nf Los tres comandos avanzan n lineas.El defecto avanza 1 screenful.

ncCtrl-b
nd Los dos comancbs avanzann lineas. El defecto avanza media screen@. Si se especi-
fica n,&e valor ser6 el nuevo defecto de 10s subsiguientes comandos d y u
nk Retroceden lineas.El defectoretrocede 1 linea.

ncCtrl-b>
nb Los dos comandos retrocedenn lineas. El defecto retrocede 1 screenful.

ncCtrl-u>
nu Los dos comandos retroceden n lineas. El defecto retrocede media screenful. Si se
especifica n, &te valar sera el nuevo defecto de Ios subsiguientes comandos d y u.

ng Este comando nos lleva al ntimero de llnea especificado en n. El defecto de n es 1, lo


cual nos lleva al comienzo del fichero si no especificamos n.

nG Nos lleva al niimero de linea especificado en n. El defecto es el final del fichero.


nlplantilla Examina el fichero hacia adelante para localizar la enbima ocurrencia de la plantilla
especificada enplantilla. Si la plantilla es encontrada, la utilidad more visualiza una
screenful coxnenzando en la llnea que contiene la plantilla correspondida. El defecto
den es 1.

nn Repite la biisqueda para la ocurrencia enbima de la CIltima expresi6n introducida.

nN Repite la btisqueda para la ocurrencia enbima de la tiltima expresi611, per0 invierte


la direcci6n de la btisqueda.

n:n EX&M el siguiente fichero enbimo especificado en el command-line.

n:p Examina el fichero previo enCsimo dado en el command-line.

50 -
2 MANE/O DE FICHEROS
P r o d m a s de Utilidhi UNIX-

:ejWzeru E x a m i ~
el nuevo fichero especificado enjkheru. Si omitimos el nombre de fichero,
es examinado el fichero en curso.

mletra Marca la posici6n en curso con la 1eb.a (a-z) especificada en lefra.

'Zetra Nos lleva a la posici6n previamente marcada con la letra especificada en Zetra.
69
Los dos caracteres ap6strofos nos llevan a la posici6n previa.

cCtl1-p
- Los dos comandos visualizan el nombre de1 fichero en curso y el estado.

V Invoca el editor vi en la linea en curso del fichero en curso.


h Visualiza un sumario abreviado de los subcomandos de la utilidad more.

zz
:q
q Con cualquiera de los tres comandos salimos de la utilidad more.

La utilidad more ~X-M la base de datos tem'nfu y las variables de entorno corr~pondientes
para &erminar las 'cas del terminal y el tamafio de la pantalla de defecto. En un ter-
m i d que puede visualizar 24 Ifneas, el tamaiI0 de la pantalla more es de 23 Uneas. La filtima
linea se usa para visualizar elprompt. La apci6n -n anula 10s valores de las variables de entorno.

El shell dispone de la variable de entorno MORE,la mal puede ser utilizada para establecer op-
ciones de la utilidad more Par ejemplo, si queremos que la utilidad more, siempre nos visuali-
ce unprompt con m4s inforrnaci6n explicativa que la de defecto, introducir la primera linea del
siguiente ejemplo en nuestro fichero .prujZe si utilizamos el shell Bourne o el shell Korn, o la
segunda linea en nuestro fichexo.csihrcr si utilizamos el shell C:

MORE=-d ;export MORE


setenvMORE-d

Ejemplos
La utilidad more es hentemente utilizada como unfiltro en cripts o command-lin, que ge-
neran largas salidas. Por ejemplo, el siguiente script, cuentas, genera un lista clasificada alfaw-
ticamente, de 10s usuarios con sus nombres reales, que tienen menta en nuestro sistema. La vi-
sualizaci6n de la lis& es controlada por la utilidad more:

!$ cat euentas
#!/bidsh
-
# scripk cuentas ControIa la visualiici6a eon cl amando mre.
#
sort Ictdpasswd I awk 'BEGIN { FS=":" }
{ printf ("Ult%-lOs\t%S%m, $1, $5) )' I more

Cuando la utilidad more visualiza un fichero a travb de un pipe, el prompt visualizado en cada
pausa mntiene la palabra stdin, en vez del nombre de fichero y del 6 de la informaci6n leida.

-
2 MMEJO DE FICHEROS 51
Programas de U t i l W U M X

Utilidud pg
Descripcidn
La utilidad pg nos permite visualizar el contenido de ficheros de texto por pdginas o screenfils
(pantallas coxupletas de texto de una vez). Por cada pdgina visualizada, la utilidad pg hace una
pausa y nos muestra unprompt, que por defecto es el cariicter dos puntos (:). En respuesta al
prompt pg, podemos introducir subcomandos de la utilidad pg, por ejemplo: para visualizar la
siguientepdginu, situamos en UM linea detaminada, salirm>s de la utilidad pg, etc.

Formato
pg [-opciones] vxhero ...I

Opciones
c Posiciona el cursor y limpia la pantalla antes de visualizar cadapdgina.

e No hace pausa en la tiltima pdginu visualizada de cada fichero.


-f Esta opci6n hace que no sean fraccionadas las lineas largas. Normalmente, la utili-
dad pg parte las lineas que son mlis largas que el tamafb de la pantalla. Esta apci6n
es usada en ficheros que contienen ciertas secuemias de escape, por ejemplo, las que
tienen caracteres para que el terminal visualice text0 subrayado o en video inverso.

-U Esta opci6n hace que 10s subcomandos de la utilidad pg tomen efecto tan pronto co.
mo 10s emitamos, sin esperar a que presionemos la tecla <RETURN>. Generalmente,
10s comanh de la utilidad pg deben finalizar con un carkter <numa-Zfneu>.

-p cadena Ham que la utilidad pg use la cadenu especificada en cadem como el nuevoprompt
de la utilidad pg. Si la cadem eSta mmpuesta de 10s caractem W , el prompt de de-
fecto (:) es sustituido por el nfimero de la screenful en curso. Si la cadena contiene
espacios o 10s caracmes de redirecci6n < o >, la eadem debe ir entrecomillada.

-S Hace que el prompt y 10s meusajes sean visualizados en modo video inverso.

+nhzlin La visualizaci6n del fichero comienza en el nrimero de linea especificado en nlimlin.


-1fma.s Especifica el nfimero de lineas (lineas)que se van a visualizar en cada window pg,
en vez de utilizar el defecto. (En un terminal capaz de visualizar 24 lineas, el tamaiio
de la window pg es de 23 lineas).

+/pW La visualizaci6n del fichero comienza en la primera linea que se corresponds con la
plantilla especificada enplant.

Argumentos
fichero Es el nombre o nombres del fichero o ficheros que van a ser visualizados por la utili-
dad pg. Si especificamosfichero como un car&.ctergui6n (-) o ejecutamos la utilidad
pg sin argumentos, la utilidad pg tom la entrada del standard-input.

52 2 -MANEJO DE FICHEROS
Progrdmas de Utilidad UNIX

Subcomandos
Cuando la utilidad pg hace una pausa y visualiza el prompt, entomes pdemos emitir cualquier
subcornando de la utilidad pg, el cual afectard a la salida que se esa visualizando. Los s u m
mandos de la utilidad pg pueden ser divididos en tres categdas: subcomandos de posicidn,
subcomandos de biisqueda y subcomandos de entorno.

Subcomandos de posicibn
Los siguientes comandos visualizan un lugar seleccionado en el fichero:

amurn Visualiza la siguiente screen@.


nzhnero Visualiza la screenful especificada en nrlmro.

+nlimero Visualiza la screenful dada en nlimero a partir de la screen@ en curso.

nzhero Vializa lapdgina dada en n&aero hacia atrils de lapdgina en curso.

1 El subcomando I hace que la visualizaci6n avance una linea.

+nzjmrol La visualizaci6n avanza el niimero de lineas especificado en ndmero.

-nkmro! La visualizaci6n retrocede el niimero de lineas especificado en nlsmero.


d I 4 f r f - bAmbo6 subcomandos a v m media screenful.

-d Rebrocede media screenful.

.I <Ctrl-b Ambos subcomandos vuelven a visualizar la screenful en curso.

$ Visualiza la tiltima screenfil del fichero. No es mnsejable utilizar ate comando


cuando la entrada viene de un pipeline.

Subcomandos de btisqueda
Los siguientes subcomandos buscan plantillas de text0 en el fichero. Pueden utilizarse cadenas
o expresiones regulares, ver CExpresiones regulares", pagina 107). Las plantillas deben finali-
zarse con <RET[IRN>, aunque se haya especificado la apci6n -a(El argument0 n es un nfimero
opcional, que busca la m e n c i a etr&ima de la plantilla, su valor de defecto es 1):

n/p&zntiU&mb Busca la m e n c i a enbima de la plantilla especificada enplnntilla. La


b&queda mmienza desputsS de la pdgina en curso y continfia hasta el fin del
ficko en curso. Si no se especifica n, la utilidad pg visualiza la primera
m e n c i a encontrada.
n ? p l ? h z b Busca en sentido inverso la m e n c i a en&ima de la plantilla especificada
en plantilla. La b~squedacomienza &pub de la pdgina en curso y mnti-
nfia hasta el comienzo del fichero en curso. El defect0 de n es 1.

Las lmas t, m y b son apcionales. Por defecto, desputsS de cada bfisqueda, la utilidad pg visuali-
za la linea que contiene la p W U u currespondida al principio de la screenjid (t). La visualiza-
ci6n de la linea carrespondida puede sa seleccionada en medio de la screenful (m)o a1 final (b).

-
2 M N E J O DE FICHEROS 53
Programas de Utilidad UNIX

Subcomandos de entorno
Con 10s siguientes comandos podemos cambiar el entorno de la utilidad pg. (El argumento n es
un argumento numQico opcional, que examina la m e n c i a enbima, su v a l a de defecto es 1):

nn El examen comienza en el siguiente fichero enbimo del command-line. Si no se es-


pecifica n,el valor de defect0 es 1.

nP El examen comienza en el fichero previo enhimo del command-line. Si en n no es-


pecificamos ningiin nfimero, el valor de defecto es 1.

nw Establece el tamafio de la window al nfimero de Uneas especificado en n. Si en n no


especificamos nimn nfimero, la utilidad pg visualiza otra window de texto.

sfichero Salva el fichero que se est6 examinando en el fichero especificado enfukro. Este
comando siempre debe ser finalizado presionando <RETURN>.

h Visualiza un sumario abreviado de 10s subcomandos de la utilidad pg.

slQ Con ambos subcomandos salimos de la utilidad pg.

komando El comando especificado en contando es pasado al shell y ejecutado por el shell en


curso. El comando dado en cornando debe sa terminado con un carktm cnueva-
linea>, aunque se haya especificado la opci6n -11

Notas
La utilidad pg examina la base de data terminfo y las variables de entmo coerespondentes
para determinar las caracterkticas del terminal y el tamafio de la window de defecto. En un ter-
minal que puede visualizar 24 lfneas, el tamaflo de la window pg es de 23 lfneas. La &ima lfnea
se usa para visualizar el prompt. La opci6n -lineas anula 10svalaes de las variables de entorno.

Cuando se visualha la atima screenful de un fichero, la utilidad pg indica el fin del fichero en
el prompt pg con la cadena @OF):, a no ser que hayams especificado la apci6n -e.

Ejemplos
La utilidad pg tambien es utilizada con fiemencia en scripts y command-lines para visualizar
salidas largas. Por ejemplo, el siguiente command-line visualiza las noticias de nuestro sistema,
indihdonos en el prompt el nfimero de la pmtalla en curso:

$ news -a I pg -p “(Pankrlla M):”

Si en el script cuentas utilizamos la utilidad pg con las opciones indica-, el prompt de cada
screenful sera visualizado en video inverso y con el nombre del fichero:

$ cat cuentas
#tJbinlsh
-
4 script: cueatas Us0 de la utilidad pg.
sortIetdpasswd I owk ‘BIGIN { FS=”:” }
{ printf (%t%-IOS \tZs\nn, $1,$5) )’ I pg -s -p “cuentas”

54 -
2 MAlUEJO DE FICffEROS
Progfamas de U t i l W UNIX

Utilidad pr
Descripcidn
La utilidad pr formatea y visualiza el contenido de uno o varios ficheros. Los dos usos maS co-
munes de la utilidad pr son la impresi6n de programas fuente y el formate0 de salidas de datos.
Par defecto, la salida producida por la utilidad pr es dirigida al standard-output, pop ello, si el
i usuario quiere imprimir la salida deberg redirigirla, mediante un pipe, a la utilidad Ipr para ser
listada por UM impresora. (Ver “CJtifidudlpr”,pagina 94).

Por defecto, la salida genmada por la utilidad pr es dividida en p@nas de 66 lfneas, en las cua-
les estan incluidas 5 lfneas de cabecera y 5 lfneas de pie. La cabecera consta de 2 lfneas blancas,
1 de texto (con el niimero de pfigina, la fecha y la hora de creaci6dmodificaci6ndel fichero y el
nombre del fichero) y 2 lfneas blancas. Las lfneas del pie son las 5 blancas.

En salidas de columna-finica el tamaA0 de lfnea no puede ser establecido y es ilimitado, por lo


que las lfneas no son truncadas. En salidas de multicolumna el tamaAo de la lfnea puede ser es-
tablecido, siendo su tamaAo de defecto 72 columnas; las lfneas que no se ajustan d tamafio de la
columna son truncadas.

Si el standard-output es el terminal, la utilidad pr no notificarii 10s mensajes de diagn6stico


producidos en la aperaci6n hasta que no finalice la visualizaci6n.

Formato
pr [-opciones] @hero ...I

Opciones
-a Visualiza la salida en multicolumnas, una lfnea por columna. Esta opci6n s610 es sig-
nificativa en combinaci6n con la @6n -cot modifica la opci6n -col, de modo que las
columnas Sean visualizadas unas detrh de otras. Si una lfnea es demasiado larga para
ajustarse en UM columna, la lfnea es truncada.
-d La salida generada por la utilidad pr es visualizada a doble espacio.

-e[c][n] Expande tabuladares de entrada a las posiciones n + l , 2*n+l, 3*n+l, y asf sucesiva-
mente. (El valor de defecto de n es 8 espacios). Los tabuladores de entrada son expan-
didos d mlmero apropiado de espacios. Si especificamos c (cualquier cdcter que no
sea un dfgito), ese car6cter sera tratado como un caritcter tabulador de entrada. (El va-
lor de defecto de c es el d c t e r tabulador ASCII).

-f Utiliza un carfictersalto de p a g i para


~ el salto de nuevas pAginas. Por defecto, la uti-
lidad pr ernite una secuencia de caracteres nueva Una. Si el standard-output es un
terminal, la utilidad pr hace una pausa antes de comenzar la primera p a g i y~ emite un
sonido de atenci6n para que presionemos <RETURN>.

-h titulo Es el tftuloque sera impreso en la lfnea de texto de la cabecera, en vez del nombre del
fichero. Si el tftulo especificado en titrClo contiene espacios, debera ir encerrado entre
comillas. L a apci6n -h sera ignorada si la opci6n -t es especificada, o si el valor ape-
cificado en la opci6n -1 es 10 o menor de 10.

!
-
2 MANEJO DE FXCHEROS 55
Programas de Uiilidad UNIX

Reemplaza espacios por tabuladores en las posiciones n+Z, 2*n+l, 3%+l, y asf suce-
sivamente. (El valor de defecto de n es 8 posiciones). Si se especifica c (cualquier ca-
ratter que no sea un dfgito) este caracter se convertir6 en el caracter tabulador de s&-
da. El valor de defecto de c es el carktef tabulador ASCIL

Establece el tamafio de la pligina al nfimero de lfneas especificado en nlin (el defecto


es 66 lineas por p a g i ~5, de cabecera, 5 de pie y 56 para insertar texto). Si el nfimero
especificado en nlin es 10 o menor de 10, la utilidad pr suprim : la cabecera y el pie,
como si la apci6n -t estuviese vigente,

Combina e imprime simultbeamente todos los ficheros especificadosen el commund-


line (uno por columna). Las lIneasque no se ajusten al tamail0 son truncadas. No utili-
zar esta opci6n con las opciones -col y -&

ProporCiona la numeraci6n de las lineas del fichero. El nfimero espedficado en n in&-


ca el ntlmero & posiciones que tendd cada ntlmero de linea @ordefecto, n es 5 posi-
ciones). El nfimero Ocupa la primera posici6n n+I de cada columna. Si especificamos
c (cualquier car&cter que no sea un digito) este caracter es agregado al nfimero de linea
para separar el nfimero del contenido del fichero. (El valor de defecto de c es un tabu-
lador ASCII).
-0deca.l Hace una sangrfa en cada mea de salida de las posiciom especificadas en decal (el
defecto es 0 espacios).

Hace UM pausa antes del comienzo de cada p 6 g i ~si la salida es dirigida al terminal.
La utilidad pr emite un sonido de atenci6n para que presionemos <RETURN> en cada
O pagina.
C O m i ~ de

No visualiza los mensajes de diagn6stico si el sistema no puede abrir 10s ficheros.

Separa columnas con el aricter rfnico especificado en c, en vez de con el ntlmero de


espacios apropiado (el defecto de c es un caracter tabulador).

No imprime las 5 Ueas de la cabecera ni las 5 lfneas del pie. El us0 de la opci6n -t
anula el de la opci6n -h
Establece el tamaflo de una lfnea a las posiciones espedficadas en n. (Si no se especi-
fican las @ones -wni -s,el tamaao de defecto & una linea es 72 columnas). La op-
ci6n -ws610 es efectiva en salidas de multicolumna (opciones -coZ y -m).

402 Hace que la utilidad pr visualice la salida al nfimero de columnas especificado en -coC
(el defecto es 1 columna). En salidas de multicolumna, la salida aparece como si estu-
viesen especificadas las opciones -I y -5. No utilizar la opci6n -coZ con la opci6n -m

La visualizaci6n comienza en el nfimero de p6gina especificado enpag (el defecto es


la p a g i ~1).

Argumentos
@hero Es el nornbre o nombres del fichero o ficheros que van a sa visualizados. Si enfi-
chero no es especificado ningtln fichero o es especificado un caractex gui6n (-), la
utilidad pr toma la entrada del standard-input.

56 -
2 MAh'EJO DE FICHEROS
Pro&&rnas de Utilidad UNlX

Notas
El sistema UNIX dispone de otros programas para formatear datos. Las utilidades expand y
unexpand se utilizan para agegar y eliminar, respectivarnente, tabuladores de un fichero. Otra
utilidad, el editor sed, tambien se utiliza para formatear ficheros, con el cual es c6modo: reem-
plazar tabuladares por espacios y viceversa, convertit un fichero a doble espacio, eliminar blan-
cos de finales de linea, etc. (ver “EDITOR sed”, pfigina 139).

Ejemplos
El siguiente ejemplo imprime el fichero pr0g.c por la impresora 22j, con las lfneas numeradas y
con el titulo PROGRAMA PRINCIPAL en la lfnea de cabecera, en vez del nombre del fichero. (La
opci6n -f se incluye para asegurarnosque el salt0 de pagina se hace cada 66 lineas):

$ pr -n-f -h “PROGRAMA PRINCIPAL”prog.c I Ipr -P22j

El siguiente ejemplo imprime por la impresora 22x 10s ficheros Ustal y fita2 simultheamente,
a doble espacio, con ias lfneas numeradas y sin cabecera ni pie. (Term en menta, que los fiche-
ros s e r h listados a Qs columnas, UM columna por fichero, lo que podria truncar lineas):
$ pr -m-d -n3 -t listal lisW I Ipr -P22x

El siguiente scrip?, logins, visualiza 10s nombres de login de nuestro sistema, clasifiCandolos
por orden alfabetico, en 4 columnas, con expaosi6n de tabuladores, supresi6n de cabecera y pie,
y ordenados alfMcamente por lineas. La salida es cmtrolada por la utilidad more:

$ cat rogins
Wbinfsh
-
I script: logins Viualha Ios loginsdel sisterna a 4 columnas.
#
awk ‘BEGIN { W::” } { print $1 /ttclpasswd I
sort1 pr -4 -t-11 I more

$ logins
a200 a220 a400 aaramend
abarran adm admtin admfina
adminl admid adqadmin afiwm
alemo aljavi almaap almacen
... .. .- ...
Si queremos que el scrip?logins visualice la salida a 7 columnas y ordene 10s nombres de login
por columnas, en vez de por lineas, el script puede ser escrito de la siguiente forma:

fi cat logins2
#!/binfsh
-
# script: logins2 Viiualiza 10s logins del sistema a 7 columnas
#
awk ‘BEGIN [ FStn:” } { print $1 )’ /etr/passwd I
sort I pr -7-t -w90 I more

$ logins2
a200 compras lraber il2ga17 inbasbid operator sergen
a220 comprasl frawan il2gpOl inbasgb oracle sergral
a400 compras2 fusion ilZgpO2 infwmac orad serw-
aaramend compras3 garas il2gpO3 ingresos ones seta
.” ... ... .I ... ... ...

-
2 MANE10 DE FICHEROS 57
Programas de UtiMad UNIX

Descripcitjn
La utilidad cp realiza copias de ficheros de tres furmas: de un fichero a otro fichero, de uno o
varios ficheros a un directurio, y de un directorio a otro directorio.

Fomtato
cp [-opciones]fichero-origenfichero-desti~
cp [-opciones]fieiieros-origen directorio-destim
cp [-opciones] direetorborigen directorio-destim

Opciones
-f La utilidad cp no visual- prompt c u d la q i a va a ser h ec k sobre un fichero
existente, por lo que el fichero de destine sail sobremito. (Es el defecto).

-i Si la copia va a ser hecha sobre un fichero existente, la utilidad cp visualiza un prompt


para mnfirmar si el fichero ser6 o no sobrescrim. Una respuestag hace que la utilidad
cp contintle la copia y sobrescriba el fichero. Cualquier otra respuesta hartl que la utili-
dad cp no haga la q i a , witando la sobrescritura del fichero.

-P Esta opci6n hace que la copia conserve la fecha de modificaci6~los modos de permiso
y 10s identifhdores de usuario y grupo de origen.

-r Se usa a m d o la q i a es de un directario a otro directorio, y queremos que se copie to-


do el contenido del directario de origen (ficheros y subclirectorios) al directdo de des-
tino; si no se especificala apci6n -r, s610 se copian 10s ficheros del directorio.
-- Esta @6n marca el final de las Opciones del command-line cp, indicando que 10s ar-
gumentos que siguen a esta apci6n serh intqetados mmo ficheros. De esta forma, la
utilidad cp permite especificar nombres de fichero que comiencen con un sign0 -.

Argumentos
fichero-origen Es el fichero que va a ser copiado al fichero especificado enfichero-destim.
Con este formato s610 puede copiarse un fichero.

fichero-destino Es el fichero sobre el que se copiaril el fichero especificado enfichero-


origen. Si el fichero especificado en fxhero-destino no existe, &e ser6
creado; per0 si existe sera sobrescrito, a no ser que especifiquemos la opci6n
-i. Si enfichero-destino no se especifica ningCln fichero, el nuevo fichero
tendril el mismo nombre que el especificado enfxhero-origen.

ficheros-origen Es el fichero o ficheros que van a ser copiados en el directorio especificado


en directorio-destino, ate directorio debe existir antes de hacer la copia

directorb-origen Es el directorio cuyos ficheros (y subdirectcwios si se especifica la opci6n -r)


van a ser copiados al directorio-destinocon 10s mimos nombres de origen.

58 -
2 MmEJO DE FICHEROS
directoh-destino Es el directorio en el que se va a copiar el fichero o ficheros especificados en
fikhero(s)-origen, o el contenido del directorio especificado en ditectoh-
origen. El directorio-destinodebe existir antes de hacer la copia.

Notas
Existen otras utilidades que realizan distintas formas de copias de ficheros. La utilidad cpio co-
pia uno o m& ficheros a un fichero de archivos Wco (ver “Vfilidud cpio”, pagina 239). La uti-
lidad mv renombra fickos y directmios (vex “Vfilidud mv”, pagina 60).La utilidad In ham
link a un fichero, permitiendo la compartici6nde datos entre usuarios. La utilidad rcp cupia fi-
chaos entre sistemas remotos (ver “Ufilidadr@’, p4gina 357).

Ejemplos
El siguiente command-line q i a el ficheroprogl al ficheroprog2, el cual ya existe, par lo que
la utilidad cp visualiza unprompfpara confirmar si se hace o no la copia:

$ cp 4 progl prog2
ovmvrite pro$?

El siguiente ejemplo copia nuestros ficheros scripts, cuentas y logins, del directorio de trabajo
a1 directoriobin con los mismos nombres. (Si s6lo se especitica un fichero de origen, &e puede
ser copiado con atro nombre en el directado de destino):
$ cp cuentcrr roginS $HOMh%W

El siguiente comando copia los ficbos de nuestro directorio de trabajo cuyos nombres finali-
cen en .c, al directorio dirt:

$ cp *.c dirc

El siguiente command-line cp q i a el &bo1 (todos 10s ficheros y subdirectorios) del directorio


pruebas al directorio de trabajo en curso (.), con 10s mismos nombres que tenfan en origen:

$ cp -r $HC7M~rogrcrmas/pnrebasf* .
El siguiente script, copy, copia un fichero a otro fichero, para ello debemos teclear 0s argu-
mentos, el primer0 sera el fichero de origen y el segundo el fichero de destino:

$ cat copy
#!/bidsh
-
# script: copy &pia ficheros (fsherol a ficherat).
if [ $#-le 1 1
then
echo “Son necesarios dos argumenh.’’
exit 3
else
fichercr=$l
shift
while [ $# -ne 0 1
do
cp $fchem $1
shift
done
fi

-
2 MANElO DE FICHEROS 59
Programas de UtiWud UNIX

Descripcih
La utilidad mv mueve y/o renombra ficheros y directorios de cuatro formas:

Mueve y renombra un fichero a otro fichero en un mismo directorio.


Mueve uno o maS ficheros de un directorio a otro diratorio existente.
Mueve uno o maS directorios a un directorio existente.
Renombra un directorio dnico a un nuevo directorio.

Fomato
mv [-opciones]@hero-existente nuevo-@hero
.-
mv [.opciones]j2chero-existente directorb
...
mv [-opciones] directorio-existente directorio-destino

Opciones
-f La utilidad mv no visualizaprompt si el fichero que va a ser renombrado (el fichen, es-
pecificado en nuevo-fihero) existe, par lo que &e serd sobrescrito. Es el defecto.
-€ La utilidad mv visualiza unprompt si el fichero que va a ser renornbrado exkte. Una
respuestay alprompt, hace que el fichero sea sobrescrito y por tanto mmbrado; cual-
quier otra respuesta, hard que la utilidad mv no renombre el ficko.
- Los argumntos que siguen a esta apci6n son interpretados como nombres de ficko.
Est0 permite especificar ficheros cuyo nombre comience con un sign0 gui6n (-).

Argumentos
fxhero-existente Especifica el fichero que va a ser movido (dentrodel mismo directorio) y
renombrado con el nombre de fichero especificado en nuevo-fichero. El
fichero especifkado en@heo-existente una vez movido sera bonado.

nuevo-ficlreo Es el nombre del nuevo fichero al cud sad movido el fichero especifica-
do enfichero-existente. Si el fichero dado en nuevo-@hero existe, &te
sera sobrescrito, a no ser que se especifique la opci6n 4, en cuyo cas0 la
sobrescritura del fichero sad decidida par el usuario.

@hero-existente Especifka el fichero o ficheros que van a ser movidos al directario espe-
cificado en directorio, los cuales sera borrados despuh de movidos.

directorio Es el directorio (el cual debe existir) al que sera movido el fichero o fi-
chaos especificados en@hero-existente. Los ficheros movidos tendrih
los mismos nombres que los especificados enfihero-existente. Si s6lo
se especifica un fichero, &te puede sa renombrado.

directono-existente Es el directorio que va a ser renombrado, o el directorio o directorios que


van a ser movidos al directorio especificado en directorio-destino.

60 -
2 MANEJU DE EZCHEROS
Projmmas de Utilidad UNIX

directorio-detino Si el directorio especificado en directorio-destino ya existe, el directorio


o directorios especificados en directorio-existente Seraa movidos al di-
rectorio especificado en directorio-destimquedando como subdirectorios
de &e, siendo borrados 10s subdirectoriosdel directorio--existente.
Si en directorio-existentes610 se especifica un directorio,y el nombre del
directorio especificado en directorio-destino no existe, &e ser6 aeado y
renombrado cc i dicho nombre. El directorio especificado en directorio-
existente sera horrado, pasando antes su contenido (ficheros y/o subdi-
rectories) al diretorio especificado endirectorbdestino.

Notas
La utilidad mv amla como una conjuncidn de las utilidades cp y rm;primer0 hace una cupia de
un fichero a otro, y una vez copiado (movido) el fichero desaparece del sistema (es borrado).
(Ver “UtiZidudcp”, p6gina 58 y “UtiZidudrm”,p6gina 62).
Cuando se mueve un fichero Mco, no utilizar 10s mismos nombres en el fichero de origen y en
el fichero de destino, ya que la utilidad mv no mueve un fichero asi mismo.

Ejemplos
El siguiente ejemplo mueve y renombra el ficherodate afecha, dentro del mismo directcn-io:

$ mv datefecha

El siguiente comando mueve todos los ficheros que finalicen en .f, de nuestro directorio de tra-
bajo a l directorioprogramas/dirF,conservanda 10s mismos nombres que tenfan en origen:

$ mv *.f $HOME/jrogramas/dirF/

El siguiente comando mueve el directorio dirpru a1 directorio existentebin. El directoriodirpnr


(con su contenido) es ahara un subdirectorio del directoriobin, con nombre dirpnr:

$ mv dirpru bin

El siguiente comando mv mueve todos los ficheros del directorioprogramas/dirpnra nuestro


directorio de trabajo en curso (.) con 10s mismos nombres que tenfan en el directorio de origen
programas/ddirpnr:

$ mv programas/dirpnr .
Si de un directorio a otro s610 se mueve un fichero iinico, este fichero, ademh de sa movido, es
renombrado con el nombre especificado en el directorio de destino. Est0 lo podemos vex en el
script bortei, el cual borra 10s registros del fichero nomytel que contengan la cadena especifica-
da en el command-Zinecomo un argument0 del script

$ cat bortel
#!tbinlsh
-
# script: bortel Borra registros.
grep -iv $1textoslnomytel> textns/nomytel.$$
mv textoslnomytcl.$$ tcxtos/nomytel

-
2 MANEJO DE FICHERQS 61
Prugramus de Utilidad UNIX

Utilidad rm
Descripcidn
La utilidad rm borra el directorio o directorios especificados, y el fichero o ficheros especifica-
dos de un directorio determinado. El fichero o directorio que va a ser borrado no es necesario
que tenga permiso de escritura; si no lo tiene y el standard-input es un terminal, la utilidad rm
visualiza un prompt para confiimar si el fichero o directorio va a ser o no borrado; si el sran-
dard-inpur no es un terminal,la utilidad rm borra el fid-1~0 o directorio sin preguntar.

Formato
rm [-ogciones]fichero ...
Opciones
-f Bma todos l a ficheros especificados, aunque no tengan permisos de escritura, no vi-
sualizhdoseningtlnprompt para mnfiirmar el borrado.

-i Esta opci6n hace que la utilidad rm visualice un prompt por cada fichero o directorio
que va a ser borrado, aunque el standard-input no sea un terminal, para confirmar si
va a ser o no borrado. Una requests y al prompt, har&que el E c h o o directorio sea
bcmado, cuakpier otra respuesta que la utilidad rm no lo m e .
-r I -R Si el tip0 de fichero especificado en el argumentofikro es un directorb, entonces
-
debe especificarseuna de etas dos opeiones, baciendo que la utilidad rm borre recur-
sivamente el directorio (todos 10s ficheros y subdirectorim) sin preguntar. Si las op-
ciones -r o -Rse utilizan con la opci6n -i, la utilidad rm visualiza un prompt por cada
fichero, subdirectorio y directorio para confirmar su borrado.

Argumentos
filter0 Es el nombre o nombres del fichero(s) y/o directorio(s) que van a ser borrados.

Notas
La utilidad rm tambien se usa para borrar links hechos a ficheros y directuiios con la utilidad In
Para borrar un directorio con la utilidad rm, debe especificarse la opci6n -r o -R, si no es asf, se
produciril un mor y no se borra1-6su contenido ni el propio directorio. Un directorio vado pue-
de borrarse con el comando rmdir (ver “Utilidadrmdir”,p6gina 63).

Ejemplos
El siguiente command-line borra el fichero core, no visualizando prompt ni mensaje, aunque el
fichero core no exista:
$ rm -f core

62 -
2 M N E J O DE FICHEROS
Proat‘amas de Utilidad UNIX

El siguiente cornando burrariI 10s ficheros de nuestro directorio de trabajo cuyos nombres co-
miencen con la cadena sal, visualizando un prompt por cada fichero, &donos opci6n a borrar o
no dicho fichero; una respuestay barra el fichero, cualquier otra respuesta no afmtiva, por
ejemplo <RET(IRN>, conserva el fichero. Esta forma de burrar ficheros puede ser dtil para b
rrar ficheros cuyos nombres contengan caracmes especiales:
$ rm -i saP

El siguiente comando rm emitido interactivamente, borra el &bo1 del directorio m a d de


forma recursiva; primer0 borra 10s ficheros que contengan 10s subdirectorios,&pub 10s subdi-
rectorim, seguidamente10s ficheros que contenga el directorio martuaf, y por dltimo el propio
directorio m u d , preguntihdonos en todos 10s casos con un prompt si queremos o no borrar
cada fichero o subdicectorio:

$ rm -ir munual

Utilidad rmdir
Descripcih
La utilidad rmdir borra el directocio o directorios especificados;para poder borrar un directorio,
&e debe estar vado, y el directdo padre debe tener permiso de escfituT& La utilidad rmdir no
permite que sea barrado el directorio en curso. Para borrar un directorio con contenido, utilizar
el comando rm con la opci6n -r (ver “UtilWrm”, piIgina 62).

Forrnato
rmdir [-opciones] directorio ...
Opcwnes
-p Permite borrar 10s directorios especificadosen el nombre de path del argument0 direc-
to&. La utilidad rmdir borra recursivamente cada miembro dado en el path.

Argumentos
duedono Especifica el nombre o nombres del directorio o directorios que van a ser borrados.

Ejemplos
En el siguiente ejemplo, el primer comando, rm, borra los ficheros del directorio dirpru, el se-
gundo cornando, Is, comprueba si el directorio est4 vacfo, y el tercer cornando, rmdir, lo borra:
$ rmdirpW
$ IS -I dirpnc
$ rmdir d e r u

-
2 M m E J O DE FICHEROS 63
Programas de U t i W UNIX

Utilidad diff
Descripcidn
La utilidad diff se utiliza para comparar dos ficheros, visualizando las diferencias entre 10s dos
ficheros e indicando con comandos del editor ed las acciones que podemos realizar en un fiche-
ro (agregar, cambiar o bwrar lineas) para ham10 id6ntico al otro fichero. La salida generada por
la utilidad diff tiene distintos formates, s@n las opciones usadas y las diferencias encontradas
entre 10s ficheros implicados (ver "Ejtmplos",Mgina 65).

Formato
diff [-opciones]~herulf i k r 0 2
diff [-opciones]jicherol directorio
diff [-opciones] directoriojickru2
diff [-opciones] directuriul directuh2

Opciones
-b Esta opci6n hace que la utilidad diff ignore blancos (espacios y tabuhdores) a l final de
cada linea, siendo tratados como un caracter nueva linea.
-c Genera un listado de diferencias con tres Ilneas de contexto. La salida visualiza la
identificaci6n de 10s ficheros implicados y sus fahas de creaci6n; despuk son visua-
lizados l a cambios, separados con una lfnea de asteriscos. Las lineas que pueden sa
cambiadas de un fichero a otro son marcadas en ambos ficheros con un cartkter admi-
raci6n (!); las lineas que pueden ser baradas deljkherol son marcadas con un car&
ter gui6n (-); y las lineas que pueden ser agregadas aljicher02 son marcadas con un
Car&cte€ mas (+).
-e Visualiza y crea un script con las diferencias entre 10s dos ficheros, y 10s comandos: a,
c y d del editor ed,con cuyo script-ed se puede reconstruir un fichero del otro, es de-
cir, ham quejicherol sea igual queficheru2 (0 viceversa). La opci6n e edita 10s
cambios en orden inverso (del final al principio), para lograr que 10s cambios se hagan
correctamente a las lineas indicadas.

-f Crea un script similar al creado con la opci6n -e, per0 con la lfnea de comandos en cr-
den inverso, no dtil con el editor ed
-n Crea un script similar al producido por la opci6n -e, per0 en orden inverso y con la
suma total de lineas cambiadas con 10s comandos de insertar y borrar texto.
-c Verifica recursivamente 10s ficheros comunes encontrados en 10s directorios.

-S Visualiza 10s ficheros que son i&nticos en 10s directorios especificados.

-i Ignora las le$ras mayiisculas; es decir, las le$rasA y a ]as considera iguales.

Las opciones 4,-e, -f y -n se excluyen mutuamente. Las opciones -r y -s s610 pueden especifi-
carse en comparaciones de directorios. Las opciones -b y -i, pueden ser combinadas con otras
opciones.

64 -
2 M M E J O DE FXCHEROS
Progririnas de Utilidad UNIX

Argumentos
fxherol fiher02
Son 10s nombres de 10s ficheros que van a ser comparados. Si 10s contenidos de 10s
ficheros especificados enfzherol yficher02 son iguales (es decir, no hay diferencias
entre ambos), la utilidad diff no visualiza infarmaci6n. Si enfxherol o enficher02 se
especifica un carlicter gui6n (-), la utilidad diff utiliza el stdin para recibir la entrada.

fiherol directorio i directorioj3chero2


Son 10s nombres del fichero y directorio, o viceversa, que van a ser comparados. La
utilidad difi compara el fichero especificado enficherol con un fichero del directorio
especificado en directorio que terga el mismo nombre que el fichero especificado en
fxkrol, 0 viceversa.

directoriol directoriO2
Son los directorios cuyos Echeros S K ~comparados.
I La utilidad d f l compara todos
10s pares de ficheros que tengan nombres de fichero i&nticos en ambos directorios.

Notas
Otra utilidad, llamada bdiff. trabaja de forma dogs a la de la utilidad diff, la cual permite el
proceso de ficheros que son demasiado grandes para la Wdad diff. El sistema UMX dispone
de otras utilidades, como sdif€, comm, cmp y diff3, que comparan fichaos de distintas formas,
las cuales son tratadas en las siguientes secciones. El sistema UNIX soporta la utilidad dircmp
que permite comparar 10s mmbres de fichero de dos directoria y visualizar las diferencias.

Ejemplos
La utilidad diff asume que vamos a recollsrcuirfzherol defichero2. (Para reconstruirficher02
deficherol, ejecutar el comando diff invirtiendo el orden de 10s argumentos).

Cuando el comando d f l es emitido sin apciones, la utilidad diff genera una serie de lineas con-
teniendo 10s comandos del editor ed: a (agregar), d (borrar) y c (cambia). Los nfimeros que van
a la izquiada de cada cornando del editor ed son ntimeros de linea que patenecen alficherol;
10s ncimeros que van a la &e&a se aplican alfiher02; dos ncimeros de linea separados por UM
coma representan un rango de lineas. Para reconstruirficherol deficher02, ignmar 10s ntimeros
de Unea situados a la derecha de 10s comandos ed.

DespueS de cada linea de comandos del editor, van las lineas del fichero que tenemos que agre-
gar, borrar o cambiar; un carzlcter menor que (4precede lineas delficherul; un carzlcter mayor
que (>) precede lineas delfher02.

El siguiente ejemplo, muestra c6mo la utilidad diff visualiza las diferexias entre dos pequefios
ficheros, ciudl y ciud2 00s cuales son listados a continuaci6n), y la forma de hacerlos iguales:

$ cat ciudl $ cat clud2


Alicante Alicante
Barcelona Grdoba
C6rdoba

$ diff c i d l ciud3
2dl
< Barcelona

2 -MNUEJO DE FICffEROS 65
Programas de Utilidad UNIX

Este ejemplo muestra que la linea diferente entre los ficheros ciudl y CW, es la segunda linea
de la salida, carrespondiente al ficherociudl (Barcelona), la cual es omitida en el fichero ciud2;
el cartlcter menor que (e)indica que la lfnea distinta pertenece alficherol (ciudl). La primera
linea de la salida (2dZ) indica que debemos borrar (d) la segunda lfnea (2) delfieherol (ciudl)
para hacerlo igual que elfichero2 (ciud2).

El siguiente ejemplo visualiza la mqaraci6n entre los ficheros ciudl y ciud3, mostrando otra
forna de h e r iguales los dos fichmos:

$ cat ciudl $ cat ciud3


Alicante Alicante
Barcelona Bardona
C6dOba Sevilla
GrdOba
$ diff ciudl ciud3
2a3
> Sevilla
La primera linea de la salida ( 2 ~ 3indica
) que para ham el fichero ciudl igual al fichero ciud3,
debemos agregar (a) la Ifnea 3 del fichero ciud3 (SevUZa) al fichero ciudl &pub de la linea 2;
el c a r e mayar que (>) indica que la linea distinta pea-tenece alfwhro2 (ciud3).
El siguiente ejemplo mmpara dos ficheros, cizldl y ciud4, mostrando la lfnea que debe ser re-
emplazada si queremos que el fichero cizldl sea igual que el fichgo ciud4
$ cat cizuil $ cat ciud4
Alicante Alicante
Bvcdonsl zaragoza
ardOba ardoba

$ diffcizldlciud4
249
< Barcelona
--
> zaragma

La primera lfnea de la salida (2c2) indica que para hacer 10s dos ficheros iguales, tenemos que
reemplazar (c) la linea 2 en el fichero ciudl (Barcelona) par la linea 2 del fichero ciud4 (Zara-
--
go&. Los caractem indican el final del texto del fichero ciudl que debe ser cambiado, y el
comienzo del texto del ficherociud4 que va a reemplazarle.

El siguiente comando compara los ficheros ciwll y ciwl5, visualizando las lfneas diferentes en-
tre ellos, indicando que para hamlos iguales debemos reemplazar las lfneas 2 a 3: Barcelona y
Cdrdoba en el ficherocizldl, por las lineas 2 a 4: Undu,Huelva y Mdaga del fichero ciud5:

$ cat ciudl $ cat ciud.5


Alicante Alicante
Barcelona Urida
ardoba Huelva
Milaga
$ diff ciudl ciud5
2,344
< Barcelona
< Ciirdoba
-I

> Erida
> Huelva
> Msilaga

66 -
2 MAh'EJO DE FICHEROS
~ Progrdmas de Utilidad UNIX

Los siguientes ejemplos muestran c6mo usar la utilidad dEf para controlar versiones de un fi-
chero que es actualhado repetidamente sin mantener una libreria de cada versi6n. Si guardamos
una copia del fichero original y del script-ed que la utilidad diff crea cada vez que actualizamos
el fichero, podemos reconstruir cualquier versi6n de ese fichero.

En 10s siguientes ejemplos, el fichero menul es el fichero original. Cuando queramos actuali-
zarlo, el fichero menul es copiado al fichero menu2, y 10s cambia son hechos a la copia. Los
i ficheros resultantes son mostrados despuh:

$ cat manu1 $ cat menu2


DESAYUNO DESAYUNO
huevos revueltos huevos cscaIfados
tostadas tostadas
plmo de naranja plmo de naranja

COMIDA COMIDA
juaias blanas judias blanas
came asada domillo
leche merengada leche merengada

CENA CENA
sopa de pescado ensaladilla
merlwa a la coltgna steakalaparrilla
fiutil clueso
flan

El siguiente comando diff emitido con la @6n -e crea un script-ed que detalla 10s cambios
I
entre dos versioneS del fichero. El primer command-lineredirige la salida producida por la utili-
I dad diff al ficherom e m c l ; desput?~
la utilidad cat v i s u m e! fichero resultante:

$ diff -e menul menu2 > m m c l


$ cat m e m c l
12,lSc
ensaladilla
skakalaparritla
qua0

8c
solomillo

2c
huevos escalfados

Vemos que el script-ed resultante ( m e m c l ) sera invocado par el editor ed en modo cambio
(comando c). En este modo,las lineas especificadas en 10s comandos son reemplazadas por el
text0 especificado a continuacidn de cada cornando c. El car4cter punto (.) dice al editor ed que
termine el modo canrbio y vuelva al modo cornando.

Los comandos que faltan en el script-ed creado por la utilidad diff para que el editor ed haga
currectamente las modificaciones oportunas, son 10s comandos w y q. En el siguiente ejemplo,
la utilidad cat agrega estos comandos al ficheromemcl. (Tambien podemos mar un editor pa-
ra agregar estos comandos al fichero):

$ cat >>meme1
W
q
<Ctrl-d>

-
2 MMEJO DE FICIIEROS 67
Programas de U t i l W UNIX

Con ayuda del script-ed generado por un comando diff e y el editor ed, pdemos recomtruir
jicherol dejicher02. El siguiente ejemplo, hace que el fichero menul sea igual que el fichero
menu2. Primero, para conservar el fichero original, copiamos menul a crearl. Despub, i n w
camos a l editor ed, suministrhdole la entrada del escript-ed (memcl),para hacer l a cambios
pertinentes al fichexo original recreal. Finalmente, lo listama para COmpTobar que menul (re-
weal) es igual que menu21

$ cp menul recreal
$ ed reereale memcl
215
199
$ cat recreal
DESAYUNO
huevos acalfados
btadas
zumo de naranja

COMIDA
judias blancas
SdOmiUO
leche mercngada
CENA
Cnsaladilla
steak a la parrilla
QU=J

De la misma forma pdemos hacer que el fichero menu2 sea igual que el fichero menul, invir-
tiendo el orden de 10s argumentos al ejecutar el comando diff con la opci6n e:

$diffemenu2menul >meme2
$ cat >> meme2
W
9
<Ctrl-d>
$ cp menu2 recrea2
!$ ed recred < m w c 2
199
215
$ cat recrea2
...
Otra farma de reconstruirjicherol defichero2, es emitiendo l a dos command-lines siguientes:

$ diff e menul menu2 > memed


-
$ (cat mewed ;echo ‘l,$p’) I ed menul > menul.new

En el segundo command-line, 10s comandas entre parhtesis agregan la cadena I,$p al final de
10s comandos de edici6n enviados a l editor ed. La cadena I,$p hace que el comando ed escfiba
el fichero en el standard-output despub de editarlo. Esto modifica la Secuencia que &PUBes
pasada a travb de un pipe al comando ed, y el editor lo lee como del standard-input. La opci6n
- (gu16n)hace que el comando ed no visualice el tamaiio del fichero y cualquier otra informa-
ci6n adicional, porque p&a mezclarse con el text0 del fichero menul.new.

El sistema UNIX dispone de dos sistemas que permiten el control de versiones de ficheros, el
SCCS y el RCS (ver “SISTEMA DE CONTROL DE VERSIONES (RCS)”, pagina 253).

68 -
2 M m E J O DE FICREROS
Profiramasde Utilidad Uh?IXi

Utilidad sdiff
Descripcih
La utilidad sdiff compara dos fichexos (usa el comando diff -b, vex “Utilidad diff, pggina 64).
visualizando los dos ficheros, uno al lado del otro, e indicando las diferencias entre ambos. Si
las lfneas son distintas, la utilidad sdiff las marca con un car&er barra vertical (I), si son id6nti-
cas las marca con un blanco, si s610 existen enjicherol las marca con un cargcter menor que
(<), y si s610 existen enfichero2 las marca con un caracter mayor que (>).

Formato
sdiff [-opciones]ficherol@hero2

Opciones
-I Cuando hay lfneas i&nticas en ambos ficheros, &lo visualiza las delfrcherol.

-0fad Crea un fichero de salida, el especificado enfid, hsioaando las salidas de los fiche-
ros especificados enfrcherol yfichar02. JXquts & visualizar un grupo de lfneas di-
ferentes, la utilidad sdiff visualiza un prompt con un cadcter 8,para que el usuario
controle este fichero emitiendolos siguientes comandos:
I Agrega las lfneas de salida delfaherd al fichem de salida 0.
r Copia las lineas de salida delfrcher02 al fichero de salida.
s No visualiza las Uneas id6nticas.
v Activa la visualizaci6n de las lfneas identicas.

e I Llama al editor para cupiar al fichero de salida las U n a delficherol.

I r Llama al editor para copiar las lfneas delfichero2 al fichero de salida.

I b Fusiona las lineas de 10s dos fichems en el fichero de salida.

e Salva al fichero de salida las lfneas i&nticas de 10s dos fichem.

q Salimos del programa sdiff.

-S Suprimela visualizaci6n de las lineas identicas en ambos ficheros.


-wnrim Establect! el tamah de las lfneas de salida al ntlmero de caractexes especificado en
nlSm (el defect0 son 130 caracteres).

Argumentos
ficherol@hero;! Son 10s nombres de 10s ficheros que van a sa comparados por la utilidad
sdiff para localizar las diferencias entre ambos.

-
2 MWEJO DE FICHEROS 69
Programas de U t i l W UNIX

Ejemplos
Los siguientes ejemplos utilizan 10s ficheros aufonl y auton2, listados a continuaci611, para
mostrar cdmo la utilidad s d B indica las diferencias entre ambos ficheros:

$icat autonl ti cat auto&


AndalUCia Andalucia
CastiIia-Lc6n CPstilk-mn
Extremadura
Galicia cantabria
Navarm Galicia
Pais vasco La Rioja
Castilla-La Mancha

Andalucia
Castilla-ma
I
> Cantabria
Galicia Gdicia
Navarra I LaRioja
Pais vasco <
Castilla-La Mancha <

El siguiente comando SWcompara 10s ficheros autonl y auton2, mostrando las diferencias
entre 10s dos ficheax, no visualizando las lineas Wnticas entre ambos, y estableciendo Ias li-
neas a 60 caractens,facilitandola visualizaci6nde la salia

$s~-s-w6Omrtonlauton2
Extrcmadura I
> Cantabria
5,7&
Navarra I LaRioja
Ppls vasco <
CastilIa-La Mancha <

Utilidad dim
Descripcihn
La utilidad diff3 compara tres versiones de un fichero y visualiza en el standard-output el rango
de las lineas distintas que pueden s a agregadas o cambiadas de cada fichero para haaxlos
iguales, marcadas con 10s siguientes c6digos:
-- Indica las diferencias de 10s tres ficheros.
==1 Indica las diferencias deljickrol.
--
--2 Indica las diferencias deljichr02.
=--=t Indica las diferencias delfikro3.

Formato
diff3 [-opciones]jicherol~chr02ficher03

70 -
2 MMEJO DE FICHEROS
Pioaramas de U t i W UNIX

Opciones
-e Crea un script-ed para usarlo con el editor ed y poder incopporar enficherol los cam-
bios entrejicher02 yfichero3.

-x Crea un scrip-ed para usarlo con el editor ed y poder incorporar enficherol los cam-
bios existentes entre 10s tres ficheros.

3 Crea un script-ed para usarlo con el editor ed y poder incorpurar enficherol los cam-
bios del ficher03.

A rgumentos
@hero1 fichero2fichero3
Son 10s nombres de los ficheros que van a ser mmparados por la utilidad diff3.

Ejemplos
El siguiente cornando difB conpara 10s tres fichaos listados seguidamente,fnrtasl,fiutcrs2 y
fnrta3, mostrando las diferencias entre 10s tres ficheros:

$ catfiutasl $ catf-2 $' catj?t&r3


plitano mawana Upps
UvaS pEtano arczas
kiwi fcrems kiwi
frsas kiwi fresas
mango naranja mango
naranja melocotijn naranja
melocot& Pera meldn
mel6n Pe*

# Los kcs ficheros son dderentes


# Llneas 1 a 2 del ficherofnrtal(1:).
plitano
UyaS
21* # Lheas 1 a 3 del f i c h e r o ~ (2).
2
manzana
pldtano
cerezas
3l4c # Llneas 1 a 2 del ficherofnrta3(3).
uvas
cerezas
-2 # El segundo fichero:fndasT, cs diferente.
1:4,5c # Las lineas 4 y 5 son ks mismas t n 10s ficherosfnUasl yfnrkrr3.
241 # Para hacer quefnrtarZ sea igual, agregar text0 despuk de la linea 4.
3:4&
fresas
mango
-1 # El primer fichero:f-1, s diferente.
1:8C # La Iinea 8 defndarf s diferente, s610 existe en este fichero.
mel6n
27c # La Linea 7 def-2 y la linea 8 def-3 son iguales,
38c # y dicha linea no existe enficherol.
Pem

-
2 MMEJQ DE FICHERQS 71
Programas de Utitidad UNIX

Descripcih
La utilidad comm compara dos ficheros, 10s cuales deben esW clasificados en orden lexicogrfi-
fico ASCII, visualizando la salida generada en tres columnas; en la primera columna se visuali-
zan las lineas delficherol no encontradas enfichero2; en la segunda columna se visualizan las
lineas delfiher02 no encontradm enfdzerol, precedidas de un tabdador; en la tercera colum-
na se visualizan las Uneas comunes a 10s dos fichaos, precedidas de dos tabuladores.

Formato
c o r n [-opciones]ficherol @hero2

Opciones
-1 Suprime la salida de la primera columna (las lineas mcas delj?cherol).
-2 Suprime la salida de la segunda columna (laUneas Wcas deljicher02).

-3 Suprime la salida de la tercera columna (las lineas comunes de 10s dos ficheros).

Argumentos
ficherol fichero2
Son los nombres de 10s ficheros que van a ser comparados. Si enficherol o enfichero2
se especifica un caracter gui6n (-), la utilidadcomm espera la entrada del stdin.

Ejemplos
Los ejemplos siguientes utilizan 10s siguientes fichaos letrasl y letrm2, ya clasificados:
$ cat letrasl $ cat letrm2
Bbbbbbbb Aaaaaaaa
Ccccccee Dddddddd
Dddddddd Eeeeeee
Eeeeeee GGixgg~
FffffFEf Hhbhhhhb

El siguiente comando c o r n emitido sin Opciones, compara 10s ficheros letrml y letrm2, vi-
sualizandola salida en tres columnas:

$ commfetrmI fetras2
Aaaaaaaa
Bbbbbbbb
CecCcrrC
Dddddddd
Eeceeeee
FfffffE
Gg-
Hhbbhhh

72 -
2 MAh'EJO DE FICHEROS
Pronilmas de U W a d UNIX

Si s610 queremos visualizar una o dos de las tres columnas de salida, incluir las opciones apre
piadas para suprimir las columnas que no queramos visualizar. Por ejemplo, el siguiente co-
mando s610 visualiza la columna 3, las lfneas mmunes de 10s fichefos CetrasI y letras3

$ comm -12 tetras1 &tras2


Dddddddd
Eeeeeeee

Utilidad cmp
Descripcih
La utilidad cmp compara dos ficheros, visualizando el nfimero de linea y el &mer0 de byte en
10s que se ha producido la primera diferencia entre los dos ficheros. Si los ficheros son iguales,
la utilidad cmp no visualiza ninguna clase de informaci6n

Forrnato
cmp [-opciones]ficherolfiher02

Opcwnes
-1 Visualiza el mtmero de byte en decim;. y los bytes diferentes en OC
enL , columnas,
tres
por cada diferencia.

-S NO visua~izadata de as diferencias, ~610devuelve el valor del exit-status.

Argurnentos
ficherol fiehar02
Son 10s nombres de los ficheros que van a ser comparados. Si enmherol o enfiehero2
se especifica un car4cter gui6n (-), la utilidad crnp utiliza el sfdin para ese fichero.

Ejemplos
El siguiente ejemplo compara 10s ficheros letrasl y letras2 (pilgina 72), visualizando la locali-
zacidn de la primera diferencia encontrada entre los dos fichefos:

$ cmp letrasl letras2


letrasl letras2 differ: chatl, line1

El siguiente ejernplo mmpara 10s ficheros letrasl y lefras2, visualizando el ndmero de byte en
decimal y los bytes diferentes en octal, por cada diferencia entre los dos fichaos:

$ cmp -1 letrusl ktras2


1 142 141
..
-
2 MANEJO DE FICHEROS 73
Programas de Utilidad UNIX

Utilidad od
Descripcidn
La utilidad od (octal dump) vuelca el contenido de uno o varios ficheros en el stdout, en el for-
mato deteminado por la opci6n seleccionada. Por defecto, el volcado es en palabras octales.

Formato
od [-opciones] Wchero ..I [ c o m ~ ]

Opciones
-Abase Especifica la base en la que sail escrito el decuZuje (la primera columna) de las Uneas
de salida. Los wactetes d, o y x especificados como base, indican que el decduje s6
ril visualizadoen decimal, octal y hexadecimal, respectivamente. Si en base se especi-
fica un cariicter n,la salida de comando od es visualizada sin decaluje.

-b Intapretabytesenoctaf.

-c 1nterpret.a bytes en ASCII (formato carikter). Los sigUientes caractem no gr6.ficos (no
imprimibles) aparecen en la salida como secuencias de escape:
\o Carilcternulo.
\b Carilcter de retrowso.
\f caracter salto de pilgina.
\n Cariicter nueva Una.
\r cariicterretomodewro.
\t Carilctertabulador.

Otros caracteres no grUicos aparecen como ntimeros octales de tres dfgitos.

-d Visualiza palabras mmo valores decimales sin signo.

-jsalt0 A partir del comienzo, el volcado salta el ntimero de bytes especificado en salto. Por
defecto, el argumentosalt0 es interpretado como un nlimexo decimal. Si el argumento
salt0 va precedido de la cadena Ox o OX, el salt0 es interpretado como un ntimero he-
xadecimal; y si va precedido de la especificacidn 0, es interpretado como un ntimero
octal. Si al argumento s d o le agregamos 10s caractera b, k o m,el salt0 es interpre-
tado como un mtiltiplo de 512,1024 y 1048576bytes, respectivamente.

-Ncont Haw que la utilidad od no formatee m& bytes de entrada que 10s especificados en
cod. Por defecto, el argumento cont es interpretado como un ntimero decimal. Si el
argumentoconi va precedido de la especificaci6n Ox 6 OX, entonces cud toma un va-
lor hexadecimal; si va precedido de un 0, el argumentocont toma un valor octal.

-0 Visualiza palabras en formato octal. (Es el defecto).

-ttipo ... Especifica uno o mAs tipos de salida, siendo tip0 uno de 10s siguientes caracteres de
especificaci6n del tip0 de salida: a (carilcter con nombre), c (carilcter), d (decimal con
signo),f(coma flotante),o (octal), u (decimal sin signo), x (hexadecimal).

74 -
2 MMEJO DE FICHEROS
Los wactetes de espificaci6n del tip0 de salik d, f, 0, u y x pueden ir seguidos
opcionalmente de un nfimero entero decimal sin signo que especifica el nfimero de
bytes que van a sa transfurmados y despuQ visualizados.
-X Visualiza palabras en hexadecimal sin signo.

Argumentos
fichero Es el nombre o nombres del fichero o ficheros que van a ser volcados. Si no es es-
pecificado nin@n fichero, la utilidad od toma la entrada del standard-input.

cumssalida Es un nfimero entero que especifica el punto del fichero en el cud comienza la sa-
lida del volcado. El argument0 comsalida es interpretado en bytes octales; si se le
agrega un signo punto (.) es interpretado en decimal.

Notas
Ademils de la utilidad od, otras dos utilidades que tram ficheros objetos son: la utilidad size, la
mal visualiza informaci6n de las disthtas secciones de un fichero objdo, y la utilidad nm usada
para visualhr una bta formatwda de sfmbolos de un fichero objeto.

Ejemplos
El fichero siguiente,pruod, es UII fichero ejemplo que va a ser tratado a continuaci6n pop el co-
mando od, haci6ndolle un volcado en bytes con formato octal y cadctc

!$ catpruod
Fichero prueba de d a d o .

Iacluyc tabulador: y aueva linea.


El numero d c a d o cs d 70835.

$ od -bcpmOd
0000000 106 151 143 150 145 162 157 040 160 162 165 145 142 141 040 144
F i c h e r o p r u e b a d
OOOOOZO 145 040 166 157 154 143 141 144 157 056 012 012 111 156 143 154
e v o I e a d o . \ n \ n I n c l
0000040 165 171 145 040 164 141 142 165 154 141 144 157 162 072 011 171
u Y e t a b u l a d o r : \ t y
0000060 040 156 165 145 166 141 040 154 151 156 145 141 056 012 105 154
n u e v a I i n e a . \ t l E I
oooOl00 040 156 165 155 145 162 157 040 166 157 154 143 141 144 157 040
n u m e r o v o l c a d o
oooOl20 145 163 040 145 154 040 067 060 070 063 065 056 012
t s e l 7 0 8 3 5 . \ n
oooO135

El siguiente comando od hace un volcado en palabras octal= del ficheropmod, haciendo un


salt0 de las primeras 48 palabras:

!$ od -j48ptUOd
0000000 067040 062565 060566 066040 067151 060545 005056 066105
0000016 067040 066565 071145 020157 067566 061554 062141 020157
0000032 071545 062440 020154 030067 031470 027065 oooO12
0000045

-
2 MANEJO DE FICHEROS 75
Programas de U t i l W UNIX

Utilidad touch
Descripcih
La utilidad touch actualiza la fecha de acceso y modificaci6n de cada fichero o direct0130 espe-
cifkado a la fecha especificada en el command-line, o a la fecha en curso si no es especificada
ninguna fecha.

Formato
touch [spciones]ficbo ...
Opcwnes
-a Hace que la utilidad touch s610 actualice la fecha de acceso.

c Suprime la creaci6n del fichero, si &e no existe.

-m Hace que la utilidad touch s610 actualice la fecha de modificaci6n.

-rfrle-ref Utiliza la fecha del fichero especificado enfile-ref, en vez de la fecha en curso. La
opci4n -r no puede ser especficada conjuntamente con la opci6n -t.

-tfech Utiliza la k h a y hora especificada enfech, en vez de la fecha y hora en curso. El


operandofecha tiene el siguiente formato:

[[cqmMDD-[sSl
Don& cada par de letras son dos nfimeros decimales, con el siguiente significado:

CC Indica 10s dos primeros dfgitos del afio.

YY Indica 10s dos 6ltimos dfgitos del ailo.

M M Es el ntlmero del mes del aAo (01-12).


DD Es el dia del mes (01-31).

hh Indica la hora del dia (00-23).

mm Indica 10s minutos de la hora (00-59).

ss Indica 10s segundos del minuto (00-60).

Si no son dados 10s campos CC ni YY,es asumido el a?io en curso. Si es especificado


el campo YY per0 no el campo CC,&e se convertir6 en 19 si YY estii en el rango
69-99 y en 20 si YY estii en el rango 00-68.

Si omitimos las apciones -r y -t, la utilidad touch utiliza la fecha en curso para actualizar las fe-
chas de acceso y modificaci6n del fichero. Si el fichero especifkado enfichero no existe, el fi-
chero es creado a no ser que se especifique la opci6n -c.

76 -
2 MhVEJO DE FICHEROS
Pmgnimas de Utilidud UNIX.

Argumentos
fiehero Especifica el nombre o nombres del fichero o ficheros cuyas fechas y horas van a ser
cambiadas par la utilidad touch. Si en el argumentofichero se especifica el nombre
o nombres de uno o varios directorios,la utilidad touch actualiza la fecha y hora del
directorio o directorios especificados.

Notas
La utilidad Is lista las caractedsticas de ficheros y directorios (ver “ U t i f W Is”, p6gina 44).la
cual puede ser usada para visualizar 10s cambios realizados con la utilidad touch. La utilidad
date visualiza y establece la fecha y hora del sistema (ver “Ufifidaddate”, p6gina 18).

Ejemplos
El siguiente ejemplo establece las fechas de acceso y modificaci6n del ficheropr0g.c a la fecha
y hora en curso del sistema. Si el ficher0prog.c no existe, la utilidad touch crea un fichero va-
cio con ese nombre:

$ Is -1prog.c
4.w-r-r-1 usuario tFP0 1374 Oct 71600 pr0g.c
$ date ‘+%h W %H:%bP
Jan 08 15:45

$ touchpr0g.c
$ Is -I pr0g.c
4.w-r-r-1 usuario mP0 1374 Jan 81545 pr0g.c

Si en el ejemplo anterior queremos ev.a la aeaci6n de un nuevo f i c a o , si el ficheroprogc no


existe, emitir el siguiente command-fine:
$ touch cpr0g.c

El siguiente comando ~610actualiza las fahas de modificaci6n de 10s ficheros del directorio en
curso cuyos nombres finalicen en .o. (El comando touch es fkecuentemente utilizado de esta
forma para achmlmr
* los ficheros fuente de un entorno make, mils detalles sobre la utilidad
make pueden verse en ‘‘U27UDAD make”,p6gina 359):
$ touch -m*.o

El siguiente command-fineactualiza las fechas de acceso y modificaci6n del ficheropicos.J es-


tableciendo la fecha a 5 de enero del aflo en curso y la hora a las 152%

$ touch c t U1051525picos.f

Para achializar la fecha y hora de un fichero con un nombre num&ico, el nombre del fichero de-
be ir precedido de los caracmes J para que no se confunda con el argumentofecha. Por ejem-
plo, para estabIecer las fechas de acceso y modificaci6n a la fecha y h a en curso del fichero
123.abc, emitir el siguiente command-fine:

$ touch c ./123.abc

2 -MAhEJO DE FICHEROS 77
Promamas de UtilGitui UNIX

Utilidades basenamey dirname


Descripcibn
La utilidad basename devuelve el nombre del fichero base. Para ello, la utilidad basename lee
10s elementm de UM C&M (de un path) especificada en el command-line, borra el texto desde
el comienzo hast;, el dltimo carkter barra inclinada (I)de la cadena, y visualiza el resultado (el
nombre del fichero) en el standard-output.

La utilidad dirname es similar a la utilidad basename. La utilidad dirname examina 10s ele-
menta de una &M (de unpath) especificada en el command-line, borra el texto desde el % I
timo carikter barra inclinada (I)hasta el fin de la c a d e ~y, visualiza el nombre del path restante
(usualmente el nombre del directorio) en el standard-output.

Fomato
basename cadena [sufjo]
dirnamec&na

Argrcmentos
C&M Es la cadena que va a ser evaluada por las utilidades basename o dirname. La cadena
especificada en cadena puede sa una cadena vada.

sufjo Es un argument0 apcional que consta de un sufiio de fichero, y que si se carresponde


exactamente con el sufijo del fichero especifhdo en eadem, este sufijo serg borrado;
es de&, si la utilidad basename encuentra el sufijo especificado en sufiio, el fichero
es devuelto sin sufijo.
El argument0sufjo s610 se aplica a la utilidad basename.

Usualmente, las utilidades basename y dirname son utilizadas en shell-scripts con sustituci6n
de comandos para especificar nombres de fichero de salida, 10s cuales proceden de nombres de
fichero de entrada especificados.

La siguiente tabla muestra el proceso aplicado a cadenas de caractera con distintos significados
por las utilidades basename y dirname:

Cadena a Resultado de la Resultado de la


examinar utilidad basename utilidad dirname
I I I
I1 I I
//dM b Ila
la a I
la/b b la
Ialwc C la/b
a a
alb b a
66 6&

<nula> mensaje de error mensaje de error

78 -
2 MAh'EJOVE FICHEROS
Progr&nas de U t i l W UNIX

Ejemplos
El siguiente comando basename visualiza el nombre del fichero base del path asignado a la va-
riablefichero-trabajo. (Supongamos que la variablefikro-trubajo tiene establecido el path:
IZrsr/ceca/operator@rogram c):

$ fichero-~abajo=/usr/ceca/operator/progranc
$ basename $fxhero-trabajo
programc

Si queremos que el ejemplo anterior visualice el nombre del fichero base sin el sufijo .c, emitir
el siguiente command-line:

$ basename $fichero-trabajo .c
Program

El siguiente ejemplo utiliza el comando dirname para establecer la variable nombrefich al


path: /usua&dceix&is@rogramas (nombre del directorio):

$ nombrt-fich=$(dirname /usuaridma/luis/progbprimos.c)
$ echo $nombrefich
/uSUariosl~UiS/pislprogrpmas

El siguiente script, salva-edit, edita el fichero especificado en el conzmand-fine salvando una


copia del mismo. El script utiliza la utilidad basename para aear la variable NOMBRE, cuyo
valar sera el nombre del fichero base (sdva-etfit). Si par ejemplo, el script es invocado con
cualquiera de los siguientes command-lines:

$ /usr/duserid/bIn/salva-edit f z k r o
$ &aha-editfichero
$ salva-editfichero

el valor de la variable NOMBRE siempre sera el nombre del fichero base, el mal sera utilizado
para visualizar 10s distintos t i p de mensajes. El script tambien usa la utilidad basename en un
command-line en el que se renombra la copia de salvado:

$ cat scrlva-edit
#%ibinflrsh
-
# script: Salva-di Rcnombra UII fKhero.
NOMBRE-‘basename$0‘
if[$#-eqll
then
vi $1
ficheroedit41
ficherotempo=/tmp!$$.$NOMBRE
cp Sficherwdit $fichemtempo
if [ -f $fieheroedit 1
then
mv $fieherotempo copia.‘basename $fichemedit*
echo W$NOMBRE:Creada copia del tichem ‘basename $fichemedit*”
else
echo TNOMBRE. Error en la copia de salvado” 1>&2
fi
else
echo “Us0c(#recto:SNOMBRE rihero-a-editar”1>&2
exit 1
fi

-
2 MMEJO DE FICHEROS 79
Programas de U t i l W UNIX

. UtiZidades packy unpack


Descripcidra
La utilidad pack almacena el fichero o ficheros especificados de una forma compact& El fi-
chero de entrada es reemplazado por un fichero compactado con el nombre del fichero original,
per0 agreghdole la extensi6n.z (fieher0.z).

Los ficheros comprimidos por la utilidad pack consman los mismos modos de acceso, propie-
tario y fecha de modificaci6n del fichero original. El q a c i o de memoria reducido pop la utili-
dad pack depende del tamafio y del tip0 del fichero de entrada y de la distribuci6n de caracteres;
usuahente, por &mino medio, los ficheros se reducen un 35 Q.

La compactaci6n de un fichero no sera realizada si se da alguna de las siguientes condiciones:

Si el fichero ya estA compactado.


Si el fichero tiene links.
Si el fichero es un directorio.
Si el fichero no puede ser abierto.
Si un fichero con nombrefichar0.z ya existe.
Si el ficherodenominad0ficheru.z no puede ser creado.
Si durante el proceso se produce un mar de YO.
0 Si el tmaflo del fichero es inferior a tres bluques (a no ser que se especifiquela opci6n -9.
Si el fichero que se va a comprimir estA vado.

La utilidad unpack descompacta ficheros creados por la utilidad pack. Par cada fichero especi-
ficado, la utilidad unpack e~aminaun fichexo con n0mbrefibru.z; si eSte es un fichero corn-
pactado, lo reemplaza por la versi6n opiginal (lo descompacta), y borra e1ficheru.z.
La descompactacibn de un fichero 110 se realbar6 si se da a l g u de
~ las siguientes condiciones:

Si el fichero no puede ser abierto.


Si el fichero no es un fichero compactado.
Si existe un fichero con el mismo nombre que el del fichero descompactado.
Si el ficherodescompactado no puede ser creado.

Formato
pack [-opciones]fifzeru ...
unpackfiheru[z] .-
Opciones
- La @6n gui6n (-) visualiza estadfsticasdel fichero o ficheros compactados. En el ca-
culo de estadsticas, la utilidad pack usa un c6digo Huffman (minimum redundancy) en
un bhico byte-by-byte.

-f Obliga la compactaci6n del fichero o ficheros de entrada especificados.

Estas opciones s610 son aplicables en la utilidad pack

80 -
2 M M E J O DE FICHEROS
Prugriintas de Utilidad UNIX

Argumentos
jjchero Es el fichero o ficheros que van a ser compactados por la utilidad pack. Si el fiche-
ro & entrada especificado enfickro es compactado correctamente, la utilidad
pack lo reemplaza por el nornbrefichero.z, y el fichero de entrada es borrado.

jjckro[.z] Es el fichero o fichaos que van a ser descompactados por la utilidad unpack, cuyo
nombre de fichero (ficher0.z) ser6 reemplazado por el nombre del fichero original
@hem).

La utilidad unpack descompacta un fichero compactado con la utilidad pack aun-


que no se especifique el sufijo .z.

El sistema UNIX dispone de la utilidad pcat que permite visualizar en el standard-output el


contenido de 10s ficheros compactados por la utilidad pack *om0 si no lo estuviaan- sin nece-
sidad de descompactarlos. Su formato es el siguiente:

pcatfichero[z] ...
La utilidad pcat examina un fichero comprimido con la utilidad pack aunque en dicho fichero
no se especifique el sufijo .z.
El sistema UNIX dispone de dos grupos de utilidades similares a pack y unpack, son las utili-
dades compress y uncompress, y gdp y gunzip utilizadas para comprimir y descomprimir fi-
cheros. (Ver *‘t/tilidades gzip y gunzip”, p6gina 82).

Ejemplos
El siguiente comando pack cornprime 10s ficheros ejecph y capit2:

$ pack ejecprim capit2


pack ejecprim 29.2 % Compression
pack capit2 379% Compression

El siguiente commund-line pack compacta el fichero de texto, prupack, visualizando las esta-
disticas carrespondientes:

$ pack -prupack
pack prupack: 42.8 % Compression
from 2098176 to 1200438 byks
Huffman treehas 14 levels below root
U S distinct bytes in input
dictionary overhead = 227 bytes
effective entropy = 4 5 8 bitsbyte
asymptotic entropy = 4 5 8 bitsbyte

El siguiente command-zine unpack descomprime los fichaos ejecpnmz y capit2.z:

$ uupack ejecprimz capit2.z


unpack ejecprim: unpacked
unpack capiU: unpacked

-
2 MANEJO DE FICHEROS 81
Programas de U t i l W UNIX

Utilidades gzipy gunzip


Descripcidn
Las utilidades gdp y gunzip comprimen y expanden ficheros. La utilidad gzip reduce el tamaiio
de 10s ficheros especificados, utilizando la codificaci6n Lempel-WV (LZ77). Siempre que sea
posible, cada fichero despuh de ser comprimido, es sustituido por otro con el mismo nombre de
fichero per0 con la extensi6n .gz, a la vez que son mantenidos 10s mismos modos de acceso,
propietario y fecha de modificaci6n

Si no se especifica ningtin fichero o se especifica un carilcter gui6n (-) como nombre de fichero,
el standard-input es utilizado como entrada para la compactaci6n, enviando la salida comprimi-
da al standard-output.La utilidad gzip trata de comprimir ficheros ordinarios. Generalmente, el
comando gdp ignora 10s links simb6licos.

En sistemas donde el tamafio del nombre de fichero estA limitado a un nfimero determinado de
caraderes, si el mmbre de fichero que va a ser comprimido es nds largo que el permitido, la
utilidad gdp trunca las partes del nombre de fichero que tengan nds de tres caractem, a partir
del sufijo.gz hacia la izquierda. Por ejemplo, si 10s nombres de fichero e s t h limitados a 14 ca-
racteres, el ficherogz@.msdos.exe es comprimido como@mdexe.gz.
POI-defecto, las utilidades gzip y gunzip mantienen el nombre del fichero original y la fecha de
modificaci6n del fichero comprimido y descomprimido. Estos parhetros son usados cuando se
descomprimen ficheros con la apci6n -N.Esta acci6n es cltil cuando el nombre del fichero des-
comprimido fbe huncado o cuando la fecha de modificaci6n no fue consewada despueS de
transferir un fichero.

Los ficherm comprimidos con la utilidad gdp pueden ser restaurados a su forma original usan-
do la utilidad gdp con la apci6n -4 o utilizando la utilidad gunzip. La utilidad gunzip toma la
lista de ficheros especificados en el command-line y sustituye cada fichero cuyo nombre finalice
en .gz a su nombre original. La utilidad gunzip tambien reconoce y descomprime 10s ficheros
finalizados en .z y .Z.

El volumen de la compresi6n obtenida depende del tamaAo y del tip0 del fichero de entrada y de
la distribuci6n de las subcadenas comunes. Normalmente, el tamaAo de 10s ficheros fuente y de
texto, es reducido entre el 60 y 70%. La compresi6n es generalmente much0 mejor que la alcan-
zada por la codificaci6n Lzw (usada en la utilidad compress) o que la codificaci6n Huffman
(usada en la utilidad pack).

La utilidad gunzip puede descomprimir ficheros creados por las utilidades gzip, zip, compress
y pack. La detmi6n del formato de entrada es autodtica. Si se usan 10s dos primeros forma-
tos, la utilidad gunzip verifica un CRC (Cyclic Redundancy Check) de 32 bits. En formatos
pack, la utilidad gzip verifica el tamaiio descomprimido, lo que normalmente no sucede en
formatos compress.

La variable de entorno GZIP puede ser usada para establecer opciones de la utilidad gzip. Estas
opciones son interpretadas en primer lugar, y pueden SK sobrescritas por opciones explicitas del
command-line gzip, por ejemplo, 10s siguientes son establecimientos para la variable GZIP del
shell Bourne y del shell C, respedvamente:

GZIP=”Sv -fast” ;export GZIP


setenv GZIP “-8v -fast”

82 -
2 M U E J O DE FICHEROS
Progmmas de U t i l W UNlX

Formato
gzip [-opciones] mhero ...I
gunzip [-opciones] [frchero[gz]...I

Opciones
-a Especifica el text0 en formato uscii; convierte 10s finales de linea usando los convenios
locales. Esta opci6n s610 es soportada en algunos sistema no UNIX (por ejemplo en el
sistema MSDOS).

-c Los ficheros son visualizados en el standard-output sin llegar a realizar la compresi6n.


Si hay varios fickos de entrada, la salida consta de una secuencia de miembros com-
primidos independientemente. Para obtew una mejor compresi6n concatenar todos los
ficherw de entrada antes de COKlPrilIlklOS.

-d Especifica una operaci6n de descompresi6n sobre un fichero en formato gdp. Esta op


ci6n s610 es usada con la utilidad gdp.

-f Obliga a comprimir o descomprimir aunque el fichero tenga varios links o el fichero co-
rrespondiente ya exista, o si los datos comprimidos son lefdos desde un terminal o es-
critosaunterminal.

Si los datos de entrada no e s t h en un formato recOnOcidO por la utilidad gdp y la ap


ci6n Itambi6n es especificada, la utilidad gdp cqia 10s datos de entrada sin cambios
al standard-output.
Si la apci6n -f no es dada, y el comando gzip no es ejecutado en background, la utilidad
gzip visualiza unprompt para verificar si un f i c k o existente puede ser sobrexrito.

-h Visualiza una plantilla de ayuda y sale de la utilidad gzip.

-I Visualiza 10s siguientes campos pur cada fichero despub de ser comprimido:

compressed Especifica et tamafio del fichero comprimido.


uncompressed Visualiza el tamafio del fichero descomprimido.
ratio Indica el porcentaje de compresi6n (0.0%si no es conocido).
urncompressed-nume Especifica el nombre del fichero descomprimido.

Cuando se especifica la apci6n -v, tambi6n son visualizados los campos siguientes:

method Especifica el metodo de compresi6n.


crc Especifica el CRC de 32 bits de los datos comprimidos.
date y time Indica la fecha y hora de modificaci6n de 10s ficheros descomprimidos.

Los m&odos de compresi6n actualmente sopcntados son: deflate, compress, lzh y pack.
El CRC es dado de la forma ffffffff para un fichero que no est6 en formato gzip. Si la
opci6n -I se usa con la apci6n -N,el nombre descomprimido, la fecha y la hora son al-
macenados dentro del fichero comprimido, si e s t h presentes.

Si se usa con la apci6n -v, el tamailo total y el porcentaje de compresi6n de todos 10s
ficheros tambi6n es visualizado, a no ser que algunos tamafios no sean conocidos. Si se
usa con la opci6n -q, la lfnea de las cakeeras no es visualizada.

-
2 M M E J O DE FICHEROS 83
Programas de UtilidQd UNIX

-L Visualiza la licencia de us0 de la utilidad gzip y sale de la utilidad

-n Indica que el nombre del fichero original y la fecha de modificaci6n no son salvados
cuando la mmpresi6n es por defecto. (El nombre del fichero original siempre es salvado
si el nombre no h e truncado). En la descompresi6n no restaura el nombre del fichexo
original si est4 presente (s6lo borra el sufijo generado pur el comando gdp del nombre
del fichero comprimido), y no restaura la fecha de modificaci6n original si est4 presente
(la copia del fichero comprimido). En la descompresi6n, esta opci6n es el defecto.

-N Especifica que en la mmpresi6n y en la descompresi6n siempre es salvado el nombre


del fichero original y la fecha de modificaci6n; este es el defecto. Esta opci6n es fitil en
sistemas que tengan un lfmite en el tamafio del nombre del fichero o cuando la fecha de
modificaci6n ha sido perdida &pub de transferir un fichero.

-q Suprime las salidas de diagn6stico.

-r Recarre recursivamente la estructuradel directorio. Si alguno de 10s ficbos especifica-


dos en el c o d - l i n e es un directcnio, las utilidades gZip y gunzip descienden a l di-
rectorio y comprimen o descomprimen, respectivamente, todos 10s fickos encontrados
en ese directorio.

-S.suf Utiliza el sufijo especificado en .suf en vez del sufijo de defecto .gz. Puede sar dado
cualquier sufijo, per0 se aconseja utilizar 10s sufijos .gz o .z para evitar barrados cuando
10s ficheros son transfezidm a otrm sistemas. Las versiones antiguas de la utilidad gzip
usaban el sufij0.z. Est0 fie cambiado para evitar mnflictcs con la utilidad pack
Un sufijo nu10 obliga a la utilidad gunzip a intentar la desco1npresi6n de todos los fi-
cherm dados, sin tener en menta el sufijo, mmo ocunre en el siguiente ejemplo:

gunzips*

-t EspecifiGa que la integridad del fichero comprimido va a ser verificada.

-v Modo verboso. Visualiza el nombre y el porcentaje de reduccidn de cada fichero com-


primido o descomprimido. Usada conjuntamente con la opci6n -I visualiza 10s campos
method, crc, date y time.

-V Indica el ntimero de versi6n y las opciones de compilacih, saliendo de la utilidad gzip.

-# Regula la velocidad de compresi6n especificando un dfgito de 1 a 9 en el carAc& #,


donde -16 -fast,indican el m&do de compresi6n rApida, y -9 6 -best, indican el m&o-
do de mejor compresi6n, per0 menm rapids. El nivel de compresi6n de defecto es -6.

Argumentos
fiehero Es el nombre o mmbres del fichero o ficheros que ser6.n tratab por la utilidad
gzip para comprimirlos, o por la utilidad gunzip para descomprimirlos.

fichero[gz] Es el nombre o nombres del fichero o ficheros que s e r h tratadas por la utilidad
gunzip para descomprimirlos. La utilidad gunzip desmmprime un fichero mm-
primido con la utilidad gzip aunque no se especifiqueel sufijo.gz.

84 -
2 M U E J U DE FXCHEROS
Ptwrurnas de U t i W UNIX

Notas
Una utilidad que acompa&3a las utilidades gdp y gunzip en algunas instalaciones, es la utilidad
gzcat, usada s610 para listar 10s ficheros comprimidos con la utilidad gdp sin tener que des-
comprimirlos. Otros dos juegos de utilidades UNlX similares a gzip y gunzip son las utilidades
compress y uncompress, y pack y unpack, usadas para cornpactar y descompactar ficheros,
(ver “Utilidades packy unpack”, pagina 80).

El sistema UMX dispone de las utilidades sum y c h u m que proporctonan el espacio que Ocupa
un fichero en unidade-s de 512 bytes. El comando wc c visualiza el mlmero de caracteres de un
fichero (ver “Utilidud wc”, p6gina 199). El campo cinco de la salida del comando Is -I muestra
el tamafio del fichero en bytes (ver “UtiZidudIs”, pagina 44).

Estas utilidades pueden ser usadas conjuntamentecon la utilidad gdp y gunzip para controlar el
tamaflo de la compresi6n y descompresi6n de ficheros, sobre todo cuando 10s ficheros compri-
midos son enviados a sistemas remotos.

Ejemplos
En el siguiente ejemplo, el comando gzip comprime el fichero de texto, prucomp, usando el
m&odo de compresi6n rQida. Los comandos Is indican las caractedsticas del fichero antes y
despub de la compresi6n:
$ Is -1 pnrcomp
-rw-rw- 1 userid pup0 204690990 Jul2710:32 prucolnp

$ gzip-~pnrcomp
$ Is -Ipnrcomgz
-rw-rw-- 1 userid grup 54887147 Jd271032 pru~0mp.g~

El siguiente command-line gzip visualiza la siguiente infarmaci6n del ficheropnrcomp mm-


primido en el ejemplo anterior:

$ gzrp -Ivprucomp.gz
metbod QC date timecompressed uncompressed ratio uncoRIprcssed-name
deIla c98963df Jul 27 10:32 54887147 204690990 73.1% P N C O ~ ~

El siguiente comando gzip realiza una compresi6n de defect0 del ficheropnrcomp, la opci6n -v
hace que sea visualizada la salida indicada:

La utilidad gzip permite la mncatenaci6n en la mmpresi6n de ficheros. Una forma correcta de


comprimir varios ficheros es la mostrada en el siguiente ejemplo:

$ catf&l jik2 I gzip >fl’.gz

Si un fichero mmprimido consta de varios miembros, el tamail0 de la descompresi6n y el crc


visualizadopor la opci6n -I, s610 es aplicado al Gltimo miembro. Si queremos obtener el tamafio
de la descompresi6n de todos 10s miembros, emitir el siguiente command-line:

$ gzip cdfile.gz I wc c

-
2 MANElO DE FICHEROS 85
Programas de Utilidad UNIX

Supongarnos que en el ordenador de producci6n se genera @Wcamente un fichero de &ran


dimensi6n y tenemos que tratarlo en un procedimiento instalado en el ordenador de explotaci6n
Para facilitar su tratamiento y verificar el envfo crearmos dos shell-scripts.
El primer script, llamado grandfde, es ejwtado en el ordenador de produwi6n; primero, la
utilidad gzip coxnprime el ficherofile..daxp, y si la compresi6n finaliza mectamente, la utili-
dad sum calcula el tamaao del ficherof&.darp.gz y lo redirige al ficherofle.daxp,siZe, des-
put%ambos ficheros:file..daxp.gz (con nombref&.hz$gz) yfik..daxp.size son enviados al orde-
nador de explotaci6n:

!$ cat grandfile
#!hiih
-
# script: grand-file Cornprimeun fichem y lo envia a un sktema remob.
f [ !a tilcaaxp 1
then
echo E? fidem fdedaxp no ex& o est5 vada
exit
fi
gzip -1me.dsurp
if[ $? !=O]
then
echo La wmpresibn no cs eomcta
exit 3
else
sum filedaq.gz I awk *{print $1 )’ > filedaxpsize
rcp file- . * ina.Jusrluserdoperat.~
rcp fiIeAaxp.gz intthduserslopertorKde.inf.gz
#echo F d e m filedaxpsizey Gle.kp.gz enviados a inf2.
fi

El segundo script, grandfile2, es ejecutado en el ordenadac de explotaci6n; primer0 calcula el


tsmairo del ficherofile.h$gz, desput?s compara 10s tsmafZos de los ficheros compactados, y si
son iguales, el ficherofile.h$gz, es copiado a cinta. (El script poCtria realizar ot~asfunciones):

$ cat grandfile2
#‘Jbih
-
# scripk grandfie2 Compara 10s tama6os de 10s fichens eomprimidos.
siae-daxp=’cat fde.daxpsiEe\
size-inf=‘sum fdcinf.gz I awk ’{ print $1 }”
if [ “$sii-daxp” -ne “$size_inf” ]
then
echo Los tamaiios no son iguales.
exit
else
-
# echo ssize_daxp $siae-inf
mt -f IdevIcintaOl rewind
dd if=file.inf.gz ofddeVldntaO1
mt -f IdevIcintaOl rewoff
fi
rm -f file.inf.gz
rm -f filedaxpsize

Si estos scripts tuviesen que ser ejecutados peri6dicamente a una f s h a y horas de€erminadaS,
entomes m anincluirse en nuestro fichero cion y ser planifkados con la utilidad crontab
(vex “Ufilidadcrontab”, p5gina 220).
M b detalles sobre las utilidades test, echo, rep, awk y dd, pueden vase en “Ufilidadtest**,p5-
gina 390, “Ufilidudecho”, p@na 385, “Utilidad ref, p@na 357, “utilidad awK‘, p@na 153
y “Utilidad dd”, pagina 245.

86 2 - M U E J O DE FICZIEROS
Produmas de U t i W UNIX

3 - EL SISTEMA DE IMPRESION LPRng

Introduccwn
El LPRng - An Extended Printer Spooler System, es el sistema de impresi6n usado en los or&-
nadores del Centro de CiUculo del Ciewt. El software LPRng es un sistema del spooler de im-
presora con prestaciones similares a las del software LPR de Berkeley, per0 totalmente mejora-
do, q l i a d o y portable.
La evoluci6n del software LPRng la inici6 Patrick Powell en 1986 como PLP (Public Line Prin-
ter), basado en el software del spooling LPR, el cual fue modificado con el fin de soportar nue-
vas impresoras. Debido a las limitadones con las licencias del software original de AT&T y
Berkeley, en 1988 publica la versi6n 3.0 del software PLP (PLP3.0), cuya arquitectura estaba
basada en el c6digo LPR Original, per0 mejorando el anillisis de diagn6sticos y las funciones de
administraci6n.

De 1988 a 1994 con los problemas tratados en la lista del mailplpOiunaie (creada para discutir
10s problemas y distribuir y coordinar 10s cambia del software del LPRng) y la coIaboraci6n de
varios grupos, coordinados por Justin Mason,el software PLP3.0 sufre varias modificaciones,
agreghdole nuevas funciones y reestructurandosu &go, dando como resultado la publicaci6n
en 1994 de 1software PLP4.0.

De 1994 a 1997 se incurporan nuevos grupos USEUNIX y se van tratando y resolviendo proble-
mas discutidos en la lista del mail plp@ioncrie,corn: mejoras de seguridad en la red, incorpo-
raci6n de aplicaciones basadas en clientelsemidor, rnejoras en el seguimiento de diagn&ticos,
compatibilidad con el software del spooling LPR, us0 de programasfiltro, etc. Era esencial que
la portabilidad fuese mejarada, de modo que el mismo software pudiese ser usado en distintos
sistemas; en un sistema de redes est0 introduce los problemas de seguridad y autenticidad. Estas
consideraciones llevaron a redisem y versionar de wevo el c6digo PLP4.0, dando como resul-
tado el software actual del spooling LPRng.
Ahora el software LPRng Versi6n 3.4.1 es un disefio completamente wevo y portable, que utili-
za rutinas y c6digos del Proyecto GNU de la Free SoftwareFoundation, y es distribuido bajo
licencia del software GNU.El software LPRng est4 desarrollado para ser usado en diferentes
aplicaciones, proporcionando entre otras, las siguientes prestaciones:
IdentifIcaci6n finica dejobs de usuario.
Redirecci6n y encaminamiento diniimico dejobs. Una cola del spool puede redirigir unjob
a mas colas del spool.
Sopcxte de autenticidad en las transfaencias entre el usuario y el servidor. El prdoco)o de
red del software LPR definido como RFC1179 no sopuitaba esta prestaci6n.
Mantenimiento de las utilidades Ipc, Ipr, Ipq y I p m
Facilita la creaci6n de UM p l a bohce (retienejobs temporalmente hasta que puedan ser
reenviados a una impresora remota).
Varias impresoras sirviendo a una misma cola.
Retenci6n automiitica dejobs.
Mecanismo de permisos y pnoridades Perfeccionado.
Sistema de accounting dejobs.
Servicio de mailing abierto para consultas y resoluci6n de problemas.
Aniilisis de seguridad y diagn6sticos mejorado.

3 -EL SISTEMA DE IMPRESION L P h g 87


Programas de U t i l W UNIX

Arquitectura del somare LPRng


La arquitectura del softwareLPRng es mostrada en el siguiente diagrama:

‘*,
of

‘*,
t I
I 1 bP

I
I if

I I I I

Aunque la arquitectura del software LPRng es similar a la estnxctura del software LPR de Ber-
keley, el LPRng difiere en muchos detalles impartantes. Las utilidades de usuario: Ipr, Ipq,
Iprm y Ipc son ahma progrmas clientes conectados a uno o m&s procesos server del Ipd utili-
zando el protocolo TCP/IP. Los servers o daemons (Ipds) tienen acceso a fichos y dire!ctmios.
Las bases de datos pueden ser accedidas por 10s programas, ficheros y funciones de red. El job
de impresi6n es enviado al server Ipd y antes de sa impreso es pasado p o disthtosfifzros.
~

Unjob de impresibn consta de unfichero de control, el cual contiene i n f d 6 n del usuario y


opciones de impresi6n, y de fichaos de datos 10s cuales contienen la infmmaci6n que va a ser
impresa. Una cola del spool puede ser bounce oforwarding, las cuales temparalmente almace-
nan 10sjobs de impresi6n antes de ser transferidos a otra cola o a UM cola de impresi6n la cud
tiene una impresora asociada.

La operaci6n de UM cola del spool est4 controlada par informaci6nprintcap de esa cola, y por
infmmaci6n delfichero de control de impresora del directoriospool; un job de impresi6n indi-
vidual tambien puede tener unfichero de control deljob y unfichero de contencih deljob.

Los jobs son submitidos al server Ipd con el programa cliente Ipr, el mal transfiere el job a tra-
v b de una conexi611TCP/IP. Despub, el servidor Ipd expide el job a otro servidor y lo imprime.
Con el program cliente Ipq se puede solicitar informaci6n del estado del job; y con el progra-
ma Iprm, si lo deseamos, podemos eliminarjobs de la cola del spool. El software LPRng utiliza
una base de datos de permisos e informaci6n printcup para determinar si un usuario est4 aut&-
zado a usar una determi~dafuncibn; la autcnizaci6n puede estar fundamentada en el host de
origen, en el nombre de usuario y en distintos atributos.

88 -
3 EL SISTEMA DE IMPRESIOffLPRw
Progrumas de Utilidad UNIX.

D e s p b de que el job es cobcad0 en una cola de impresi6n, el servidor Ipd crea un proceso
server para manejar las operaciones de impresi6n Este proceso server crea los procesos filtro
necesarios para haax interface con la impresora y despu& imprimir el job.

Informacio'n de configuracio'n
La informucih de confgurucidn es usada por 10s programas clientes del software LPWg y por
el server Ipd La informaci6n de confguraci6n controla la marcha de 10s programas en la red, y
proporCiona un conjunto de asignaciones de defecto que comtlnmente especifican informci6n
del sistema. El siguiente es un fichero tfpico de configuraci6n:
# LPRng configurationfde
#file: /etc/lpd.conf
default-printer 22x
default-host %H
default-bannergrinter /usr/locaybipbanner
loclrfde /usr/spooVLPDApd.lock
wqort printer
OIigi~te_port 721 731
user IP
group IP
printcapgath /eWpdntcap
pemspath /etdpd.perms
use-info-cache Yes

Cada linea del fichero &dcunf tiene una variable de configuraci6n y su valor. Por ejemplo, las
variables default-printer y default-host establecen, mpectivamente, la impresora y el host de
defecto que va a ser usado por 10s programas clients; la entrada defauit-6annerqrinter esta-
blece el banner de defecto del program de impresi6n que va a ser usado por el sewer Ipd, etc.

Informacidn printcap
Las entradas de la base de datos printcap definen las colas del spool y la confguraci6n disponi-
ble para el soitwareLPRng. El siguiente es un ejemploprintcup que define dos impresoras:
# LPRng printcap fde
#fde: letdprintcap
22d IIaser-22d
:cm=Iaser,22d
:lp=/dev/laff626
:db=8
:tc=@comun
:tc= Qcomun-serie
:tc=@comungostscript
22x2 I laser-22x2
:cm=faser-22x2
:lp=22x2@inf2
:bq=b22x@inf2
:tc=@comun
:ff=\
:ifdusrAmin'xer-hb

3 -EL SISTEMA DE IMPRESlOiVLPRitg 89


Programas de UtiMad UNIX

Una entrada prinfcup consta de un nombre principal de impresora con un establecimiento op-
cional de alias y de establecimientos de variables con sus valores. El nombre principal es por el
cual es referida la impresora en 10s mensajes de mor y de estado. El separador barra vertical (I)
comienza una entrada de alias y el separador dos puntos (:) COmienZi una entrada de variable.

Por ejemplo, la opci6n lp especifica el dispositivo de impresora y el host; la opci6n fc hace refe-
rencia a otra entrada printcap incluida corn0 parte de la entrada en curso; etc. El ejernplo
prinrcup anterior podria llevar al final del ficheroprintcap las siguientes lineas:

@cornam-serie
:sy=-echo
Bcomam-postscript
:of=/usr/local/bin/psof -Tdebug=8
:if=/usr/ldwsE -Tdebug=S
:ff=\
@comun
:sd=/usr/iocal/tmp/LPD/%P
:If=log
:rw
:Id=
:sh
:sf
:af=/usr/local/tmp/LPW%P/accnt

Veriificacio'ny autoriizacio'n de permisos


Uno de 10s requerimientos de cualquier sistema de spooling de impresora es denegar accesos a
usuarios 110 autorizados y registrar informaci6n de accounting de 10s usuarios autorizados. El
software LPRng elabora un mecanismo de permisos y autorizaciones, similar a 10s usados en 10s
controles de UM red de ordenadores. El fichero Zpdpenns es usado para proporcionar informa-
ci6n de permisos al sistema de spooler de impresora LPRng.

Los permisos son verificados pur el programa Ipd cuando se hace una conexi6n al servidor, y
antes de que el stmidor ejecute la acci6n y proporcione la informaci6n requerida por 10s pro-
gramas clientes. El server Ipd tambiCn verifica 10s permisos deljob nada m& ser submitido y
antes de ser impreso. El siguiente es un ejemplo de fichero de permisos:
# Permissionsdatabase
# fde: /etc/lpd.perms
# allow root on server to control jobs
ACCEPT SERVICES SERVER REMOTEUSER=root
ACCEPT SERVICE=C SERVER REMOTEUSER=operator
# allow anybody to get status
ACCEPT SERVICE=S
# reject all others, including Ipc commands permitted by user-lpc
REJECT SERVICE=CSU
# allow same user on originating host to remove a job
ACCEPT SERVICE=M SAMEHOST SAMEUSER
# allow root on server to remove a job
ACCEPT SERVICE=M SERVER REMOTEUSER=root
ACCEPT SERVICE& SERVER REMOTEUSER=operator
REJECTSERVICE=M
# all other operationsallowed
DEFAULT ACCEPT

90 3 -EL SISTEMA DE IMPRESIONLPRng


La verificaci6n de permisos se realiza usando un conjunto de claves (u opciones) con valores
asociados para verificar 10s permisos. hi,la clave ACCEPT SERVICE,con valor M pamitirfi
operaciones de b a d 0 @or ejemplo, una petici6n del comando Iprm), con valor C permitirfi
controkr el spoof (por ejemplo, un requerimiento del comando Ipc), etc.

El server Ipd
Operacidn
El programa Ipd es el daemon de impresoras y es normalmente invocado cuando se hace la car-
ga del sistema desde el fichero rc (aunque tambien puede ser iniciado por un usuario). El pro-
grama Ipr submitejobs de impresi6n al server Ipd, utilizando las funciones de red. El servidor
Ipd maneja una o miis colas del spool donde son almacenados 10sjobs.

El server Ipd crea procesos server de cola pur cada cola del spool, y entonces espera la cone
xi6n de 10s programas clientes. Cada vez que llega una petici6n, el server mea un wevo proceso
para manejar las peticiones. Los procesos server de cola utilizan informaci6n de la contigura-
ci6n y de la base de datos printcap, y de un conjunto de ficheras del directorio spoof para cun-
trolar las actividades y notificar las acciones.

Los siguientes nombres de fichero son gemalmente utilizados en las operaciones de impresi6n:

Fichero Funcidn
Smpresora Fichero lock y PID del proceso server.
unspooleriqresora PID del proceso subserver.
siatdmpresora Anotaci6n del status.
log Registro del log.
accnt Registro del accounting.
controLimpresora Informaci6n de control de la cola.
cfAnmhost Fichero de control deljob.
hfAnnn Fichero de contenci6n deljob.
dfAntUlhOSt Fichero de data deljob.
En 10s nombres de fichero, la wtaci6n rim representa el nfimero &job y la notacidn host el
identificador del hosf de origen El fichero fuc& (impresora)tiene el mismo nombre que el de la
impresora y se utiliza para asegurar que s6lo estil activo un proceso server a un mismo tiempo.

El fichero de control del spool de impresora (controfJqresora) contiene informaci6n (la cud
puede variar de una vez a ma) para controlar las opaaciones de la cola, como impresi6n, reten-
ci6n, redirecci6n, etc. Las entradas del fichero de control de impresora anulan 10s valores de de-
fecto de la base de datos printcap. El siguiente es un ejemplo defichero de control del spoof:
printingdisabled 1
spaolingdisabled 0
debug on
boIdall 0
class A

El programa Ipc es usado para solicitar al server Ipd el cambio de valores del fichero de control
del spool de impresora, iniciar o para procesos server, activar o desactivar el spoofing,etc.

3 -EL SISTEMA DE IMPRESION LPJhg 91


Programas de Utilidad UNIX

Fieheros deljob
La actividad principal del servidor Ipd estA centrada en el manejo dejobs de impresi6n de las
colas de impresi6n. Cada job de impresi6n consta de unfichero de control del job (cfhnnfrost)
conteniendo informaci6n del usuario y de otro tipo, y de uno o mls ficheros de datos contenien-
do la informacidn que va a ser impresa con el formato. El siguiente es un ejemplo defichero de
control del job, llamado cfAI97infl.ciemzAes:
Hinf2.aemat.es
Pexpl070
Jliihcif
CA
Lexplo7O
fdfAl97iiaemat.es
UdfA1Wid2aiemat.es
N/tmp/liicif-10456

Las lfneasdel fichero de control que comienzan con una letra ma~sculaproporcionan informa-
ci6n (la P indica el nombre de usuario, la H el nombre del host de origen, etc.) y las que co-
mienzan con una letra minfiscula indican el nombre del fichero de data que va a ser impreso.

El proceso server examina las colas del spool para gestionar 10sjobs, 10s cuales son ordenaW
en modo FIFO. Cuando un job es seleccionado para la gestibn, el servidor bmca un proceso
subserver para realizar el trabajo real. El proceso subserver crea unfichero de contencidn del
job para registrar informaci611y mntrolar la impresi6n del job. El fichero de contencibn del job
hfA197, asociado alfichero de control del job cfAl97inf2.ciemut.es, tiene el siguiente formato:
active 23162
active-time 607690763
attempt 0
done 0
hold 0
priority 0
remove 0
routed 0

I
Indicando, por ejemplo, que la entrada active registra el ID del proceso subserver, significando
que el job est6 activo; UM entrada hold distinta de 0 indica que el job est6 retenid0 por acciones
administrativas; UM entrada priority distinta de 0 indica un nivel adicional de prioridad del job;
etc. LQScomandos del programa Ipc pueden ser usados para actualizar algunos de estos valores.
El fichero de data asociado: dfA197inf2.ciem~t.e~contendril eljob listacifcon el formato.

Colas bounce
Una cola bounce es usada para retener jobs temporalmente hasta que puedan ser reenviados a
una impresora remota; est0 es fitil cuando enviamos jobs a una impresora de la red. La entrada
lp de la base de data printcap debe especificar el nombre de la cola bounce en el server, obli-
gando asi a que todos 10s jobs sean pasados a la cola bounce para el proceso. Un estableci-
miento currecto de UM cola bounce puede sa el siguiente:

bqname:lp=bqname@host
:bq=destqQhost
:sddvarL.
:if=hf-filter

92 -
3 EL SISTEMA DE IMPRESIONLPRR~
Programas de U t i l W UNIX

Submisidn y transmisidn de jobs


El programa Ipr es usado para submitir jobs a1 sistema LPRng, necesitando s610 informaci6n del
nombre del host y de la iqresora. El programa cliente Ipr abre una conexi6n al server Ipd y
transfiere el fickro de control deljob y 10s ficherm de datos. El server verifica si el host remoto
y el usuario tienen permisos para enviar el job a la irnpresora requerida, y desputs verifica si el
sistema de impresi6n est5 aceptandojobs. Si se dan ambas condiciones, el job es q t a d o y el
fichero de control deljob y 10s ficheros de datos son situados en el directoriospoof.

Cuando el programa Ipr envia unjob al server, debe detaminar la ubicaci6n del server, para
ello examina 10s valores de la imprema y del host. Si &os est611 especificados explfcitamente
en la variable PRINTER o en el comando Ipr -Popcibn, de la forma pr@host, entonces el pre
grama Ipr enviartl el job a la cola p r especificada y al server que se est5 ejecutando en el host
especificado. Si la impresora s610 es especificada por el nombre, entonces es usada la idorma-
ci6n printcup y el job es enviado al server del host especificado en la entrada printcup.

El servidor Ipd tambikn permite reenviarjobs de una cola del spool a otra. Este reenvfo es con-
trolado par el campoforward del fichero de control del spool de impresora y por la entrada lp
de la base de datos printcup si tienen la forma rp8mt (remote-printer8rernote-machine).

Operaciones de impresidn
Si la impresi6n est4 activada, el servidor Ipd ami4procesos server del spool para llevar a cab0
las apataciones de impresi6n Por cada job del spool, el proceso server del spool tread un pro-
ceso subserver para realizar las operaciones de impresi6n efectivas. Si el proceso subserver fa-
lla, el proceso server iniciarg las operaciones de recuperaci6a
El proceso server normalmente analiza la cola una vez, al comienzo; si el fichero de control de
. impresora es modificado, generalmente por el comando Ipc, la cola del spool es vuelta a anali-
zar. El algoritmo global deljob de impresi6n es:

Abrir el dispositivo de impresidn.


Enviar a l p ~ ~ d e den ainicializaci6n
Enviar un banner al dispitivo.
Enviar los ficheros de datos al dispositivo.
Enviar a l p cadena de terminaci6n.
Cmar el dispositivo de imprai6n.

Para manejar 10s requerimientos de 10s dispasitivos, el proceso subserver, sucesivamente utiliza
progrumasfiltro especificados en la entrada printcup para realizar 10s pasos determinados. Asf,
el fdtro of es usado para impresi6n del banner y para funciones de control de colas; el filtro ifes
usado para imprimirjobs con formatosf (texto ordinario), 1 (texto binario), etc.

El sistema LPRng hace un abvndante us0 de procesosfiltro para la impresi6n, accounting, segu-
ridad, etc. Genmalmente, una especificaci6n de filtro tiene la forma: I [-$]jkhero opcwms.
Dondefichero es un fichexo ejecutable, opcwnes son las apciones para invocar el filtro (aden&
de las que agregue la variable de configuraci6nfilter_options,a no SK que sea suprimida por la
opci6n 4).Las opcwnes son indicadas con un sign0$, seguido de cero, uno o varios caracteres
indicadores del formato: ap6strofo (‘), gui6n (-) y 0 (cero), anafizadas por la sustituci6n de va-
riables y expandidas de la siguiente forma: $key a -key’X’, $Wey a -key ‘X’, $-key a ‘X’, $’key a
-key X y $-‘key a X. (Siendo key una letra clave asociada con el valor de X, donde X puede ser
una entrada printcup, una lfnea del fichero del control deljob o idormaci6n de un server).

3 -EL SISTEMA DE IMPRESION LPRng 93


Programas de U t i W UNIX

Programas clientes
Los programas clientes son las utilidades o programas utilizados para manejar y controlar la
impresi6n del sistema LPRng, tanto de impresoras locales como remotas. Los siguientes son 10s
programas clientes con un resumen de sus funciones:

Ipr Envfa ficheros al spool de una impresora.


Ipq Proporciona informaci6n del estido de impresoras y jobs.
Iprm Eliminajobs de la cola de una impresura.
Ipc Controla la aperaci6n del sistema de impresoras.
Los programas clientes se conectan al stwidor Ipd (daemonprinter line) mediante el protomlo
TCP/IP y pueden sa ejecutados como procesos ordinaries de usuario. Pur cada petici6n &ha
por un programa cliente, el servidor Ipd crea procesos sewer para manejar las peticiones.

En la red del Ciemat, el software del sistema de impresi6n LPRng estA instalado en el host infz.

Utilidad lpr
Descripcwn
El programa cliente lpr utiliza un daemon del spooling para enviar el fichero o fickos especi-
ficados en el command-line (si las facilidades de impresi6n e s t h disponibles) a la cola de una
impresora especificada.

Formato
Ipr [-opciones] W h e o .-I

Opciones
-A Utiliza las facilidades de autenticidad de la transferencia, si esth disponibles.

-Cclast! Especifica la clasificaci6ndeljob para el us0 de la pagina separadora y para establecer


la prioridad deljob que va a ser impreso. El rango de prioridades de las clases, especi-
ficado en clase, es de A (la m h alta) a Z (la d s baja); la prioridad de defecto es la A.

-Dopcwnes-depuracidn
La depuraci6n de mores es controlada especificando la opci6n -D,la cud acepta una
lista de opciones de depuraci6n separadas por comas.Estas apciones toman una de las
dos formas: funci6n=vabr o valor para establecer un valor de defecto general. La
forma -D=visualizara una lista de opciones de depuraci6n

-Ffonnato--filo
Especifica el formato y el filtro. Por defecto, se asume que la entrada va a ser un
fichero de text0 y usara el formatof; y que el dispositivo de salida va a ser una impre
sora. No todos 10s formatos son vzllidos para todas las impresoras. Lm farmatos son
lmas miniisculas bnicas; 10s siguientes son 10s argumentos vades de la apci6n -F.

94 -
3 EL SISTEMADE IMPRESlONLPRng
Programas de U t i l W UNIX

Par compatibilidad con las versiones previas de la utilidad Ipr, 10s t


ip de formato
pueden ser usados como opciones propias (pur ejemplo, omitiendo la apci6n -F') ex-
cepto en los siguientes casos, en 10s que puede generase un mensaje de mor:

-b I -I Ambas opciones especifican un fichero binario o literal, y no va a ser dado


ningiin proceso. La impresi6n utiliza el formatof con el proceso suprinddo.

-c Asume que 10s ficbos contienen data producidos por el filtro ciplot.
-d Asume que las salidas contienen datos de la utilidad tex (formato DVI).

-g Los ficheroscontienen data graficos producidos pur las rutinas plot.

-n La salida es generada por la utilidad troff (dispitivo independiente).

-p Usa la utilidad pr para formatear los ficheros, y despuk para imprimirlos.


-r Utiliza la opci6n REMOVE AF7'ER PRIIVTING. Tmer &dado, la utilidad Ipr
b a r 6 10s ficheros despub de enviarlos al spool.

-t Se asume que la salida es producida por la utilidad troff.

-h El job no llevar6pdgina banner.

-J nombre-job
Especii7ca el nombre de job que va a ser impreso en la p6gina separadora; el defecto
es el n0mt.m del primer ficko, o (STDIN) si la entrada es de unpipe.

-k Cuando es usada como un liltro, la utilidad Ipr, normalmente mea un f i c k o temporal


para leer la entrada desde el standard-input antes de enviarlo a la impresara remota.
La apci6n -khace que eljob sea enviado directamente al server.
-Kcopins,4copiar
Ambas opciones indican el nfimero de copias de cada fichero que va ser impreso.

-Pimpresora
Especifica la impresora a la que va a ser enviado el job; el defecto (en orden de priori-
dad) es: la especificada en la apci6n -Phnpresora, la especificada en la variable de
entmo PRINTER la especificada en la primeta entrada de la informaci6n printcap, y
la especificada en la entrada defaultjrinter del fichero de configuraci6n.

-Q Pone el nombre de la cola del spool en el fichero de control del job. &ta informacidn
puede despub ser usada por el software del spool para controlar el formato de salida.

-Raccount-remoto
Especifica la informacidn del accounting que va a ser usada por el sistema remoto que
imprime nuestra salida. Este parametro puede ser usado para especifcar un &go de
facturaci6npara sex cargado en la impresi6a

-S Esta opci6n es incluida pur compatibilidad con otras versiones del programa Ipr. Esas
versiones crear6.n un link simb6lico a 10s ficheros que van a sa impresos. Alma la
utilidad Ipr envia 10s ficheros directamente al server.

-T &lo Especifica el titulo usado por la utilidad pr, en vez del nombre de fichero.

3 -EL SISTEMA DE IMPRESION f f k g 95


Programas de Utilidad UNIX

-Uusumio Esta @6n es usada para especificar un nombre de usuario para eljob.
-V Visualiza informaci6n del sistema LPRng.

-wtamaiio Especifica el t a u 0 de pggina deljob que va a ser impreso.


-Z opciones
Esta opci6n se utiliza para pasar opciones al spooler de impresi6n, y es usada
cuando la infmmaci6n adicional o especializada debe ser proporcionada al spooler.

-1,2,3,4font Especifica unfont que va a ser montado en la posici6n indicada. (En desuso).

Argumentos
fichero Es el nombre o nombres del fichero o ficheros que van a sa impresos. Si enfiche-
ro 110 es especifcado ningiin fichero, o es especificadoun sign0 menos (-), la utili-
dad Ipr toma la entrada del stdin.

La versi6n del programa Ipr del softwareLPRng intenta ser compatible funcionalmentecon im-
plementaciones comunes de la utilidad Ipr. Aunque hay algunos comandos y funciones que han
sido omitidos deliberadamente

El Centro de Cglculo del Ciemat dispone del procedimiento interno prt para enviar jobs de im-
presi6n a cualquier impresma de la red, el comando prt, puede sa consultado en el man.

Ejemplos
El siguiente comando imprimiril dos copias de 10s ficherosfiZeZ yfiZe2 por la impresora 22d

$ Ipr -K2-P22djUeZfiCe2

El siguiente command-fineIpr envfa el fichero infom.ps a la cola de la impresora 22x2 con


prioridad o clase P:

$ Ipr -CP -P22x2 infonne.ps

El siguiente command-line envfa a la impresora 22x el comando especificado en comundo:

$ man comando I Ipr -P22x

Desde un host remoto pueden enviarse ficheros para ser impresos en una impresora remota. El
siguientecomando Ipr envfa dos copias del ficherofile3 a la cola de la impresora remota 22x

jer60$ Ipr -P22x -#2file3

El siguiente ejemplo envfa la salida concatenada de 10s ficherosfl,f2 yf3 a la impresora 22x

$ catfl f2f3 I Ipr -P22x

96 -
3 EL SISTEMA DE IMPRESION L P R q
Programas de Utilidud UNIX

Utilidad Ip
A d e m del programa lpr, el sistema LPRng dispone del comando Ip para enviar jobs al spool
de una impresora. En realidad, el comando lp hace un link simb6lico al program lpr.

Formato
Ip [-opciones] W h r o ...I

Opciones
-A Utiliza la funci6n de autenticidad de la transferencia.

-d destino El argumentodestino especifica la impresora en la que va a ser impreso el fichero.

-f nomb-form
Imprime el fichero con el formato especificado en nomb-fom. La primera letra del
argumento nomb-fonn es usada como farmato del filtro del sistema LPRng; es simi-
lar a la apci6n -Fdel comando Ipr.

-n num Imprime el dmero de c o p h dado en num, del fichero que va a ser impreso.

-0 opcibn Indica las opciones aependientes de impresora. Se pueden especificar varias vie
nes -0 opcibn, o varias opcwnes entre comillas (-0 “opcibnl opci4n2 ...”).Las si-
guientes opciones tienen efecto inmediato:
nobanner No imprime la pdgina banner.
width=mm Indica el tamafIo de pagina del fichero que va a ser impreso.

-qpriOr higna al fichero que va a ser impreso el nivel de priadchd dado enprior. Estos va-
lores num&icos son tracbcidos al valor de la letra de prioridad correqondiente.

-t tftulo Imprime en la pdgina banner el titulo especificado en #ulo.

A rgumentos
fichero Es el nombre o aombres del fichero o ficheros que van a ser impresos. Si enfahero
no se especifica nin@ fichero o se especifica un sign0 gui6n (-), la utilidad lp toma
la entrada del stundurd-input.

Ejemplos
El siguiente ejemplo utiliza la utilidad Ip para enviar un fichero a la cola de la impresora 22q:

$ lp -d22q fiknume
requesti d ran#

El siguiente command-line lp envfa dos copias del fichero inf0.p con prioridad 24 (clase B) a la
impresura 22x

$ lp -q24 -n2 -d22x info.ps


request i d nnn

-
3 EL SISTEMA DE IMPRESION LPRttg 97
Programas de U t i l W UNIX

Utilidad Ipq
Descripcidn
La utilidad Ipq examina el &ea del spool usada por el program Ipd para proporcionar informa-
ci6n del estado de las impresoras o jobs especificados. El orden de los jobs en la cola de spool
est4 clasificadoen orden FIFO (First In, First Out), modificado por la clase y prioridad del job.

Formato
Ipq [spciones] [iobidJ

Opciones
-A Utiliza la li1nci6n de autenticidad cuando se envia la petici6n al smidor Ipd
-D opcwnes-depuracidn
La depuraci6n de errores es controlada especificando la apci6n -D.El asgumento op-
c w m s d e p w d n acepta una lista de apciones de depuraci6n sqaradas por comas.
Estas opciones toman una de las dos formas: facilidadwalor o valor para establece
un valor de defecto general.

-Pirnpresora
Indica la cola de la impresora que va a ser examinada; el defect0 (en orden de priori-
dad) es: la especificadaexplfcitamenteen la opci6n -Pimpresora, la especificada en la
variable de entmo PRINTER, la especificada en la primera entrada de la informaci6n
printcap, y la especificadaen la entrada defaultqrinter del fichero de co~iguraci6n.

-V Visualiza informaci6n de la versi6n en curso del sistema LPRng.

-a Visualiza una lista del estado de todas las impresoras contenidas en la base de datos
printcap. Esta lista es generada por el server, y puede diferir de la lista contenida en la
informaci6nprintcapdel usuario.

-I Incrementa la informaci6n visualizada por defecto de la impresora especificada. Por


cada opci6n -I especificada, la informaci6n visualizada se ira incrementando.

-s Visualiza informaci6n resumida del estado de la cola de la impresora especificada.

-tstime Obliga a la utilidad Ipq a visualizar (cada interval0 de tiempo especificado en segun-
dos en el padmetro stime) la cola del spool de una impresora especificada.

Argumentos
jobid Las opciones pueden ir seguidas de un identificador de fichero (jobid), el cual es usa-
do para seleccionar 10sjobs deseados. Unjobid puede ser: un nombre de usuario, un
nGmero de job, un identificador de job, o UM plantilla global que sera aplicada a 10s
identificadores dejob.

El comando Ipq invocado sin argumentos proporciona informaci6n de la impresora de defecto.

98 -
3 EL SISTElcu DE IMPRESION L P R e
Progrdmas de Utilidad UNIX>*

Ejemplos
La salida del siguiente comando lpq muestra que la impresora 22a time la impresi6n desactiva-
da (printing disabled) y que hay unjob encolado. El fichero anuncios.txt no mi4 impreso hasta
que el operador emita un comando Ipc start para dicha impresora:

$ Ipq -€%a
Printer: 22a@inf2 '2% KYOCERA' (printing dmbled)
Queue: 1printablejob ,
Server: no server active
Status: job 'nobody@in€2+973' removed at 14:17:08.747
Filter-status: done at 14:17:08.708
Rank OwnerAD Class Job Files Size Time
1 operator@jenSO+385 A 385anunciostxt 321 19:06:53
$ Ipc start 22a
22a@inzt
printer:
22a@infLaematXs:started
$ Ipq - m a
Printer:=@id2 '2hKYOCERA'
Queue: 1printablejob
Server: pid 14457active
Unspooier: pid 8499 active
Status: printing data f i e 'dfA385je~.aemat.cs*,Siae 321 at 19:14:56.200
Filter-status: printer status ' 0 N L I " R U E ' at 19:14:56.646
Rank OwnerlLD Class Job Files s i Time
active operator@jen50+385 A 385anunciatrt 321 19:06:53

El siguiente cornando Ipq visualiza la siguiente informaci6n de la impresora 22% indidndom


que la impresib esta activada, que no hay fichaos en impresi6n ni en cola y que tiene una cola
bounce asociada, de la cual tambidn nos facilita informaci6n de su estado:

$ Ipq -P22x
Printer: 22x@inf2(dest b22x@sprt)'22s XEROX 4220'
Queue: no printablejobs in queue
Classes: a
Status: job 'nobody@hFk98' removed at 17:18:25.439
Filter_status. done at 17:18:25368
P r i n t e ~b22x@infZ
Queue: no printablejobs in queue
Status: job 'nobody@Pintk98' removed at 17:1839.122
Filter-status: done at 17:18:37.031

El siguiente comando visualiza informaci6n resumida del etado de la impresora 22J


$ Ipq 6 -PUf
22t@infZ 5 jobs

El siguiente comando visualiza 10s ficheros del usuario explo70 de la cola de la impresora 22e:
$ Ipq - m e explo70
Printer: 22e@intL '22e HP-8100 DN'
Queue: 3 printable jobs
Server: pid 113active
Unspooler: pid 14857active
classes:I
Status: printing data fie 'dfASZSif2.aemat.cs', size 31200 at 1851:07.275
Filter-status: printer status 'NAMlk"18-51-10.732 PID 28580"' at 18:51:14.328
Rank OwnerAD Class Job Files Size Time
active explo70@inf2+328 I 328 PRMOD-06 31200 180253
2 explo70@inf2+432 1 432PRMOD-07 31200 18:0256
3 explo7O@infZ+985 1 985PRMOD-08 31200 18:0259

3 -EL SISTEMA DE IMPRESION LPRng 99


Proaramas de Utilidd UNIX

Utilidad lpstat
El sistema LPRng dispone del comando lpstat para visualizar informaci6n relativa al estado en
curso del servicio de impresoras Zp. El comando lpstat eta.implementado como unfronf-end al
programa Ipq del sistema LPRng.

Fomtato
lpstat [-opciones] [all]

Opciones
-a Informa si las impresoras acqtan peticiones.

-d Visualiza el destino del defecto del sistema para las peticiones de salida.

-0 [&tal Visualiza el estado de las peticiones de salida. El padmetro lis& es una lista de
nombres de impresora, de nombres de clase o de identificadores de peticiones. La
parte opci6n -0 puede ser omitida.

-p [&tal Visualiza el estado de las impresoras especificadas en fiSta.


-r [Zkta] Visualiza el &ado del planificador de peticiones y el estado de la impresora o im-
presoras especificadasen&&.
-s [list4 Visualiza un resumen del estado de las impresaras especificadas en Uta.
-t Visualiza informaci6n de todas las impresaras.

-uuserid Visualiza el estado de las peticiones del usuario especificadoen userid.

AIlgrcmentos
all Visualiza informaci6n relevante de todas las impresoras.

Ejemplos
El siguiente comando lpstat visualiza el estado y las colas de las impresoras 22q y 22r:

$ lpstat 22q 22r


Printer 22q@inf2online. enabled since 16M:03. available.
Rank OwnerAD Class Job Fdes Size Time
active operator@&+666 A 666 dista 253 162523
2 expl07O@daxp+701 K 701 sal-long 522348 10:30:17

Printer 22r@inf2online. enabled since 1506%. available.

El siguiente ejemplo visualiza el dispositivo de defecto para las peticiones de salida:

$ lpstat -d
system default destination: terminal

100 3 - E L SISTEMA DE IMPREXIUNLPRng


Programas de UtiWad UNIX

Utilidad Iprm
Descripcibn
La utilidad Iprm (tambiCn emitida como cancel) envia una petici6n al program Ipd para &mi-
narjobs de la cola del spool de una impresora Usualmente, los usuarios s610 pueden barrar los
jobs submitidos pop ellos mismos desde el host que fue originada la petici6n Ipr. Los usuarios
con permisos del CONTROL de las colas del spool (por ejemplo, administradores del sistema y
operadores) pueden barrar uno o todos losjobs de una o de todas las impresoras.

La utilidad Iprm, primer0 investiga la cola del spool para ver 10s permisos de borrado que tiene
el job, luego, 10sjobs que se corresponden con 10s especifkados son borrados. Si el comando
Iprm es emitido sin opciones, la utilidad lprm borra el primer job de la cola si el usuario pro-
pietario de ese fichero es el mismo que invoca el comando lprm

Fomzato

Opciones
-A Utiliza la funci6n de autenticidad cuando se envia la petici6n al server Ipd.

-a Borra todos 10s fickos del usuario de la impresora especificada.

-Dopciunes-depwacii5n
Controla la depuraci6n de errms. El argument0 opcwnes-depuradn a q t a UM lista
de apciones de depuraci6n separadas por comas,las cuales toman una de las dos fa-
mas: faciIidad=v&r o v&r para establecer un valor de ckfecto general.

-Pimpresora
Especrica la impresora que va a SK tratada; el defect0 (en orden de prioridad) es: la
impresora especificada en la opci6n -Pimpresora, la especificada en la variable de
entorno PRINTER y la especificada en la primera entrada de la base de data prinfcap.
-V Visualiza informacibn de la versi6n en curso del sistema LPRng e informaci6n relativa
a las actividades realizadas.

Argumentos
jubid Es eljob ojobs que van a SK bonados. Unjubiff puede SK: un nombre de usuario, uno
o varios ncimeros dejob, un identificador dejob, o una plantilla global que ser6 apli-
cada a 10s identificadores dejob. El ncimero dejob, el nombre de usuario y el identifi-
cador dejob puede ser obtenido con el comando Ipq.

all Borra todos 10s ficheros de la impresora especificada.

El sistema LPRng examina todos 10s jobs de la cola de la impresora especificada e indica 10s
nombres de 10s ficheros borrados. Si el job que va a ser eliminado est6 activo, el server Ipd pa-
rar6 la impresi6n deljob y despueS reiniciari las aperaciones de impresi6n con otrojob.

3 -EL SISTEMA DE IMPRESION LPRng 101


Programas de Utilidad UNIX

Ejemplos
El siguientecommand-lineelimina el job nfimero 250 de la cola del spoof de la impresora 2 2 d

# lprm -P22d250

El siguientecomando Iprm burra losjobs 271,277 y 278 de la cola de la impresora 22q:

# Iprm -P22q271 277 278

El siguiente comando borra losjobs de impresi6n del usuario Lopez de la impresora 22x

# Iprm -P22xZopez

El siguiente comando borra todos losjobs de impresi6n de la cola del spool de la impresora 22r.

# Iprm - P a r all

El siguiente c o m d - l i n e lprm borra todos losjobs de todas las colas del spool:

# Iprm -a all

El siguientecomando barra losjobs con identificador nobody@systemde la impresora 22j:

## Iprm -P22]‘nuboCry@system*’

Utilidad Ipc
Descripcibn
El program lpc (line printer control) es utilizado por el administrador del sistema para contro-
lar la operaci6n del sistema de impmaras. Por cada impresora confQpada en el fichero de la
base de datos prinicap, y las especficadas en el fichero de configuraci6n Zpdconf, la utilidad
Ipc puede ser utilizada para:

Activar o clesactivar una 0 varias impresoras.


Activar o desactivar una o varias colas del spooling de impresoras.
Reorganizar el orden de 10sjobs en la cola del spooling de una impresora.
Proporcionar el estado de impresoras, las colas del spoofing asociadas y 10s daemons.
Retener y liberar unjob espffico de la cola de una impresora.
Redirigirjobs a otras impresoras.
Reimprimir un job despuk de haber resuelto los problemas de una impresora.

La aperaci6n de cada cola del spool es controlada por elfichero de control del spool de impre-
sora, que contiene un conjunto de opciones y valores para a t e fin Cada job en la cola del
spool, a d e d s delfichero de control del job, puede tener unfichero de contenci6n del job, el
cual contiene informaci6n detallada de c6mo el spooler va a tram unjob. El server actualizara
estos fichaos con infarmaci6n del estado y de otra naturaleza cuando el job sea prrocesado. La
utilidad Ipc opera enviando peticiones al proceso server del Ipd para achmlmr lainformaci6n
de estos ficheros y para indicar a los procesos server que la informacidn ha sido actualizada.

I02 -
3 EL SISTEMA DE IMFRESIONLPRng
Programas de Utilidad UNIX

Formato
Ipc [-opciones] [subcomando @ar&netro ...I1

Opciones
-A Utiliza la funci6n de autenticidad cuando se envfa una orden al server Ipd

-Dopcwness-depuraeibn
Esta apci6n controla la depuraci6n de mores,aceptando una lista de opciones de de-
puracion separada por comas. Estas Opciones toman dos formas: facilidad=vahr o
v&r para establecer un valor de defecto general. La forma -D=visualizari UM lista
de @ones de depuraci6n.

-pimpresora
Indica la cola del spool de la impresora sobre la que se va a realizar la aperaci6n. Si
esta apci6n no es especificada, seri seleccionada la impresora especificada en la va-
riable de entorno PRINTER o la impresora especificada en la primera entrada del fi-
chero printcap. Si son seleccionadas t& las impresaras, el programa Ipc primer0
intern localizar la entrada dl del ficheroprintcup; el valor del campo all de la en-
trada printcup sera una lista de impresoras a controlar. Si no hay ninguna entrada all
en la base de dam printcup, la petici6n es directamente reenviada al host del Ipd de
defecto, el cual harA una consulta a todas las impresoras disponibles. Especificando
all@hustel usuariopuede controlar todas las impresaras de un host dado.

-V Visualiza informaci6n de la versi6n en curso del sistema LPRng.


Emitida sin argumentos, la utilidad Ipc visualiza un prompt para que introduzcamos uno de sus
submandos. Emitida con argumentos, la utilidad Ipc intapreta el primer argument0 como uno
de sus subamandm y el rest0 de 10s argumentas mmo paribnmos del subcomando. El permiso
para utilizar 10s comandos de control de la cola del spool es de€erminadopor el fichero de per-
misos lpdpenn.

Subcomandos
Los siguientes son 10s submandos y parilmetros reconocidos por la utilidad Ipc:
abort [all I impresora ..I
E l i m i ~el pid del proceso server y abom eljob activo, per0 &e queda en cola.
Accibn: Actualiza el campoprinting-disabled del fichero de control de impresora.

active impresora[@hosfJ
Realiza una conexi6n al server de la impresora especificada (e inmediatamente la cie-
rra). Est0 es cltif para vMicar si un server que no sea del sistema LPRng estA activo.
...
class [all I impresora I eluse I X+an.tillu I offJ
Visualiza la clase en curso y/o establece la clase especificada en e k e en la impresara
especificada; donde clase es una lista de clases, por ejemplo A, B, C que liberadn las
clases A, B y C para la iqresi6n. La fama X=jprcurtiUa ejmta una correspondencia
con respecto a una entrada del fichero de control comenzando con una letra mafiscula
indica&, por ejemplo, J=*fonnl* permitiriajobs que tuviesen la cadenaform1 en lm
nombres dejobs. El paritmetro off libera todas las clases de impresi6n.

3 -EL SISTEMA DE IMPRESION LPRAg 103


Programas de U t i l W UNIX

...
debug [all I impresora 4 cadena I offJ
Establece la cadem de dquraci6n en la impresora especificada, generando un diag-
n6stico de ayuda que seri4 usado con precauci6n En general, podemos usar:
-
NUMERO un nfimero enter0 establece el nivel de depuraci6n general.
chve - establece una opci6n de dquraci6n.
cZave=valor - estableceUM variable de depuraci6n a un valor especificado.
Accidn: Actualiza el campo debug del fichero de control del spool.
disable [all I impresora .-I
Desactiva el spooling de la impresora o impresaras especificadas en impresora. Una
impresora con el spooling-disabled no admitejobs para la impresi6n
Accidn: Actualm el campo spooling-disabled del fichero de control de impresora.

down [all I impresora -.I


Desactiva la impresi6n y el spooling de la impresora o impresoras especifkadas.
Accidn: Actualiza 10s campos spooling-disabled y printhg-disabled del fichero de
control del spool.
enable [all 1 impresora ...I
Activa el spooling (desactivado con el comandodisable) de la impresora especificada.
Accidn: Actualiza el campo spooling-disubled del fichero de control del spool.

exit Finaliza la operaci6n de la utilidad lpc.

help Visualiza infmmaci6n resumida de todos 10s comandos de la utilidad lpc. Una entrada
no reconocida pop la utilidad lpc tambiCn visualhri4 esta infmmaci6n
hold impresorajobid
Retiene eljobid de la cola de la impresora especXicada. Ver el comando rdease.
Accidn: Actualiza el campo hold del fichero de contencidn del job con la hara en la
que eljob fue retenido.
holdall [all I impresora ...I
Activa la retenci6n automittica dejobs para la impresora especificada. L
a apci6n :ah:
del fichero printcap tambiCn puede activar la retenci6n autodtica dejobs del spool.
Losjobs submitidm despueS de emitir el comando holdall s a h relenidos, permane-
ciendo en este estado hasta que sean liberados con el comando release La desactiva-
ci6n de la retenci6n autodtica dejobs se realiza con el comando noholdall.
Accih: Actualiza el campo holdall del fichero de control del spool.
kill [all I impresora ...I
Elimina elpid delproceso server y eljob, e intentaril recuperar el job en curso. Asegu-
rarse de que la impresora inicia la recuperaci6n deljob.
Ipd impresora[@hosfl
deter mi^ si el proceso del daemon lpd del server de impresi6n est6 ejecutando, obte-
niendo el pid del server. Esta opci6n es prilctica para determinar si el daemon Ipd fuC
eliminado (killed) o abortado (aborted)debido a condiciones anormales.

lpq impresora
Visualiza informaci6n resumida del estado de la impresora especificada.

lprm impresorajobid
Ejecuta la utilidad lprm desde el programa lpc. Esta forma no soporta todas las opcio-
nes del programa Iprm

104 3 -EL SISTEMA DE IMPRESIONLPRng


Prog@rnas de Utilidad UNIX

move impresora-origenjobid impresora-destino


Traslada el identificador de job especificado enjobid, de la iqresora-de-origen a la
impresora-de-destino.Los jobs transferidos conservan el ntsmero dejob y la fecha del
job que tenfan en el host de origen, pierden el estado de retenci6n (hold) si el job esta-
ba retenido, y son borrados de la cola de la impresora de origen.
Accidn: Actualiza el campo move del fichero de contenci6n del job con el destino, e
inicia unproceso sewer para hacer la transferencia del job.

noholdall [all I impresora en]


Desactiva la menci6n autoMca dejobs (activada con el subcomando holdall) de la
impresora o impresaras especificadas en impresora.

quit Finaliza el programa Ipc.

redirect [impresora-origenimpresora-destino I o q
Redirige todos 10sjobs en curso (y/ofuturosjobs) de la cola de la impresora-origen a
la cola de la impresora-destino. El parhetro off desactiva la redirecci6n dejobs.
Accidn: Actualiza el campo redirect del fichero de control del spool.

redo impresora [ioba


Inicia (despierta) la impresi6n de la impresora Seleccionada ylo deljob seleccionado.

release impresorajobid
Libera el jobid especikado enjobid (retenid0 con los submandos hold o holdall)
de la impresara seleccionada.

reread impresora[@hostl
Envia una pe€icih al sewer Ipd de la impresora para volva a leer infarmaci6n de las
bases de datos printcap y configuracidn. Esta &6n es equivalente al us0 del coman-
do kill -HUPservewid, per0 puede ser emitido en servidores de hosts remotos.

start [all I impresora ..I


Activa la impresi6n (Parada con el subcomando stop) de la impresora o impresoras
espificadas en impresou.

status [all I impresora en]


Visualiza el estado de la impresora o impresaras especificadas en impresora.

stop [ail I impresora .I


Desactiva la impresi6n (printing)de la impresora o im.presoras especificadas, despueS
de que se complete eljob en curso.

topq impresorajobid
Pone eljobid seleccionado al comienzo de la cola de la impresora seleccionada.
Accidn: Actualiza el campopriority delfichero de contencidn deljob.

up [all I impresora ...I


Activa la impresi6n (printing)y el spooling (desactivados con el subcomando down)
de la impresora o iqraoras especificadas.

El padmetrojobid de 10s comandos Ipc puede sa:un nombre de usuario, un nrfmero dejob, un
identificador de job o una plantilla global que se carresponda con identificadores de jobs. El
nismero y el idenMicador dejob, y el nombre de usuario pueden obtenerse con el programa Ipq.

3 -EL SISTEMA DE IMPRESION LPRng 105


Programas de U t i l W UNIX

Ejemplos
El siguiente command-line establece la clase F en la cola de la impresora 22q, indicando que
por la impresora 22q s610 s e r h impresos 10sjobs con dicha clase:

# Ipc class 22q F


classes printed ‘F’
22q@inn: ckss updated

Una vez que finalice la impresi6n de 10s ficheros con clase F, si queremos &jar la impresora
con clase universal, emitiremos el siguiente comando:

# Ipc class 22q off


all dasses printed
22q@inrnckss updated

El siguiente command-line reliene eljob 245 de la cola de la impresora b22x

# Ipc hold b22x 245


b22x seleded ‘uplo70@daXpc245’
b22x@inft:updated

El siguiente command-line Ipc libera losjobs retenidos con identificadm expl0708inf2, encola-
dos en la impresora 2 2 1

El siguiente ejemplo pone eljob 738 al comienzo de la cola de la impresora b22x

# Ipc tops b22x 738

El siguiente command-line activa la retenci6n autodtica dejobs en la impreSara 2 2 d

# Ipc holdall 22d


22d@inn holdall on

El siguiente comando desactiva la impresi6n de la impraora 22q:

# Ipc stop 22q


22qeinf2: stopped

El siguiente command-line hars que todos los jobs enviados a la impresor 22r, sean redirigidos a
la impresora 22q:

# Ipc redirect 22r 22q


forwarding to ‘229’
22r@inft:redirected

El siguiente command-line visualiza Ios estados de las impresoras 22d, 22q, 22r y 22e:

# Ipc status 22d 22q 22r 22e


Printer Printing Spooling Jobs Server Subserver Redirect Status/(debug)
2M@inf2 enabled enabled 2 6509 3462 @dbW
22q@inf2 disabled enabled 3 none none
22r@inn enabled enabled 0 none none 2%
22e@inf2 enabled enabled 59 12552 24691 ( C k I )

106 -
3 EL SISTEMA DE IMPRESION LPRng
Progmmas de Utilidd UNIX

4 - FILTROS EN LOS SHELL-SCRIPTS

En este capftulo se incluye la secci6n “Expresionesregulares”, ya que algunas utilidades UNIX


como awk,grep, sed, vi y ed, entre otras, utilizan expresiones regulares para localizar y reem-
plazarcadenasdecaractefes.
.
Expresiones regulares
Introduccidn
Una expresidn regular define un conjunto de Una 0 nxh cadenas de caracteres, componiendo un
argument0 para ser inteqre€adopor un comando UNIX. Una cadena simple de caracteres es UM
expresi6n regular que define una cadena de caracteres, 10s cuales se representan asf mismos.
Una expresidn regular maS compleja utiliza caracteres espiales para curresponderse con nxh
de una cadena de caracteres. Un &cter especial no se representa asf mismo.

Muchas veces, para identil5car una expresi6n regular se utilizan indisdntamente, 10s ttkminos:
expresi6n regular, plantilla o cadem (de caractem). El &mino correspondencia, es utilizado
para indicar que una cadena, plantilla o expresi6n regular se empareja o coincide con el texto
que se esta tratando, es de&, se curresponde o tiene ccfflespo&ncia con un conjunto de carac-
teres del fichero de texto (0 del standard-input)que est4 lratando la utilidad especifhda.
En &minos generales, el sistema UNIX dispone de dos t i p diferenciados de expresiones re-
gulares: expresiones regulares bhicas y expresiones regulares extendidas.

Delimitadores
Generalmente, en una expresi6n regular, un curdcter delimitador marca el comienzo y el final
de esa expresi6n. El delimitador es sieqre un car6ctep especial que delimita la expresidn regu-
lar (esdecir, no se representa asf mismo, s610 marca el principio y el fin de la expresi6n). Como
delimitador podemos utilizar cualquier cadcter, con tal de que utilicemos el mismo car- en
ambos extrema6 de la expresi6n regular. El delimitador maS cornfin es el carkter barra inclina-
da (0. En algunos casos, el segundo delimitador puede ser omitido, por ejemplo, cuando el de-
limitador puede ir inmediatamente seguido de un carA&x <RETUW>. En algunas utilidades,
como en las de la familia grep no se utilizan delimitadores.

Expresibn regular bdsica


Las expresiones bhicas utilizan caracteres especiales para corrsponderse con m& de una ca-
dena de caracteres, aunque la expresi6n regular m& Mica es una cadena simple que no contie-
ne caracteres especiales, except0 10s delimitadores. Una cadena simple s610 tiene corresponden-
cia con ella misma, como se muestra en la6 siguientes ejemplos:
Expresih &nificado EiemDlo
Itad Correspondencia con la cadena tan. tan, cant3 g e a r

Ies decirl Correspondencia con la cadena es decir. es decir quieres decirme


9-

-
4 FILTROS EN U S SHELGSCRIPTS 107
Programas de UtiMad UNIX

Caracteres especiales
En UM expresibn regular bhicu pueden utilizarse curucteres especiules para ham que la ex-
presi6n regular se corresponds con mils de una cadena de caractem. Estos caracteres son:

El cadcter punto (.).


Los caracteres corchetes ([I).
El carktm asterisco (*).
El caracter d6lar ($).
El carikter acento circunflejo (A).

El carkterpunto
El cariktex punto (.) se corresponde con cualquier car6.cter. Veamos 10s siguientes ejemplos:

Emresibn Sinnificudo Eiemvlo

/.d Correspondencia con cadenas que contengan esarama, unacama


un espacio, seguido de cualquier car-, y
&e seguido del literal u r n

l.idd Correspondencia con cadenas que contengan pedidos. nido, lamlatrfa


cualquier car-, seguido del literal ido.

L a camcteres corchetes
Los axchetes de apertura y cierre ([ 1) definen un deter o conjunto de caracteres para uxres-
, ponderse con cualquier carficter dnico contenido dentro de 10s corchetes. Si el primer car&er
demo de 10s carchetes, es un carikter awnto circunflejo ("), 10s corchetes definen un car- o
conjunto de caractera que se corresponden con cualquier car6cter Wco que no estil compren-
dido demo de 10s caractem corchetes.

Para indicar un rango de caractera puede ser utilizado el car6cter gui6n (-). En la definici6n de
un conjunto de caracteres, 10s caracteres barra i n c l i ~ d a(/), asterisco (*) y a l a r ($) pierden su
significado especial:

E.~presibn Significudo EiemDlo

/[aA]na/ Correspondenciacon cadenas que contengan -


Ana, anaconda, b a a
las letras u o A, seguidas del literal nu.

/d[aeiou].l/ Se corresponde con la letra d seguida de una -


doblar,&d endde
vocal, &a seguida de cualquier cariicter, y
&e seguido de la letra 1.

/niimero [6-9y Se corresponde con la palabra nlirnero, segui niimero 8:, niimero 60
da de un espacio, y &e seguido de un niime- Ver niimero 9
ro de rango 6 a 9.

/["a-zA-Zy Correspondenciacon cualquier car6cter que -1, forLf, B, ,. stop!


no sea una letra.

108 -
4 FILTROS EN U I S SHELL-SCRIPTS
Progrdmas de Utilidaii UNIX;

El cardeter asteriSco
El car&cter asterisco (*) puede seguir a UM expresi6n regular que representa un car4cter 6nico.
El car4cter asterisco representa cero o maS ocurrencias de una correspondencia de la expresi6n
regular. Un carilcter asterisco precedido de un car6cter punto tiene carrespondencia con cual-
quier cadena de caracteres. (Un punto se mesponde con cualquier carilcter, y un asterism se
correspondecon cero o m6s ocutrencias de la expresi6n regular precedente).

Una definici6n de clase de caracteres o conjunto de caracteres, seguido de un asterism, se 00-


rresponde con cualquier cadena de caracteres que sea miembro del conjunto de caracteres.

Ex~resi6n Sianiticado Eiemplo

/ab*cJ Se corresponde con la letra a, seguida de cero ac abc, abbc becaabbbc


-9- -9

o maS letras b, y etas seguidas de la letra c.

/ab.*cJ Correspondencia con el literal ab, seguido de abc abxc, ab45c


-9- -9

cero o nx4s caracteres cualesquiera,y &os se- xab 756.34 x cat


guidos de la letra c.

/t.*andd Correspondencia con cadenas que contengan todos estaban nadando


la letra t, seguida de cero o &I caracteres,y cantando, toreando
&os seguidos del literal ando.

/[a-ZA-Z ]*/ Correspondencia con cadems mmpuestas de 1. Cua es el resultado?


letras y espacim.

4.*Y Correspondencia con cadenas que comiencen late), mira lese v aauel)
con el carikter ( y fillalicen con el carikter ).

El acento circunflqjo y el d 6 b
Una expresi6n regular que comience con un acento circunflejo (A) puede corresponderse con
una cadena de caracteres s610 al comienzo de una Ifnea. De la &ma forma, UM expresi6n re-
gular que finalice con un signo d6lar ($) tiene correspondencia con el final de una linea.

Emresibn Sianificado Eiemplo

PEY Se corresponde con la letra E al comienzo de Esta es la linea 12 ...


UM Ifnea. Baseunave...

/*+[0-9y Se ccn-responcfe con el car4cter +, seguido de +5 Go...


un s610 dlgito, a l comienzo de una Unea. fl59 ...

I:$/ Correspondencia con el car4cter dos puntos ... la siguiente;


(:), al final de UM Ifnea.

/[mx]$/ Correspondencia con las Ifneas que finalicen ...la corn


con las letras rn o x. ... el ave fen&
Correspondencia con lineas blancas.

-
4 FILTROS EN LQS SXELL-SCRIPTS 109
Programas de Utilidad UNIX

Proteccidn de caracteres especiales


Cualquier car6cter especial de UM expresi6n regular puede ser protegido, precediendole de un
car6cter bama inversa 0).Un car6.cter especial protegido se rqresenta asi mismo.
Exvresibn Sianificado Eiemvlo

/fin\/ Correspondencia con cadenas que contengan El fin Sera&& s i ~ a f


el literalfin, seguido del car6cter punto (.).

AV Correspondenciacon un signo barra inversa Protegidos con el signo 5


0) bnico.
A*/ Se corresponde con un car6cter asterisco (*). que frnalizan en l.c

API Correspondenciacon la cadena IS]. Un indice de

/Yvd Correspondenciacon la C&M y/o. disco v/o cinta

Expresiones regulares vacihs


UM expresi6n regular vada siempre represents la ciltima expresi6n regular que fue utilizada.
Pur ejemplo, si al editor vi le suministramosel siguiente comando de sustituci6n:

S/JUan/PedrO/

y despub queremos ejecutar la misma sustituch, podemos utilizar el comando siguiente:

d/PedrO/

Altmtivamente, podemos utilizar los siguientes comandos para buscar la cadena Juan, y des-
pub hacer la sustituci6n:

La expresi6n regular vada (//) rqresenta la ~Iltimaexpresidn regudr utilizada: /Juan

Expresiones entre parhtesis


Las expresiones regulares delimitadas por parentesis pueden protegerse con caracteres barra in-
versa inclinada o), en cuyo caso, la expresi6n regular no intenta la correspondencia, por lo que
dicha expresi6n regular se corresponder6con la misma expresi6n que podria corresponderse sin
los caracteres parentesis.

Por ejemplo, las siguientes expresiones:

se corresponden con las cadenas de caracmes que las expresiones regulares: /expreg/ y /ab*d
podrian corresponderse.

110 -
4 FILTROS EN LOS SHELLSCRIPTS
Progmmas de U t i W UNIX.

Cadenas de sustitucidn
Los editores sed y vi utilizan expresiones regulares como cudenas de bhqueda en 10s coman-
dos de sustituci6n. Para representar la cadena mespondida en la cadena de sustituci6n m a -
pondiente, pueden especificarsedos caractem especiales: el carikter ampersand (&) y un dgito
protegido ma una barra inversa (I).

El CarCEcter ampersand
El ampersand (&) en una cadena de sustitucih, toma el mismo valor que el de la cadena de
btfsqueda (expresi6n regular) cmespondida. Por ejemplo, el siguiente comando de sustituci6n:

delimita una cadena de uno o m6s niimeros con el literal NN.El carilckr & en la C&M de sus-
tituci6n se mesponde con cualquier cadena de niimeros de la expresi6n regular (cadena de
bbsqueda) correspondida. Del conjunto de caracteres son requeridos dos caracteres, ya que la
expresi6n regular [0-9]* se carrespondecon cero o miis ocurrencias de un digit0 y con cualquier
carikter de la cadena que contenga cero o mAs ocurrencias de un dfgito.

Digitos protegidos
En una cadena de sustituci614un d@to protegido &)repesenta la miSma cadena que la de la
expresi6n regular entre par&tesis, comemando con el enkimo niimero correspondido.

Par ejemplo, podemos tenar una lista de personas con el siguiente farmato:
twmbre
se~nthapeBdo,o,primer-crPellido
y colocarla de la siguiente forma:

primer-apellido mmbre segundo-cpellido


Si emitimas el siguientecornando del editor vi:

l,$SA([A,l*\), \(.w2
\y

El comando s seleccionaril todas las lineas (l,$)del fichero. El comando s utiliza una cadena de
biisqueda y una cadena de sustituci6n, delimitadas por banas inclinadas. La primera expresih
regular entre padntesis, dentro de la cadena de biisqueda, A([A,]*\), se corresponde con la mis-
ma expresi6n regular que podria mesponderse la expresi6n regular entre corchaes, [A,]*. Esta
expresi6n regular se mesponde con una cadena de cero 0 mils macteres, no conteniendo co-
mas (segundo-apellido).
A continuaci6n de la primera expresi6n regular encmada entre parentesis va UM coma y un es-
pacio, 10s cuales se carresponden con ellos mismos. LA segunda expresi6n entre par&esis,
\(.*\) tiene correspondencia con cualquier cadena de caracteres (primer-upellidoy nombre).

La cadena de sustituci6n consta del mismo contenido que la segunda expresi6n regular corres-
pondida encerrada entre parhtesis, W),seguida de un espacio y del mismo contenido que el de
la primera expresi6n regular mespondida 01).

-
4 FILTROS EN LOS SHELLSCRIPTS Ill
Promumas de Wtilidad WNIX

Expresiones regulares extendidas


Las expresiones regulares extendidas, adem& de utilizar 10s caracteres que utilizan las expre-
siones regulares bhicas, utilizan los siguientes caracteres especiales:

El carficter d s (+).
El carilcter inte~ogaci6n(?).
El cadcter barra vertical (I).
Los caractere parkntesis: ( ).

Los caracteres especiales maS (+) e interrogaci6n (?), se comportan de forma similar a la del
caicter asterisco (*), el cual se corresponde con cero o m& ocurrencias del carficter previo. El
c a r e maS (+) se corresponde con una o maS ocurrencias del carficter previo, mientras el ca-
rtkkr interrogaci6n (?) se corresponde con cero o UM ocurrencia del carficter precedente.

Los caractexes especiales: *, ? y + pueden ser utilizados con caracteres parkntesis, haciendo que
el wilder especial se aplique a la cadena delimitada entre p&ntesis. N6tese que los caractem
par&& a p p a n parte de la plantilla y no esw protegidos, a diferencia de 10s par&esis de
las expresiones regulares delimitadas par parkntesis. Veamos los siguientes ejemplos:

Emresidn Sianificudo Eiemplo

/aW Se corresponde con la letra a, seguida de una y-w, -7


o maS letras b, y &as seguidas &la letra c.

/ab?cJ Se corresponde con la letra a, seguida de una bgk, mf


o ninguna letra b, seguidas de una letra c.
/(ab)+C/ Correspondencia con una o m& ocurrencias m m , ababc!
del literal ab, seguido de una letra c.

/(ab)?cJ Corrwndencia con cero o maS ocurrencias wc, abcc


del literal ab, seguido de una letra c.

En las expresiones regulares extendidas el carkkr barra vertical (I) achla como un operador OR
Un c a r e barra vertical (I) entre dos expresiones regulares produce UM uxrespondencia con
la cadena de la primera expresi6n, con la cadena de la segunda expresi6n, o con las dos cadenas
de ambas expresiones.

El carficter barra vertical (I) puede ser utilizado con caracteres par6ntesis para q a r a r del rest0
de la expresi6n regular las dos expresiones que esth siendo tratadas con el operador OR:

ExPresi6n Significudo Eiemvlo

/ablac/ Correspondenciacon ambos literales, ab y ac &, ac, &MC


I /AExitPQuit/ Se corresponde con las lineas que comiencen Exit en la siguiente ...
con el literal Exit o Quit. m t es igual que ...

/(MlA).Lopez/ Se corresponde con la cadena M.Lopez o con J.M.La_Dez. A.Lopez


la cadena A.Lopez

/(NovlDic) 99/ Correspondenciacon la cadena Nov 99 o mn Madrid Nov 99. Dic 99


la ~adenaDic 99.

112 4- FILTROS EN U I S SHELL-SCRIPTS


Promumas de Utilidad UNIX

Concept0 defiltro
Recordernos que un pipe es una via para conectar directamente el standard-output de un co-
mando al standard-input de otro comando, de modo que los comandos se ejecuten en secuencia
como si fuese un comando Qnico.Pop ejemplo, el siguiente command-fine:

Is -IR I grep ‘fichero’


es unpipe que envia el standard-output del comando Is (lanombres de todos 10s ficheros y di-
rectotios de nuestro i4rbol) al standard-input del comando grep, el cual localizartl y visualizarh
en el standard-output, el fichero especificado enfichero.

Unfirtro es la utilidad que procesa (y filtra) un flujo de data de entrada (los toma del stdin) pa-
ra producir un flujo de datos de salida (los envfa al stdout). Un command-fine que incluye un
filtro utiliza al menos dos pipes, un pipe para conectar la entrada &l filtro al standard-input de
otro comando, y otm pipe para conectar la salida del filtro al standard-input de otro comando.

Algunas utilidades UNIX estan diseeadas como filtros, otras utilidades que son interactivas co-
mo vi y mailx M)pueden ser usadas como filtros. Obsmar la descripci6n de una utilidad, si la
utilidad acq.)ta entradas del stdin y envfa salidas al sthut, esa utilidad es un programa filtro.

En el siguiente command-line, la utilidad sort es un filtro que toma el standard-input del stan-
dard-output de la utilidad who, y utiliza un pipe para redirigir el standard-output al standard-
input de la utilidad Ipr. El command-fine envfa la salida clasificada del mmando who a la im-
presora especifida en impresora:
who I sort I Ipr -Pimpresora

Este ejemplo muestra la potencia del shell combinada con la flexibilidad de las utilidades UMX
Las tres utilidades: who, sort y Ipr no fueron especificamente disefiadas para trabajar mutua-
mente, per0 las tres utilizan el standard-input y el standard-output de una forma convencional.
Utilizando el shell para manejar entradas y salidas, podemos encadenar utilidades standard en
un command-line para alcanzar los resultados deseados. Adem&, un filtro permite que un mis-
mo programa pueda ser utilizado en difaentes aplicadones.

Utilidad tee
La utilidad tee envfa el standard-input al standard-output y a uno o h ficheros espBcados
en el command-fine. La utilidad tee es un filtro Gtil cuando queremos visualizar la salida de un
programa, adem& de guardarla en un fichero. Su farmato es el siguiente:

tee [-a] vchero ...I


Si especificamos la apci6n -a, la utilidad tee agrega la salida al final del fichero o ficheros espe-
cificados enjichero (si los ficherm ya existen), en vez de sobrescribirlos.

En el siguiente ejemplo, la salida del comando who es enviada como entrada al comando tee, el
cual almacena una copia en el fichero who.sal y ademas envfa otra copia como entrada al co-
mando grep, el cud visualiza las Uneas que contengan la cadena lopez:

$ who I tee wh.saf I grep ‘Lopez’

-
4 FZLTROS EN U I S SHEllrscRIpTs 113
Programas de Utilidad UNIX

Utilidud grep
Descripcih
La utilidad grep (global expression regularprinter) es unprogrumfilfro utilizado para buscar
UM plantifla dada en uno o varios ficheros, visualizando en el standard-output las lineas que
tengan correspondencia con la plantilla L a utilidad grep usa expresiones regukzres en las plan-
tillas, por lo que m e m o s protegerlas con caracteres ap6strofos.

Formato
grep [-opciones] p w l & ] WChefO ...I

Opciones
-E Hace que la utilidad grep trate la plantilla como una expresi6n regular extendida.

-F Esta opci6n hace que la utilidad grep trate la plantilla como UM cadena fija, no como
UM expmi6n regular.

-b Cada mea visualizada va precedida del &mer0 de bloque en el que fie encontrada la
correspondencia.

-c S6lo visuaba el Illimero total de lineas carrespondidas de cada fichero specificado.


Actlia como un contador de lineas.

-e planfilla
Esta @6n se usa para especificat plantillas que comiencenpor un cadcter gui6n (-).

-fj?chero-phntihs
Especifica un fichero que contiene plantillas para la carrespondencia, una plantilla pur
linea. UM linea blanca en elficiref&pknfih indica una plantilla nula.

-h Suprime la visualizaci6n del nombre de fichero en las lineas correspondidas cuando se


especifican varios ficheros.

-i Considera iguales las letras maflsculas y mintisculas de la plantilla y del fichero, para
la currespondencia.

-1 S610 visualiza el nombre de cada fichero UM vez, uno par linea, aunque tengan m h de
una linea mespondida.

-n Cada linea mespondida va precedida del &mer0 de linea relativo en el fichero.

-Q Suprime toda salida generada por la utilidad grep, except0 los mensajes de mor.

-S Suprimelos mensajes de error procedentes de ficheros inexistentes o no lefbles.

-V Visualiza las lineas de los ficheros que no tengan correspondencia con la plantilla.

-X S610 visualiza las lineas cuya correspondenciacon la plantilla sea de la lfnea entera.

114 -
4 FILTROS EN LOS SHELLSCRIPTS
Pronratnas de Wtilidad UNIX,

Argumentos
planticEa Especifica la plantilla que va a ser buscada en el fichero o ficheros de entrada especi-
ficados en el argumentosfichru. El argumentoplantiua es tratado como si se espe-
cificase la apci6n -e plantilla.

fiheru Es el nombre o nombres del fichero o ficheros que van a ser examinados, para buscar
la plantilla especificada en el argumentoplantilla. Si en el argumentofichru no se
especiEca ningrin fichero, la utilidad grep toma la entrada del standard-input.

Si enficheru se especifica m& de un fichero, las Uneas de salida conrespondidas van


precedidas del nombre del fichero en el que se encontr6 la carrespondencia.

Notas
Par defecto, la utilidad grep trata las plantillas mmo expresiones regulares bhicas, las cuales
pueden llevar ciertos caracteres especiales ylo mnstar de varias palabras, par lo que deberemos
enmarlas entre caractfres ap6strofos (‘ ...’) para Protegerlas de inteqretaciones no deseadas
del shell. La utilidad grep acepta expresiones regulares extendidas si se especifica la opci6n -E.
(Ver “Expresiones regulares”,pdgina 107). Una plantilla nula tiene correspondencia mn todas
las U r n del fichero especificado.

La utilidad grep es dtil cuando tenemos que seleccionar lIneas completas de un fichero. Una
linea ftagmentada en campos no puede ser manejada por esta utilidad Para manejar campos de
las Uneas de un ficko, utilizar las utilidades filtro cut y awk La utilidad cut selecciona cam-
pos y caracteres de las lfneas de un fichero (ver “CJtiUzd cut”, Mgina 125). La utilidad awk
selecciona, reesh’uctura y formatea campos de las Uneas de un fichero (vex “PROGRAMACZON
EN awk”, piigina 153).

El sistema UNIX dispone de mas utilidades similares a la utilidad grep, las utilidades egrep y
fgrep. La utilidad egrep puede ser m& Wida que la utilidad grep, per0 tambien puede usar
maS memoria; la utilidad egrep permite utilizar expresiones regulares extendidas. La utilidad
fgrep s610 promsa cadenas sencillas, no expresiones regulares, por lo que la ejecuci6n es m&
riipida y compacta.

Ejemplos
Algum de los siguientes ejemplos utilizan 10s ficheros pnra, pnrb y pruc, cuyos mntenidos
son los siguients:
$ catprua $ catprub $ catpmc
aaaabbbb aaaaaaaa AAAAAAAA
b b b b bbbbbbbb BBBBBBBB
mxxgg axcdddd cccccccc
d d d d dddddddd DDDDDDDD
ddddaaaa hhhhhhhh EEEEEEE

El siguiente ejemplo visualiza las lineas del ficheropnra que contengan la plantilla b b

$! grep ‘bb’pnur
aaaabbbb
bbbbcccc

-
4 FILTROS EN U S SHELLSCRIPTS 115
Programas de Utilidud UNIX

El siguiente ejemplo visualiza las lfneas del ficheropnur que no contienen la plantilla bb:

$ grep -V ‘bb’ p n ~ r
ax-gggg
ccccdddd
ddddaaaa

El siguiente ejemplo visualiza las lineas que se corresponden con la plantilla bb, precedidas del
ncfmero de linea y del nombre de los ficheros especificados que tengan correspondencia:

$ grep -n ‘bb’pnrapmbpruc
prua:l:aaaabbbb
prua:h b b b k c
prub2bbbbbbbb

El siguiente ejemplo visualiza las lfneas que se correspondan con la plantilla bb, .ya sean letras
maytiSculaso mincfsculas,de l a ficheros cuyos nombres comiencen con el literdpnr:

$ grep -i ‘bb’pm*
pruazmaabbbb
prua:bbbbcccc
prubbbbbbbbb
prucBBBBBBBB

El siguiente command-line visualiza el nombre de cada fichero especificado @mu, pnrb y


pnrc), seguido del ntimero total de lfneas que se corresponden con la plantilla bb:

$ grep c ‘bb’ pnrapnrbpnrc


prUa2
prubA
pruco

La plantilla ‘ A * utilizada conjuntamente con la opci6n -n visualiza todas las lineas de un fichero
precedidas de sus mlmeros de linea:

$ grep -n ‘A’ pmu


1:aaaabbbb
2bbbbarc
3fzz-fxgg
4:caedddd
Sddddaaaa

El ejemplo anterior tendria el mismo efecto, si en vez de especificar la plantilla ‘A’ especilica-
mos UM plantilla vada (”), ya que UM plantilla nula tiene cmespondencia con todas las lineas
de un fichero.

El siguiente command-line visualiza las lineas que contengan una carilcter gui6n (-), de los fi-
chaos del directorio de trabajo en curso cuyos nombres comiencen por el literalpnr:

$ grep r-‘pnl*
prua:ggg-ggg
pruc:EEE-EEEE

El siguiente comando grep visualiza las lineas del ficheropnrc que comiencen con la letra C:

$ grep ‘ACpruc
cccccccc

116 -
4 FILTROS EN LOS SHELLSCRIPTS
Programus de U t i l W UNIX

El siguiente comando visualiza las lineas que contengan la cadena Comundos UNZX, ya est6 es-
crita en maysisculas o mintfsculas, en los fichaos de nuestro directorio de trabajo en curso:

$ grep -i 'COmandoS UNIX *


El siguiente command-line visualiza los fichaos de nuestro directorio bin cuyos nombres con-
tengan el literal backup:

$ Is -1 bin I grep 'backup'

El siguientescript, blineasb, utiliza el comando grep para borrar las lineas blancas del fichero o
ficheros especificados en el command-line, enviando la salida generada al stmdatd-output

$ cat bfineasb
#!/binlsh
-
# script: blineasb Born las lineas blancas del fichero especifiido.
#
if [ 91" r WI '
then
echo Wso comcto:blmeasbfichao ..."
else
grep -v 'A[ I*$' $*
fi

Supongamos que tenemos un fichero llamado datosper, ubicado en el directorio de trabajo en


curso, que contiene registrm con ciartos datos relativos a 10s empleados de una empresa, par
ejemplo: noxnbre, teUfono, DM y departamento:

!$ cat datosper
Juan F e d n d e z 91-3060901 10504324 PUSOM1
Monserrat Puig 91-7902344 9765456 rndticp
Ramtin Garcia 91-7012416 889202 Producciijn
Gin& CQnoVas 968405182 5345876 Ventas
Alice MacDonald 91-3012098 14784349 Compm
Jos6 P k z 947456070 425738 Ventas
0.. ... ... ...
y en un momento &do queremos obtener los datos de uno o varios empleados; entonces pode-
mos crear un script, locdatcs, que sumlnistrhdole los nombres al ejecutarlo, nos visualice los
registros requeridos:

$ cat locdatos
#!/bin\ksh
-
# script: locdatos Visualiza el mgistro o registros cspedfrcados.
#
if [ "$1" = UY' 1
then
echo "Us0 corrccto: locdatos mmbn ..."
else
for nombre
do
grep 4 Snombre datosper
done
fi

$ locdatos alicejuan
Alice MacDonald 91-3012098 14784349 compm
Juan Ferhndez 91-3060901 10504324 P%SOMl

-
4 FILTROS EN U I S SHELLSCRIPTS 117
Programas de UtiMad UNIX

Caracteres especiales y expresiones regulares


A continuacih es mostrada una comparacih entre la interpretacih por el shell Bourne de algunos ca-
rames especiales y la smtaxis de expresionesregulares.
SheU Bourne.- Cuando emitimos un cornando, Exprcsisn regular.- Una expresih regular es un
el shell examha 10s caracteres especiales de ese argument0 que va a sex interpretado por un co-
comando; si no esth protegidos, el shell inter- mando; por lo tanto, si 10s caractexes espedales
preta 10s caractens especiales en primer lugar, son utilizados como argumentos en un camando,
antes de la ejecuci6n del cornando. deben set protegidos de intqmtacimes del shell.

. Ejecuta un scripfen el shell en cu~so: Currespondenciacon cualquier carActex:


$ ..pro@ $ grep ‘te.f fichero
* Currespondencia en nombres de fichero con correspondencia con cero 0 mas oanrencias del
cero 0 In& ocurrencias de cualquier CarweC cmkterprecedentedelaexpresi6n regular:
$ rmpru* $ grep ‘ab*c’fichero

$ Sustituyeel valor de una variable: Fuenalacarrespondenciaalfinaldeunalinea:


$ echo $HOME $ grep ‘ C & d fihero

& Se utilizapara ejecutar un proceso en modo Correspondencia con la expresih regular corres-
background pondida (literal):
$ ccpr0gram.c & $ grep ‘$iit&hst‘fxhero

[ ] Expande nombres de fichero: Define un rango de caracteres:


$ Isfichero[Z-5] $ grep %[a-zl’fichero

[!] Correspondencia cool cualquier car&uerno [^I Carespopldencia con cualquier ~~I%c&xno
incluido entre 10s uxchetes: incluido entre 10s uxchetes:
$ ISpro&!Z-5] $ grep %[~u-z]’fichero

A Utilizado ccnno un car6cter pipe por el shell: carrespdencia al comienzo de una mea:
$cmdAcmd $ grep “Xos’fichero

\ Protege cualquier deter especial que sigue Protege cualquier d m especial que sigue al
al signo ITambien continuaci6n de entrada: signo k
$ echo ”TeckarWc” $ grep /bin/csh\$ /etc/passwd

‘ Protege todos 10s caractetes especiales, ex- Protege todos l a caractexes especiales excepto
cepto otro signo ap6strofo (‘): otro carzlcter ap6strofo (‘):
$ echo ‘Teckar $ubc’ $ grep ‘*‘fichero

“ Protege 10s metacaracmes, excepto \ y$ Protege 10s carames especialesexcepto\. y$


$ echo “Dir: $HOME’ $ grep “ “fichero

? Correspondencia con cualquier carActer hi- Correspondencia en expresiones regulares exten-


co en nombres de fichero: didas con 0 o una ocurrencia del car6uer previa
$ Is -Ipr?? $ grep E ‘ab?c’fichero

I Separa nombres de path Delimita plantillas en editors:


$ cd /usr/shurehan $ ed ‘s/user/usmbPfEhero

I18 4- FILTROS EN U S SHELLSCRIPIS


PmgrLimas de Utilidad UNIX

Utilidad sort
Descripci6n
La utilidad sort clasifica y fusiona registros de uno o varios ficheros de entrada, enviando el
resultado al standard-output, a no ser que se especifique un fichero de salida. Si no se especifica
ni@n fichero de entrada o sp.especifica un cadcter gui6n (-) como fichero de entrada, la utili-
dad sort toma la entrada del standard-input, actuando mmo unprogrumufiltro.

La utilidad sort realiza las siguientes funciones:

Clasifica, a un mismo tiempo, las lfneas de todos 10s ficheros especificados, y escribe el
resultado en el lugar de salida especificado @or defecto en el standard-output).
Fusiona, a un mismo tiempo, las Mneas de todos 10sficheros (previamente clasificados), y
escribe el resultado en el lugar de salida especificado.

Verifica si un f i c k o de entrada WCO


estii correctamente preclasificado.

Reglas de clasificaci6n
La utilidad sort ve el fichero de entrada como un conjunto de registros, Qnde cada registro es
UM linea Cada linea estA dividida en campos. Un campo es una secuencia de uno o m& carac-
teres limitados por el mmienzo o el final de UM linea y el sepamdor de campo en curso, o de
uno o rnaS caracteres limitados por un separadac de campo a ambos lados. Pap defedo, el sepa-
radar de campo es un cartkter b l m (espacios y tabuladores).
Los campos de la lfnea se usan para definir un campo de clasificaci6n. Una campo de clasifica-
ci6n es una Secuencia de caracteres que utiliza la utilidad sort para ordenar lineas. Las mmpara-
ciones est4.nbasadas ea uno o varios campos de clasificacidn extraidos de cada lfnea de entrada.
Por defecto, un campo de clasificaci6n es una U n a de entrada comp1et.a.
Por defecto, el orden de clasificacidn de la utilidad sort es el de la secuencia de clasificaci6n de
la wins, s e g h la definici6n del conjunto de caractem ASCII. Y por defecto, la utilidad sort
hace UM mmparaci6n en ASCII del primer WBCtec de cada linea basta el mtimo Carader de esa
linea, clasificando y fusionando las lineas de los ficheros espedficados, en el siguiente orden:

Las lfneas que comienzan con ntimeros son clasificadas antes que las lfneas que comienzan
con letras.

Las lfneas que mmienzan con letras maflsculas son clasificadas antes que las lfneas que
comienzan con letras minfisculas.

Las Mneas que comienzan con sfmbolos mmo *, 46, #, etc., son clasificadas en base a la
representaci6n de slmbolos en ASCII, algunas antes y Ocras -put% que las lineas que co-
mienzan con dgitos, per0 antes que las llneas que comienzan con letras.

Por defecto, cuando se comparan cadenas numkicas, la utilidad sort clasifica p a el valor del
primer digit0 de la izquierda de la cadena: primer0 el 1, &put3 el 2, etc., per0 esta clasifica-
ci6n no es correcta c u d 0 las cadenas tienen xnh de un digito, ya que par ejemplo, sera listado
antes el niimero 108 que el 32. En estos cas06 se usarii la opci6n ylo rnodificador apupiados.

-
4 FILTROS EN LOS SHELLSCRIPTS 119
Programas de Utilidad UNIX

Formato
sort [-opciones]Whero ...I

Opciones
-b Ignora blancos (espacios y tabuladores) a la izquierda cuando se deteminan las posicicb
nes de comienzo y fin de un campo de clasificaci6n limitado. Si la opci6n -b es especi-
ficadaantes de la primera opci6n -It, la opci6n -b es aplicada a todas las apciones -k;de
otro modo, la opci6n -b puede ser asignada independientemente a cada argumento co-
mienzo-del-campoofinal-ae-campo de la opci6n -k.

-c Verifica si el fichero de entrada es clasificado conforme a las reglas de clasificaci6n de


la mQuina. No produce salida.

-d Indica que s610 10s carames alfaMcos, nu&cos y blancos son significativos en las
comparaciones.

-f Considera iguales las letras may&xulasy mintisculas, para efectos de comparaCi6n.

-i Ignora 10s caractezesno imprimibles en la clasifrcaci6a

-k&fcampo
El argument0 d e f q o es una definicidn del campo de clasi@acidn limitado. Esta op
ci6n reemplaza a las @ones +pod y 970~2,ya en desuso. Un campo consta de una se-
cuencia maxima de caracteres no separados, y en ausencia de la apci6n -t, de cuatquier
separadordecampoprecedent&

Una definicidn del campo de clasijiucibn toma la siguiente forma:


comiemo+fel-eampo[tipo]
[sd-del-earnpol [tipol
Donde los argumentm comie&el-campo yfinal-dekampo de la apci6n -k, definen
un campo de clasificaci6n limitadoa una linea; y tip0 es un modificador opcional esps
cficado por las letras b, d, f, i, n, y r. El modificadcx b se comporta igual que la opci6n
-b, per0 s610 se aplica a 10s argumentos comiemdel-campo yfinalde-campo, a 10s
cuales esta asignado. Los otros modificadores se comportan igual que sus un-resp-
dientes apciones, per0 s610 se aplican al campo de clasificaci6n al cual estb asignados;
estos modificadores tienen ese efecto si son especificados con los argumentos comien-
zo-del-campo ofinaZ-del-campo,o con ambos.

Los rnodificadares asignados a los argumentm com*emo-del-campoy fd-del-campo,


anulan cualquier especificaci6n hecha por las @ones. Una omisi6n del argumentofi
nal-tiel-campo indica el atimo caracter de la linea.

La parte comiemo-del-campodel argumentodefcampo toma la siguiente forma:

Los campos, y los caracteres dentro de los campos, son numerados comenzando por 1.
Las partes nlimero-del-campo y primer-cmdcter, interpretados como nslmaos decima-
les enterm positivos, especifican el cariicter que va a ser usado como parte de un campo
de clasificaci6n. Si la parteprimer-cartfcter no es especificada, el defect0 es el primer
carilcter del campo.

I20 -
4 FILTROS EN U I S SHELLSCRXPTS
ProgZumus de U t W a d UNIX

La partejhklel-campo del argumentodefcampo tom la forma siguiente:

La parte nlimro-del-campo es la misma descrita que para comienzo-del-campo. El ar-


gumento ri&mo-cm&#er, interpretado como un nfimero decimal entero positivo, espe-
cifica el liltimo carActer que va a ser usado como parte de la clave de clasificaci6n. Si el
argumento k&w-car&ter evaltia cero o no es especificado, el defecto es el dltimo ca-
r6cter del campo especificado por el argumento nltmero-del-campo.

Si la opci6n -b esta en efecto, los caracmes dentro de un campo son contados desde el
primer cadcter no blanco en el campo. @to se aplica separadarnente a los argumentos
primer-cm&ter y tiltimo-carbcter).Si la opci6n -kno es especificada, el campo de cla-
sificaci6n de defecto es la U n a completa.

-m S610 fusiona, asumiendo que los ficheros de entrada a fusionar ya eStanclasificados.

-n Clasifica cadenas numkicas iniciales por el valor ariWco, las wales pueden constar
de caractms blancos, dgitos, punto decimal y sign0 menos.

-0fsal La utilidad sort dirige la salida al fichero especitlcado enfial, en vez de al standard-
ourput. El fichero de salida puede ser el mismo que uno de 10sfichaos de entrada.

-r Invierte el sentido de la clasificaci6n especificada.

-t char Utiliza el cacacter especificado en char como el cariktm separador de campo. El ca-
racter e s m c a d o en chcv no es considerado como parte & un campo (aunque est6 in-
cluido en un campo & clasificaci6n). Cada m e n c i a del cardcter especificado en c h
es signifkativa (pur ejemplo, dos ocurrencias de char delimitan un campo vado). El se-
parador de campo de defecto, es un carilcter blanco (espacios y tabuladores).

-u Suprime todas las U n a , except0 UM, de un conjunto de lineas iguales. Si la opci6n -u


es especificadacon la opci6n 4,&ta verifica si hay campos de clasificaci6n duplicadm.
-y kb Permite especificar, en Kbytes, la cantidad de memoria que va a usar la utilidad sort en
la clasificaci6n. Si omitimos esta opci6n, la utilidad sort comienza usando la cantidad
de memoria de defecto, siguiendo usando m& memoria si fuese necesario. La especifi-
caci6n -y 0 comienza usando el mfnimo de memoria.

-zreg Especifica el tamtilo en bytes, igual o mayor al de la linea que va a ser clasificada, evi-
tando salidas anormales si la lfnea es mayor que la que pueda manejar el buffer.

+posl Especifica la posici6n de comienzo de un campo de clasificaci6n. Para realizar esta ope-
raci6n, ver la descripci6n en vigor en la opci6n -kdefcampo. (En desuso).

goS2 Especifica la posici6n de final de un campo de clasificaci6a Para realizar esta opera-
ci6n, ver la descripci6n en vigor en la opci6n -kdefcampo. (Opci6n en desuso).

Las @ones -d,-f, -I, -n y -r anulan las reglas de clasificaci6n de defecto. Cuando las opciones
de ordenacidn aparecen independientes de cualquier epecificaci6n del campo de clasificaci6n,
las reglas de clasificaci6n del campo requerido se aplican globalmente a todos 10s campos de
clasificaci6n. Las opciones -b y -t alteran el tratamiento de 10s separadores de campo. Las op-
ciones -k defcampo, +posl y -pos2 (etas dos dltimas en desuso) se utilizan para especificar
campos de clasificacibn.

-
4 FILTROS EN U S SHELLSCRIPTS I22
Programas de U t i l W UNIX

Argrcmentos
fichero Es el nombre o nombres del fichero o ficheros que van a SK clasificados, fusionados
o verificados por la utilidadsort.

Notas
Las @ones en desuso +pod y -pos2 proporcionan funciones equivalentes a la opci6n standard
-k&fMmpo. La siguiente es UM mqaraci6nde los formatos que toman las dos @ones:
-knrimero&l-campo[ #dmer-cardcter] [tipo][,n~mer&l-campo[ dltimo-uubcter] [tipoll
+ n k m e r ~ l - e c u n p o [ ~ d m e r - c ~ & e r[]-[ n
~ or ]i m e r o ~ l - c a m p o [ ~ ~ r ~ ~ ~ e r ] [ ~ o l l

En la forma en desuso, 10s campos (especificado6 por el argument0 nrimerodel-uunp) y 10s


caracteres demo de los campos (especificados por el argumentopdmer-car&er) son numera-
dos desde 0 en vez desde l. Los modificadores apcionales (Mo)son 10s mismos en 10s dos for-
rnatos. La opci6n -b no es aplicable a los argumentos de la apci6n -pos2.

Otras utilidades, mmo la utilidad comm compara y suprime lineas de dos fickos clasificados
(VK “Ufilidadcomm”, pagina 72). La utilidad uniq lista y borras Uneas repetidas de un fichero
(VK “Utilidad uniq”, pagina 127). La utilidad join junta l€neas mmunes de dos fickos (ver
“ U t i l W join”, p a g i ~131).

Ejemplos
El siguiente fichKo,fnrtas, es utilizado en 10s tres ejemplos siguientes:

$ catfnrtas
phitano
naranja
Melocotijn
manzana
%plitano
manzana
NARANJA

El siguiente ejemplo ~ r d elefichero


~ fnctas, seg6n la secuencia de clasificacih de la wins:

$ sortfnrtas
%plitano
Melocotbn
NARANJA
manzana
manzana
naranja
platan0

El siguiente command-line clasifica y borra lineas duplicadas (opci6n -u), incluso las lineas du-
plicadas asociadas con letras maytisculas (apci6n -0 y con sfmbolos (opci6n -d):

$ sort -f -U -dfrcltas
manzana
Melocotbn
NARANJA
%plitano

122 -
4 FlLTROS EN U I S SHELLSCRIPTS
Proammas de U t i l W UNIX.

Los siguientes ejemplos mestran dos command-lines. El primero realiza la clasificaci6n usando
la versi6n standard del oomando sort; el segundo utiliza la vasi6n en desuso.

El siguiente ejemplo clasifica el ficherofnrtas, borrando Uneas duplicadas, except0 las que ten-
gan letras maflsculas y sfmbolos. Los campos de clasificaci6n: -k Idf y Mfd, especifican la
primera clasificaci6n, la misma que en el ejemplo anterior con las apciones -f y -dLos campos
-k 1y +O realizan otra mmparaci6n para diferenciar las lfneas que exactarnente son i#nticas:

$ sort -U-k ldf -k lfnctas


$ sort -U+Ofd +Ofnrtas
mnzana
Melocoth
NARANJA
naranja
%plitano
plitano

El siguiente ejemplo clasKica el fichero /e&/passwd por el tercer campo @or el ID de usuario
numQico), utilizando la qpci6n -t para apecificar el sqarador dos puntos (:):
$ sort -t:-k3113/etc@sswd I more
$ sort -t:+2n -3 /etc&amvd I more

Los 4 ejemplos siguientes utiljizan el fichero coches, el cual contiene datos relativos a determi-
nadas marcas de coches. Cada linea comta de 5 campos,el primero mntiene la marca, el segun-
do el modelo, el tercer0 el a80 de fabricaci611,el cuarto 10s kil6metros y el quint0 el precio:

$ cat coches
ford mwdeo 1995 30200 8330
ford SC0l.t 1989 82500 2300
ford Scorpio 1998 5400 11345
seat cordoba 1997 20050 7200
ford fiesta 1999 2200 5912
renault megane 1998 12100 7560
reaadt chamade 1993 70000 3008
opel vectra 1998 7250 15600
ope1 atra 1992 62300 7980
ope1 C0lM 1990 105000 2500
ope1 fmtera 1996 58740 16020
vdvo optima 1997 12O00 22040
honda accord 1990 18oooo 4200

El siguiente comando sort clasifica el fichero coches en orden a la secuencia de clasificaci6n


ASCII de la mkpina en curso: I

$ sort coches
ford fiesta 1999 2200 5912
ford mondeo 1995 30200 8330
ford Scorpio 1998 5400 11345
ford SCOrt 1989 82500 2300
bonda a d 1990 180000 4200
opel astra 1992 62300 7980
ope1 corsa 1990 105000 2500
opel frontera 1996 58740 16020
opel vectra I998 7250 15600
renault chamade 1993 7oooo 3008
renault megane 1998 12100 7560
seat cardobi3 1997 20050 7200
volvo optima 1997 12000 22040

-
4 FILTROS EN I D S SHEU-SCRIPTS Z23
Programas de Utilidad UNIX

Una especificaci6n de clasificaci6n del primer campo, indica una clasificaci6n desde el comien-
zo de la linea hasta el final de la linea. Par defecto, mientras no se indique lo contrario, un cam-
po de clasijicacidn es una linea de entrada completa.

El siguiente comando sort, primer0 clasifica el primer campo del fichero coches por orden alfa-
Mco, obligando a que la clasificaci6n de este campo se detenga just0 antes del segundo cam-
po, definiendo el fin de la clasificaci6n del primer campo clasificado. Seguidamente el comando
sort clasifica numQicamente sobre el campo quint0 las lineas cuyos campos de la primera clasi-
ficaci6n (marca)estkn en la misma linea; (clasifica por el precio demo de cada mrca):

$ sort -k1,l -kSn cocks


$ sort +O -1 +4n coches
ford SCOrt 1989 82500 2300
ford fiesta 1999 2200 5912

-
ford nmmdeo 1995 30200 8330
ford Scorpio 1998 5400 11345
honda accord 1990 18oooO 4200
ope1 Corsa 1990 105Ooo 2500
ope1 1992 62300 7980
ope1 vectra 1998 7250 15600
opel frontera 1996 58740 16020
renault chamade 1993 7oooo 3008
renault megane 1998 12100 7560
seat Cordoba 1997 20050 7200
volvo optima 1997 no00 22040

El siguiente ejemplo, muestra otra vez, que la utilidad sort OP&Mun fichero comenzando por el
campo apecificado, continuando hasta el final de la lima. El siguiente comando sort, hace una
primera clasificaci6n del ficherocoches por el afio de fabricaci6n (termcampo), y UM segunda
clasificaci6n por la marca dentro del a80 de fabricaci6n (primer campo);para ello se especifica
un final del campo de clasificaci6nde la primera clasificaci6n 63 y -3,respectivamente):
$ sort -k343 -k1coches
$ sort +2n -3 +o cocks
ford scarf 1989 82500 2300
honda accord 1990 18oooO 4200
ope1 corsa 1990 105Ooo 2500
opel 1992 62300 7980
renault chamade 1993 7oooo 3008
ford uxmdeo 1995 30200 8330
opel frontera 1996 58740 16020
seat cordoba 1997 20050 7200
volvo optima 1997 12000 22040
ford Scorpio 1998 5400 11345
opel vectra 1998 7250 15600
renault megane 1998 12100 7560
ford fiesta 1999 2200 5912

El siguiente ejemplo, clasifica y suprime del fichero coches, la segunda y sucesivas ocurrencias
de las lineas que tengan un mismo primer campo. (En un fichero de entrada, las opciones -urn
hacen la elecci6n de una representaci6n rInica de un conjunto de lineas iguales predecibles):

$ sort coches I sort -urn -k 1,l


$ sort cocks I sort -urn +O -1
ford fiesta 1999 2200 5912
honda accord 1990 18oooo 4200
opel astra 1992 62300 7980
renault chamade 1993 7oooo 3008
seat cordoba 1997 20050 7200
vdvo optima 1997 12000 22040

124 -
4 FILTROS EN U I S SHELGSCRIPTS
Prograinas de Utilidad UNIX,

Utilidad cut
Descripcih
La utilidad cut es un programa filtro utilizado para extraer columnas de una tabla, y campos y
caracteres de las lineas de uno o varios ficheros, enviando el resultado al standard-input.Si no
se apecifica ningJn fichero de entrada o se especifica un cardcter gui6n (-) como fichero, la
utilidad cut toma la entrada del standard-input.

Formato

Opcwnes
El argumento fiSta de las opciones -4 c y -f es una lista, sqamda pur caractera blancos o co-
mas,de n6meros entam en orden creciente con un Cafader gui6n (-)apcional indicando rangos.
Los siguientes, son algunos ejemplos de especificaci6n del argumentolistu:
1,4,76147 Especificaloscampo6ocaracteres1,4y7.
1-3,8 Especifica los campos o caracteres 1,2,3y 8.
-!yo Especificalmcamposocaracteresdel1al5yel10.
3- Especifica todos los campos o caracteres de la linea menos 10s 3 primeros.

-b tista Los mlmeros especificados en fish, indican la posici6n de 10s bytes que van a ser ex-
traidos par la utilidad cut. Por ejemplo, la especificaci6n -b 2 M O envia al stmdard-
output 10sbytes 20 al40, ambos inclusive, de las Uneas del fichero especificado.

-c f i s h La lista de ntimeros especificados en &tu indica la posici6n de los caracteres que van
a ser extrafdos. Par ejemplo, la especificaci6n c 1-50, envia al standard-output los
primam 50 caracteres de cada linea del fichero espedficado.
-d delim La opci6n -d establece un cariktex delimitador de campo ( d e w ) , el cual debe ser es-
pecificado en la opci6n -E Por defecto, el delimitador de campo es un car&ter tabula-
dor. Como delimitador puede ser especificado cualquier cartkta, per0 el carkter
blanco y los caractera con significadoespecial para el shell deben ser protegidos.

-f listrr La Cis& de nfimeros que sigue a la @6n -f indica la posici6n de 10s campos que van
a ser extrafdos de cada linea del fichero espificado, asumiendo que 10s campos van a
ser separados pur un cardcter delimitador de campo espificado por la apci6n -d.Un
campo es una secuencia de caracteres sqarados por un delimitador. Cuando 10s cam-
pos estan separadcs por maS & un delimitador contiguo, la utilidad cut no es la &
apropiada para tram campos.(La utilidad awk reestructura campos de un fichero).

-0 Especificada con la apci6n -b,evita la partici6n de caracteres con miis de un byte.

-S La apci6n -s especificada con la apci6n -f suprime las Uneas que no contienen caracte-
res delimitadores Si la opci6n -s no es especificada, las lineas sin delimitadores son
enteramente visualizadas.

-
4 FILTROS EN U S SHELLSCRIPTS 125
Progmrnas de U t i l W UNIX

Argumentos
fkhero Es el nombre o nombre del fichero o ficheros cuyas lfneas van a ser tratah por la
utilidad cut

Notas
Para extraer lfneas completas de un fichero utilizar la utilidad grep (ver “UtiZiM grep”, pitgina
114). Para concatenar ficheros horizontalmente por columnas, usar la utilidad paste (ver “CJtiZi-
dud paste**,pitgina 129). Para reestructurar y formatear campos de las lfneas de un fichero usar
la utilidad awk (ver “PROGRAMACIONENawK‘, p@na 153).

Ejemplos
El siguiente ejemplo extrae el campo de la hora, de la mea generada por la utilidad date:

$ date
Thu Feb 4 150347 MET 1999
$ date I cut C 12-19
150347

El siguiente ejemplo, visualiza por urden alfaWco, 10s usuarios alojados en metro sistema
con el identEcador del host asociado con el que esta conectado cada usuario:

$ Who I sort I Cut c 1-8,38-70


beatriz (193.146228.130)
bruno (tccgel0)
danid (saumn.quimica.uniovLcs)
fragaas (130206.11.177)
... ...
El siguiente ejemplo visualiza 10snombres de login con sus nombres reales asociados:

$ cut - d -f l,5 /etc4asswd I sort I pg

El siguiente script, saluda, devuelve un saludo al usuario sin requerir su nombre:

$ cat sQhrda
#!tbidsh
-
# script: saluda Viualiza un saluda
nombn=’who am I I cut -fl -d’
echo “HOLA Snombre”

$ saluda
HOLA

El siguiente ejemplo usa el fichero coches de la p a g i ~123. El objeto es visualizar solamente


10s modelos por orden alfawco y 10s kil6metros asociados. El siguiente sera el command-line
(suponiendo que 10s caracteres especificados con el comando cut coincidan con los del fichero):

$ sort -k 2b coches I cut c 11-18,30-36


accord 180000
pspp 62300
chamade 7oooO
... ...
I26 -
6 FXLTROS EN LQS SHELL-SCRIPTS
Progrdmas de U t i l W UNIX,

UtiZidud uniq
Descripcidn
La utilidad uniq lee el fichero de entrada especificado, compara las lineas contiguas, borra la
segunda y sucesivas 0Currencii-s de UM linea repetida, y escribe las lineas restantes en el stan-
dard-output o en un fichero de salida si &e es especificado.

Formato

Opciones
c Cada k e a de salida es precedida del nclmero de veces contiguas que la linea aparece
en el fichero, adem& de borrar la segunda y sucesivas lineas repetidas co~~secutivas.

-d Esta clpci6n hace que la utilidad u d q s610 visualice una de las lfneas repetidas con-
secutivas, bonando las llneas restantes.

-f campos Ignora el primero de los campos dados encMtpos de cada linea de entrada cuando se
hacen mmparaciones. El argumento campos es un dmero entero decimal. Un cum-
po es una secuencia de caractms sin blanoos (espacios ni tabuladores). Los campos
est411 delimitados por caracteres blancos o por el comienzo o el final de una linea.

-s cirars Ignoaa el primero de 10s cafactetes especificadm en chars cuando se haem compa-
rationes. El argumento chcvs es un nfimero entero d e c i i pitivo. Si la apci6n -s
es especificada junto con la opci6n -f, el primero de los caracteres especificado en
chars, despub del primero de 10s campos especificado en cumpos, es ignwado.

-U Esta opci6n hace que la utilidad udq s610 visualice las lineas que no esW repeMas
(incluidas las no contiguas a w e est& repetidas).

Argurnentos
jichero-entrada Es el nombre del fichero de entrada que va a sex tratado por la utilidad uniq.
Si este argumento se omite o se especifica un carficter gui6n (-) como nombre
de fichero de entrada, la utilidad udq toma datos del standard-input.

fichro-sulida Es el nombre del fichero de salida en el que serh escfitos 10s resultados. Si en
este argumento no se especifica un fichero de salida, la utilidad uniq envia la
salida al standard-output.

Notas
Por defecto, la utilidad uniq borra la segunda y sucesivas llneas repetidas consecutivas de un
fichero, por lo que sera conveniente ordenar las lineas con la utilidad sort antes de procsarlas
(ver “UtiZidzd sort”, p@na 119). La utilidad comm compara y recham lineas mmunes entre
dos ficheros (ver “VtiZidudcorn”, pfigina 72).

-
4 FILTROS EN U I S SHELGSCRIPTS 127
Programas de UtilidM UNIX

Ejemplos
Los ejemplos siguientes van a utilizar el ficherocarameZus, el cual tiene el siguiente contenido:
$ cat caramehs
200 de limb
200 de l i d n
100de menta
150de naranja
500 de naranja
100de menta
100de menta

El siguiente comando uniq emitido sin opciones borra la segunda y sucesivas lineas repetidas
contiguas del fichero caramelos, visualizando las lineas restantes

$ uniqcaramebs
200 de W n
100de menta
150 de naranja
500 de naranja
100 de menta

En el siguiente command-line, primer0 el comando sort clasifica el fichero caramelos para que
todas las lfneas repetidas queden contiguas, despua el comando uniq s610 visualiza una linea
de cada conjunto de lineas repetidas, barrando las restantes:

$ sort C~WII&S I uniq -d


100 de menta
200 de K d n

En el siguiente ejemplo la opci6n -f 1 hace que sea ignorado el primer campo del fichero c m -
m b s , por eso la utilidad uniq considera iguales las lfneas con la cadena “de naranja”:

$ sort -k2 c Q T Q ~ I~uniq


~ ~ -f
s 1
200 de W n
100 de menta
150 de naranja

El siguiente script, llamado sesiones, visualiza los usuarios que eStan utilizando mils de una se-
si6n de terminal:

$ cat seswms
#%inlsh
-
# script: sesiones Viiualii los usuarios con miis de un sesi6n.
for n d r e in‘whol sort1 cut -f 14‘‘ I uniq d
do
echo ”$nonabre st6 dojado en:”
who I grep $nonabre I cut -E 13-20
echo
done

$ sesiones
ilZjfU4 est5 alojado en:
#yp2
ttyP3
operator est6 alojadoen:
-1
ttYPe
128 -
4 FILTROS EN LOS SHELGSCRIPTS
Programas de U t i l W UNIX

Utilidad paste
Descripcih
La utilidad paste concatena las lineas de uno o varios ficheros de entrada. La utilidad paste trata
cada fichero como columnas de UM tabla, insertandolas horizontalmente y separhndolas, por
defecto, con un carilcter tabulador.

Fomtato
paste [-d f&&] [-SI mhero ...I
Opciones
-d lis& Reemplaza el carkta delimitador que separa las lfneas de salida @or defecto un ta-
bulador) por uno de 10scaracteres especitlcados en b&.Si el argumento l&& contie-
ne mils de un carkta, entonces est= carames delimitadores son repetid06 sucesi-
vamente en las lfneas de salida de cada fichero, hasta el final de la salida. Las si-
guientes secuencias de escape tambien pueden ser usadas en el argument0&&:

\n Carhcter nueva linea.


\t Carkter tabulador.
\\ Carhcter barra inversa incli~da.
\O Cadena vada (no un carkter nulo).

Los caractem con un significado especial para el shell deben ser protegidos. Si no se
especifica la opci6n -s, las Uneas del W m o fichero siempre fidizan con un cariicter
nueva linea, en vez de con un carkter de 10s especificados en fish.

-s Concatena las lineas de cada fichero de entrada en una linea de salida. Las lineas (zthcb
ra convertidas en campos) van sqaradas por un carhcter tabulador a no ser que sea es-
pecificado otro carhctex delimitador con la apci6n -d f&&. Indiferente a la espwifica-
ci6n en fish,el filtimo carhctex de cada fichero es fonado a un carhcter nueva linea al
finalizar cada fichero.

A rgumentos
fichero Es el nombre o nombres del fichero o ficheros de entrada. Pueden ser especificados
hasta 12 ficherots incluyendo caractaes guiones (-).Si especificamos un carhcter gui6n
como fichero, la utilidad paste lee recursivamente del standard-input una linea por
cada carktex gui6n especificado.

Notas
La utilidad paste concatena ficheros horizontalmente, lo contrario de la utilidad cat, que con-
catena fichaos verticalmente -un fichero detras de otrw (ver “Utilidad cat”, Pagina 47). La sa-
lida producida por el comando paste es similar a la generada por el command-line pr -t -m,
per0 &e crea caractem nueva linea, blancos y tabuladores adicionales para representar UM pi-
gina conveniente (ver “Crtifidkfpr”, pilgina 55).

-
4 FILTROS EN U I S SHELLSCRIPTS I29
Programas de UtiMad UNIX

Ejemplos
Supongamos que tenemos los ficheros nombres, ciudades y domicilios con 10s siguientes datos:

$ cat nombres $ cat ciudades $ cat domicilios


Cantero Madrid Gran Via 26
Epez Toledo Calle Real 75
Bonet Barcelona Diagonal 220
Ferrer Alicante Mayor 86

y queremos obtener una salida Clnica m& Ctil. Por ejemplo, el siguiente command-line concate-
na horizontalmente los tres ficheros, separados por un carkter tabulador:

$ paste nombres domicilios ciudades


Cantero Gran Via 26 Madrid
Epez CalleRcal75 Toledo
Bonet Diagonal 220 B-10~
Ferrer Mayor86 Alicante

Si queremos separar las columnas de cada linea con otro cad- que no sea un tabulador, emitir
par ejemplo, un command-finecomo el siguiente:

$ paste -d’#*’ nombres doinicikibs ciudades


CantedGran VSa 26*Madrid
E p e z # M e Real 75*Toledo
Bonet#D~onal22O*Barcelona
Furer#Mayor WAlicante

El siguiente comando paste fusiona las Hnea del ficheronombres en una linea de salida entera:

$ paste -s nombres
CanteroL6pez Bonet Ferrer

El siguiente ejemplo visualiza el standard-input del comando Is (10s ficheros de nuestro dk-
rio de trabajo en curso) a cuatro columnas:

$ Is I paste ----
En el ejemplo anterior, cads car&Xer gui6n (-)dice a la utilidad paste que cree una columna con
datos leidos del standard-input.La primera linea es colocada en la primera columna, la segunda
linea en la segunda columna, ...,despub. la quinta llnea en la primera columna, y asi sucesiva-
mente. El siguientecommand-finees equivalente al command-lineanterior:

$ Is I paste d’lt\t\t\n” -s -
El siguiente ejemplo visualiza 10s identificadores de usuario de nuestro sistema, a cinco colum-
nas separadas por un caritctex espacio:

I Cut -d: -f 1 I paste -d” “


$ ~~rt/etclpasswd
adm adminl admid auth bin
- - - - - I Pg
blanco -do ceron c o d control
cron CUOre curs01 curs02 curs03
...
La salida producida por la utilidad paste estA condicionada a 10s delimitadores que separan las
linea de cada columna (fichero). Para reestructurar campos de las linea de un fichero de text0
ver “PROGRAMACIONEN awk”, p@na 153.

130 4- FILTROS EN U I S SHELGSCRIFTS


Progfumas de U t i l W UNIX

Utilidud join
Descripcih
La utilidad join lee dos ficheros de entrada Vcherol fichero2), juntando las lineas de 10s dos
ficheros que contienen campos comunes, o actuando conforme a las opciones especificadas, vi-
sualizando el resultado en el standard-output.

Los campos de cada linea que van a sex un.dos (usualmente el primer campo) de 10s ficheros &
entrada deben estar clasificados conforma a la secuencia de clasificaci6n ASCII. La salida est4
compuesta de lineas que tienen campos comunes unidos que aparecen en los dos ficheros, del
resto & la linea delficherol y del resto de la linea delfichero2.

Formato
join [-opciones]ficherolfichero2

Opciones
-1campo Junta el campo especificado en campo del fichero especificado enficherol, don&
campo es un niimero decimal entexo comenzandopor 1.

-2 campo Junta el campo especificado en campo del fichero espificado enfichero2.


-a &mer0 Produce una linea de salida de cada linea correspondida y no correspondida encon-
trada enfickrol si ndmero es 1, o enjkhero2 si nkmero es 2.

-e caderur Reemplaza 10s campos de salida vados con la cadena specificada en ca&m.

-jnlimero (En desuso). Equivalente a las opciones -1campo y -2 campo.

-0 ndmro.campo, ...
Produce lineas de salida conteniendo 10s campos dados en uno o m h argumentos
ndmero.campo (don& ndmro es 1 paraficherol y 2 paraficher02; y campo es
un nfimero de campo).
-t chars Utiliza el carkter especificado en char (un car- rinico) como el caracter sepa-
rador de campo de la entrada y de la salida. El separador de defect0 es un cadcter
espacio. Si no se especifica la opci6n -t, la utilidad join W i C n reconwe como
separadores de campo, el milder tabulador y el de nueva linea.

-v nrimfich Produce una linea de salida por cada lfnea no correspondida del fichero especifica-
do en nrlrnfich (donde nrimfich es 16 2), en vez de la salida de ckfecto.

Argumentos
@hero1 jichm2
Son 10s nombres de 10s ficheros que van a ser usados como ficherm de entrada. Si
es specificado un carilder gui6n (-) como fichero de entrada, la utilidad join toma
la entrada del standard-input.

-
4 FILTROS EN U S S H E U C R I P T S 131
Program de U t i l W UNIX

Ejemplos
Los siguientes ejemplos utilizan los ficheros terfs, dptos y nums, 10s cuales esth clasificados
por el primer campo y tienen 10s siguientes contenidos:
$ cat terfs $ cat dptos $ cat n u m
David 204050 Javier Dpto. 315 120978
Javier 082065 Marina Dpto.416 123456
Marta 314168 Patriao Dpto. 500 204050
Patriao 123456 Sara Dpto.235 333444
Raque! 789013
Sara 120978
Vicente 204050

El siguiente ejemplo realiza una sencilla operaci6n de uni6n de dos ficheros, teffi y dptos,cuyos
primeros campos son iguales:

$join tevs dptos


Javier 082065 Dpto. 315
Patriao 123456 Dpta 500
Sara 120978 Dpto. 235

El siguiente c o m d - l i n e Visualha las lfneas mespondidas y no correspondidas del fichero


dptos (fichero2)con respecto al fichero te@ (fiiherol):

$join -a 2 teus dptos


Javier 082865 Dpto. 315
Marina Dpta 416
Patrido 1234% Dpto. 500
Sara 120978 Dpta 235

El siguientecomandojoin visualiza las lineas de los campos seleccionados: campo 3 del fichero
dptos, campo I del ficherodptos y campo 2 del ficherotelfs:

$ join -0 23,2.1,13 tevs dptos


315 Javier 082065
500 Patricio 133456
235 Sara 120978

El siguiente c o m d - l i n e junta campos de un fichero con campos de otro fichero, combinando


las lfneas de los ficheros terfs y nums, comparando el segundo campo del fichero tevs con el
primer campo del fichero nums:

$ sort -k2nterfs I join -1 2 = nums


120978 Sara
123456 Patricio
204050 David
204050 Vicente

Este ejemplo, primer0 clasifica el segundo campo del ficheroterfs, ya que ambos ficheros deben
estar clasificados por sus campos de uni6n. DespueS, la salida de la clasificaci6n es pasada al
comandojoin a traves de unpipe. El carficter gui6n (-) hace que el comando join use esta salida
como primer fichero. La opci6n -1 2 define el segundo campo del fichero terfs (ya clasificado)
como el campo que va a ser unido.

N6tese que la utilidad join visualiza todas las conrespondenciasde un campo dado. En el ejem-
plo anterior, el comando join visualiza las lfneas que contienen 10s nombres David y Vicente,
10s cuales tiene el mismo nlimero de telcfono.

132 4- FILTROS EN U I S S f f E U C R I F T S
Programas de U t i l W UNIX-

UtiZidad head
Descripcih
La utilidad head escfibe en el standard-outputel contenido de un fichero, finalizando la visuali-
zaci6n en la linea especificada. Por defecto, la utilidad head, visualiza las 10 primeras lineas.

Formato
head [-opciones]vxherol

Opciones
-n nkm El nfimero especificado en nkm especifica el dmero de lineas que van a ser visuali-
zadas por la utilidad head del fichero especificado enfxhero.

d r n (En desuso). Es equivalente a la opci6n -n m5m.

Argumentos
fxhero Es et nombre del fichero que va a ser tratado por la utilidad head Si enjikhen, no se
especifica un fichero, la utilidad head toma la entrada del standard-input.

Ejemplos
El siguiente command-line visualiza las 10 primeras lfneas de 10s ficheros de nueslro directorio
de lrabajo en curso, c u p nombres finalicen en .c:

$ head *.c

El siguiente script, llamado grandes, visualiza 10s 5 ficheros maS grandes (medidos en bytes)
del directorio especifcado como un argument0 al ejecutar el script:

$ cat grundes
#!/bin/ksh
-
# scriptt grandes Viiuafiza 10s 5 fEheros m;is gmndes de! directorio dado.
if[$#-ne1]
then
echo ‘‘Uso corrcdo: grandes dircclorid”
exit 2
else
if[-d$l]
then
cd $1
echo %as 5 fEhems n& grandes del direct~rio$1son:’’
Is -1R$1 2> /dev/nuU I grep ’*-‘ I sort -k 5nr3 I
awk ‘{ prinf ”It% 16d %sin”, $5, $9 )’ I head -n 5
else
echo “El dirrctorio $1 no e&’’
fi
fi

-
4 FILTROS EN LOS S H E U C R X P l S 133
Programas de U t i l W UNIX

Utilidad taii
Descripcih
La utilidad tail escribe en el standard-output el contenido de un fichero, comenzando la visuali-
zaci6n en el punto especificado. Por defecto, la utilidad tail visualiza las 10 tiltimas lineas.

Formato
tail [-opciones] vchero]

Opciones
-c n h La visualizaci6n del fichero comienza en el punto especificado en ndm, donde nrim es
un nfimero, cuyo valor es medido en bytes. El nfimero especificado en nrim puede ir
precedido de un signo m h (+) o de un signo menos (-), afectando al punto desde el
cual comenzaril la visualizaci6n del fichero. Ad,con un signo:

+ La visualizaci6n empieza desde el punto de comienzo indicado hasta el final.


- La visualizaci6n comienza desde el final del fichero hacia el principio.
Sin signo, la visualizaci6n comienza desde el final del fichero.
El principio de la menta de la visualizaci6n es 1, por ejemplo: c +lrepresents desde
el primer cardcter del fichero (todos), -c -1 representa desde el tiltimo byte (ninguno).

-f La visualizaci6n no finaliza hasta que la utilidad tail copie la clltima lfnea de entrada si
el fichero de entrada no lee de unpipe, per0 introduce un bucle sin fin, el cud espera
un instante y dequ& intenta leer y visualizar registros adicionales del fichero de en-
trada. De este modo, la opci6n -f puede ser usada para analizar la marcha de un fichero
que est4 siendo escrito por a l g h proceso.

-n nrim Esta opci6n es equivalente a la opci6n -c nrim,excepto que el punto de comienzo de la


visualizaci6n especifrcado en nlim es medido en lfneas en vez de en bytes.

-b nrim Es equivalente a la opci6n -c ntim, excepto que el punto de comienzo de la visualiza-


ci6n especificado en nlim es medido en bloques (de 5 12 bytes). (S610 en System V).

-r Hace que la utilidad tail visualice las lineas del fichero completo en orden inverso
(comienza por la tiltima linea).

MllInx (En desuso). Los signos maS (+) y menos (-) pueden ser usados como Opciones dnicas,
donde nrim es un ndmero que especifica el punto de visualizaci6~y x son letras, que
utilizadas como un sufijo, especifican el tip0 de salida: c en caracteres ,I en lineas y b
en bloques. Por ejemplo, la opcidn -41 es equivalente a la opci6n -n 4. Si se omite el
sufijox, se asume I (lineas); y si se omite nrim,se asume 10.

Argumentos
&hero Es el nombre del fichero que va a ser tratado par la utilidad tail. Si enfihero no se
especifica un fichero, la utilidad tail toma datos del standard-input.

134 4- FILTROS EN U I S SHELGSCRIPTS


Progrgmas de U t i I W UNIX,

Notas
O m utilidades UNIX, como la utilidad cat concatena y visualiza fichaos (ver “c/tilidad cat”,
pggi~ 47). La utilidad more visualiza ficheros en modo pantalla mmpleta (ver “Utilidad mo-
re”, pagina 49). La utilidad pg filtra salidas, permitiendo controlar las visualizaciones de las
mismas (ver “Utilidud pg”, pSgina 52). La utilidad head visualiza el contenido de un fichero,
por defecto, las 10 primeras lfneas (ver “[/tilidadhead”, pilgina 133).

Ejemplos
Los siguientes ejemplos utiliZan el ficheropnrtnil, el cual tiene el siguiente contenido:

$ catpnrtQil
tinea una
linea dos
linea tres
linea cuatro
linea cinco
linea seis
linea siete
linea ocho

El siguiente ejemplo visualiza las 3 fitimas lfneas del f i c h e r o p w .

$ tail -nfpnrtail
linea seis
linea siete
linea who

El siguiente command-line visualiza los 20 fitimos caractem del ficheroprutuik

$ tail c 20pnltail
ea siete
linea ocho

Una forma de visualizar una linea espedfica de un fichero, es combinando 10s comandos head y
tail. El siguiente command-line s610 visualiza la linea 4 del ficheropmfdk

$ head -n4pnitaz-fI tail -n 1


linea cuatro

El siguiente ejemplo visualiza desde la linea especificada (+7) hash el final del ficheropndaik

$ tail -n+7p&
linea siete
linea ocho

El comando tail con la opci6n -f es fiecuentemente utilizado para seguir un fichero que conti-
nuamente esta generando salida, pur ejemplo, la salida que genera una mmpilaci6n:

$ ccfuente.c Z>fikem > kemp/fuente.sal&


12345
#! tail -f /temp/fiente.sul
...
...
CCtrl-0

-
4 FILTROS EN LOS SHELLSCRIPTS 135
Proaramas de Utilidad UNIX

Utilidud tr
Descripcitjn
La utilidad tr lee UM Cadena de caracteres del standard-input y la traduce, sustituyendo o b
rrando cada car&ter, por 10s corrwndientes de m a cadena, visualizando el resultado en el
standard-or!put. La utilidad tr tambien puede recibir entradas de un fichero y enviar salidas a
un fichero, ~mndola redirecci6n de entrada y salida. Igual que mas utilidades filtro, la utilidad
tr no cambid el contenido del fichero original.

Formato
tr [-opcionesJcadenal cadena2
tr [-opciones] cadenal

Opciones
-c Complementa el conjunto de caractezes de cadenal, es deck, son reemplazados todos 10s
caractem, except0 la especificados en ctrdenal, por el especificado en cadend.

-d Borra todas las ocurrencias de 10s caracteres de entrada especificados encadenal.

-s Reemplaza UM cadena de uno o varios caracteces de cadenal,por un f i c o cadcter igual


a1 especificado encadend.

Argumentos
cadenal I cadena2
Los argumentoscademl y cadem2 definen 10s caracteres que van a sec convertidos. Los
caracteres de entrada de cadenal son sustituidos por los caracteres correspondientes es-
pecificados e n c a d e d .

Las cudenas constan de una secuencia de caractera o de un rango de caractera. La utili-


dad tr traduce cadenas como las siguientes:

bctal Secuencia en octal usada para representar valores codificados de la forma


Lmn. Todos 10s caracteres ASCII pueden ser representados de esta fonna, por
ejemplo el cariicter tabulador, \t, est6 representado por el n~merooctal \011.

\carbcter Se pueden especificar 10s siguientes caracteres de secuencias de escape:


\\ Car6cter barra inversa inclinada.
\a cariicteralarma.
\b CarActer de re€roceso.
v cU&Ck€Salt0 de P@M.
\n CarActer nueva linea.
\t CarActer tabulador.
\v Carkter tabulador vertical.

a-z Representa un rango de caracteres ASCII entre a y z, ambas inclusive.

136 4- FILTROS EN LOS SHELL-SCRIPTS


Prograntas de U t i l W UNIX

[a*nrSm] El paribetro nrim es un ndmero enter0 que representa el ntimero de ocurra-


cias del carllcter especificado en a. El cdctex asterism (*) iguala el tamaiio
de las dos cadenas. Este formato s610 es vaido en el argument0cadena2.

[:clase:] Represents todos 10s caractera que pertenecen a la clase de carilcter definido
en la variable de e n t m local correspondiente. Los nombres de clase de ca-
racteres aceptados son: alnum, alpha blank, cntrl, digit, graph, lower, print,
punct, space, upper y digit.

[=equiv=] Representa todos 10s caractem que pertenecen a la mism clase de equivalen-
cia que los especificados en equiv, definidos en la variable local corresp-
diente. Una expresi6n de clase de equivalencia puede ser usada en cadenal y
en cadem2 s610 cuando se usan mnjuntamente las @ones -d y -s.

Si en cadem2 y/o en c&m2 se especifican caractexes especiales, &os deben ser encerrados
entre caractetes ap6strofos para jxotegerlos de intqretaciones no deseadas del shell.

Notas
El problema del m m d o tr, es que hace la conversi6n car&&% a Catacter. Por ejemplo, si que-
remos trartucir un ca&ter a una Secuencia de caracteres deteminada, la utilidad tr no es la
apropiada. El editor sed tiene capacidad para ejecutar conversiones y reemplazar text0 (ver
“EDITOR sed”, pilgina 139). Otra utilidad &l sistema UNIX de la versi6n Berkeley que traduce
caractem de una cadena y 10sreemplaza por otm es la utilidad trsbd.

Ejemplos
En 10s siguientes ejemplos es usado el ficheropnrft, mmo fichero de entrada, el cual tiene el
siguiente contenido:

$ catpmtr
esta linea contiene letras minfiscuks {abcdxyz}
ESTA CONTIENE LETRAS MAYUSCULAS.
939 pesetas { el kilo }. 29 de abril de 1999.
-
A60 2000 400 TM -560 Kbytes.

El siguiente ejemplo convierte los caracteres llaves (cdeml)del fichero prutr a caracteres pa-
rentesis (caden&):
$ tr ‘{}’ ‘0’ <pmtr
esta linea contiene letras miniiscub(abcdxyz)
ESTA C 0 ” E LETRAS MAYUSCULAS.
939 pesetas ( el kilo ).29 de abril de 1999.
- -
Aiio 2000 400 TM 560 Kbytes.

El siguiente cum&-line traduce cada nrimero 0 a un carilcter ndmero (#), per0 no trata 10s
dfgitos 1 a 9. (Si las dos cadenas de caractexes de un comando tr no tienen el mismo tamailo, 10s
caractem adicionales & la cadena maS larga son ignorados):

$ tr ‘0-9’ ‘#’ <prutr


esta linea contiene letras miniiscubs {abcdxyz}
ESTA CONTIENE L E T W MAYUSCULAS.
939 pesetas { el kilo }. 29 de abril de 1999.
- -
Aiio 2### 4## TM 56# Kbytes.

-
4 FILTROS EN U I S SZIELGSCRIPTS 137
Proaramas de Utiliiiad UNIX

El siguiente ejemplo convierte cada digit0 a un caricta nfimero (#). El caricta asterisco (*)
dice a la utilidad tr que repita el carilcter # las veces que Sean necesarias para hacer que la se-
gunda cadena tenga el mismo tamaiio que la primera:

$ tr ‘0-9’ ‘[#*I’ <p&


esta linea contiene leaps miniiscuks {abcdxyz}
ESTA CONTIENE LEl’RAS MAYUSCULAS.
W pesetas { el kilo }. ## de abril de W.
-
AH0 #### ### TM ### Kbytes.-
El siguiente command-line convierte cada cadena & dfgitos a un cadcter nfimero (#) dnico:

$ tr -6 ‘0-9’ ‘[#*I’ cpmtr


esta linea contiene letras miniiscub {abcdxyz}
ESTA CONTIENE LETRAS MAYUSCULAS.
#pesetas{tlkilo}.#deabrilde#.
-
AH0 # # TM # K - bm

El siguiente ejemplo borra las letras mayissculas y min6sculas de la u a la z del ficheropnrk:

$ catpnrtr I tr ‘[u-z][A-Z]’
esta linea contiene leesl~minGsclas{abai}
ESTA C 0 ” E LETRASMASCLAS.
939 pesetas { el kilo }. 29 de abril de 1999.
Aiio ZOO0 -400 TM -560 K bw

El siguiente ejemplo crea una lista de palabras del ficheropnrtr en el ficheropnrtrsal, una pa-
labra por linea, donde palabra es una caclena & letras, ntlmecos o signa. 012 es el &go ASCII
del carllcter nueva lfnea On), el mal tambien puede sec especificado en lugar de \012

$ tr 4s ‘[:graph:]’ ‘[\012*]’cpnrtr >pnrtr.sal

Una de las aplicaciones mils fiecuente de la utilidad tr es la conversi6n de letras ma@culas a


minhculas, y viceversa. El siguiente scrip?, llamado conver, traduce el fichero especificado
como un argument0 del script a lmas mintisculas; si se especifica la opci6x -r, el script conver
convertiri el fichero especificado a letras ma@culas. El resultado es enviado al stdout:

$ cat conver
#!Jbinlsh
-
# script: conver Convierte a m i n ~ u l a o
s maytkculas UII fwhera
case $1 in
-r) fuentc=’[a-z]’ ;traducc=’[A-Z]’ ;;
*) fuente=’[A-Z]’ ;traducc=’[a-z]’ ;;
eSaC
cat $* I tr $fuente $traduce

$ converpnrtr
esta linea contiene letras miniisculas{abcdxyz}
esta contiene letras mayirsculas.
939 pesetas { el kilo }. 29 de a b d de 1999.
- -
aHo 2000 400 tm 560 kbytes.

$ conver -r prutr
ESTA LINEA CONTIENE L E T W MINUSCULAS{ABCDXYZ}
ESTA CONTIENELETRAS MAYUSCULAS.
939 PESETAS { EL KILO }. 29 DE ABRIL DE 1999.
- -
A 6 0 2000 400 TM 560 KBYTES.

138 -
4 FILTROS EN U I S SEEUSCRIPTS
Programas de Utilidd UNIX

5 - EDITOR sed

Introduccidn
La utilidad sed (stream editor) es un editor de flujo, no intaactivo, utilizado para seleccionar y
madificar heas de un fichero o fichaos de texto, conforme a la selecci6n realizada por 10s sub-
comandos o instrucciones del editor sed. Par defecto, la utilidad sed dirige la salida de las lineas
tratadas al standard-output.
La utilidad sed puede tomar entradas de un fichero y editar el text0 de ese fichero, per0 el texto
del fichero de entrada no es alterado. El texto modifcado es enviado al standard-output o a un
f i c h ~ de
o salida si &e es especificado. El editor sed achla como un filtro, por lo que puede to-
mar emadas de otro comando cuando es combinado con unpipe.

La utilidad sed como cualquier editor, dispone de un juego propio de subcomandos, los cuales
son semejantes a 10s del editor e& per0 trabajan de focma distinta. Al no SK un comando inte-
ractivo, todm 10s submandos del editor sed que vayan a ser ejecutados d e b ~ ser h suminis-
trados en la Knea de comandos o en un f i c h o de comandos.

El editor sed no mea un fichero temporal en#mp. Las lineas de em& que van a ser tratadas
por la utilidad sed se van registrando en una zona de memaria principal, modifcando s610 las
lfneas sele!ccionadas, por lo que el editor sed es mirs efciente que los editores vi y ed, para:

Editar ficheros extensos de forma eficaz.


Realizar ediciones @&ales. En la entrada s60 se realiza un paso.
Editar textos complejos que en modo interactive sedan engoarosos.

Format0
sed [-nl script-sed where I
...
...
sed [-n] [-e script-sed [-fjWero-script-sed ...mhero ...I
Opciones
-e script-sed
La opci6n e indica que el siguiente argumento, script-sed, es un script de cadena que
contiene los subcomandos de edici6n de la utiMad sed. Si la opci6n -f no es especificada,
la opci6n e puede ser omitida, incluyhdose el script de cadena especificado en script-
sed como el primer argumento del command-line sed

-f@heto-scr@t-sed
Esta opci6n indica que los subcomandos de edici6n del editor sed e s t h contenidos en el
fichero especificado enfichero-script-sed, y no en el c o d - l i n e sed, los cuales s e r h
aplicados a las lineas del fichero 0 ficheros especificados en el argumentofichero.

-n Suprime la salida ncxmalmente escrita en el standard-output, a no ser que se especifique


el subcomando p de la utilidad sed.

El orden de presentaci6n de las opciones del editor sed, -e y -f es significativo.

-
5 EDITOR sed 139
Programas de Utilidad UNIX

Argumentos
@hero Es el nombre o nombres del fichero o ficheros de entrada cuyas lfneas van a ser tra-
tadas par la utilidad sed. Si se especifica m& de un fichero, todos 10s fickos son
lddos y concatenados antes de comenzar la edici6a Si M)se especiflca ninglfn fiche
ro, la utilidad sed toma la entrada del standard-input.

script-sed Es un script de cudena usado como un script de edici614 cuyas sentencias sed serh
aplicadas a las lineas del fichero de entrada.

Ejecucidn
La utilidad sed incluye varias funciones para seleccionar las lineas que van a ser moditicadas,
haciendo 10s cambios pertinentes s610 a las lineas seleccionadas.

El comando sed utiliza dos zonas de memoria principal para tratar la linea mientras se estA IID
difkando: la zonu de configuracidn, don& a la linea seleccionada se le aplican 10s comandos
del editor sed; y la zona de retencidn, donde las lheas pueden sa guardadas temparalmente.

Un script-sed c o r n de subcomandos de edici614 uno por linea, con el siguiente formato:

El comando sed realiza en la ejecuci6n 10s siguientes pasos:


Lee una linea del fichero de entrada y la sihSa en la zona de configuracidn.
Lee las sentencias del script-sed y si al@n comando direcciona la linea de entrada, la utili-
dad sed aplica, en secuencia, el comando o mmandos a esa linea.
Despub de aplicar todos 10s subcomandos sed, &be el resultado en el standard-output.
Limpia la zona de configuraci6n y repite este proceso hasta que todas las lineas del fichero
de entrada hayan sido procesadas.

Algunos de 10s comandos sed utilizan la zona de retencidn para salvar toda o parte de la
zona de configuracidn para subsiguientes recuperaciones.

El siguiente diagrama muestra el proceso de ejecuci6n del comando sed:

lineas de enpaah
I I

subcomandos sed
I ....

I 1 I

I40 5 -EDITOR red


PmgTaamas de Utilidd UNIX

Direcciones
Los submandos del editor sed pueden seleccionar lfneas de entrada para actuar sobre ellas.
Est0 requiere el us0 de direcciones.La utilidad sed tiene dos t i p de direcciones:
Por la posicidn dentro del fichero: direcciones pot el nlimero de linea.
Por la mespondencia con la plantilla: direcciones de contafo.

Las direcciones por el nlimero de linea de la utilidad sed, son como las del editor ed, y esth
representadas por un ntlmero decimal que menta lfneas de los ficheros de entrada acumulativa-
mente, o por un signo d6lar ($) indicando la clltima linea de entrada.

Las direcciones de context0 son expresiones regulares bkicas, cuyos caractem delimitadores
de la plantilla podemos seleccionar. La forma general de la pkuztillu es la siguiente:

\?plilm-h?

Don& el car&cter 1 pu& ser un cadcter delimitador que nosotros podemos seleccionar, ex-
cepto un c a r k t ~
de expansi6n. La forma de defect0 de laplantilh es la siguiente:

Asl:

En una direcci6n de contexto, la construcci6n kt?xpresibnc,en la que c puede ser cualquier


carikter, except0 barra inversa 0) y nueva linea, es i&ntica a la comtrucci6n /expresi6n.
Por ejemplo, en la dhxxi6n de contexto W c W B , el segundo cafacter x se qresenta
asf mismo, por tanto, la expresi6n regular es rrbcxdef.

La secuencia b se corresponde con un carfictarnueva linea en la zona de confguracidn.

Un car6cter punto (.) se corresponde con cualquier cariktm, except0 con un car- nueva
lfnea en la zona de configuracidn.

Algunos subcomandos sed nos permiten especificar una lfnea o un rango de lineas separado por
un signo coma (,), a las cuales se las aplica dichos subcomandos. Estos comandos son llamados
comandos direccionados, a 10s cuales se les aplican las siguientes reglas:

Un command-linesed sin direcciones, seleccio~todas las lineas.

Un command-line sed con una direcci614 selecciona cada linea de entrada que se corres-
ponda con esa direcci6n.

Un command-line sed con dos direcciones separadas por un signo coma (,), selecciona el
rango completo desde la primera linea que se corresponde con la primera direcci6n, hasta
la siguiente lfnea que se corresponde con la segunda direcci6n. (Si la segunda direcci6n es
un ntlmero menor o igual que el primer nfimero de linea seleccionado, s610 es seleccionada
una linea). DespueS, el proceso es repetido, buscando de nuevo la primera direcci6n
Las siguientes son direcciones validas en un proceso sed:
1,20
/#I,$
/comienzo/Jfinl
5 -EDITOR red 141
Prowamus de Utilidad UNIX

Subcomandos
Los comandos del editor sed actclan sobre el texto del fichero de entrada, per0 su contenido no
es alterado, las lfneas modificadas s e r h o no visualizadas se@n las opciones specificadas, o
redirigidas a un fichero de salida. Los subcomandos sed constan de un solo carkter, y son ffici-
les de reconocer porque la mayorfa son similares a los del editor ed.

Los subcomandos sed e s t h contenidos en una linea bnica, con el siguiente formato:

[direccibn[/ l i r e c c ~ n ] ~ ~ c o ~ ~ o [ o p c w ~ s ]
Cuando un comando del editor sed incluye una direcci6n (un nbmero de linea o UM plantilla de
btisqueda), s610 la linea o lfneas seleccionadas son afectab por el subcomando sed; si no se
especifica ninguna direcci6n, el comandosed es aplicado a todas las lfneas de entrada.

Cuando un subcomando necesita un caribx nueva lfnea, debe ir seguido de un cariicter barra
inversa a). El nbmero maxim0 de direcciones permitidas por cada subcomando visto a conti-
nuaci6n es 2, except0 1 para los subcomandos a\, i t =, q y r, y 0 para 10s subcomandos vacfos,
mmentarios (#) y entradas al script-sed de la forma :etiqueta.

a\
text0 Agrega una o maS lfneas de text0 despuB de la linea especificada en la direcci6n. El
comando a\ debe ir precedido de una dirwi6n, de lo contrario, el texto sad agregado
despub de todas y cada una de las Uneas de entrada. Su farmato es el siguiente:

[direccibn]a\
texto\
...
\
texfo

Las lfneasque van a ser agregadas deben finalizar con un cariicter barra inversa a),
excepto la bltima lfnea, para pmteger el eadcter nueva linea.

b label Realiza un bucle desde la etiqueta especificada en b labeL basta la presencia del UM
etiqueta que comience con un d c t e r dos puntos (:). Si no es especificada ninguna
etiqueta, la bifurcaci6n se realiza hasta el final del script-sed.

C\
texto El comando c\ es identic0 a los comando \a e i\, excepto que cambia (sustituye) las
lfneas especificadas, las cuales contendran el nuevo texto. Si especificamos un rango
de direcciones, el comando c\ reemplaza el rango completo de lfneas a una Ocurrencia
bnica del nuevo texto. El comando c\ tiene el mismo formato que el comando a\.

d Borra las lfneas seleccionadas, no siendo visualizadas en el standard-output. Sobre la


linea borrada no a d a nin@n comando. DespuB de ejecutar el comando de borrado,
la utilidad sed comienza el siguienteciclo.

D Borra el segment0 inicial de las lfneas seleccionadas basta el primer carticter nueva
lfnea. k p u & comienza el siguiente ciclo.

g Visualiza las lfneas no seleccionadas, en vez de las seleccionadas.

G Agrega las lfneas seleccionadas a las no seleccionadas.

I42 -
5 EDITOR red
Progrqmas de Utilidad iJNIXx

H Visualiza en el standard-output las lineas de entrada.

i\
texto Este comando es identic0 al comando a\, excepto que coloca el nuevo texto antes de la
linea seleccionada. Tiene el mismo formato que el comando ai

I Lista las lineas seleccionadas en el standard-output, mostrando 10s caractaes no im-


primibles. El final de cada linea es marcado con un ca4cter d6lar ($).

n Prooesa la linea seleccionada sin visualizarla, e inmediatamente desputs comienza el


proceso de la siguiente linea del script-sed.

N Agrega la siguiente linea de entrada a las lineas seleccionadas incorporando un ark-


ter nueva linea. Es cambiado el nfimero de linea en curso. Este comando puede sa
usado para buscar plantillas que e s t b divididas en dos lineas.

P Visualiza en el standard-output las lineas seleccionadas. El subcomando p anula la


opci6n -n del command-line sed.

P Visualiza en el standard-output el segment0 inicial de las lineas seleccionadas hasta el


primer cartlctex nueva linea.

9 Salir. Este subcornando dice a la utilidad sed que finalice el proceso.

rrm Lee el contenido del fichero especiflcado en @.k;y agrega su contenido a la linea se-
leccionada. El argument0 rf& debe terminar el command-finey debe ir precedido de
uno o maS caracteresblancos.

s/p~cadenade-sus~ci6nfopcioms
Sustituye la cadena especificada en cadena-de-sustituci6n por la primera ocurrencia
de la cadena dada enplantilla, Qndep&zdh es una expresi6n regular. Como carac-
teres delimitadares podemos usar cualquia car8Cter. excepto nueva linea (In) y barra
inversa 0, a w e el caractet usado tradicionalmente es el c a r W &a inclinada (0.

En opciums podemos especificar cero o alguoas de las siguientes opciones:


R Do& n es un niimero de 1 a 5 12, sustituyendo la m e n c i a n de la expre-
si6n regular especificada enplantilla de cada lhea direccionada.

g Global. Sustituye todas las ocurrencias de la expresi6n regular especificada


enplantilla que se cmesponda con la cadena-de-sustitucibn.Si no especifi-
camos la opci6n g, el editor sed s610 sustituye la primera m e n c i a de la
expresi6n regular de cada linea seleccionada.

P Visualiza en el standard-output las lineas que han sido sustituidas, adem&


de las que contenga el fichero.

w wfile Es similar a la apci6n p, excepto que las lineas sustituidas son enviadas al
fichero dado en wfile, el cual sera creado antes de que comience el proceso.
Entre la opci6n w y el nombre del fichero debe ir al menos un espacio.

La cadenade-sustituc~npuede contener un caracter ampersand (&), el cual es susti-


tuido por la cadena que se cmesponda con la expresi6n especificada enplanhWu.

S -EDITOR xed 143


Programas de UtifihdUNIX

tMeZ Bifurca a la etiqueta dada en U e f delfichero-script-sedsi no h e hwha ninguna sus-


tituci6n despub de la tlltima lectura de una linea de entrada o de un mmando t. Si no
se especifica UM etiqueta en &bel, el control es transferido al final del script-sed.

w wfize Es similar al mmando p, excepto que la linea o lineas seleccionadas son enviadas al
fichero especificadoen wfile,si la sustituci6n es realizada. El fichero lvfile Sera creado
antes de que comience el proceso.

X y las no seleccionadas.
Cambia las lineas ~ele~ci~nadas

y/pk~*llul@k~/
Sustituye todas las ocurrencias de 10s caracteres deplantiual por 10s caractexes CCP
rrespondientes deplantilla2. El tamailo depkntillal yplantiua2 deben ser iguales.

!subcomando
Negaci6n El opera- NOT (!) s610 aplica el subcomandosed espXicado en subco-
mando a las lineas no seleccionadas~ K Kla direcci6n o direcciones.

Wef Marca un punto de bifurcaci6n en el script-sed, el cud S K ~referenciado por 10s co-
mandos b o t. La e€iqueta(dabel) puede ser cualquier secuencia de 1 a 8 bytes.

- S610 visualiza el Iliimero de linea de la linea direccionada.

{ subcomando
... Ejecuta 10s subcomandos sed incluidos entre 10scaractem llaves sobre las lineas se-
1
I~U~nadaS L.a sum- van separados por caracteres nueva linea. El car6cter
llave de apertura ({) puede ir precedido de caractefes blancos y seguido de espacios. El
cadcter llave de c i a 0)debe ir precedido de un carActe!r nueva linea y puede ir co-
mo un car4cter tinico en UM linea tinica.
# Si el cadcter nfimero (#) aparece como primer carficter de la primera linea de un fick-
ro script-sed, esa linea ser6 tratada como un comentario, excepto si el carilcter &pub
del sign0 # es una letra n, en cuyo caso, la salida de defect0 es suprimida. El rest0 de
la linea despub de la cadena #n tambien es ignorado. Un script-sed debe contener al
menos una linea sin mmentarios.

Los subcomandos sed vacios son ignorados.

Los siguientes son ejemplos de subcomandos sed villidos. (Observemos que las sentencias sed
(script-sed) van encmadas entre caracmes apbtrofos):

sed ‘1,lOd’fihero-ent
sed e ‘1,lOd’fihero-enf
sed -i~chero-sed-sc~tfihero-enf
sed ‘~guaYparecido/g’fichero-ent>fihero.sal

Notas
Otras utilidades, como la utilidad awk permite analizar y reestructurar ficheros especificando
expresiones regulares (ver “PROGRAMACZON EN awk” 153). El editor ed, es un editor de linea,
que permite crm, &tar y modificar ficheros. La utilidad grep es un program Ntro utilizado
para localizar expresiones regulares en un fichero (ver “Utilidud grep”, p 4 g i ~114).

I44 -
5 EDITOR sed
Progrdmas de Utilidad UNIX,

Ejemplos
El siguiente fichero, llamadopuema, cuyo contenido es listado a continuaci6n, va a ser utilizado
en m u c h de 10s siguientes ejemplos del editor sed:

!$ catpoem
1. Poesia:
2. Las rosas son mjas y las violetas son aplles,
3. ElsistemaUNIXcsnegroylosbitssongrises,
4. Los p6j;laros cantan y las nubes se levantan,
5. Y obras son amores y no buenas rpawes.
6. Anbimo.

Listar texto
El siguiente ejemplo lista las lres primeras lineas del fichero poem, como por ejemplo podria
listarlas la utilidad head (ver “Ufilidadhead”, p6gina 133):

!$ sed‘3q’poe.m
1. Poesfa:
2. Las cosas son rojas J las violetas son azules,
3. El sistema UNMcs negro y 10s bits son grises,

Normalmente, la utilidad sed q i a todas las Uneas de entrada al sfdour dcsputfs de editarlas. El
siguiente ejemplo lista todas las lineas del ficheropoem y las que contengan la cadena las:

$ sed ‘/&slp’ p o e m
1. Poesfa:
2. Las rosas son rojas y las violetas son azules,
2. Las cosas son rojas y las violetas son azules,
3. El sistema U N I X s negroy los bitsson grises,
4. Los p6jaros cantan y las n u b se levantan,
4. Los p 5 j m cantan y las nubes se levantan,
5. Y obras son amores y no buenas comes.
6. Andnima

El siguiente comando sed es equivalente al anterior, except0 que &e utiliza la opci6n -n para
que la utilidad sed s610 visualice las lineas seleccionadas del ficheropoema:
$ sed -n ‘Jlaslp’poema
2. Las rasas son mjas y las violetas son azules,
4. Los paijaros cantan y las nubes se levantan,

El siguiente command-line sed visualiza las lineas del ficheropoem especificadas en el rango
numQico 4 a 5 :

$ sed -n ‘ 4 3 ~poem

4. Los paijaros canhn y las n u b s se levantan,
5. Y obras son amores y no buenas ramnes.

El siguiente command-line sed utiliza direcciones de confexfodel fichero poem para visuali-
zar las lineas comprendidas dentro del rango:

$ sed -n‘InegrolJnubeslp’ poem


3. El sistema UNM es negro y 10s bits son grises,
4. Los p5jaros cantan y las nubes se levantan,

-
5 EDITOR sed 145
Programas de Utilidad UNIX

El siguiente ejemplo visualiza en el standard-output las lineas del ficheropoem que contengan
el sign0 dos puntos (:):

$ sed -n Wgp’ p o e m
1. PoesEa:

El siguiente command-linesed utiliza la direcci6n l,$,indicando que el ficheropoem Sera lis-


tad0 desde la primera linea hasta la tlltima, como podria listarlo el comando cat (vex “UtiZiU
cat”, @gins 47). Si no especificamos la opci6n -n, las lineas del fichero son listadas dos veces:

$ sed -n ‘l,$p’ poem


1. Poesia:
2. Las rosas son rojas y las videtas son ades,
3. El sistema UNMes negro y 10s bitsson grises,
4. Los p6jaros cantan y las nubes se levantan,
5. Y obras son .IIYKCSy no buenas ramnes.
6. An6nimo.

Sustituir texto
El siguiente ejemplo realiza UR cambio global, sustituye la cadena son por erun en todas las li-
neas del ficheropoem, ya que en el comando s no se especifican direcciones. Si no especifica-
mos la apci6n g, el comandosed no sustituiril la segunda Ocurreflciason de la linea 2:

$ sed ‘dsoderudg’ p o e m
1. Poesia:
2. Las rosas cran rojas y las videtascran d e s ,
3. Elsiskma UNM es negroy 10s bits cran grises,
4. Los p6jarcs cantan y las nubes se levantan,
5. Y obras eran amoresy no buenas rawness.
6. An6nimo.

El siguiente ejemplo sustituye la cadem son por ERAN de las lineas 1 a la 4 del ficheropoem,
per0 s610 de la primera ocurrencia de cadalinea. (Observemos que s610 son visuaZizadas las If-
neas modificadas, opciones -n del comandosed y p del subcomandos):

$ sed -n ‘1,4s/sodER,W!p’ poem


2. Las rosas ERANrojas y las violetas son azides,
3. El sistema UNMes negro y 10s bits ERAN grises,

Cuando tenemos que ham operaciones complejas con el comando sed, podemos utilizar unfi-
chero-script-sed con los subcomandos sed que van a ser aplicados a1 fichero de entrada. El si-
guientefichero-sed, llamado sustsed, seril usado con el comandosed para sustituir texto:

$ cat sustsed
P-
294-gp
A$fdnd!Wp
dp5jaroslAWgp

$ sed -n -fsustsedpoem
2. Las rosas son rojas y LAS violetas son azules,
4. Las p5jaros cantan y las n u b se levantan,
4. LAS *jar= cantan y LAS nubes se levantan,
4. LAS AVES antan y las nubes se levantan,
5. Y obras son amores y SI buenas ramnes.
6. AsInimo.

146 5 -EDITOR sed


Promamas de Utilidad UNIX

En el ejemplo anterior, vemos que la linea 4 ha sido modificada 3 veces, por lo que el orden de
10s subcomandos en el script-sed, es muy importante. La sentencia de la Una 3 del fichero
sustsed direcciona el comando s para que sustituya la cadena no por SI en las lineas que finali-
cen con un sign0 punto (.). Observemos que la linea 6, tambien ha sido modificada; para evitar
estas sustituciones no deseadas, las cadenas podrfan ser escritas de la forma:/ no /SI/.

En el ejemplo anterior, 10s subcomandos del fichero sustsed llevan la opci6n p, y el command-
line sed es ejecutado con la opci6n -n con el fin de poder visualizar la salida. Lo usual, es eje-
cutarlos sin dichas opciones y enviar el fichero modificado a un nuevo fichero:

$ sed -f sustsed poem >p o e m n e w

Como hemos Visto, el us0 deficheros-sc~pt-sedes una buena idea, ya que podemos verificar y
modificar nuestros scripts antes de ejecutarlm, y adem% utilizarlos para editar Otros ficheros.

Supongamos que tenemos que enviar un memaje ai m e o de un determinado usuario, y el text0


del mensaje lo tenemos en un fichero llamado carta con el siguiente formato:

$ cat carta
NOMBRE
La pr6rima reuni6n sed d FECHA.
Los temas a tratar son muy importantes
Por favor, ewnunicarla NO asistencia.
El Jefe

Entonces podemos utilizar unfickro-script-sed con subcomandos sed para sustituir la cadem
NOMBRE par el nombre al que se enviaca la carta,y la cadena FECHA por la fecha en la que se
celebrad la A estefichero-scripr-sed lo llamaremos enviosed:

$ cat envio.sed
sNOMBIWRamir0 Ramirrd
dFECHAn6 de mayo a las lk3W

El siguiente command-lineutilii elfichero-script-sedenvio.sed para modificar las cadenas in-


dicadas al fichero carEIz y enviar al usuario rmiro la carta actualizada, mediante la utilidad
mailx (ver “Utilidad mailx”, pAgina 311):

$ sed -f enviosed ccvfa I mailx r h o

El siguiente script, envio-carta, es un ejemplo de la utilidad sed, tambih aplicado al fichero


carta, que puede enviar al correo electr6nico de un usuario de una forma mils practica:

$ cat e&-&
#!/bid&
# script: envio-cad -M d i i un fEhero y lo envia a un usuario via mailx.
echo “Introducir la fecha de la reuni6n: \c”
read fecha
echo “Introduar d nombre del usuario: \cn
read usuario
for nombrer in Susuario
do
aomcomplet=*grepSnombrerl e t d p w d t I cut -d: -f S
cat carta I sed WOMBRE‘$nomcompIetl
dFECHA6fccW” I rnailx Snombrer
done

5 -EDITOR red 147


Programas de U t i l W UNIX

Agregar, cambiur e insertar texto


El siguiente ejemplo agrega nuevo texto (la lhea 3.1) al fichero poem, despuQ de la linea 3.
En el command-line no se incluye la opci6n -n, por tanto sera visualizado el fichero complete:

$ sed ‘3a\
> 3.1 Que Uueva que Uueva la Vqen de la Cueva,’poem
1. Poesia:
2. Les nsas son mjas y las *ioletasson azules,
3. El sistema UNIX es negro y 10s bits son grises,
3.1 Que Uueorr que Uueva la Viugen de la Cueva,
4. Los p6jaros cantan y las nubes se levantan,
5. Y obras son amoers y no buenas ramnes.
6. Adnimo.

El siguiente command-linesed utiliza elfichero-script, agre.sed para hacer una sustituci6n en la


linea 6, y despu& agregar text0 al ficheropoem despuh de la linea 6. El comando 6p al final
delfichero-script, visualiza la linea modificada. Las lineas agregadas siempre son visualizadas:

$ cat agre.sed
WAn6nimdEl Bit Locd
6a\
6.1 Se a d & \
6.2 ADIOS.
6P

$ sed -n -iagre.sed poem


6. E l B i t h
6.1 Se acab6.
6.2 ADIOS.

El siguientefichero-sed, insertsed, incluye un comando i\ con UM direcci6n de contexto, y es


utilizado con el siguiente command-line sed para insertar texto antes de la linea seleccionada:

$ cat insertsed
ISiSted
Los frutos de las higueras\
son 10s Egos y las brtvas.
293P

$ sed -n -finserts-dpoem
2. Las rows son mjas y ks videtas son azules,
Los frutos de las higueras
son 10s Egos y las brevas.
3. E3 siskma UNIX es negro y 10s bits son griss,

El siguientefichero-sed, cambio.sed, muestra el comando c\ con un rango de lineas (2,s). El


editor sed cambia (sustituye) las lineas 2 y 3 y elimina la 4 y la 5 (las no incluidas):

$ cat cambw.sed
2 w
ESTA ES AHORA LA NUEVA LINEA 2.\
Y ESTA LA NUEVA LMEA 3.

$ sed 4 cambio.sed poem


1. Poesia:
ESTA ES AHORA LA NUEVA LINEA 2.
Y ESTA LA NUEVA LINEA 3.
6. A d n i m .

I48 5 - EDITOR sed


Programas de Utilidad UNIX

Borrar texto
El siguiente command-line sed utiliza el comando d para ma
r las lineas 1 a 5 del fichero p a -
ma.Las lfneas borradas no son visualizadas:

$ sed 'l$d'poema
6. An6nimo.

El siguiente command-line sed bonra las lineas del ficheropoema incluidas en la direcci6n de
context0 espif'icada:

$ sed Vrostisl,t'p~arosld'p o e m
1. Poesia:
5. Y obras son amores J no buenas razones.
6. An6nimO.

La utilidad sed siempre visualiza el texto agregado, como podemos ver en el siguiente ejemplo,
donde primer0 son agregadas 3 lfneas despueS de la linea 2, y &pub son b a d a s las lineas 2
a 8, per0 las Uneas agregadas son visualizadas, como si hubi&emos especificado la opci6n -n:

$ cat boagre.sed
2a\
PRIMERA LINEA AGREGADAA
\
TERCERA LINEA AGREGADA.
2sn

!$ sed -fboagre.sed poem


1. Poesia:
PRIMERA LINEA AGRlSADA.

TERCERA LINEA AGRFZADA.

El siguiente shell-script, bo* utiliza el editor sed para borrar la lfnea o U m m del ficherofi-
letel que especifiquemos en el command-line del script al ejecutarlo. Tambih usa la utilidad
grep para verifcar si el nombre introducido tiene a l g b registro r e d o , y si es asi no borrarlo:

$ cat bortel
#!tbiih
#script: bwtel -Born re@tros.
if [ 'grep -c $1fdetd' -eq 1 ]
then
sed '/$lid' tiietel> Netel.$$
mv fiIeteL$$ Netel
cat filetel I sort
else
echo "$1 tiene m;iS de un teEfono."
fi

El fichaofiletelpodrfa tener un contenido parecido al siguiente:

$ catfhtel
Mariano Dom'nguez 91-3860012
Pedro Fernsindez 91-5233467
Maria G a d 91-7478999
Juan Mpez 91-8321098
Pedro Fernsindez 91-8321098
Alice MacDonald 91-4987054
... ...
5 -EDITOR sed 149
Programas de U t i l W UNIX

Formatear text0
El editor sed es frecuentemente utilizado para formatear ficheros, por ejemplo, borrar blancos
de final de linea, eliminar fieas blancas, etc. LAX siguientes ejemplos son algunas de las aplica-
ciones de la utilidad sed.

El siguiente script, tabizq, mea un margen izquierdo en cada linea (un tabulador de 4 espacios)
del fichero o ficheros especificados como argumentm del s c r i p

$ cat tab@
#!/bin/ksh
# script: tab- -
Crea un tabulador en 10s principios de linea.
if [ "$1" = "1
then
echo "Us0 c0rrect.a tabizqfihm ..."
exit 3
if[ !-f "$1" ]
then
echo "R fKhero $1 no cxisk"
exit 3
fi
for i in $*
do
sed WAI P $i > tempo.$$
WII tempo.$$ Si
done

En el script anterior, la expresi6n regular: /V,tiene carrespondencia con uno o maS caracteres al
comienzo de una linea (es deck, se amsponden con las lineas que no sean blancas), e inserta
un car&cter tabulador al comienzo de cada linea (entre 10s dos Wmos caracteres barra inclinada
del command-line sed hay un tabulador de 4 espacios).

El siguiente command-line realiza la labor contraria del ejemplo anterior, elimina los tabulab
res de 4 espacios de comienzo de linea del fichero especificado enj%hero.enf:

El siguiente script, dobspace, convierte el fichero o ficheros especificados en el commund-line


del script, a doble espacio:

$ cat dobspace
#!lbinflrsh
-
# script: dobspace Convierte fKheros a doble espacio.
if [ "$1" = u)']
then
echo "Us0 corredo: dobspaceficAero..."
exit 3
if [! -f "$I"]
then
echo "EI fiihero $1 no e-"
exit 3
fi
for i in $*
do
sed wsl\
tg' Si > tempo.$$
mv tempo.$$ Si
done

150 -
5 EDITOR ~ r d
Progrumas de Utili&zd UNIX

El siguiente script, elimina, barra los espacios de finales de lfnea del fichero o ficheros especi-
ficados como argumentos del command-line.Si se especifica la opci6n -b, el script elimina
tambit?n borra las lfneas blancas del fichero o fickos especificados:

$ cat elimim
#!/binlsh
-
# script: eliimina Bema espacios de finales de line? y lineas blancas de un ficbero.
case$#in
0) ERROR=l;;
*) foriin$*
do
case$i in
-b) BORLIkvale ;ERROR=O;;
*) FILES="$FILES Si" ;;
CSaC
done
eSaC
if [ us- = ,,I
then
ERROR=2
fi
case $ERROR in
112) Who "USO Eocrcdo. $0 [-b]fichero w b ...I" 1-2
exit $ERROR ;;
CSaC
if [ "$BORLiN" != We"]
then
for i in $FILE
do
sed ' d *SIP Ei > tempo.$$
mv tempo-$$ Ei
echo "Baradas blancos finales de Si"
done
else
for i in $FILE
do
sed *st *$It
tAs/a' $i > tempo.$$
mv tempo.$$ Si
echo "Borradas blancos fimalesy fineas blancas de Si"
done
fi

El siguiente scrip?, taw, convierte cada espacio a un tabulador de 8 espacios, del fichero o fi-
chaos especificadoscomo argumentos del scripr.

$ cat tab8

--
#!tbiih
# script: tab8 Convierte espaaos a tabuladores de 8 apacios.
if[ 3 1 9 = ]
then
echo "Us0 orr recto: tabsfichero ..."
exit 3
fi
for i in $*
do
sed 't tst I tg' Si > tempo.$$
mv tempo.$$ $i
done

El siguiente ejemplo sustituye cada tabulador de 8 espacios a un tabulador de un espacio:

$ sed 'sf f fg'jTchero.entr >fichero.sal

5 -EDITOR sed I51


Programas de Utilidad UNlX

Otras operaciones
En el siguiente command-line sed se utiliza elfichero-script-sed, copiased, para copiar las li-
neas 2 a 4 del ficheropoem a1 ficheropoemdos:

8! cat copiased
2,s w poetnados

!$ sed -n-f copicrsedpoem


!$ catpoemdos
2. Lps msas son rojas y las violetas 8011 azules,
3. El sistema UNM es negro y 10s bits son grises,
4. Las p5jaras umhn y las n u b se levaatan,

El siguiente ejemplo, es muy parecido al anterior, con la diferencia de que el subcomando w va


precedido del operador NOT (!), haciendo que la utilidad sed q i e al fichero poematres, las
lfneas no seleccionadasen la direcci6n, del ficheropoem:

$ cat copia2.sed
294 !w poema.trrs

!$ sed -n-f copia2.sed poem

Cuando listamos un fichero con el comando pr, este comando pone una cabecera con la fecha
del ficharo, el wrnbre del fichero y el niimero de p a g i ~
(Page n), por cada pfigina Iistada. El
siguiente ejemplo, pone la cadena Page n entre caracteres par&e&:

$ pr f fihero I sed “flage *[0-9P[0-9]*$/or,I Ipr -Pimpresora

El siguiente script-sed,juntar.sed, junta cada linea que finalice con un cariicter barra inversa 0)
a la linea que va a continuaci6n:

$ catjuntar.sed
:join
nww
A\WI
b join
1
Primero, la plantilla AS/ selecciona una linea que finalice con un carilcter barra inversa 0) para
el grupo de comandos encerrados entre 10s caracteres llaves ({ }). El subcomando N agrega la
linea siguiente, incluyendo un carilcter nueva linea on).
La plantilla sA\W bema el carilcter barra
inversa 0) e incluye el carilcter nueva linea on).
Finalmente el subcomando b junta el bucle a la
etiqueta :join para verificar si hay un carkter barra inversa 0) al final de la nueva linea unida.
Sin el bucle, la utilidad sed scribe la linea unida y lee la siguiente linea antes de verificar el
segundo carilcter barra inversa 0).

El siguiente fichero,fipnsed, nos puede servir de ejemplo:

$ catfipnrsed
La utilidad sed p e d e tomar \
entradas de un fwhero, per0 el texto \
del fichero no es alterado.

$ sed -fjtmtar.sedj?prused
La utilidad sed p e d e tomar entradas de un fichero, per0 el text0 del fichero n es dterad

I52 5 - EDITOR sed


Promamas de U t i l W UNIX

6 - PROGRAMACION EN awk

Introduccio'n
La utilidad awk es una utilidad filtro del sistema UNIX que permite analizar y procesar planti-
flus de uno o varios ficheros de text0 o del standard-input, para ver si contienen lfneas que se
comespondan con dichas plantillas y ejecutar las ucciones mespondientes, como: la escritura
de llneas o campos en el standard-output,el incremento de un contador cada vez que la plantilla
tiene UM mespondencia, etc.
El nombre de la utilidad awk (a diferencia de los nombres de las utilidades UNIX que indican un
nombre nemotbico funcional del comando), es tomado de las iniciales de los apellidos de sus
autores: V. &IO, J. Yinba-gtx y W.Brnighan.

La utilidad awk es un lenguaje de progrmci6n que soporta correspondencia de plantillas y


estructuras semejantes a las del lenguaje C. El thninoprograma awk se refiere a un programa
escrito en Zenguaje awk Los programas awk no requieren coqilaci6n; la utilidad awk inter-
preta las sentencias del programa haciendo que el manejo y el formate0 de datos resulte facil y
c6modo para el usuario.
Con la utilidad awk podernos r e a l i i , entre mas, las siguientes aperaciones:
Generar y formatear documentos.
Verificar datos.
Asignar y manejar variables.
Evaluar expresiones aritm6ticas.
Extraer y reestructurar campos de lo6 registros de un fichero.
Combinar la utilidad awk con otras utifidudesflZtro.
Ejecutar stmtencias de control de flujo.
Manejar bases de datos personala.

La utlIidad awk es una herramenta muy Citil para manejar y formatear infarmes con &ran canti-
dad de datos. La utilidad awk, adem de manejar lineas,permite referenciar y manejar campos
espedficos de UM linea. Otra ventaja de la utilidad awk, es que sus programas no suelen sa
rnuy extensos y no necesitan ser compilados, evitando asl el engorroso ciclo: editaraqilar-
depurar el programa.
La utilidad awk ejecuta programas escritos en lenguaje awk El progruma awk consta de una o
m h instrucciones conteniendo UM pfuntilluy/o una uccidn que es ejecutada cuando la plantilla
es encontrada.

El Zenguaje awk permite el uso, entre otras, de las siguientes funciones:

Expresiones regulares.
Sentencias de control de flujo.
Sentencias de salida similares a las del lenguaje C.
Caracteres & conversi6n para formatear salidas.
Caracteres separadores de campo y de linea.
Funciones wm&icas y de cadena.
Funciones &finidas por el usuario.
Matrices asociativas.

-
6 PROGWACION ENawk 153
Programas de Utilidad UNIX

Notas
Aunque la utilidad awk es UM de las utilidades UNIX m& completas para manejar y formatear
ficheros de texto, otras utilidades como la utilidad sed edita y rnodifica lfneas de un fichero (ver
“UtiZidad sed”, p@na 139). La utilidad grep selecciona las lfneas de un fichero que se corres-
pondan con una plantilla dada (ver “UfiZidadgrep”, pagina 114).

Una utilidad similar a la utilidad awk, es la utilidad gawk del proyecto GNU de la Free Software
Foundation. La utilidad gawk es compatible con la utilidad awk, por lo que ambos comandos
pueden ser invocados para ejecutar un programa escrito en Zenguaje awk

Muchos de 10s ejemplos que veremos en este capftulo toman la entrada del fichero cars, el cud
contiene datos relacionados con determinados coches. Cada registro del fichero cars contiene
datos relativos a un coche, como son: la marca, el modelo, el afio de fabricaci6n (las dos tlltimas
&as), kilometraje (en miles) y precio (en euros):

$ cat cars
ford scort 89 100 2360
honda accord 90 180 4200
ope1 eorsa 90 105 2500
renadt chamade 93 80 3010
ford mondeo 95 30 8330
bmw compact 96 42 14254
VOlVU optima 97 15 22140
ope1 frontera 96 58 16020
ford ecwpio 98 54 11345
ope1 vectra 98 11 15600
rcnadt wane 98 12 7560
ford fiesta 99 10 5915
i

Datos de entrada
El comando awk lee 10s data de entrada en el orden establecidoen el command-line awk. Si no
especificamos ni@n fichero de entrada o especifkamos un carficter gui6n (-) como nombre de
un fichero de entrada, la utilidad awk lee la entrada del standard-input.

La utilidad awk lee datos de entrada de cualquiera de las siguientes fuentes:

Del fichero o ficheros especificados en el argumentoficirero-de-entradao equivalente.


Del standard-input (usualmente del fichero que rqresenta nuestro terminal: el teclado).
De 10s argumentos de la sentencia getline (ver “Sentencia getline”, pagina 166).

Los ficheros de entrada deben ser Echaos de texto. Si especificamos m& de un fichero de en-
trada, la utilidad awk lee 10s datos del primer fichero hasta que se llegue al fin de fichero, se-
guidamente lee el segundo fichero hasta que se llegue al fin de fichero, y asf sucesivamente.

El nombre del fichero de entrada en curso puede ser localizado en la variable FILENAME de la
utilidad awk (Ver“Variablesintegradas”,Pagina 174).

La entrada es lefda en unidades llamadas registros y procesada por las insfrucciones,registro a


registro. Por defecto, cada registro es UM linea. Cada registro leido es autom4ticamentedividido
en campos para ham el registro m& alcanzable a la instrucci6n y manejar las partes del registro
en consecuencia.

154 -
6 PROGRAMACION ENawk
Programas de U t i l W UNIX

Formato del comando awk


La utilidad awk puede ser invocada de dos formas:

Con unprograma awk explicito.


Con uno o maS ficheros conteniendoprogramasawk
...
awk [-F e] [-v v(u=yc1cJ [‘texfo-del-progrmza’J [argument01 .-
... ...
awk [-Fc] [-ffchero-del-program~] [-v v(u=y(ccJ [argumerrtol ...

Opciones
-Fc Esta opci6n define el carkter c como el separador de campo de entrada antes de que el
jkhero-de-enfradasea lefdo. El us0 de esta opci6n es equivalente a la asignaci6n de un
valor a la variable integrada FS de la utilidad awk.

-ffcherodel-progrwna
Especifka el nombre de un fichero conteniendo el program awk Si son especificadas
varias de atas @ones, 10s fichos son concatenados en el orden especificado en el
programu awk Alternativamente, el programa awk (textodel-progrumu) puede ser
especificado en el command-lineawk como un argumento Wco.

-v v m a l
El argumento vur=val de la apci6n -v es un operando de asignaci6n que especifica un
valor (vd) para una variable dada (var). La asignaci6n de la variable apecificada se
realiza antes de la ejecuci6n del programu awk, incluyendo las &ones asociadas con
las plantillas BEGIN (si est4.n especificadas en el programa). En el c o m d - l i n e awk
pueden especificme varias apciones -v var=val.

Argurnentos
6texto-del-programu’
Si la apci6n -ffichero-deGprograma no es especificada, el primer argumento para la
utilidad awk es el texto-del-progruma, delimitado por caracmes ap6strofos (‘).
argumnto
Pueden ser especificados 10s dos t i p deargumento siguientes:
fxhero-de-entmh
Es d nombre del fichero que contiene la entrada que va a ser lei&, la cual Qatar4
de un-reqondersecon el conjunto de plantillas del program awk Si en el argu-
rnentofihero-de-enfrada no se especifica un fichero, o se especifica un car4cter
gui6n (-) como nombre del fichero de entrada, la utilidad awk espera recibir la en-
trada clel standard-input.
vmaf
Donde la cadena especificada en v a t rqresenta el nombre de una variable awk, y
la &M especificada en val es el valor de una variable de cadena si va entre ca-
racmes mmillas (“) o una variable num&ica si la cadena apecificada es num&ca.
La asignaci6n de cada variable se realiza just0 antes del proceso delfichero-del-
programu, si es especificado alguno.

-
6 PROGRAMACION EN a& I55
Promamus de Utilidud UNIX

Estructura de un programa awk


La funci6n bhica de la utilidad awk es examinar lineas de entrada, una despuQ de otra, que
contengan determi~dasplantillas. Cuando una linea se corresponde con UM de las plantillas, la
utilidad awk ejecuta las acciones especificadas para esa linea.

Cuando ejecutamos la utilidad awk, especificamos un progrumu awk que dice a la utilidad lo
que tiene que hacer. El program awk consta de UM serie de instntcciones (tambih puede
contener definici6n de funciones, ver “Fmciones definidas por el usuurio’*, p4gina 184). Cada
instrucci6n especifica una plantilla para la biisqueda, y una acci6n para ejecutar cuando esa
plantilla es encontrada.

Sidcticamente, una instrucci6n consta de una plantilla seguida de una accibn. Generalmente,
cada instrucci6n va en UM linea. ComSmmente, un progrumu awk es una secuencia de instruc-
ciones phtilla-accibn con un formato semejante al siguiente:

phntilla { accidn
phntilla { a c c s n }
.”
La pfuntillu ~eleccionalfneas del fichero G entrada. La utilidad awk ejecuta la accibn en A a s
las lineas que selecciona la plantilla. La accibn debe ir encenada entre caracteFes llaves para
que la utilidad awk pueda diferenciarla de laplanfilla

En una instruccibn awk, la plantillu o la accidn puede ser omitida, per0 no ambas. Si la p h t i -
flu es omitida, la accibn es ejecutada en todas las lfneas de entrada. Si la accibn es omitida, la
accibn imprime, por defecto, todas las lineas que se cumpondan con la plantifla.

El siguiente ejemplo muestra un sencillo program awk con una instntccibn que examina el
fichero de entrada cars, para la cadena de caracteres opel:

$ awk VopeV { print $0 cam


ope1 coesa 90 105 2500
ope1 frontera 96 58 16020
ope1 vestra 98 11 15600

Cuando las lineas que se cc#respondencon la cadena opel @lanfilla) son encontradas, esas li-
neas son visualizadas, ya que la sentencia print $0 (accih)indica imprimir la linea en curso.
(La sentencia print por si misma, tiene el mismo significado que la sentencia print $0, por lo
que en su lugar podiamos haber especificadosimplementeprint).

Los caracteres bam inclinada (/ /) que enciman la plantilla opel indican que la plantilla es una
expresibn regular (ver “Expresiones regulares corn plantillas“, @@na 160).

Si en el ejemplo anterior omitimos la accibn (la sentencia print $0 con 10s signos llaves), el re-
sultado serfa el mismo: t& las lineasque se correspondancon la cadena opef sexh impresas.

En un progruma awk, usualmente, cada linea es una instrucci6n Per0 algunas veces, las im-
trucciones pueden ocupar nxls de UM linea, y las lineas pueden contener varias instrucciones, en
cuyo cas0 &tas sexh separadas con un cargcter punto y coma (;). Una sentencia puede ser con-
tinuada en otra linea, despub de 10s caracmes y cadenas:, { ? : II && do y else,

Las acciones pueden ser finalizadas con un car4.cter punto y coma (;), con un cargcter nueva li-
nea on) o con un car4cter llave de cierre 0)encerrando la acci6n

156 6 - PROGRAMACION ENawk


Progtamas de Utilidad UNIX

Registros y campos
Registros
El lenguuje awk divide la entrada en registros y campos. Los registros son separados por un
carilcter llamado separudor de registro, que por defecto es el carficter nueva linea on), el cual
puede ser cambiado con la variable integra& RS de la utilidad awk (ver “Variabfesintegradas”,
pagina 174). Por to que normalmente, un registro es una secuencia de caractaes finalizados con
un cariicter nueva Unea, es decir,una Unea de text0 thica.
El valor de la variable integrada RS es una cadena de caracteres que dice al programa awk c6-
mo separar 10s registros. A la variable integrada RS se la puede asignar como valor cualquier
cadena de caracteres,per0 s610 es utilizado el primer cadcter de la cadena como separador de
registro; 10s otms ctllilcteres son ignorados. La variable RS es la excepci6n de la regla, ya que la
utilidad awk utiliza el valor completo dado a todas sus variables integra-.

El nuevo car- del separador de registro ir emmado entre caracteres mmillas (“).
Comtinmente, el momento exact0 de hacer este cambio es al comienzo de la ejecuci611, antes de
que sea procesada CUalQuier entrada, de modo que el primer registro ya sea leido con el separa-
dor de registro apropiado. Para realizar esta operaci6n se utiliza la plantilla especial BEGIN.
(Ver “Plantiffusespeciales BEGIN y END”,Pagina 164).

El siguiente ejemplo cambia el valor de la variable RS a1 caracter barra inclinada (I), antes de
procesar el fichero fuente. Es decir, cada arikter barra inclinada (I) encontrado en el fichero
especificadoenfichero creara una lfnea:

awk ‘BEGIN{ R S = V } ;{ print )’@hero

El separador de registro de entrada tambien puede sex cambiado en el command-line awk utili-
zando el mecanism0 de asignaCi6n de variables. El siguiente ejemplo tiene el mismo efecto que
el programaanteriar:

awk ‘{ print }’ RS=vjkhero

La variable integrada NR mntiene el nCimero de registros leido6 hasta ese momento. Y la varia-
ble integrada FNR consema el nfimero de registrm en curso del fichero en curso.

Campos
Cuando la utilidad awk lee un registro de entrada, &te es autoxdticamente separado y analizado
en trozos llamados campos. Por defecto, 10s campos son separados par curucteres espacio. En
entornos awk, el carficter espacio significa una &na de urn o &I espacios ylo tabuladores.

Los campos de un registro pueden ser referenciados con la notaci6n $n, siendo n el niimero de
campo deseado. Por ejemplo, supongamos que la siguiente linea es un registro de entrada. (Las
notaciones de la segunda Unea representan la referencia al ntimero de campo respeztivo):

Este es un ejemplo de linea de entrada


$1 $2 $3 $4 $5 $6 $7 $8

La expresi6n $0 es un cas0 especial, puede sa considerada una variable que representa el regis-
tro de entrada en curso. La variable NF contiene el ntimao de campos del registro en curso.

-
6 PROGRAMACION EN a& IS7
Programas de U t i l W UNIX

Si en la lfnea ejemplo anterior evaluamos la variable NF, la expresi6n $NF hdicar6 lo mismo
que la expresi6n $8, (e&&). Y si intentamos referenciar un campo superiar al tiltimo, por
ejemplo $10. obtedremos una cadena vacia (visualizaremos lfneas blancas).

El siguiente ejemplo imprime 10s registros del fichero cars cuyos primeros campos contengan la
cadena on. El operudur de correspondenciu, tilde verifica si una cadena (aquf el campo $1)
(e)

contiene una mespondencia con una expresi6n regular dada (ver “Expresiones relacionales
como plantillas“, @ g i 161):
~

honda
-
$ awk ‘$1 /on/ { print $0 }’ cars
accord 90 180 4200

Por el contrario, el siguiente ejemplo busca una mespondencia con la cadena on en todo el
registro, e imprime 10scampos 1,2 y filtimo de cada registro de entrada carrespondido:

$ awk ‘/on/ { print $1, $2,$NF }’ cars


honda a d 4200
ford mondeo 8330
ope1fronten 16020

La utilidad awk controla la separaci6n de campos de un registro de entrada con el s e p a r h r de


campo, el cual est4 representado por un car- Mco o par una expresi6n regular. La variable
integrada FS contiene el valor del separadar de campo (por defecto, un cariktex espacio), el cud
puede ser cambiado con dicha variable.

Comfinmente, el momento exact0 de hacer este cambio es a l comienzo de la ejecuci6n, antes de


que sea procesada cualquier entrada, de modo que el primer ~gistrosea lddo con el separador
de campo apropiado. Para realizar ate cambio se utiliza la plantilla especial BEGIN.

El siguienteprograma awk establece el valor de la variable FS al carktez coma (,). Ei prop6sito


de este programa es seleccionar el dia y el mes de 10s registros del ficherofiestas. Supongamos
que el fichero de entrada tiene el siguiente formato y contenido:

$ catfrestas
Madrid, 2 de mayo, 1999.
B d o n a , 11 de septiembre, 1999.
Valencia, Son JasC, 19 de marm, 1999.

$ awk ‘BEGIN{ FS=”,” } ;{ prin $2 }’fiestas


2 de mayo
11 de septiembre
San JasC

A veces, nuestros datos de entrada contendrh caracteres sqaradores que no s q a r a n los campos
como quisitkamos, obteniendo resultadas no deseados, por lo que tendremos que ser cuidadosos
en la selecci6n de separadores de campo y en la disposici6n de nuestros datos.

El sqarador de campo de entrada tambien puede sd especificado en el command-line awk uti-


lizando la opci6n -F.El siguiente programu awk examina el fichero /etc4aswd, con el fin de
seleccionar e imprimir los identifkadores de usuario (campo 1) que carecen de nombre real
(campo 5). El operudor de relucidn igual (=) verifica si el campo 5 se corresponde exacta-
mente con una cadena vada (vex “Expresiones relacionales como plantillas”, p6gina 161):

$ awk -F:‘$S=uw { print $1}’ /etc/passwd


sys
riera

158 -
6 PROGWACION ENawk
Ejecucio’n de programas awk
Las instrucciones de un progranta awk @lantillas y acciones) pueden ser especificadas en el
c o m d - l i n e (texto-aer-programa)o en un fichero @hero-deZ-programa). En ambos casos,
lo primer0 que hace la utilidad awk es leer todas las instrucciones del program awk, y segui-
damente ejecutar las variables asignadas via opci6n -v. Despub, la utilidad awk ejecuta las ac-
ciones asociadas con todas las plantillas BEGIN en el a d e n en el que aparecen en el programa
awk (ver “Plantillas especides BEGIN y END”,p6gina 164).

Si la opci6n -ffichero-der-programano es especificada, el primer argument0 para la utilidad


awk es texf&l-progruma, el cual debera ir delimitado por caracteres ap6strofos para que el
shell no integeee 10s caractetes del programa awk como caracteres especiales del shell.

El siguiente es un programa awk elemental que visualiza las Uneas del fichero cars. Al sa
omitida la plantillu, la accidn ejecuta (imprime) todas las lfneas del fichero de entrada:

$ awk ‘{ print }’ cars


ford sewt 89 100 2360
bonda accord 90 180 4200
ope1 corsa 90 105 2500
renault chalnade 93 80 3010
ford mondeo 95 30 8330
...
El siguiente ejemplo incluye UM plantilla y una acci6n. El program awk selecciona las lfneas
del fichero cam que contengan la &M renuult, y visualiza el precio (campo 5 ) y el modelo
(campo2) de las lineas correspondidas:
$ awk ‘/renault/ { print $5, $2 }’ cars
3010 cbamade
7560 megane

El siguiente ejemplo es unprograma awk maS complejo, llamado preciosawk, que nos da una
idea de lo que hace unprograma awk tipico. @ ejemplo
I utiliza funciones todavia no tratadas,
por lo que no debemospreocuparnos si no comprendexnos todos los detalles):

$ cat precwsmvk
# Obtiene el p d o total de una marca.
$1 =ufordn { SUIllil +e $5 }
END { print Upreao total ashes ford: wma ’’Euros’’ )

$ awk -f preciosawk cars


Precio total caches ford: 27950 Euns

La expresi6n $I = ‘fford” del programa precios.awk verifica si el primer campo del fichero
c m se carresponde con la cadenaford. Cada vez que UM linea contenga la cadenaford en el
campo 1, la acci6n { s u m += $5) sera ejecutada y el contenido del camp quint0 (precio) sera
agregado al valor de la variable sum. Asf, cuando la utilidad awk haya finalizado la lectura de
todas las lfneas del fichero de entrada, la variable s u m tendril la suma total de los campos
quintos de todas las lineas que se correspondieron con la plantillaford. Despub, es ejecutada la
sentencia END y el valor de la variable s u m impreso. (Vex “Actiones", p6gina 165).

Observemos la primera linea del programa, es una linea con un comentario, 10s wales se inclu-
yen para explicar lo que hace el program. El lenguaje awk ignora cualquier text0 que vaya
precedido de un &cta ntlmero (#).

-
6 PROGRAUACION EN auk 159
Propramas de Utilidad UNIX

Plantillas
En el lengwje awk las plantillas son utilizadas para seleccionar lineas de entrada y controlar la
ejecuci6n de las instrucciones. Si UM plantilla tiene correspondencia con una linea, esa linea es
seleccionada y la acci6n asociada es ejecutada. Los siguientes son 10s tipos de plantillus sopor-
tados por la utilidad awk:

De expresidn reguh.
De expresidn relacionaL
De expresidn bookana
De expresidn.
De rango.
Va&
Especiales: BEGIN y END.

Expresiones regulares como plantillas


La utilidad awk permite el us0 de expresiones regulares en las plantillas (ver “Expresiones re-
~ Las plantillas con expresiones regulares deben ir encmadas entre ca-
gulares“, @ g i 107).
racteres barra inclinada:/expreg/. En un programa awk la expresi6n de la plantilla intentarit
correspondme con el text0 de las lineas de entrada.

Los siguientes caracmes especiales son reconocidos por la utilidad awk si forman parte de la
expresi6n regular de una plantilh awk

[crbc] Correspondenciacon cualquiera de l a caracteres enmadm entre la signa ccrcheks.

[a-n] Correspondencia con uno de l a caracteres incluidos en el rango u-n encerrados entre
10s caractexes corchetes.

[Arrbc] Correspondenciacon cualquier caracter,excepto con 10s incluidos entre 10s corchetes.

Agrupaci6n de expresiones regulares.

Se utiliza para espificar correspondenciasaltmtivas en expresiones regulares.

Correspondenciacon cero o mits caracmes de la expresi6n regular precedente.

Correspondenciacon cero o un caritcter de la expresi6n regular precedente.

Correspondenciacon cero o mils caracteres de la expresi6n regular precedente.

Correspondenciacon el comienzo de una linea o de un campo.

Correspondenciacon el final de una linea o de un campo.

Correspondenciacon cualquier caracter, excepto el de nueva linea.

Correspondenciacon el caritcter literal especificadoen c. Suprime el significado del ca-


ri€cter especial especificado en c.

I60 -
6 PROGRAMACION EN awk
Pmj?rumas de U i i l W UNIX

El siguiente ejemplo utiliza U M expresi6n regular como plantilla para seleccionar e imprimir las
lineas del fichero cars que comiencen con las letras b y/o h:

$ awk ‘/*[bhl/ { print }’ c a n


honda accord 90 180 4200
bmw compact 96 42 14254

La expresi6n regular del siguiente ejemplo, har6 que la utilidad awk seleccione las lineas del
fichero cars que contengan la cadena cor seguida de cualquier cdcter, except0 de la lma la t:

$ awk ‘/cor[^tl/ { print )’ cars


hoada accord 90 180 4200
ope1 corsa 90 105 2500
ford Scorpio 98 54 11345

La plantilla del siguiente ejemplo, selecciona las lfneas del fichero cars que se correspondan con
la &na 89 y/o 90, e imprime 10s campos 1.2 y 3 de cadalinea carrespoadida:

$ awk ‘/89190/ { print $1, $2, $3 )’ cars


ford scort 89
honda a d 90
ope1 corsa 90

Expresiones relacionales como plantillas


En las pkurtillas relacionales pueclen utilizarse dos t i p de expresiones relacionales. El primer
tip verifka la correspondencia entre una expresi6n ordinaria y una expresi6n regular, y si es
vadad, la linea es seleccionada. Este tip de plantilla tiene la siguiente forma:

expresibn operadorde-correspondenciaplantilla
Don& expresidn puede ser un campo o una variable (tomados mmo urn cadena), planticla es
una expresi6n regular, y oper4dor-de-correspondenciaes uno de 10s dos operadores siguientes:

-
x y Verdadero, si la expresi6n especificada en x se corresponde con la expresi6n regular (u
ordinaria) especificada eny.
x !-y Verdadero, si la expresi6n especificada en x no se corresponde con la expresibn regular
(u ordinaria) especificada eny.

El siguiente ejemplo selecciona y visualiza los registros del fichero cars cuyos primem campos
contengan la cadena e m :

chamade
-
$ awk ‘$1 /enad { print }’ cars
renault 93 80 3010
renault megane 98 12 7560

El siguiente ejemplo selecciona y visualiza las lfneas del fichero c m cuyos primeros campos no
contengan la letra 0:

$ awk ‘$1 !-lo/ { print }’ cars


renault chamade 93 80 3010
bmw compact 96 42 14254
renault megane 98 12 7560

-
6 PXOGRAMAClON EN owk 161
Programas de Utilidad UNIX

El segundo tip0 de expresiones relacionales que pueden utilizarse en las plantillus relacionales,
verifica la mmparaci6n de dos expresiones, y si la verificaci6n es verdad la Hnea es selecciona-
da. Este tip0 de plantilla tiene la siguiente forma:

expresidn operador-relaeional expresicsn

Donde expresidn puede ser una c a d e ~


aritm4ica, UM cadena de wacteres entre comillas, un
c m p o awk o UM variuble, y operador-rehwnul puede ser uno de los 6 opesadores siguientes:

x <y Verdadexo, si la expresi6n especificada enx es menor que la especificada eny.

x <=y Verdadero, si la expresi6n especificada enx es menor o igual que la especificada eny.

x >y Verdadero, si la expresi6n especificada en x es mayor que la especificada eny.


x >=y Verdadero, si la expresi6n especificada enx es mayor o igual que la especificada eny.

x =y Verdadero, si la expresi6n especificada enx es igual que la especXicada eny.

x !=y Verdadero, si la expresi6n especificada enx no es igual que la especificada eny.

Los operundos de un operudor relacionul son mmparados mmo mlmeros si ambos son niim-
ros. De otra farma son convertidos a cadenas y comparados como cadenas, por lo que de este
modo,la cadena “110” es menor que la cadena “9”, ya que la mmparaci6n de cadenas se realiza
cornparando el primer carhm, desputs el segundo, etc., hasta que haya una diferencia.

El siguiente ejemplo visualiza 10s registros del f i c k o cars que exactamente se corresponden
con la cadena numtkica 80 del campo cum:

$ awk ‘$4 =80 { print }’ cars


renault chamade 93 80 3010

El siguiente ejemplo selecciona los registros del fichero cars cuyo campo quinto sea menor o
igual a 4000, v i s u a l i d o 10s campos quinto y segundo de las lineascorrespondidas:

$ awk ‘$5 <= 4000 { print $5, $2 )’cars


2360 scort
2500 corsa
3010 chamade

El siguiente ejemplo selecciona y visualiza 10s registros del fichero cars cuyos primeros campos
comiencen desde la letra r hasta la z:

$ awk ‘$1>= ‘Y’ { print )’cars


renault chamade 93 80 3010
vdvo optima 97 15 22140
renadt megane 98 12 7560

El siguiente ejemplo selecciona 10s registros del fichero cars cuyo precio pase de 2oooO euros:

$ awk ‘$5 > 2oooO { print )’ cars


vdvo optima 97 15 22140

Las expresiones relacionales tambiCn se usan con sentencias if y while. Asi, el programa: awk
‘{ if ($5 > 20000) print }’ cars nos dari el mismo resultado que el del ejemplo anterior.

162 -
6 PROGRAMACION EN awk
Pmgrgmas de U t i l W UNIX

Expresiones booleanas como plantillas


Una plantilla booleana es una combinaci6n de otras plantillas u t i h d o 10s operadores boo-
leanos: && (and), II (or) y !(not). La mapondencia de la plantilla bo olea^ con un registro
de entrada W n d e de si sus subplantillas se corresponden.

El siguienteprogrumu awk selecciona 10s registros del fichero cars que contengan las cadenas
bmw, volvo, o ambas, en cualquiera de sus campos:

$ awk Vbmwl II holvor cars


bmw compact 96 42 14254
volva optima 97 15 22140

El siguiente ejemplo selecciona 10s registros del ficko cars cuym campos cuartm sean mayo-
res o iguales a IO0 y 10s campos quintos sean menores de 3000:

$ awk ‘$4 >= 100 && $5 < 3000’ cars


ford SUUt 89 100 2360
ope1 coma 90 105 2500

Expreswnes como plantillus


En el lenguaje awk cualquier expresibn tambien es v4Iida corn plantilla. Asi, la plantilla se CCF
rtesponde si el valor de la expresi6n es distinto de cero (si es un nhexo), o no es nulo (si es una
C ~ deMcaractem). La expresi6n vuelve a sex evaluada cada vez que la instrucci6n es verifi-
cada para un nuevo registro de entrada.
hi,las plantillas de expresiones pueden contener expresiones regulares thicas, expresiones
regulares con caracteres especiales, expresiones aritm&icas, expresiones de comparaci6n. etc.

Rango de registros con plantillas


Las planrillas de rango se utilizan para especificar rangos de registros, y est611 compuestas de
dos plantillas separadas por un car6ctex coma (,) de la forma:

phnti&l, ptil&*W

Dondeplantillal controla el comienzo de la pluntilla de rango y phntiuaz controla el fin. Es


decir, la mespondencia comienza en el registro de entrada que se corresponda con la cadena
especificada enplantillal, y finaliza en el registro de entrada que se corresponda con la cadena
especificada enplantifla2.

El siguiente ejemplo selecciona 10s registros del fichero cars comprendidos entre el registro que
contenga la plantilla optima y el registro que contenga la plantilla scurpio:

$ awk ‘/optima/, /Scorpio/’ cars


volvo optima 97 15 22140
ope1 frontera 96 58 16020
ford Scorpio 98 54 11345

-
6 PROGRAMACION EN ~ w k 163
Programas de Utilidad UNIX

Plantilk vuch
En el lenguaje awk una pLanrilLa se considera vacia o nuLa cuando se corresponden todos 10s
registros de entrada. El siguiente ejemplo, ejecuta la acci6n, la cual imprime el segundo campo
de todos 10s registros del fichero c m :

$ awk '{ print $2 c m


scort
accord
corsa
chamade
mondeo
...
En realidad, en este ejemplo la plantilla es omitida, pop lo tanto,la acci6n es ejecutada en todos
10s registros del fichero de entrada.

Plantilks especiules BEGIN y END


La utilidad awk utiliza estas dos plantillas especiales para suministrar informaci6n de comienzo
y de fin al programa awk La plantilla BEGIN es usada para especificar una acci6n que va a ser
tomada antes de que sean leidos 10s registros de entrada. La plantilla END se utiliza para especi-
ficar una aoci6n que va a ser tomada despues de haberse lefdo todas las lineas de entrada.

Las plantillas BEGIN y END no pueden combinarse con otras plantillas, y deben tener acciones
asociadas, puesto que no hay acciones de defecto, ya que no existen registros en curso cuando
son ejecutadas. Un programa awk puede tener varias plantillas BEGIN y END, cuyas acciones
asociadas son ejecutadas en el orden en el que est411 especificadas en el programa. La plantilla
BEGIN debe ser la primera plantilla y la plantilla END la Utima.

Cada plantilla BEGIN es coPrespondida una vez y sus acciones asociadas son ejecutadas antes
de que el primer registro de entrada sea leido y antes de que la asignaci6n del command-Line sea
realizada. Cada plantilla END es oarrespondida una vez y sus acciones asociadas son ejecutadas
despuh de haberse lefdo el Utimo registro de entrada.

El siguientescript, ncampos, contiene unprograrna awk que calcula el niimero de campos que
tiene el fichero c m . El programa utiliza la plantilla BEGIN para decir a la acci6n que imprima
el titulo del informe antes de leer el fichero c m . La variable n u m q va acumulando 10s
campos de cada registro. La plantilla END da la orden a la sentencia print para que imprima el
text0 y el valor de la variable nuncamp:

$ cat ncampos
awk 'BEGIN { print "N6me1-0de campas del fichero cars"
{ numcamp = numcamp + NF }
END { print ****44 nu-mp 66 ***my cars

La siguiente es m a farma de ejecutar un programa awk. Primer0 d


am permiso de ejecuci6n
alfichero-script ncampos y &pub lo ejecutamos de la forma indicada:

$ ncampos
N6me1-0de campos del fichero cars
**** 60 #**

164 -
6 PROGRAMACXON EN awk
Acciones
lntroduccidn
Un program awk est6 compuesto de una o varias instrucciones plantilla-accidn, y optional-
mente de una o v a r h definici6n de funciones. El prop6sito de la accidn es indicar a la utitidad
awk la ape .a56n que tiene que reaIizar, una vez que es encontrada la correspondencia con la
plantilla.

En una inshucci6n. la acci6n consta de una o mils senrencias awk encerradas entre caractmes
Ilaves: {. ..},que siguen la sintaxis del lenguaje C. Si la acci6n lleva maS de una sentencia, btas
deben SK separadas por caracteres nueva linea &I) o por caractem punto y coma (;), siendo
ejecutadas secuencialmente en el orden en el que aparecen.
La acci6n (incluida l a car- Ilaves) puede SK omitida. Una acci6n omitida es equivalente
a la Sentencia print (explfcitamente representada como { print } y { print $0 I), es decir, el
programa awk imprime todas las tIneas que se corresponden con la plantilla.

Las siguientes son las clases de sentencias sapoaadas par el lenguuje awk:

Sentencias de mfr& getline y next, controlan la entrada de UM forma explfcita.


Sentencias de salida: print y printf, controlan y furmatean las salidas.
Exvresiones: Pueden llamar a funciones, evaluar valores a variables (como las expresiones
aritm&icas), comparar cadenas y ntlmeros (como las expresiones de comparaci6n), etc.
Variables. De dos t i p:variables defddas par el usuario y variables integradas.
Sentencias de control de f2uio: if, for, while, ek,controlan la ejecuci6n de 10s programas.
Funciones. De dos t i p : integradas (numtkicas y de cadenas) y bciones de usuario.
Matrices asociativas.

Sentencia next
La sentencia next obliga a la utilidad awk a que pare inmediatamente el proceso del registro en
curso y contide el proceso en el registro siguiente, significando que no son ejecutadas las ins-
trucciones para el registro en curso.

Este hecho contrasta con el efecto de la sentencia getline (vex "Senrencbgetline", pfigina 166).
La sentencia next tambien hace que la utilidad awk lea inmediatamente el registro siguiente,
per0 de cualquier modo no altera el flujo de control; por eso, el rest0 de la acci6n en curso se
ejecuta con un nuevo registro de entrada.

Par ejemplo, si nuestro programa s610 trabaja con registros de cuatro campos y no queremos
que falle cuando se dan entradas i n c m a s , podrfamos utilizar las siguiente instrucciones ceca
del comienzo del programa:
NF!=4{
print€(uUnea%dsaltada: no tiene 4 campos", FNR)> "/dev/stderr"
next
1
de modo que las instrucciones que van a continuaci6n no eaten el registro incmecto. El men-
saje de mor es redirigido a1 flujo de salida del standard-error. La sentencia next no est4 permi-
tida en las inshucciones BEGIN y END.
-
6 PROGRAMACION EN awk 165
Promamas de Utilidad UNIX

Sentencia getline
El lenguaje awk dispone de un comando integrado especial y complejo llamado getline, que
puede ser utilizado para leer entradas bajo nuestro control explicit0 con los siguientes formatos:

getline El comando getline sin argumentos se utiliza para leer entradas del fichero de
entrada en curso. Este formato establece las variables NF, NR, FNR y $0.

getline var Establece la variable especificada en var al siguiente registro del fichero de
entrada en curso. Este formato establece las variables NR y FNR

getline <fik Este formato de la sentencia getline toma la entrada del fichero especificado
enfile. Est0 es fitil cuando queremos leer la entrada de un fichero determinado
en vez de en un flujo de entrada principal. Establece la variable NF.

getline var En este formato, la sentencia getline toma la entrada del fichero especificado
enfle y la pone en la variable especificada en var. En este formato no son
cambiadas ninguna de las variables integradas.

cmd I getline La salida de un comando del shelf (cmd) puede ser enviada (piped) como en-
trada a un comando getline. Este formato establece las variables $0 y NF.

cmd I getline var La salida del comando especifcado en cmd es enviada al comando getline y a
la variable especifkada en var a travb de un pipe. Por ejemplo, el siguiente
programa lee y @ut% imprime la fecha en curso de la variablefeeha:

awk ‘BEGIN{ “date” I getline fecha


close(“date”)
print “Impreso el: “ fecha )’

Cuando se abre un fichero o un pipe, ya sea de entrada o de salida, es conveniente m a r el fi-


chero o comando asociado, tan pronto como se pueda. Para ello se utiliza la W 6 n close:

Sentencia print
Una de las tareas mAs comunes que realizan las acciones de un progruma awk es controlar la
salida generada por el programa. La utilidad awk dispone de la sentencia print para formatear
salidas sencillas, y de la sentencia printf para formatear salidas mAs complejas.

La sentencia print emitida sin argumentos, imprime el registro completo en curso. Una senten-
cia print puede ir seguida de argumentos separados por comas, haciendo que la utilidad awk
imprima exactamente10s argumentos especificados, separados por espacios dnicos y finalizados
por un c d c m nueva linea. La sentencia print tiene el siguiente formato:
print ekmenfol, ekmenf02, ...
Los eknzentos que van a ser impresos pueden ser n~meros,constantes de cadena, campos del
registro en curso (como $l),variables, o cualquier expresibn awk Opcionalmente, la lista com-
pleta de elementos puede ir encenada entre caractera partktesis.

166 -
6 PROGRAMACION EN awk
El siguiente ejemplo incluye cabeceras para 10s campas $1, $2 y $5 del fichero cars. Para com- I
i
poner las cabeceras que s610 van a ser impresas una vez, usaremos la plantilla BEGIN.La salida
indicada es la genaada por esteprograma awk

$ awk ‘BEGIN{ print “Mama Modelo Precio”


print 6,- -- ----- “1
{ print $1, $2 $5 }’ cars
M o m Modelo W o
--e-- -1-1- -
ford scort2360
honda aceord4200
ope! corsa2500
renadt chamade3010
...
Por supuesto, esta Salida no es la que destxibamos, las cabeceras y 10s datos no e s t h alineados.
La sentencia print no es la ideal para alinear columnas, ya que esta sentencia estii limitada para
controlar salidas. Para tener un control m5s completo de las salidas prociucidas por unprograma
awk se utiliza la sentencia printf. Observemos que las campos 2 y 3 de la salida han s i b con-
catenados, est0 es debido a que entre 10s elementos $2 y $5 se ha omitido el carkter coma (,).

Para h p i m i r un trmo fijo de texto se usa una constante de cadena, por ejemplo: “hofu,sa&-
duP, cuyo texto debe ir e m a d o entre caracteres comillas: ...” para que el texto no sea @

mado como una expraih awk Para imprimir una linea blanca se utiliza la sentencia print ‘*’.

Comdnmente, cada sentencia print genera una linea de salida. Per0 la salida no est4 limitada a
una lfnea. Si el valor de un elemento es una cadena que contiene un cartlctex nueva lfnea (h),
ento- es gemada ma linea junto con el rest0 de la cadena. De esta forma, una sentencia
print individual puede generar cualquier ndmero de Ifneas.

Cada sentencia print genera un registro de salida y al mismo tiempo una cadena llamada sepa-
rador de regism de salidcz, que pw defect0 es un d c t e r weva linea (b),contenid0 en la va-
riable integrada ORs. por defecto, 10s campos de un registro de salida generado por una senten-
cia print son separados por espacios dnicos, llamados separadores de campo de sdidu, cuyo
valor est4 contenido en la variabIe integrada OF’S.

El separador de campo de salida y el separador de registro de salida pueden ser cambiados


asignando nuevos valores a las variables OFS y ORs, respectivamente. El lugar usual para ha-
cer a t e cambio es en la sentencia BEGIN,de modo que el cambio se prodwxa antes de que sea
procesada cualquiex entrada. Este cambio tambien puede realizarse con asignaciones en el
command-line awk, antes de los nombres de 10s ficheros de entrada.

El siguiente ejemplo, imprime los campos primer0 ($1) y tercer0 ($3) de cada registro de entra-
da separados por un cdcter igual (=), agregando una lfnea blanca despueS de cada registro de
salida. Si el valor de la variable integrada ORs no contiene un carficter nueva linea on), toda la
salida sera ejecutadajclnta en UM lfnea bnica:

$ awk ‘BEGIN{ OFS = ‘‘=” ;ORs = ‘In\n” }


{ print $1, $3 }’ cars
ford=89
honda=90
Programas de U t i l W UNIX

Sentencia printf
Si queremos un control adicional del formato de salida m h precis0 que el que nos proporciona
la sentencia print, tendremos que utilizar la sentencia printf. Con la sentencia printf podemos
especificar la longitud que va a emplear cada elemento impreso, 10s dfgitos que van a ser impre-
sos despuh del punto decimal, etc. La sentencia printf tiene el siguiente formato:
printf ccadenu-&?-controf’<
efemntol, efement02, ...
Los efementos que van a ser impresos pueden ser nfimeros, constants de cadena, campos del
registro en curso, variables, o cualquier expresidn awk Opcionalmente, la lista completa de
elementos pue& ir encerrada entre par&esis, 10s cuales son necesarios si cualquiera de las ex-
-
presiones del elemento utiliza un operador relational (<, <=, >, >=, ==,!=, y !-) para que la
utilidad awlc no 10s intqrete como una redirecci6n.

La cadenu-de-confrofdeter mi^ el formato que tomarzln 10s efemntos en la salida y contiene la


especificaci6n del farmato: rnodificcadores y Letras de conversibn, una especificaci6n pur cada
efemnto. Una especificacibn delformato tiene la siguiente forma:
46 [modifiadores]conv

Los mdifiadores son opcionales y se utilizan para controlar el valor de 10s elementos que van
a ser impresos y el espacioque van a ocupar. Los siguientes son 10s modificadores posibles:
- El sign0 gui6n (-) precediendo al modificador de longitud, hace que la sentencia
printf ajuste el elemento por la izquierda dentro de la longitud especificada

x Es un mlmero que represents la longitud dnima deseada de un campo. Las posiciones


no utilizadas son rellenadas con espacios a la izquierda.

.y Es un Ilcmero especificado despuh del Caracter punto (.) que indica el lllrmero de di-
gitos que queremos imprimir a la derecha del punto decimal.

% Es un carkter obligatorio, per0 no es un modificador ni UM letra de conversi6n. Para


representar realmente el carkter 96,especificar dos caraderes tanto por ciento: 8%.

El padmetro cony es una letra de conversi6n que dice a la sentencia printf la clase de valor que
se va a imprimir. La siguiente es UM lista de letras de conversi6n:
c Imprime un nfimero como un car6cter ASCII.

d Imprime la parte entera de un nfimero decimal.

e Imprime un nfimero de notaci6n exponencial.

f Imprime un nfimero en coma flotante. El defect0 son 6 dlgitos &put% del punto de-
cimal.

g Imprime la notaci6n m5s corta de las notaciones exponencial y coma flotante.

o Imprime un n6mero entero octal sin signo.

s Imprime UM cadena de caractem.

168 -
6 PROGRAMACIOffEN awk
Ptogrpimas de Vtilidad VNIX .

En la cadena-de-control pueden especificarse secuencias de escape (vex "Expresiones constan-


tes", pagina 172), las dos mds utilizadas son el cadcter tabulador (t\) y el car6cter nueva lfnea
(In), sobre todo este filtimo, ya que la sentencia printf no agrega autodticamente la linea a la
salida; par lo que para imprimir UM lfnea debemos especifhr un carkter nueva lfnea on) en el
formato por cadasentencia printfemitida.

Si rehacemos el ejemplo de la sentencia print de la pAgina 167, utilizando la sentencia printf,


0btend;rernos una salida maS amde con lo que qudamos:

$ catpnrprmuk
BEGIN { printf "% -10s %-1Os%s\a", "Marca", "Modelo", Upredon
p&pye-lOs %&p,V--U "--U," -I-"1
-

{ p&tf"%-lOs %-1Os%dum, $1, $2, $5 )

$ awk -f prupr.awk curs


Marca Modelo Pdo
----- --I-- --
cord SC0l-t 2360
honda accord 4200
ope1 corsa 2500
reuadt chamade 3010
...
Vexnos que en el ejemplo anterior, la especificaci6n del mismo fonnato ha sido utilizada tres
veces, esta especif1caci6n la podemos guardar en una variable, mmo en el siguiente ejemplo:

$ catpnrpr.awk
BEGIN { f ~ t = " % - l O S%-l@
%h",
printffoma,uMarep",uModelo",Uprrcio"
phtffarmat, %-=, "-a*, " -
.
- 1"
{ printtf-4 $1, $29 $5 1

El siguiente programa, demopr.awk, mejora y amplia el ejemplo anterior. El programa combi-


na las sentencias print y printf para imprimir las cabeceras y la salida, agregando un nuevo
campo ($6),en el cud ser6 colocado el valor de la variable $6. El program modifica varios
campos del fichero cars; utiliza la sentencia if para cambia dos valores del segundo campo; y la
cadenu-de-controlde la sentencia printf para imprimir el afio del tercer campo con 4 digitos, y
el campo quint0 con dots decimales. Los campos num&icm son ajustados a la derecha:
$ cat dertwprmvk
BEGIN { $ 6 = 0
print " Kms Predo Precid'
print "Marca Modelo ABo (OOO) (Euros) (Pts)"
print "--- ---- --II-I-- ------
"1
{ if ($2 -/mended) $2= "mondeo-16V-2.0"
-*
if ($2 /chamadd) $2 = "charnade-Rl9-TD"
$6 = $5 167
printfn%-8s%-14s19%M%Sd%lOd",$l, $2, $3, $4, $5, $6)

$ awk -f demopr.awk cars


pmao M O
Mama Modelo ABo (Euros) W)
--- ---I u -1-1 ---I

ford SC0l-t 1989 2360.00 395120


honda accord 1990 4200.00 701400
ope1 Eofsa 1990 2500.00 417500
renault chamade-Rl9-TD 1993 jo10.00 502670
ford 1~1011de0-16V-2.0 1995 8330.00 1391110
...
-
6 PROGRAMACION ENawk 169
Programas de Utilidud UNIX

Redirigir salidas print y printf


Por defecto, las salidas generadas por las sentencias print y printf son enviadas al standard-
output, per0 la utilidad awk permite redirigirlas a un fichero. Las redirecciones son expresadas
del mismo modo que en el shell, salvo que en awk son especificadas denrro del programu awk

Las salidas de un program awk pueden ser redirigidas a un fichero de tres formas: con el ca-
rkter >, con 10s caracteres >> y con el cartlcter I pasando antes por un comando del shell. El
nombre de fichero debe ir encmado entre caractem comillas.
El siguiente programa, redirawk, crea dos ficheros nuevos, el fichero cmford que contendrtl
las Uneas que se correspondan con la cadenaford y el fichero cmopel que contendrtl las lineas
que se currespondan con la c a d e opek
~

$ cat re&.awk
/ford/ { print > "carsford" }
/opeV { print > "carsopel" }
END { print Ticheros creados" }

$ awk -f redir.awk c m
ficheros crcados
$ cat carsopel
ope1 EMsa 90 I05 2500
ope1 frontera 96 58 16020
ope1 veetrn 98 11 15600

El siguiente ejemplo utiliza tres redireaiones para aear el fichero RU~VOCIUS,que contendril las
cabeceras de las dos primeras redireaiones seguidas del contenido del fichero cars formateado:

$ awk -f redir2.awk cars


$ cat nuevocars
Precio
----- Modelo
Mama Ario Knts
----- -- ----
ford scort 89 100 2360
honda accord 90 180 4200
ope1 corsa 90 105 2500
renadt chamade 93 80 3010
ford nmmdeo 95 30 8330
bmw compact 96 42 14254
...
El siguiente command-line utiliza un pipe (I) para crear el fichero carsort, cuyo contenido sera
el del fichero cars per0 clasificado por el campo quint0 y en orden inverso:

$ awk '{ print $0 I "sort -k5nr > carsort" }' cars


$ cat carsort
volvo optima 97 15 22140
ope1 frontera 96 58 16020
ope1 vectra 98 11 15600
bmw compact 96 42 14254
ford Scorpio 98 54 11345
ford mondeo 95 30 8330
...

170 -
6 PROGRAMACION ENawk
Expresiones
Las expresiones son el m6dulo fundamental de las acciones awk La expresibn evaltla un valor
que podemos imprimirlo, verificarlo, almacenarlo en una variable o pasarlo a una funci6n Per0
adem&, una expresi6n puede asignar un nuevo valor a una variable 0 a un campo con un opera-
dor de asignaci6n.

Una expresi6n puede servir de sentencia por si misma. Muchas mas clases de sentencias con-
tienen UM o maS expresiones que especifican datos que van a ser tratados en ella. Generalmen-
te,el valor de una expresi6n es un n6mero o una cadena, y son construidas con operadores awk.
El lenguuje awk utiliza distim clases de expresiones: aritm&icas, de coqaraci6n. booleanas,
de asigaaci6n, mndicionales, etc. Aunque, como en otros lenguajes de programaci6n, en awk
las expresiones incluyen variables, referencias a matrim, constantes, llamadas a funciones, asi
como combinaciones de ellas con varios operadores.

Operadores
Los operadores awk controlan las sentencias de las acciones y son utilizadm en distintas clases
de expresiones. La @oridad del operadcr d e t d n a c6mo se agmpan 10s aperadores en UM
expresi6n. Pop ejemplo, la expresibn: a + b * c, indica primer0 multiplicar b pur c, y &put%
sumar a al producto, ya que el operador * time una prioridad mAs alta que el opexadur +. La
1 prioridad de 10s operadores puede anularse especificando caracteres par&esis entre ellos.

La sijpiente es una relaci6n de operadores awk en orden de prioridad creciente:

?: Condicionales.

II && Or 16gic0, and 16gico.


- I- Correspondencia.

< > <= >= != = Relacionales.

blanco Concatenaci6n de cadenas, no se usan operadores.


+- SLUM, resta.

* / % Multiplicaci6n, divisibn, m6dulo.

+ - I M h unario, menos unario, negaci6n 16gica.

A ** Ambos operadores indican elevaci6n a potencia.

++ 0- Incremento, decremento.

$ Referencia a campo.

-
6 PROGRAMACION EN awk 171
Programas de U t i l W UNIX

Expresiones constantes
El tip0 mils simple de expresi6n es la constante, la mal siempre tiene el mismo valor. Hay tres
t i p de constantes:

Constantes numfkicas.
constantes de cadenas.
Constantes de expresiones regulares.

UM constanre numkricu estii representada por un ntimero, que puede ser un nitmero entero, UM
fracci6n decimal o un nfimero de notaci6n cientffica exponencial. Por ejemplo 105,1.05~+2,etc.

Una cunstunte de cadena consta de una secuencia de caracmes enmados entre comillas. Por
ejemplo, la constante “zapato” rqresenta la cadena cuyo contenido es zap&. En awk, las ca-
denas pueden ser de cualquier tamaiio y pueden contener todos 10s caracteres ASCII.

Algunos caracmes no pueden ser incluidos literalmente en una constante de cadena. En su lugar
lo representamos como secuencius de escape, las cuales son secuencias de caracteres mmen-
zando con un carikter barra inversa inclinada (I).

La siguiente es una tabla de las secuenciusde escape similares a las del lenguaje C:

\\ Representa literalmenteun caracter bama klinada inversa (I).

\a Representa el caracter al- de incidencias.

\b Representa el caracter retroceso.

\f Representa el car- salt0 de pilgina.

\n Rqresenta el carilcter nueva linea.

\r Representa el carilcter retorno de carro.

\t Rqresenta el carilcter tabulador horizontal.

\v Representa el carilcter tabulador vertical.

Lrnn Rqresenta el valor octal especificado en nnn, donde nnn es un valor de 1 a 3 df-
gitos del 0 a17. Por ejemplo, el c6digo del carilcter ESC (Escape) en ASCII es \033.

Mh... Rqresenta el carilcter de una cadena de digitos hexadecimales (de 0 a 9 y de A a


F), especificadosen hh, a continuaci6nde la expresi6n \x Todos 10s digitos especi-
ficados son considerados parte de la secuencia de escape. Por ejemplo, la cadena
\lB mntiene el carilcter ESC (escape) en ASCII.

Una constante de axpresih regular es UM descripci6n de una expresi6n regular encerrada entre
dos caractem bama inclinada, par ejemplo: Pcodenzd. M u c h expresiones regulares utiliza-
das enprogramus awk son constantes.

-
Las constantes de expresionesregulares son titiles con 10s opesadores y !- y no podemos asig-
narlas a variables ni imprimirlas. Realmente no son expresiones en el sentido usual.

172 6-PROGRAMACION ENawk


Programus de U t i l W UNIX *-

Variables
En el lenguaje awk, las variables son dinilrnicas, no es necesario declararlas antes de utilizarlas,
obteniendo su existencia cuando son usadas pur primera vez; perrnitit5ndonos darlas un nombre,
asignarlas valores, y refairnos a ellas posteriormente. En u n p r o g r m awk el usuario puede
definir sus propias variables. La asignaci6nde una variable tiene la forma:

variable = valor

El nombre de una variable debe sex una secuencia de letras, ~ g i t u 6y guiormes de subrayado, pe-
ro no debe comenzar con dgitm. Los valores dados a las variables awk pueden ser num&icos o
cadenas de caractem. Por defecto, las variables son nUlaS &ta que se las haga una asignaci6a
A las variables se las asignan valores con el operadar de asignaci6n absoluta, el signo igual (=)
y con 10s operudores de asignaci6n aritm4ticos. Las variables de usuario tambien pueden ser
asignadas en el command-line awk El usuario tambib puede disponer de las variables integra-
das que facilita la utilidad awk (ver “Variables integrudizs”,p&gina174).

Expresiones de asignacio’n
Una asignacidn es una expresi6n que almacena un nuevo valor en UM variable. Por ejemplo, en
la expresi6n z = 1, la variable z tendril valor 1despub que la expresi6n sea ejecutada. Cualquier
valor anterior que tuviese la variable z antes de la asignaci6n, serd olvidado. Las expresiones de
asignaci6n tambien pueden almacenar valores de cadenas. P a ejemplo, en la expresi6n alimen-
to = “comida”, la variablealiment0 tendril corn valor comirla.

El signo igual (=) es llamado operudor de asignaci6n, y es el maS simple de 10s operadares de
asignaci611, ya que el valor del aperando derecho es almacenado inalterable. Un operador de
asignaci6n hace que se produzca un valor, per0 hcluso si ignoramos el valor, la asignaci6n
permanece par si misma hasta que la variable sea alter&. Adem& del signo igual (=), hay
otros operadaes de asignacidn que realizan Operaciones aritm&cas con el valor antiguo de la
variable, dilndola un nuevo vala. LOS siguientes son 10s operudores de asignaci6n aritmbticos:

val += expresidn Suma el valor de expresidn a1 valor de val y crea el nuevo valor de val. Por
ejemplo, la asignaci6n var += 5, s u m 5 al valor de la variable vur.

val -= expresibn Resta el valor de expresibn al valor de val y el resultado lo asigna a Val.

val *= expresibn Multiplica el valor de val por el valor de expresidn y lo asigna a Val.

v d /= expresidn Divide el v a l a de Val entre el valor de expresiibn y lo asigna a val.


val %= expresiibn Toma el resto, despub de dividir val entre expresibn y lo asigna a Val.

v a l k expresicln Eleva el valor de vu1 a la potencia especificada en expresidn y el valor lo


asigna a val. El opaador **= tambien especifica potencia.

El operando izquiardo de una asignaci6n (vat), a d e m de una variable, puede sa el contenido


de un campo o el elemento de una ma&. El operando derecho puede ser cualquier expresi611,
produciendo el nuevo valor, el cual es convertido a un nclmero, y almacenado por la asignaci6n
en la variable, campo o elemento de la matriz, especificados.

-
6 PROGRAMACION ENawk I73
Programas de U t i W d UNIX

Variables integradas
A d e m de las variables definidas por el usuario, la utilidad awk dispone de variables integra-
das. Algunas de estas variables tienen un significado especial, otras son establecidas automilti-
camente por la utilidad awk para enviar informaci6n a nuestro programa. Las variables integra-
das pueden ser usadas y asignadas igual que las variables de usuario. La siguiente es una lista de
las variables integradas del lenguaje awk:

ARGC Es el nlimero de argumentos del command-line (no incluyendo las @ones del
p r o g r m awk ni el propio programa).

ARGV Es la matriz de los argumentos del command-line. La matriz es indexada de 0 a


-
ARGV 1. Cambiando dinibicamente el contenid0 de la matriz ARGV se p w
den controlar los ficheros utilizados para dam.
ENWRON Es una matriz conteniendo 10s valores de las variables de entorno. La matriz es
indexada por el nombre de la variable, cadaelemento es el valor de esa variable.

FILENAME Es el nombre del fichero de entrada en curso.

FNR Contiene el nlimero de registros de entrada del fichero de entrada en curso. La


variable FNR es incrementada cada vez que es lefdo un nuevo registro.
FS Es el separadur del campo de entrada, por defecto, un espacio. Su valor tambien
puede ser establecido en el command-line awk usando la apci6n -F.
NF Contiene el ntimero de campos del registro de entrada en curso.
NR Esta variable tiene el n~merototal de registros de entrada lefdos desde el co-
mienzo de la ejecuci6n hasta ese momento.
OFMT Es utilizada para controlar el formato de salida en la conversi6n de ntimeros a
cadenas, por defecto, su valor es: “%.6g”, indicando 6 dlgitos significativos.
OFS Es el separador del campo de salida, el cud es generado entre 10s campos de
salida por una sentencia print, por defecto, el valor es un espacio.
ORs Es el separador del registro de salida, por defecto es un carktex nueva linea @I).
RLENGTH Contiene el tamaAo de la cadena correspondida por la funci6n match
RS Es el sqarador del registro de entrada, por defecto, una cadena con un car&ter
nueva linea. Si la variable RS es establecida a la cadena nula, entonces los re-
gistros son separados por lfneas blancas.

RSTART Contiene el fndice del primer carscter correspondid0 por la funci6n match.

SUBSEP Es la a d e utilizada
~ para separar indices mliltiples de 10s elementos de una
matriz, por defecto es \034.

$0 Los campos de un registro pueden ser referenciados con la notaci6n $n,siendo


n el nlimero de campo. A la notaci6n $0 se la puede considerar una variable in-
tegrada que rqresenta el registro de entrada en curso.

I 74 -
6 PROGRMUCION ENawk
Expresiones aritmbticas
Las acciones pueden usar expresiones aritm&as convencionales para computar vdores arit-
m6ticos. Los siguientes, son 10s operadores aritm&cos usados en expresiones aritmkticas:

Adici6n. S u m el valor dex ay.

Sustracci6n Rata a x el valor dey.

Multiplicaci6n Multiplica x por y.

Divisi6n. Divide x entre y. Aunque en awk todos los n6meros esth representados en
coma flotante de doble precisi6~el resultado de la divisi6n no es redondeado a un
nfimero entero, asf 3 / 4 da mmo resultado 0.75.

Resto. Toma el rest0 dapu& de dividir x entrey.

Elevaci6n a potencia. El operandox es elevado a la potencia dey. La secuencia de ca-


racteres *+tambien indica elevaci6n a potencia.

Los dos operadores siguientes, incrementan o decrementan en 1 el valor de una expresi6n:

vafu Incrementa en 1 el valor especificado en vaf.

vd-- Decrementa en 1 el valor especificado en vuf.

La expresi6n val pede ser ma variable, un campo awk o un elemento de una matriz.
El siguiente program utiliza el w a d o r u para calcular el n6mero de lfneas del fichero crus.
(La sentencia nZfrzeasi+ es equivalente a la sentencia nlineas = nLtneas + I). La variable ink-
grada NR mntiene el &mer0 de registros de entrada en cu~so,por lo que podrfamos h a k usa-
do esta variable en lugar de la variable nlfneas,obteniendo el mismo resultado:

$ awk '{ nlineasii- }


END { print "hero de lineas: ''nlheas )' cars
Niimero de lineas: U

El siguiente program, informe, combina variables integradas y de usuario, junto con operado-
res aritm&cos para OMener la sum y el promedio de km.del fichero cars. La primera acci4n
utiliza el campo $4 mmo variable para convertir 10s campos cuartos a km. reales. La variable de
la segunda acci6n (sumk), ten&&la suma de km. de todos los coches. Despu& que la utilidad
awk lee todos los dam de entrada, calcula el promedio, y la plantilla END hace que las senten-
cias print irnpriman 10s resultados. Ekte programa utiliza la variable integrada NR para calcular
el dmero de lfneas, en vez de una variable de usuario:

$ cat infome
awk '{ $4 = $4 * lo00 ;sumk=sumk+ $4 }
END { print ''Caches: " NR
print "Total b "sumk }
print "Promedio: SUM )' cars

$ informe
Coches: 12
Total h: 697000
Promedio: 58083,3

-
6 PROGRAMACION ENawk I75
Programas de Utilidad UNIX

Expresiones de comparacio'n
Las expresiones de comparacih o relacionales comparan cadenas de caracteres y nfimeros para
relaciones, como la igualdad Las expresiones de comparaci6n se expresan con los siguientes
operadores relacionales:

x cy V~dadero,si la expresi6n especificada enx es menor que la especificada eny.

x c=y Verdadero,si la expresi6n especificada enx es menor o igual que la especificada eny.

x >y V ~ d a d e rsi
~ ,la expresi6n especificada en x es mayor que la especificada eny.

x >=y Verdadero,si la expresi6n especificada enx es mayor o igual que la especificada eny.

x =y Verdadero,si la expresi6n especifkada enx es idkntica a la especificada eny.


x !=y Verdadero,si la expresi6n especificada enx no es igual que la especificada eny.

x -y Verdadero, si la expresi6n especificada en x se corresponde con la expresi6n regular


especificada eny.
x !-y Verdadero,si la expresi6n especificada en x no se corresponde con la expresi6n regular
especificada eny.

Los operandos de un operador relational (x ey) son comparados como nfimeros si ambos son
nr5naeros. De otro modo, son convertidos a cadenas y comparados como cadenas. Las cadenas
son comparadas por el primer deter de cada una de ellas, &put% por el segundo cartickr de
cada cadena,y asi sucesivamente, por lo que la &M ccIOy'es mencx que la cadena "Py'.

En las expresiones de comparaci6n pueden sa usadas sentencias if y while. El aperando dere-


-
cho de 10s operadores y !- puede ser una expresi6n regular 0 una e x p i 6 n ordinaria.
El siguiente ejemplo imprime todos 10s registros del fichero cars que en el campo cuarto con-
tengan la C&M 10:

ford
$ awk '{ if ($4
scort
- /lo/) } print' cars
89 100 2360
ope1 COW 90 105 2500
ford fiesta 99 10 5915

La diferencia del siguiente ejemplo con el anterior, es que el siguiente ejemplo s610 imprime 10s
registros del fichero cars que exactamente se correspondan con la cadena IO del campo cuarto:

$ awk '{ if ($4 = 10) } print' cars


ford fiesta 99 10 5915

El siguiente programa muestra UM tknica para localizar el nfimero mayor de un campo:

$ cat mcaro.awk
BEGIN { precio= 0 }
$5 > precio { precio = $5 }
END { "Precio &alto: precio "€" }

$ awk -f mcaro.awk cars


Precio I&a!- 22140 €

I76 -
6 PROGRAbfACION EN a&
Progrilmas de Utilidad UNIX

Expresiones booleanas
UM expresibn boolema es una combinaci6n de expresiones de comparaci6n y expresiones que
tienen correspondencia, utilizando 10s operadores booleanos: I1 (or), && (and)y ! (not) junto
con caracteres par&tesis para controlar los agrupamientos. La verosimilitud de la expresi6n
booleana es computada combinando 10s valores vetdaderos de las expresiones componentes.

Las expresiones booleanas pL:xien ser usadas donde quiera que las expresiones de comparaci6n
y las de correspondencia puahn ser usadas; tambien pueden sa usadas con las sentencias if y
while. Cada expresi6n booleara tambidn es UM plantillu booleana vfida, por eso podemos uti-
lizarla como una plantilla para controlar la ejecuci6n de instrucciones.

Las siguientes, son las tres expresiones booleanas:

exprl && expr2 Vadadero si ambas expresiones: exprl y expr2 son verdad. Por ejemplo, la
siguiente sentencia imprime el registro de entrada en curso si contiene las

ope1 -
dos plantillas: 98 y opek

98
- 11
-
$ awk '{ if ($0 /98/ && $0 / o m print }' c m
15600

La expresi6n expr2 s610 es evaluada si la expresi6nexprl es verdad.

exprl I1 q r 2 Verdadero si al menos una de las expresiones: expr2 o expr2 es vmdad. Por
ejemplo, el siguiente command-line imprime todas 10s registrm del fichero
curs que contengan UM de las das plantillas, o ambas:

ford scort
-
89 100
-
$ awk '{ if ($0 /89/ I1$0 holvd) print }' c m
2360
volva optima !)7 15 22140

La expresi6nexpr2 s610 es evaluada si la expresi6nexprl es falsa.

!exprl Verdadero si la expresidn exprl es falsa. Par ejemplo, el siguiente programa


imprime todos 10s regism del fichero de entrada c m que no contengan la
cadenaford:
-
$ awk '{ if !($0 Korar) print }' cam

Expresiones condicionales
Una expresidn condicional es una clase especial de expresi6n con tres operandos, permitit5ndo-
nos utilizar un valor en la expresi6n para seleccionar una de las Was dos expresiones. La expre-
si6n condicional se BSemeja a la del lenguaje C:

selector 1 si-expr-verdad ;si-expr firso


en la cud hay tres subexpresiones. La primera: selector, siempre es computada en primer lugar.
Si es vetdad (distinto de cero), es computada la segunda, si-expr-verhf, y su valor sera el va-
lor de la expresi6n comple€a. De otro modo, set& computada la tercera, si-expr firso, y su valor
sera el valor de la expresi6n completa.

-
ti PROGRAMACION EN auk I77
Programas de Uti1idu.dUNIX

Cadenas y ntimeros
En awk,las variables, los campos y las expresiones pueden tener valores numQicos y de cade-
nas de caractem, tomando estos valores se@n el contexto. Por ejemplo, en el contexto de una
expresi6n aritm&ca como la siguiente:

V a l += $3

vaf y $3 deben sa: tratados numkicamente, de modo que sus valores puedan sa convertidos a
tip0 numQico si es necesario. Las cadenas de caracteres son convertidas a ntlmeras, y los ncime-
ras a cadenas si el contexto del program lo solicita. Consideremos el siguiente ejemplo:

$ awk'BEGIN{ dos = 2 ;tres = 3 ;print (dos tres) + 4 }'


27

Como vemos, el resultado es un valor numtkico: 27. Los valores numtkicos de las variables dos
y tres son convertidos a cadenas y concatenados, y la cadena resultante es convdda otra vez al
ncimero 23 al cud se le sum 4.
En una cadena como la siguiente:

print $1 '':"$2

$2 y $2 &ben ser cadenas para que sean mncatenadas si fuse necesario. La concatenacidn de
cudenus no tiene un aperador especifico para representarla,las expresiones se especifican unas a
continuaci6n de otras, sin operadores. El siguiente ejemplo imprimira carrectamente la salida
cmespondiente:

$ awk *{ print "El segundo campo es: ''$2 }' cars


Per0 si en la constante de cudena omitimos el espacio que va despue del wilder dos puntos, la
linea sera uNda en ese punto:

$ awk '{ print "Elsegundo campo es:" $2 }' cars


El segundo campo cs:scort
El segundo campo c s : a d
El segundo campo cs:corsa
...
Ya que la concatenaci6n de cadenas no tiene operador explfcito, muchas veces es necesario ase-
gurar que la concatenaci6n se produce donde nosotros queremos que se produzca, para ello de-
bemos encedfar los elementos que van a ser concatenados entre caracteres par6ntesis.

En un contexto ambiguo como el siguiente:

$1 =$2

el tip0 de comparaci6n depende de si los campos son numtkicos o son cadenas, y est0 s610 pue-
de sa determinado cuando el program se ejecuta. En comparaciones, si ambos operandm son
numQicos, la comparaci6n es numQica; de otro modo, los operandos son convertidos a cadenas
y la comparaci6n es hecha comparando las cadenas.

Si tenemos que obligar a que un ncimero sea convertido a cadena, concatenar la cadena nula a
ese ncimero. Para obligar a UM cadena a convertirse a un ncimero, sumar cero a esa cadena.

178 6 - PROGRAMACION ENawk


Programas de UtilidQd UNIX:

Sentencias de control de flujo


Las sentencias de connof como if, while, etc., controlan el flujo de ejecuci6n de 10s programas
awk En awk, la mayoria de las sentencias de control est611 basadas en las sentencias similares a
las del lenguaje C.

Muchas sentencis de control contienen otras sentencias, por ejemplo, la sentencia if contiene
otra sentencia la cud puede ser o no ejecutada. La sentencia contenida es llamada el cuerpo. Si
incluimos miis de una sentencia en el cuerpo, agruparlas en UM sentencia compuesta mca entre
caracmes Ilaves, sepMolas con caractem punto y coma o nueva linea.

Sentencia if
La sentencia if es una sentencia de toma de decisiones. Opcionalmente puede ir acompaftada de
la sentencia else La sentencia if-else tiene el siguiente formato:

if (condicidn)
cuerpo
[else
CU@rpO]

Aqui, condicidn es una exprsi6n que controla lo que realizaril el rest0 de la sentencia. Si la
co&i&n es verdad, el primer cuerpo es ejecutado; de otro modo es ejecutado el cuerpo que
sigue a else. La condicidn es considerada falsa si el valor es cero o la ~adenaes nula, de otro
modo es verdadero.
P a supuesto, encondicibn, como en una expresi6n, pueden incluirse las distintas class de ope-
radores: relacionalm, aritm&icos, etc., concatenaci6n de caracteres y caracteres parentesis para
el appamiento.
El siguiente programs ejemplo imprime las lineas del fichero especificado enfichero que al
menos tengan 5 campos:
awk '( if (NF> 4) print ))fichero

El siguiente ejemplo, llamado pdf.awk, muestra como trabaja la sentencia if-eke. Si la mm-
paraci6n de la expresi6n $3 8 2 = 0 es verdad (es decir, si el valor del campo $3 del fichero
cars es divisible por 2), es ejecutada la primera sentencia print, si el valor de $3 no es divisible
por 2 es ejecutada la segunda sentencia print:

$ cat pnc&awk
(
if($3% 2=0)
print $3, "Es divisible por 2."
else
print $3, "No es divisible por 2."
1
$ awk -f pruif.awk cars
89 No cs divisible por 2.
90 Es divisible por 2.
90 Es divisible por 2.
93 No cs divisible por 2.
...
6- PRUGWACIONENawk 179
Programas de UtiWud UNIX

Sentencia while
En programaci6n, un bucle indica UM parte de un programa que es (0 al menos puede sa)e@-
cutado dos o mih veces sucesivamente. En la utilidad awk, la sentencia while es la sentencia
m h sencilla de bucles, la mal ejecuta repetidamente una sentencia mientras una c~ndici6nsea
verdad La sentencia while tiene el siguiente formato:

while (condicibn)
cuerpo
Aqui, cuerpo es una sentencia que llamaremos cuerpo del bucle, y condicidn es una expresi6n
que controla el tiempo que el bucle va a mantener la ejecuci6n Primero, la sentencia while veri-
fica la eondicidn, si &ta es verdad, ejecuta la sentencia del cuerpo.

Despub de que se haya ejecutado el cuerpo, la co&ih es verifcada otra vez, y si sigue sien-
do verdad, el cuerpo es ejecutado otra vez. Este proceso se repite hasta que la corzdicibn no sea
verdad Si la condici6n es inicialmente falsa, el cuerpo del bucle no es ejecutado.

El siguiente ejemplo, imprime todos los campos del fichero c m , uno por linea:

$ catpruwhik
ad'{ i=l
whiie (ie NF)
{ print $i
i++ }
y cars
El bucle prim0 establece el valor de i a I. Despub, la sentencia while verifica si i es menor o
igual que el mlmero de campos del registro de entrach en curso. Cuando i es i@ a I, el prima
campo es impreso. Despub, la expresi6n ii+ incrementa el valor de i y el bucle se repite.

Sentencia do-while
El bucle do proviene de la sentencia del bucle while. El bucle do ejecuta el cuerpo una vez,
despub repite el cuerpo mientras la condicidn sea vexdad Su formato es el siguiente:

do
cuerpo
while (condicidn)

Aunque la condicibn sea falsa a1 principio, el cuerpo es ejecutado al menos una vez. El si-
guiente ejemplo do realiza UM menta at&, imprime del nbmero 10 a1 0 en UM linea bnica:

$ catpruwhiledo
awk 'BECIN { n = 10
do
{ printf ("%d ",n)
n- 1
while (n >= 0 )
print -'
Y
$ pruwhiledo
10 9 8 7 6 5 4 32 1 0

180 -
6 PROGRAMACION EN awk
Programus de Utilidad UNIX.,

Sentencia for
La sentencia for es la xnh conveniente para contar repeticiones de un bucle. El formato general
de la sentencia for es el siguiente:

for (iniciizkkzc3n; eondicidn; incremento)


cuerpo
La sentencia for empieza ejecutando la inici&za&n. Despuh, mientras la cotlclici6n sea va-
dad, se ejecuta el cuerpo repetidamente y luego el incremento. Tfpicamente, la iniciaZizaeidn
establece una variable a oero o a uno, el incremento suma 1 a la variable, y la comikidn la
compara respecto al n~merodeseado de repeticiones.

El cuerpo representa cualquier sentencia, per0 la inicialiurcibn, la condic3n, y el incremento,


son exactamente expresiones. En la parte de la iniciaIizacidn s610 podemos establecer una va-
riable. por ejemplo, el siguiente program imprime todas las potencias de 2, entre 1 y 100:

$ catpmfor
awk‘BFX;IN { for (i= 1; i e 100, i *= 2)
printf (“%a ”, i) } ;{ print “)’

$ pmfor
1 2 4 8 16 32 64

Sentencia break
La sentencia break intemrmpe pop oompleto el bucle rtlas interno de las sentencias for, while y
do-while que delimita la sentencia. El siguiente programa, sin la sentencia break, imprime 10s
n~merosdel 1 al15, per0 con la sentencia break intemunpe el bucle for cuando llega a 5:

$ cat pnrbreak
awk ‘BEGIN {
for (X’ 1; x e 15;x++)
{ ir(x=5)
break
printf(”%d “,x) ) ;print LB’ )’

$ prubreak
1234

Sentencia continue
Esta sentencia es usada en 10s bucles for, while y do-while, la cual da un salt0 sobre el resto del
cuerpo del bucle, haciendo que el siguiente ciclo del bucle comience inmediatamente. El si-
guiente ejemplo imprimiril los nfimetos 1 al 15, except0 el 5, para el cud la sentencia continue
hace que el bucle for salte el resto del cuerpo,reanudando la ejecuci6n con la expresi6n xi+:
awk ‘BEGIN {
for (x= 1; x ~ 15;
= xf~)
{ if(x= s)
continue
printf (“%d ”, I))
print ww )’

-
6 PROGRAMACION EN avk 181
Proammas de U t i l W UNIX

Funciones
Unafunci6n es un nombre para un clilculo de€erminado, y ya que la funci6n tiene un nombre,
podemos preguntar por ella en cualquier punto del programa. La utilidad awk dispone de un
conjunto defmciones inregrudas, lo que significa que estas funciones e s t h disponibles para
cuando las llame nuestro program awk El usuario tambien puede definir sus propias funcio-
nes en el programa awk (vex “Funcionesdejinidas por el usuario”, pagina 184).

La forma de utilizar UM funci6n es con UM expresidn de llamada a lafwrci6n (ver “Llumur a


unufunci6n”, p&@na185) la cual consta de un nombre de funci6n seguido de una lista de argu-
mentos sqarados por caracteres comas y encerrados entre caracteres par&esis. Los argumen-
tos de la funci6n son expresiones que ofrecen la materia prima para el clilculo que la funci6n
realizara. El siguiente ejemplo es una llamada a la funci6n atan2 con dos argumentos:

Los caracteres espacio entre el nombre de la funci6n integrada y el parentesis de apertura son
ignorados, per0 para seguir el mismo criterio en la escritura de funciones integradas y de usua-
rio, recomendamos evitar el us0 de car-es espacio ya que las funciones definidas por el
usuario no permiten caracmes espacio en este lugar.

Funciones integradas
Funciones integradas numiricas
La siguientees una relaci6n defwrciones integrudas que trabajan con nfimeros:

int(x) Proporciona la parte entera del nfimero especificado en x, el resultado es huncado


hacia x. Genera el nfimero enter0 lnas pr6ximo a x, ubicado entrex y 0.

sqrt(x) Nos proporciona la raiz cuadrada positiva del nfmero especificado en x, o notifica
un error si x es un nfimero negativo.

exp(x) Esta funci6n obtiene el ntimero exponencial de x.

log(x) Devuelve el logaritmo natural dex, six es positivo; de otra forma notifica un error.

sin@) Esta funci6n proporciona el sen0 de x, con x en radianes.

c&x) Proporciona el m e n o de x, con x expresado en radianes.

atan2(y, x) Nos proparciona el arcutangente dey /x, con el cociente en radianes.

rand() Proporciona un nfimero aleatorio. La6 valores de la funci6n rand son distribuidos
unifmemente entre 0 y 1. L a funci6n rand comienza generando nfimeros desde el
mismopunro de arranque, cada vez que ejecutemos la utilidad awk

srand(x) La funci6n srand establece el punto de arranque para la generaci6n de nfimeros


aleatorios a1 valor especificado en x. Cada valor de manque conduce a UM se-
cuencia de€erminadade nfimeros aleatorios. si omitimos el argument0 especificado
en x, entonces es usada la fecha y hora en curso como valor de manque.

I82 -
4 PROGRAMACION EN awk
Progmhas de Utilidud UNIX -
Funciones integradas para manejar cadenas
Las siguientesfmciones i n t e g r a examinan el text0 de UM o m& cadenas de caracteres:
index@,t) Devuelve la posici6n del car&cter o lndice de la cadena t en la c. Si la Cadena t no
esta presente, devuelve 0. La funci6n Sndex(“renault”, ‘ha”), devuelve 3.

length@) Devuelve el nttmero de caracteres de la cadena c, o el n ~ m a ode caracmes del


registro en curso si no se especifica un argumento. Si c es un nlimero, es devuelto
el tma€iode la ~adenadel nfimero que representa ese nfimero. Par ejemplo, la
funci6n length(“abc8’) devuelve 4, per0 la funcidn length(3 * 5) devuelve 2.

match@,e) E x a m i ~ la cadena de caracteres especificada en c para ver si se corresponde con


la expresi6n regular especificada en e. Devuelve la posici6n del cdctex donde
comienza la correspondencia, 6 0 si no bay correspondencia. Establece las varia-
bles i n t e g r a RSTART y RLENGTH.

split(c, m, e) Divide la ~ a d esjxcificada


e ~ en c y la almacena en la mahiz m sobre la expre-
si6n regular especKicada en e, y devuelve el niimao de campos. Si la expresi6n
regular e es omitida, en su lugar es usada la variable FS.

sprintf(fmt, W-expr)
Imprime las lis&de expresiones especificada en fista-expr, conforme al formato
especificado e n m , y devuelve la cadena resultante.

sub(e, e, t) Sustituye la mdena c que se mesponda con la primaa ocurrencia de la expre-


si6n regular e en la cadenat. Devuelve el rnfmero de sustituciones realhadas.

gsub(e, c, t) La funci6n gsub (global substitution) es similar a la funci6n sub, except0 que
sustituye todas las ocunencias de la ~ a d ceque ~ se correspondan con la expre-
si6n regular e en la cadena t o en el registro en CUTSO si la cadena t no es dada.

substr(c, i, n) Devuelve una subcadena de la cadena especifkada en c, del tamafio especificado


en n,comenzando por el niimero del carticks especificado en i. El primer car&cter
de una cadena es el rnfmero 1. Si se omite n,es usada la diferencia de la cadena E.
Pur ejemplo, la funci6n sbstr(“pgrama”, 5, 3) devuelve la cadena ram, y la
funci6n subsfr(“prograxna”, 5) devuelve la cadena rams

tolower(c) Devuelve UM cupia equivalente en letras ma@sculas de la cadena especificada


en c, traduciendo las letras mayGsculas a mindsculas.

toupper(c) Devuelve una copia equivalente en letras miniisculas de la cadena especificada en


c, traduciendo las letras minlssculas a ma*sculas.

Funciones integradas para entraddsalida


c l o s ~ h e r oCima
) el fichao de entrada o salida especificado enfiehero. Alternativamente, el
argument0 de la funci6n close puede ser un comando del shell usado en UM redi-
recci6n con unpipe, el cual sera cerrado de la forma: close(cumando).

system(cmd) Pamite ejecutar comandos del sistema operativo y despub volva al program
awk, devolviendo el exit-status del comando ejecutado.

-
6 PROGRAMACION EN awk 183
Prowarnas de Utilidad UNIX

Funciones definidaspor el usuario


Los programas awk muchas veces pueden ser simplificados definiendo nuestras propias fun-
ciones. Lasfunciones defnidus por el usuario son llama& exactamente igual que las funciones
integradas, per0 cuando las defmmos, para que el progrma awk determine lo que defx hacer.
La definicidn defunciones puede aparecer en cualquier parte entre las instrucciones del progra-
mu awk. Asl, la forma general de un programu awk se amplla para incluir imencias de ins-
trucciones y definici6n de funciones del usuario.

La definici6n de una funci6n llama& mifirnc tiene el siguiente formato:

function mifunc(l&ta-de-arg~mentos)
{
cuerpo-de-la-funcidn
1
miifirnc es el nombre de la funci6n que va a ser definida. Un nombre de funci6n vaido es se-
mejante a un mmbre de variable vado: una secuencia de letras, dlgitos y guiones de subraya-
do, no comemando con un dfgito.

s UM lista de nombres de argumentos de la funci6n y de nombres de las


l k t a - d e ~ m e n f oes
variables locales, separados par comas. Cuando la funci6n es llamada, lo6 nombres de 10s ar-
gumentos son usados para guardar los valures de 10s argumentos dado6 a la llamada (ver b ' ~ -

mar Q unafwzcidn", p6gina 185). Las variables locales son inicializadas a la cadena nula.

cuerpo-&-&-fidn consta de sentencias awk El cuerpo es la parte m2s importante de la de-


finici6a porque el cuerpo dice Io que la funci6n hard realmente. Los mmbres de 10s argumentos
atan para dar al cuerpo una Vfa de comunicaci6n entre ellos; y las variables locales para dar
memoria al cuerpo y guardar temporalmente 10s valores.

Usualmente, cuando especificamos una funci6n sabemos cuahtos nombres proponemos para 10s
argumentos y &os para las variables locales. Por convenio, especificaremos un espacio adi-
cional entre los argumentos y las variables locales. El cuerpo de la funci6n puede contener ex-
presiones, las cuales llaman a funciones. Las funciones pueden llamar incluso a esa funci6n di-
rectamente o mediante otra funci6n
El siguiente es un progrum awk, llamado impre, que incluye una funci6n de usuario, llamada
finchpre, la mal tom todos los campos t e r e m del fichaofimpre que contengan un niImero
positivo, imprimiendolos en el formato especificado:

$ cat impre
awk 'function funcirnpre(num) (
printf "Z63g bb, num
1
$3 > 0 { funampre(S3) )' fimpre
print

$ catfunpre
1.2 3.4 5.6 7.8
9.10 11.12 13.14 5.16
17.18 19.20 21.22 23.24

$ impre
5.6 13.1 21.2

184 -
6 PROGRAMACION EN awk
Promdinas de Utilidad UNIX-

Uamar a una funcihn


Como m u c h otras expresiones, la llamada a una funci6n tiene un valor, el cual es computado
pop la funci611,basada en 10s argumentos que la proporcionamos. Si en la llamada a una funci6n
se omiten 10s argumentos, &os son tratados como variables locales inicializadas a una cadena
nula. Llamar a unafiurci6n significa hacer que la funci6n se ejecute y realice su trabajo. Una
llamada a una funci6n es una expresi6n y su valor es el valor devuelto por la funci6n.

Una llamada a una funci6n es una expresi6n que consta del mmbre de la funci611, seguido de
10s argumentos encerrados entre par6ntesis. Lo que especificamos en los argumentos son expre-
siones awk, y cada vez que la funci6n es ejecutada, esas expresiones son evaluadas, y sus vale
res son los argumentos r d e s .
For ejemplo, la siguiente es una llama& a la funci6npnr con tres argumentos:

pm(x y, “peso”, 8 * z)

Cuando una funci6n es llamada, la es dada una capia de 10s valares de sus argumentos. El usua-
rio puede utilizar una variable como la expresi6n del argumento,per0 la funci6n llamada no cu-
noce este uso, todo lo que conoce es el valor que tuvo el argumento. Cuando las matrices e
ciativas son 10s arpmentos de las funciones, las matrices no son copiadas; en su lugar, la matriz
por si misma gueda disponible para ser manejada directamente por la funci6n. (Ver “Matrices“,
pagina 186).

Sentencia return
El c u e ~ p ode una funci6n definida por el usuario puede contener una sentencia return, la cud
devuelve el control al rest0 del program awk La sentencia return tambit% puede sa utilizada
para devolver un valar de us0 en el rest0 del progrumu awk Su formato es el siguiente:

return expresidn

El argumento expresibn es apcional. Si expresibn es omitida, entonces el valor devuelto es in-


definido y por tanto impredecible.

El siguienteprogram awk utiliza la funci6nfat, la cud calcula la factorial de un nfimero su-


ministrado interactivamenteal program factorial cuando es ejecutado:

$ catfactoriizl
awk ‘function fiaCyn) {
if (n <= 1)
return 1
else
* -
return n fact(n 1)
1
print $1 “! cs ” fact($l) )’

$ factorial
5
S! es 120
8
8! es 40320
<Ctrl-c>

-
4 PROGRAMACION ENawk 185
Programas de U t i l W UNlX

Matrices
La utilidad awk proporciona matrim unidimensionales. Las matrices y 10s elementos de las
matrices no necesitan ser declarados; igual que las variables, obtienen su existencia cuando son
mencionados. Una matriz es una tabla de varios valores, llamados elemenfos; 10s cuales se dis-
tinguen por sus indices. Cada matriz tiene un nombre.

En awk, las matrices son asociativas, por lo que cada matriz es una acumulaci6n de empareja-
mientos: un indice y su carrespondientevalor del elemento de la matriz,mmo por ejemplo:
Elemento 4 Valor 10
Elemento 2 Valor "pru"
memento 1 Valor 8
Elemento 3 Valor ~ 9 )

Los emparejamientos mostrados esan desordenados porque el orden no significa nada. Una
ventaja de la matriz asociativa es que pueden SK agregados nuevos emparejamientos en cual-
quia momento; otra ventaja es que 10s indices de las matrices no tienen parquC sa nfimeros
enteros positivos; cualquier lrcimero e incluso una C&M de caractem puede sa un fndice.

Referenciu a un elemento
La forma principal de utilizar una matriz es referirse a uno de sus elementos. Una referencia a
una matriz es una expresi6n con el siguiente formato:

matriz[indice]

mufriz es el nombre de una matriz,indice es el indice del elemento de la ma&. A 10s elemen-
tos de una matriz del lenguaje awk se les pueden asignar valores, como a las variables y a 10s
campos de la utilidad awk,con el siguiente formato:

matriz[indice] = valor

La siguiente sentencia es un ejemplo de un indice numCrico convencional, que asigna cada linea
de entrada ($0) a la matriz X indexada con el nfimero de linea (NR):

X[NR] = $0

El siguiente programa, prumatriz acumula el total de km. de las marcas opel y ford, del fiche-
ro cars, en la matriz asociativa km.La aci6n END imprime 10s km. totales de estas dos marcas:

$ catprumu.triz
awk '/ford/ { km["tOrd"]+= $4 }
10pey { ~ ~ 0 p e 1 += 11
7 ~$4
END { print "Km. de 10s cocbes ford, en miles:',, W'ford''] }
print "Km. de 10s coches opel, en miles:", km(l'opel"1)' cars

$ prumatriz
Km. de 10s coches ford, en miles: 194
Km. de 10s coches opel, en miles: 174

En programas como este, el us0 de comillas en 10s indices de cadena evita que una variable con
el mismo nombre que el indice, acumule valores en matrices de tip0 x['"'].

186 -
6 PROGRAMACION EN auk
Progra?nasde UtiMad UNIX z

Andlisis de todos 10s elementos


En programas que utilizan matrices, muchas veces necesitamos un bucle que ejecute m& de una
vez cada elemento de UM matriz.La utilidad awk tiene UM clase especial de sentencia for, con
el siguiente furmato, para analizar una ma&:

fur (var in mubiz)


cuerpo
Don& var es una variable que toma los valures de cada uno de los elementos de la maw,para
que la estructura for itere sobre ellos, maaiZ es el mmbre de la matriz, y cuerpo es la acci6n
que la utilidad awk toma par cada elemento de la matriz.

El siguiente es un programa ejemplo, llamado mamas, que utiliza el contenido del primer cam-
po ($1) de cada registro del fichero cars como indice de la matriz nuuca. La matriz estA com-
puesta de los elementos marca#ird], nuuca[hmia], nuucu[upel], etc. El opera& ++ incre-
menta la variable que le precede. La acci6n que sigue a la plantilla END es una estructura for
que hace un bucle entre 10s elementos de la ma&. Por atimo el programa imprime UM lista en
ordenalfab&icodemarcasycantidadesasociadas:

$ cat nuucas
1
awk ‘{ m [ $ l ] + +
END { for ( n d m in marca) printf “% -8s 96-8sb”,
nombre, marca[ndm] }’ cars I sort

$marcas
bmw 1
ford 4
honda 1
ope1 3
renault 2
volvo 1

Si una matriz con un de€Kminadoindice tiene un elemento, 6 t e puede ser localizado con la si-
guiente expresi6n:

indice in matriz

Por ejemplo, para verificar si la matriz murca contiene el indice “honda”, podriamos especifi-
car la siguiente sentencia:

if (“bonda”in marca) print “El indice ”honda” est6 presente.”

El elemento individual de una matriz puede sa borrado utilizando la sentencia delete, la cud
tiene el siguiente formato:

delete matriz[indice]
El siguiente ejemplo borra todos 10s elementos de la matriz nuuca:

for (i in marca)
delete marcafi]

-
6 PROGRAMACION EN awiz 187
Programas de Utilidkd UNIX

Ejemplos
El siguiente programa, regcap, utiliza las variables NR y NF para imprimir 10s registros del fi-
chero cars precedidos del nfimero de linea y finalizados del nfimero de campos de cada linea:

$ cat regcamp
awk'( printfu%-4s%-9s %-10s19%2d%Sd %7d%&",
NR,$1, $2, $3, $4, $5,NF 1' cars

$ regcamp
1 ford scort 1989 100 2360 5
2 honda accord 1990 180 4200 5
3 opel corsa 1990 105 2500 5
4 renault chamade 1993 80 3010 5
5 ford mwdeo 1995 30 8330 5
6 bmw compact 1996 42 14254 5
7 dvo optima 1997 15 22140 5
8 opel frontera 1996 58 16020 5
9 ford Scorpio 1998 54 11345 5
10 opel vectra 1998 11 15600 5
11 renault megane 1998 12 7560 5
12 ford fiesta 1999 10 5915 5

El siguiente programa, llamado bytes, imprime el nfimero de bytes que tienen los programas C
de nuestro directorio de trabajo en curso:

$ cat bytes
*.c i awk '( s += $5 }
Is -I
END { print Total: x (L bytes" y
$ bytes
Total: 57748-

El siguienteprogrumu awk, llamado preciosl, muestra un infarme relativo al fichero cum. El


programa utiliza sentencias de control if-eke y expresiones de comparaci6n para sustituir 10s
valares num&icos del campo cinco par otros literales basados en los precios:

$ catprecwsl
awk'BEGiN(pr"t"Marca Modelo Aiio Kns had'
print "--- -1-1- --- --I
"I ----
{ if ($5 c= 6000) $5 = "barato"
else
if ($5 > 6000 && $5< lS000) $5 = "preguntar"
else
if ($5 >= 15OOO) $5 = "card'
( printf"%-% Z-lOs 19ZM %5d000 % s W , $1, $2, $3, $4, $5 )' cars

$ preciosl
Marca Modelo ABo Kns Precio
--I-1-1- I
-- --- ---
ford SCOrt 1989 100000 barato
honda accord 1990 Moo00 barato
opel corsa 1990 105000 barato
renault chamade 1993 80000 barato
ford mondeo 1995 3OOOO preguntar
bmw compact 1996 42000 preguntar
volvo optima 1997 15000 car0
opel frontera 1996 58000 car0
ford Scorpio 1998 54000 preguntar
opel wctra 1998 11000 car0
renault megane 1998 12000 preguntar
ford fiesta 1999 10000 barato

188 -
6 PROGRAMACION EN awk
Programas de U t i M UNIX

El siguiente programa visualiza, por orden alfabetico, los identificadores de usuario que utilizan
el shell C mmo shell inicial:

-
$ awk -F:‘ $7 /csW { printf “%-lOs %s\n”, $1, $7 )’ /etc/passwd I sort

El siguiente programti, llamado plants, visualiza un mensaje indicando las veces que aparece la
plantilla suministrada mmo argument0 al script plants, del fichero cars:

$ catplants
#Vbiish
# S d p k pbD&
# V i d i el nGmero de veces que aparrcc una plantilla en el lichero cars.
awk ‘/‘$l’l{ tantas++ }
END { print “La plantilla ‘$1’ aparece ‘‘tantas was” }’ cam

§iplants opel
La plantiIIa ope1aparece 3 vms

$ plants 10
La plantilla 10 aparece 4 veccs

El siguiente programa,llamado raizc, calcula la rafz cuadrada de los nfimeros mntenidos en el


ficherofrakc.Por defecto, la utilidad awk genera 6 d@tm decimales; aquf, la salida se ha for-
mateado a 3 decimales:

$ cat raizc
a d ‘{ printf ‘2a raSz cuadrada de $1 cs: 9%6.3h”
sqrt($l)
, fdzc

$ catfr&
002
008
064
180
251
900

$ raizc
La m’z cuadnda de 002 cs: 1.414
La m’z cuadnda de 008 cs: 2.828
La rpiz cuadrada de 064 cs: 8.000
La rOiz cuadrada de 180 cs: 13.416
La I&cuadrada de 257 cs: 16.031
La raiz cuadrada de 900 es: 30.000

El siguiente shell-script, lineas72, visualiza las lfneas del fichero o ficheros especificados en el
command-lineIineas72 que contengan d s de 72 caractem, precedidas del ntimero de linea:

$ cat lineas72
#%inlsb
awk ‘{ if (length(S0) > 72)
print NR, $0 1$*

El siguiente programa, lineaawk, envia las lineas que al menos contengan un campo, del fiche-
ro especificado en el command-line awk al fichero especificado en newfile. Esta es una forma
de borrar las lineas blancas de un fichero:

$ cat linecrawk
NF > 0 { print > ”newfiie” )

-
6 PROGRAMACION EN awk 189
Promamas de Utilidad UNIX

El siguiente script, llamado sinpass, genera un informe de 10s usuarias que no tienen password,
verificando el campo 2 del fichero del sistema, /etc@asw&

$ catsinpass
#!/bin/sh
-
# script: sinpass Viualiza un informe de 10s usuarios sin password.
# El fichero passwd de este ejemplo cs ficticio.
#
sort Ietdpasswd I uniq I awk '
BEGIN { Fs = ":";
print e
print " Verificici6n del fKhero passwd"
print" ---- n
print e
print " USERID NOMBRE REAL"
print " 1--1 1-11--I- "
print
suma = 0
tOtal=O
{ if ($2 ="1 {
+
(suma = mama 1)
printf ('9t%dOsk-4~",$1, $5) }
(total = total+ 1) }
END{
print

-
print %De", total, “usuaries, haf, surua, "que no tienen password"
print
Y
$ sinpass
Verifiicib del fichero passwd

USERID NOMBREREAL
------ -..----------

bonilla BONELA FERNANDEZ, PEDRO


cantem PEREZ CANTERO, JWE Luis
margalo LOPEZSANJUAN, MARGARITA
vaqucz VAZQUEZ DEL CASTILLO, FERNANDO

De 248 usuarios, hap 4 que no tienen password

El siguiente programa,cdecars, imprime el ntlmero total de caracteres del fichero cars. El pro-
grama utiliza un bucle while quedando cada campo en una linea con el fin de no &jar blancos
N tabuladores entre campos:

$ cat c&cm
#!&infksh
-
# script: cdecars Visualiza el niimero de caracteres del fichero dado.
awk '{ i = 1
while (i <= NF')
{ print Si
ice }
1' $* I
awk '{ nc = nc + length($O) }
END { print "El ficherocars tiene", nc + "€2,"caracteres" $*

$ cdecars c m
El fEhero cars tiene 294 cantcteres

I90 -
6 PROGRAMACION EN auk
Programas de Utilidad UNIX

El siguiente ejemplo es un scripf interactivo, llamado rangus, el cud visualiza 10s registros del
fichero cars conforme a 10s rangos nurnkicos (rango-minim0rango-rmfximo) tecleados cuando
el script 10s solicita. En los registros visualizados va incluido el precio en Euros (€) y en Pts:

$ cat rmgos
#!lbin/ksh
# script: rangos - V i I i z a rcgistrossegiin los rangos especificados
echo “Introduce an rango de preeios: \cn
read rangomin rangomax
echo ‘
Marca
-I--
Modelo Aiio
-e--- - --
Kns
I
Pdo(€)
------- Precio(Pts)
-----.-‘> $$.tempo
awk < cam ‘
$5 >= ‘$rangomin’ && $5 G- ‘$rangomax’ {
*
$6 = 167
printfu-8s 96-8s % 19%2d %5dO00/10.2f € Ydld Ptsb”,$1, $2, $3, $4, $5, $6 I
sort -n +5 >> $$.tempo
cat $$.tempo
rm$$.tempo

$ mugm
Introduce un rango de precios: 2000 do00
Marry Modelo Aiio Kns Precio(9 Precio(pts)
----- -- I- --- --- -e---

ford SCMt 1989 1OOOOO 2360.00 € 394120 Pts


ope1 corsa 1990 105000 2500.00 € 417500 Pts
renault chamade 1993 8oooO 3010.00 € 502670 Pts

$ rangm
Introduce un rango de p d o s : 15000 18000
Marca Modelo Aiio Kns hecio(9
---- *--- I- -- -I-----
I------
Precio@ts)

opel frontera 1996 58000 16020.00€ 2675340 Pts


opel vectta 1998 11OOO 5600.00 € 2605200 Pts

$raw=
Introduce an rango de @os: 2oooO 30000
Ma- Modelo Aiio Kns Precio(€) Precio(Pts)
----- ----- --I--I ---- e-----

volva optima 1997 15000 22140.00 € 3697380 Pts

El siguiente progcama awk,llamado promedios, genera un informe de promedios con 10s datos
del fichero cars:

$ catpromedios
#!fbin/sh
# script: promedios -Genera un informe de promedios.
awk ‘BEGIN { sunma = 0 ;sump = 0
sumap3a = 0 ;cuenh = 0 }
{ sunma += $3; s u m p += $5 }
$3>% { sumapf += $5 ;cuenk++ }
END { printf “El promedio de aiios de Ios “ NR coches es k3.11 %&”,
-
99 (sumaaMR), “aiios”
ptintf ‘TIpromedio del precio de 10s NR L( coches cs %7.2f Zh”,
sumap/NR,v
printf “EI promedio del prrcio de los cuenf “ coches con menos de 3 aiios es %72f %s\n”,
sumap3a/cuen3a, ”€” }’ cars

$ promedim
El promedio de aiios de 10s 12 coches es 4.1 aiios
El promedio del precio de los 12 cocbes es 9436.17 €
El promedio del precio de 10s 5 coches con menos de 3 aiios es 12512.00 €

-
6 PROGRAMACION ElUawk 191
El siguiente programa, llamado userid, visualiza informaci6n del usuario o usuarios especifica-
dos en el command-line userid Si la cuenta introducida no est6 registrada en el ficheropasswd,
el programa userid emite un mensaje y finaliza en ese punto:

$ cat userid
#!hid&
-
# script: uswid Viualiza informicitin de 10s usuarios especificados.
if $#*q 0 1
then
echo "Us0 correcto:userid u s d ..."
exit 3
fi
while [ $# -ne 0 ]
do
cuenta='grep $1l e W p s w 8
if [ $? != 0 ]
then
echo w'
echo "El usuario $1no tiene cuenta"
dt3
fi
echo
echo Scuenta I awk 'BWIN { FS = . I
"}
-
{ printf Wombre de cuent?: %s Nombre real: %s\a)', $1, $5 }
{ printf " D i i r i o de defecto: %h",$6 }'
if [ "$cuenta" != =' ]
then
if who I grep $1>Idednull
then
echo El usuario $1est5 dojado en: \
'who I grcp $1I awk '{ print $6 }F
else
echo "El usuario $1no d alojado"
fi
shift
fi
done

$ userid his roldanpepito


-
Nombre de cuenta: luis Nombre real: PEREZGARCIA, LUIS
Directoriode defecto:I u s u a r i d d u i s
El usuario luis tSti alojadoen: (ceca76.aemt.e~)(ceca75.ciemates)

Nombre de cuent?: rddan - Nombre real: MUNOZ ROLDAN, ANTONIO


Directoriode defecto:Iusuarioslcecalroldan
El usuario d d a n no esti dojado

El usuario pepito mo tiene cuenta

El siguiente programa, llamado palabras, imprime el us0 de palabras, clasificadas en orden


numkico inverso, del fichero o ficheros especificados en el command-line. La primera sentencia
utiliza la matriz cue& para acumular el ndmero de veces que es usada cada palabra. Una vez
que la entrada es lefda, el segundo bucle for junto con la sum final y con cada palabra, son
enviadas mediante un pipe al comando sort:

!$ catpalabras
#"inlksh
-
# script: palabras Viiualiza el niimero de veces que es usada una pakbra en un fichero.
awk '{ for (pal = 1 ;pal <= NF ;pal i+)
cuenta[$pall++1
END { for (pal in cuenta) printf "% -10s %M\n",
pal, cuenta[pal] I "sort +1-nr" }' $*

192 -
6 PROGRAMACION EN awk
Programas de UtiMad UNIX-

7 - UTILIDADES DE CALCULO

Utilidad expr
DescripciCin
La utilidad expr es un comando del shell Bourne que lee una expresi6q la evalria y escribe el
resultado en el standard-output. El comando expr evalria cadenas num&cas y cadenas de ca-
racteres. Aquf s610 trataremos el c4lculo de cadenas numt5ricas. La utilidad expr s610 trabaja
con nfimeros enters per0 ejecuta todas las aperaciones matedticas bhicas.

Formato
expr expresibn

Argumentos
expresibn Es la expresi6n que va a ser evaluada por la utilidad expr. Cada expresi6n comta
de cadenas de ntsmerm enterm (operandos) separadO6 por operadores. Cada corn-
ponente de la expresi6n es considerado un argument0rfnico.

Operadores
Los siguientes son 10s operadores antdticos que utiliza el comando expr, 10s cuales s610 tra-
bajan con cadenas rmm&icas y opcionalmentecon nfimerm negativos:
+ Operadordesuma
- Operadorderesm
* Operadar de multiplicaci6n
/ Operador de divisi6n (sin decimales).
5% Operadorderesto.
Los siguientes son 10s operadores relacionales que utiliza el comando expr, 10s cuales trabajan
con cadenas num&icas y de caracteres. Si uno o ambos operandos son cadenas de caracteres, la
evaluaci6n sa6de caracteres. Si ambos operandos son numt5ricos la evaluaci6n es numkica:
= Equivalencia 16gica.
> Mayorque.
>= Mayor que o igual a.
Menorque.
<= Menor que o igual a.
!= Noiguala.

La utilidad expr visualiza 1 si la coqaraci6n es verdad y 0 si la c o m p a i 6 n es falsa:

$ expr 8 = 6
0
$iexpr 10 != 7
1

7- UTILIDADES DE CALCUU) 193


Programas de Utilidad UNIX

R e g h QI.itm&icas
El orden de prioridad de los opaadores aritm&icoses el siguiente:

Por ejemplo, el siguientecommand-fineexpr primer0 realiza la sum y despueS la rata:

$ eypr 6 + 2 3-
5

Los argumentos en las expresiones deben ir separados por espacios:

$ expr 4t6
6+4
$ expr 6 +1
apr: syntax error
$ expr -17 + 20
3

Demo de una expresi6n. los operadorm que tengan un significado especial para el shell, deben
ser prutegidos con un c a r e barra inversa blinada 0) para evitar que sean interpretados im-
propiamente por el shell:

$ expr 5 \* 8
40
$ expr 12 \<= 14
1

Los caractetes parCntesis pueden ser utilizadm para alkrar la prioridad, per0 ambos signos, el
parbtesis de apertura y el par6ntds de cierre deben sa protegidos con un carktex baxra inver-
sa inclinada 0). Observernos los tesultados de los dos comandos expr siguientes:

$ expr 6 + 2 \* 3
12
$ expr \( 6 + 2 \) \* 3
24

La utilidad expr s610 trabaja con nlImeros enteros. En una divisi6n el comando expr redondear6
el resultado, por lo que el orden de ejecuci6n es muy importante.

La utilidad expr tambiCn permite guar& el resultado de un comandoexpr en UM variable:

$ var=4
$ var=‘expr $var + 1‘
$ echo $var
5

Notas
La utilidad expr es Citil en scripts del shell Bourne, ya que el shelf C y el shelf Korn tienen utili-
dades built-in equivalentes: el shell C el evaluador @, y el shell Korn el comando let (ver “Uti-
lidad let”, pfigina 196).

194 7- UTIUDADES DE CALCUU)


Promamas de U t i i W UNIX

Ejemplos
El siguiente script, llamado suma, utiliza la utilidad expr para visualizar la suma de dos o mi%
nfimeros especificados en el command-line como argumentos del script:

$ cat suma
#!/bid&
-
# script: suma Suma dos o m6s niimeros.
if [ M-It 2 1
then
echo "AI ntenos deben dame dos argumentos."
else
suma=$l
shift
while [ $# -ne 0 ]
do
suma='cxpr $sum + $1'
shift
done
echo $sum
ti

$suma121325
50

El siguiente script, sumanufi, sum la secuencia de nfimeros contenidos en el ficherofinums:

$ cat szununuj?
#Midsh
-
# script: sumandi Suma 10s niimens de nnfrchero.
contad
for iin'cat tinuns'
do
eonta='expr $anta + $r
done
echo Sconta

$ catfinurns
40
60
200
800

El siguiente script, cuenexpr, utiliza el comando expr para reatiZar una cuenta de 1 hasta 20:

$ cat cuenexpr
#!hidsh
-
# script: cuenexpr R e a h una cuenta de 1 hasta 20.
conta=o
while [ Sconta -It 20 I
do
conta='upr $conta + f
echo "$conta \din
done

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

-
7 UTtLIDADES DE CALCUU) I95
Programas de U t i W UNIX

Utilidad let
Descripcih
La utilidad let es un comando del shell Korn que permite realizar c6lculos aritm&icos con mS-
meros entaos. Es parecida a la utilidad expr, per0 la utilidad let es m8s flexible, y realiza todas
las operaciones aritm&cas basicas usando el ndmero de mayor valor disponible en el sistema.

Formato
let expresibn
((expresidn))

Argurnentos
expresidn Es la expresi6n o expresiones aritm&cas que van a ser evaluadas por la utilidad
let. El uso de dobles parentesis es un formato altemativo y c6mod0, equivalente al
us0 del comando let, evithdonos proteger 10soperadares que tienen un significado
especial para el shell.

Operadores
Cada expresi6n aritm&ca consta de operandos y operadm. Los operandos pueden ser cons-
tantes y variables. El comando let reconoce los siguientes operadores:

Operadores aritmkticos:
+ sum.
- Rata.
* Multiplicaci6n
/ Divisi6n (sin decimales).
9% Resto.

Operadores relacionales:
-- Iguala.
> Mayorque.
>= Mayor que o igual a.
< Menorque.
<= Menor que o igual a.
!= Noiguala.

Operadores lbgicos:
&& ANDl6gico.
II OR16gico.
! NOT16gico.

Anulacibn de prioridud;
() Cambia el orden de la evaluaci6n

I96 7- U T l U D M E S DE CALCULO
Programas de U t i l W UNIX

Reglus antinkticas
La utilidad let tambien permite guardar el resultado de un comando let en una variable, no sien-
do necesario especificar en la expresi6n el sign0 d6lar ($) para a d e r al valor de la variable:

$ v-4
$ let var=var+l
$ echo $var
5

El shell Korn inteqreta cada expresi6n como una palabra thica, por lo que la expresi6n a r i t d -
tica ser protegida con caractem comillas si la expresi6n lleva espacim. TambiCn deben
sa protegidos 10s operadaes que tengan un significado especial para el shell.
El shell Korn propurciona UM sintaxis alternativa en expresiones aritm&cas. En vez de utilizar
la palabra let para evalw la expresi6~&ta puede ir encerrada entre dobles caracferes par-
sis y ser tratada como una expresi6n aritm&ca protegida. Adicionalmente, el formato $(( ...))
eval~ael valor de la expresi6n a r i U c a encexrada entre los dobles caracteres parCntesis.

Los siguientes command-lines let son expresiones aritm&cas v&lidas para la utilidad let
$ let suma40t60 resta=100-50
$ echo $suma $rests
loo 50
$ let total==”S* 20 + 4 * 25”
$ echo $total
200
$ let var=”S * (12 + 8)* 9’
$ echo $var
500
$ ((var2 = 10 937 4))
$ echo $var2
2
$ echo $((3600/12))
300

Par defecto, las constantes de las expresiones aritm&cas son evaluadas en base 10, a no ser que
especifiquemos una base altemativa, con el siguiente formato:

Donde base es la base de un ntimero entre 2 a 36 y entre 2 a 63, dependiendo del tip0 de Ordena-
dor; y n es un ntimero de esa base. Par ejemplo: 16#100, indica 100 en base 16 (256 en base 10).
Es deck, el comando let traduce a base 10 el resultado de una expresi6n axitm&ca especificada
en una base de nurneraci6~como se muestra en 10s siguientes ejemplos:

$ let var=16#!100
$ echo $var
256
$ let var-2#010+2#011
$ echo $var
5
$ let var=43#20-10
$ echo $var
6

7 - UTIUDADES DE CALCULO 197


Programas de U t i M UNIX

Ejemplos
El siguiente script, cuenatras, realiza UM cuenta atrh desde el niimero especificado como ar-
gumento del script hasta cero, o desde 10 hasta 0 si no se especifica un argumento:

$ cat cuetlcztras
#!lbinlksh
-
# script: cuenatras R d i una cuenta at&.
if [ $# -eq 11
then
inicio=$l
else
iniciel0
fi
until [ Sinicio -It 0 ]
do
echo "$iicio \cn
let inicio=inicio-l
done
echo

$ cuenatras
10 9 8 7 6 5 4 3 2 1 0

$ cuenatras 5
543210

El siguiente ejemplo utiliza el comando let con el operador de relaci6n ==, para comparar dos
variables. El script resto visualiza un prompt para que el usuario introduzca el primer ntimero
(dividendo), y el segundo mimero que ser6 un divisor potential del primer mimero.
El script rest0 utiliza el operadm m6dulo (resto) para identificar el resto de la divisi6n. Si el
resto es 0, el comando let lo evaltia como verdadero, y el shell Korn ejecuta la primera parte de
la estructura if. Si el resto no es 0, el shell Korn ejecuta la segunda parte de la estructura ir, la
sentencia else.

Observemos que a l referenciar la variable re& dentro del comando let ((rest0 = 0)), el ca-
rkter d6lar ($) que usualmente precede el nombre de UM variable para expandir su valor, no es
necesario especificarlo:

$ cat rest0
#!/binlksh
-
# script: rest0 Indica si una divisi6n es exacta o inexacta.
print "Introduar el dividendo: \c"
read dividendo
print "Introducir el divisor. \cn
read divisor
let resto=dividendo%divisor
if ((rest0 =0))
then
print "Correcto: $divisor es un divisor de $dividendo"
else
print "Incorredo: $divisor no es un divisor de $dividendo"
fi

$ resto
Introducir el dividendo: 24
Introduar el divisor: 6
Correcta 6 es un divisor de 24

198 7 - UIILJDADES DE CALCULO


Progmmas de Utilidd UNIX ~

Utilidad wc
Descnpcih
La utilidad wc es un programa filtro utilizado para visualizar el nfimero de lineas, palabras y
caracteres de uno o varios fichaos, o del statndard-input si no especificamos ningh fichero. Si
especificamos mds de un fichero de entrd, la utilidad wc tambien visualiza el total de lineas,
palabras y caracteres del grup de ficherm especificado.

Formato
wc [-opciones] mhero ...I
Opciones
c Visualiza en el standard-output el nfimero de caracteres de cada fichero de entrada.

-1 Visualiza en e4 sma’urd-outputel nfimero de llneas de cada fichero de entrada.

-w Visualiza en el standard-output el nfimerode palabras de cada ficherode entrada.


Por defecto, la utilidad wc cuenta Uneas, palabras y caractem, y las visualiza en este orden. El
formato de defecto es equivalente a la especificaci6n: wc clw. Para el cornando wc, UM palabra
es una mencia de caractems delimitada por espacios, tabuladares, caracteres nueva llnea o
UM combinaci6n de &os.

Argumentos
fwhero Especifica el nombre o nombres del fichero o ficheros de entrada cuyo contenid0 va a
ser analizadopa la utilidad wc.

Notas
La versi6n Berkeley dispone de la utilidad sum, la cual visualiza el tamaeo de un fichero en
unidades de 512 bytes. La opci6n -c de la utilidad grep visualiza el nfimero de lineas de un fi-
chero que se cmesponda con la plantilla especificada (VK “Utilidad grep”,p6gina 114).

Por ejemplo, si al ejecutar el siguiente scripz, culineas, le suministramos como primer argu-
mento una plantilla y como segundo argument0 un fichero, nos visualizarit el nfimero de Lineas
que tiene el fichero especificado con la plantilla especificada:

$ eat culineas
#!/bin/ksh
-
# scripk cutineas Cue& lineas usando h utilidad grep.
if [ $#-ne 2 1
then
echo ”us0 corcecto: cutineas ‘plantiaa’fzfzero~’
else
echo El fiehero$2 contiene *pepc $1$2’ l!neas con la plantilk $1
6

7 - UTILIDADES DE CALCULO 199


Programas de Utilidad UNIX

Por ejemplo, si queremos saber las lineas blancas que contiene el ficherofsce.txt, emitir el script
culineas con la siguiente plantilla:

$ culineas ‘n$’file.txt
El fwhem f d d s t contiene 7 lineas con la plantilk ^$

Ejemplos
El siguiente comando wc realiza, por defecto, el czilculo de las tres apciones (lineas, palabras y
caracteres) del fichero resto:

$ wc resto
14 55 360 rest0

El siguiente ejemplo visualiza las lineas que contienen 10s fichaosfor2.f y for2.f y la swna de
las lfneas de 10s dos fickos:

$ wc -1for2.ffor2.f
47 for1.f
48 for2.f
65 total

El siguiente ejemplo visualiza el tamail0 de cada programa C de nuestro directorio de trabajo en


curso y el taxnab total de todos ellos, en lfneas, palabras y bytes:

$ wc *.c
47 87 911 prog1.c
18 47 387 prog2.c
98 454 7156 prog3.c
27 67 849 prog4.c
41 71 27% prog5.c
231 726 12099 total

La utilidad wc siempre agrega el nombre del fichero a la salida. Para obtener niimeros dnicos en
la salida, filtrar la salida del comando cat al comando wc mediante un pipe. El siguiente ejem-
plo visualiza el ndmero total de caracteres de los ficheros cuyos nombres finalicen en$ del di-
rectorio de trabajo en curso:

$ echo Los programas Fortran contienen ‘cat *.f I wc c
‘ caracteres
Los programas Fortran contienen 234567 caracteres

En el siguiente ejemplo, la salida del comando who es enviada mediante un pipe al comando
wc. El comando who muestra 10s usuarios alojados en el sistema, visualizando una linea por
usuario. El mmando wc al contar lineas de la salida generada por el comando who obtiene el
niimero de usuarios alojados en el sistema en ese momento. La utilidad awk imprime el primer
campo de la salida del comando wc, el cual se corresponde con el total de lineas:

$ who I wc I awk ‘{ print “Usuarios alojados:”, $1 }’


Usuarios alojados: 25

El siguiente ejemplo visualiza el niimero de directories que tiene nuestro sistema de ficheros:

$ Is -IR I grep I wc I awk ‘{ print “ N h r o de directories:", $1 }’


Nirmero de direetorios: 20

200 -
7 UllLIDADES DE CAL.CUL.0
Utilidad dc

El comando dc es un programa interactivo que nos proporciona una calculadora de oficina de


aritm&ca de precisi6n arbitraria. La utilidad dc toma la entrada del standard-input y visualiza
el resultado en el standard-output. Por defecto, el comando dc apera en base de numeraci6n de-
cimal y con niimeros enters, per0 podemos especificar niimerm fraccionarios y bases de nume-
raci6n de entrada y de salida.

Fomato
dc

Estructura y sintaxis
En conjunto, el comando dc esta estrueturado como un stack o pila, utilizando en el c6lculo
aritm&co la nofacidn polaca inversa. Al emitir el comando dc, el sistema visualiza un prompt
para que introduzcamos nheros, operadores aritmdtim y subcomandos de la utilidad dc para
realizar las operaciones aritm&cas:
niSmero Es el niimero tecleado en respuesta al prompt de la utilidad dc, cuyo valor es i n t r a -
cido en el stack. La expresi6n nzhero es una cadena inintenvrrrpida & dfgitos del 0 al
9. El ntimero puede it precedido de un carikter de gui6n subrayado 0 indicando que
es un mlmero negativo. Un dmero puede contener un punto decimal.

Son los operadares que acepta el comando dc para realizar las operaciones de s u m
(+), rata (-), multiplicaci6n (*), divisi6n (0,
rest0 ($6) y potenciaci6n (*) de los vale
res de la c a b del stack.

C Burra t& 10s valores del stuck. Limpia el stack.

d Duplica el mimero de la c a b del stack.


f Visualiza todos 10s valores del stack.

i Extrae el valor de la cabeza del stack, y lo utiliza como el niimero de la base de nume-
raci6n de la nueva entrada.

I Introduce la base de numeraci6n de entrada en la cabeza del stuck.

k Saca el valor de la cabeza del stuck y lo utiliza como un factor de escala positivo (el
niimero de decimales) en las aperaciones de divisi6n, multiplicaci6n y ptenciaci6n.
Si el subcornando k va precedido de un niimero, &e sera el niimero de decimales
(factar de escala) para dichas operaciones.

Ix Introduce el valor del registro especificadox en el stuck. El registro x no es cambiado.

0 Extrae el nrEmero de la cabeza del stuck, lo utiliza como base de numeraci6n de salida
y limpia el stack.

-
7 UllUDADES DE CALCUU, 201
P Visualiza el valor de la cabeza del stack. Este valor permanece invariable.

Q Con este comando (tambiCn con quit) salimos de la utilidad dc.

SX Extrae el valor de la cabeza del stack, y lo guarda en un registro llamado x, donde x


puede ser cualquier cariicter.

v Reemplaza el elemento de la c a b del stack por la rah cuadrada de ese niimero.

2 Introduce el niimero de elementos del stack en el stack.

Z Reemplaza el nGmero de la cabeza del stack por el ncmero de dfgitos que tiene ese
nGmero.

X Trata el elemento de la cabeza del stack como una cadena de caractaes y lo ejecuta
como UM cadena de mmandos dc.

X Reemplaza el &mer0 de la c a b del stack por el factor de escala y pone el srack a 0.

! Interpreta el rest0 de la linea como un comando del sistema.

Ejemplos
Los siguientes son dos ejemplos de sesiones dc:

$ dc
z 41 # Divide 1entre 4.
P # V i u a l i d resultado.
0
3k # Establecc tres posiaonesdecimales.
z4/p
0350
C P # Limpiamos el stack.
emptystack
I6 63 5 / + p # Divide 63 entre 5 y suma 16 PI resultado.
28.600
I6 63 5 + / p # Suma 63 y 5, el resultado lo divide entre 16.
0335
4
$ dc
210
zoo+
98+
63s
P
25704
4/P
6426
96ZZ % p
8
4AP
4096
QP
64
4

202 7- UTIUDADES DE CALCVLO


Utilidad bc
Descripcih
La utilidad bc es un program intaactivo que nos praporciona aritm&ica de precisidn arbitraria
ilimitada.Con el comando bc podemos utilizar ecuaciones matedticas standard en oposici6n a
la notucidn polucu inversu requerida en la utilidad dc.

Par defecto, la utilidad bc opera en base de numeracidn decimal y con nfimeros enteros, per0
nos permite especificar una base de numeraci6n de entrada y salida en hexadecimal, octal y &-
cimal. TambiCn nos permite especificar una esculu para establecer el nfimero de digitos a la de-
recha del punto decimal.

Fomzato
bc [-opciones] Whro ...I

Opciones
J: Sblo compila en notaci6n de infijo, no invoca la utilidad bc.

-I Incluye U M libreria de funciones matemAticas standar& y establece a 20 el dmero de


dfgitos despues del punto decimal.

Argumentos
fuhero Es el nombre o nombres del fichero o ficheros que van a ser procesados par la utilidad
bc. DespueS de leer el fichero, la utilidad bc espera recibir entrada del standard-input.

Estructura y sintaxis
La sintaxis de la utilidad bc se asemeja a la del lenguaje C. El elemento mi% bilsico en entornos
bc es el nfimero. Los nfimeros son nfimems de precisi6n arbitraria, tanto en la parte entera corn0
en la parte decimal. Los nfimeros pueden ser almacenados en dos tipos de variables: variables
simples y variables matrices. En los nombres de ambas variables deben ser usadas letras miniis-
culas iinicas (a@ representadas como vur).

La utilidad bc admite las siguientes especificaciones:

Comentarios, los males tienen la forma: /* comenturio */.

Variablesde tres clases:

Vuriublessimples: utiiizadas como operandos, asign5ndoIas valaes: vu-valor.


Variables mazrices:Es una matriz con elementos, expresada como: vuflexpresidn].
Vuriubles especiules: ibase, utilizada para establecer la base de numeraci6n de entrada.
obase, utilizada para establecer la base de numeraci6n de salida. scale, utilizada para esta-
blecer el nfimero de dfgitos a la daecha del punto decimal.

-
7 UTlLJDttDES DE CALCUU, 203
Programas de U t i l W UNIX

Operandos, que pueden ser nfimeros de longitud arbitraria con sign0 opcional y punto decimal,
10s cuales pueden incluir las siguientes formas. (Algunas de estas expresiones especiales como
length y scale son usadas en las funciones definidas por el usuario):

(expresidn)
sqrt (expresidn)
length (expresidn)
scale (expresidn)
var (expresidn)

Operadores de distintm t i p :

Operadoresaritmdticos: + - * I 8 A
Operadores incrementales y decrementales: ++ --
Operadoresrelacionales: = > >= e e= !=
Operadoresdeasignacih: = =+ =- =* 4 =% A=

Sentencias?con 10s siguientes formatos:

expresidn
.
[sentencia;.. ;sentencia]
if (expresidn)sentencia
while (expresidn)sentencia
for (expresidn;expresidn;expresih) sentencia
break
quit # Usada para salir de la utilidad bc.

Dejinicidn defwrciones, las cuales tienen el siguiente formato:

define var<var,... ,var) {


.
auto var, . .,var
sentencia ;... ;sentencia
return (expresidn)
1
Funciones que proporciona la libren’a maremdtica cuando especificamos la opci6n -1:

s(x) Seno.
c(x) Coseno.
e(x) Exponencial.
l(x) Logaritmo.
a(x) Arco-tangente.
j(n,x) Funci6n Bessel.

Notas
El sistema UNTX dispone del programas relacionados con el c&ulo aritm&co. As& el programa
interactivo dc, realiza c ~ c u l maritmecos como una calculadora de oficina (ver “Utilidad dc”,
psgina 201); la utilidad units convierte unidades de una medida a m a (ver “Utilidad units”, PA-
gina 206); la utilidad awk,a d e M de manejar y formatear ficheros de texto, dispone de presta-
ciones aritm&icas (ver “PROGRAMACZONEN awk, p@na 153). La utilidad factor de la VKSi6n
System V calcula 10s factores de un niimero dado. Las utilidades expr y let evaldan expresiones
y realizan c~culosaritm&cos (ver “Utilidadexpr”, p6gina 193 y “Utilidad let”, pfigina 196).
Progrumas de Uti1ida.dUNIX :

Ejemplos
Los siguientes son ejemplos de la utilidad bc:

$ bc
78W7 + 20*58 + 55*69
10181
Z20*(47+2&?+55+49)
25320
a=(2ZI*I20)
b=ZOZ8I
a-b
15139
3A7
2187
quit

$
scale = 4 P Eaablece euatro posiaones decindes *I
(Z03+200)/7
43.2857
sqrt(Z237)
35.1710
P Ia utilidad bc nm permite cwvertir niimeros de una base de numeraci6na otn. *I
obase = I4 P V~ualizanlimeros en hexadecimal *I
h e = 8 P Niimeros de cntrada en octal *I
12
A
I23
53
123454
A72E
quit

El siguiente es unprograma bc, llamado fackbc, que calmla la factorial del ntimero que intro-
duzcamos despuh de ser lddo el program. Al ser invocado con la apci6n -I, el comando bc
nos facilita las funciones standard de la libreria matedtica y establece el m5mero resultante a
20 dfgitos despub del punto decimal:

$ catfuLbc
P calcula la factorialde n *I
define f(n) (
auto i,r;
r=t;
for (i=& i e n ; i++) t =* i;
return (e);
1
$ bc -1 factbc
f(51 P Factorial de 5 *I
120
f(Z0) I* Factorial de 10 *I
3628800
r* Exponential *I
7.38905609893065022723
Z5257/1237
123338722706U89894907
qua

7 - UTILIDADES DE CALCULQ 205


Pronramas de Utilidad UNIX

Utilidad units
Descripcibn
La utilidad units convierte unidades expresadas en una medida a otra unidad de medida equi-
valente. La utilidad units s610 convierte unidades multiplicativas; es decir, las unidades pueden
convertirse de un valor a o+m,s610 cuando la conversi6n es hecha con un factor de multiplica-
ci6n. Por ejemplo, las unidarles no pueden convertirse entre grados Fahrendheit y grados Celsius
p q u e el valor 32 debe ser t.umado o restado en la conversi6n.

Formato
La utilidad units es un programa ht~activo,visualizando un prompt con el siguiente formato,
para que introduzcamos las unidades que queremos convertir:

$ units
you have: inch
you wank cm
*2540000e+00
/ 3.937008e-01
you have: AD

E& ejemplo convierte pulgadas (inch) a centimetros (cm).La salida de este mmando units nos
dice que para &term centfmetros se multiplica el nfimero de pulgadas par 2 . m . y pa-
ra obkner pulgadas se multiplica el mlmero de centfmetrm por 3,937004141.Estos mlmeros
esth en notad611exponencial standard, asf 3.937008sOl significa 3.937008 x 10-1, o lo que es
lo mismo: 0.3937008. El segundo nfimero es siempre el recfproco del primero, por ejemplo,
2.54es igual que 1/0.3937008.Para salir del programa units, pesionar <Ctrl-d>.
La mayor parte de las unidades familiares, abreviaturas y prefijos mWcos son reconocidas por
la utilidad units,junto con las siguientes:

pi Relaci6n de la circunferencia y diAmetro.


C Velocidad de la luz.
e Carga de un electr61~
g Aceleraci6n de la gravedad.
force Igualqueg.
mole Ndmero de Avogadro.
au Unidad astron6mica.

El sistema operative dispone de un fichero que contiene UM tabla de conversi6n de las unidades
que usa la utilidad units,/usr/sharefliZ?hnits(en Berkeley) yhsrflibhnitfab (en System V).

Ejemplos
j
El siguiente comando units convierte horas a microsegundos, mostrando que 5 afios es igual a
1.577846 x 1014microsegundos, y que 1 microsegundo es igual a 6.337753 x 10-15 a€ios:
$ units
you have: S y e m
you wank microsec
* 1577846ek14
I 6.337753e-15

206 7- UTILIDADES DE CALCULO


8 - PROCESO BATCH

Introduccwn
Recardemos que en un sistema informiltico existen diferentes formas de proceso: interactivo,
tiempo real, de consulta, batch, etc. En nuestro entarno y dentro del telqrweso, la farma de
trabajo m& comfin es el proceso interactivo, en el cual, para completar el proceso de un dato o
conjunto de datos es neesari0 la intervenci6n del usuario. En conlraposici6n al trabajo interac-
tivo oforeground, existe m a forma de trabajo llamada batch o background.

En el proceso batch, los datos de enlrada e s t h disponibles para un sistema cuando se ordena la
ejecuci6n del trabajo, no siendo necesaria la intervenci6n del usuario durante la ejecuci6n. En
algunos casos el trabajo puede sa planificado; en otros, el sistema ejecuta el trabajo ordenado
cuando la mQuina lo considere maS conveniente. Esta forma de trabajo no implica respuesta
inmediata del sistema al usuario; &e recibe 10s resultados al cab0 de un cierto tiempo.

El sistema UNE dispone del &cter & y de las utilidades at, batch y crontab para submitir
trabajos a batch. Adicionalmente, algunos ordenadores disponen de funciones batch especificas
para enviar trabajos a colas batch.

Procesosforeground y background
Cuando se ejecuta un proceso foreground (comando, shell-script, &.), el shell e s p a a que la
ejecuci6n del promso se complete para visualizar el prompt, y poder sumilnistrar otro proceso al
shell. Si la hnU6n control de jobs esta disponible, el usuario puede mover procesos de fore-
ground a background y viceversa si estamos alojados en el shell C o en el shell Korn.

Unproceso background es un proceso que nos es ejecutado en foreground, el proceso es sub-


mitido a background mediante un command-line que finaliza con un carilcter ampersand (&).
Cuando un proceso background se esta ejecutando no es necesario esperar a que se complete la
ejecuci6n para visualizar el prompt y poder suministrar procesos adicionales al shell. Si estamos
trabajando bajo el shell Korn o el shell C y disponemos de la fimci6n control dejobs, podemos
mover pracesos de background aforeground y viceversa.

Control de jobs
Cuando suministramos un proceso al shell C o al shell Korn mediante un command-line finali-
zado con un car6cter ampersand (&), el shell visualiza un nlimero de job (iob-id) y un identi@
cador numkrico del proceso (PID) de la farma:

[l] 1234
Especificando eljob-id ([l])precedido del car6cter % (en el shell Korn tambien puede especa-
came el PID (1234)) junto con 10s comandos apropiados, podemos: mover procesos defore-
g r u d a background y viceversa, parar un proceso, reanudarlo despueS, eliminarlo y obtener
informaci6n de los procesos en curso.

-
8 PROCESO BATCff 207
Programas de Utilidad UNIX

Los siguientes son 10s comandos utilizados en el control dejobs:

bg Uob-id ...] Reanuda 10sjobs foreground suspendidos, especificados enjob-id, pa-


~ ~ 0 1 a0background
s para que continfien su ejecuci6n. Si no es espe-
cificado nin@njob-id, es pasado a background eljob en curso.

fg Ijob-id ...I Cadajob especificado enjob-id es pasado de background a foreground


para que continiie su ejecuci6n Si no es especificado ningtinjob enjob-
id, es pasado aforeground el job en curso.

jobs [-lpn] ljob ...I Visualiza informaci6n @ar defecto: job-id, estado del job y nombre de
proceso) de cadajob especificado enjob, o de todos 10sjobs en curso si
no es especificado ninguno. La opci6n -I visualiza 10s IDS de los proce
sa,en adici6n a la infarmaci6nde defecto. La apci6n -p s610 visualiza
los IDs de proceso. La opci6n -n s610 visualiza losjobs suspendidos y
10s finalizados despue de la filtima notificaci6n.

<Ctrl-Z> S u s p d e el pmcesoforeground en curso, visualifiom el job-id del


proceso y eI prompt del shell. Ya que tenemos el job-id del proceso, lo
normal es pasarlo a buckground para que continfie la ejecuci6n.
Los siguientes ejemplos mustran el manejo de la funci6n control dejobs. Primero, enviama a
buckground el script grandes de la p&gina133, de la siguiente forma, el cual nos visualiza el
job-id ([ll) y el ID del proceso (17716):

$ grandes I >salflan 2>/devbauU &


[l] 17716

Seguidamente, enviamos aforeground el siguiente fichero de comandos, llamado horafe

$ cat horafe
sleep 600
echo
-
date ‘+%H:%M %d %h, 19%f

$ horafe

Observemos, que despuQ de presionar < R W > desaparece el prompt, no pudiendo emitir
ni@n comando. Si ahara presionamos <Ctrl-z>, el proceso horafe es parado, visualiz6nclonos
sujob-id ([2]), el estado del proceso (stoppeen)y el prompt del shell ($):

Ahora es el momento de pasar a background el proceso horafe emitiendo el siguiente comando:

$ bg %2
[2] horafa

Si h a emitimos el comandojobs sin opciones, obtendremos la siguiente salida:

$jobs
[2] + Running horde
-
[l] Running grandes I > salgran P IdevInuU &

208 -
8 PROCESO BATCH
Progmmas de U t i l W UNIX ;

Ahora como ejemplo, podemos pasar aforeground cualquiera de 10s dos procesos background,
par ejemplo el script grandes para que siga ejecutihdose en modo interactivo:

$fg%l
grandes 1 > salgran b idev/null&

Cuando un job se estA ejecutando en buckground puede ser parado con el comando stop. Des-
pub, para reanudarlo emitir 10s comandos bg o fg:

$stop %1
[2] + Stopped(SIGST0P) horafe

La funci6n control dejobs tambit%permite eliminarjobs con el comando kill, de la forma:

$ kill 962
[lJ + Tednated grandes1> salgran 2> /dev/nuIl&

El job en curso tambien puede ser referenciado sin especificar el job-id, especificando un ca-
ratter tanto por ciento: %, dos caractens: % %, o un cadctex % seguido de un signo mik: %+.

UtiZidad nohup
Descripcidn
La utilidad nohup hace que el comando especificado en el c o d - l i n e nohup submitido a
background sea ejmtado aunque el usuario haga log-out o haya un cuelgue del sistema. Nor-
malmente, cuando hacemos log-out, el sistema elimina 10s procesos iniciados. Si no redirigimos
la salida del proceso ejecutado con el comando nohup, la salida del standard-otput y del stun-
dard-error de ese proceso es enviada al fichero nohup.out del directmio de trabajo en curso.

Fomato
nohup comando [wg7unento]

Argurnentos
comando Es el comando o script que va a ser ejecutado al emitir el command-line nohup.
argumento Es el argumento que puede ser requerido por el comando o script que va a ser eje-
cutado en background por la utilidad nohup.

Notas
La utilidad wait est4 relacionada con la hnci6n control dejobs, la mal, cuando es emitida con
un ID de proceso, da instrudones al sistema para que nuestro proceso situado en background
espere para que notifiqueel status de terminacida La utilidad ps adem& de facilitar el identifi-
cador num&co de un proceso (PID)tambikn nos facilita informaci6n de 10s procesos que se es-
tajl ejecutando (ver “UfiZidudps”, p6gina 7).

-
8 PRLWESO BATCff 209
Progmnaas de Utilidad UNIX

Ejemplos
El siguiente command-line submite el script grandes a modo background, enviando 10s resulta-
dos al ficheronohup.out. (E1comando ps nos muestra la ejecuci6n del proceso):

$ nohup grandes I &


[I] 12149
$ Sending output to nohupout
$

$ PS
PID TTYTIME CMD
74037 poo4 003 sort
74036 pOO4 007 g-P
74034 pOO4 0:OO ksh
74039 pOO4 0:OO head
74038 pOO4 0:OO awk
75725 poo4 0:OO ps
63181 POoQ 0:03 ksh
74035 pOo4 339 k

Utilidud at
(Versibn Berkeley)

Descripcidn
Aunque ambas versiones (System V y Berkeley) disponen de la utilidad at, las opciones y ar-
gumentos diEeren significativamente, por lo que la utilidad at es &scrita par seprado. (Ver
“Utilidadat” (Versi6nSystem V), pagina 217).

La utilidad at ham que el sistema aperativo lea entradas del standard-input (cuya lista de c e
mandos ser6 finalizada presionando <Cfrl-d>) y nombres de fichero como arguments del
command-line, para sex ejecutados en batch a la h a (y apcionalmente a la faha) especificada.
Al command-lineat tambih se le puede suministrar entradas redireccioxxlndole un fichero. Por
defecto, las salidas del szdouz y del stderr relativas aljob submitido por la utilidad at son envia-
das al correo del usuario que emiti6 el comando at, a no ser que Sean redirigidas a otro lugar.

Formato
Para planifcarjobs:
at [c][-k][-SI [-m][-ffichero][-q cola] hora [fecha][+incremento] mhero]
at [c][-a][-SI [-m][-ffichero][-q cola] -t [fecha-bra]

Para visualizarjobs planificados:


at -1 -0 [-q cola] [us& . .I
at -I Vob-idJ
at -n [usuario]

Para eliminarjobs planificados:


at -r [-Fi] [job-id . .I
at -r [-Fi] [-uusuario]

210 -
8 PROCESO BATCH
Pmmamas de Urilidad UNIX.

Opciones
-c Solicita que el job planificado sea ejecutado bajo el shelf C.

-ffiheru Especifica el nombre delfichero-script que va a ser usado, en vez de leer entradas
del standard-input. El fichero especificado en el argumentoficheru contiene 10s
comandos que van a ser ejecutados.

-F Suprime la verificaci6n de borrado. Esta opci6n se utiliza con la apci6n -r.

4 Especifica borrado interactivo. Esta opci6n se utiliza con la apei6n -r.

-k Solicita que esejob sea ejecutado bajo el sheffKorn.

-I [usuadu] Esta opci6n emitida par un usuario sin privilegios root, visualiza 10sjobs encolados
del usuario que emite el comando at. Emitida por un usuario root, si no se especifi-
ea unjubid, son visualizados todos 10s jobs encolados, o 10s del usuario especifi-
cad0 en usuariu.

-m Envfa al copre0 eleetr6nico del usuario, el standard-output y el standard-error del


trabajo ejecutado, notificando la terminaci6n. (Ver “Utifidad maibc”, pagina 311).
Este es el defecto, a no ser que d i c h salidas sean redirigidas a otro lugar.

-n [usutUio]Visualiza el ntimero de ficheros encolados del usuario en cu~so.El usuario root


puede visualizar el ntimero de procesos de un usuario dado.

-q c u b Especifica la cola en la que va a ser ejecutado el job. Por defecto, la utilidad at en-
via eljob a la cola a Si el nombre de cola se especXica con la apci6n -I, la bfisque-
da se limita a la cola especificada. Las colas est411definidas corn a, b, e y f (ver
opci6n -r).

-0 Visualiza los jobs en el orden en el que han sido planificados. Est opci6n s6Io es
6til cuando es usada con la apci6n -1.

-rjob-td Borra 10sjobs especificadas enjub-id que previamente fueron planificados con la
utilidad at. Un usuario sin privilegios root, s610 puede borrar sus propiosjobs. Esta
opci6n puede ser usada en combinaci6ncon las opciones 4. -Fy -u

El ideflicadw &job uob-td) es obtenido cuando submitimos un trabajo con el


comando at, o emitiendo el comando at -I si el job est4 encolado, siendo visualiza-
do con el siguiente formato:

Donde usuarjo identifica al usuario que planific6 el job, XX~XXXXXTes un ntlmero


de 9 dlgitos, ey indica el tip0 &job o el nombre de la cola, donde:

a Indica unjob submitido por el comando at.


b Indica un job submitido por el comando batch.
e Indica que eljob se ejecuta bajo el shell Kom.
f Indica que el job se ejecuta bajo el shell C.

-S Solicita que esejob sea ejecutado bajo el shelf Boume. Es el defecto.

-
8 PROCESO BATCH 211
Programas de Utilidad UNIX

-tfecha-hora
Indica la fecha y hora a la que sail ejecutado el job especificado. El argumentofe-
cha-hora de la opci6n -t tiene el siguiente formato:

I
Donde cada par de letras iguales consta de dos digitos con el siguiente significado:

cc Especifka 10s dos primeros dgitos del afio.


yy Especifica 10s dos lsltimos digitos del afio.
MM EspecXica el mes del afio (de 01 a 12).
dd Especifica el &a del mes (de 01 a 31).
hh Especifica la hora del dia (de 00 a 23).
mm EspecWica 10s minutos de la hora (de 00 a 59).
ss Especifica 10s segundos del minuto (de 00 a 59).

El afio (cc eyy) son opcionales. Si no se especifica un afio, es asumido el afio en


curso. Si se especificayy y no se especifica cc, los digitos especificados en cc son
definidos como sigue:

Si el valor de 10s digitos especificados enyy estA entre 70 y 99, es asumido


que el valor de 10s dfgitos de cc es 19.
Si el valor de 10s digitos especificados enyy est5 entre 00 y 37, es asumido
que el valor de los digitos de cc es 20.

El valor de defect0 dess es 00.La h a es afectada por la variable de entorno TZ.

-uusuario Emitida por un usuario sin privilegios root, borra 10sjobs encolados de ese usuario.
Emitida por un usuario root bopra losjobs de los usuarios especificados, ode todos
10s usuarios si es emitida sin argumentos. Esta opci6n &be ser usada con la opci6n
-r de la forma:

at -r -uuslLari0

Argumentos
hora Es la hora en la que el job sera ejecutado. El argumentohora puede sa una de las
siguientes especificaciones:

1. Un mlmero seguido por un sufijo opcional. La utilidad at intqreta:


Un nrimero de uno o dos digitos como horas.
Un nrimero de tres o cuatro digitos como horas y minutos.
Un nrimero indicando horas y minutos con el formato: horuxrninutos.
Los sufijos siguientes desputs de la hora indican:
am Antes del mediodfa.
pm Despuh del mediodia.
zulu Hora universal UTC (Coordinated Universal Time).

Si no se especifica el sufijo am ni pm, la utilidad at usa el formato del reloj de


24 bas.

212 -
8 PROCESO BATCH
Prognimas de Utilidad UNIX--r

2. Una de las siguientes palabras como horas especiales:

noon Indica mediodia.


midnight Indica medianoche.
now Indica ahora mismo.
A Por am.
P Porpm.
N Por noon.
M Por midnight.

El argument0hora especifica una hora por llegar. Por ejemplo, si la hora en curso
es 9:02 p.m. y especificamos la h a 9 p.m., el trabajo es ejecutado a las 9 p.m. del
d€asiguiente.

fecha El argumentofecha es opcional e indica la feha en la que el job va a ser ejecutado.


Comofecira puede especificarse:

Un nombre de la semana completo o abrewiado (Monday oMon, etc.).


Un nombre de mes completo o abreviado (Janvier o J m , etc.), seguido de un
nfimero que hace referencia al dfa de ese mes.
Un aiio a continuaci6n del dfa del mes precedido de un signo coma (3.
El dia en curso con la palabratudhy.
El dia siguiente con la palabcatomorrow.

Si el mes especificado es menor que el mes en curso (y no es dado el aiio), el aRo


asumido es el afIo siguiente.

incremento Este argument0 es opcional y puede espedficarse un signo xrds (+) o la palabra
especial next seguidos de las siguientes palabras (en singular o en plural):

minute Minuto.
horu Hora.
day Dfa.
week Semana.
month Mes.
year Aflo.
@hero Es el nombre del fichero que va a ser ejecutado, el cual puede ser redireccionado
como entrada a la utilidad at si en el command-line no se apecifica un fichero con
la opci6n -f. Si en el command-line at no se especifica un fichero de una de estas
dos formas, la utilidad at espera que la entrada sea introducida desde el terminal, la
cud sera finalizada presionando <Cfrl-d>.

Notas
Un usuario puede utilizar la utilidad at si el fichero h s r ~ / c r o nod existe,
~ ~ y si existe,
su nombre de login debe star incluido en dicho fichero y no estar incluido en el fichero
ItLsr/Zib/crodat&ny. El administrador del sistema puede permitir un acceso global a la utilidad
at, borrando el fichero ut.allow y creando un fichero atdeny vado.

Adicionalmente, el sistema Berkeley dispone de las utilidades atq, atrm y leave (tratadas en las
pfiginas 214 y 215) para ayudar a manejar losjobs submitidos a batch con la utilidad at.

-
8 PROCESO BAmH 2Z3
Progmmas de Utilidad UNIX

Utilidad atq
(S6l0 en la versi6n Berkeley)
La utilidad atq visualiza los jobs encolados submitidos por la utilidad at. El comando at emiti-
do sin Opciones visualiza losjobs encolados por el orden en el que van a ser ejecutados.

Fomtato
atq [-opciones] [us& ..I

Opciones
-c Visualiza la cola clasifichdola pur orden en el que 10sjobs heron submitidos.

-n Visualiza el niimero dejobs encolados.

-q cola Visualiza 10s trabajos de la cola especificada en cola.

Argumentos
uswnio Un usuario sin privilegios root s610 puede visualizar sus propiosjobs. Utilizado pur un
usuario superuser, visualiza losjobs de 10s usuarios especificados.

Utilidad atrm
(S6lo en la versi6n Berkeley)
La utilidad atrm se utiliza para eliminarjobs encolados que heron emitidos con el comando at.

Fomtato
atrm [-opciones] uob-id ..I [usuario .I

Opciones
-a Borra todos los jobs del usuario que emite el comando atrm Si esta opci6n es utiliza-
da por un usuario superuser, todos Iosjobs de la cola especificada son borrados. El ca-
riicter gui6n (-) es equivalente a la apci6n -a, per0 esti4 en desuso.

-f Barra nuestrosjobs especificadosenjob-id, o todos si especificamos nuestro usUario.

-I Visualiza un prompt antes de que el job sea borrado, UM respuesta y al prompt hace
que eljob sea borrado.

Argumentos
job-id Es el identificador deljob ojobs que van a sa borrados.
usuario Especifica el nombre del usuario o usuarios cuyosjobs seriin borrados.

214 -
8 PUOCESO BATCH
Programas de U t i l W UNIX

Utilidad leave
(S610 en la versi6a Berkeley)
La utilidad leave puede ser usada como recopdatorio. Cinco minutos antes de la hora especifica-
da en el command-line, la utilidad leave nos visualiza el mensaje: You have to leave in 5 mi-
nutes.; pasados 5 minutos nos visualiza el mensaje: Just one more minute?; y seguidamente,
cada minuto y durante 10 minutos nos visualiza el mensaje: You're going to be late!.

Formato
leave [+I [ h h m ]

Argumentos
hhm Es la hora y minutos del dia en format0 de reloj de 24 horas. La hora especifcada es
convertida a formato de reloj de 12 horas, asumiendo que la acci6n se va a proclucir en
las 12 hopas siguientes. Si la hora es precedida de un sign0 m& (+), la alarma es acti-
vada a la hora resultante de s u m la h a en curso maS la hora especificada.

Si no especificamos una bra, la utilidad leave visualiza el siguiente mensaje:


When do you have to leave?

Presionando < R E l " > salimos de la utilidad leave; si especificamos una ha,se asume que
sera la hora usada como recordatorio.

El siguientecomando leave, nos visualizara el primer mensaje recosdatopio a las 1510 b a s .

$ leave 1515
Alarm set for Thu May 27 1515:W 1999

Ejemplos
Cualquiera de los siguientes command-lines at, planifka el script limpia para que sea ejwtado
el pr6ximo 24 de junio a las 15:OO h a s , enviando el resultado a nuestro correo electr6nico:
$ at 3:OO pm June 24 bin/Iimpia
$ at 3 P Jun 24 bin/limpia
$ at 1500 Jun 24 bin/limpiu
job usuario.794165508.aat 24 Thu Jun 15:OOOO1999

El siguiente script, recuerda, va a ser planificado para que sea ejmtado a las 14:OO horas por
el comando at, por lo que a dicha hora recibiremos un mensaje recordatorio en nuestro correo:

$ cat recuerda
# script: recuerda
echo USON LA!% 'date '+% H:%M,p HORA DE COMER."

$ at 1490
maik milogin <recuerda
<cfrz4i>
at 25 Tue May 14oO:OO1999
job usuario.927544800~1

-
8 PROCESO BATCH 215
Program de U t i l W UNIX

El siguiente ejemplo muestra como utilizar el comando at para enviar un mensaje al cmeo del
usuario lopez el dfa de su cumplearios a una hora determinada:

$ at O M 5 am May 31
banner FELIZ CUMPLEAAifOS Im& Lopez
<CtrLch
a 31 Mon May 08:15:00 1999
job ~ d 9 7 2 2 3 1 4 0 5 at

El siguiente ejemplo nos visualiza el nfimero dejobs que tenemos encolados:

$ atq -n
3 files in the queue

Cualquiera de 10s tres command-lines siguientes visualizar6 nuestrosjobs encolados:

$ at -1
$ at -1 usuario
$ atq
job usumiO.7941655oSa Thu Jun 24 15:OO:OO 1999
job usumio927544800a Tw May 25 14:OO:OO 1999
job usumio372231405.a Moa May 31 08:lSOO 1999

Cualquiera de los dos command-lines siguientes bctrrarit de la cola el job: usuario.927544800.a:

$ at -r uswrio.927544800.a
$ atnn -f usuario.927~44800.a
at fdc usuario927544800.adeleted

El siguiente comando atrm w5 facilita unprompt para que decidamos si el job visualizado va a
ser o no barrado de la cola:

$ atrm -i usuario
delete usuariO.7941655089?(y for yes) n
delete urrr(uio.972231415.a? (y for yes) y
at Ne: usuruio972231415a deleted

El siguiente comando at submite a batch el script backup para que sea ejecutado lo antes posi-
ble bajo el shell C, enviando la salida del script al m e o del usuario que emiti6 el comando a t

$ at c now /bin/backup
job usrrario.927732015.fat Wed May 26 17:20:15 1999

El siguiente comando at, submite unjob para imprimir el fichero maestro hoy a las 24 horas:

$ at midnight
lpr Z22x empkadoslntaestro
<C&l-d>
job usuruio927756000aat Thu May 27 0o:OO:OO 1999

Cualquiera de 10sejemplos siguientes submite a batch el script semanal para que sea ejemtado
el viernes de la ~ e m pr6xima
a ~ a las 18:30 horas, enviando el resultado a nuestro cmeo:

$ at 18:30 Fri +1 week < semanal


$ echo semanal I at 6:30 prn Friday next week
job usuari4.928513800.a at Fri Jun 4 18:3000 1999

216 -
8 PROCESO BATCE
Programus de U t i l W UNIX I- I

Utilidad at
(Versidn Sysfem V)

Descripcwn
La utilidad at lee comandos del standard-input y ficheros de comandos del command-line,para
ser ejecutados en modo batch a la fecha y hora especificadas. Las salidas del standard-output y
del standard-error generadas par 10sjobs at son enviadas al correo electr6nico del usuario que
emiti6 el comando at, a no ser que sean redirigidas a otro lugar.

A 10s usuarios cuyos nombres de login e d n incluidos en el fichero hsr/Zib/croda&m se les


permite war la utilidad at. Si el fichero aL&w no existe, el fichero hsrM/croda&&ny es
verificado para demminar si a un usuario le es denegado el acceso a la utilidad at. Si ninguno
de estos dos ficheros &te, s6lo el usuario root puede submitir jobs con el comando at. Un fi-
cheroatdeny nulo significa que se pennite el us0 del comando at a todos 10s usuarios.

Formato
Para planificarjobs:
at [-m] [-ffichero] [-q nombrecoh] -tfecha-hra
at [-m] [-ffihru] [-q nombrecola] espfecha-horn
Para rnalizarjobs planificados:
at -I -q nodre-coh
at -1 [afjob-id...I

Para eliminarjobs planifkados:


at -ratjob-id 0.8

Opciort es
-ffihero Especifica el nombre del fichero de entrada que va a ser ejecutado por la utilidad
at, en vez de entradas del standard-input.

-I [atj o b - a Visualiza los jobs planificados en espera de ejecudbn del usuario que emite el
comando si no es especificado nin@n argumento atjob-id. Si es especificado al-
gtln argumentoafjob-id,s610 es visualizada infcxmaci6n de losjobs dados.

-m Envfa un mensaje al correo del usuario que invoc6 el comando at despub de ha-
berse ejemtado el proceso at, anunciindole su finalizaci6n Por defecto, el stdout
y el stderr pro&cidos por el proceso l a recibe el usuario en su correo electr6ni-
co, a no ser que sean redirigidos a otro lugar. La utilidad at envfa un mensaje al
correo electr6nico aunque el job no genere salida.

-q nombre-cola
Es el nombre de la cola en la que va a ser ejecutado eljob. Por defecto, la utilidad
at envfa eljob a la cola a Pueden especifime 25 colas diferentes (a, b, d-z).

-r [atjobw Borra 10sjobs d a b en el argumento atjob-id que heron planificados con la uti-
lidad at. El usuario s610 puede borrar sus propiosjobs, o no ser que sea root.
-
8 PROCESO BATCH 217
Programas de Utilidad UNIX

-tfecha-bra
Submite el job que sail ejecutado a la fecha y hora especificada en el argumento
fecha-hora, el cual tiene el siguiente formato:

Donde cada par de letras iguales consta de dos digitos con el siguiente significado:
cc Especifica los dos primews digitos del aAo.
yy Especifica los dos ciltimos digitos del aAo.
M M Especifica el rnes del afio (de 01 a 12).
dd Especifica el dfa del mes (de 01 a 31).
hh Especifica la hora del dia (de 00 a 23).
mm Especifca 10s minutos de la hora (de 00 a 59).
ss Especifica los segundos del minuto (de 00 a 59).

El afI0 (cc eyy) son opcionales, y si no se especifica un afio, es asumido el afio en


curso. Si se especifkayy y no se especillca ce, el valor de los digitos de cc sail 19
siyy estA en el rango 69-99. cc tendril valor 20 si yy estii en el rango 00-68.

Atgumentos
espec-fecha-hura
Es la especificaci6n de la fecha y de la hora. Consta de una hora, seguida
nalmente: de unafecha, de u11 incremento, o del nombre especial now.

La hora puede ser especificada mmo un niimero de dos digitos indicando horas;
como un nzlmero de cuatro digitos indicando minutos; altemativamente podemos
especificar la hora con dos ntlmeros separada6 con un signo dos puntos, significan-
do hora:minutos. Pueden ser especificados los sufijos am opm usaodose el furmato
de reloj de 12 horas; si no se specifican estos sufijos, la utilidad at usa el formato
de reloj de 24 horas. Asf mismo, pueden ser usados 10s sufijos gmt, utc o zu& para
indicar una hora GMT. Tambien son reconocidos los nombres noon y midnghf.

Lafechu puede ser especificada como un nombre de rnes seguido de un n~merode


dia (y tambien de un ntlmero de afIo precdido opcionalmente de un signo coma) o
el dia de la ~ ~ I I (completo
I ~ M o abreviado). Son reconocidos dos &as especiales:
today y tomorrow, siendo asumido today si la fecha no es especificada y la hora
dada es mayor que la hora en curso, y tomorow si la h a especifcada es menor
que la hora en curso. Si el mes especificado es menor que el mes en curso (y no es
dado ningcin aiio), es asumido el aAo siguiente.

El incremento es simplementeun niimero precedido del signo maS (+), o la palabra


nexf,seguidos de las palabras: minute, hour, day, week, month oyear. La palabra
especial next es equivalente a un incremento de +l.

atjob-id Este argumento es utilizado para borrar el job especificado enjob-id si se utiliza la
opci6n -r, o para visualizarlo si se especifica la opci6n -I y est4 en cola. Eljob-id es
obtenido al submitir el job o emitiendo el comando at -I si el job est4 encolado,
siendo visualizado con el formato: usuario.-y. Don& USZK&O identifica
a1 usuario que planific6 el job, XXX~XXXXTes un nzlmero de 9 digitos, ey indica el
nombre de la cola.

218 -
8 PROCESO BATCH
Utilidad batch
Descnpcidn
La utilidad batch, como la utilidad at, a q t a comandos como entrada del standard-input (la
cual sera finalizada presionando <Ctrl-d>) y nornbres de fichero en el command-line, para ser
ejecutados en modo batch cuando el nivel de la carga del sistema lo permita. Par defecto, la uti-
lidad batch envfa las salidas del standard-output y del standard-error relativas al proceso e@-
cutado, al correodel usuario que submiti6 eljob, a no ser que sean redirigidas a otro lugar.

La utilidad batch trabaja como la utilidad at, except0 que la utilidad batch no puede planificar
los trabajos a horas determinadas, y no dispone de opciones ni de argumentos. La utilidad batch
es equivalente al comando at now.

Formato
batch

Ejemplos
Usualmente, los t r a b a , ejecutados en batch suelen sa de &ran envergadura. JA utilidad batch
permite submitirjobs de distintas formas, dependiendo de la entrada suministrada. El siguiente
ejemplo mestra el us0 del comando batch cuando tenemos que ejecutar varios comandos:

!$ batch
primer comando

dltimo c o d 0
<Ctfl-lb

El siguiente ejemplo, envfa el script granJob a modo batch para que sea ejecutado cuando la
carga del sistema lo permits, enviando la salida generada pur el script a1 ficherosalgrm~~ob:
$ batch
gnurjob >s d g r a n j o b
<CtrlA
job usd927639919.b at Tue May 25 145533 1999

El siguiente comando batch submite a batch el script ejefor2, ubicado en nuestro directorio
bin, utilizando la redirecci6n de entradas, y enviando la salida generada a nuestro coffee:
$ batch <bidejefor2
job usuurio927248029.b at Tue May 25 1515111999

Otra forma de submitir un job a batch con el comando batch, es utilizando la funci6n here do-
cument, como se muestra en el siguiente ejemplo:

!$ batch << EOF


find / -name core -print 2> /dev/nuU
EOF
job wtutiu927650493.b at Tue May 25 152534 1999

-
8 PROCESO BATCH 219
Programas de Utilidad UNIX

Utilidad crontab
Descripcih
La utilidad crontab planifica, submite, modifica, edita y elimina entradas del fichero crontab
(el fichero dado en el command-line crontab), cuyas lineas constan de campos en 10s que son
especificados 10s comandos o scripts que va a ser ejecutados peri6dicamente en modo batch a
las fechas y horas &!specificadas. El fichero especificado en el command-line crontab es copiado
al directoriowontabs del sistema, el cual contiene 10s ficheros crontab de todos 10s usuarios.

A 10s usuarim cuyos nombres de login est411 incluidos en el fichero /usrN/crodcrorrw se


les permite usar la utilidad crontab. Si el fichero cronrrllow no existe, es verificado el fichero
/usr.ib/crodcrorr&ny para determinar si al usuario se le niega el acceso a la utilidad crontab.
Un fichero crorrdeny nu10 puede significar que se permite el us0 del cornando crontab a todos
10s usuarim.

Por defecto, la utilidad crontab envia las salidas del stdout y del stderr relativas al proceso e&
cutado, al cop~eodel usuario que submiti6 el job, a no ser que sean redirigidas a otro lugar.

Para ejecutar 10s trabajos submitidos con la utilidad crontab, el sistema dispone de un programa
denominado cron que se ejecuta en modo batch desde un script cuando se inicializa el sistema.
Este proceso recibe el nombre de daemon croe El daemon cron realiza una comprobaci6n de
10s ficheros crontab y at a intmalos concretes (aproximadamente cada minuto) cornprobando
si existen trabajos para ejecutar, de sa asf 10s ejmta. El daemon cron va anotando todas sus
actividades en un fichero log.

Si eljob planificado va a ser ejecutado s6lo una vez, el usuario podra utilizar el comando at o el
cornando batch (ver “Utilidadat”, pitginas 210 y 217, y “Utilidad batch”, pitgina 219).

Formato
crontab mhero]
crontab [-opciones]

Opciones
-e Edita nuestro fichero wontab. Cuando la edici6n es terminada, la utilidad crontab
instala la nueva entrada como la entrada crontab del usuario.

-1 Visualiza el contenido de nuestro Echero crontab.


-r Bma nuestro fichero crunfub del directorio crontabs.

-v S610 en la versi6n Berkeley. Visualiza el nombre de nuestro fichero crontab con la


fecha y hora de la tfltima modificaci6n.

Argumentos
fiehero Es el nombre del fichero crontab que sera especificado en el command-line crontab,
el cual contiene las especificacionescrontab en el formato descrito seguidamente.

220 -
8 PROCESO BATCH
Prommas de U t i l W UNIX -+

Formato del fichero crontab


Cada lfnea del fichero crontab consta de seis campos separados por espacios o tabuladom. La
informaci6n de 10s campos especzica &do s e r h ejecutados los comandos o scripts, y 10s
nombres de &os. Los campos pueden contener la siguiente infiimaci6n:

El primer campo especifica 10s minutos (de 0 a 59).


El segundo campo especifica las horas (de 0 a 23).
El tercer campo especifica el &a del mes (de 0 a 31).
El cuarto campo especifica el mes del afio (de 1 a 12).
El quinto campo especifka el dfa de la semana (de0 a 6, de doming0 a &ado).
El sexto campo especifica el script o comando del shell que va a ser ejecutado a la hura y
fechas especificadas.

En 10s cinco primers campospodemos especificar:

Un nfimero enter0 dentro de 10s valores villidos especificados amiba.

*Des nfimeros enteros sqarada6 par un caracter gui6n (-), indicando un rango complao.
Par ejemplo, la especificaci6n 1-15 en el campo tercer0 indica que el trabajo Sera ejecutado
10s dfas 1 al 15 del mes, ambos inclusive.

Una lista de mfmeros entaos sqarado6 par caracteres comas, indicando el valor real de
cada mlmero. Por ejemplo, la especificaci6n 1,3,5 en el campo quinto indica que el trabajo
sail ejecutado 10s lunes, mi&coles y viernes.

Un carhxer asterisco(*) para Seleccionar todos 10s valares villi&. Ek decir, si en el campo
cu m aparece un asterisco, el trabajo se ejecuta todos 10s mesa, si el asterisco aparece en
el primer campo, el trabajo se ejecuta cada minuto, etc.

La especificaci6n del dia en el que va a ser ejecutado el trabajo puede hacerse en dos cam-
pos (dfa del mes y dia de la semana). Podexnos especificar ambos campos, o un s610 cam-
po. Si especifkamos dos campos, pur ejemplo la siguiente linea:

0 0 1,15 * 1 com(UuI0

podrfa ejecutar eI trabajo espediicado en c o r n d o a media noche todos los lunes y 10s &as
1 y 15 de cada m a . Si s610 especificamos un campo, 10sotrm campos deberh establecerse
a un &cter asterisco (*). Por ejemplo, la siguiente linea:

0 0 + * 1 cornando

podria ejecutar el trabajo especificado en cornando todos 10s lunes a media noche.

El campo sexto de una entrada de un fichero crontab es un comando o shell-script que sera eje-
cutado pur el shell a la hora y fechas especificadas. Un carikter tanto pur ciento (a)incluido en
este campo (a no ser que se especifique un carkta barra inversa 0))es tratado como un cardcter
nueva linea. El shell s610 ejecuta la primera lfnea del campo del comando o script (hasta un ca-
r6cter 8 o eof). Las otras lineas quedan disponibles para el comando o shell-script como del
standard-input.

En un fichero crunkrb, las lineas blancas o las lineas que comienzan con un car6cter nslmero (#)
son ignoradas.

-
8 PROCESO BATCH 221
Programas de U t i W UNIX

Ejemptos
Inicialmente, un fichero crontab es creado con un editor. Supongamos que el usuario operator
ha creado d siguiente fichero, llamado won-operutor, y @ere ejecutar a las 2:OO b as de lu-
nes a vimes el script backup-diario, recibiendo los resultados de la ejecuci6n en su carrm:

$ cat cion-operator
4 Fichero crontab cron-operator
#
0 2 * * 1-5 /usr/users/operotorhinfbackup-ddo

Entonces el usuario operuror emitirii el comando crontab especKicand0 su fichero crontab m


mo argument0 del command-line para instalarlo en el directorio crontabs del sistema y pueda
ser ejecutado con la periodicidad deseada:
$ crontab cion-operutor

UM vez que nuestro fichero crontub ya est& instalado,el fichero puede ser modificado inclu-
yendo nuevas entradas o modificando las existentes. Estas modificaciones deben ser actualiza-
das en el directoriocrontabs. Ambas operaciones pueden realizarse de dos fonnas:

Invocar el editor con nuestro fichero crontab, haaxle las modifcaciones pertinentes, y
submitiflo al directorio crontabs con la utilidad crontab:
$ vi won-operator
- M d i j h ~ i -~ a ~
$ crontab cion-operator

Invocar el comando crontab con la apci6n -e, editando asf nuestro fichero crontab, hacerle
las modificaciones pertinent@ y salir. (El comando crontab e reconwe nuestro fichero
crontab y lo llama con el editor establecido en la variable EDITOR, al salir del editor
nuestro ficharo modificadoqueda admhzado e instalado en el directorio crontabs):
$ crontab e
- Mdjkacwnes -
Las siguientes son entradas crontab vaidas, que pueden incluirse en un fichero crontab. Por
ejemplo, el siguiente script, limpia, se ejecutarii todos 10s lunes y mi&coles a las 7:30h a s :
30 7 * * 1,3 /usr/usersIoperator/bin/limpia

La siguiente entrada visualizarii en la consola del operador la fecha y hora, cada cuarto de hora:
0,15,30,45 * * * * echo'date'>/dev/consde

El siguiente ejemplo ejecutarii el script discos, a las 8,12 y 16 h a s de lunes a viernes, envian-
do el resultado a nuestro correo electr6nico y al del usuario sistemus:
0 8,12,16 ** 1-5 /usr/usersloperatorlbin/d~cosI mailx SLOGNAMEsistemas

La siguiente entrada ejecutarii el script backup-, el dfa 1 de cada mes a la 1:OO b a s , en-
viand0 la salida generada por el script a1 fichero $HOM~ackup-mes.fog:
0 11 * * /usr/usersloperator/bin/backup_mes > $HOME/backup-mes.log 2>&1

222 -
8 PROCESO BATCH
Prografflasde Utilidud WNIX --

9 - INF'ORMACION DE DISCO§

Controlar el espacio de disco consiguiendo que cadafile-system contenga una cantidad mfnima
de espacio libre, cuyo tanto por ciento depended de cada instalaci6~es asegurar una gesti6n y
ejecuci6n 6ptima del sistema. El sistema UNEX propmciona varios programas que pueden ser
usados para dpterrninar el espacio de disco que se est4 utilizando y en quCfile-system, asf como
el espacio de disco ocupado por nuestros directorios y ficheros. Estos programas, lratados en
este capftulo, s m las utiiidades df, du, quota y find -size.

UtiZidad quota
Descripcih
El sistema UNIX proporciona un sistema de cuotas para limitar el espacio de disco y el niimero
de ficheros de 10s usuarios. Si el usuario sobrqasa estos limites, recibira mensajes de adverten-
cia del sistema. Entonces el problema puede ser solucionado por el usuario borrando fichaos, o
por el administradadel sistema ampliando las cum de ese usuario.

La utilidad quota visualiza el us0 de disco y los limits de cuotas de disco de los usuarios. Un
usuario ordinaria s610 puede visualizar su propias cuotas. El administrador del sistema puede
visualizar las cuotas de cualquier usuario.

Formato
quota [spciones]

Generalmente, las apciones del comando quota son utilizadas por el administrah del sistema
para visualizar las cuotas de los usuarios especificados, bien por el identificador de usuario o
bien par el identifkador de grupo.

Ejemplos
El siguiente ejemplo es una salida que podria recibir un usuario al emitir el comando quota, el
cual nos muestra el estado del espacio que tiene asignado ese usuario en elfiZe-sysfemhrsr:

$ quota
File system: /usr
User: used, Id: 200
File blocks (512 bytes) Inodes
User Quota: 120000f (19.7%) unlimited*
Warning: 96000* (24.6%) None
Usage: 23592 772

El siguiente ejemplo muestra la respuesta que podria visualizar un usuario que no tiene asignado
limite de cuotas de disco:

$ quota
Disk quotas for user userid (uid 300): none

9 -1NFORMACION DE DISCOS 223


Programas de Urilidad UNIX

Utilidad du
Descripcih
La utilidad du muestra informaci6n del espacio de disco utilizado por un directorio (junto con
sus subdirectorios y ficheros), o por los subdirectorios o ficheros especificados. El espacio es
visualizado en bloques. Par defecto, el tamafio del bloque es dado en unidades de 5 12 bytes. El
tamafio de un directorio d definido por la suma del tamafio asignado a t& sus subdirecto-
rios y ficheros, m& el tamafio asignado al mismo directorio.

Formato
du [-opciones] [directorlo ...I mhero ...I

Opcwnes
-8 Visualiza recursivamente el tamafio de todos los subdirectorios y ficheros del directorio
de trabajo en curso, o de 10s subdirectorios o ficheros especificados.

-k Visualiza el tamaflo de los subdirectorios o ficheros especificados, en unidades de 1024


bytes o(bytes).
-r Visualiza un mensaje de error a m d o un directario no puede sex lefdo o cuando un fi-
chero no puede ser abierto. Sus tamaiios no s e r h contabilizados.

-s S610 visualiza el tamafio total de cada directorio o fichero especificado.Si nose especi-
fica ningisn directcxio ni fichero, el comando du visualiza el total general de nuestro di-
rectorio de trabajo en curso.

El comando du emitido sin la opci6n -a no visualiza informaci6n de 10s ficheros, a no sex que
explicitamente se especifique el nombre de un fichero; la utilidad du s610 visualiza el tamafio
del subdirectorio especificado o del directorio en curso si no se especifica ningiin subdirectorio.

Argumentos
directorio Es el nombre o nombres del directdo o directories que van a ser examinados por
la utilidad du Todos 10s subdirectorios especificados en el argument0 directorio
son examinados.

@hero Es el nombre o nombres del fichero o ficheros cuyos tamaiios serin visualizados.
El comando du emitido sin argumentos ni opciones s610 visualiza el tamafio de los subdirecto-
rios del directorio de trabajo en curso.

Notas
Las opciones -I y -s de la utilidad Is tambiCn nos facilitan informaci6n relativa al tamafio de 10s
ficheros de disco (ver “Ufilidud Is”, pigina 44).La utilidad sum visualiza el tamafio de un fi-
chero en unidades de 5 12 bytes.

224 -
9 INFORMACION DE DISCOS
Progra~yusde Utilidad UNIX

Ejemplos
El siguiente ejemplo visualiza el tama80, en bloques de 512 bytes, de 106 subdirectorios de
nuestro directorio de trabajo en curso. La rfltima lfnea mntiene el tamaAo total de todos ellos (el
total general de nuestro directorio de trabajo en curso), es decir, es equivalente a1 resultado del
comando du -s emitido sin argumentos:

$ du
274 &in
96 JProgslpre
210 JPwFfPfi
10s JPWP
342 Jobjetas
1250

El siguiente ejemplo visualiza 10s tamafios, en bloques de 512 bytes, de nuestro ficheropow,
del fichero cataLsrrC ubicado en nuestro subdirectorioprogs, y de nuestro subdirectorio bin:

$i du .prom progs/a&zlsal bin


4 .profie
10 lp~catalsal
274 bin

El siguiente command-Zinevisualiza el us0 de disco de 10s subdirectorios y fieheros ubicados en


el directorio h s r ~ ~ s / o p eclasifxados
r, por el tamaft0 (enunidades de 5 12 bytes) en orden
nu&m inverso (de mayor a menor):
$ du 6 hsrhsuariosloperP 2>/dev/null I sort -k lnr

El siguiente command-line du visualiza el tamafk,total en Kbytes de todos 10s subdirectcnios y


fieheros contenidos en el directorioItrsr/admin. (La utilidad du no contabiliza el tamafio de los
fieheros y subdirectopl'os que no pueden ser lddos):

$idu -6 -khsr/- 2> /dev/nuU


24620 lusrladmin

El siguientescript, grands, visualiza los 10 subdirectorios ylo ficheros m6s grandes ubicados en
el directorio especificadocomo argument0del command-line grands:

$ catgrands
#!hinlsh
I
-
Isuipt: grands VkoalizaIos 10 rubdirretoriosylo Gcheros
auLs grades del diredorio apecilicado.
#
if[ S t r e 1 1
ehen
edm "Urn comedo: gmadsdtucCorio"
exjt 3
else
if [ -d $1 ]
then
cd $1
echo "Los 10 rubdiredodosylo Gcheros mrls grand- del diredodo $1 ron:\n"
du-a$l t>/devhdIrorl-klnr
'( p h f f "9bl4d SSW,$1,$2 )' Ihead -10
eke
echo "EJ directorio $1 no existe."
fi
fi

-
9 INFORMACION DE DISCOS 225
Programas de Utilihd UNIX

Utilidad df
La utilidad df visualiza informaci6n relativa al espacio libre y ocupado en disco de todos los
file-systems montados. Por defecto, la cantidad de espacio es dada en bloques de 512 bytes. El
fonnato de salida generado por la utilidad df puede variar de un ordenador a otro.

Formato
df [-opciones] @le-system ...I

Opciones
-k El tama€iodel espacio de los discos es visualizado en bloques de 1024 bytes.

-I S6lo en la versi6n Berkeley. Agrega a la informaci6n de defdo el nfimero de inodes


(nodos indice) usados y libres. El nismero de inodes controla el nfimero de ficheros en
unfile-system.
-P En la versi6n System V, eta opci6n hace que la salida generada por el cornando df sea
vis- con una linea de cabecera. En la versi6n Berkeley, la linea de cabecera es
generada por defecto. La informaci6n es visualizada en columnas, especificando los si-
guientes conqtos:

Ficesystem Nombre del dispositivo en el cual reside elfile-system.


ux-blocks N b x o total de bloques delfile-system en las unidades especificadas.
used Nfimero de bloques usados en elfile-system en las unidades indicadas.
Available Ndmero de bloques libres delfile-system en las unidades especiEcadas.
Capucify Porcentaje de qacio libre en esefile-system en las unidades indicadas.
Mounted on Nombre delfile-system.

-P S610 en System V. Esta apci6n visualiza la siguiente informaci6n: espacio libre y total
delfik-system en sectares, umbrales de asignaci6n de Echeros, tama€ios de las particie
nes principal y secundaria si tienen maS de un bloque. Tambien visualiza por cadaparti-
ci6n la siguiente informaci6n en forma de tabla: nfimero de partici614nfimero de bloque
de comienzo, nismero total de bloques, nismero de bloques libres, lliunero de &eas dis-
continuas de la partici6n y nombre del dispositivo en el que reside la partici6n.

-S S610 System V. Esta opci6n hace que la salida generada por el comando df sea visuali-
zada en un formato facilmente modifiable por utilidades como sed y cut. La informa-
ci6n es mostrada en el siguiente orden: nombre delfile-system, nombre del dispositivo
en el que reside elfik-system, nismero de bloques libres en elfile-system, tamaAo de un
bloque en bytes, pormntaje de espacio libre sobre el total de bloques, nfimero de nodos
indice (inodes)libres, bloques totales posibles e inodes totales posibles.

-t S610 en System V. Esta opci6n incluye en la salida de defecto una linea con el total de
bloques y de inodes de cadafile-system.

En la versi6n System V, par defecto, se visualiza la siguiente informaci6n en el siguiente orden:


nombre del file-system, nombre del dispositivo en el que reside el file-system, nfimero de b b
ques libres en elfile-system, tamaiio de 10s bloques en bytes, porcentaje de espacio libre y ai-
mer0 de inodes libres.

226 -
9 INFORMACION DE DISCOS
Progmjnas de Utilidad UNIX

Argumentos
rn-systern Es el nombre o nombres de losfile-system o dispositivos de disco que van a ser
analizados por la utilidad df. TambiCn podemos especificar el nombre de un di-
rectorio o fichero que resida en esefile-system.

El comando df emitido sin argumentos nos facilita informaci6n de todos los file-
systems montados.

Notas
El administrador del sistema dispone de la utilidad fsck para verificar y curregir anomalias en
unfile-system. Los ficheros /etcystab en la versi6n Berkeley y /etc/checWt en la versi6n
System V contienen infocmaci6n relativa a losfile-system. El sistema UNlX dispone de utilida-
des de accounting con las que se pueden obtener datos relativos a las actividades de los discos.

Ejemplos
El siguiente comando df visualiza la salida de defect0 en un sistema Berkeley. En un System V
se puede obteaer una salida similar emitiendo el comando df -P:

$af
Filesystem 512-bloctS Used Available Capaaty Mounkdon
root-domain#root 524288 153492 358336 30% I
usr-domaidusr 4194304 1430101 2721936 S% Ius
oracle#bd 17773520 2075982 1270432 63% /bd
Ord*&ta 17773520 3128240 1270432 72% Moradata
...
El siguiente ejemplo visualiza la salida de defect0 generada por el comando a bajo la versi6n
SystemV:

$df
I (l&d&W& ): 352552 SKblo~ks (22.0%) 27359 I-nodes
Itmp (/dev/dsWtrnp ): 3170080 Sblocks (99.1%) 32652 I-nodes
/usd (/dev/Wusrb ): 716376 SKblocks (224%) 18200 I-nodes
/us= (/dev/dsklsrcb ): 1999656 SKMocks (77.4%) 22248 I-nodes
/fusion (/dev/dsWfusion ) 1496472 SKblocks ( 8.6%) 62943 I-nodes
...
El siguiente command-line, emitido en un System V, utiliza la opci6n -Ppara obtener un for-
mato de salida semejante al del ejemplo anterior, y la opci6n -k para visualizar 10s bloques de
losfile-systemshsr/src y/usuarios en unidades de 1024 bytes:

$ df -P-k hsr/src hu&s


Filesystem 4096-blocks Used Available Capacity Mounted on
ldev/dsklsrcb 1292000 292172 999828 23% /ust/src
ldev/dsk/usuarim 15912000 13203876 2708124 83% Iususprios

El siguiente ejemplo visualiza la salida generada con la apci6n -S del comando du, aplicada a1
file-system #q:

$afS/cmp
Itmp ldev/dskltmp 396230 4096 99.1 32653 400000 32768 I-nodes

-
9 INFORMACION DE DISCOS 227
Programas de Utilidad UNIX

La siguiente salida es un ejemplo de informaci6n genera& por la opci6n -p del comando du,
relativa alfile-systemh s r :

$ df -p ltrsr
/usr (dev/dsWusrb 89546 sectors 18200 I-nodes
fof3il: 400000sectores 32768 I-nodes

En la versi6n System V el comando df, pop defecto, visualiza infmmaci6n relativa a 10s mdos
fndice ( i n o h ) . En la versi6n Berkeley, la opci6n -I visualiza, ademas de la infurmaci6n de de
fecto, et xuSmero de inodes us& y libres:

$ df-i
Filesystem 512-blodrs Used Available Capaatg Iuscd Kree % I d Mountedon
raot-domain#root 524288 154998 356832 31% 1777 609666 0% I
usr-dcunaidusr 4194304 1430984 2721056 35% 24533 4660564 1% Iusr
oracleflbd 17773520 2075998 1270416 63% 72472196174 0% /bd
...
El siguientescript, llamado ocupa, ejecutado en un sistema con versi6n System V, visualiza 10s
file-systems que tienen libre menos del 20%de memuria sobre el total de su capacidad (en ble
qua de 4096 bytes):

$ cat ocupa
#!/binllsh
-
# script: ocupa Vwualiza 10s fileaysterm:con menos del 20% de memoria libre.
echo Feeha: ‘date.”
echo Los siguientes Fileaystens SOU) tienen el % Libre de memoria”
echo sobre el total de su capacidad, dada en Bloques de 4096 bytes:”
echo w,
dfSIawk‘
BEGIN { print File-syskm % libre BIoquest~tales“
print --”- 1
{if($seto.O)
printf (“%20s%14s%17s\n”, $1, $S”%”, $7)

$ Ocupa
Fecha: Thu Sep 16 142536 M m 1999
Los siguientes File-systens SOLO tienen d % Libre de memoria
sobre el total de su capaadad, dada en BIoques de 4096 bytes:
File-systems % Libre
BIoques totales
- -
--- ---
/fusion 5.6% 2169000
lusuarios 17.0% 3978000
/kmporp1 8.5% 773000

228 9 -INFORMACION DE DISCOS


Utilidad find
La utilidad find examina recursivamente el &bol del directorio o directaios especmcados, bus-
cando 10s ficheros que satisfagan 10s ciirerios de blisquedu, especificados en una expresidn CD.
mo argumento del command-line. La salida generada por la utilidad find variari dependiendo de
los t&minos usados en la expresidn.

Formato
find directod ...expresibn
Argumentos
directorio Es el nombre o nombres del directorio o directories don& la utilidad find comen-
zad la biisqueda de fiChK06. Cuando la utilidad find examina un directorio, tam-
bien examina todos sus subdirectocios a todos 10s nfveles.

Si en directorio es espedficadoun nombre de fichero, entonus es examinado el di-


rectorio en curso. El path especificado en el argumento direcrorio puede ser un
.
path absoluto como/clbc/xyz, o un path relativo como un caricter indicando el di-
rectaio en curso.

expresibn Una expresibn mnsta de varios argumentos, 10s cuales son usados para indicar 10s
criferius de bdsqueda. La utilidad find verifica cada uno de los ficheros de cada di-
rectorio especificado en el argumentodiredo& para ver si satisfacen 10s critexios
de baqueda especificados. Los argumentos & la expresibn son descritos seguida-
mente en el apartaQ "Expresiones".

Expreswnes
Dentro de una expresibn pueden especificarse caractexes especiales, per0 deben ser protegidos
precedi6ndolos con un carilcter barra inversa 0)o e m h d o l o s entre caractmes ap6strofos ('),
para que el shell no los intqrete y se 10s pase al comandofind
En UM expresibn pueden especificarseuno o varios criterios de btlsqueda. Si se especifican va-
rios criterios de btlsqueda, estos pueden ir separados por 10s siguientes operadores:

Par un aperador -a o por un espacio, indicando ambos un operador AND 16gico (el fichero
debe satisfacer ambos criterios de bfisqueda para que sea seleccionado).
Par un wa
dor -0, indicando un OR 16gico (el fichero &be satisfacer uno, otro o ambos
criterios de btkqueda para que sea selacionado).
Por un operador !,indicando un NOT 16gico(niega cualquier criteria de bfisqueda).

En las siguientes descripciones de las expreswnes, el argumenton es un n~meroenter0 decimal


que puede ser especificado como +n, -n y n. Por ejemplo, si dentro de una expresidn especifi-
camos un valor para n,sus significados son:

+6 IndicamaSde6.
6 Indica exactamente 6.
-6 Indica menos de 6.

9 -1NFORMACIOh' DE DISCOS 229


Programas de Utilidad UNIX

Las expresiones pueden sa divididas en dos categdas:

Expresiones que seleccionan ficheros.


Expresiones que ejecutan acciones en 10s ficheros seleccionadm.

El siguiente comando find, primer0 selecciona todm 1% ficheros de nuestro directorio de tra-
bajo en curso (.) cuyos nombres (-name) comiencen con la letra a (a’*’), y d e s ~ ~incluye
& la
ejecuci6n de una acci6n, la expresi6n -print, la cual haril qu :sean visualizados todos los fiche-
ros seleccionados:

find. -name a’*’ -print

Expreswnes que seleccwnanfrcheros


Las expreswnes que seleccionan ficheros son las siguientes:
-add idcuenta S610 en System V. Localiza ficheros que tienen el ID de cuenta especificado en
idcuenta. El ID de cuenta de un fichero se puede conocer con la utilidad chacid

Localiza ficheros que han sido accedidos en los &as especificados en n, donde
n es interpretadode la forma descrita anteriopmente.

<pi0 device S610 en Berkeley. Escribe el fichero en curso en el dispositivo especificado en


device (en bloques de 5120 bytes). El dispositivo tambien puede ser otro fichero
de disco. (Ver “Lltilidad cpio”, p6gina 239).

ctimen Localiza ficheros si el inode del fichero ha si& cambiado en 10s &as especifi-
cados en n;es decir, si han cambiado sus atributos: ID de usuafio y ppo, etc.

-depth Hace que la utilidad find descienda al directorio dado, de modo que todas la
emadas de un directorio sean examinadas antes que el prapio directario. Esta
expresi6n puede ser rItil cuando la utilidad find es usada con la utilidad cpio pa-
ra transferir ficheros contenidos en un directorio sin penniso de escritura.

-dev nrimro S610 en System V. Localiza ficheros que residen en el nslmero de dispitivo
espificado en ndmero.

-fstype tip0 Localiza ficheros pertenecientes al tipo defile-system especificado en tipo. LQS
t i p defile-system pueden variar de un ordenador a otro; algunos de estos t i p
son: dfs, nfs, proc, ufs, sfi, ad@, procfs, cdfs, etc.

-group grupo Localiza ficheros pertenecientes al grupo especificado en grupu. Si el grupo


especificado en gmpo es numQico y no aparece como un nombre de grupo en
el fichero/etc/group,el grupo es interpretado como un ID num&ico de grupo.

-inurn inode Localiza ficheros que s610 tengan el nslmero de nodo indice (inode) especifica-
do en el argument0 inode. El sistema Berkeley dispone de la expresi6n similar
adicional: -i inode.

-links n Localiza ficheros que tengan el nslmero de links especificado en n.

-1OCal S610 en System V. S610 localiza ficheros que residen en el sistema local.

230 -
9 INFORMACION DE DISCOS
Programas de Utilidad UNZX -:

-Is S610 en Berkeley. Hace que 10s ficheros seleccionados sean visualizados junto
con la informaci6n asociada. Esta incluye, respectivamente: mfmero de inode,
tsmaffo en Kbytes (1024 bytes), modos de acceso, n~merode links, usuario,
grupo, tamaao en bytes, fecha de modificaci6n y path del fichero.

-mount Restringe la btisqueda de ficheros alfile-system que contenga el directorio espe-


cificado en el argumento directorio.

-mtime n Localiza los ficheros que hayan sido modificados en el ndmero de das especifi-
cad0 en el argumento n.

-namefichero Localiza fichaos que se correspondan con el nombre de: fichero especificado en
fuhero. En el argumentoficliero pueden ser us& los caract~esespeciales de
c m p o n d e d a de ficheros, per0 deben ser protegidos, bien precedi6ndolos de
un Caracter bana inversa 0)o encenandolos entre caract~esap6strofos (').
-ncpio tunzub S6l0 en Berkeley. Establece el tamafio de entfada/salida al tamafio especificado
en tamaiio.(El tamafio de defect0 es 5 120 bytes).

-newerfukro Localiza ficheros que heron modificados antes que el fichero especificado en
fichero. Enjichero pueden ser usados los caracmes especiales de correspon-
dencia de ficheros, per0 deben ser protegido6, bien encenhdolos entre caracte-
res qxktrofm (') o bien precedi6ndolos de un carfictm bama inversa 0).
-nogroup S610 en System V. Localiza fichmos pertenecientes a g r u p no incluidos en el
fichero/etc/group.

-nouser S610 en System V. Localiza ficheros pertenecientes a usuarios que no est411 in-
cluidos en el fichero/e&@mswd.

-perm nuoctaf Localiza 10sfichaos cuyos c6digos de permiso de aaeso se correspondan con
los del mlmero octal especifcado en el argumenton u d . (Para m h informa-
ci6n sobre la especificaci6n del modo de acceso en forma absoluta, ver "Utili-
dud chmod", p a g i ~30).
-prune No examina ningh directorio ni fichero de la estructura del directorio por de-
bajo de la plantilla currespondida.
-size n Localiza ficheros cuyo tamafio se cmesponda con el ntlmero de bloques (de
5 12 bytes) especificados en n.

-size nc Localiza ficheros cuyo tamafio se cmesponda con el ntimero de caracteres es-
pecificados en n.

-type tipo Localiza ficheros cuyo tipo de fichero especiflcado en tip0 se corresponds con
uno de los siguientes t
ipde fichero:

b Fichero especial de bloque.


c Fichero especial de carkter.
d Ficherodirectorio.
f Fichero ordinario.
1 Fichero con link simb6lico.
p FicheroFlFO.
s Fichero socket.

-
9 INFORMACION DE DISCOS 231
Programas de Utilidad UNIX

-user nombre Localiza ficheros pertenecientes al usuario especificado en nombre. Si el usua-


rio especificado en el argumento nombre es num&ico y &te no figura en el fi-
chero/etc@mwd,ese usuario es interpre€adocomo untD numkico de usuario.

-xdev Hace que la utilidad find s610 examine elfile-system en el cual reside el fichero
que va a sex evaluado.

Expresiones que ejecutan acciones sobre losficheros seleccwnados


Las expreswnes que ejecutan acciones sobre los ficheros seleccionados son las siguientes:
-exec com(Lnd0 El fichero es evaluado si al ejecutar el comando especificado en comcLndo de-
vuelve un exit-stutus 0. El comando especificado en cornando debe ser finaliza-
do con un mxlcter punto y coma, el cual debe sex protegido 0;).

El siguiente f m t o poWa sex el formato general de un comando find con la


expresi6n exec:

find duectorio ...expresidn exec comado {} \


El cafactet llaves ({}) demo del comando especificado en comado represents
el nombre del fichero evaluado sobre el que serA tomada la acci6n.
-follow Eval~jalos ficheros localizados cuando 10s links simb6licos van seguidos; en
cuyo caso, el comando find rastrea los direct~osespecificados de modo que
10s bucles infinitos sean detectados.

-okcomQndo A d a como la expresi6n exec, except0 que es visualizado un prompt con el


command-line generado, finalizado con un cariktm ?, para requerirnos si que-
remos o no ejwtar cada acci6n del comando especificado en eomando; una
respuestay ejecuta la acci6n sobre cada fichero seleccionado.
-print Esta expmi6n hace que los nombres de los ficheros seleccionados sean visuali-
zados en el standard-output con sus respectivos nombres de park Si en el a~
mando find no es especificada ninguna expresibn o si la expresibn no va acm-
paiiada de las @ones -oko exec, la apci6n -print es el defecto.
Par ejemplo, los siguientes comandos find producen el mismo resultado: 10s
tres visualizan los fichaos seleccionados:

find.
find. -print
find. -name '*'

( expresibn ) Si la expresibn encerrada entre parentesis se cumple, el fichero es evaluado.


Cada elemento de la expresi6n es un argumento sqarado. Dichos argumentos
deben ser sqarados unos de otros por caracteres espacio.
A ambos lados de cada cargcter parentesis debe aparecer un car6ctet espacio; y
ambos carames parentesis (el de apertura y el de cierre) deben ser protegidos
con un carktm barra inversa: \( y \). La expresi6n especificada en expresidn es
evaluada de izquierda a derecha.

232 -
9 INFORMAClON DE DISCOS
Progmmhs de Utilidad UNIX p

Ejemplos
El siguiente comando find es usado para localizar y visualizar el fichero o ficheros con nombre
datos bajo el directorio en curso. El cartlcter punto (.) dice a la utilidad find que examine el di-
rectorio en curso y sus subdirectorios. La expresi6n -name &os apecifica la bfisqueda del fi-
chero &os. La expresi6n -print hace que la salida sea visualizada en el standard-output. Si el
fichero no es localizado, no es visualizado ning6n mensaje. La salida genmada por este coman-
do podria ser parecida a la indica&:

$ find. -name &os -print


Jdatos
Jprogslaatos

El siguiente ejemplo examina elfife-system root comple€oy visualiza todos 10s fichaos cuyos
nombres contengan la cadenaenv con sus respectivm paths. El carkter I dice a la utilidad find
que examine el directorio root y todos sus subdirectorios.
$ find / -name \*envS -print 2> ldev/nuU

Normalmente, si no tenetnos privilegios de un usuario superuser, el sistema visualizar4 mensa-


jes de error por cada directorio que no tengamos acceso, por ello utilizamos la redirecci6n &
mores. Esta acci6n puede llevar cieito tiempo, asf que lo mejar serg limitar el examen especifi-
cando 10s clirectaios don& creamos que pueden estar los ficher06 deseados.

El siguiente ejemplo localiza y visualiza 10s ficheros ubicados bajo el directorio h s r h m cuyos
nombres comiencen par la cademfin:
$ Zindhsrhm -namefuT'*' -print
/usr/madcatl/fuld.l
/usdman/cat2&nger.l b
/usr/madcaWfmdd€
...
El siguiente comando find examina y visualiza los ficheros y subdirectorios de nuestro direc@
rio en curso, que s6l0 tienen permisos de lectura y esaitura de prapietario del fichero:

$ find. -perm 600 -print

El siguiente ejemplo visualiza 10s nombres & los fichaos que no Sean directories de nuestro
directorio de trabajo en curso que tengan &I de un link (-links +l).Recu&dase que cada di-
rectorio tiene al menos dos links: la entrada del directorio padre y la suya prqia:

$ find. ! -type d -links +1-print

El siguiente command-line localiza todos los ficheros de nuestra estructura de ficheros en curso,
modificados demo de Ias @timas24 h a s :

$ find. -mtime 1 -print

El siguiente comando find localiza 10s ficheros y subdirectorios de nuestro directorio de trabajo
en curso que heron modificados hace mhs de un afio:

$ find. -mtime +365 -print

9 -1NFORMACION DE DISCOS 233


Programas de U t i l W UNIX

Los ejemplos de las dos pilginas siguientes muestran como construir algunas expresiones utili-
zancb 10s operadores vaidos. Estos ejemplos utilizan la siguiente estructura del directorio:

$ Is -la
total 77
dm-m-x 9 admin users 8192 Jun 6 17:B .
dm-m-x 47 admin users 8192 Nov22 1998 ..
+wxr-xr- 1 admin adm 24 NovB 1998 Jogin
-rwxr-xr- 1 admin adm . 24 May12 1343 .profie
--rw-r+- 1 admin users 1559 Dec 23 1998 abc
-rw-r+- 1 ad& users 7 May30 1222 ccc
drwxr-xr-x 3 admin users 8192 Mar23 1605 cprogs
--I.-- 1 admin users 85 Jan 5 14:44 fdea
-rwxr+- 1 admin users 0 Nov22 1998 fieb
-rwxr-xrd 1 admin adm 24 Jun 1 1343 fiiek
-44- 1 admin users 216 May15 17:44 fdet
-rwxr+- 1 admin users 743 May21 1503 find
-rwxrdr-x 1 admin adm 24 Jun 1 17:44 gfiiek
--I.+- 1 admin users 0 Feb 25 1455 gfidet
-rwxr---Ic- 2 admin users 180 Mar 2 09:14 h4d
--cwxr-m-x 1 admin adm 24 Jun 13 11% hfiIek
-rw-r+- 1 admin users 10216 May10 1303 listasal
-4- 2 admin users 743 Nov26 1998 rcsumen
drwn-xr-x 2 admin users 8192 Apr 16 1530 works

Cualquiera de los dos command-lines siguientes localiza todos los fichaos que tengan un nom-
bre que comience porfrle y a la vez perten- al grupocrdm:

$ find. -namefile\* -group adm -print


$ find. -namefile*’ -a -group CUIm -print
Jfiiek

El siguiente ejemplo localiza y visualiza todos los fickos cuyos nombres mmiencen porfile
ylo 10s que pertenezcan al grupo rrdm:

$ find. -namefile\* -0 -group adm -print


Jfidea
Jfiieb
Jfiiet
Jfiiek
Jgtilek
Jhfiiek

El siguiente ejemplo localiza y visualiza todos 10s ficheros cuyos nombres mmiencen porfile
ylo cuyo grupo sea adm,y 10s ficheros cuyos nombres comiencen pur

$ find. -namefile\* -0 -group adm -name@* -print


Jfiiea
Jfieb
Jfiek
Jfiiet
Jglilek

El siguiente ejemplo localiza y visualiza todos 10s Echaos cuyos nombres comiencen porfile
que pertenman al grupo adm,y/o 10s fichaos cuyos nombres comiencen pm gF.

$ find. -namefiCe\* -a -group adnt -0 -name@* -print


Jfiek
JgfXek
Jgfilet

234 -
9 INFORMACION DE DISCOS
Promimas de Utilidad UNIX

El siguiente ejemplo localiza y visualiza todos 10s ficheros que no pertenman al grupo users:

$ find. !-group users print


Jfiiek
Jgfiiek
./b€iiek

El siguiente ejemplo localiza y visualiza todos 10s ficheros del grupo users cuyos nombres cck
miencen parfile, y/o 10s Licheros cuyos nombres comiencen por cc:

Jfiea
$ find .V -group users -a -namefik\* \) -0 -name cc\* -print
Jfideb
Jfiet
Jccc

El siguiente ejemplo localiza y visualiza todm 10s ficheros que no perteman al grupo users y
sus nombres comiencen porfire, y/o 10s ficheros cuyos nombres comiencen por cc:

Jfiiek
$ find l(.
!-group users -a -nameN\* \) -0 -name cc\* -print
Jccc

El siguiente ejemplo localiza y visualiza 10s fickos ordinaria que tengan m h de un link sim-
b6lico. Observernos que este command-line lleva implicit0 un aperador -8:

$ find. -type f -links +1 -print


lh4d
Jresumn

El siguiente ejemplo localiza y borra l a ficheros cuyo tarnaflo sea de 0 bytes, y/o 10s ficheros
cuyos nombres finalicen con la &na .error. Este command-line nos visualiza un prompt con
la @6n de txxrar o no 10s ficheros seleceionados:

$ find. V &e 0 -0 -name '*'.error \) -ok rm {} k


<rm ...lfileb? J
<nn ...Jgfiiet? J
<nn ...Jlista.trror? n
<rm ...JworWprog.error? J
El siguiente command-finevisualiza, en formato Is -I, 10s ficheros que no sean directories y sus
modos de permisos sean 755, es deck 10s ficheros que puedan ser lefdos y ejecutados por las
tres categdas de usuario, per0 s610 el propietario del f i c k o pueda escribir en ellos:

$ find. V !-type d -a g e r m 755 \) exec Is -1 {I k


mr-xr-x 1 admin adm 24 Jun 1 1343 Jfiiek
mr--Ira 1 admin adm 24 Jun 1 17A4 Jgfilek
--cwxr-xr-x 1 admin adm 24 Jun 13 11:33 Jhfidek

El siguiente ejemplo localiza y visualiza 10s directaios (expresi6n -type d) de la estructura de


ficheros en curso:

$ find. -type d -print

Jcprogs
Jworks

9 -INFORMACION DE DISCOS 235


Prowamas de Utilidad UNIX

El siguiente script, llamado buscador, combina los comandos find y grep para localizar fiche-
ros en nuestra estrumfa & ficheros en curso cuando no recordamos sus nombres, per0 Si sabe-
mos que contienen una cadena de caracmes determinada:

$ cat buscador
#!/bin/&
-
# script: buscador Localizd el path del fiihero cspecScado.
if [ $# -ne I ]
then
echo “Us0 eorrecto: b d o r cadem
exit3
else
.
fmd exec gmp -I ”$1” {}\;
fi

El siguieate script, Uamado localiza, busca ficheros, simplificando el us0 del comando find Si
a1 ejmtar el script, s6l0 especificamos un argumento, la bfisqueda comemarit en el directorio
rafi; si especificamos dos argumentos, la bhqueda del fichexo especificado en el segundo ar-
gumento comenzaril en el directorioespcificado en el primer argumento:

$ cat ZocaEza
#!/biih
-
#script l o c a h Bmca fiche- sumioistrandoUM adena.
if[ $# -ne 1]
then
find I -name $1 -print b IdednuU
dif $# -eq 2 I
then
find $1 -name $2 -print b ldedndl
CrSe
echoWsoeorrccco:localiza~#
echo localizadirceto4riofihemn
fi

El siguiente script, Uamado files, borra 10s fichaos con nombres core y aorct no accedidos en la
filtima semana, visualiza los fickos urdinarios no accedidos en los dltimos 6 meses, visualiza
los ficheros con m& de 2000 bloques de 512 bytes (m& de un mill6n de caracteres) y 10s f i c b
ros de Zogin no accedidos en los filtimos 3 meses. Para que este script sea efectivo, deberit ser
ejecutado por un usuario superuser. Si el script es ejecutado en modo batch, la salida generada
la recibirit el usuario superuser en su correo electr6nico:

$ catfiles
#!tbidsh
-
# scripf: fdes Borra 10s fcheros core y a.out no aceedidos en UM semana.
# V i i u a h los ficheros ordinarios no acecdidos en 6 meses.
# Viiualizd 10s ficheros con I& de MOO bloques de 512 bytes.
# Viiualizd los ficheros de login no a d i d o s en 3 m e s s
echo -’
echo Fecha: ‘date.”
echo ‘Ticheros core J eout borrados no accedidos en k iiltima semana:”
find I \( \( -name core -o -namea.out \) -atime +7 -print \) -exec rm {} \i 2> IdevlnuU
echo -’
echo ‘Ticheros ordi~riosno accedidosen los iiltimos 6 meses:”
find / -type f -atime 180 -print 2> /dev/null
echo
echo ‘Ticheros con I&de un mill& de caracteres:”
find I !-type d size +2000 -print 2> Idev/null
echo -’

-
echo ‘Ticheros de login no accedidos en 10s liltimos 3 meses:”
find / \( -name .prdde Q -name .login -0 -name s h r c \) -atime +90 -print 2> /dev/null
echo

236 -
9 INFORMACION DE DISCOS
Progra-masde Utilidad UNIX

10 - FICHEROS DE CINTA

El sistema UNIX dispone de utilidades para manejar ficheros de cinta y disco, con las cuales p
demos capiar, en distintos formatw: ficheros de disco a cinta,de cinta a disco y de disco a dis-
co. Todos 10s ~ d e ~ d ~del r eCentro
s de Cdlculo del Ciemat disponen de unidades de cintas
DAT,usadas en el salvamento y recuperaci6n de la informaci6n. Adicionalmente, el Centro de
Cillculo dispone de un robot de cintas de cartucho, con su mespondiente software,usado para
salvar y leer autom&icamente informaci6n espedfica de los distintos ordenadores de la red.

Aunque, usualmente el personal del Centro de Cdlculo del Ciemat se encarga del mantenimiento
de la informaci6n (salvamento y recuperaci6n de ficheros, c u d sea necesario) de 10s distintos
ordenadmes, en este capftulo trataremos algunas de las utilidades usadas en el manejo de fiche-
ros de disco y cinta. Agunos de estos comandos son de us0 general, otros s610 pueden sa usa-
dos por el administrador del sistema. Usualmente, las @ones y nombres de estos comandos
suelen variar de un adenador a otro, por lo que sera conveniente, antes de su uso, consultar el
manual-online de cada ordenador.

Utilidad mt
Descripcidn
La utilidad mt es un programs para el manejo de cintas magneticas. La utilidad mt praporciona
un juego de comandcs para manipular dispositivos de cinta magdtica.

Formato
mt [spciones] subcornando [ n ~ r o l

Opciones
-f ci& Especifica el nombre del dispositivo de cinta altemativo que va a ser manipulado. Si
no se especifica la @6n -f cinfa, la utilidad mt usa la variable de entorno TAPE;si
la variable TAPE no estA establecida, la utilidad mt utiliza el dispositivo de cinta de
defecto, usualmente Jdevlcinta.

Argumentos
subcomando [nlimrol
Este argument0 especifica uno de los siguientes subconznndos, 10s cuales serfin e$-
cutadm en el dispositivo & cinta:

bsf [nrimerol
Retrocede el ntimero de marcas de fin de fichero especificadas en nlimero.
erase Borra el contenido de la cinta desde la posicidn en curso al final.

-
IO FICHEROS DE CINTA 237
Programas de U t i l W UNIX

eof,weof [ndmero]
Escribe, en la posici6n en curso de la cinta, el nlimero de marcas de fin de fiche-
to (end-offile)especificado en el argumentondmero.

fsf [nrimero]
Avanza el nlimero de ficheros especilicado en el argumento nlimero.

omine, rewoffl
Rebobina y descarga la cinta, liberando la unidad de cinta. La expulsi6n de la
cinta debe hacerse manualmente, aunque algunos sistemas soportan el s u b
mando unload para la expulsi6n.

rewind
Rebobina la cinta hasta el principio. El argumentondmro es ignarado.

status
Visualiza informaci6n del estado de la unidad de cinta. No es necesario tener
montada la cinta en el dispositivo para obtener el smus. La i n f m i 6 n sumi-
nistrada por el subcomandostatus puede diferenciarsede una m6quha a atra.

bsr [nrimero]
Retrocede el ntimero de registros (bloques) especBcado en nhzero, de la cinta
especificada.
fsr [ntimeroJ
S610 en la versi6n Berkeley. Avanza el niimero de registros (bloques) especifi-
cad0en el argumentonzhero.
El argumento nzhero especifica el ntimero de ficheros de la cinta que van a ser avamados o
retrocedidos, o el mlmero de marcas de final de fichero que van a ser escritaS. P a defecto, el
valor del argumentondmero es 1, es deck, la utilidad mt ejecuta la acci6n del subcomando so-
licitado una vez.

Ejemplos
Los dos command-linesmt siguientes rebobinan una cinta:

$ mt rewind
$ mt -f /&v/nnntol rew

El primer mmando rebobina la cinta montada en el dispositivo de defecto, y el segundo coman-


do rebobina la cinta montada en el dispositivo albznativo/dev/nnntoI.

El siguiente command-line mt avanza un fichero (posiciona la cinta al principio del segundo fi-
chero) de la cinta montada en la unidad de cinta /dev/nnntoI:

$ mt -f/dev/nnntoI fsf 1

El siguiente ejemplo escribe dos marcas fin de fichero en la posici6n en curso de la cinta man-
tada en el dispositivo/dev/ntape/tapel:

$ mt -f /&v/ntape/tapel weoi 2

238 -
10 FICREROS DE CINTA
Proqahtas de Utilidud UNIX

Utilidad cpio
Descripcidn
La utilidad cpio es usada para salvar y restaurar datos de forma tradiciond. El comando cpio
puede realizar tres funciones: copiar uno o maS ficheros en un archivo de ficheros Cinico, restau-
rar 10s ficheros especficados de un archivo previamente creado con la utilidad cpio, y copiar
directolios.

Si especificamos un dispositivo de cinta magn&ca u otro soporte de memoria removible, la uti-


lidad cpio puede ser usada para crear copias de seguridad y transportar la informaci6n a otros
sistemas UNIX compatibles.

Formato
cpio -o[-opciones]
cpio -i[-opciones] lplantiuQ I
cpio -p[-opciows] directorio
...

Opcwnes
La utilidad cpio tiene tres apciones principales: -0, -i y -p,las cuales seleccionan las acciones
que va a ser ejecu-. y mas @ones que pueden ser utilizadas con las opciones principales.
S610 puede ser especifcada una apci6n principal a la v&.

Opcwnesprincipalas
-0 (Copy out). Hace que la utilidad cpio lea el standard-input para obtener una lista de fick-
ros con sus nombres de path, y oopiarlos en el standard-outputjunto con informaci6n del
estado. Generalmente, esta es la opci6n usada para obtener copias de seguridad
-i (Copy in). Esta apci6n lee del standard-input un archivo de ficheros, asumiendo que eSte
fue creado por un comando cpio -0 previo, y extra 10s fickos de ese archivo cuyos
nombres se correspondan con Ia plantilk dada como argument0de dicho comando.

Los ficheros extrafdos son creados condicionalmente y copiados en el &bo1 del directorio
en curso. Los permisos de &ccesode 10s ficheros copiados s e r h 10s permisos de 10s fiche-
ros previos al comndo cpio -0.
El propiebrio y grupo de 106 ficheros s e r h 10s del usuario en curso, a no ser que el usua-
rio en curso sea un usuario superuser, en cuyo caso, la utilidad cpio conservari el pro-
pie€ario y grupo de 10s ficheros del command-lineCpiO -0 previo.

-p (Puss, copia directories). La opci6n -p lee el standard-input para obtener UM lista de


nombres de path de ficheros, que S K creados
~ y copiados condicionalmente en el &bo1
del directorio de destino especificado, bashdose en las qxiones descritas a continuaci6n
en el apartado “Otrus opciones”,pagina 240.

Si el directorio donde van a sa copiados 10s ficheros no existe, debemos espaificar la


opci6n d para crearlo.

-
10 FICHEROS DE CIh’TA 239
Programas de Utilidad UNIX

Otras opcwnes
Si las opciones principales: -i, -0 6 -p, van inmediatamente seguidas de UM de las siguientes
opciones, &tas deben ir sin espacio y sin el carlicter gui6n (-):

-a Establece las fechas de acceso de 10s ficheros de entrada que van a ser copiados, a la fe-
cha y hora en curso.

-I3 Esta opci6n hace que los bloques sean copiados a 5 120 bytes @or defect0 son capiados a
512 bytes). La opci6n -Bno puede ser usada con la apci6n -p, y s610 es significativa con
data oapiados a ode cinta.

c Escribe la informaci6n de cabecera en caracteres ASCII con fines de pcntabilidad. Esta


opci6n se usa cuando queremos restaurar archivos de o para otro sistema.

-d Crea dire!ctorioscuando es necesario. No utilizar la opci6n -d con la opci6n -0.

-f Copia todos 10s ficheros, except0 los que se correspondan con la plantilla especificada en
el argumentoplantilla. Esta opci6n es usada en la restauraci6n de ficheros.
-I Hace link a los ficheros (siempre que sea posible) en vez de copiarlos. Esta opci6n s610
puede ser usada con la opci6n -p.
-m Conserva la fecha de modifrcaci6n previa del fichero original. Esta opci6n no puede ser
usada en la cupia de directories.

-r La opci6n -r hace que la utilidad cpio nos pregunte mediante un prompt, si queremos o
no renombrar cada fichero antes de la cupia. Si no queremos cambiar el nombre del fiche-
ro, introducir el nombre del f i c k o en curso. Si introducimos UM lfnea nula (si s610 pre-
sionamos < R E Z " > ) , la utilidad cpio no hace la copia de ese fichero. Esta opci6n &lo
se usa con la opci6n -i.
-t Crea una tabla de contenidos de la entrada y visualiza 10s ficheros de la cinta sin tener que
restaurarlos. Esta opci6n no cupia ficheros.

-u Copia incondicionalmente 10s ficheros existentes; copia 10s ficheros antiguos sobre
10s miis nuevos, siempre que tengan el mismo nombre. Si no se especifica esta apci6n, la
utilidad cpio no sobrescribe 10s ficheros mils nuevos.

-v Modo verboso. Genera una lista de nombres de fichero mientras se copian Si esta opci6n
es usada con la a ~ c i 6 n-t, la salida se asemeja a la de un comando Is -1.

Las opciones de las utilidades que manejan cintas pueden variar segtin el fabricante del ordena-
dor. Por ejemplo, en algunos ordenadores debemos especificar opciones de YO precediendo al
nombre de los dispositivos. Estas opciones son:

-Idispositivo Especifica el dispositivo de entrada que contiene el archivo de ficheros. El ar-


gumentodisposi.tivo debe star presente para importar data de un dispositivo.

-0dispositivo Especifica el dispositivo de salida que va almacenar el archivo de ficheros. Este


argument0 debe estar presente para expartar datos a un dispositivo.

Podriamos indica, que la opci6n -0 hace la misma funci6n que el carlicter > (redirige la salida),
y que la opci6n -I hace la misma funci6n que el carlicter e (redirige la entrada).

240 -
10 FICHEROS DE CINTA
Progratiias de Utilidad UN.X I .

Argumentos
plantilla Es una plantilla similar a la utilizada en la correspondencia de nombres de fichero en
el shell, en la cud puede especificarse 10s siguientes caracteres de correspondencia:
* Correspondencia con cualquier cadena, incluyendo una cadena vada.

i Carrespondencia con ~udqui~


carilcter Wco.

[..I Correspondencia con uno de 10s caracteres encenados entre los corchetes. En
una expresi6n como [p-z], el carilcter gui6n (-) significa desde-husta, confar-
me a la secuencia de clasificaci6n en curso.

Las plantillas de correspondencia deben SK protegidas con caracteres ap6strofos,


comillas o barras inclinadaspara que no sean interpretadas por el shell. Pueden espe-
c i f i m e varias plantillas, si no se especifica ninguna, el defect0 es el carilckx aste-
rism (*), seleccionando todos 10s ficheros del archivo cpio.
directurio Es el nombre de un directorio que va a ser usado como directorb de destino en un
command-line cpio -p.

Ejemplos
El siguiente ejernplo copia 10s ficheros del directdo de trabajo en curso a la cinta montada en
el dispositivo/dev/nrtapel.No se copian 10s contenidos de 10s subdirectories, porque el coman-
do Is no suministra los nombres depafh:

$ Is I cplo -0 >/&v/nrtapel
1230 Blocks

El siguiente ejemplo Copia a la cinta montada en el dispositivo/dev/WpeAapellos ficheros de


nuestro directorio en curso (en a t e cas0 10s del directdodinmke) cuyos nornbres finalicen en
.c. La apcidn -v hace que la utilidad cpio visualice el nombre de cada fichero que va copiando.
Cuando el proceso finaliza la copia, la utilidad cpio visualiza el mfmero de bloques mpiados:

$ cddinnake
$ Is *.c I cpio -ov > /dev/ntapeHapel
cuadrados
cuartap-c
cub0.c
main.c
nada.c
3 Blocks

Los dos command-lines siguientes copian el &bo1 del directorio en curso (.), incluyendo todos
sus subdirectories y fichaos, a la cinta montada en el dkpos~tivo/&v/%wtapel.En el primer
command-line,la expresi6n -print de la utilidad find lista 10s nombres de path de cada fichero
para que la utilidad cpio Ios tome como entrada mediante un pipe; en el segundo command-line,
la expresi6n -print visualiza cada fichero copiado (vet "Ufilidudfind",psgina 229):

$ find. -print I cpio -ov -O/dev/Mtapel


$ find. cpio/dev/nrtapeZ -print
...
610 Blocks

-
10 FICREROS DE CIh'TA 241
Programas de Utilidad UNIX

El siguiente command-line utiliza el comando find para localizar todos 10s ficheros del directo-
riohrsrnopetprogs y subdirectorios que cuelgan de 61 con sus respectivos ficheros, copihdolos
a la cinta montada en el dispositivo/&vhpe-03:

$ find hsrflope/Progs -print I cpio -0 >/devhpe-O3


332 Blocks

El siguiente command-line duplica el &bo1 del directorio en curso. Copia 1% fichera del di-
rectorio en curso y todos sus subdirectories y ficheros. El duplicado es puesto en el nuevo di-
rectoriodkdupE

$ mkdir dirdupti
$ find. -depth -print I cpio -pdl dudupti

El siguiente comando cpio s610 visualiza (no cupia) la tabla de contenidos de un archivo de
cinta montado en el dispositivo/&v/hHapeU, previamente salvado en formato cpio. Las opcic~
nes -i, -t y -v visualizarh una salida parecida al extract0 de salida indicado:

$ cpio i t v </&v/nrtupeO
...
100644 userid 734 Jul 1117~0312001mains
100644 userid 1053 Jul 1117:20:312001 makeme
100600 userid 336 Mar 61006A52001 marcas
100755 userid 10622 Feb 21633412000 menu
0..

El siguiente ejemplo mtaura los Echeros previamente salvados a cinta con un comando cpio
previo. La opci6n -d permite a la utilidad cpio crear l a directarios apropiados si fue salvado un
kbol de directcnios;la opci6n -v visualizaril el nombre de cada Echero como fbe copiado:

$ cpio 4dmv < /dev/tpO3


... Blocks
2614

El siguiente ejemplo q i a fichera de cinta a disco selectivamente. Restaura los ficheros que
finalizan en.c y .$ Las plantillas *.e y *$deben it encerradas entre caracteres comillas (" ") pa-
ra que el cadcter asterisco (*) sea interpretado correctamente por el shell:

'<*
$ cpio -i -V&v/htapee/tape2 t6*.cpp
157 Blocks

El siguiente command-line cpio restaura en el directorio de trabajo en curso 10s ficheros de la


cinta montada en el dispositivo /dev/iwftlO, dhdonos la opci6n, mediante un prompt, de re-
nombrar cada fichero cuando va a ser copiado (opci6n -r). Si queremos renombrar el fichero,
teclear el nuevo nombre y presionar <RETURN>. Si queremos conservar el mismo nombre, in-
troducir el nombre antiguo en el prompt. Si no queremos copiarlo, presionar s610 <RETURN>:

$ cpio -ir -Vdev/iwflO


rename mahc?

El siguiente ejemplo copia de disco a disco 10s ficheros finalizados en .e, del directorio de tra-
bajo en curso a nuestro directorio de programas, progsC:

$ Is *.c I cpio -p $HOME@rogsC/


48 Blocks

242 -
10 FICREROS DE CINTA
Utilidad tar
Descripcibn
La utilidad tar salva ficheros de disco a un archivo slnico de cinta y restaura ficheros de un ar-
chive tar de cinta a disco de forma tradicional. Usualmente, el archivo es de cinta magn&ca,
per0 tambien puede ser de otro tipo de memoria. La utilidad tar no copia directorios vaclos ni
ficheros especiales.

Fomato
tar [opciones][modificador ...I @hero ...I

Opciones
Las siguientes apciones indican el tipo de acci6n que va a tomar la utilidad tar. La acci6n puede
ser modificada si la opci6n va seguida de uno o maS argumentos de la apci6n (modificado:
C Crea un nuevo archivo de cinta, destnryendo cualquier informaci6n previamente escrita
en la cinta. Cuando se esaibe en UM cinta,la utilidad tar comienza desde la pici6n en
CUrSOdelacinta.

r Agrega los ficheros especificados al final del rlltimo archivo. Si el archivo es de cinta,
10s ficheros son esuitos al final del rlltimo fichero de la cinta.

t Visualiza informaci6n de cada fichero especificado contenido en el archivo. Si no es es-


pecificado nin@n ficho, la utilidad tar lista todm los nombres de fichero del archivo.
U Pone los ficheros especificados al final del archivo de cinta si l a ficheros todavia no
e s t h en el archivo o heron modificados despueS de la rlltima copia.

X Extrae los fickos especificados del archivo de cinta. Si uno de lm ficheros especifica-
dos se correspnde con un directorio cuyo contenido fue escrito en el archivo, ese di-
rectorio es restaurado recursivamente. El propietario del fichero, la fecha de modifica-
ci6n y el modo de acceso son mantenidos a 10s que tenfan antes de la copia. Si no se es-
pecifica ning6n fichero, es restaurado todo el contenido del archivo de cinta.

Modificador
Las acciones de las opciones de la utilidad tar,pueden ir inmediatamente seguidas de cero, uno
o varios de los siguientes argumentos o modificadores:
B num Este modificador hace que la entrada y la salida sea bloqueada al factor de bloqueo es-
pecificado en num. Si este modificador es especificado, la utilidad tar podrfi trabajar a
traveS de canales de comunicaci6n don& el bloqueo no pede ser mantenido.

b num Hace que la utilidad tar use el &mer0 especificado en num como el factor de bloqueo
de los registros del archivo de cinta. La utilidad tar determina autodticamente el ta-
mail0 de bloqueo cuando se lee UM cinta (opciones x y t). Con fines de portabilidad, se
aconseja utilizar en 10s archivos tar de cinta un factor de bloqueo 20.

-
10 FlCHEROS DE CINTA 243
Programas de Utilidad UNIX

f j a ? La utilidad tar usa el fichero especificado enfile como el nombre del archivo, en vez
del archivo de defect0 (dev/ci&). Si especikamos un carticter gui6n (-) como nombre
de fichero, la utilidad tar escribe en el standard-output o lee del standard-input. Asf la
utilidad tar puede ser usada como principio o fin de un filtro.

La utilidad tar tambien puede ser usada para mover ficheros jerilrquicamente, emitiendo
el siguiente command-line:

cd dirorigen ;tar cf - .I (cd dirdestim ;tar xpf -)


h Permite a la utilidad tar seguir 10s links simb6licos en la inclusi6n de ficheros como si
fuesen ficheros normales o directorios.

I La utilidad tar envfa un mensaje de mor si no resuelven 10s links de 10s ficheros que se
e s t h copiando. Si no especificamos este modificador, la utilidad tar no visualiza nin-
@n mensaje de mor.
m Este modifcador hace que la utilidad tar no mantenga las fecbas de modificaci6n origi-
nales de 10s ficheros. La fecha de modifhci6n =ti la fecha de extracci6n.

0 Este modificador es suministrado con fines de compatibilidad para versiones de la utili-


dad tar mas antiguas.

P Conserva 10s permisos del fichero original en 10s ficheros extrafdos, ignorando la utili-
dad umask presente.
v Hace que la utilidad tar visualice el nombre de cada fichao procesado. Este modifica-
doh especificado con la clave t, visualiza informaci6n adicional de cada fichero.

W Hace que la utilidad tar visualice la acci6n que va a ser tomda, seguida del nombre de
fichero, esperando que demos la mnfirmaci6a Una respuesta si (y) al prompt, indica
que la q i a es ejecutada; cualquier m a respuesta indica que la q i a no es realizada.

Argumentos
jkhero Indica el nombre o nombres del fichero o ficheros (0 directorios) que van a ser salva-
dos o restaurados. En ~ u a l q ucaso,
i ~ la apariencia de un nombre de directorio se refie-
re a los ficheros y subdirectorios (recursivamente) de ese directorio.

Ejemplos
El siguiente command-line tar crea un archivo de cinta en el dispositivo/dev/&pee/tapeZ, e s p
cificando un factor de bloqueo 20. El archivo de cinta contendrti los ficheros y subdirectorios
del directqio en curso (.). El modificador v visualizarii los ficheros salvados:

aJ
$ tar cVfb/dev/&pe/tapel20 .
a Jaddiario 26 Blocks
a Jum-opexator 4 Blocks
a Jmenusd 21 Blocks
a Anstalar 9 Blocks
...
244 -
10 FICXEROS DE CINTA
Programas de Utilidad UNIX I

El siguiente command-line tar visualiza la tabla de contenidos de la cinta /dev/n&pe/kzpelrn


piada en el ejemplo tar anterior:

$ tar tvf/&v/Mzpehpel
blocksize = 20
drwxr-xr-x 21320 0 Jul 18 212540 2001 J
-rwxr-p-I 213/20 13059 May 20 00:34:111997 Jaddmrio
-~WXT-P-I 213/20 2009 Mar 13 21:38:55 2000 Jcron-operator
-rwxr-xr-x 213120 4588 Dec 9 184323 1999 Anstalar
-rwxr-xr-x 213120 10622 Dec 10 18:30:07 1999 Jmenusd
...
El siguiente comando tar copia (opci6n x) y lista (modificador v) el contenido del archivo tar
de la cinta montada en el dispositivo/devlhnt02, al directorio new&. Observernos que la cinta
fixecopiada a un factor& b l q e o 8:

$ cd new&
$ tar Kfv / ~ / ~ 0 2
bIocksize = 8
I.
x Jmainx, 734 b-2 tape blocks
I Jcjecutam, 20672 bytes, 41 tape blocks
...
El siguiente command-line crea un archivo tar en un fichero de disco. Usa el modificadur f para
crear el archivo backup.tar en el directdo/hnp. El archivo ba&p.tm mntiene el directcxio de
defecto del usuario y su mntenido (todos sus subdirecturiosy ficheros):

$ tar cf Iymp/backup.tar$HOME

Utilidad dd
Descripcwn
La utilidad dd lee el fichero de entrada especificado, realiza las mnversiones especificadas, y
copia el fichero de salida en el dispositivo de salida especificado. Por defecto son usados como
ficheros de entrada y salida el standard-inputy el standard-output.

Fomato
dd [opcih=vaZor ...I

Argurnentos
opciiin=valor
El argument0opcibn=valor puede sa establecido en el command-line d 4 tomando cual-
quiaa de las siguientes furmas:

bs=n Establece el tamaa0 del bloque de entrada y salida al especificado en n, sustitu-


yendo las qxiones ibs y o b .

-
10 FICHEROS DE CIlUTA 245
Programas de Utilidad UNIX

cbsa Especifica el t a a o del buffer de conversi6n (valores block y unblock) en


bytes; el defecto es 0.

conv=especi~~~n[pspecificaci6n ...I
Ejecuta la mnversi6n dada en especificcidn; donde especificuci6n puede sa
uno de los siguientes parhetros:

ascu Convierte texto EBCDIC a ASCII.

block Convierte los registros de tamafio variable a tamaAo fijo.

ebcdic Convierte texto ASCII a EBCDIC.

ibm Hace una mnversi6n de ASCII a EBCDIC ligeramente diferente.

lcase Convierte caracteres alfaWcos a mintlsculas.

noerror No para el proceso si se produce un mor.

notrunc No truncael fichero de salida.

swab Intercambia parejas de bytes.

sync Completa cada registro de entrada para la apci6n ibs.

uwe Convierte caracmes alfaWcos a ma@culas.

unblock Convierte registros de tamaflo fijo a -0 variable.

count=n S610 copia el Illsmero de bloques de entrada especificados en n.

fileslr Copia y concatena el nemero de ficheros de entrada especificados en n, antes de


la terminaci6n. Tiene sentido cuando la entrada es una cinta magnetics.

ibs=n Indica el tamafio del bloque de entrada al nfimero de bytes especificado en n. El


defecto es 512 bytes.

if=file Especifica el nombre del fichero de entrada. El defecto es el standard-input.

iseeklr Se posiciona en el bloque especificado en n desde el comienzo del fichero de


entrada, antes de comenzar la copia.

obs=n Especifica el tamail0 del bloque de salida al ncmero de bytes especificado en n.


El defecto es 512 bytes.

of=m Especifica el nombre del fichero de salida. El defecto es el standard-output.

oseeklr Se sittia en el bloque especificado en n desde el comienzo del fichero de salida,


antes de comenzar la copia.

s k i p a Salta el ncmero de bloques de entrada especificados en n, antes de comenzar la


copia. Los bloques saltados son realmente leidos, por lo que esta opci6n puede
tomar una cantidad de tiempo considerable.

246 10 -FIC€iEROS DE CIhTA


Progrupzas de U t i l W UNIX . I

Notas
El tamafio del bloque de entrada y salida en la utilidad dd, puede ser especificado para aprove-
charse de la WS Blsica. Los &minos bfoque y registro se refieren a la cantidad de dam lefdos o
escritos por la utilidad dd en una operaci614 y no tienen necesariamente el mismo tamaflo que
un bloque de disco.
Cuando se especifican tamaftos,se apefa.! un ncimero de bytes. Un ncimero puede finalizar con
las letras w, b o k, especificando una multiplicaci6n por 2,5 12 6 1024, respectivamente; entre
dos ~~Smeros puede ir un sign0 x para indicar un producto.
Despuh de finalizar la ejecuci611, la utilidad dd visualiza el ncimero total (t) y el parcial (p) de
bloques de entrada y salida:

t+p records in
t+p records out

Ejemplos
El siguiente command-line copia el f i c k o menu del directorio en curso a la cinta montada en
el dispositivo/dev~peOol:

$ dd ifntenu ofd&vhrtape@l
20+1 records in
20+1 records out

El siguiente ejemplo Convierte el fichero de texto ASCII, zext.asc& a reptesentacj6n EBCDIC,


alrnacedndolo en el fichero text. ebcdic:

$ dd if=t&ascii of=&xkebcdicconv=ebcdic
1+1records in
1+1m r d s out

Es muy comh etique€arlas cintas de backup para asegurarse que se monta la mecta. El si-
guiente script, etiquetar, realiza el etiquetado cornprobando el texto kcleado con el grabado:
4i cat etiquetar
-
# script: etiquetar Etiqueta una cinta.
mt -f /deV/ntape/tapel rtwind
if [ $? -ne 0 ]
then
echo La anta no est5 monhda.
exit
fi
echo "Teclea el texto de la ctiqueta: h"
read text0
echo stexto I dd of=/dev/ntape/tapel
mt -f /dev/ntape/tapel rewind
etiqueta=*ddifddev/ntapdtapef
if [ "Stexto" != "$etiqueta" ]
then
echo La etiqueta grabada no cs igual que el texto tecleado.
echo Para grabar una nueva etiqueh vdver a ejecutar el script
else
echo La etiqueta grabada es: Setiqueta
mt -f /dev/ntape/tapel rcwoff
fi

-
10 FICHEROS DE CINTA 247
Programas de Utilidad UNIX

UtiZidad dump
Descripcibn
La utilidad dump copia todos los ficheros de unfile-system local especificado (0 s610 los fiche-
ros modificados despub de una fecha &&), al dispositivo de defecto (usualmente ldevlcinta),
o a otro dispositive de almacenamiento especificado.

Fomato
dump [-opciones]fik-system

Opciones
-0 a -9 Especifica el nivel de volcado. Si especificamos -0 es volcado el file-system com-
pleto. Un nfimero de nivel superior a -0, backup incremental, volar6 los fichexos
modificados desde el atimo volcado de un nivel inferior.

-b bloques Especifica el nfimero de bloques de 1024 bytes que van a ser escritos en el sopork
del volcado. El nfimero 6ptimo de bloques dependail de cadaordenador.

c Hace que la utilidad dump use un tip de cinta distinto al tip de cinta de defecto.

-ddensidad Especifica la densidad de escritura del saporte de memoria expresado en bits pat
pulgada. La densidad ser6 autonxlticamente suministrada por los dispositivos so-
portados por el sistema.

-E Visualiza el estimado del fichero volcado en bloques de 1 kbyte, y el 4-


mer0 de volfimenes o fraccidn que Ocupa el fichero volcado.

-f device Escribe el volcado en el dispitivo especificado en device, en vez de en el dispo-


sitivo de cinta de defecto (dev/cinta). Si en device especificamos un car6cter gui6n
(-) como nombre de dispositivo, la utilidad dump escribe en el standard-output.

-I etiqtceta Especifica la etiqueta que va a ser usada en la cinta de volcado. El defecto es sin
etiqueta (nl).

-n Hace que la utilidad dump, cuando sea necesario, trmmita un mensaje de reque-
rimiento al usuario operator.

-stamaiio Indica el tamaRo de la cinta en pies. Cuando el tamafio &do en tamaiio es alcanza-
do, la utilidad dump envia un mensaje al opexador para que el m e t e sea cambia-
do. El tamafio de la cinta es autonxlticamente suministrado por el dispositivo.

-U Si el volcado texmina correctamente, escribe la fecha y hcra del comienzo del vol-
cad0 en el fichero/etc/dumydates.

-W Comunica a1 usuario operator losfile-systems que deben sex volcados. Esta infor-
maci6n es obtenida de 10s ficheros /etc/dumpdates y /efc#sStab. Esta opci6n visuali-
za un registro par cadafile-system incluido en el fichero/etc/duq&es.

24.8 -
10 FICHEROS DE CINTA
Programas de UtiMad UNIX

Argurnentos
fice-system Es el mrnbre delfiZe-sysfem cuyos directories y ficheros s e r h copiados al disposi-
tivo de cinta especificado.

Notas
El sistema UNM dispone de otras utilidades similares a las utilidades dump y restore, las utili-
&des rdump y rrestore, usadas para salvar y restaurar ficheros de o a un dispositivo remoto,
respectivamente. La utilidades rdump y rrestore requieren que siempre sea especificada la op-
ci6n -f con el formato #n&quh:&pos~vo, indicando que el fiZe-syszem es salvado o restaurado
a @adsde la red de o a una maqUina y dispositivo remota.

El nivel de volcado es un nfimero de 0 a 9, que define una jerarqufa de 10s fichaos que van a ser
salvados delfile-sysfem al dispositivo de volcado cuando la utilidad dump es ejecutada. Un ni-
vel de volcado 0 indica que s e r h salvados todos los ficheros delfile-sysfem. J a s nfirneros de l
a 9 realizan un backup incremental, salvando los ficbos nuevos y 10s modificados desde el a-
timo volcado de un nivel inferior.

La fecha de volcado dice! al prowso dump Cuando se hizo el tlltimo backup delfile-system. Esta
fecha es registrada par el promso dump si el volcado finaliza cmectamente.
Un proceso dump requiere la intervenci6n del operador cuando se dan una de las siguientes
condiciones: final de cinta, final de volcado, error de escritura en la cinta o error en el dispositi-
vo. Adicionalmente, especificando la opci6n -n,alerta al operadm de posibles requerimientos.

Usualmente, el procedimientodel salvado de ficheros de la utilidad dump genera fichem log


en los que figuran datos como el orden de losjile-systems salvados, la faha en la que se realiz6
el salvado, etc., 10s cuales nos serh rEtiles al hac= una re~tauraci6nde ficheros espedfcos.

Ejemplos
El siguiente command-line ejecuta un volcado compleao, nivel0, en el cual la utilidad dump
copia todos los ficbos delfile-system hsr a la cinta montada en el dispositivo/&v/nntlh. La
opci6n -u especifica que la utilidad dump va a actuahu el fichero /etc/dumpdi&s &pub de
a

realizarse el volcado delfile-system; y la opci6n -n especifica que el opeador recibirtl un men-


saje de requerimiento cuando se necesite. La @6n -b estabIece el tamaho del bloque a 32 Kb:

# dump -Oun -i/&v/nntlh -b 32 hsr I

El siguiente ejemplo obtiene y visualiza un nfimero estimado de bloques y volfimenes de la se-


sibn de volcado de nivel0 en curso:

# dump -0Ef/dev/rmtZh hsr


3586% blocks, 0.19 volumes

El siguiente ejemplo hace un backup incremental de nivel3 delfile-system /wr al dispositivo de


cinta /dev/tapeOZ,actualizando el ficheroletc/durnp&tes:

# dump -3u -f /dev/tapeOZ ksr

-
10 FICHEROS DE CINTA 249
Programas de Utilidad UNIX

Utilidizd restore
Descripcibn
La utilidad restore restaura fichaos previamente salvados con la utilidad dump, alfile-system o
directorio especificado. El proceso restore es controlado con las @ones seleccionadas, las
cuales pueden SK especificadassiempre que 10s fichaos sean restauradas de cinta.

Formato
...
restore [ - o p c l o n e s l ~ ~ r o

Opciones
-i Esta @6n permite la restauraci6n interactiva de 10s fickos de UM cinta copiada
con la utilidad dump. Despub de leer la informaci6n del directopio de la cinta, la
utilidad restore propmciona una interface parecida a la del shell, que permite
vemos en torno al &bo1 del directorio, seleccionandolos ficheros que queremos co-
piar, 10s cuales serh extrafdos con el subcomandoextract.

Los siguientes son 10s comandas disponibles de la apci6n 4. Para 10s comandos que
requieren un argument0 (arg), el defect0 es el directcxioen curso:

Is [arg] Lista el directorio en curso o el directurio especificadoenarg.


cd [arg] Nos traslada del directorio en curso a l dimtori0 especificado en-.

pwd Visualiza el nombre del path del directurio en curso.

add [argl
Agrega los fichaos del directorio en curso o 10s ficheros del directorio es-
pecificado enarg, a la lista de fichaos que van a sa extrafdos de la cinta.

delete [arg]
Bma 10s ficheros del directorio en curso, 10s fichaos del directorio especi-
ficado en arg o los ficheros especificados en arg, de la lista de fichaos que
van a ser extraidos de la cinta.

extract Extrae todos 10s fichaos de la cinta que e s t h en la lista de extracci6n.

verbose Activa o desactiva el modo verboso, haciendo que el comando Is liste 10s
nrEmeros de inode de la lista de ficheros que van a ser extrafdas.

help Visualiza un resumen de 10s comandos interactivos disponibles.

quit Termina en el acto la actividad de la utilidad restore.

-r Restaura todos los ficheros de una cinta. Es de&, la op>ci6n-r restaura Un volcado
completo a unfile-system vado, o restaura un volcado incremental despuQ de una
restauraci6n de nivel0 completa.

250 -
10 FICHEROS DE CIhTA
-R La utilidad restore solicita una cinta determinada de un archivo multivolumen esta-
blecido, con la cual se va a reiniciar una restauraci6n completa.

-F nombre
Lista 10s ficheros especificados en numbre si 6then la cinta. Si no se especifica el
argumento numbre, son listados todos 10s ficheros del directurio root almacenados
en la cinta, excepto si la 4pci6n -h es espificada.

-x nombre Extrae de la cinta 10s ficheros especificados en nombre. Si en nombre se especifica


un directcnio cuyo contenido est6 en la cinta y el modificador -h no es especificado,
el directurio es extraid0 recutsivamente. Si en el argumento nombre no es especifi-
cad0 nimn fichero, es extrafdo todo el contenido de la cinta, excepto si es especifi-
cad0 el modificadur -h

Las siguientes @ones a d a n mmo rnodificadores de las opciones anterimes:

-d Activa el modo depuraci6n.

-b tamaiio Especifica el tamaaodel bloque de la cinta en Kbytes. Si la @6n -b no es especiti-


cada, la utilidad restore trata de de€erminarel tamafio del b l q e & la cinta didmi-
camente.
-f device Especifica el dispositivo del archivo de cinta, reemplazando d dispositivo de cinta
de defecto. Si el mmbre de device es un cadcter gui6n (-), la utilidad restore lee del
standard-input. As€,las utilidades dump y restore pueden ser usadas en un pipeline
para volcar elfile-system con el siguiente c o d - l i n e :

-
dump -of /usr I (cd hnnt; restore -xf-)

-h Restaura ficheros a un nivel del directorio especifkado. De esta forma evitamos res-
tauraciones recursivas de subibboles completes de la cinta.

-m Restaura 10s ficheros por el dmero de inode, en vez de por el nombre de fichero.
Este modificador es titi1 cuando se extraen pocos ficheros y queremos evitar la rege-
neraci6n del path & cada fichero.
-N Dice a la utilidad restore que no escriba en el disco. Este modificador puede ser
usado para validar las cintas desputs de un volcado.

-s ntSmero Indica el niimero de fichero a restaurar. La numeracidn de ficheros comienza con 1.

-v Hace que la utilidad restore visualice el nombre de cada fichero restaurado.

-Y Cuando se produce un mor de cinta, la utilidad restore no pregunta si puede abortar


la restauraci6n. Este indicador ham que la utilidad restore trate de saltar el bloque o
bloques defectuosos, continuando la aperaci6n de extracci6n de ficheros.

Argumentos
fichero Especifica el nombre o nombres de 10s ficheros o directories que van a ser restaura-
dos por la utilidad restore.

-
10 FICHEROS DE CINTA 251
Programas de Utilidad UNIX

Notas
Despuh de una restauraci6n completa de unfile-system debe hacerse un backup de nivel0, con
el fm de obtener la nueva numeraci6n del nuevo inode.

Las utilidades dump y restore utilizan el fichero /etc/dumpdutes para mantener un historial de
los volcados ejecutados. Este fichero consta de registros bnicos. Cada registro contiene: el nom-
bre telfile-system, el nbmero de nivel de volcado y la fecha del bltimo volcado. El fichero
/etckkrnpdates, si fuse necesario, puede ser editado para modificar cualquiera de sus campos.
El siguiente es un extract0 de un fichero/etc/dumpdutes:

$icat /etc/dumpdates
IrOotO Sat Oct 21 00:01:55 2000
troatao Sat Oct 21 00:04:212000
lusr 0 Sat Oct 21 00:07:312000
lusn 0 Sat Oct 21 00:10:012000
...
Las utilidades dump y restore tambit% utilizan el fichero /et@stab para identificar el path del
file-system montado. Los registros de ate fichero coastan de 6 campos; el primer0 contiene el
nombre del dispositivo, el segundo el nombre delfile-system, el tercer0 el tip delfile-system, el
cuarto las apciones mount, el quint0 la h e n c i a del volcado y el sexto el nfimero pass para ve-
rificar elfile-system. El siguiente es un ejemplo de un fichero/etc&tzb:

$ cat/et@stab
Ideddb mpl ufs swo2
rOot-domainffroos I adds rw,userquota,gmupquota 12
lP* Ipm procfs rw00
usr-domain#usr lusr advfs rw,userquota,gmupquota 1 2
l.CStU#lUSers Ausers advfs rq,userquota,groupquota 1 2
l.CStU#llocal Nocal advfs rw,userquota,pupquota 1 2
rrsto#tmp ltmp advfs rw,userquota,groupquota 1 2

Ejemplos
El siguiente ejemplo restaura en el directorio de trabajo en curso todo el contenid0 de la cinta
montada en el dispositivo/dev/nrtoI:
# restore -rf /dev/tutpOl

El siguiente command-line restaura en el directorio en curso 10s ficheros /etc/lzosts, /etc/fstab y


hsr/ceca/notas de la cinta montada en el dispositivo /&v/nrtpOI:

# restore x i /dev/nrtpOl /etchosts /etc#stab hsr/cecu/notas

El siguiente comando restore puede establecer una sesi6n interactiva, y junto con 10s comandos
de la apci6n -i, emitidos en el prompt: (0, restaurar en el directorio /tq10s ficheros deseados
ubicados en elfile-system ncmero 2 de la cinta montada en el dispositivo /&v/ntapel:

#cd/tmp
# mt -f/dev/ntapel rewind
# mt -f/&v/ntapel fsf 3
# restore -f / d e v / e e l -i
# 0

252 -
10 FICHEROS DE CINTA
Programas de U t i l W UNIX i,

-
11 SISTEMA DE CONTROL DE VERSIONES (RCS)

Introduccio'n
El RCS (Revision Control System) es un sistema de control de versiones, usualmente mantenido
bajo la versi6n Berkeley de UNIX, disef'iado para manejar vmiones mt3ltiples de ficheros, y
controlar el acceso a programas fuente. El RCS realiza, de forma autodtica: el almacenamien-
to, el registro cronoI6gic0, la identificaci6n y la fusi6n de versiones de ficheros. El RCS es tltil
en fichems de text0 (programas, documentos, etc.) que son frecuentemente modificados.
El RCS suministra procesos check-in (procesos que verifican la existencia de versiones de fiche-
ros RCS para depositar y achnlmu
* esas versiones), y procesos check-out (procesos que verifi-
can fickos RCS para recuperar ficheros de trabajo para la lectura, modificaci6n, etc.).

El proceso check-in es requerido en la inicializaci6n de un fichero en el sistema RCS y post&


riormente en la actualtzac
* i6n de ficheros bajo la protecci6n del RCS. Durante un proceso check-
in iniciul, el usuario recibe un prompt para que introduzca un f a o descriptivo del fichero. Du-
rante un proceso check-in n o d , el usuario recibe un prompt para que introdma una entrada
al log del fichero RCS desaibiendo las modificaciones realizadas.

Para utilizar un fichero bajo el control del RCS, el fichero debe ser hecho check-our, estando
petmitidm dos t i p de check-our. Un primer check-out n o d para recupaar una copia del
fichero fuente en modo read-only, y un segundo check-ourbloqueado para que el fichero fuente
recuperado pueda ser mMicado. Cuando un usuario e-ta este segundo check-out, se dice
que el fichero esta bloqueado, y ning6n otro usuario puede hacerle check-out ni modifcarle.
Para liberar el bl04w0, el usuario debe hacer check-h al fichero Wficado.
Usualmente, los ficheros RCS e s t h ubicados en un directorio llamado RCS,donde son manteni-
das mslltiples versiones en esos ficheros por el sistema RCS. El usuario no necesita espe&Icar
este directorio cuando realiza aperacioneS espedficas del RCS. El sistema RCS opera como una
libreria en la que un ficko contiene la versi6n inicial del programa fuente y versiones con to-
das las modifcaciones h e c h al programa.

Cada versih de un fichero es especificado por un nslmero de versi6n. Una versi6n esUI com-
puesta de dos o maS campos num&cos separadas par caractere punto (.). A no sa que se espe-
cifique lo contrario, 10s comandos del RCS m
an sobre la 6ltima versi6n de un fichero.
A1 conjunto de versiones de un fichero RCS se le denomina drbol de versiones. Un Arb01 con
p a s versiones suele tener r u m de dos campos, aunque la numeraci6n de un Arb01 de versi+
nes en un fichero RCS permite hasta cuatro campos:

versih nivel ranmnivel


A los campos: versi6n.nivel se les denomina tronco; a los campos ramrrnivef se les denomina
rama; aunque usualmente, a todo el conjunto, y particularmente al tronco, se le conwe como
versidn. Para evitar conflictos, se sugiere no utilizar la rurna a no ser que sea necesario.

Cuando el RCS crea un fichero inicial le asigna la numeraci6n: 1.1 (versi6n 1, nivel 1). Cada
versi6n sucesiva tendril, por defecto, un grab mils alto al del nivel inicial: 1.1, 1.2, 1.3, etc. La
numeraci6n del tromo, adem& de por defecto, puede ser cambiada con el comando ci del RCS.
Una r u m es creada con el comando ci a partir de un tronco, por ejemplo, a partir del tronco 1.3
podriacrearselarama 1.3.1.1.

11 -SISTEMA DE CONTROL DE VERSIONES (RCS) 253


Programas de Utilidad UNIX

Funciones del RCS


El Sistema de Control de Versions (RCS) realiza las siguientes funciones:

Deposita y recupera de forma automtitica versiones mliltiples dejicheros de t w o . El RCS


salva a memoria todas las versiones previas de forma eficiente. Modifica el fichero origi-
nal, no lo destruye, ya que las versiones previas permanecen accesibles. Las vexsiones pus
den ser recupadas conforme a: nfimeros de versi6n, nombres simMIim, fecbas dr: crea-
ci6n, autores, y estados.

Mantiene un historid completo de todos 10s cambios redizados alfichero. El RCS registra
cronol6gicamente todos los cambios de forma autom&ica. A dem del texto de cada ver-
si&, el RCS registra: el autor, la faba y hora del check-in, y un mensaje resumiendo 10s
cambios. El registro c~0n0l6gic0hace que sea facil saber lo que se ha hecho a un progama,
sintener quecompararlistados fuentes ni preguntar aotras personas.

Resuelve incompatibilidades de acceso mediate el bloqueo de la versidn. Cuando dos o


usuarios desean modificar la misma versi6q el RCS avisa al usuario y pone medios pa-
ra evitar este conflicto.

Matiene un Mol de versiones. El RCS puede mantenex lfneas separadas de 10s cambios
de cada programa. El RCS registra una eshuctura de &bo1 que representa la relaci6n ances-
tral entre distintas versiones.
Fusiom versiones y resuelve conflicfos. Dos Uneas separadas, de los cambim de un mb-
dulo, pueden sex unidas poc fusi6n. Si las versiones que van a ser fusionadas afedan a las
mismas secdones de1 programa, el RCS avisa del solapamiento de 10s cambia.

Controla las versiones por el estado y por las configuraciones. Las versiones pueden sex
asignadas a nombres Wcos y marcadas como libadas, estables, eJrperimentales, etc. Con
estos medios las configuraciones de 10s programas pueden ser descritas f6cilmente.

Identijica cuda versidn de forma autodtica. El RCS identifica las versiones mediante ca-
denas especiales (identtjicadores),10s cuales identifican una versi6n: par el nombre simW
lico, por el ntlmero, por la faha y hora de creaci6n, por el autor, e&. La identificaci6n se
asemeja a UM estampilla que puede ser incrustada en el lugar apropiado del texto de una
versi6a La identificaciidn hace que sea f6cil determinar que versiones de que programas
componen UM co1@uraci6n dada.

*Minimiza memoria awriliar. El RCS necesita poca memoria adicional para las versiones
(except0 en las diferencias). Si son borradas versions intermedias, los deltas correspon-
dentes son coqrimidos en conformidad

Visualiza las diferencias entre versiones de unjichero. El RCS compara dos versiones, o
UM vezsi6n con el fichero de trabajo, visualizando las diferencias en el standard-output.

Permite cambiar atributos aficheros RCS. El RCS tiene medios para cambiar algunos de
10s atributos de un fichero RCS, por ejemplo: borrar una versi6n especffica, agregar un
nombre de login a la lista de acceso,borrar el nombre simb6lico de una versi6n, etc.

Permite seleccionar versiones de varias maneras. El sistema RCS permite especificar ver-
sions de ficheros RCS de forma selectiva de distintas maneras: por el nfimero, por el esta-
do, por el autor, pur la fecha y par el nombre.

254 -
I1 SISTEbE4 DE CONTROLDE VERSIONES
Promamas de Utilidad UNIX g

Comandos del RCS


El Sistema de Control de Versiones consta de una combinaci6n de comandos propios, con los
cuales podemos r e a k las distintas funciones del RCS. (Aunque un usuario principiante s610
necesitarfa aprender ckx de los comandos RCS: ci y co).

Los sipientes son 10s comandos del RCS y un resumen de las funciones que Qtos rdizan:

Ci Realiza procesos check-in a versions de ficheros RCS. Pone ficheros fbente bajo el
control del RCS, a partir de 10s cuales crea y deposita versions de ficheros RCS en
un fichero de archivos llamado RCS.

co Realha procesos check-out a ficheros RCS, bajo el control del sistema RCS. Recupe
ra ficheros de trabajo a partif de versiones de ficheros RCS.

ident Identifica versiones de ficheros RCS, para lo mal extrae 10s valores de 10s identifcu-
dores insatados en 10s ficheros RCS.

rcs Crea e inicializa nuevos ficheros RCS, cambia y establece atributos a ficheros RCS
existentes.

nsclean Borra 10s fickos de trabajo que fueron hechos check-out y no fueron modifrcados.

rcsdiff Compara versiones de un fichero RCS, visualizando las diferencias en el standurd-


output. Amla como la utdidad diff.
Establece m&es a varioS elementos de una configuraci6n de fickos RCS.

rcsmerge Fusiooa 10s cambios entre dos versiones en el cmrespondientefichero de trabajo.

rlog Visualiza la infarmaci6n registrada en el log de 10s ficheros RCS. Par cada fichero
RCS especifcado w5 visualha una informaci6n completa: nombres de 10s fichaos
RCS y de trabajo con sus paths respectivos, niirnero de la versi6n mih reciente, etc.

El RCS dispone de dos ficheros con informaci6n adicional relativa al sistema RCS:

rcsfile Describe el formato de un fichero RCS.

rcsintro Nos introduce al Sistema de Control de Versions (RCS).

Los permisos de 10s ficheros UNIX algunas veces no son bastante efectivos, ya que pueden ser
establecidos incarrectamente o pueden existir permisos que no nos faciliten el acceso. El RCS
implementa su propia lis& de acceso en cada fichero RCS, Por defecto, la lista de acceso de un
fichero RCS est6 vada y puede acceder a ese fichero cualquier usuario autorizado.

Para que 10s comandos del RCS funcionen, el nombre de login del invocante debe estar en la
lista de acceso del fichero RCS, except0 si la Uta de acceso esttl vacla, o el invocante es el pro-
pietati0 del fichero o un usuario superuser.

A no ser que se especifique lo contrario, 10s comandos del RCS, par defecto, ach3an sobre la d-
tima versi6n de un fichero RCS.

11 -SISTEMA DE CONTROLDE VERSIONES (RCS) 255


Programas de U t i W UNIX

Familiarizarse con el RCS


El fin de esta secci6n es iniciarse y familiarizarsecon el Sistema de Control de Versions (RCS).
No debemos preocuparnos par las dudas que nos surjan en esta secci6n, &as las resolveremos
siguiendo el studio del capftulo.

El funcionamientodel RCS es muy simple. Usualmente, 10s ficheros RCS son mantenidos en un
subdirectorio llamado RCS,de esta forma, el usuario no necesita especificar ate directorio para
depositar o recupem ficheros.

Supongamos que tenemos un fichero fuente llamadof&.c y queremos ponerlo bajo el control
del RCS. Si todavfa no tenemos un directorio para tal fin, crearlo con el siguiente comando:

mkdir RCS

Ahura invocar el comando ci para ham un check-in al ficherofile.~:

cifile.c

Este comando crea un fichero RCS con nombrefile.c,v y versi6n 1.1 en el directario RCS, bo-
rrando el fichero frle.c. Al mismo tiempo, el comando ci nos visualiza un mensaje con un
prompt para que introduzcamos un text0 descriptive del contenido del fichero, ya que &e es un
check-in iniciul. Cada comando ci emitido posteriormente har6 un check-in normal a un fichero
RCS, el cual tambien visuaiizard unprompt para que introdwarnos un texto, per0 &e deberd
indicar l a cambia hechos al fichero.

Los ficheros del directorio RCS son llamados fickos RCS, 10s otros ficheros son llamados fi-
cheros de traba.. Para recupem el fichero de trabaj0jZe.c del ejemplo previo, pur ejemplo,
para leerlo, emitiremos un comandoco, con el cual haremos un check-out a1 fichero:

c0file.c

Este comando recupexa la tlltima versi6n del fichero RCS en modo s61o-lectura, y la escribe en
el ficheroj3Ze.c. Si queremos ham modifcaciones al ficherofife.c, tendremos que bloquearlo al
mismo tiempo que le hacemos check-our, emitiendo el siguiente comando:

co -1file.c

Ahora, a
dem de leer y compilar el ficherojZe.c, tambien podemos escribir en 61.

Supongamos que despuQ de algunas ediciones queremos saber 10s cambios realizados al fick-
ro. Por ejemplo el siguiente comando:

rcsdifff&.c

visualiza las diferencias entre la versi6n maS reciente modificada antes de ser hecha check-in, y
el fichero de trabajofikc. Al ficher0file.c podemos hacerle otro check-in despuh de ser modi-
ficado, invocando el siguiente comando:

cifiikc

el cual deposita el ficherofikc en el carrespondientefichero RCS, lo borra del directorio de tra-


bajo, libera el bloqueo, e incrementa el ntimero de la tiltima versi6n en 1.

2S6 I1 -SISTEMA DE CONTROL DE YERSIONES


Program de U t i l W UNIX,

Si un comando ci nos visualiza un mensaje como el siguiente:


ci error: no lock set by usetid

es que hemos intentado hacer un check-in a un fichero que todavfa no estaba bloqueado. Par
supuesto, ya puede ser tarde para hacerle un check-out bfoqueudo, ya que otro usuario podrfa
ha& sobrescrito nuestras modificaciones. En su lugar, invocar el siguiente comando:

rcs -I f k c
Este comando bloquearil la versi6n m& reciente de nuestro fichero fuente, a no ser que al@n
usuario ya se haya adelantado, en cuyo cas0 tendremos que entendernos con ese usuario.

El bloqueo a un fichero RCS asegura que s610 ese usuario puede hacerle check-in en la pr6xima
actualizaci6~1, evitando problemas Magradables si diversos usuarios trabajan con el mismo fi-
chero. Incluso, si una versi6n est4 bloqueada, siempre podril ser hecha check-out para lectura,
compilaci6n, e&. El bloqueo a un fichero evita que nadie haga check-in a ese fichero, except0 el
usuario que lo bloque6.

Si nuestro directorioes privado, es deck, si soma la ~ c persona


a que va a deposits versiones
de f i c b o en dicho directorio,el bloqueo estricto no es necesario y podemos desactivarlo, en
cuyo caso, el prqietario del fichero RCS no necesita bloquearlo, 10s otros usuarios, si.

El bloqueo esm’ctose activa y desactiva con 10s siguientes comandos, respectivamente:

rcs -Lfik.c
rcs -ufife.c
Si todada tenemos mezclados rmeshros ficherosRCS coo 10s d e d , y queremos separar unos de
otros, crear un subdirectorio con nombre RCS en nuestro directorio de trabajo y trasladar toQs
nuestros ficheros RCS a este dkctorio para localizar los ficheros deseadm. Los comandos del
sistema RCS funcionarh mectamente.
En realidad, 106 pares de ficheros: el fichero de trabajo y el fichKo RCS, pueden ser dados de
tres famas:
a) Especificando 10s dos ficheros.
b) Especificando el fichero de trabajo.
c) Espificando el fiChK0 RCS.

Ambos ficheros, el de trabajo y el del RCS, pueden tener prefijos de path arbitrarios. Lm co-
mandos del RCS acttlan de forma inteligente. (Ver“Especijicacibndeficheros”, Hgina 262).

Para evitar la desaparici6n del fichero de trabajo durante un proceso check-in (en cas0 de que
qumamos continuar la tectura, modificaci6n, etc.), invocar uno de 10s dos comandos siguientes:

ci 4fik.c
ci -ufik.c

Estos dos comandos hacen un check-in al ficherofilec de la forma usual, per0 ejecutan un
check-out implfcito. El primer comando bloquea la versi6n heck check-in, el segundo no. De
a t e modo, estas Opciones evitan una aperaci6n check-out. Ambos comandos actualizan los
identijicudores de nuestro fichero de trabajo (ver “ldentificudoresdel RCS‘, pAgina 277).

I1 -SISTEMA DE CONTROLDE VERSIONES (RCS) 257


P r o g r a m de Utilidad UNIX

Con el comando ci podemos dar el nfimero que queramos a una versi6n existente de un fichero
RCS. Se asume que todas nuestras versiones fueron numeradas como 1.1, 1.2, 1.3, etc., y que-
remos que el tronco comience con la versi6n 2s. Por ejemplo, 10s siguientes comandos:

ci -r2file.c
ci -r2.1file.c

asignan el nfimero 2.1 a la nueva versi6n. De aquf en adelante, el comando ci numerarA las sub-
siguientes versiones con 2.2,2.3, etc. Los siguientes comandos co:

eo - r 2 m . c
co -r2.lfile.c

recupan las versiones maS d e n t e s numeradas con 2 s y 2.1, respectivamente. El comando co


sin un nfimero de versi6n selecciona la versi6n maS reciente del fronco,es deck la versi6n mi%s
alta con un nfimero compuesto de dos campos. Los nfimeros con mi%s de dos campos son nec6
sarios en las ramus.Por ejemplo, el siguiente comando c i

ci -rlS.lfile.c

inicia una rama numerada en la versi6n 1.3, asignando el nfimero 1.3.1.1 a la nueva versi6n.
(Para miis informaci6n sobre ramas, VK “Ramas de versiones”, p5gina 279).

El RCS mantiene un historial de 10s mensajes al log y de las modificaciones h e c k a todos los
ficheros RCS. Por ejemplo, el siguiente comando:

rlog -hf&.c

visualiza la siguiente!informaci6n: nombres de los ficheros RCS y de trabajo con sus pafhs res-
pectivos, ntImero de versi6n maS reciente del tromo, rama de defecto, bloqueos, lista de acceso,
nombres simb6licos, sufijos y el &mer0 total de versiones. El comando rcs emitido sin opcio-
nes, visualiza por cada fichero RCS,una informaci6n maS coqleta.
El RCS permite poner identijicadores (cadenas especiales) en 10s ficheros de trabajo para identi-
ficar de forma autodtica 10s ficheros RCS. (Para m& de€alles sobre identijicadores, consultar
“Zdentijicadoresdel RCS’, pAgina 277, e “Zdentijicaci6n aufomtiticd‘,p5gina 291).

Los identificadores RCS son expandidos y actualizados al hacer check-out al fichero RCS. Para
obtener esta idenWicaci611, incluir el identificador deseado con el siguiente formato en la prime-
ra linea de un fichero de text0 y de un programa C , respectivamente, y hacerles check-in:

$I&
static char rcsidu = ‘$Id$” ;

Un subsiguiente check-out, sustituirfiel identificador $Id por una cadena de valores de la forma:

$Id:fichero,v versida fechu hora autor estatio $

El comando ident extrae el contenido de 10s valores de 10s identificadores de 10s ficheros RCS,
incluso de 10s fichaos objetos y dumps, permitiendonos localizar que versiones de que m6dulos
fueron usados en un programa dado.

Informaci6n maS completa de aperaciones con el RCS puede verse en “Ejemplos”,p 5 g h 280.

258 I1 -SISTEMA DE CONTROLDE VERSIONES


Prograbs de Utilidad UNIX <-.

Comando ci
Descn'pcih
El mmando ci pone ficherm fuente bajo el control del RCS. El cornando ci deposita el conteni-
do de cada fichero de trabajo eSpeCificad0, en cada carrespondiente fichero RCS. Un fichero
RCS (#ikhefo,v)contiene todas Ias versiones de un fichero determinado. Para depositar ficheros
bajo el sistema RCS, el comando ci realiza proems check-in a 10s ficheros de trabajo.

Formato
ci [-opciones]ficirero ...
Opcwnes
-r[versi6nJ Realiza el proceso check-in a la versi6n especificada en vemidn, libera el bloqueo
cmespondiente y elimina el fichero de trabajo. Este es el defecto. La opci6n -r
tiene ULI sianificado especial en el cornamlo ci; en otros comandos del RCS, la op-
ci6n -r, simplemente significa un nslmero de versi6n; per0 en el comando ci tam-
b i h libera un bloqueo y borra el fichero de trabajo.

-l[veMhJ Funciona igual que la opci6n -r, except0 que ejecuta un comando co -I adicional
de la vasi6n depositada. De eta f m , la versi6n deposita& es inmediatamente
echa check-out y nuevamente bloqueada, Esta acci6n es fitil para salvar una ver-
si6n si queremos se@ moditlcando el fichero &put% de hacer un check-in.

-u[verssdn] Funciona igual que la apci6n -I, except0 que la opci6n -u hace que la versi6n de-
positada no sea bloqueada. Est0 permite leer el fichero de trabajo nada n& ham
un check-in. Las opciones -I, -r y -u son mutuamente exclusivas. Por ejemplo, el
comando ci -u -r, es equivalente al comando ci -r, ya que la apci6n -r anula la
opci6n -u

-flversibnl ObIiga al mmando ci a depositar la versi6n bloqueada especificada en versibn,


aunque el fichero de trabajo no haya sido modificado.
-k[versihJ Examina el f i c k o de trabajo para ver 10s valores de 10s idenfijicdores, y deter-
minar su nfimero de versi611, fecha de creaci6n, estado y autor, para asignar estos
valores a la versi6n especificada en versidn, en vez de computarlos localmente.

Esta apci6n es cltil en la distribuci6n de software. Tambit% envia un mensaje al


log del ficheroRCS indicando el login del invocante y la fecha real del check-in.

-dvecha] La fecha especificada enf e c h s e d establecida en la versi6n hecha check-in. La


fechu debe ir entre comillas, ser maS alta que la de la versi6n precedente y dada
en formato libre (corn0 se espwifica en el comando co). Esta opci6n es cltil para
extender la fecha de check-in,y para la opci6n -k si no hay fecha disponible. Si se
omite lafechu es usada la fecha de la lIltima modificaci6n del fichero de trabajo.

-M[versih] Establece la fecha de modificaci6n que tiene el fichero de trabajo, en la versi6n


dada en versidn;la fecha debe ser m6.s alta que la de la versi6n precedente.

I 1 -SISTEMA DE COhTROL DE VERSIONES (RCS) 259


Programas de U t i l W UNIX

-q[versi6n] Suprime la salida generada por el RCS, excepto 10s mensajes al log y 10s de exrar.

-I[versibn] Modo interactivo; el usuario recibiril mensajes en el standard-output, aunque el


standard-inputno sea un terminal.

-mmensaje Utiliza la cadena encerrada entre caracmes comillas, especificada en mensaje,


como el rnensaje al log relativo a las modificaciones de la versi6n hecha check-in.
Esta opci6n anula el prompt del mensaje al log del fichero RCS especificado.

-nnombre Asigna el nombre simb6lico especificado en nombre a la versi6n heck check-in.


El comando ci emite un mensaje de errof si el nombre simb6lico especificado en
nombre ya eSta asignado a otra versi6n del fichero RCS especificado.

-Nnombre Igual que la opci6n -n, excepto que anula una asignaci6n previa del nombre sim-
b6lico especificado en nombre.

-Sf?StU& Establece el estado especKicado en estado a la versi6n hecha check-in. El atado


de defect0 establecidopar el comando ci, es Exp.

-*hero Esta opci6n s610 tiene efecto en un check-in inicial. Escribe el texto contenido en
el fichero especificado enfichero, corn texto descriptivo del fichero RCS, am-
land0 el rnensaje del texto demiptivo que visualiza el check-in inicial.

-tCadena Escribe el text0 encmado entre caractma comillas, especificado en cadem,


como texro descriptivo del fichero RCS. Esta opci6n s610 tiene efecto en un
check-in inicial. Si en un check-in inicial no es especifrcada la opci6n 4, el a~
mando ci obtiene el text0 descriptiuo del standard-input, introducido por el usua-
rio mediante unprompt.
-Wlogin Utiliza el nombre especifrcado en fogin como autor de la versi6n deposita&. Esta
opci6n es tltil para extender el nombre del autor de la versi611, y para la opci6n -k
si no hay autor disponible.

-Vn Emula la versi6n del sistema RCS dada en n. Ver opci6n -Vdel comando co.

-xsufijos Especifica 10s sufijos para 10s ficheros RCS. Un sufijo con contenido se cmes-
ponde con cualquier nombre finalizado en ese sufijo. Un sufijo sin contenido se
corresponde con cualquier path de la forma RCmhero opat~Cs/fichero.La
opci6n -x puede especKicar una lista de sufijos separados por un sign0 /. Por
ejemplo, la especificaci6n -x,v/ indica dos sufijos: ,v y el sufijo sin contenido.

Si son especificados dos o m6.s sufijos, estos son tratados en el orden en el que es
examinado un fichero RCS; el primer0 de ellos que aparezca es usado por ese fi-
chero. Si no es encontrado ningh fichero RCS, ~610puede ser creado un fichero
RCS, 10s sufijos son usados para determinar el nuevo mmbre del fichero RCS.

Argumentos
fichero Es el nombre o nombres del fichero o ficheros que van a ser tratados pot el CCF
mando ci. Los ficheros especificados enfichero pueden ser ficheros fuente (como
el especificado en un check-in inicial), o ficheros RCS. (VertambiCn "Especijica-
ci6n deficheros", p6gina 262).

260 -
I1 SISTEMA DE CONTROL DE VERSIONES
Notas
Cada fichero que se cmesponde con un sufijo RCS @hero,v) es tomado como un fichero RCS;
el resto se asume que son ficheros de trabajo. El comando ci deposita el contenido de cada fi-
chero de trabajo en el correspondientefichero RCS. Si &lo es dado un fichero de trabajo, el cm
mando ci intenta localizar el fichero RCS mespondiente en un subdirectorioRCS y &pub en
el directorio de trabajo. (Ver “Especificucibndeficheros”, pilgina 262).

Para que la utilidad ci funcione, el nombre de login del invocante debe estar en la Zistu de ucce-
so del fichero RCS, e x q t o si la lista de acceso est4 vada, o el invocante es el propietario del
fichero o un usuario superuser.
A no ser que se especifique la opci6n -f, el comando ci hace una verificacidn para ver si la ver-
si6n que va a ser depositada difiere de la precedente. Si la versi6n es igual, el comando ci, en
vez de crear una vasi6n nueva, nos revierte a la versi6n preuxknte, eliminando el bloqueo y el
fichero de trabajo. El comancb ci -I mantiene la versi6n bloqueada y el comando ci Y sin ble
q u a ; despu& ambos comandos generan un nuevo f i c k o de trabajo.
Si el fichero especificado no existe corn0 fichero RCS, es decir, si es un check-in inicial, el co-
mando ci lo crea y deposita el contenido del fichero de trabajo en este fichero RCS como la p&
mera versi6n (par defecto 1.1). En un check-in inicial, el comando ci visualiza un prompt para
que introduzcamos un mensaje al log que describa el contenido del fichero, el cud debe sa fi-
nalizado con un caractef end-of-jiZe o con un wilder punto (.) mco. (Vex tambien OpciSn 4).

Por cada versi6n posterior depositada, el comando ci visualizaril un prompt para introducir un
mensaje al log, el cual resumiril los cambia hechos al fichero RCS, en vez de un text0 descrip-
tivo, y debera ser terminado por un cacacttx end-of-fileo por un carikter punto (.) Wco.
Si se hace check-in a la misma vez a varia ficheros, el comando ci pregunta si reutilizamos el
mensaje al log previo. Si el standard-input no es un terminal, el comando ci suprime el prompt
y utiliza el mismo mensaje para t& los ficheros. (Vex tambien opci6n -m).

El nfimero de versibn de la versi6n depositada puede ser dado con una de las siguientes opcie
-I, -M,-q, -r y -u. La versi6n puede SK dada de forma simb6lica, nurnckica o
nes: -f, -I, -IC,
mixta. Si la verssn es un c a r W d6Iar ($), el comando ci d e c e r m i ~el nfimero de versi6n por
los valares del idenfificudordel fichero de trabajo (ver “ldentifcudores del RCS’, p6gina 277).
Si la versi6n dada en versidn es un nfimero de versi6n, el nfimero debe ser maS alto que el laL-
mer0 de nivel de la tiltima rama o tronco a la que pertenece la vetsih, o se debera comenzar
UM nueva rama.Si la versi6n dada en versibn es un nfimero de versi6n de la rama,en vez de un
n6mero de versi6n del tronco, el nfimero de la nueva versi6n del nivel de la rama extrema sail
incrementado en uno.

Si la versi6n es omitida, el comando ci intenta obtener el nfimero de la nueva versi6n del invo-
cante del tfltimo bloqueo. Si el invocante tiene bloqueada la versi6n extrema de una rama, el
nfimao de la nueva versi6n es agregado a esa rama. El nfimero de la nueva versi6n es obtenido
incrementando el nfimero de la versi6n extrema. Si el invocante no tiene bloqueado la versi6n
extrema, una nueva rama es comenzada en esa versi6n, incrementando el nfimero m h alto de
esa versi6n. El nfimero de defecto de la rama y del nivel inicial es 1.

Cuando la versibn es omitida, el invocante no tiene bloqueo, es el propiebrio del fichero y el


bloqueo estA establecido a no-estricto, entonces la versi6n es agregada a la versi6n m& alta del
tronco (ver opci6n -b del comando rcs, p5gina 266).

11 -SISTEMA DE COhTROL DE VERSIONES (RCS) 261


Programas de Utilidad UNIX

Especificacidn de ficheros
Los pares de ficheros: el ficheroRCS y el de trabajo, pueden ser especificados de tres formas:

1. Si son dados ambosficheros, elfichero RCS y eZfichero de trabajo. El path del fichero RCS
es de la forma: pafhZ/fihert+trabajo,v, y el path del fichero de trabajo es de la forma:
path2/@hero-trabajo, don& path11 y path2/ son paths (posiblemente diferentes o va-
cios),@hero-trabajo es un nombre de fichero, y ,v es el sufijo de 10s ficheros RCS. Si el
sufijo ,v est4 sin contenido,pathl/ debe sa RCS/ o finalizar en /RCs/.

2. Si sblo es dado elfichero RCS. Entonces el fichero de trabajo es creado en el directorio de


trabajo en curso, y el nombre del fichero es derivado del nombre del fichero RCS, elimi-
nandopathl/ y el sufijo ,v.

3. Si sblo es dado eZfichero de trabajo. El mmando ci mnsidera que cada sufijo ,v, a su vez
busca un fichtxo RCS de la forma:paWkCS/fihero=trabajo,v o path2//fichero-trabqo,v
(si el subdirectorioRCS no es encontrado y el sufijo ,v no est4 d o ) .

Si el fichero RCS es especiticado sin path en 10s puntos 1 y 2, el mmando ci primer0 busca el
ficheroRCS en el directorio.&CS y &spu& en el directorio de trabajo en curso.

Por ejemplo, supongamos que la extensi6n ,v es un sufijo RCS y el directurio en curso mntiene
un subdirectcn-iollamado RCS con un fichero RCS, llamado tio.c,v. Entonces, cualquiera de 10s
siguientes comandos Ci harg un check-in a una copia del fichero de trabajo ti0.c en el f i c k o
RCSltio.c,v corn la versi6n m&sreciente, eliminando el fichero ti0.c:

ci ti0.c
ci RCSW.c,v
ci ti0.c9v
ci ti0.c RCSkW.c,v
ci ti0.c tio.c,v
ci RCSW.c,v ti0.c
ci tio.c,v ti0.c

Supongamos que en su lugar el sufijo vado es un fichero RCS y el directorio en curso mntiene
un subdirectorio llamado RCS con un fichero RCS llamado &.e. Cada uno de 10s mmandos ci
siguientes hace un check-in al fichero tio.c, creando una versi6n nueva:

ci ti0.c
ci RCSM0.c
ci ti0.c RCSMo-c
ci RCSM0.c ti0.c

Par cada versi6n hecha check-in, el comando ci visualiza el nombre del fichero RCS y el de tra-
bajo, y 10s nfimeros de versi6n de la versi6n depositada y de la precedente.

Modos de acceso
Un fichero RCS creado par el comando ci her& los permisos de acceso de lectura y ejecuci6n
del fichero de trabajo. Si el fichero RCS ya existe, el comando ci mnserva 10s permisos de a m -
so de ejecuci6n y lectura de dicho fichero. El comando ci siempre desactiva todos los permisos
de escritura de los ficheros RCS.

262 -
11 SISTEMA DE CONTROL DE VERSIONES
Pronramas de U t i l W UNIX . ,

Comando eo
Descripcibn
El comando co recupera una versi6n de cada fichero RCS especificado y la almacena en el co-
rrespondiente fichero de mbajo. Usualmente, el usuario recupera un fichero RCS con el fin de
leerlo, modificarlo, compilarlo, etc. Para recupexat ficheros RCS, el comando co realiza proce-
so6 check-out a lots ficherots RCS.

Formato
co [-opciones]@kro ...
Opciones
-r[vemi&] Recupera la versi6n cuyo ntimero de versi6n se curresponda con el de la versi6n
especificada en versi6n. Si la versi6n indica una rama, en vez de un tronco, la
versi6n maS reciente de esa rama es recupemcia. Si la vemidn es omitida, es rea-
per& la versi6n m& reciente del tronco.

Si la versidn dada en vemidn comienza con un sign0 $, el mmando co determina


el ntimero de vasi6n por 10s valores del identiflcudor del fichero de trabajo. De
lo contrario, una versi6n est4 compuestade uno o mlis campos num&icos separa-
dos por sigaos punto (.) o de mmbres simb6Ucos. El usuaxio puede establecer el
nombre simb6lico de una versi6n con la opci6n -n de 10s comndos ci y rcs.
Igual que la opci6n -r, excepto que la opci6n -I, a
dem de recuperar la vasi6n
especificada en versidn, la bloquea.

Igud que la opci6n -r, excepto que la opci6n -udesbloquea la versi6n especifica-
da en versibn, si kta estaba bloqueada por el invocante. Si la versibn es omitida,
la opci6n -u recupera la versi6n bloqueada por el invocante, si hay a l g ~si~no;
hay ninguna versi6n bloqueada, la opci6n -urecupera la versi6n maS reciente.

-f[vemi8n] Si se hce un check-our a un fichero de trabajo existente con el mismo nombre


que el del fichero RCS,la opci6n -f hace que el fichero de trabajo sea sobrescrito
con el fichero RCS recuperado. Esta opci6n es Citil con la apci6n -9.

-kkv Genera lo6 valores de 10s identijicudores usando la forma de defecto; es decir, si
en el fichero de trabajo est4 establecido el identificador $Id, el RCS estabIece to-
dos Ios valmes de este identificadoot:nombre del fichexo RCS, n6mero de versi6~
fecha, h a , autor y estado. (Ver “Zdentijicudores del RCS’, M g i 277).
~ Por de-
fecto, el RCS inserta el nombre de login del bloqueador en lo6 valores & 10s
identificadores $Header, $Id y $Locker, s610 cuando el fichero es bloqueado,
por ejemplo con 10s comandos ci -I o co -1.

-kkvl Igual que la apci6n -kkv, excepto que el nombre de login del usuario que bloquea
la vexsi6n siempre es insertado cuando la versi6n es bloqueada.

-kv S610 genera 10s valores del identificador, omite el nombre del identijicador. Esta
opci6n no puede sa combinada con la apci6n -1.

11 -SISTEMA DE CONTROL DE VERSIONES (RCS) 263


Promamas de Utilidad UNIX

-kk S610 genera el nombre del identificador, omite sus valores. Por ejemplo, si estA
establecido el identificador $Id, s610 genera $id,sin incluir sus valores: nombre
del fichero, nfimero de versi6n, etc. Esta opci6n es titil para ignorar diferencias
debidas a la sustituci6n de identiJicadores cuando se realizan comparaciones de
versiones diferentes de un fichero.

-ko Genera el valor del identijicador de la versi6n precedente. Esta @6n puede ser
titil con icheros binarios que no toleran cambios en las subcadenas que se produ-
cen al towar el formato de 10s valores de los identiJicudores.

-p[versibn] Visualiza en el standard-output el text0 del fichero de trabajo un-respondiente a


la VKSi6n recuperada especificada en versibn, en vez de reintegrarla al fichero de
trabajo. Esta @6n es fitil cuando el comando co es parte de unpipe.

-q[versi6n] Suprime la salida generada por el RCS,except0 10s mensajes de mor.


-I[versi6n] Modo interactivo; el usuario visualizaril mensajes, aunque el standard-input no
sea un terminal.
-afechu Recupera la versi6n cuya fecha y hora sea exactamente igual, o menor que la de
la fecha y h a especificada enfecha. La fecha y hora deben ser dadas en formato
libre e ir e m a d a s entre comillas. Las siguientes, son fechas villidas:

October 21,1999.1418:lO
1o:oo AM,oct. 22,1999
1999/10/211o:oo:oo
Thu Oct 21 14:08:13 GMT 1999
Fri, 22 Oct 1999 15.3244
16:OS:OO # Indica la hora del dia en cuso.

-M[versidn] La fecha que tiene la versi6n especificada en versi6n, es establecida en el fichero


de trabajo como fecha de modificaci6n de dicho fichero.

-SeStado Recupera la versi6n maS reciente del fichero especificado, cuyo estado se corres-
ponds con el especificadoen estado.

-w[Zogin] Recupera la versi6n m'is reciente hecha check-in por el usuario, cuyo nombre de
login se cmesponda con el especificado en login. Si el argument0 Zogin es omi-
tido, es asumido el nombre de Zogin del invocante.

-jjoinlista Genera UM nueva versibn, la cual es el ensamblaje de las versiones especificadas


en la lista de versiones,joinfisfa. Lajoinfistu es una lista de pares de versiones,
separadas por un sign0 dos puntos, de la forma verZ:ver3; donde ver2 y ver3 son
niimeros de versiones. Para el par de versiones inicial, como verl, significa la
versi6n seleccionada por las opciones -f,..., -w.Para 10s mos pares, verl signifi-
ca la versi6n generada por el par previo. (Ad,la salida de un ensamblaje se con-
vierte en la entrada de la versi6n siguiente).

Por cada par de versiones, el comando co ensambla las versiones verl y ver3 con
respecto a ver2. Est0 significa que 10s cambios que pasan de ver2 a verl son apli-
cados a una copia de ver3. Si en la dsma rama se da que: verleer2<ver3, el en-
samblaje genera una nueva versi6n, la cual es como ver3, per0 con 10s cambios
que pasaron de verl a ver3 deshechos. Si 10s cambios de ver2 a verl, coinciden
en parte con 10s cambios de ver2 a ver3, el comando co notifica la solapaci6n.

264 I1 -SISTEMA DE CONTROLDE YERSIONES


Prograbas de Utilidad UNIX 6, :

-Vn Emula la versi6n del RCS especificada en n, donde n puede SK 3,4 6 5. Esta op-
ci6n puede ser 6til cuando intercambiamos fickos RCS con otros que tienen ver-
siones antiguas.
Para ver la versi6n del RCS con la que estamos trabajando, invocar el comando
rlog con un fichero RCS, si ninguna de las tres primeras lfneas contiene la cadena
branch:, es la versi6n 3; si los afios de las fechas tienen dos digitos, es la versi6n
4; de lo contrario, es la versi6n 5.

-xsufijos La6 sufijos especificados en sufios se utilizan para caractdzar fickos RCS.
Para mils details sobre sufijos, ver opci6n -x del comando ci, pfigina 260.

Argumentos
fichero Es el nombre o nombres del fichero o ficheros que van a ser tratados por el co-
mando co. Los ficheros especificados en fihero son los ficheros RCS, usual-
mente ubicacbs en el subdirectario RCS.

Notas
Los nombres de fichero que se mesponden con el sufijo ,v, indican ficbos RCS; 10s &os
indican ticher= de @&a&. El Comarado co accede a 10s ficheros como el comando ci, except0
que no tiene que leer el fichero de trabajo. (Ver “Especificaci6ndeficheros”, pfigha 262).

A las vedones de un f i c k o RCS se las puede hamun check-our bloqueado o sin bloquear. La
versi6n bloqueada evita sobresaituras. Una versi6n para lectura o oompW6n no necesita ser
bloqueada. Una versi6n hecha check-out para moditlcara y posteriOnmente hacerta check-in de-
be sa bloqueada. Si un check-out bloqueado falla, es que esa vmi6n est4 bloqueada par m o
usuario. (Unaversi6n bloqueada puede sa desbloqueada con el comando rcs mu). Para haax un
check-our bloqueado tambib se requiere que el invocante este en la lista de ~ccesodel fichero
RCS, a no ser que ese vada, sea el propietario del fichero o un usuario superuser.

Una versi6n es seleccionada: por el nl5mero de versi6n o de rama, por la fecha y hura de crea-
ci6n, pm el autor, por el estado y por el nombre simb6lico. (Para rnaS de&lles sobre especifica-
ci6n de versiones, ver “Seleccionar versiones”, pAgina 275). cuando las opciones de selecci6n
son aplicadas en combinaci6n, el comando co recupera la m i 6 n maS reciente que satisfaga
todas ellas. Si no es especificada ninguna opci6n de selecci6a el comando co recupera la ver-
si6n miis reciente del tronco (ver apci6n -b del comando rcs, pagina 266).

Pur cada versi6n hecha check-out, el comando co visualiza el nombre del fichero RCS, el nom-
bre del fichero de trabajo y el ntimero de la versi6n recupefada.

Modos de acceso
El fichero de trabajo recuperado siempre her& los permisos de lectura y ejecuci6n del fichero
RCS; per0 el permiso de escritura es desactivado, a no ser que al fichero se le haga un check-out
bloqueado.

Si un fichero RCS con el nombre del fichero de trabajo ya existe y time permiso de escritUra, el
comando co aborta el check-our y visualiza un mensaje preguntando si este proceso es posible;
si el fichero de trabajo existente, no tiene permisos de escritura y es dada la opci6n -f, el fichero
de trabajo es sobrescrito por el fichero RCS sin hacer preguntas.
11 -SfSTEMA DE CONTROL DE VERSIONES (RCSJ 265
Programas de Utilidad UNIX

Comando rcs
Descnpcih
El comando TCS es un program utilizado para administrar la base de data del RCS. El comando
rcs mea nuevos ficheros RCS, y cambia y establece atributos a 10s ficheros RCS existentes. Por
ejemplo, con el comando rcs podemos cambiar la lista de acceso, bloquear o desbloquear un
fichero, establecer y borrar nombres simb6licos y estados, borrar versiones, etc.

Formato
rcs [-opciones]fichero ...
Opcwnes
-i Crea e inicializa un nuevo fichero RCS, per0 no deposita ninguna versi6n en a.
AI mismo tiempo, el comando rcs visualiza un mensaje con un prompt para que
introduzcamos un texfo descriptivo del fichero.
Si el fichero RCS especificado no tienepath, el comando ccs, primer0 intents co-
locar el fichero en el subdirectorio./RCS, y d e s ~ ~en&el directorio en curso. Si
el fickxo de trabajo especifcado tiene el mismo nombre que al@n fichero RCS
existente, el comando rcs nos lo comunica con un mensaje de ma-.

Agrega los nombres de login especificados en la lista de Cogins, separados por


caractefes comas (,), a la lista de acceso del fichero RCS.

Agrega la lista de acceso contenida en el fichero especificado enfichero, a la lista


de acceso del correspondiente fichero RCS.

Borra 10s nombres de login especificadm en la hta de logins, separados por co-
mas,de la lista de acceso del fichero RCS. Si la hta de b@ es omitida, la lista
de acceso es completamenteborrada.

Establece la rama de defecto a la versi6n especificada en versidn. Si la opci6n -b


es especificada sin la versibn, la rama de defect0 es establecida (din5micamente)
a la versi6n m&salta del tronco.

Establece el comentario de comment leader al del text0 especificado en cadem.


Este comentario tambien es impreso al comienzo de cada lfnea del identificador
$Log y del mensaje al log generado por el identificador $Log$ durante un proce-
so check-out. Esta apci6n es iitil en 10s lenguajes de programacih sin comenta-
rios multilhea.

-bust Establece la opci6n de sustituci6n del identificador de defecto (keyword substitu-


tion) al de la opci6n especificada en sust. per “ldentijicadores del RCS’, Pagina
277,y las opciones -k del comando co,p@na 263).

Tener cuidado con el comando rcs -kv, ya que la opci6n -kv es incompatible con
el comando co -1. Utilizar el comando rcs -kkv para restaurar la sustituci6n del
identificador de defecto normal.

266 I I -SISTEMX DE CONTROL DE VERSIONES


Prograinas de Utilidati UNIX j_ .

-I[versibn] Bloquea la versi6n especificada en versibn, per0 no la revierte al fichero de tra-


bajo. Si es dada una rama, el bloqueo es hecho a la versi6n maS reciente de esa
rama. Si la versibn es omitida, el bloqueo se hace a la versi6n rnAs reciente del
tronco. Una versi6n bloqueada es liberada con los comandos rcs -uy co -u

-u[versibn] Desbloquea la versi6n especificada en versibn. Si es especificada una rama, es


desbloqueada la versi6n mds reciente de e a rama. Si la v m g n es omitida, el
comando rcs desbloquea la versi6n mds reciente retenida por el invocante. Nor-
malmente, s610 el usuario que bloque6 la versi6n podra desbloquearla.

-L Establece el bloqueo esfricfo.El bloqueo esfricfo significa que el propiebrio del


f i c k o RCS no est4 exento de bloquear una versi6n para hacerla check-in. Esta
opci6n s610 deberg ser usada en ficheros compartidos. Usualmente, el defect0 del
bloqueo est4 establecido a bloqueo esfricfo.

-U Establece el bloqueo no-estricto. Un bloqueo no-esfricfosignifica que el propieta-


rio del fichero RCS no necesita bloquear una versi6n para hacerla check-in. Esta
opci6n no debera ser usada en fickos compartidos.

-nnom[:[ver]]
Establece el nombre simb6lico especifkado en m m a la versi6n especificada en
ver. Si se omite la versi6n (ver) y el Caracter dos puntos (:), el nombre simb6lico
especificado en nom es barrado. Si el nombre dado en nom ya est4 asociado con
el mmbre de m a versi611, el comando rcs emite un mensaje de mor.

Una versi6n mmpuesta de un nfimero de rama seguido de un carikter punto (.)


significa la versi6n maS reciente de la rama. Un sign0 dos puntm 6 ) sin versi6n
significa la versi6n &I reciente del tronco. Par ejemplo, el siguiente comando:

rcs -nnombre: RCSP


establece el nombre simb6lico especificado en nombre en las versiones m'as re-
cientes de todm 10s ficheros ubicados en el subdirectario RCS. Este comando
contrasts con el comando siguiente:

rcs -wombre RCSP


el cual boma el nombre simb6lico especificado en nombre de las versiones de
todos los ficheros ubicados en el directorio RCS.

-Nnom[:[ver]]
Bma el nombre simb6lico especificado en nom,de la versi6n dada en ver. Si el
nombre dado en nom no existe, recibiremos un mensaje de error. La especifica-
ci6n de versiones de la apci6n -Nes la misma que la indicada en la opci6n -n.

-0rCugo Borra la versiones especificadas en rungo. Un rango compuesto de un ntimero


tinico de versi6n, indica esa versi6n. Un rango compuesto por un ntimero de ra-
ma, indica la versi6n m& reciente de esa rama. Un rango de versiones de la forma
verlner2 significa vmiones de verl a ver2 de la misma rama.

La especificaci6n :ver significa versiones desde el comienzo de la rama hasta la


versi6n dada en ver inclusive. La especificaci6n ver: significa desde la vmi6n
especificada en ver hasta el final de la rama incluyendo la versi6n dada en ver.

I1 -SISTEMA DE CONTROL DE VERSIONES(RCS) 267


Progmmas de U t i l W UNIX

-mver:msg Sustituye el texto del mensaje al log relativo a las modificaciones, contenido en la
versi6n especikada en ver, por el especificado en la cadena mg.

-Q Suprimela salida generada por el RCS, excepto los mensajes al log y 10s de mor.

-I Esta opci6n ham que el comando rcs trabaje interactivamente, incluso si el sfun-
dard-input no es un terminal.

-sestado[:ver]Establece el atributo de estado especificado en estado a la VKSi6n especficada en


ver. Si la versi6n (ver) es un ntlmero de rama, se asume la vmi6n m& reciente de
la rama. Si el argument0 ver es omitido, se asume la versi6n m& reciente del
tronco. El estado puede ser cualquier ~ a d aceptable
e ~ para el estado, per0 un
i l 10s estados es:
establecimiento ~ I tde

Exp Paraexperimental.
Stub Paraestable.
ReZ Paralikado.

Por defecto, el comando ci establece el estado de una versi6n a Exp.

-vihero] Sustituyeel text0 descriptivo del fichero RCS por el texto especficado enfichero.
Si se omite el argumentojkhero, el text0 descriptivo es obtenido del standard-
input, el cual sera fhlizado con un w6cter end-0F-k o con un cariicta punto
(.) Simco. Con la opci6n -i, el texto descriptivo es obtenido aunque la apci6n -t no
sea especificada.

Establece el fexfo descriptivo de la &M (el cual debe ir encerrado entre carac-
teres comillas) especificado en -cadem,en el fichero RCS especificado,barrando
el texto descriptivo existente.

-Vn Emula la versi6n del sistema RCS especificada en w. Para m& detalles sobre las
vmiones del sistema RCS, ver opci6n -Vdel comando co, piigina 265.

-xsufijos Utiliza 10s sufijos especificados en sufi’us para caracterizar ficheros RCS. Para
mi& detalles sobre sufijos, ver opci6n -x del comando ci, piigina 260.

Argumentos
jkhero Es el nombre o nombres del fichero o ficheros que van a ser txatados por el 00-
mando rcs. Ya sea para aear nuevos ficheros RCS o para cambiar ylo establecer
atributos a 10s existentes.

Notas
Para que la utilidad rcs trabaje correctamente, el nombre de login del usuario invocante debe
estar incluido en la lista de acceso del fichero RCS, excepto si la lista de acceso estA vada, si el
invocante es el propietario del fichero o un usuario superuser, o si estA presente la opci6n -i.

Los nombres de fichero que se corresponden con el sufijo ,v, especifican ficheros RCS;10s otros
nombres de fichero especifican ficheros de trabajo. La especificaci6n de ficheros es la misma
que la descrita en “Especificaci6ndeficheros”, piigina 262.

268 I1 -SISTEMA DE CONTROL DE VERSIONES


Prograrhus de Utilidad UNIX .*

Comando rlog
Descripcidn
El mmando rlog nos facilita informaci6n de 10s ficheros RCS especificados. Pur cada fichero
RCS, el comando rlog emitido sin opdones, visualiza la siguiente informaci6n: nombres de 10s
ficheros RCS y de trabajo con sus paths respectivos, niimero de la versi6n maS reciente del tron-
-co(head), rama de defecto, bloqueos, lista de acceso, nombres simb6licos, opci6n de sustituci6n
del ideMicador, ndmero total de versiones, nfimero de versiones seleccionadas para la visuali-
zaci6n y texto descriptivo del fichero RCS.

Esta informaci6n va seguida de entradas de las versiones seleccionadas en orden cronol6gico


inverso. Por cada vmi611, el comando rlog visualiza: niimero de versi6n, autar, fecha y hora,
estado, ntlmero de lfneas agregadas y borradas con respecto a la versi6n previa, bloqueador de la
versi6n (si hay alguna bloquada) y mensafeal log de las modifcaciones.

Las opciones del cornando rlog limitan eta salida de defecto. Las fechas y horas son visualiza-
das en formato UTC (Coordinated Universal Time).

Formato
rlog [-opdones]fichero ...
Opciones
-L Ignora 10s ficheros RCS que no tengan establecidos bloqueos. Esta oipci6n es can-
veniente en combinaci6n con las opciones -h,-I y -R

-R S610 visualiza el nombre del fichero RCS. Esta 0pci6n es conveniente para trasla-
dar un fichmo de trabajo a un subdirectorioRCS.

-h Visualiza, por cada fichero dado, la siguiente informaci6n: nombres de 10s f i c b


ros RCS y de trabajo con sus paths respectivos, nfimero de versidn mils reciente
(head),rama de defecto, lista de acceso, bloqueus, nombres simb6licos y sufijos.

-t Visualiza la misma infomaci6n que la apci6n -h, maS el texto descriptivo.

-b Visualiza informaci6n relativa a las versiones de la ram de defecto, normalmente


la rama m& alta del tronco.

-afechas Visualiza informaci6n de las versiones hechas check-in comprendidas en el rango


fechahora, sqaradas por carames punto y coma (;) de la lista defechas. Un
rango de la forma d l d 2 o d 2 d l selecciona las versiones depositadas entre tas
fechas d l y d2, ambas inclusive. Un rango de la forma d o d> selecciona las ver-
sions con la fecha especificada end o anterior.

Un rango de la forma d< o xi selecciona las versiones con la fecha especificada


end o posterior. Un rango de la forma d selecciona la versi6n maS reciente con la
fecha especificada en d o anterior. Las cadenas fechdhora especificadas en d, d l
y d2 son dadas en fopmato libre, como en el descrito en el comando co, y deben ir
encerradas entre caracteres comillas.

I1 -SISTEMA DE CONTROLDE VERSIONES (RCS) 269


Programas de Utilidad UNIX

-I[Cockers] Visualiza informaci6n de las versiones bloqueadas por el usuario especifkado en


lockers. Si se omite el argumento lockers, el comando rlog visualiza informaci6n
de las versiones bloqueadas por el invocante.
Si en el argumento Cockers es dada UM lista de nombres de login, separados por
comas, el comando rlog ignora los bloqueos distintos a 10s retenidos por los usua-
rios especificados en lockers. Por ejemplo, el siguiente comando:

rlog -L-R-luserid RCSP

visualiza el nombre de todos 10s ficheras RCS bloqueados por el usuario especifi-
cad0 en userid, ubicados en el directorio RCS.

-rfversioms] Visualiza Wormaci6n de las versiones dadas en el rango de versiones, especifi-


cadas en la lista de versjoms. Un rango de la forma verkver2 indica las versiones
de verl a ver2 de la misma rama; la especificaci6n:ver indica las versiones desde
el comienzo de la rama hasta la versi6n especificada en ver, inclusive; y la especi-
ficaci6n ver: indica las versiones comenzando en la versi6n espe&kada en ver
h t a el final de la rama,incluida la versi6n dada en ver.

Si en el argumento verswnes se especifica una rama,indica todas las versiones de


esa rama. Un rango de ramas indica las versiones de las ramas de ese rango. Una
rama seguida de un carkter punto (.) indica la versi6n m& reciente de esa rama.
La apci6n -r especificada sin argumentos indica la versidn maS reciente de la ra-
ma de defecto, normalmente el tronco.
-sestados Visualiza informaci6n de las versiones cuyos estados se carrespondan con uno de
10s estados especificados en la lista de estados, sqarados par comas.

-w[Cogins] Visualiza informaci6n relativa a las versiones hechas check-in par 10s usuarios
especificados en la lista de logins, sqarados par caracteres comas (,). Si se omite
el argumento fogins, se asume el login del usuario que emite el comando.

-Vn Emula la versi6n del sistema RCS especificada en n. Para m& detalles sobre las
versiones del sistema RCS, ver opci6n -Vdel comando co, pAgina 265.

-xsufijos Utiliza 10s sufijos especificados en sufijos para caracterizar ficheros RCS. Para
m& detalles sobre sufijos, ver apci6n -x del comando ci, pfigina 260.
El comando rlog visualiza la intersecci6n de las versions seleccionadas con las opcions -d,-I,
-s y -w,interseccionadas por la uni6n de las versiones seleccionadas por las opciones -b y -r.

Argumentos
fuhero Es el nombre o nombres del fichero o ficheros RCS que van a ser exambados por
el comando rlog, para mostrarnos la distinta informaci6n contenida en el log de
cada fichero RCS.

Los nombres de fichero que se corresponden con un sufijo ,v, specifican ficheros
RCS; 10s otros nombres de fichero especifican ficheros de trabajo. Los pares de
ficheros se especifican de la misma forma que lo descrito en “Espec@cacibn de
ficheros”, @ g i 262.
~

2 70 I1 -SISTEMA DE CONTROL DE VERSIONES


Cornando rcsdiff
Descripcwn
El comndo rcsdiff se utiliza para coqarar las vecsiones dadas de un fichero RCS especificado,
visualizando las diferencias en el standard-output.

Fomtato
rcsdis [-opciones]fieirero ...
Opciones
-rfversibn] Con esta apci6n pueden especitkarse: dos versiones, una o ninguna. Si se especi-
fican dos versiones: verl veri?, el comando rcsdiff cornpara las dos versiones del
fichero especificado. Si s6l0 se especifica una versi6n, el comando rcsdiff com-
para esa versi6n, la cual debe estar hecha check-out, con el contenido del fichero
de trabajo correspondiente.
Si no se especitica ninguna versi611, el comando rcsdiff compara la versi6n m4.s
reciente, antes de haaxla check-in, la cual debe estat bloqueada y modificada,
con el contenido del c u r r q d i e n t e fichexo de trabajo. Est0 es fitil para determi-
nar 10s cambios hechos al fichero de trabajo desde el 6ltimo check-in.

-bust La apci6n de sustituci6n especificada en sust’fa a los valores del identificador


establecido cuando se seleccionan versiones. (Ver“Zdentifcadores del RCS’, p5-
gina 277). Por ejemplo, la siguiente especificaci6n:

-kk4.1 -rl3@hero

ignora las diferencias de 10s valores del identificador cuando se comparan las
versiones 1.1 y 1.2 del fichero RCS, especiflcado enfihero.

-9 Suprime la salida genexada por el RCS, except0 10s mensajes de mor y la infor-
maci6n de Ias diferencias.

-Vn Emula la versi6n del sistema RCS especificada en n.

-xsufijos Usa los sufijas especificados en sufiios para caractezizac 10s ficheros RCS.

El comando rcsdiff a d a como la utilidad diff (ver “Utilidud diff, pggina 64). Las apciones de
la utilidad diff que se aplican en ficheros ordinaries son aceptadas por el comando rcsdiff.

Argumentos
&hero Es el nombre o nombres del fichero o ficheros RCS que van a ser exarninados por
el comando rcsdiff. Los nombres de fichero que se corresponden con el sufijo ,v,
especifican ficheros RCS; 10s otrm nombres de fichero especifican ficheros de
trabajo. Los pares de ficheros se especifican de la misma forma que Io descrito en
“Especificaci6ndejicheros”, pggina 262.

11 -SISTEMA DE CONTROL DE VERSIONES (RCS) 2 71


Programas de Ulilidhd UNIX

Comando ident
Descripcih
...
El comando ident examina y extrae todas las ocurrencias de la plantilla $Zdenti@ca&Jr: $ de
los ficheros de trabajo especificados. Estas plantillus son expandidas autodticamente a1 fichero
a1 hacerle un check-out. Los valores de estas plantillas pueden SK modificados con el comando
co. (Ver “Identificadores del RCS’, @ g i 277,
~ e “ldentificaci6nautomcftica”, pBgina 291).

Formato
ident [-opciones] mhero ...I

Opciones
-q Suprime 10s mensajes de diagn6stico genera& por el comando ident cuando en el
fichero de trabajo no existenplantillasde identificadores.

A rgumentos
@hero Es el nombre o nombres del fichero o ficheros que van a ser examinados pur el
comando ident. Si enfichero no se especifica ningttn fichero, el comando ident
espera recibir e!ntradas del standard-input.

Comando rcsfreeze
Descripcibn
El comando rcsfmeze asigna un nombre simb6lico de versi6n a cada fichero del conjunto de
ficheros RCS que forman una configuraci6n villi&. La idea es ejecutar el comando rcsfreeze
cada vez que se hace check-in a una nueva versi6n. Cuando el comando rcsfreeze es ejecutado,
es generado un nombre dnico: C g ,donde n es un ntimero que serB incrementado cada vez que
el comando rcsfreeze es ejecutado y asignado a la versi6n m6s reciente de cada fichero RCS.

El comando rcsfreeze, cuando es ejecutado, emite un prompt para que introduzcamos un men-
saje al log indimdo estas modificaciones; el texto del mensaje deberB ser finalizado con un ca-
rBcter end-offile o con un carBctef punto (.) contenido en una linea rinica.

Formato
rcsfreeze [nombre]

Argumentos
nombre El nombre dado en nombre es un nombre simb6lico que podemos especificar para
que sea establecido en las versiones de la confguraci6nde ficheros RCS.

272 I1 -SISTEMA DE CONTROL DE VERSIONES


Prograinas de Utilidad UNIX J .

Comando rcsclean
Descripcih
El comando rcsclean bma los ficheros de trabajo que heron hechos check-in y no heron mo-
dificados. Par cada fichero dado, el comando rcsclean compara el fichero de trabajo y una VK-
si6n del currespondiente fichero RCS. Si el comando rcsdean localiza alguna diferencia, no
realiza ninguna acci6n, a no ser que la opci6n -u sea dada, en cuyo caso, el comando rcsclean
primer0 bloquea la versi6n si &ta est6 bloqueada, y &pub borra el fichero de trabajo, si no es
encontrada ninguna diferencia. Estas acciones son visualizadas en el standard-output con los
cmespondientes comandos rcs -uy rm -f.

Formato
rcsclean [-opciones] mhero ...I

Opciones
-ksust Utiliza la opci6n de sustituci6n del identifcador especificada en sust cuando la
versi6n revierte en la comparaci6n.

-nIvemidn] Realmente no b m a ningtln fichero ni desbloquea ninguna versida Esta opci6n


comunicaral lo que el comando rcsclean poWa realmente ham.
-q[verSibn] Suprime la salida genaada por el RCS.

-r[vemidn] El efecto de esta opci6n es especificar la vemii5n para la comparaci6n.

-u[versidn] Desbloquea y borra la versi6n especificada en vemidn si &ta est4 bloqueada y no


es encontrada ninguna diferencia
-Vn Emula la versi6n del sistema RCS dada en n. Vex opci6n -Vdel comando co.

-xsujijos Usa 10s sufijos especificados en sufijus para caracterhr los ficheros RCS.

El ruLmero de versi6n con el que el fichero de trabajo es comparado puede ser asignado a las
opciones -a,-q, -r y -uSi no es especificado un nfimero de versi6n, y si la opci6n -u es dada y
el invocante tiene la versi6n bloqueada, el comando rcsclean usa esa versibn, de otro modo, usa
la versi6n maS reciente de la rama de defecto, normalmente el tronco.

Argumentos
fihero Es el nombre o nombres del fichero o ficheros que van a ser tratackx por el 00-
mando rcsctean. Si enfiehero no se especifica ningi3n fichero, el comando
rcsclean bema todos los ficheros de trabajo del directorio en curso.

Los nombres de fichero que se corresponden con el sufijo ,v, especifican ficheros
RCS; los otros nombres de fichero especfican ficheros de trabajo. LQSpares de
ficheros se especifican de la misma forma que lo descrito en “Especificacibn de
ficheros”, pilgina 262.

I1 -SISTEMA DE COhTROL DE VERSIONES (RCS) 273


Programas de UtiMad UNIX

Comando rcsmerge
Descnpcibn
El comando rcsmerge incorpora los cambia entre dos versiones de un fichero RCS en el co-
rrespondiente fichero de trabajo. Los cambios son incopparados en versions hechas check-out.

Formato
rcsmerge [-opciones]fichero

Opciones
-bust Usa la opci6n de sustituci6n del identijicudor especificada en sust. Asf, la especi-
ficaci6n -kk d . 1 -r13 ignara las diferencias del identzficudor y sus valores
cuando se fusionan 106 cambios de la versi6n 1.1 a la 1.2 de un fichero RCS.

-p[versidn] Envia el resultado del comando rcsmerge a l standard-ouqut, en vez de sobres-


cribir el fichero de trabajo.

-q[versi6n] Suprime la salida generada por el comando rcsmerge.

-r[versidn] Fusiona versioaes con respecto a la versi6n especificada en versi6n. Una especi-
ficaci6n sin versidn represents la versi6n maS reciente del tronco.

-Vn Emula la versi6n del sistema RCS dada en n. Ver apci6n -Vdel cornando CO.

-xsufijos - los ficheros RCS.


Usa los sufijos especificados ensufiios para caracterrzar

Ai menos debe ser especificada una versi6n con una de las opciones descritas, usualmente con
la opci6n -r. Como maxim0 deben especificarse d a versiones. Si s610 es especifkada una ver-
si6n, es asumida la versi6n m& reciente del tronco como segunda versi6n.

Argurnentos
fiehero Es el nombre del fichero RCS que va a contener las versiones fusionadas por el
comando rcsmerge.

Notas
El sistema UNIX dispone de otro Sistema de Control de Versiones similar al RCS, llamado SCCS
(Source Control Code System), el cual tambiCn dispone de un juego de comandos: admin, get,
unget, delta, etc., para crear, depositar y administrar versiones de ficheros fuente.

La utilidad make es usada para compilar un grupo de programas fuente de UIM forma determi-
nada, cuyas reglas de compilaci6n esW escritas en un fichero del usuario llamado makefile (ver
“CJtiZidudmake”, pagina 359). L a utilidad make soporta funciones de auto-check-out a fichera
RCS; localizando el fichero de destino y haciendo check-in a la versi6n de ese fichero; si el fi-
chero existe, sera echo check-our, usado en la compilaci6n y borrado cuando no sea necsario.

2 74 -
I 1 SISTEMA DE CONTROLDE VERSIONES
Programas de U t i l W UNIX I

Seleccionur versiones
El sistema RCS permite seleccionar versiones de un fichero RCS de las siguientes formas: par el
ntimero de vasi6n del tronco o de la rama, por el estado, par el autor, por la fecha y hora de
creaci6n y por el nombre simb6lico.

Por el nrimero
La selecci6n basada en el niimero de VKSi6n (ya sea del trom o de la ranma) puede variar Ege-
ramente. Si no es especifcado ningrEn &mer0 exacto de versi6n, sed seleccionada la versi6n
maS reciente del tronco. Si es especificado un ntimero de versi6n del tronco o de la rama, sera
seleccionada la versi6n de ese tronco o de esa rama.Si es especificado el nr5mero exacto de una
versi6n, ser6 seleccionada dicha versi6n.

Por defeo, el comando co realh pracesas check-our a la dltima versi6n del fichero RCS espe-
cificado por el usuario. Por ejemplo, cualquiexa de 10s comndm siguientes hacen check-out a la
versi6n m6s reciente del f i c b RCS,file.c,v:

coji&.c
cofize.c,v
co RCSf&*
co RCSP.c,v
co RCSP,v
Tambien podemos hater que el RCS realice un check-our a la versi6n maS reciente del tronco o
rama especificados. Los siguientes comandos harh un check-out bloqueado a las versiones m6s
recientes del t r o w 1, y de la rama 1.3.1, respectivamente del ficherof4Ye.c:

co -I -rlfile.c
co -1 - r l 3 . l f k c
En cualquier caso, s i e q e podemos ham un check-our a una varsi6n deterdnada, especifi-
cando el niimero exacto de la versi6n deseada. El siguiente comando recupera la versi6n 1.4 del
fichero RCS,file.c,v:
co -rlA@.c

Por et autor
Usualmente, el autor del fichero RCS es el nombre de login del usuario que lo cre6. La versi6n
de un fichero RCS tambien puede ser seleccionada especificando el nombre del creador.

El siguiente comando co recupera la dltima versi6n hecha check-in par el usuario especificado
en userid, del ficherof3e.c:

co -wuseridfile.c

El siguiente ejemplo recupera las versiones mils-recientes de todm 10s ficheros RCS ubicados en
el subdirectorio RCS que pertenmen al usuario que invoca el comando co:

co -WRCSP

11 -SISTEMA DE CONTROL DE VERSIONES (RCS) 275


Programas de UtiWad UNIX

Por el estado
Los usuarios tambi6n pueden seleccionar versiones de un fichero RCS para hacallas check-out
bashdose en el estado establecido a las versiones. Los esfados de las versiones de 10s ficheros
RCS estb basados en el stafus del fichero demo de la estructura del proyecto.

Aunque se puede especificar cualquier cadena dnica como estado, 10s establecimientos tipicos
de un estado son 10s siguientes:

Exp Experimental (estableciao por defecto).


Stab Estable. Pa-ejemplo una versi6n en funcionamiento.
Rel Likado.

Los comandos rcs -s y ci -6 pueden ser usados para establecer el estado de UM versi6n.

Con la @6n -sdel comando co podemos seleccionar versiones establecidas de antemano a un


determinado estado. P a ejemplo, el Siguiente comando hace un check-out a la versi6n &I re-
ciente del ficheroj2e.c cuyo estado est6 establecido a Exp:

co -sExpfile.c

El siguiente command-line recupera las versiones recientes de nuestros ficheros RCS cuyos
nombres finalicen en .kt y tengan establecido el estado Weekly:
co *Week& RCS/+.&v

Por lu fecha
Sabiendo la fecha y hara en la que h e creada la versi6n de un fichero RCS,el usuario puede es-
pecificar esa fecha y hora, encmada entre caracteres comillas, para seleccionar la versi6n de-
seada de ese fichero. Las fechas deben ser dadas en formato libre, como las especificadas en la
opci6n -d del comando co, p4gina 264.

El siguiente ejemplo recupera la versi6n del fichero fi1e.c cuya fecha y hora sea igual o menor
que la especificada en el comando co siguiente:

El siguiente comando, seguramente, recupera6 la dltima versi6n hecha check-in el a b 1999 del
fichero RCS especificado enficheru:

co -d992000/01/0100:OO”ficheru

El siguiente command-line recupera la versi6n del ficher0file.c hecha check-in a las 14:OO del
dfa en curso, o la versi6n maS reciente hecha check-in antes de dicha hora del dia en curso:

co -d”I4:OO”file.~

El siguiente comando co recupera la dltima versi6n del ficher0file.c hecha check-in antes del
dia 24 del mes y aAo en curso:

co -d”24”file.~

276 -
I1 SISTEMA DE CONTROL DE YERSIONES
Programas de UtiUad UNIX .

Por el nombre
La selecci6n de versiones basada en el nombre simbblico es muy dtil en proyectos de gran en-
vergaha, permitiendo especificar un p p o arbitrario de versiones de un conjunto relacionado
de ficheros RCS.

Los usuarios pueden establecer un nombre simb6lico con los coxnandos ci o rcs para asociar
esos nombres simb6lim con una v d 6 n especff~cade un fichero RCS. Si es asignado el mismo
nombre simb6lico a todos los elementos comprendidos en un cierto sistem compatible, todos
pueden ser hechos check-out especificando simplemente ese nombre simb6lico.

Par ejemplo, si un usuario quiere asociar la versi6n 2.1 del programaprog1.c con la vasi6n 5.3
del programa prog2.c; el usuario puede hacer un check-in a ambos, con un nombre simb6lico
nuevo, y en el futuro puede usar ese nombre simb6lico para recupem las vecsiones de a d a fi-
chero de programas:

co -r2.1 prog1.c
co -6.3prog2.c
ci -nnombreprog1.c
ci -waombre prog2.c
co -rnombreprog*.c
El comando rcsfreeze puede ser UsadD para establecer un mismo nombre simbdico a las ver-
siones especificadas de una configuraci6n villi& de ficheros RCS.

Identificadores del RCS


El RCS permite poner identificdores (cadenas especiales) en nuestros ficheros RCS para identi-
ficarlos. Los valores de estos identificadores son expandidos a nuestros ficheros de trabajo y
actualizados cuando se realizan aperaciones de check-out a estos fichaos.

en la primera linea de nuestro fichero de trabajo


Para conseguir la identificaci6n colocaren~?~
uno de los identijicudores, vistos en la siguiente pfigina, de la forma siguiente:
$Idenlipcador$

El lenguaje C tiene la siguiente sentencia para colocar el identificador, la mal incluiremos en la


primera lfnea del programa fuente C:
static char rcsidc]= "$Idenli@adod" ;

Inicialmente, el usuario hace check-out a la versi6n de un fichero e introduce el identijicdor


con el formato indica&, emitiendo seguidamente un comando ci. Al hacer un check-out p t e -
rim, el identificador espificado en I&n.h@ador genera una ~adenade valores de la forma:

$Identi@ador: valor ...$


DespuQ, cada vez que se hace un check-out al fichero RCS, el valor o los vafores del identifica-
dor especificado en Iden&@ador son autodticamente actualizados. Esta sustituci6n automati-
ca de los valores puede ser modificada con las opciones -kdel comando co.

11 -SlSTEMA DE CONTROL DE VERSIONES (RCS) 277


Programas de U t i l W UNIX

Los siguientes son 10s identificadoresRCS y sus cmespondientes valores:

$Author$ Identifica el nombre de Zogin del usuario que hizo check-in a la versi6n.

$Date$ Identifica la fecha y hora UTC (Coordinated Universal Time) de la versi6n -n la


que fue hecha check-in.

$Header$ Inserta UM informaci6n completa del fichero RCS, identificando: el path absoluto
del fichero RCS, el niimero de versi6n, la fecha UTC, el autor, el estado y el ble
queador de la versi6n (si esbl bloqueada).

$18 Indica lo mismo que el identifhdor $Header$, except0 que el fichero RCS es ge-
nerado sin path.

$Locker$ IdentSca el nombre de Zogin del usuario que bloque6 la versi6n.

$Log$ Identifka el nombre del fichero RCS. Tambien, va acumulando en el fichero de


trabajo, par cada versi611, una linea conteniendo: el niimero, la fecha, la hora y el
autor de cada versi6n; y en UM segunda linea con el mensaje al log suministrado al
fichero RCS durante las operaciones de check-in. Estas lineas son situadas debajo
de la linea $Log:fiehero,v $, generada pur el identificador $Log.

El identiticador $Log puede s m o s titil, ya que a l acumular la infarmaci6n indica-


da por cada versi6n hecha check-in, puede ser aprovechada para mantener un histo-
rial de nuestros fichms.
$RCSfile$ Idernica el nombre del fichero RCS, sin path.

$Revision$ Identifica el ntimero de la versi6n en curso.

$Source$ Identificael nombre deputh absoluto del fichero RCS.


$State$ IdeMica el tip0 de estado asignado a las versiones de 10s ficheros RCS con la op
ci6n -sde 10s comandos rcs o ci.

El comando ident, adem& de extraer los valores de los identijicadores de 10s ficheros RCS,
tambien 10s extrae de 10s ficheros objetos y dumps, permitiendo localizar las versiones y 10s
m6dulos que fueron usados en un programa dado. (Ver “Comando ident”, pilgina 272).

Por ejemplo, si el programa escrito en C,prog.c, contiene como primera linea, la siguiente:
static char resid[] = “$Id prog.c,v 1.6 1999110/07 11:25:45 u s e d Exp $” ;

y si el ficher0prog.c es compilado y genera el fichero ejecutableprog.o, el siguiente comando:

$ identprog.cprog.0

visualizaril la siguiente salida:

prog.c:
$Id prog.c,v 1.6 1999/10/07 11:2545 u s e d Exp $
prog.0:
$Id prog.c,v 1.6 1999/10/07 11:25.45 u s e d Exp $

278 11 -SISTEMA DE CONTROL DE VERSIONES


Programas de Utilidad UNIX i

Ramas de versiones
Una versih estA coxnpuesta de dos o maS campos numQicos separados por signos punto. LAX
drboles de versiones estrictamente lineales son probablemente los mls ubilizados, El usuario
puede crear de forma automaniCa: la versidn 1.1 de un programa, agregar m& caracteristicas a la
versi6n 1.2, conseguir que el programa funcione correctamente en la versi6n 1.3, etc. Per0 la
VKSi6n 2.1 puede considerarse que realmente tendremos que especificarlacomo tal.

Un &bo1 con pacas versiones, s610 suele tener ramas de dos campos, la versi6n y el nivel, tam-
bien llamado tronco (versibn.nivel):

(1.1) 3 (12) 3 (13) 3 (1.4) + (2.1) + (2.2)

Realmente, estos &boles tienden a generar varias ramas en puntm diferentes. Las ramas se pro-
ducen cuando el usuario crea una nueva versi6n en medio del m l , en vez de al final del &bol.

PCKejemplo, una rama de 4 campos (versibn.nivel.ru~nivel)podria crearse a partir de la ver-


si6n 1.3, del &bo1 del ejemplo anterior, haciendo un check-out a la vmi6n 1.3, modifihdola y
&put% haciendola un check-in. Las ramas son numeradas con dos niveles inferiores, para que
al fichero que se le haga un nuevo check-in pueda ser versionado a 1.3.1.1. Esta doble numera-
ci6n es necesaria para tener la posibilidad de numerar w a futura rama a 1.3.21, del tronco 1.3:

(1.1) 3 (12) + (13) 3 (1.4) + (2.1) 3 (2.2)


c 13.1.1
El siguiente es un &grama de un &-bo1de versiones, wmeradas en mden creciente:

Head
1

11 -SISTEMA DE CONTROL DE VERSIONES (RCS) 279


Programus de Utilidad UNIX

Ejemplos
Los siguientes son dos ficheros ubicados en nuestro directorio de trabajo que nos serViran en 10s
siguientes ejemplos como ficheros RCS y de trabajo. Uno es un fichero con un sencillo progra-
ma en C, llamado hoke, y otro es un fichero de texto, llamadopoema.
Listemos el contenido de cada fichero:

$ catpoema
Las rosas son rojas, las videtas son ades,
el sistema Unir cs ncgro, por eso hay sauces Ilorones.
An6nima

$ cat h o k e
#indude 4 i o . b
void main(void)

pMtf(%ola\n”} ;
1
Situ6monos en el directoriode trabajo y listemos las caracteristicas de nuestros fickos:

$ IS -I hoke
-m-r-r-- 1 usuario gap0 62 Nov 11 1505 h0la.c
-m-r-r- 1 usuario ~np0 110 Nov 11 15:Wpoema

Ahora podemos crear un directario llamado RCS y comprobar su contenido:


$ mkdir RCS
$ IS -I RCS
total0

Crearficheros RCS
Teniendo asumido que queremos mantener versiones de nuestros ficheros p o e m y h o k e , es el
momento de depositarlos en ficheros RCS, por tanto haremos un check-in a dichos ficheros,
emitiendo el siguiente command-line:

$ cipoema h o k e
RcSlpoema,~ <-- poem
enter description, terminated with single ‘.’or end of fde:
NOTE: This is NOT the log message!
>> Fichem de text0 para pruebas RCS.
>> .
initial revision: 1.1
done
Rcslhdac,v <- holac
enter description, terminated with single ‘.’ or end of file:
NOTE: This is NOT the log message!
>> Visuulim un saludo al ser ejecutcrdo.
>> .
initiil revision: 1.1
done

AI no existir ningh fichero RCS con 10s nombres especificados en el command-line ci, el RCS
10s crea,y deposita el contenido de 10s ficheros fuente en cada fichero RCS asociado:poemqv y
hokc,v con la versi6n inicial 1.1 (versi6n 1, nivel 1).

280 11 -SISTEMA DE CONTROL DE VERSIONES


Programas de U t i l W UNIX L

El sistema RCS ubica 10s ficheros RCS en el directOrioRCS con 106 mismos nombres que tenfan
10s fickos fuente, per0 agregilndoles la extemi6n ,v para asf identificarllos como ficheros RCS.
Los fichaos fuente desaparecen del directorio de trabajo.

Cuando el comando ci estil realizando el promo check-in inicial a 10s ficheros de trabajo, el
RCS visualiza un prompt par cada fichao RCS, para que introduzcamos UM descripci6n del fi-
chero. Este comentario seri4 una sinopsis del contenido del fichero. AI introducir el comentario,
el RCS nos visualiza otro prompt para que finalicemos el comentario, tecleando un carilcter
puntc (.) o un carkter ed-of-fiZe (<CtrZ-d>).
Para ver los fichems RCS creados, listemos el contenido del directorio RCS:
$ IS -I RCSP
-r-r-r- 1 asuario grupo 279 Nov 12 1438 hola.c,v
-r-r--r- 1 usuario grupo 323 Nov 121438poema,v

Observamos que 10s ficheros holac,v ypoem,v no tienen permisos de escritura. Los ficheros
RCS creados par el conando ci heredan 10s pe~misosde lectura y ejecuci6n del fichero de tra-
bajo, y siempre son eliminados10s permisos de esuitura.

Tambib observamos que la fwha y la h a de nuestros fichaos RCS ha cambiado. Cuando el


RCS crea,actualiza, e&., fieheros RCS, el sistema del RCS, 1
s signa la fecha y la hora UTC en
la que se han reakado esas operaciones.

Listemos ahora el contenido de uno de 10s dos ficheros RCS y observemos su fopmato:
$ cat RCS@oema,v
head 1.1;
access;
symbols;
locks; strict;
comment @# @;

1.1
date 99.11.1214.38.10; author w e d ; state Erp;
branches;
next ;

desc
@&hero de texto para pruebas RCS.
@

1.1
1%
@Initialrevision
@
text
@Las rasas son mjas, ks violetasson aplles,
el sistema Uni cs negro, por cso hay sauces Ilorones.
An6nImo.
@

Vemos que el ficheropoem,v contiene dos t i p de Ifneas: lineas de texto del programa fuente
del usuario, y lineas de control del RCS. Las cadenas de texto est& encenadas entre dos caracte-
res arroba: @...@. Las lineas de control indican entre otras mas:la versi6n del fichero inicial
numerada como 1.1 por ser el primer check-in hecho al fichero, una lista de acceso, la fecha de
creaci6n del fichero RCS, el usuario creador del fichero RCS, bloqueos, etc. El texto real del fi-
chero de trabajo =ti$ incluido entre las etiquetas “text 63 ... 63 ”.

11 -SISlEMX DE COhTROL DE VER!JIOffES(RCS) 281


Programas de Utilidad UNIX

Recuperarficheros de trabajo
Hemos visto c6mo crear ficheros RCS, y dmo 10s ficheros fuente han desaparecido del dim@
rio de trabajo. Los ficheros ubicados en el directdo RCS, @hero,v), son llamados ficheros
RCS, los de& ficheros son llamados ficheros de trabajo.

Para rmperar ficheros de trabajo, es deck situar 10s ficheros RCS deseados en el directorio de
trabajo, se utiliza el comando co, el cual realiza procesos check-our a 10s ficheros RCS para
complementar los procesos check-in. Por defecto, el comando co siempre recupera la versi6n
mils reciente del tronco.

Recuperemos nuestros ficheros de trabajo, poem y holac, desaparecidos en el ejemplo previo:

!$ eo poem hotkc
RCS/~III~,V ->~o~III~
revision 1.1
done
RCSmola+~ -> h&c
revision 1.1
done

Este comando extrae las ciltimas vecsiones de nuestros ficheros RCS: poenqv y hotkc,v y las
introduce en 10s fickos de trabajo: poem y holac, reubi&dolos en el directario de trabajo.

Compr&moslo, emitiendo el siguiente command-line Is:

$ Is -I holac poem
-r-r-r- 1 usuario Ppo 62 Nov 121445hala.c
-r-r--r- 1 usuario grupo 110 Nov l214:45poema

Vemos que nuestros ficheros de trabajopoem y holac han aparecido, per0 en modo read-only.
Los ficheros de trabajo rmperados con el comando co kedan 10s permisos de lectura y ejecu-
ci6n de 10s ficheros RCS, desactivando 10s pennisos de escritura, a no ser que se les haga un
check-out bloqueado (apci6n -1).

Si ahora editamos los ficheros de trabajo, poem y holac recuperados con el comando co pre-
vio, podremos leerlos e incluso compilarlos, per0 si hacemos modificaciones en ellos, cuando
vayamos a salvarlas, el sistema nos visualjzar6 el siguiente mensaje:

“fichero”File is read only

Est0 es debido, a que en la recuperaci611,los ficheros de trabajo han quedado de s610 lectura.
Entonces, si queremos hacer modificaciones en ellos, tendremos que hacer un check-out blo-
queado, lo cual tambien nos permite acceder al fichero en us0 exclusivo, evitando asf, que otro
usuario haga modificaciones a1 mismo tiempo a nuestro fichero.

El siguiente, es el comando utilizado para bloquear nuestros fichaos de trabajo, lo cud nos
permitira ham modificaciones en ellos:

!$ co -1poem holac
R C S / ~ ~ ~ I I I->poem
~,V
revision1.1 (locked)
done
RCSlhda.c,v --> h0la.c
revision1.1 (locked)
done

282 11 -SISTEMA DE CONTROL DE VERSlOffES


Progrumas de U t i M UNIX .

Ahma podremos editarlos y hacer cambios en ellos, ya que a t e comando habra puesto 10s f i c b
cos de trabajo, poem y holizc en modo escritura. Comprobarlo, por ejemplo, modificando al-
M existente o introduciendo nuevas lheas.
~ U linea

hede darse el cas0 que al ham check-out a un fichero recibamos el siguiente mensaje:

$' co -1poem
RCS/poe-v -->poem
ci error: writable poeme*, femovc it? [ny] (n):

lo cud es debido a que en el directario de trabajo existe otro fichero en modo escritura con el
misrno nombre que el del fichero RCS especificado en el command-line co. Si contestamos n, el
comando co nos visualiza el siguiente mensaje:
eo error: checkout aborted

quedando el fichero en modo escritura, bien para modificarlo si no lo est.& o bien si lo at& para
hacerle un check-in. Si mntestamosy, el comando co responde con el mensaje: done, y el f i c b
ro queda en modo lectura; par supuesto, si le hacemos un check-in, el cornandoci nos r e v i e a
la versi6n previa, a q e el fichero este modificado, ya que qued6 desbloqueado.

Bhqueo especial
En una aplicaci6n en la que vdos usuarias trabajan con el mismo fichero, puede ocurrir que al
emitir un mmando ci, nxibamos el siguiente mensaje:

§! cipoema
R C S / ~ ~ ~ I I J Z<-poem
~,V
ci error: no lock set by maid

avishdonos que esta!no6 haciendo un check-in al fichero poem no estando atin bloqueado. Es
posible que ya sea tarde para hacerle un check-out bloqueado, ya que otm usuario poWa haber-
se adelantado y star sobrescribiendo nuestras modificaciones. En este cas0 pudemos invocar el
siguiente comando:

$' rcs -1poema


RCS file: Rcs/poema,v
1.1 locked
done

con el fin de bloquear la versi6n rn4.s reciente de mestro fichero RCS, a no ser que otro usuario
se haya adelantado, en my0 cas0 tendremos que entendernos con el. Ekte tip0 de bloqueo no
recupera el fichero RCS, lo deja en el directorio RCS y en modo read-only, asegurando que s610
el usuario que lo bloque6 podri hacerle check-out en la pr6xima actualizaci6n, evitando asi pro-
blemas si varios usuarios trabajan con el mismo fichero.

Cuando queramos hammodificaciones al ficheropema, s610 bastari recuperarlo:

$ copoema
RCS/p~ema,v -> poem
revision 1.1
done

ya que el ficheropoema, ya estaba bloqueado.

11 -SISTEMA DE CONTROL DE VERSIONES (RCS) 283


Programas de UtilUad UNIX

Versiones de ficheros RCS


Hagamos un segundo check-in al fichero de trabajo, hohc, una vez modificado:

$ ci hohc
RCS/hola.c,v <- holac
new revision: 13; previous revision: 1.1
enter log ntessage, terminated with single
'
'.'or end of Gle:
>> Se mudijica ckrse de sdudo.
>> .
done

Siempre que hagamos check-in a un fichero ya creado despuds de s a actualizado, recibiremos


un prompt para que introduimmos un mensaje al fog resumiendo las modificaciones realizadas
a1 fichero, en vez de un t a r o descriptivo, como en el check-in iniciaI. El text0 introducido sa6
finalizado con un carktex end-offik o con un c a r 6 c t ~punto (.) dnico.

Al hacer check-in a un fichero de trabajo, dste desaparece del directorio de trabajo, y el coman-
do ci crea autodticamente, par defecto, una weva versi6n, aumentando en 1 el tlltimo &mer0
de nivel de ese fichero. Este ejemplo, crea la VKsi6n 1.2 ya que la versi6n previa era la 1.1.

La nueva versi6n, junto con el mensaje resumiendo las modificaciones, s e r h registrados en el


fog del fichero RCS. Par defecto, el comando ci siempre deposita en el correspondiente fichero
RCS la tiltima V K S h hecha check-out y modificada.

Al emitir un comando ci, el RCS verifica la versi6n que va a ser depositada para ver si se dife-
rencia de la precedente. Si la versi6n es igual, el comando ci, desbloquea eI fichero si &e estaba
bloqueado y elimina el fichero de trabajo del directmi0 de trabajo, en vez de crear una weva
VKSi6n, emitiendo el siguiente mensaje:

$ cipoema
Rcs/filename,v <- poema
EiIe is unchanged, reverting to previous revision 1.1
done

Esto sucede cuando a un fichero de trabajo se le hace un check-in sin haberle modificado, a no
SK que sea especificada la opci6n -f. Si queremos crear una nueva versi6n del ficheropoema,
tendremos que volver a recupezar el fichero de trabajo, emitiendo un comando co -I, hacerle las
modificaciones pertinent= y seguidamente hacerle un check-in.

Para evitar la desaparici6n del fichero de trabajo durante un proceso check-in, en cas0 de que
queramos seguir haciendo modificaciones a ese fichero, invocar el siguiente comando:

$ ci -1poema
R W p m a , ~<-
new revision: 13; previous revision: 1.1
enter log message,terminated with single '.' or end of file:
>> Se incluye una linea nueva.
>> .
done

el cual hace un check-in bfoqueudo al fichero de la forma usual, per0 ejecuta un check-out im-
plfcito. Despub de crear la versi6n, el fichero permanece en el directorio de trabajo con permiso
de escritura, evitando una operacidn check-out. Si queremos que el fichero de trabajo quede de
s610 lectura, emitir un comando co -u,en vez de un comando ci -1.

284 I1 -SISTEMA DE CONTROL DE VERSIONES


Progra@asde Utilidad UNIX 5 . -
Si se hace un check-in normal (no inicial) a un mismo tiempo, a varios fichaos de trabajo modi-
ficadm, el comando ci emite un mensaje par cada fichao a partir del segundo, preguntandonos
si queremos utilizar el mismo texto del mensaje al log del primer fichero en el siguiente:

$ cipoema h o k e
R C W p o e w ~<- poem
new revision: 13; previous =vision: 1.2
enter log message,terminated with single ‘.’or end of fde:
>> Se modijica Uhea 2.
>> .
done
RCS/hOia.c,v <-- hoke
new revision: 13, previws revision: 1.2
reuse log message of previous fde? [yn] (y):

UM respuesta n hace que el comando ci visualice el siguiente mensaje:


enter log message, terminated with single ‘.’or end of fde:
>>

para que introduzcarnos un texto resumiendo las modificaciones realizadas al fichero siguiente.
UM respuestag, no visualiza este segundo mensaje, significando que el texto introducido al
primer fichero vale para el fichero siguiente.
Tambien puede darse el caso de que al emitir un comandoci, recibamos el siguiente mensaje:

$ cipoema
RCslp0e-v <- poem
ci error: multiples revisions locked by wd;please specify one

indicihdonos que tenemos bloqueada m& de una versi6n del fichero especificado. En tal caso,
serfa conveniente saber las versiones bloqueadas, por ejemplo, emitiendo el siguiente comando:

$ rlog -hpoema,v
RCS tile: R C W p o e ~ v
Working Ne: poema
head: 1.3 branch
locks: strict
u s d : 13
u s e d : 13
acces list:
symbol’IC names:
comment leader:
keyword substiition: kv
total revisions: 3

para tomar l a medidas


~ oportunas respecto a las versiones bloqueadas, en este cas0 las versiones
1.2 y 1.3, por ejemplo para desbloquearlas y despub hacerlas un check-in, si fuse posible. Una
versi6n bloqueada se desbloquea con 10s comandos co -u,y rcs -u;si el bloqueo se realiza con
el comando co, recibiremos el siguiente mensaje:

$ co -upoema
R C s l p ~ e t ~->
~a,~
revision 1.2 (unlocked)
writable poema e*, remove it? [ny] (n):

Las mismas respuestas dadas en el comando co -I de la pfigina 283, son aqui villidas.

11 -SISTEMA DE CONTROLDE VERSIONES (RCS) 285


Programas de Utilidad UNIX

Deltas
Para proteger el fichero RCS, el sistema RCS emplea la observaci6n de que la mayur parte del
texto permanecera inalterable de una versi6n a la siguiente.

El sistema UNlX dispone de la utilidad diff, la cual se utiliza para comparar dos ficheros, gene-
rando las lineas de texto que sean diferentes entre esos dos ficheros. (Ver ''WtiZidad diff", pAgina
64).La utilidad diff salva estas diferencias en el fichero RCS como deltas: una lista de las lineas
que han sido modificadas, aparecidas o desaparecidas entre las dos versions.

Listemos el contenid0 del fichero RCS, hokc,v:

$ cat RCS/hokc,v
head 12,
access;
symbols;
lockq strict;
comment @ * @;

1.2
date 99.11.12.15.05.~; author m d ;state Erp;
branches;
next 1.1;

1.1
date 99.11.12.1438.10; author US&; state Exp;
branches;
next ;

desc
@ V i i u a b un d u d 0 .
Iser ejecutada
8

1.2
1%
@Se modificae k e de saluda
@
text
@ h d u d e@ah>
void main(void)
{
printf("FELICIDAD3Cb") ;
1
@

1.1
1%
@Initialrevision
@
text
@d4 1
a4 1
printf("Ho1ab") ;
@

Vemos que en el fichero RCS, hokc,v quedan reflejados todos 10s cambios hechos a1 fichero de
trabajo hokc. La pentiltima secci6n del fichero holac,v contiene el texto completo de la ~Iltima
versi6n, en este cas0 la versi6n 1.2. FijCmonos en la tiltima secci6n en la parte t a t de la versi6n
1.1, en las cadenas d4 I y a4 I; estas cadenas son conocidas mmo deltas, y son como versiones
RCS registradas de ficheros modificados.

286 11 -SISTEMA DE CONTROL DE YERSIONES


Progmmas de Utilidad UNIX

Establecer vemiones dktintas a1 defecto


Con el comando ci podemos dar un nfimero de versi6n distinto al ndmero de la versi6n de de-
fecto, siempre y cuando ese bloqueada y modificada. Asumiendo que nuestras versiones heron
numeradas como 1.1,l.Z 1.3, e&., y queremos que la nueva versi6n comience con el ndmero 2,
emitir uno de los dos mmandos siguientes:

$ ci 42poema
$ ci 42.1 p o e m
R c s / p o e ~ ~ <-
t , ~ poem
new revision: 2.1; prcviouS revision: 1.4
enter log message, terminated with single '.' or end of fde:
>> Se agrega la linea 4.
>> .
done

el cud asigna el nfimero 2.1 a la nueva versi6n, en vez del 1.5. A no ser que se especifique lo
contrario, a partir de este momento, el tronco 22 sera el tronco de defecto, y el comando ci IIU-
merar&las subsiguientes versiones mmo 2.2,2.3,etc.

Crew ramas de versionss


Una rama (wer~j6~nivel.ramcrnivel) se mea a partir de un tronco (wersibn.nivel).Para numerar
la versi6n de una rama son necesarios m& de Qs campos. Por ejemplo, creemos una rama en la
versi6n 1.3 de nuestro fichero hoke. Primso, hacer un check-out bloqueado al fichero, &put%
hacerle las modificaciones m e n t e s y seguidamente emitir el comando ci para hacer efectiva
la creaci6n y la numeraci6n de la nueva ram:

$ ci 43.1 hoke
R C s m o l n ~ ,<-
~ h&c
aew revision: 1.3.1.1; previorrs revision: 1.4
enter log message,terminated with single '.' or end of file:
>> Fe&ita cumpkaiios.
>> .
done

Vemos que este comando ci inicia una rama en la versi6n 1.3, asignando a la nueva versi6n la
numeraci6n 1.3.1.1. Emitiendo un comando rlog podemos apreciar mejor 10s cambios.
Si hacemos un check-out a una versi6n con el nfimero mils bajo o igual a1 de la ultima versi6n
de nuestro hbol de versiones; por ejemplo, a la versi6n 1.4 si nuestro &bo1 llega a la versi6n
1.5, despu8 la modificamos y seguidamente la hacemos un check-in, el comando ci nos visuali-
zar4 un mmsaje de error indicandonos que el ndmero dado en el check-in es igual o menor que
el de la versi6n de defecto:

$ co -I -r1.4 hoke
RCS/hola.c,v -> holac
revision1.4 (locked)
done

$ ci 4 . 4 hoke
RCSmoIac,v <- ho1a.c
ci error: delta number 1.4 to low; must be higher than 1.6

Si queremos conservar 10s cambia hechos al fichero en dicha versi6n, tendremos que crear una
rama a partir de la versi6n 1.4, o crear un nuevo tronco.

I1 -SISTEMA DE CONTROL DE VERSiONES (RCS) 287


Programas de U t i l W UNIX

Log de un fichero RCS


El RCS mantiene un historial o log de todas las modificaciones hechas a cada fichero RCS. El
comando rlog extrae del log del fichero RCS especificado, la siguiente informaci6n: nombres de
10s ficheros RCS y de trabajo con sus paths respectivos, ntlmero de la iiltima versi6n del tronco,
rama de defecto, bloqueos, lista de acceso, nombres simb6licos, nfimero total de versiones, rrSi-
mer0 de versiones seleccionadas para la visualizaci6n y texto descriptivo. Esta informaci6n va
seguida de entradas informativas de cada versi6n sel~cionada,en orden cronol6gico.

El comando rlog emitido sin argumentos, visualiza una informaci6n completa de los ficheros
RCS especificados, en este cas0 la del fichero hohc:

§! rlog holac
RCS file: RCS/hola.c,v
Working me: hoke
head: 1.4
branch
locks. strict
access list:
symbol’IC MUMS:
comment leader: * L(

keyword substitution: kv
tatal revisions: 5; selected revisions: 5
description:
V i u a i i i un d u d 0 ai ser cjecutada

revision: 1.4
date 1999/11/15163559; author: yscridi state Exp; Lines: +la
Se agrega el aombre PEPE
-
-
--
-
I --
revision: 1.3
date 1999/11115 15:33:31; author: uscrid; statc Exp; lines: +la
Se agrega linea eon d u d 0 iniciaL

revision: 1.2
date 1999IlYl2 15:OSOO; author: u s e d ; state Exp; lines: +1-1
Se modifica ckse de saluda
-------- ------- --
revision: 1.1
date 1999/1Y12 1438:lO; author: u s e d ; stak Exp;
Initial revision

revision: 1.3.1.1
date 1999/11/1515:50:33; author: u s e d ; stak Exp; lines: +1-0
Felicita cumpieaiics.

El siguiente command-linerlog visualiza informaci6n resumida del log del fichero RCS, poem:

$ rlog -hpoema
RCS fde: R c s l p o e m , ~
Working Ne: poem
head: 2.1
branch
locks: strict
userid: 1.4
access list:
symbol’ic names:
commentleader: *
keyword substitution: kv
total revisions: 5

288 I 1 -SISTEMA DE CONTROL DE VERSIONES


Programas de UtiMhd UNIX

El siguiente command-Linevisualiza 10s nombres de todos nuestros ficheros RCS con sus paths
respectivos, ubicados en el subdirectorioRCS:

$ rlog -RRCSP
RCS/hola.c,v
RCS/poema,v

El siguiente comando rlog visualiza informaci6n de la versi6n 1.3.1.1 del fichero hoke:

$ rlog d3.1.1 hoke


RCS file: RCSm&.c,v
Working fie: h&c
head: 1.4
branch
locks: stria
access list.
symbol'IC names:
comment leader. *
keyword substitution: kv
total revisions: 5; selected revisions: 1
description:
Viualiza un saludo d ser ejecutado.
1----1-----------1--

revision: 1.3.1.1
date 1999111/15 1530:33; author: US&; state: Exp; lines: +1-0
Fdicita cumpleaiias.

El siguiente comando rlog visualiza 10s nombres de todos los ficherosRCS ubicados en el sub-
directorioRCS,que tengan al@n bloqueo:

$ rlog -L-RR C W
Rcs/poema,v

El siguiente comando visualiza la informaci6n de costumbre: niimaro de la versi6n maS reciente


del tronco, etc., m& una entrada con informaci6n de la atima versi6n del ficherohoke:

$ rlog -r hoke
RCS me: RCSmola-c,~
Working file: h&c
head: 1.4
branch
locks: strict
access list:
symbolic names:
comment leader: *
keyword substitution: kv
total revisions: 5; selected revisions: 1
description:
Viualiza an saludo d ser cjecutada
.-----------------I

revision: 1.4
date 1999/11/15 16:3559; author: w e d ; s t a k Exp; lines: +1-0
Se agrega cl nombrc PEPE
_-
---
---
---
---
---
--_I
---
--

El siguiente ejemplo visualiza la misma informaci6n que el ejemplo antexior, per0 de la versi6n
o versiones bloqueadas del ficheropoem, en vez de la versi6n de defecto:
$ rlog -L -hpoem

11 -SISTEMA DE CONTROL DE VERSIONES (RCS) 289


Programas de U t i l W UNIX

Comparar versiones
El comando rcsdiff se utiliza para coqarar dos versiones de un fichero RCS o UM versi6n con
el fichero de trabajo asociado, visualizando las diferencias en el standard-output.

Si se especifcan dos versiones, el comando rcsdiff compara las dos versiones del fichero espe-
cifkado. Si s610 se especifica UM versi6n (la cual debe =tar hecha check-out), el comando
rcsdif‘fcompara esa versi6n con el correspondiente fichero de trabajo especificado.

Si no se especifica ninguna versi6n, el comando rcsdiff compara la versi6n maS reciente del
tronco, hecha check-out bloqueudo, modificada y antes de hacerla check-in, con el contenido del
correspondiente fichero de trabajo. Est0 es Btil para determinar l a cambia hechos al fichero de
trabajo desde el tIltimo check-in.

El siguiente comando visualiza las diferencias entre la versi6n 1.1 del fichero RCS, hobc,v y el
contenido del fichero de trabajo asociado, hobc:

$ 4.1hobc
--
RCS file:RCS&ola.c,v
retrievingrevision 1.1
dif€ -rl.l hola.c
44244
< printf(W0Iab~)
;
-
> printf(%OLA\n”);
> printf(TEPEW);
> printf(~ELtcmAI3ESw)
;

El siguiente comando rcsdiff compara y visualiza las diferencias entre las versiones 1.2 y 2.1
del fichero RCS poem:

$ rcsdiff d . 2 -r2.1poem
RCS file: RCS/poema,v
retrieving revision 1.2
retrieving revision 2.1
diff 4 . 2 4 . 1
2c2
< d sistema Unix cs negro, por eso hay sauces Uorones.
--
> d sistema UNM es negro, par eso hay wmandos obscuros.
445
< An6nimo.
-
> Que caiga un chaparr6nde aziicar y t u d n .
> EIBitLoco.

El siguiente command-line rcsdiff es Btil cuando estamos haciendo modificaciones continuas a


una versi6n, y queremos saber las modificaciones hechas al fichero en un momento dado, antes
de hacerle check-in:

$ rcsdiff h o b c

Este comando cornpararia la rsltima versi6n del fichero hubc,v, en nuestro cas0 la versi6n 1.4
(la cual debe estar echa check-out y modificada antes de la comparaci6n), con el contenido del
correspondiente fichero de trabajo hubc.

290 -
11 SISTEMA DE CONTROL DE VERSIONES
Prograntas de Utilidad UNIX I

Identifiacidn autommca
El RCS permite introducir identificadores en nuestros ficheros de trabajo para posteriormente
identificar los ficherm. Los identificudorespermitidm por el RCS y sus valores est411 b d t o s
en la secci6n "Identifiadores del RCS", pggina 277.

Par ejemplo, hagamos un checkout bfoqueudoa nuestros ficheros, e incluyamos 10s siguientes
identificadores en la primera mea de nuestrm ficherospoem y hoke, respectivamente:

#$Id$
static char m i d o = "$!3ource$; $Revision$; $Date$; $Author$ $" ;

Si ahora hacemos un check-in a nuestm fich~os poem y hokc, el comando ci, registrar4 en
el log de cada fichero RCS mespodente, una nueva v ~ s i 6 4junto con el comentario rem-
miendo las modificaciones, y el identificador o identificadmes insertados.

Cada vez que se haga una operaci6n check-out a los ficheros poem y hokc, los valores a m
ciados de 10s identilidores s e r h expandidos y actualizados en nuestros ficheros de trabajo.

El comando ident extrae el contenido de 10s vdores de 10s identificudores de 10s ficM0s RCS,
incluso de tichaos objetos y dumps, permitihioms localizar las versiones y los m6dulos que
heron usados en un progfarna dado. Si ahtxa hacemos un check-out a nuestros ficheros, y se-
guidamente emitimos el siguiente comando ident, obtmdremos las salidas indicadas:

$ identpuema hokc
poelm:
$Id poema,v 2.2 1999/ll/l516:50:00 u s e d Exp $
ho1a.c
Source: lusrluse&dd'RCSth&c,v $
$Revision: 15S
$Date: 1999/1UlS1651:54 $
$Author: usrid $

El identificador $Log puede SK dtil si lo incluimos en nuestros ficheros, ya que este identifica-
dor acumula en el fiehero de trabajo, por cada versi6n: el mimero de versi6n, la fecha de crea-
d6n, el autor, y 10s mensajes al fog que son requeddos durante los procesos check-in. De este
modo, podemos mantenex un historid comple€ode nuestros fickros.
Supongamos que en un principio, el fichero poem tuviese incorpurada en la primera linea la
cadena #$Log$, y le hacemos varias operaciones de check-in y check-out. Entonces el fichero
de trabajo, en un momento dado,podria tener la siguiente informaci6n:

$ cat poem
#$Log$: poem,v $
# Revision 1.3 1999/11/17161223 userid
# Se modifica linea 2
#
#Revision 13 1999/1l/17153058 userid
# Se induye una linea nueva.
#
# Revision 1.1 1999/11117150503 userid
# Initial revision
#
Las cosas son rojas, ks violetas son mules,
el sistema UNMa negro, por eso hay comaadas obscures.
Los @jam cantan, las nubes se levantan.
Anbim.

11 -SISTEMA DE CONTROL DE VERSIONES (RCS) 291


Progmmas de U t i l W UNIX

Fusidn de versiones
El comndo rcsmerge fusiona 10s cambios entre dos versiones de un fichero RCS. La utilidad
rcsmerge compara dos versiones: verl ver2, con respecto a varios ancestros comunes (quM
1.2, 1.3.1.1 y 1.4, respectivamente) determinand0 c6mo pueden ser las lineas de texto:

1. Identicas en las tres versiones.


2. Idhticas en dos de las tres versiones.
3. Diferentes en las tres versiones.

En el cas0 2, donde UM linea de la versi6n verl difiere de las lfneas que en las mas dos versio-
nes son idhticas, el comando rcsmerge las reemplaza con el texto de la versi6n verl. El cas0 3
, indica un &io de solapamiento, y es indicado como un mor.

La opci6n -p,hace que la salida sea enviada al standard-output, asf que habrA que redirigirla a
un fichero distinto. Antes de realizar una aperaci6n de fusi6n de versiones, debemos hacer
check-out bloqueudo a1 fichero en el cual se va a realizar la operaci6n de fusi6a El siguiente es
un ejemplo que fusiona 10s cambios de las versiones 1.2 y 1.4 del fichero holac:

$ co -1 hoke
R C s r n ~ l a . ~->
,~ hobs
revision 1A (locked)
done
$ rcsmerge -p 4 . 2 4 . 4 h o k c >f u h o l a c
RCS file: RCS/hola.c,v
retrieving d o n 13
retrieving revision 1.4
Merging diEercnccs betwan 1.2and 1.4 into h&q result to stdout

Alternativamente, si queremos salvar las modificaciones de la versi6n 1.2 en el fichero RCS,


hacerla un check-in, pop ejemplo como 1.2.1.1 y despub emitir el siguiente comando co:

$ ci -r1.2.1.1 holorc
RCSlhola.~,~ <- h0Li.c
new revision: 1.2.1.1; previous revision 1.2
'.'
enter log message, tentli~tedwith single or end of file:
>> F d n de las vemiones 1.2 y 1.4
>>.
done
$ co 4 . 4 -j1.2:1.2.1.1 holac
RCSrnola.~,~ -> hob
revision 1A
revision 1.2
revision 1.2.1.1
merging -.
done

Puede ocurrir que en UM fusi6n de versiones, recibamos la siguiente salida:

$ rcsmerge -p 4 . 2 -r13.1.1 holac >fiswnholu.c


RCS file: RCS/hola.c,v
retrievingrevision 1.2
retrieving revision 1.3.3.1
Merging differences between 1.2and 1.3.1.1 into hdac; result to stdout
rcsmerge warning: overlaps during merge

la cual nos indica, en el mensaje de la Gltima linea, un cambio de solapamiento, requiriendo la


intervenci6n del usuario para seleccionar la alternativa corrects.

292 11 -SISTEMA DE CONTROL DE VERSIONES


Pronramas de U t i l W UNIX

Si la versi6n especificada en vetl es mayor que la especificada en ver2, la utilidad rcsmerge


a cambia de la versi6n especificada en verl.
realiza una fusi6n invertida, anulando l

Por ejemplo, el siguiente comando rcsmerge, trata de fusionar las vecsiones Z.4 y 1.3 del fick-
ro hokc, per0 en realidad deshace la cambia de la versi6n 1.4:
$ co -I hoke
RCS/hola.c,~ -> holax
revision 1.4 (locked)
done

$ rcsmerge -p -r1.4 -r13h o k c >fuswaholuc


RCS file: RCShola.c,v
retrieving revision 1.4
retrieving revision 1 3
Merging dif€erences betwwn 1.4 and 1.3 into h0Ia.e; result to stdout

Si realmente queremos haw efectiva esta modificaci6n en nuestro fichero RCS, emitir el si-
guiente comando rcsmerge:
$ rcsmerge -r1.4 -r13h o k c
RCS file: RCSmola.c,v
retrieving revision 1.4
retrieving revision 1.3
Merging dif€erencesbetween 1.4 and 1.3 into h&c

el cud sobrescribirilla versi6n 1.4 del fichero hokc.

Borrarficheros de trabajo
El cornando rcsclean borra 10s fichaos de trabajo que esth hechos check-out y no e s t h modi-
ficados (es deck l
a ficheros de s610 lectura).
Si en el command-line rcsckun no es especifkado ninm fichero, toda l a fickos de trabajo
de s610 lectura, no modifcados, sa& bomdos del directorio de trabajo en m o .

El siguiente ejemplo borra todos 10s ficheros de trabajo existentes en nuestro directorio de tra-
bajo de s610 lectura y no modificados:

$ rcsdean
rm -f bolax
rm -f poem

El siguiente command-line h a la versi6n m& reciente del fichero de trabajo poem, hecha
check-our,incluso si la versi6n esta bloqueada, siempre y cuando no haya sido modificada:

$ rcsdean -upoema
I’CS d. 5Rcslpoe~~~a,~
rm -f poema

El siguiente comando h a l a fichera de trabajo cuyos nombres finalicen en .c y .h, hecha


check-out y no modificados:

$ rcsdean *.c *.h

I 1 -SISTEMA DE CONTROL DE VERSIONES (RCS) 293


Programas de U t i l W UNIX

Cambiar atributos a versiones


Un fichero RCS contiene: versiones mtlltiples de texto de un programa, UM lista de acceso, un
log con 10s cambios, un texto descriptivo y algunos atributos de control. Con el comando rcs
podemos establecer y cambiar algunos de estos atributos a las versiones de 10s ficheros RCS.

El siguiente comando rcs agrega los nombres de login: garcia, lopez y operator a la lista de ac-
ceso del fichero hokc:

$ rcs -agarcia,lopez,operatorh o k c
RCS file: RCS/hoIa.c,v
done

El siguiente comando intenta borrar la versi6n 1.3 del fichero hokc, per0 el comando rcs emite
un mensaje de mor indichdonos que no se puede borrar, ya que de esta versi6n parte una rama:

$ res -01.3 h o k e
RCS file: RCSh&.c,v
rts error: can’t remove branch point 1.3

Entonces, si queremos borrar la versi6n 1.3, primer0 tendremos que borrar la rama 1.3.1.1:

$ rcs -01.3.1.1 hokc


RCS file: RCS/h&.c,r
deleting revision 1.3.1.1
done

El siguiente comando agrega el nombre simb6lico saZa a la versi6n en curso del fichero hokc:

$ rcs -mala: h o k e
RCS Ne: RCS/hda.c,v
done

El siguiente comando borra el nombre simb6lico Lola de la tiltima versi6n del ficheropoema:

$ rcs -nLolapoema
RCS file: Rcs/poema,v
done

El siguiente ejemplo sustituye el comentario al log de las modificaciones registfado en la ver-


si6n 1.2 del ficheropoema, por el comentario especificado en el siguiente command-line rcs:

$ rcs -ml.2:”Incluida linea: ‘Los pAjaros cantan,


RCS fde: RCS/PWma,v
...”’poema
done

El siguiente comando borra el nombre de login, lopez, de la lista de acceso del fichero holac:

$ rcs elopez holac


RCS file: RCS/holac,v
done

El siguiente command-line establece el estado Rel a la versi6n 1.2 del ficheropoema:

$ rcs -sRel:1.2 poem


RCS file: RCS/poema,v
done

294 I1 -SISTEMA DE CONTROLDE VERSIONES


Programas de Utilidad UNIX

Nombres simbblicos de versiones


Los usuarios pueden especificar nombres simbdlicos de versiones para asociarlos con versions
especfficas de un fichero RCS. LAX nombres simb6licos pueden ser establecidos en las versions
de un fichero RCS con las opeiones -n y -N de los comandos ci y rcs.

Cuando hacemos check-in a un fichero para crear una nueva versi6n, podemos agregarla un
nombre simb6lico. Por ejemplo, el siguiente comando ci, ademh de crear una versi6n, agrega a
la misma el nombre simb6licoMari:

$ Ci hoke
RCsmola.~,~G- h&c
new revision: 1.6; previous revision: 15
enter log message, terminated with single ‘.’or end of G k
>> Se bona safudo iniciuf.
>> .
done

Las versiones de un mismo fichero RCS pueden conten varios nombres simMlicos, per0 todos
ellos tienen que ser nombres distintos. Si htentamos establecer un nombre simb6lico ya exis-
tern en una de las versiones del fichero RCS apecificado, ya sea con el comando ci o con el
comando fcs recibiremos siguiente respuesta:

$ rcs -nMari: holac


$ ci -nMari hulac
RCS me: RCslh0Ia.q~
ci error: symbolic mame Mari already bound to 1.6

La apci6n -N de 10s comandos ci y rcs establece un mmbre simb6lic0, anulando cualquier


asignaci6n previa del nombre simb6lim de cualquier versi6n del fichero specificado. Por
ejemplo, el siguiente comando m, establece el nombre simb6lico Mari en la versi6n maS re-
ciente del fichero hoke y lo elimina de la versi6n donde estaba establecido:

$ TCS -NMari: holac


RCS file: RCS/h&.c,v
done

Con las opciones -n y -Nomitiendo el waiCter dos puntos (:) podemos barrar nombres simb6li-
cos existentes. Per0 si el nombre simb6fico que queremos borrar no existe en la versi6n del E-
chero RCS especificado, el comando rcs emite el siguiente mensaje:

$ rcs -nMarta h u h c
$ rcs -NMarta holac
RCS fie: R ~ o l a . c , v
rcs warning: can’t delete nonexistingsymbol Marta

Una forma de establecer un nombre simb6lico a las versiones mh recientes de todos nuestros
ficheros RCS ubicados en el directdo RCS, es con el comando siguiente, el mal establece el
nombre simb6lico tris:

$ rcs -ntris: R C P
RCS file: RCsm&.c,v
done
RCS file: RCS/poema,v
done

I1 -SXSTEMA DE CONTROLDE VERSIONES (RCS) 295


Programas de U t i l W UNIX

Con el comando res, tambien podemos establecer nombres simb6licos a un conjunto de p m


gramas, como en el siguiente ejemplo:

$ rcs -&as: RCS&rog*.c,v


RCS file: RCS/progl.c,v
done
RCS file: RCS/prog2.c,v
done
RCS file: RCS/prog3.c,v
done

el cud asigna el nombre simb6lico tras a las versiones m5s recientes de un grupo de ficheros
RCS con programas escrita en C.

De esta forma pademos hacer un check-in o un check-out a esas versiones a un mismo tiempo:
$ co -rtras RCSlprog*.c,v
Rcs/progl.c,V -> prog1.c
revision 1.2
done
RCS/progZ.c,~ -> M.c
revision 1 3
done
RCS/P=~+V --> prog3.c
revision 1.2
done

El comando rcsfreeze puede sa usado para asignar un noxnbre simb6lico a las versiones del
conjunto de fichem RCS que furman una conf&uraci6n valida. Cuando el comando rcsfreeze
es emitido, nos visualiza un mensaje para que introdaxaxnos un comentario al respecto, el cual
debe ser finalizadocon un cartlctex end-of-fileo con un car- punto (.) t’mico.

El siguiente comando rcsfreeze establece el nombre simb6lico OPER a las versiones en curs0
m5s recientes de todos nuestra ficheros RCS:

$ rcsfreeze OPER
rcsfreeze: symbolic revision number computed: “C-1”
rcsfreeze: symbolic revision number used: WPER”
rcsfreeze: the two M e r only when -freeze invoked with argument
rcsfreeze: give log message, summarizing changes (end with EOF or single ‘.’)
Estabkcitio el nombre simbdlico OPER a todos losficheros RCS.
rcsfreeze: 1.6 RCS/holac,v
rcsfreeze: 1.5 Rcslpoerm,~
rcsfreeze: 1 3 RCS/progl.c,v
rcsfreeze: 1.4 RCS/prog3.c,v
rcsfreeze: 1.3 Rcs/prOgt.c,v

El comando rcsfreeze, a d e m de establecer el nombre simb6lico dado en el command-line,


establece por defect0 un nombre simb6lico: C-1 en cada versibn. Este nclmero sera incrementa-
do cada vez que ernitamos un nuevo comando rcsfreeze.

El nombre clnico C-n es siempre generado e incluido en el log del fichero RCS, per0 no aparece
como parte del nombre simb6lico de versi6n de los ficheros RCS reales.

296 -
I1 SISTEMA DE CONTROL DE VERSIONES
Programas de Utilidrrd UNIX I

12 - COMUNICACION ENTRE SISTEMAS

Introduccio'n
El sistema UNIX fue disef5ado para funcionar en red. Sus creadores implementaron el protocolo
TCPAP (Transmission Control ProtocoNntemet Protoc~l),con el cual v d o s adenadores con
sistemas UMX patenecientes a UM red pueden conectarse entre si.

En realidad, el TCPAP est4 coquesto de un conjunto de protocolos que propoxionan funciones


de comunicaciones entre 10s ordenadores COnectados a una red, mediante un conjunto de pro-
gramas. Las siguientes son algunas & las utilidades de comunicaci6n tratadas en este capftulo:

Conexi6n remota, la cual puede obtenerse con las utilidades:

telnet Proporciona mnexi6n remota entre distintos sistemas.

rlogin Establece conexi6n remota entre distintos sistemas UNM.

rsh Permite ejecutar un comando UNIX en un host remota.

Transferencia de ficheros entre hosts remota, la cual puede realizarse con las utilidades:

ftP Copia ficheros entre un host local y otro remoto.

rCP Copia ficheros entre hosts remota.

Cameo electr6nic0, el cual puede realizarse con la utilidad:

mallx Envfa y r d b e mensajes del correo entre hosts remota.

Info3maci6n de usuarios y de hosts de la red, la cual puede obtenerse con las utilidades:

finger Proporci~nainformaci6n de los usuarios de los hosts de la red.

hartname Visualiza el nombre del host en curso.

netstat Visualiza estadsticasde los hosts de la red.

nslookup Proporciona informaci6n de los sewidores y hosts de una red.

Genaalmente, cuando usamos las utilidades TCP/IP, ya sea para ham fogin remoto, transferir
ficheros entre ordenadores, etc., tendremos que suministrar al comando correspondiente un
identificador del host remoto. Estos identificadores pueden localizarse en el fichero/ekhsts de
cada ordenador. Este fichero contiene por cada host remoto la siguiente infurmaci6n:

Una direcci6n Internet, por ejemplo: 130.206.40.248


Un nombre oficial del host, por ejemplo: fusc
Un alias del host, por ejemplo: fusc. ciemat.es

Cualquiera de los tres identificadores: direcci6n Internet, nombre oficial del host o alias del
host, pueden ser usados indistintamente en las utilidades TCPAP que requieran este dato.

I2 -COMUNICAClON ENTRE SISTEMAS 297


Prommas de U t i W UNIX

Utilidad telnet
Descripcih
La utilidad telnet utiliza el protocolo TELNET de TCPhP para que el usuario pueda conectarse a
otros hosts de la red, sin tener en cuenta el sistema operativo. La utilidad telnet dispone de un
juego de subcomandos para que el usuario pueda especificar CaraCtenIsticas de conexi6n en el
login remoto.

Formato
telnet [-opciones] [host] [port]

Opciones
-d Activa el modo depuraci6n.

-1usuario Si al ham la conexi6n al sistema remuto, &te entiende la apci6n E " C 0 N del
, protocolo TELNET, el identificador de usuario especilkado en usuario es enviado al
sistema remoto mmo el valor de la variable USER
-nfScrcero Registra informaci6n de amllisis de la red en el fichero especificado enfichro.

Argrcmentos
host Es el identificadur del host remoto al cual nos vamos a conectar. En el argumento
host puede especfiicarse indistintamente: el nombre oficial del host, el alius del host
o la direcci6n Internet del host.

Port Indica un nslmero de puerfu @unto de conexi6n). Si en el argumento port no es es-


pecificado ningh mlmero, es usada la puerta telnet de defecto.

Subcomandos telnet
Si el comando telnet es emitido sin argumentos, la utilidad telnet es situada en modo comando,
indicado por el siguienteprompt, en cuyo modo acepta y ejecuta cualquier subcomando telnet

telneb

Despu& de la ejecuci6n de 10s subcomandos telnet, algunos nos devuelven al prompt tefneb,
en otros, tendremos que pulsar el carkter <RETIIRN>, lo cud nos devolveril a modo input.

Si el comando telnet es emitido con argumentos, la utilidad telnet ejecuta un subcomando open
con esos argumentos, situhdose en modo input. Estando en modo input, la utilidad telnet per-
mite situarse en modo cornundo, tecleando el cariicter escape de defecto: A].

Una vez que la conexi6n esa abierta, la utilidad telnet intenta activar la opci6n LINEMODE del
protocolo TELNFX; si est0 falla, la utilidad telnet revierte a uno de 10s modos input: modo CQ-
rtfcter-a-cartfcter o modo linea-a-linea, dependiendo del modo que soporte el sistema remoto.

298 -
I2 COMUNICACION ENTRE SlSTEMAS
P r o g m a s de UtiliiM UNIX . .

La mayda de 10s submandos telnet pueden ser abrevidos, es deck, tambien son identifa-
dos si se teclean con menos le€ras que las que tiene el subcomando @or ejemplo, se puede te
clear q en vez de quit, sen en vez de send, etc.).
Los suhcomandos que admite la utilidad telnet son 10s siguientes:

close C i a la conexi6n telnet en curso.

display [argwento I ...


Visualiza todos o algunos de 10s valores de 10s subcomandos set y toggle.

environ [argument0 ...I


Manipula las variables enviadas a travh de la apci6n ENVIRON del protocolo
"ET.Los argumn.tos vfidos para el subcomando environ son 10s siguientes:

define variable valor


Define la variable especificada en variable (la cual sera automilticamente
expartada) al valor especificadoen valor.

export variable
Indica que la variable especificadaen variable va a ser exportada al extremo
remoto.

list Visualiza las variables establecidas en curso.

udjZne variable
Borra la variable especificada en variable de la lista de variables de entorno.

umxpmt variable
Indica que la variable especificada en variable no va a ser expartiu4 a no
sa que explfcitamentesea solicitadopor el extremo remoto.
1 Visualiza informacih de ayuda relativa al subcomandoenviron.

mode tip0
La opci6n tip0 es una de las siguientes, dependiendo de la sesi6n telnet. El host re-
mot0 solicita permisopara actuar sobre el tip0 de modo solicitado:

character Desactiva la op>ci6nLINEMODE, o si el extremo remoto no entiende ata


opci614 introduce el modo carkter-a-carkfer.

line Activa la opci6n LINEMODE, o si el extremo remoto no entiende eta op-


ci614 intenta introducir el modo linea-u-linea.

isig (-isig)
Intenta activar (desactivar) el modo TRAPSIGI de la apci6n LINEMODE.

edit (-edit)
Intenta activar (desactivar) el modo EDlZ'de la opci6n LJNEMODE.
litecho (-litecho)
Intenta activar (desactivar) el modo LIT-ECHOde la apci6n LJNEMODE.

? Visualiza informaci6n de ayuda relativa al subcomandomode.

-
12 COMUNICACIONENTRE SISTEMAS 299
Programas de U t i W UNIX

open host
Abre una conexi6n al host remoto dado en host. En host puede ser dado un nombre de
host o una direcci6n Internet. Si en port no es specificado un ntlmero de puerfcz,la
utilidad telnet intenta con-se con un server del protocolo TELNET a la puerta de
defecto. DespueS de establecer una conexi&, el fichero -/.telnetrc es abierto.

quit Cierra cualquier sesi6n telnet, saliendo del programa telnet. En modo comando, un
ca&ter end-offile (cCtrZ-d>)tambih cierra la sesi6n 7 se sale de la utilidad telnet.

send argument0 ...


Envfa uno o maS argumntos (secuencias de caracteres especiales) al host remoto. Los
siguientes argumentus pueden sa especificados en el subcomando send:

abort Envfa la secuencia ABORT (Aburt Processes) del protocolo TELNFiT.

a0 Envfa la secuencia A 0 (Abcnt Output), la cud har6 que la salida g e n e r a en


el sistema remoto sea vaciada en el terminal del usuario.

ayt Envia la secuencia AYT (Are You There) del protocolo TELNET,a la cud el
sistema remoto puede o no responder.

brk Envia la secuencia BRK (Break) del protocolo "EX,la cual podria &ner
significadoen el sistema remoto.

ec Envia la secuencia EC (Erase Character), la cual puede ham que el sistema


remoto t a r e el car&- que se est4 introduciendo.

el Envia la seaencia EL (Erase Line), la cual hace que el sistema remoto pue-
da borrar la linea que se est4 introduciendo.

eof Envfa la secuencia EOF (End-Of-File) del protocolo TELNET.

cor Envia la secuencia EOR (End-Of-Record) del protocolo TELNET.

escape Envia el car* escape en curso del protocolo TELNET (por defecto, *I).

ga Envia la secuencia G A (Go Ahead) la cual proporciona al sistema remoto un


mecanismo para indicarle que devuelva el control al usuario.

getstatus Envia la subopci6n STATUS SEND si el extremo remoto entiende la opci6n


STATUS del protocolo "ET.

iP Envfa la secuencia IP (Interrupt Process), la cud har6 que el sistema remoto


aborte el proceso de ejecuci6n en curso.

nop Envfa al sistema remoto la secuencia NOP (No Operation).

susp Envia la secuencia SUSP (Suspend Process) al sistema remoto.

synch Envia la secuencia SYNCH, la cual hace que el sistema remoto borre los da-
tos previamente tecleados.

2 Visualiza informaci6n de ayuda del subcomandosend.

300 -
12 COMUNICACIONENTRE SISTEMAS
set vadabk valor
Establece la variable telnet dada en vcuiabze al valor dado en v&r o a verdadero
(tme). El valor especial ofldesactiva la funci6n asociada con el nombre de la variable
introducida, lo mal es equivalente al us0 del subcomando unset. El subcomando un-
set desactiva o establece a falso @zhe) cualquiera de las W o n e s dadas. Los valores
de la variable son 10s siguientes y pueden ser consultados con el subcomando display:

echo Si la utilidad telnet est4 operando en modo linea-a-linea, el valor es el ca-


r6cter echo (inicialmente AE),el cual balancea entre el establecimiento y la
supresi6n del cardcter echo de 10s caracteres introducidos.

eof Define el cardcter end-of-filepara el protocolo "ET. Si la utilidad telnet


esta en modo linea-a-linea e introducimos el &cter eof como primer ca-
r&cterde UM linea, dicho ca&m es enviado al host remoto.

erase Si la utilidad telnet estA aperando en modo cardcter-a-cartictery el modo


carticter-local (locrrlelrars) es verdd, y tecleamos el caracter de borrado, la
secuencia EC es enviada al sistema remoto.

escape Especifica el carkter escape del protocolo TELNET (inicialmente A]), el cual
en UM conexi6n remota,pone a la utilidad telnet en modo c o m d o .
interrupt Si el modo carticter-local es verdad, y el caracter interrupt es tecleado, UM
secuencia IP es enviada al host muto.

kill Si la utilidad telnet est4 en modo carticter-a-carkter y en modo cardcter-


local, y tecleamos el carikta k i u la secuencia EL es enviada al host moto.

lmxt Si la utilidad telnet est4 aperando en modo UNEhfODE o linea-a-l/nea,el


cat.acter fnext es tomado como el cari4cter fnext del terminal local.

quid Si la utilidad telnet est4 en modo cardcter-local y el carikttx quit es teclado,


la secuencia BRK es enviada al sistema remoto.

reprint Define el cardcter reprint del terminal si la utilidad telnet est4 operando en
modo UNEMODE o en modo linea-a-linea.

start Define el cariktex stmt del terminal si est4 activada la apci6n TOGGLE
FLOW-CONTROLdel protOc01O TELNJ3T.

stop Si la opci6n TOGGLE-FLOW-CONTROL del protocolo " E T est4 acti-


vada, este valor define el carkter stop del terminal.

susp Envia una secuencia SUSP a1 host remoto si el caracter susp es tecleado, y
la utilidad telnet esta en modo cardcter-local o en modo UNEMODE.

@hero Especifica el fichero en el cual va a ser escxita la salida producida por las op-
ciones de adisis netdata y option.

worderase
Define el carkter wor&rase del terminal si el mmndo telnet opera en mo-
doLZNEMODEolinea-a-linea.

? Visualiza informaci6n de ayuda de 10s subcomandos set y unset.

-
I2 COMUNICACION ENTRE SISTEMAS 301
Programas de Utilidad UNIX

SIC estado
El subcomando SIC (set local character) establece y cambia el estado de loci caractexes
especiales si la opci6n LLNEMODE est4 activada. Estos caracteres establecen una 00-
rrespondencia con las secuencias de loci subcomandos telnet (como ip y quif) o con
caractexes de edici6n de linea (como erase y kill). Por defecto, loci caractexes especia-
les locales son expatados. Los valores del argument0estado son loci siguientes:

check Verifica el establecimiento en curso de loci caractexes especiales. El extremo


remoto es requerido para enviar todos los caractexes especiales establecidos,
y si hay discrepancias con el extremo local, &te conmuta el valor remoto.

export Conmuta 10s defectos locales para 10s caractem especiales. Los caracteres
de defecto locales son 10s del terminal local al comenzar la conexi6n telnet.

import Conmuta loci defectoci remota para loci caracteres espaiales. Los caracteres
de defecto remoto son los del sistema remoto en el momento de la conexi6n.
? Visualiza informaci6n de ayuda relativa al subcomando SIC.
status Muestra el estado en curso del protocolo TELNET. Est0 incluye el host al que estamcs
comxtados, ad como el modo en curso.

toggle argumento ...


Activa o desactiva uno o maS argumentos que controlan c6mo la utilidad telnet res-
ponde a cigtos eventcs. Los valores posibles son verdadero y fdso (true y fake), y
pueden ser explfcitamente establecidos con 10s sulxmnandos set y unset. El s u b
mando toggle q t a 10s siguientes tzrgumentos:

autojlhh
Si 10s valopes aufoj%shy loc&hurs son verdaderos y 10s caractexes ao, intr
y quit son reconocidos y transformadoci en secuencias telnet, la utilidad
telnet no visualiza ningiin dato par el terminal del usuario hasta que el sis-
tema remoto sepa que se han procesado dichas secuencias.

autosynch
Si loci valores autosywh y localciiars son verweros, y el carikter intr o
quit es tecleado, la secuencia enviada es seguida de la secuencia SYNCA.

binary Adiva o desactiva la opci6n BINARY para la entrada y la salida.


inbinmy Activa o desactiva la opci6n BINARY para la entrada.

Outbinary
Activa o desactiva la opci6n BINARY para la salida.

crrf Si el valor crrfes verdadero, el carkter retorno de carro es enviado como


<CR>/saZto-de-Zinea.Si el valor crrfesfuZso,el car- retorno de carro es
enviado como <CR>/nuZZ.

localchars
Cuando este valor es verdadero, 10s caracteresflush,interrupt,quit, erase y
kill son reconocidos localmente, y son transformados en secuencias telnet
apropiadas (AO, IP,BRK,EC y EL,respedvamente).

302 -
12 COMUNICACION ENTRE SISlEMAS
Programas de U W a d UNIX I <,

netdtda Activa o desactiva la visualizaci6n de dam de la red (enhexadecimal).


options Activa o desactiva la visualizaci6n de algunos procesos internos del proto-
colo TELNET.

? Visualiza informaci6n de ayuda del subcomando toggle.

z Suspendela actividad telnet. S610 funciona bajo 10s shells C y Korn.


? [cmdJ Los subcomandos ? y help facilitan informaci6n de ayuda de un subcomando telnet
especificadoen cmd, o de todos 10s subcomandos tefnet si no se especCxca ninguno.

![cmdJ Ejecuta el comando Bnico del sistema especificado en cmd. Si en el argument0 cmd no
se espedka ningtin comando, es invocado un subshell interactivo.

Fichero .telnetrc
La utilidad telnet dispone del fichero .tektrc, localizado en el directorio de defect0 del usua-
rio, para que el usuario pueda establecer a su medida 10s valores setup en una sesi6n telnet. El
fichero -/.tehetrc Sera lefdo al hacer login el usuario.
El fichero puede constar de varias entradas por cada host a1 que un usuario puede conectarse.
Una entrada al host remto consta de dtiples Uneas. La primera linea es el nombre de un host
remoto. Las lineas subsiguientes deben comenzar con espacios, y contenex subcomandos teinet.
Las lfneas que comienzan con un caracter mlmero (#) son llneas de comentario.
Para especificar subcomandos telnet que se apliquen a todos 10s sistemas, cfear una entrada uti-
lizando la palabra DEFAULT como el nombre del sistema, y especificar 10s s u b m a w tehet
en las subsiguientes lfneas. El siguiente es un ejemplo de fichero.tektrc:

$ cat.telneac
# Fichero .telnetrc ejemplo.
# Subccnnandos que se aplican en tuios 10s sistemas.
DEFAULT
environ undefine USER
# Eatrada del primer sisterma
host1
set echo
toggle d f
# Entrada del segundo sistema
host2
set echo
mode line
toggle crlf

En algunos sistemas remotos debemos desactivar manualmente el carficterecho cuando estamm


en modo linea-a-linea. En 10s modos linea-a-linea o UNEVODE, el car4cter eof del terminal es
reconmido y (enviado al sistema remoto) ~610cuando es el primer carActer de una linea.

Otra utilidad, la utilidad rlogin permite que un usuario pueda mnectx el terminal de su host lo-
cal a un host remoto con sistema UNLX (ver “Utilidadrlogin”,pfigina 351).

-
12 COMUNICACION ENTRE SISTEMAS 303
Promamas de Utilidad UNIX

Ejemplos
El siguiente es un ejemplo de sesi6n telnet, cuya conexi6n remota se realiza al host daxp, si-
tuando al programa telnet en modo input:

$ # Prompt del sistema I d .


$ telnet daxp # Abre la conexitin con el sistema remtodcrqa.
Trying 130.20&11.244...
Connected to daxp.ciema+cs
Eecape character is '"1'.

Digital UNIX (daxp) (ttyp3)

Lagin: XXLXLLU # Nuestro login-namc en el sistema remota


Ppsswod: # Nuestropcrsswordremoto en cuaI no cs visualirada
... # Mensajes del sistema remoto.
# Prompt del sistema remoto.
...
;imp$ A] # Nos sitiia en modo cornondo.
t e h e b close # Cierra la sesitin en curso y salimas del programatelnet.
$ # Nos devuelve dprompt del sistema I d .

El siguiente es un ejemplo de conexi6n telnet en modo comundo:

$ #Prompt del sistema I d .


$ telnet
&he* open crayb # Abre una conexitin d sistema relllotocruyb.
Trying 130.206.11.8...
Connected t0crayb.ciemat.c~.
Escape character is '"1'.

Cray UNICOS (crayb) (ttypo10)


UNICOS Release 10.0

Login:rrrrrrrr ~ ~el sistema remoto e u y h


# Nuestro l 0 g i n - m en
Passwonk # Nuestropawword en el sistema rellloto cruyb.
... # Mensajes del sistema remoto.
crayb$ # h m p t del sistema remoto cmyb.
...
iiayb$ ^] # Nos sitiia en modo comundo.
telneb status # Mucstra el estado en curso del programa teInet.
Connected to crayb.ciemat.es
Operating with LINEMODE option
Local line d i n g
Local character echo
Local flow control
Escape character is "1.
t e h e b close # Cierra la conexitin d host cruyb y vuelve a modo eomcmdo.
C o n d i o n closed.
t e h e b open fusc # Abrimos UM conexitin d hostfuse.
...
fus% # h m p t del sistema remto.

# Cierra la sesi6n en curso y saIimos del programa tehet.


# Nos devuelve el prompt del sistema I d .

304 -
12 COMUNXCACXON ENTRE SXSTEMAS
Programas de U t i l W UNIX

Utilidad hostname
Descripcih
La utilidad hostname establece o visualiza el nombre del host del sistema en curso.

Formato
hostname [-opciones] [nombre-host]

1
opciones (Siben la versih Berkeley)
I

-S Visualiza el nombre oficial del host en curso.

Argumentos
nombre-host Es el nuevo nombre del host que va a sa establecido en el sistema en curso. S610
un usuario superuser puede establecer el nombre del host.

Notas
Otras utilidades UNM tambih suminishran informaci6n relativa a l identificador del hosz de un
sistema. Por ejemplo, la utilidad uname visualiza infamaci6n del sistema en curso (ver “Utili-
dad uname”, pdgina 306); las utilidades ping y nslookup nos facilitan la direcci6n IP de un host
dado (ver “Utilidadping”, pagina 329 y “Utilidad nslookup”, pdgina 332).

Ejemplos
El siguiente comando hastname, visualiza el nombre del host en curso de nuestro sistema:

$ hostname
infZ.ciematcs

Suponiendo que estuvi&emos alojados en el host in$?.ciema?.es,y &e tuviese un sistema Ber-
keley, el siguiente command-line nos visualizarla el nombre oficial de dicho host:
$ hostname -s
inf2

El siguiente script, llamado impre, visualii el estado de una impresora remota dada:

$ cat impre
#!/binlksh
-
# script: impre ViiuaIiza d &ado de k impresora cspecificada.
dear
who ***** Emado de la imprcsora $1 obtenido desde d *****n
echo“ +****ordeaador‘hos&ame‘ eld~‘dak+’%dl%ml%y’‘ a las‘date+’%H:%M:%S’* ****m
echo
Ipq -P$1
echo

-
I2 COMVNICACIONENTRE SISTEMAS 305
Programas de Utilidad UNIX

Utilidad unarne
Descripcidn
La utilidad uname visualiza infomaci6n relativa al sistema en NSO. Principalmente es titi1 pa-
ra determinar el nombre del sistema que estamos utilizando.

Formato
uname [-opciones]

Opciones
Las opciones de la utilidad uname pueden variar de un sistema a otro. Las siguientes son comu-
nes en ambos sistemas UNM:

-a Visualiza informaci6n del sistema (todas las apciones) en el siguiente orden y f m o :

sistem host pub&uci6n versi&n hardware


-m Visualiza el tip0 de hardware o modelo de miiquina que utiliza el sistema. (hardware).
-n Visualiza el nombre del host o nodo pos el que es conmido en la red. (irosf).
-r Visualiza el mlmero de publicaci6n (release)del sistema operativo. @&&a&n).

-s Visualiza el nombre del sistema aperativo. Es el defecto. (sistem).

-v Visualiza el nfimero de versidn del sistema operativo. (versidn).

Notas
Existen otras utilidades que tambi6n nos facilitan informaci6n relacionada con 10s nombres de
host de la red La utilidad hostname visualiza el nombre del hosf en curso (ver “Utilidad
hostname”, p6gina 305). La utilidad rup (s610 en Berkeley), visualiza la actividad de 10s hosts.
La utilidad host (s610 en System V) visualiza el nombre de host del domini0 dado.

Ejernplos
El siguiente comando visualiza una linea con infmmaci6n de nuestro sistema:

$ uname -a
OSFl daxp U4.0 386 alpha

Cuando tenemos varias sesiones abiertas en diferentes mdenadmes, una forma de identificar el
host en el que estamos alojados, puede ser por el prompt. El siguiente ejemplo establece como
prompt, el nombre del host de nuestro sistema en curso:

$ PS1=”’uname -n‘-> ‘‘
daxp->

306 -
I 2 COiUUNlCAClONENTRE SlSTEMAs
Pmgmmas de Uti1ida.dUNIX

Utilidud finger
Descripcih
La utilidad finger o f, proprciona i~formaci6nrelativa a 10s usuarios locales y remota. La in-
formaci6n es visualizada en dos fmmata: reducido y amplio (ver “Fonnato de salih”).

Fomato
finger [-opciones] [usrcario ...I[ @hst]

El mmando f es un alias saportad0 par la utilidad finger.

Opciones
-b Visualizada infannaci6n en formuto amplio, del usuario o usuaria especificados, per0
suprime el nombre del directaio de defect0 y el nombre del shell del login de defecto.

-f Suprime la Unea de cabecera delformuto reducido.

-h Suprime la visualizaci6n del contenido del fichero .project.


-i Visualiza Mw~naci6nen fonnato reducido, del usuario o usuarios espwificados, o de
todos 10s usuarios alojados si no se especifica ningtin usuario, suprimiendo 10s campos
Name y Oflce.
-I Visualiza infarmacih de 10s usuarios alojados enformuto amplio, tanto del host local
como del host remoto. La W c a apci6n -I fuena elformuto umplio.
-m Visualiza informaci6n en fonnato amplio, o enformuto reducido si se especifica la ap
ci6n -s,del usuario o usuarim cuyos nombres sean exactarnenteun nombre de login.

-P Suprime la visualizaci6n del contenido del fichero.plan.

-Q Visualiza infarmci6n enfonnato reducido, del usuario o usuarios especifcados, o de


todos 10s usuaries si no se apecificaningum, de 10s campos:Login, 27Y, y When.

-S Visualiza infmmaci6n enfonnato reducido, del usuario o usuarios que tengan incluido
el nombre especificadoen el campo del nombre real del fichero/etc/passwd.

-W Suprime la visualizaci6n del campo nombre real (Name),delfomzato reducido.

Argumentos
usuorio Es el nombre o nombres del usuario o usuarios de 10s que queremos obtener infor-
maci6n. En usuLYi0 tambien pede especificarse un nombre comprendido en el
campo 5 (nombre real) del fichero/etc@mswd.

host Es el nombre del host remoto en el que reside el usuario o usuarios de 10s cuales va-
mos a obtener informaci6n.

I2 -COMUNICACION ENTRE SISTEMAS 307


Programas de Utilidad UNIX

Fomato de salida
La utilidad finger suministra la informaci6n en formato reducido cuando en el commund-line
no se especifica n i n g h argumento, en cuyo caso, la informaci6n visualizada corresponde a los
usuarios alojados en el sistema del host local; o cuando en el commmd-line s6lo se especifica
un nombre de host de la forma: @host, en cuyo caso, la infurmaci6n visualizada corresponde a
los usuarios alojados en el sistema del host remoto especificado en host.

El formato reduciifoconsta de una linea por cada usuario alojado incluyendo, por defecto, la si-
guiente infarmaci6n:

Nombre de login (Login).


Nom& real o completo (Name),tomado del fichero /etc@awd.
Nombre del terminal (m. Si la escritura no est5 permitida en el terminal, el nombre de
&e va precedido de un cariicter asterisco (*).
Tiempo inactivo (Idle), el cual es dado en minutos si es un nitmero tlnico, en horas y mi-
nutos si est5 presente un cargcter dos puntos (:) y en dias si est5 presente la letra d.
Dfa de la semana y hora de conexi6n (When).
Ubicaci6n del usuario (Once), despacho, telefono, etc., si estos datos e s t h disponibles.

La utilidad finger suministra la informaci6n en formuto umplio cuando en el command-line se


especifica uno o varios usuarios, en cuyo caso, la informaci6n visualizada corresponde a los
usuarios del host local; o cuando en el command-line se especifica un nombre de host de la for-
ma: usumio@hst,en cuyo caso, la informacih visualizada corresponde al usuario especifica-
do en usuario del host remoto especificado en host.

Elformato umplio es un formato multilinea, e incluye por cada usuario la siguiente informaci6n:

Nombre de login.
Nombre real o completo, tomado del campo 5 del fichero/etc@awd.
Ubicaci6n del usuario, Wico, despacho, telefono, etc., si estos datos e s t h disponibles.
Directorio de defecto.
Shell del login de defecto.
Mes,dia y hora de la conexi611en curso.
Tiempo inactivo, expresado de tres formas scan el tiempo de inactividad: en dias y horas,
en horas y minutos, y en segundos.
Nombre del terminal.

.
Nombre del host desde el que se hace la conexi6n.
Informaci6n de los ficheros .project y .plan, si &os esth establecidos.

Si el usuario especificado no est5 alojado, la utilidad finger suministra la misma informaci6n


que la del formato amplio, menos el tiempo inactivo; y en vez de los datos de la conexi6n en
cmo, facilita data del riltimo login del usuario: mes, dia, hora, terminal y host.

La utilidad finger facilita informaci6n adicional, en el formuto amplio, mediante los ficheros
.plan y .project, los cuales deben estar ubicados en el directorio de defecto del usuario:

.pZun Contiene informaci6n de nuestro plan de trabajo y puede constar de una o mAs lineas.

.project Este fichero contiene informaci6n del proyecto en el que estamos trabajando, y ~610
puede tener UM linea.

La salida generada por el comando finger puede variar ligeramente de un sistema a otro.

308 -
12 COMUNICACION ENTRE SISTEMAS
Progrumas de Utilitiad UNIX *- 1.

Notas
Otras utilidades UNIX tambien propodonan inforrnaci6n de 10s usuarios alojados en un host
local. Asf, la utilidad who visualiza infmrnaci6n de 10s usuarios alojados en nuestro sistema (ver
“Ufifidadwho”,p5gina 3); la utilidad w (s610 en la versi6n Berkeley) visualiza informacibn de
la actividad del sistema y de 10s usuarim alojados (ver “Ufifidudw”, Mgina 26).

Ejemplos
El siguiente comando finger visualiza informaci6n, enformato reducido, de 10s usuarios aloja-
dos en el host local:

$ finger
Login Name ‘ITY Idle When Offii
opentor SaladeOperaa6n eo 6d Thu 10:27
operator Saladeoperaci&n *:07:32 Wed 2021
oracle Infoges pl 37 Tue 12:ll
infu AntonioSnchezdela p2659 Fri 12:06 Edii.22-102 6169
am MigudAngelJhpezC p3 2:47 Tue 08M Edii.22-307 3466530
il2jfW JuanMuEozCarrih p5 6:35 Tue 08:16
i12ga08 CarlosSama q0 651 Tue W49 Edif.22-311 3466521
...
El siguiente ejemplo visudiza informci611,enfonnato ampfio,de 10s usuarios blanc0 y garcia
del host local. Obsememos que el usUiirio garcia tiene estabfecidos 10s ficheros .project y .plan,
y en ese momento no esta alojado en el sistema:

$ finger blanc0 gar&


Login name: blanco In real life Fernando Blana, M a r c h
Office: Edif.22-206,6246
Directory: I u s r l u s e r s f ~ n c o SheU hinllrJh
On since Jan 25 13:4035 2 hours 22 minutes Idle Time
on ttyq7 fkom pcferxiematcs
No Plan.
Login name: garcia In real life Jose Garcia Sanchez
Directory: lusrlused€isidgareia Shen: hidcsh
Last login Wed Jan 19 10:32 on ttys3 from 130.206.11.177
Projeet: Charas su@nicas
Plan:
F i d i d a Fase 1 Experimentadocomportamiento alta presi6n.
Suministra informe cstadkticotrimestd.

El siguiente comando finger visualiza informaci6n enf o m f o redmido, de 10s usuarios aloja-
dos de nuestro host, suprimiendo10s camposName y Once de dicho formato:

! finger -1
$
Lagin TrY When Idle
operator ttspo Tue Jan 11 1946 6 days 11 hours
sanchezg ttypl Thu Jan 27 19:OO 49 minutes
das2 tt4pa Wed Jan 26 1559 3 hours 17 minutes
Christ ttypc Wed Jan 26 @:21 2 hours 22 minutes
ZURO ttypa Wed Jan 26 10:15 1 day 2 hours
sanchezg ttypf Thu Jan 20 1512 6 days 2 hours
mrro * S ~ s : O Wed Jan 26 10:15
daSl wq9 Thu Jan 27 10:42 4 hours 24 minutes
hz *eapj:5 Wed Jan 26 1020
...
-
12 -CO,UUMCACION ENTRE SISTEMAS 309
Programas de Utilidad UNIX

El siguiente c o m d - l i n e finger visualiza informaci6n, enformato mplio, del usuario h i s del


host remoto crayb:

$ finger luis@crayb
[craybsiematcs J
Login name: luis In real life: PEREZ GARCIA
oifii:LUIS
Directorg: 1usuarioslccc;Jluis Shell: lbidksh
On since Jan 27 131035 on ttypOOS from ceca76.aemat.e~
2 hours 22 minutes Idle Time
No Plan.

Observernos las distintas salidas, aunque parecidas, de 10s siguientes 4 cornandm finger: El
primer comando visualiza enformato umplio, todos 10s usuarios (alojados o no) que contengan,
en el campo 5 del fichero /efc&mwd, el nombre oracle. El segundo comando visualiza enfor-
mato redmi&, todos 10s usuarios (alojados o no) que contengan, en el campo 5 del fichero
/efc/pmwt& el nombre oracle. El tercer comando s610 visualiza, enf o m t o mplio, el usuario
que exactamente tenga el nombre oracle como nombre de login. El cuarto comando s610 visua-
liza, enformato reducido, el usuario que exactamente tenga el nombre oracle como nombre de
login. Observernos que el usuariooracle tiene abiertas dos sesiones:
$ finger oracle
Login name: oracle7 In real life: Base de Datos Orade V7
M r y : lusrlorade'l SheU lbintksh
Last login Wed Jau 26 09:47 on ttyq0 lramd37.ciemat.es
No Plan.
Login name: menupru In real lifc:h e b a s para d menu O n d e
Dirrctwy: /usrlusers/menupru She& K i h
Never logged in.
No Plan.

Login name: oracle In real life Infoges


Directory: /bd Shell: /bid&
On sina Jan 26 14:47:43 53seconds Idle Time
on ttyp6 from d 3 7 . C i e m a L e s
On sina Jan 26 1 3 1 5 4 3 1 hour 18 minutes Idle Time
on ttyqa from pce;lg.ciemates
No Plan.

$ finger -s oracle
Login Name TI71 Idle When Offi
oracle7 Base de Data Oracle q0 a a n 26 09:47>
menupru Pruebas para el menu < . * . . >
oracle Inioges p6 2 Wcd 14:47
oracle Infoges qa 1:19 Wed 13:15

$ finger -moracle
Login name: oracle In real life: Infoges
Directory: /bd SheU lbinlsh
On since Jan 26 14:47:43 11seconds Idle T i
on ttyp6 from cmtos7siema+cs
On since Jan 26 131543 1hour 21 minutes Idle Time
on ttyqa from pceag.ciemat.es
No Plan.

$ finger -s -moracle
Login Name 'ITY Idle When Office
oracle Infoges p6 2 Wed 14:47
oracle Inioges qa 1:21 Wed 1315

310 -
12 COMUh'l&A&ION ENTRE SISTEMAS
Promamas de U t i l W UNIX

Utilidad maiIx
Descripcihn
La utiiidad mdlx usa un sistema de cmeo electr6nico para enviar y recibir mensajes. La utili-
dad mdlx es una versi6n mejarada de la utilidad mail. La utilidad mailx es m6s comple€aque
la utilidad mail, entre mas mejmas est4 la de poder enviar mensajes a usuarios de los distintos
hosts que componen nuestra red.

La utilidad mailx nos permite realizar entre otras, las siguientes qmaciones:

Compner mensajes y enviarlos.


Recibir mensajes y examinarlos.
Guardar los mensajes recibidos.
Bmar 10s mensajes recibidos.

La utilidad mailx utiliza dos t i p de buz6n para guardar los mensajes del cmeo entrante: el
buzbn del sistema y el buz6n personal.

El buzbn del sistem es un fichero que asigna el sfstema a cada usuario cuando le llega el CD.
rreo, y es borrado cuando todos los mensajes de dicho f i c b o son borradm. Este fichero est4
ubicado en el directario / u s r / s p u u U e u a r i u en el sistema Berkeley, y en el directurio
/ u s r m a r i u en la versi6n System V,don& el nombre de fi-0, usumio, sera el nombre
de login de cada usuario del sistema.

El buzdn personal es un fichero secundario asignado por el sistema, con nombre $AYOM.hbox,
a un usuario cuando usa el comando mailx para eJraminar su buz6n del sistema; entonces, cuan-
do el usuario sale de la utilidad mailx con quit, el sistema guarda en el fichero nzbux los men-
sajes que fueron lefdos per0 no barrados ni salvados durante la sesi6n mailx.El sistema borra el
fichero nzbux cuando son borrados todos los mensajes de dicho fichero.

Los mensajes de nuestros buzones, del sistema y personal, pueden ser conservados enfolders.
Losfolders proparcionan un camino para salvar mensajes del cmeo de una forma crganizada.
En un directorio defolders podemos crear tantosficherosfolder como necesitemos, par ejem-
plo, OrganiZandolos por t i p de mensaje, fecha, etc.
El envio de mensajes a usuarios, se realiza emitiendo el comando mailx con argumentas que
identifiquen 10s destinatarios y el host de los usuarios que van a recibir el mensaje. Los mensa-
jes pueden ser enviados usando la redirecd6n de ficheros, o creando un mensaje con el editor
incorporado de la utilidad mailx Si cuando estamos componiendo un mensaje con el editor
mailx se produce una intmpci6a el mensaje es guardado en el fichero $€IOMH&dktter.

Cuando hacemos Zogin a nuestro sistema y tenemos curreo pendiente de examinar en nuestro
buz6n del sistema, la utilidad mailx nos lo notifica con el mensaje: You have mail.. Lo mismo
sucede cuando ya estamos alojados y recibimos correo nuevo, la utilidad maiIx nos lo notifica
con dicho mensaje cadaintmalo de 10 minutos. Este interval0 de 600 segundos es el defecto, y
su valor est4 establecido en la variable de entomo MAILCEECK,el cual puede ser modificado
de forma que recibamos la notificacih del nuevo cmeo con la fiemencia des&

La utilidad mailx tiene dos modos de funcionamiento: modo input y modo conrando. El modo
comando es usado para leer los mensajes entrantes. El modo input es usado para crear y enviar
mensajes a Was personas. La utilidad mailx dispone de una gran variedad de comandos, tanto
para manejar el correo saliente: commdos tilde, como el entrante: comandos ordinarios.

-
12 COMUNICAClON ENTRE SISTEMAS 311
Programas de U t i W d UNIX

Formato
mailx [-opciones] [nombre[@hosr] ...I

Opcwnes
I
-d Hace que la utilidad mailx active la salida de la depuraci6n de mores.

-e Verifica la presencia de correo entrante. Si hay correo para examim, la utilidad


mailx no dice nada, y sale con un c6digo de retorno CoCTecto (exit-status0).

-ffichero Lee el contenido del fichero especificado enfichero en vez del f i c k o de nuestro
buzbn del sistema. Si omitimos el argumentofichero, entomes es lefdo nuestro bu-
z6n personal, el fichero mbox.

-F Registra el mensaje saliente en un fichero especificado despub del primer destinata-


rio. Esta opci6n anula la variable record de la utilidad mailx

-H Suprime la visualizaci6n de las cbs primeras lfneas de la informaci6n contenida en


nuestro correo. S6lo visualiza las lfneas relativas a 10s mensajes.
I -i Ignura la s e w de intmpci6n del terminal.
I
-U Imp& la lectura del fichero de inicializacidn mail%rc del sistema.

-N Suprime la visualizaci6n de todas las lineas informativas de nuestro cmeo entrante.


Esdecir,visualizadirectamente el prompt de la utilidad mailx,que pop defect0 es el
ca&tcr interrogaci6n (2).
-stexto Establece el campo del text0 referente al tema del mensaje (Subject)al texto especi-
ficado en t e a , del mensaje que va a ser enviado.

-uusLUui0 Lee el c o r m del buz6n del sistema del usuario especificadoen usuario, siempre que
el invocante del commund-line maiIx tenga privilegios para leerlo. Esta opci6n es
equivalente a la especificaci6n: mailx -ffichero-buz6n-der-s~temahrsuario.

-V S610 en la versi6n System V. Esta opci6n visualiza el nismero de versi6n de la utili-


dad mailx,saliendo de dicha utilidad

-V S610 en la versi6n Berkeley. Esta opci6n visualiza informaci6n adicional cuando se


envla un mensaje.

Argumentos
nombre i ~ ~mensaje. En nombre puede especificarse uno o va-
Especifica 10s d e S t i ~ t a rdel
rim nombres de login, de alias o de grupo de alias a 10s que se enviaril el mensaje.
Especificada sin argumentos, la utilidad mailx visualiza el m e o del buz6n.

Si el argument0 nombre va seguido de la especificaci6n @host, 10s d e S t i ~ tde ~i~~


10s mensajes s e r h 10s usuarios del ordenador remoto especificado en host, en vez de
10s de nuestro ordenador local.

312 -
12 COMVNICACIONENTRE SISTEMAS
Envfo de mensajes
Si el comando mailx es emitido con el argument0 nombre, la utilidad mailx puede ser utilizada
de dos formas para enviar informaci6n:

Usando el command-fined I x para redireccionar un fichero, y asf enviar el contenido de


dicho fichero al destinatario especificado en el command-fine:

mailx nombre ...<&hero


El nombre puede ser cualquier destinatario como el especificado en “Argumentof y elfi-
chero puede ser un fichero fuente, una carta o cualquier otro fichero en formato texto.
Usando el editor incarporado de la utilidad maIlx para componer y enviar el mensaje:

mailxnombre ...
Al presionar <RETURN>, la utilidad mailx nos pone en modo input propreionando un editor de
linea para componer el mensaje y enviarlo a los destinatarios especificados en nombre. Este
editar permite introducir lineas, per0 presionando <RETU€W> por cada nueva linea incluida. No
podemos cambiar el text0 despueS de presionar <RETUW>, aunque antes de presionarlo pode-
mos modificat el texto de la linea en curso con las tech de re€rocesoy m a d o . Mientras com-
ponemos nuestro mensaje, tambi6n podemos invocar 10s editores altemativos ed o vi para co-
rregirlo. El mensaje es finalizadocon el comando tilde-punto (-.) o presionando <Ctrf-d>.

Mientras estamos compniendo un mensaje con el editm de la utilidad mailx, &ta 1105 permite
introducir comandos de dicha utilidad, los cuales deben ir precedidos del Caracter escape tilde
(-). Con 10s comandos tilde pcxlemos: visualizar el mensaje que estamos amponiendo, invocar
otro editor para corregirlo, modificar 10s campos de encabezamiento del mensaje, etc.

Comandos tilife
Los siguientes son los comandos tilde que permite la utilidad mailx, 10s cuales deben sa emiti-
dos en modo input y al comienzo de UM linea bnica:

-!cmd Ejecuta el comando del shelf especificado en cmd y nos devuelve al editor mailx
-? Visualiza un resumen de los comandos tilde de la utilldad mailx

-. Simula el final de texto del mensaje (EOT).

-_cmd-maik
-;
cmd-muilx
Permite ejecutar el comando mdinario especificado en cd-mailx, cuando en modo
c o d 0 emitimos el comando mailx nombre y estamos componiendo un mensaje
para enviarlo a 10s destinatarios especificados en nombre.

-a Inserta en el mensaje la cadena aut6grafa establecida en la variable interna sign.

-A Inserta en el mensaje la cadena aut6grafa establecida en la variable interna Sign.

-b nombre ...
Agrega los nombres especificados en nombre a la lista de personas que van a recibir
copias ocultas del mensaje (Bcc:).

12 -COMUNXCACION ENTRE SISTEMAS 313


Programus de U t i l W UNIX

-c nombre ...
Agrega 10s nombres especificados en nombre a la lista de personas que van a recibir
capias del mensaje.

-d Agrega el fichero deadletter de nuestro directorio de defecto, al mensaje en curso.

-e Invoca el editor ed, usando el texto del mensaje en curso como entrada. Los fichaos
.profile y .mailrc controlan el editor que sera invocado al emitir este comando.

-f lista-mg
Incluye 10s mensajes del buz6n especificados en la lista de mensajes, lista-msg, en el
mensaje en cuso, el cual es creado cuando estando en modo comando, y desde el
prompt ? emitimos el comando mail nombre. El mensaje es enviado a 10s destinata-
rim especificados en nombre.

-h Visualiza, uno a uno, 10s prompts de 10s cuatro campos del encabezamiento: To:,
Cc:, Bcc:, y Subject:, permitiendonos agregar y modificar la informaci6n de dichos
campos. Presionando cRETCIRN> el campo queda como estaba.

-i caderra: Inserta el valor de la variable especificada en c&na en el texto del mensaje. Por
ejemplo, la especificaci6n -a es equivalente a la especificaci6n -i sign.

-m lista-msg
Igual que el comando -2 except0 que 10s mensajes dados en lkta-msg incluidos en
el mensaje en cuso, son sangrada con un tabulador al comienzo de cada linea.

-P Visualiza el mensaje que se estii a


&, incluyendo 10s campos del encabemdento
que contenga el mensaje.

-9 Sale del editor de la utilidad mailx simulando una intmpci6n. Si el mensaje que se
estA creando tiene contenido, es salvado en el ficherodeadletter, per0 no es enviado.

-< komantio
-<@hero
-rnhero Incluye el contenido del fichero especifkado ennhero o la salida generada por el
comando del shell especificado en cornando, en el mensaje que estamos editando,

-s crrdena Cambia el contenido del campo Subject: par la cadena especificada en cadena.

-tnombre ...
Agrega (no cambia ni borra) 10s destinatarios especificados en nombre, al contenido
del campo To: del mensaje.

-V Invoca al editor vi usando el texto del mensaje en curso como el fichero de entrada.

-wfichero Copia el mensaje en curso en el fichero especificado enfichero.

-X Sale del modo input, como el comando -q, except0 que el mensaje no es salvado en
el fichero deadletter.

- I cmd Pasa el cuerpo del mensaje al comando del shell especificado en cmd como un ffltro.
Si el comando especificado en cmd devuelve un exit-status un-recto, la salida del
comando sustituye a1 mensaje en curso.

314 -
12 COMUMCAClOffENTRE SlSlEMAS
P r o g r . de Utilidad UNIX .

Lectura de mensajes
Para leer los mensajes de nuestro buz6n del sistema, emitir el cornando mailx sin argumentos ni
opciones. La utilidad m a b verifica la existencia de mensajes en el fichero de nuestro buz6n del
sistema (hsr-uario en System V y /usr/spooUmuihww . en Berkeley), y si 10s hay,
nos visualizuii inf<mnac6n similar a la siguiente:

$ mailx
Mail $Revision: 4.2A.2 $ Type ? for help.
U / u s r / s p o o Y m a i ” : 3 mesages 3 new
> N 1 ristemas Wed Jan 25 1215 la324 “Errorencopia”
N2root Fri Jan 25 1459 3254
N 3 sanchez@crayb.ciema Wed Jan 25 1531 20S/S250 “Enviofiiherocontas”
?

La primera linea identifka la versi6n de la utilidad mailx instalada en nuestro sistema, y nos re-
cuerda que podemos obtener ayuda emitiendo el cadcter intemogaci6n (?). La segunda linea
muestra el nombre del path del fichero de nuestro buz6n del sistema, junto con el nfimero total
de mensajes y el de sus estados.

El rest0de la visualizaci6n son Llneas infumativas de cada mensaje e n t r e cuyos campos, de


izquierda a derecha, tiene el siguiente signifkado:

El primer campo contiene un indicador de estado del mensaje. Los posibles indicadores y
estados son los siguientes:
N El mensaje es nuevo, es decir, no est4 Iddo.
M El mensaje fie enviado a nuestro fichero mbux.
P El mensaje est4 retenido en nuestro buz6n del sistema.
R El mensaje ha sido lefdo.
U El meosaje no es nuevo per0 est4 sin leer.
* El mensaje ha sido salvado a un ficherofolder.
> Indica el mensaje en curso,que sera. tratado si no se especifica explfcitamente otro.
Sin indicador, significa que el mensaje h e lefdo per0 no banado ni salvado.

El segundo campo indica el nfimero de mensaje, el cual serii utilizado por los subcomandas
mailx para referemiarlo. A cada mensaje le es asignado un nfimero secuencial, siendo el
dltimo memaje llegado el dtima de la lista.

0 El tercer campo es el identifkador del usuario que nos envia el mensaje. Si el mensaje pro-
viene de otro ordenador de la red, tambib indica el identifkador del host remoto.

Los cuatro campos siguientes son la fecha de recepci6n del mensaje, incluyendo dfa de la
sernana, mes, dia del mes y hara.
El campo siguiente indica el tamafio del mensaje en nhero de lineas y de caracteres.

E1 dltimo campo visualiza un text0 referenre al tema del mensaje (Subject), el mal es in-
cluido apcionalmente en el command-linemailx esped3cando la apci6n -s o en el mensaje
creado con el editor rnailx por el usuario que nos envia el mensaje.

La tlltima Unea (?), es el prompt del buz6a desde el cud podemos emitir c o m d o s ordinarios
de la utilidad mailx para manejar 10s mensajes del buz6n, p a ejemplo: examinar su contenido,
borrarlos del b d n , salvarlas a un fichepo, etc.

I2 -COMUNlCAClON ENTRE SISTEMAS 315


Pmgrumas de U t i W UNIX

La lis& de mensajes, lista-msg


Algunos comandos de la utilidad mailx JIOS permiten especificar un argumento que COW de
UM lista de mensajes, lis&-mg,sobre 10s cuales operarh 10s mmandos del buz6n emitidos
desde el prompt ?. Si un mmando ordinaria espera un mensaje de la lista de mensajes, lists-
mg, y no se le proporciona ninguno, la utilidad mailx ejecuta el mensaje en curso.

UM lista-msg es una Bta de ntimeros de mensaje separados por espacios, per0 cualquiera de las
siguientes especificacionespuede ser usada para el argumentolis&-mg,indicando:
El mensaje en curso.
El Utimo mensaje.
El niimero de mensaje especificadoen n.
Todos 10s mensajes.
El primer mensaje sin borrar.
Un rango de mensajes de n am, ambos inclusive.
Todos 10s mensajes del usuario especilbdo en usuario.
Todos los mensajes que se correspondan con la ~ a d especificada
e ~ en cadenu del
text0 referente al tema del mensaje (Subject:).
Todos 10s mensajes de tip c, donde c puede ser uno de 10s siguientes caractem:
d Mensajesborrados.
n Mensajes nuevos.
o Mensajesantiguos.
r Mensajes lddos.
u Mensajes sin leer.
El context0 del comando deter mi^ si el t i p de especificaci6n de mensaje tiene sentido. Los
siguientes ejemplos nos lo muestran:
? s operator # salvl 10s mensa& del muariotpe~r.

? <RETURN> # V i i d i el contenid0 del mensaje en curso (el marcado con el sign0 >).

?v3 tEditadmeusajen6mwo3con el editor&

? d 1-3 # Borra 10s mensajes 1,2y 3.

?f:n If V i u a l i i las beas inforrmtivas de 10s mensa& nuevas.

Comandos ordinaries
Cuando se est4 procesando el correo de un buz6n, la utilidad mailx se pone en modo cornando,
y es visualizado un prompt con el carktex interrogaci6n (?) para indicar que el programa mailx
est4 esperando entrada. Entonces podemos introducir cualquiera de 10s siguientes comandos or-
dinarios. (La abreviatura del comando est4 entre parhtesis, y puede ser usada en lugar del
nombre completo del comando):
- Devuelve el ntimero del mensaje en curso.

?
help Visualiza un resumen de 10s wmandos del buz6n.

!cmd Ejecuta el comando del shell especificado en cmd y vuelve al prompt del buz6n (?).

316 -
I2 COMUh!lCACXONENTRE SISTEMAS
Prograhas de U W a d UNIX --

...
alias [a&] [nombre I (a)
group [a&] [nombre ...I (g)
Especificando 10s ugumentos a h y nombre mea un alias o un gnrpo de alias. Sin
argumentos visualiza los alias y grupos de alias definidos en curso.

alternates [nombre ...I (alt)


Declara una lista de nombres alternatives para nuestro login. Cuando se respnde a un
mensaje del arm, la utilidad maih no envia copia del mensaje a 10s destinatarios
especificadm en nombre. Sin argumpatos, visualiza los nombres altmativos en curso.

cd [directorio] (cd)
chdir [directorb] (ch)
Nos cambia de nuestro directorio de trabajo al directorio dado en directorio.
copy [lista-mg] where] (c)
Copia 10s mensajes especifrcados en lis&-mg al final del fichero especificado enfi-
chro, sin marcarlm como salvados. Este comando es equivalenteal comando save
copy [ ~ ~ ~ - (C)
mg]
Salva 10smensajes especificados en lista-mg en un fichero cuyo nombre es obtenido
del nombre del autar del mensaje que va a ser salvado, sin rnarcarlos como salvados.

delete [lists-mg] (d)


Bma 10s mensajes especifrcadosen lista-mg cuando salgamos de la utilidad mailx

...
discard [crunpo J (di)
ignore [campo ...I (ig)
Suprime las lineas de encabezamiento de 10s mensajes entrantes, cuyo primer campo
finalice con un sign0 dos puntm (:), cuando son listad~scon 10s comandm print y
type. L a mmandos Print y Type mulanel efecto de 10s comandos lg y di.

dp [lista-m~g]
dt [lista-m~g]
Burra lm mensajes especificados en Zisfa-mg y visualiza el siguiente mensaje.

edit [lista-mg] (e)


Edita 10s mensajes especificados en fib-msg. E l editor de defect0 es el editor e 4 per0
la utilidad mailx usa el editor definido en la variable EDITOR

exit (ex)
xit (x) Salimos de la utilidad mailx y volvemos al prompt del shell, sin tener efecto los cam-
bios hechos a los mensajes durante la sesi6n mailx en curso. Por supuesto, los mensa-
jes leidos no son salvados en el fichero mbox.

file whero] (fi)


folder @chero] (fold)
Visualiza el buzbn del fichero especificado enfichero. La utilidad mailx reconwe los
siguientes caracmes especiales para referenciar nombres deficiiero:
% Indica el fichero del buz6n del sistema en curso.
# Indica el Echero previo.
& Indica el fichero de nuestro buz6n personal (mbox).
+fichu0 Dondefichero indica uno de los ficheros incluidos en nuestro directo-
rio defolders, si &e est6 establecido en la variable interna folder.

-
12 COMUNICACIONENTRE SISTEMAS 317
Programus de Utitidad UNIX

folders Visualiza 10s nombres de losficherosfo!der contenidos en el directorio defoZders es-


tablecido en la variable folder.

followup [mensaje] (fo)


Responde al mensaje especificado en memaje, grabando la respuesta en un fichero
cuyo nombre es derivado del nombre del autor del mensaje.

[fhta-m~g](F)
FO~~OWUP
Responde al primer mensaje de 10s especificados en la lista de mensajes, fis&-mg,
enviando el mensaje al autor de cada mensaje de la fista-mg.

from [Zista-mg] (f )
S610 visualiza las keas infmmativas de los mensajes especificados en fista-mg.

headers [memaje] (h)


Visualiza la pantalla del grupo de lfneas infmmativas de 10s mensajes en la que est5
incluido el mensaje especificado en mensaje. Por defecto, cada pantaUa de xuensajes
contiene 20. El nttmero de mensajes por pantalla puede cambiarse con la variable in-
terns screen. El comando z se usa para avanzar o n!€~& pantallas de memajes.

hold [fhta-mg] (ho)


preserve [Zista-mg] @re)
Los mensajes especificados en fish-mg que fueron leldos son conservados en el fi-
chero de nuestro buzbn del sistema, en v e de
~ ser salvados al fichero mbox.

if condicidn slr
else
endif Especifica la construcci6n condicional de 10s comandos del correa Los comandos que
siguen a la sentencia if son ejecutadtx si la condici6n es verdad, y 10s comandos que
siguen a la sentencia eke son ejecutados si la condici6n no es verdad La condicidn
puede ser: enviar (s) o recibir (r).

list (I) Visualiza una lista,sin descripci6n, de 10s comandos ordinarios villidos.

mail [nombre ...I (m)


Activa el editor integrado de la utilidad mailx (nos pone en modo input), para crear el
mensaje y enviarlo a 10s destinatarios especficados en nombre.

mbox [lista-mg] (mb)


Indica que los mensajes especificados en fhta-mg van a ser enviados a nuestro buz6n
personal, el fichero mbox, cuando salgamos del entorno mailx. Este es el defecto.

more [f&ta-mg] (mo)


S610 en la versi6n Berkeley. Usa el programa more en la visualizaci6n de 10s mensa-
jes especificados en la lista de mensajes, fhta-mg.

next (memaje] (n)


Visualiza el mensaje especificado en mensaje. Si no se especifica un nfimero de men-
saje, es visualizado el siguiente mensaje al del mensaje en curso.

page [lhta-mgl @a)


S610 en la versi6n Berkeley. Usa la utilidad page para visualizar los mensajes especi-
ficados en la lista de mensajes, fista-mg. Semejante al subcomando more.

318 -
I 2 COMUNlCAClONENTRE SISTEMAS
Progrttirtas de U t i l W UNIX. -.1

pipe [lis&-msg][cmd-shea (pi)


I [lhta-mgl Ecmd-shelq
Pasa la informaci6n de 10s mensajes especificados en lista-msg al comando del shell
especificado en cmd-shell. Sin argumentos, el mensaje en curso es pasado al wmando
espedficado en la variable interna cmd. Si la variable interna page esta establecida, es
insertado un &ckr salt0 de pagina despueS de cada mensaje.

print [lista-mg] (p)


type [lis&-mgl (t)
Visualiza 10s mensajes especificados en la lista de mensajes, ZhtWnsg. Si no se espe-
cifica un nslmero de mensaje, la utilidad mailx visualiza el mensaje en curso, lo que es
equivalente a presionar simplemente la tecla < R m > .

Print [Zista-mg] (P)


Type [fita-mgl cr)
Visualiza 10s mensajes especificados en lis&-msg,incluyendo las lineas cuyos campos
de encabe.zamientohayan sido ignorados con 10s comandos discard o ignore.

quit (q) Finaliza la sesi6n mailx y vuelve al prompt del shell. Todos 10s mensajes que heron
lefdos y no heron borrados ni salvados, son guardadm en nuestro buz6n personal, el
fichero &ox. Los mensajes explkitamente salvados a otro fichero son borrados.

reply [mensaje] (r)


respond [mensaje] (r)
Nos pone en modo input para mntestar al emisor del mensaje especifcado en mensaje
y a 10s usuarim que recibieron copia.

Reply [lista-msg] (R)


Respond [lis&-msg](R)
Envfa una respuesta al autor de cada mensaje especificado en la lista de mensajes, lis-
ta-mg. El text0 del campo Subject: es tomado del primer mensaje.

save [fita-mg]fihero (s)


Salva 10s mensajes especificados en la Iista de mensajes, lirta-mg, en el fichero ape-
cificado enfichero. Si no es especificado nin@n mensaje, es salvado el mensaje en
curso. Si el fichero especificado enfichero no existe, el fichero es creado. Si el fichero
existe, 10s mensajes son agregados al final del contenido del fichero.

Save [lhta-mg] (S)


Salva 10s mensajes especifkados en la lista de mensajes, lista-mg, a un fichero cuyo
nombre es obtenido del nombre del autor del primer mensaje de la lista de mensajes.
El comando Save es equivalente al comando Copy.

set [variable ...I (se)


set [variabkwdor] (se)
Define la variable especificada en variable, o la asigna un valor especficado en valor.
El valor &do en vdor puede ser nulo, num&ico o una cadena de caracteres. EspeciE-
cado, sin arpentos, el comando set visualiza las variables definidas en curso.

shell (sh) Invoca un shell interactivo.

size [lkta-mg] (SO


Visualiza el tamaflo en lineas y caracteres de 10s mensajes especificados en lis&-msg.

-
12 COMUNICACION ENTRE SISTEMAS 319
Programas de Utilidad UNIX

source@heru (so)
Ejecuta los comandos mailx contenidos en el fichero especificadoenfiehero.

top [lists-mg] (to)


Visualiza las 5 primeras lheas de 10s mensajes especificados en la lista de mensajes,
&fa-msg. El n~merode lfneas visualizadas es determinado por la variable toplines de
la utilidad maik

touch [fifa-mg] (to@


Marca los mensajes especificados en la lista de mensajes, fikta-mg, como que van a
ser salvados a nuestro fichero $HOMEcmbor al finalizar la sesi6n mailx, aunque 10s
mensajes especificados no hayan sido lefdos. Los mensajes aparecen en nuestro buz6n
personal como no lefdos.

undelete [fikfa-mg](u)
Restaura 10s mensajes especificados en la lista de mensajes, fista-msg, que fueron bo-
rrados durante la sesi6n mailx en curso. Si el comando undelete es emitido sin men-
sajes, recupera el tiltimo mensaje borrado.

unset [variable ..I (uns)


Barra los valores de las variables internas especificadasen variable.

version (ve)
Visualiza el dmero de la versi6n en curso de la utilidad mailx.

visual [lislkz-mg] (v)


Edits los mensajes especii3cados en la lis& de mensajes, lista-mg, con el editor vi.
Este editor puede ser definido con la sentencia set VISUAL=. Los cambios hechos du-
rante una sesi6n de edici6n son salvados al salir del editor.

write [fistkz-mg]fiehero (w)


Agrega los mensajes especillcados en lista-msg al fichero especificado en fiehero,
menos el encabezamiento y las lfneas blancas. Cuando finaliza la copia es visualizado
el tamaao y el nombre de fichero.

z[+][-] Visualiza la pantalla del p p o de mensajes @or defecto 20 mensajes) del siguiente
+.
grupo si el comando z es emitido sin argumentos o con el argumento Si se especifi-
ca el argumento -,es mostrada la pantalla previa del grupo de mensajes.

Entomo mailx
El adminismador del sistema usa el fichero/usrM/maiLr/maifx.rcen la versi6n System V, y el
fichero /usr/liW/Mail.rc en la versi6n Berkeley, para definir la contiguraci6n inicial de la utili-
dad mailx Los comandos mailx incluidos en este fichero anulan las caracteriSticas de defecto
de la utilidad mailx para t& 10s usuarios del sistema. Aunque la configuraci6n inicial puede
satisfacer las necesidades de muchos usuarios, esta contiguraci6n puede ser alter& creando en
nuestro directorio de defecto el fichero .mailrc (ver "Fichero.miZrc", p i i g i ~324).
Los comandos mailx incluidos en el fichero $HOMH.mifrc, son como 10s del fichero del sis-
tema, anulan las caracteristicas de la utilidad mailx cuando la ejecutamos. Los siguientes co-
mandos mdlx no son vaidos en el fichero $HOMH.mifrc: !, Copy, edit, followup, Followup,
hold, mail, preserve, reply, Reply, shell y visual.

320 -
I 2 COMUNICACION ENTRE SIS'lEMAS
Progrdifnasde Utilidad UNIX -*

Variables internas
La utilidad mailx dispone de variables internas u apciones, las cuales W i C n pueden ser in-
cluidas en nuestro fichero $HOMEc.muilkc, para personalizar las caractedsticas del programa
mailx cuando &e sea ejecutado.
Tanto 10s subcomandos como las variables internas de la utilidad mailx estabIecidos en nuestro
fichero de entorno, .maifkc, toman precedencia sobre 10s establecidos en el fichero de manque
del sistema ( M d r c y m u i k r c ) .
A algunas de las vanubles internas se las puede asignar un valor especffico cuando las estable-
cemos, a Was basta con definirlas. Estas variables son activadas con el comando set y desacti-
vadas con el comando unset. Estos comandos tienen 10s siguientes formatm:

Las siguientes son las variubles internas que podemos especificar en v&k e incluirlas en las
lineas de nuestro fichero$HOMH.mailrc con el cornando set

allnet Trata todos 10s nombres de la red que tengan el mismo nombre de login como si fue-
sen el mismo. Par defecto est6 desactivada.
append Hace que 10s wnsajes salvados en el fichero mbox sean agregados al final del fichero,
en vez de al principio. El defecto es noappend

asksub
ask Visualiza el prumpt SubjecZ: para introducir el text0 referente al t e a del mensaje si
&e no es especificado en el command-fineusando la w i 6 n -s. Por defecto esta va-
riable est6 activada.

askbcc Visualiza el prompt BCC:para introducir la direcci6n de las parsonas que van a recibir
copias ocultas del mensaje. EI defecto es noaskbcc.

askcc Visualiza el prompt Cc: para introducir la direcci6n de 10s usuan',osque van a recibir
copias extras del mensaje saliente. El defect0 es noaskcc

autoprint
Activa la visualizaci6n autodtica de mensajes despuh de la emisi6n de 10s coman-
dos delete y undelete. El defecto es noautoprint.

cmd=programa
Establece la utilidad de defecto, especificada en programa, para el comando pipe. No
tiene valor de defecto.

crt=nrimero
Hace que el programa visualizador de paginas sea invucado en 10s mensajes que tie-
nen mAs lineas que las especificadas en mhero. Por defecto estA desactivada.

dot Hace que la utilidad mailx interprete un carActm punto (.) tecleado al comienzo de una
linea ~Inicacorn0 un car6cter end-offile (EO") para finalizar el mensaje que estamos
componiendo. El defecto es nodot.

I2 -COMUNICACION ENTRE SISTEMAS 321


Programas de Utilidad UNIX

DEADsfichero
Especiiica el fichero en el cual van a ser salvados 10s mensajes salientes parciales en
cas0 de intmpciones o de mores iqortunos. El defecto es $HOMHdedktter.

EDITOR=e&or
Define el editor que va sex ejecutado cuando se invocan 10s subcomandos -e y edit E9
editor de defecto es el e d

escape=cm&i?r
Sustimye el car&Am escape especificado en car&ter por el carficter escape tilde (-).
El defecto es el carktex tilde (-).

folder=fZirectoriO
Define el path del directurio en el que van a residir losficherosfulder en 10s que van a
ser salvados 10s mensajes de 10s buzones. Si el directurio comienza con un cadcter /,
la utilidad mailx entie& que es un nombre de path absoluto; de otra forma entiende
que el directoriocuelga de nuestro directdo de trabajo. Esta variable no tiene defecto.

header Activa el modo visualizaci6npara todas las lineas del buz6n cuando emitimos la utili-
dad mailx. Pur defecto est4 activada.

hoid Conserva 10s mensajes lefdos de nuestro buz6n del sistema, en vez de salvarlos al fi-
chero d u x . El defecto es nohold
ignore Hace que la utilidad mdlx ignore las intmpciones en el terminal mientras c
ow
nemm un mensaje. *Eldefecto es noignore.

ignoreeof
durante la .entradadel mensaje, por lo que el mea-
Ignora el car6ct.t~e d - o f j i k ('EO")
-.
sa@ debera ser finalhado con el subcornando o con un carilcttx punt0 emitido en
una linea ~Wcasi est4 establecida la variable dot. El defecto es noignoreeot

keep Consarva el fichero del buz6n a cero bytes cuando son barrados todos 10s mensajes, en
vez de barrar el fichero. Por defecto est& desactivada.
keepsave Mantiene en nuestro buz6n 10s mensajes que han sido salvados a otros ficherm, en
vez de borrarlos. Par defecto es nokeepsave.

LisTER=iprogranza
Especifica la utilidad que va a ser usada cuando se liste el contenido del directorio es-
pecificado en la variable folder. El defecto es la utilidad Is.

MAILRC+hero
Especifka el nombre de nuestro fichero de manque para la utilidad maik El defecto
es $HOMH.mdrc.
MBOX=fiehero
Especifica el fichero en el cual se van a salvar 10s mensajes de nuestro buz6n del sis-
tema, que fueron leidos y no borrados, cuando salgamos del entorno mailx.El s u b
mando exit anula esta variable. El defecto es $HOMHcmbox.

metoo Si nuestro login aparece en un destinatario, evita su borrado de la lista de destinatarios.


El defecto es nometoo.

322 -
12 COMWNICACIONENTRE S I S E M A S
PtOgrQinas de Utilidad UNIX I :t,

outfolder
Localiza 10s ficheros usados para registrar 10s mensajes salientes en el directorio espe-
cifxado en la variable folder, a no ser que el nombre del directorio sea un path abso-
Zuto. El defecto es nooutfolder.

page Inserta un salt0 de p@na &put% de cada mensaje enviado a traves de un pipe con el
comando pipe El defecto es nopage.

PAGERq?rogra.rna
Especifica el nombre del programa filtro que va a sa usado en la visualizaci6n de 10s
mensajes si la variable crt estA establecida. Por defecto es usada la utilidad pg.

prompt=cadena
Establece el prompt del modo comando a la cadena especificada en c a m . El defecto
es el cadcter intmogaci6n (?).
quiet Suprime la visualizaci6n de la linea informativa de la versi6n del programa mailx (la
primera linea) del contenido del buz6n cuando emitimos un comando mailx sin are-
mentos. El defixto es noquiet.

record9chei-o
Especifica el path del fichero que va a ser usado para registrar el corm sdiente. En el
fichero especificado enfichero sex6 salvada una copia de cada mensaje enviado. Si en
f x k o se especifica un directorio, &te debe existir. Por defecto est4 desactivada.

save Establece el salvado de mensajes en el fichero dead-kfteren interrupciones y mores


de salida. Par defect0 est& activada.

screenalimero
Establece el ntlmero de lineas de mensajes que van a ser visualizadas a un mismo
tiempo en una pantalla, al mhero especificado en nlimero. El defecto es 20 mensajes.

sendmaikcomundo
EspeciFrca u11 cornando del shell d m v o para la expedicidn de memajes.
showto Visualiza el nombre del destinatario, en vez del nombre del autor, cuaodo visualiza-
mos 10s mensajes del buzdn y el mensaje es nuestro.

sign=cadena
Inserta la cadena especificada en cadena en el mensaje que estamos componiendo si
emitimos el comando tilde -a Esta variable no tiene valor de defecto.

Signxadena
Inserta la signatura especifkada en cadena cuando estamos componiendo el mensaje y
emitimos el comando tilde -A. Esta variable no tiene valor de defecto.

toplines=nlimero
Especifica el nsimero de lineas de encabezamiento del mensaje entrante que van a ser
visualizadas con el subcornando top. El defecto es 5 Mneas.

VISUAL=editor
Especifica el editor que va a ser usado por 10s subcomandos visual y -v. El defecto es
el editor vi.

- ENTRE SXSTEMAS
12 COMVffXCACXOff 323
Programas de U W a d UNIX

Fichero .mailkc
El siguiente es un ejemplo de fichero .mm*i?c,en el cual se incluyen algunos de 10s subman-
dos y variables internas m h usados de la utilidad m a k , para que cuando &ta sea ejecutada se
pesonalice nuestro entorno mailx:

$icat .&c
# Fichero .ntailrc
set prompk’mailx: ‘
# El mensaje entrante p e d e ser fmalizado con UII signo punto.
set dot
# Agrega d mensaje d fmal del eonknido del fichero mobax.
set append
# Cada mensaje saliente cs rcgistrado en cl fichero corn-saliente.
set record=’$HOMWcorreo~salicnte’
# Suprime lineas de 10s campos del encaberamiento del mensaje cntrante.
ignore To Subject Cc Bce From Date
# Los mensajes am r d s de 22 lineas son listados con la utilidad more
set -22
PAGER=’lusfiimrc’
# h e r t a una signa- en d test0 del mensaje si se emite el comando -a.
set s i r - ’ ra-aaJrpl
# En ci dirrdoriocorreo residir6nlosficheras folder.
ifr
cd $ H O M W ~
endif
set folder=‘$HOMWcomeo’
rliasiuaria lope.z@inQ
aliaspaco sala@crayb
aliastoni operl
rliasalicia eonde
rliaspepe camire2
rliasromon rgarCia@fmc
group opemcion maria paco toni diia
group cxpIotacion opemcion pepe ramon

Como vemos, la utilidad mailx pamite incluir en nuestro fichero .mailre lfneas de comentarios
comenzando con el carilcter nfimero (#). Ob&vese, que 10s valores de cadena de las variables
van encerrados entre caractem ap6strofos (‘).
Si envia- correo con fiemencia a un mismo grupo de usuarios, podemos crear alias y grupos
de alias y usarlos como direcciones de 10s destinatarios, evitando escribir una direcci6n por ca-
da usuario. Un alias es un nombre que definimos con el comando alias y le asociamos con la
direcci6n de un usuario Bnico. Un grupo de alias es un nombre que definimos con el comando
group y le asociamos con miiltiples alias y/o grupos de alias.

Cuando leemos un mensaje, visualizamos un encabezamiento, el cual puede variar de un or&-


nador a otro. Las lfueas de encabezamiento cuyo primer campo finalice con el car6cter dos
puntos (:), como To:, Subject:, From:, Dare:, e&., pueden ser suprimidas, inchyendo en nuestro
fichero.mailrc el comando ignore o discard con 10s campos cuyas lineas queremos suprimir.
Observemos que 10s campos son especificados sin el signo dos puntos (:).

UM forma f4cil y organizada de conservar nuestros mensajes entrantes es definiendo un directo-


rio con la variable folder. Entonces podemos salvar grupos de mensajes en ficheros que residi-
rib en el directorio establecido. El directorio debe existir antes de definirlo, ya que la utilidad
mailx permite aear ficheros per0 no directories.

Par supuesto, las variables y comandos que pueden ser definidos en el fichero .mailrc, tambien
pueden ser especificados en modo comando durante UM sesi6n mailx

324 -
I2 COMVNlCACIoNENTRE S l S W M
Notas
El sistema UNIX dispone de la utilidad mail, similar a la utilidad mailx, aunque menos com-
pleta que &ta, tambien es usada para el envio y recepci6n de mensajes, per0 entre usuarios de
un mismo ordenadac. Otro comando 6til en entornos mailx es la utilidad from, usada para vi-
sualizar las cabeceras de 10s mensajes del b d n del curreo electr6nico.

El usuario tambien puede disponer de otro fichero de entorno, el fichero $HOMH.forwurd. En


este fichero podemas incluir direcciones de la forma login@hostwaradas con comas, o incluir
cada direcci6n en una lfnea M c a , para reenviar mensajes a usuarios de otros hosts. Por ejemplo,
.
si un usuario tiene un fichero fommd con el siguiente contenido:

$ cat .fommd
ramirezQinf2
luis@crayb

Cada vez que ese usuafio reciba un mensaje (de otra persona o de si mismo) Sera reenviado a los
usuarios ramirez y luis de 10s hosts infz y crayb, respectivamente.
El sistema UNlX de la versi6n Berkeley dispone de utilidades complementarias, como fmt, biff
y vacation, para mejorar las prestaciones del correo. Por ejemplo, la utilidad fmt cuyo formato
es el siguiente, es usualmente utilizada para fixmatear el text0 de un mensaje:

fmt -numbytesfihero ...


LA utilidad fmt lee el contenid0de uno o varios fichem de texto, o entradas del standard-input
si no se especifica ningtln fichero, juntando y dividiendo lfneas para visualizar en el standard-
output una salida cuyas lfneas tendc4.n el tamaflo especificado en la opci6n -numbytes. Por de
fecto, la utilidad fmt formatea lineas a 72 bytes.

La utilidad biff nos comunica en el acto la llegada de un nuevo mensaje, visualiAndonos las
siete primeras lfneas del mensaje recibido. Para activar la utilidad biff emitir el comando biff y,
y para desactivarla emitir el comando biff n. Si la utilidad biff nos fuese muy necesaria, puede
sa establecida en nuestrm ficheros .profice o .login.

1
La utilidad vacation puede semos 6til en entornos mailx en determi~dasocasiones, la cud se
utiliza para devolver un mensaje a 10s usuarios que nos endan correo cuando estamos de vaca-
ciones, comuniCandoles que estamos ausentes. Normalmente, el comando vacation es invocado
en nuestro fichero.forward, en el cual incluiremos la siguiente lfnea:
\ u s w i o , "ivacation uswuio"

Donde usuario es nuestro nombre de usuario. Esta declaraci6n hace que el cmeo recibido sea
pasado a l comando vacation, el cual lee el mensaje y determina el emisor para enviarle una res-
puesta: el mensaje de defect0 del sistema, ubicado en el directorio /usr.share/libhrc&rrtioadef.
Antes de madificar el fichero.fommd, debemos emitir el siguiente command-line:

I vacation -I

El cud inicializa nuestro usuario y 10s ficheros $HOME.vuc&n.pag y $HOMH.vac&ndir,


donde son guardados 10s usuarios que reclbir4.n el mensaje. Si queremos enviar un mensaje dis-
tinto al de defect0 del sistema, a 10s usuarios que nos envfen mensajes cuando estamos ausentes,
crear el fichero $HOMH.vacatioamg e incluir en f9nuestro mensaje personal.

-
I2 COMUffICAClOffENTRE SISTEMAS 325
Programas de U t i W UNIX

Ejemplos
En el siguiente ejemplo el usuario luis del host cruyb envfa un mensaje al usuario rumirez del
host darp. Al emitir el command-line mailx, el sistema le pone en modo input y le visualiza el
prompt Subject:, para que introduzca un resumen de lo que trata el mnsaje. Seguidamente ts
-.
clea el texto deseado, y lo finaliza con el comando (tilde punto). Al teclear <RETURN> el
sistema responde con un e n d - o f t a (EO") y con el prompt del sistema:

$ mailxramirez@daxp
Subject: Prueba envio mensaje.
El c o d o ntaiLr envb mensqes a usuariosde la red
Los usuarios reciben el como en un buzdn (mailbox)
(unficliero que asigna el sistema a coda us&).
-.
EOT
$

La inclusi6n de un texto para resumir el tema del mensaje (Subject:) es opcional, si decidimos
no incluirlo, presionar ~RETuRN>,entonces el cursor se traslada a la siguiente linea para intra-
duck el text0 del mensaje. El texto sobre el tema del mnsaje puede ser incluido en el
command-line mailx especificando la opci6n -s. Por ejemplo, el siguiente command-line:

$ mailx -s ''Prueba envfo mensaje.*' ramirez@daxp

Es equivalente a la siguiente especficaci6n:

$ mailxramirez@daxp
Subject:Prueba envih mensaje.

Para lear el m,el usuario ramirez simplemente emite el comando maih sin argumentos, vi-
sualizando el contenido de su buz6n del sistema. Despub lee el mnsaje ntimero 2 emitiendo el
subcomando p, visualizando la siguiente informaci6n:

$ mailx
Ma3 $Revision: 42.43 $ Type ? for help.
u/usr/spooYmaWramircrz": 2 messages 2 new
> N 1 mot Thu Mar 2 0601 49/2475
N 2 luis@crayb.aemat.cs Thu Mar 2 1051 21/921 "Pruebaenviomensaje."
?p2
Message 2
From luk@crayb.aemat.csThu Mar 2 1637:15 2000
Date: Thu,02 Mar 2000 15:37:42 +0000 (CMT)
From: PEREZ GARCIA duis@crayb.ciemates>
Subject: Prueba envio mensaje.
To: ramirez@daxp.aemates
Content-transfer-endig 7BIT

El comando maih envia mensajes a usuariosde la red.


Los usuarios reciben el correo en un b u h (mailbox)
(un fichero que asigna el sistema a cada usuario).

?d12
?X
$

DespueS de leer el mensaje ncmero 2, decide barrar 10s dos mensajes de su b d n , per0 sale con
el subcomando x, por lo que 10s mensajes son conservados en el buz6n.

326 -
12 COMUNICACIONENTRE SISTEMAS
El siguiente ejemplo muestra como inccorporar un fichero al mensaje que estamos creando, en-
vihdoselo al usuario especificadoen usuario:

$ maiixusuario
Subject:Envhfihero.
Hok Pepe, te en& elprogranta que me &jkte.
Espero que te valga, a mi me funcwnd bicn.
Saludos.

-r proomas/n&.c
"progrWnod0s.c'' 26/1000
-V
...
...
(continue)
-.
EOT

Observemos que despub de emitir el comando -r, la utilidad mailx nos visualiza el nombre y el
tamafio del fichero. Antes de enviar el mensaje lo editamos con el comando -v para revisar su
contenido. Despub de editatlo, la utilidad d l x nos visualiza la cadena (continue) iradicando
que podemos continuar introduciendo m& texto, o salir del mensaje.
Supongamos, que el usuario rmirez tiene establecido el fichero $HOME%maiCrcejemplo de la
pAgina 324. En un momento dado examina su buZn y visualiza el siguiende contenido. DespueS
de leer el mensaje nthxo 3, decide enviar un mensaje al destinatafio operucion:

$d l x
Mail $Revision: 43A.2 $ Type 1 for hdp.
U / u s r / s p o o V m 4~ messages
~ 4 new
> N 1 root Thu Mar 2 0601 4912475
N 2 luis@crayb.aemt..cs Tbu Mar 2 10:3 2 1ml "Eovioprograma."
N 3 cxploper Fri Mar 3 0859 4/304 uReuniijntrimestroln
N 4 root@inftaernat.es Fri Mar 4 W 3 1 lOslsZs0
rnailx: 3

...
maik moperacion
Subject:Metanto reunibn.
La reunidn previsb para el dia 21 se a d e h t a al
d& 14a las 10:30 bras. Ordenes son 6rdenes.
Te endo el mensaje que me r e d d el Jefe.
-a
ramirez0dhp
-f 3
Interpoiating: 3
(continue)
.
EOT
maik x
$

Observemos que el usuario rmirez, incluye en su mensaje la signatura que tiene definida en su
fichero .mailkc, y despueS incluye el mensaje nfimero 3 de su buz6n. El mensaje lo recibirh las
personas que c o q n e n el destinatario operucion, ya que en su fichero.mailrc tiene definido un
gmpo alias con ese nombre.

12 -COMUNlCAClON ENTRE SISTEMAS 327


Programas de Utilidad UNIX

En la siguiente sesi6n mailx, el usuario rumirez examina su correo con la apci6n -H (suprime
las dos primeras lineas informativas del b d n ) , y despuh lee todos 10s mensajes del but514
controlando la visualizaci6n (variables inteams crt y PAGER). El comando R le pone en modo
input para teclear el text0 del mensaje my0 destinatario sera el usuario que envi6 el mensaje
(conde). Seguidamente, el usuario ramirez salva 10s mensajes 1 y 4 al folder results. Antes de
dejar el entorno mailx,lista el contenido del directorio de folders (correo), y Iinalmente sale
con el mmando quit, ocasionando que en su buz6n del sistema no quede ningiin mensaje:
$ mailx -H
>N 1 root Tbu Mar 2 e 0 1 49/2475
N 2 luis@crayb.aemat.es Thu Mar 2 1051 110/5921 "Envioprogranta."
N 3 exploper Fri Mar 3 O S 5 9 13449 "Reuni6ntrimestral"
N 4 root@inFLaemat.cs Fri Mar 4 W31 105/5250
N 5 conde MonMar 6 1505 12/377 ''Errorbackup"
mailx:p*
...
maikR5
To: conde
Subject: Re:Error backup.

Ya k corregido el error, espero que &ra funcwne.


GrachAlicia Saldos:
-- P e p -
-.
EOT
maik s 1 4 resuk
**results"[New file] 215111171
ma& folders
results
maik q
Saved 3 messages i n / u s r / u s e r s / r a ~
$

Supongarnos que diariamente recibimos un gran nfimero de mensajes y queremos conservarlos


durante al@n tiempo, por ejemplo un mes. El siguiente script, sdw-correo, salva 10s mensajes
de nuestro buz6n del sistema al fichero maiIxx, donde xx es el &a del mes en el que se ejecuta
el script, siempre que sea ejecutado peri6dicamente a una hora dek~minada,lo cud puede ha-
cerse incluyhdolo en nuestro fichero cron (ver "Utilidadcrontab", p@na 220):

$ cat s&a-correo
#!lbiih
# scripk sal--correo -
Sal- peri6dicarnent.enuestro correo.
dia='date '+%d"
cp lusr/spd/maiYurumio $HOMWmail$dia
cat > control-correo << MIF
d*
Q
EOF
maih < control-correo
rm control-wrreo
echo "*** EGtm mensajes quedan ubicados en el fichero $HOMWmail$dia ***"

Este script hncionarfi mectamente, si tenemos en cuenta el path del ftchero del bu6n del
sistema, segiin la versi6n del sistema UNM (System V o Berkeley) y si en usuario ponemos
nuestro nombre de login. Cuando queramos examinar el buz6n de un dia &aminado, s610 ten-
dremos que emitir el siguiente command-line,siendo dd el dia del mes que queremos examinar:

$ mailx -f maim

328 -
12 COMUNICACIONENTRE SISTEMAS
Programas de Utilidad UNIX .,+ , I

Utilidad ping
Descripcih
La utilidad ping envfa paquetes ECH0,REQUEST del protocolo ICMP (Internet control message
protocol) a 106hosts de la red para extrafx un datagrama ECHOfZESPONSE del protocolo ICMP
de un host o pusarela especificado. Los datagramas ECHO-REQUEST (tambien llamados pings)
tienen una direcci6n IP (Internet Protocol) y una cabecera I W , seguidos de una estructura de
valores de tiempo y de un m5mero arbitrario de bytes, usados par,,complementar el paquete.

El programa ping esta pensado para ser usado en d i s i s , mediciones y manejo de la red. Para
no sobrecargar la red se aconseja que s610 sea usado para localizar incidencias manuales.

Fonnato
ping [-opciones] host

Opcwnes
-c ntimero Finalha la ejecuci6n despu& de enviar (y recibir) 10s paquetes ECH0,RESPONSE
especificados en ndmro.

-d Establece la qzi6r.1de depuraci6nSO-DEBUG en el socket que se est4 utilizando.

-f Sobrecarga la utilidad ping. Los paquetes son listados tan pronto mmo llegan, a
100 veces por segundo, lncluso a d s . Par cada ECHO-REQWT enviado es im-
pres0 un sign0 punto; en &io, por cada ECHOJEPLY recibido es usado un ca-
r k k r de retroceso. S610 un usuario superuser puede usar s
ta apci6n.

-i espera Espera el nfimero de segundos especificado en espera, entre el endo de cada pa-
quete. El defect0 es l segundo. Esta opci6n es incompatible con la opci6n -€

-1precaqa Envfa el nfimero de paquetes especificado enprecargcr, tan pronto como sea posi-
ble, antes de adquirk su modo normal de funcionamiento. S610 un usuario supem-
ser puede usar esta opcibn.
-n S610 especifica salida num&ica. No se har6 nin@n intento para examinar nombres
simb6licos de la direai6n del host.
-pphntilla Completa 10s paquetes con 10s bytes especificados enplantilla. Se pueden especifi-
car hasta 16 bytes para rellenar el paquete a enviar. Est0 es dtil para diagnosticar
problemas de dependencia de datos de una red. Por ejemplo, la espificaci6n -p ff
harA que el paquete enviado sea rellenado a unos (1).

-¶ Los datagramas de lo6 paquetes no son visualizados. S610 son visualizadas la pri-
mera linea y las lineas de las estadisticas.

-r Ignora las tablas de ruta normales y envfa petidones a w host conectado directa-
mente a una red. Si el host no esttl directamente conectado a una red, es dewelto
un mar.Esta opci6n puede sa usada para enviar pings al host local a travb de una
interface que no tiene establecida una ruta.

12 -COMUNICACYON ENTRE SISTEMAS 329


Promamas de U t i W UNIX

-R Registra la ruta. Incluye la opci6n RECORD-ROUTE del paquete ECHO-REQUE!3T


y visualiza el bufler de la ruta de 10s paquetes deweltos. La cabecera IP s610 tiene
capacidad para visualizar nueve rutas.

-spaqueie Especifica el n 6 m o de bytes de datos que van a ser enviados. El defecto es 56,los
cuales se convierten en 64 bytes de datos ICMP cuando se combinan con 10s 8
bytes de 10s dam de la cabecga ICMP.

-v Activa la salida en modo vaboso. Lista 10s paquetes ICMP en vez de 10s datagra-
mas ECHO-RESPONSE que son recibidos.

Argumentos
host Es el equipo de la red al que la utilidad ping va a enviar paquetes ECHO-REQUEST
del protomlo ICMP. En el argument0 host puede especifrcarse un nombre o una di-
recci6n IP.

Notas
Cuando la utilidad ping se usa para localizar ixidencias, primer0 s e d ejecutada en el host local
para verificar que la interface de la red est4 activa y en ejecuci6n. Despub, la utilidad ping se
ejecuta en 10s hosts y pasareh remat.06. La utilidad ping envfa un datagrama por segundo e
imprime UM Unea de salida por cada datagrama ECHOJUESPONSE dewelto. Si no hay res-
puesta no es producida ninguna salida. Los tie- de redondeo y las estadfsticas de 10s pa-
quetes per&& son computados. Cuando un mSmero de paguetes espxiticado es enviado (y r e
cibido), o cuando el programa es terminado con un caraCter SIGINT (<Ctrl-o), la utilidad ping
visualiza un breve resumen.

DetaUes del paquete ICMP


Una cabecera IP sin opciones tiene 20 bytes. Un paquete ECHO-REQUEST del protocolo ICMP
contiene un valor adicional de 8 bytes de la cabecera ICMP, seguido de una cantidad arbitraria
de datos. Cuando es dado un t a W o de paquete, &e indica el t a a o del paquete de datos adi-
cional; el defecto es 56 bytes.

Asi, la cantidad de data recibida dentro de un paquete adicional de tip0 ECHOJUQUEST,


siempre sera de 8 bytes mAs el espacio de datos requerido (la cabecera ICMP). Si el tamaiio de
10s datos es al menos de 8 bytes, el programa ping usa 10s primeros 8 bytes de ese espacio para
incluir un marcador de tiempo, el cual es usado en la computaci6n de 10s tiempos de redondeo.
Si son especificados menos de 8 bytes de relleno, no es dado ningtin tiempo de redondeo.

Paquetes duplicados y daiiados


La utilidad ping visualiza 10s paquetes duplicados y daiiados. LQS paquetes duplicados nunca
debexfan producirse, y parece ser que son causados por transmisiones de niveles inapropiados.
Los paquetes duplicados pueden produckse en muchas situaciones, y raramente son una buena
sew, aunque la presencia de un nivel bajo de duplicaciones no debe ser siempre causa de alar-
ma. Los paquetes dafiados son obviamente un motivo de alarma, y frecuentemente indican algtin
componente hardware interrumpido en la ruta de 10s paquetes ping (en la red o en 10s hosts).

330 12 -COMUffICACION EffTRESISlEMAS


Progqmas de Utilidad UNIX .L

Ejemplos
El siguiente comando ping envfa 4 paquaes ECHOJEQUEST al host cruyb, finalizando la eje-
cuci6n cuando son recibidos, visualizando una lfnea con el nombre y la direcci6n IP del host,
seguida de los datagramas de 10s paquetes especificados, y de las estadisticas cmespondientes:

$ ping c 4 crayb
PING crayb.aemat.cs (130.206.11.8~56 data bytes
64 bytes from 130306.11.8: icmp-seqd ttl=255 time8 ~ R S
64 bytes from 130306.118: icmp-seq=l ttl=255 time=3ns
64 bytes from 130.206.1113 icmp-seq=2 ttb255 t i m e 4 ns
64 bytes from 130.206.11.8: icmp-seq=3 e 2 5 5 time=6 ns

--emyb.aemat.cs PING Statistics--


4 packetstransmitted,4 packets received, 0% packet loss
round-trip (ns) minl&rnax = 35.4 ns

El valor del campo f f l (time-to-live)de un paquete IP represents el nfimero majcimo de rutas IP


que el paquete pu& war antes de ser desechado. Este valor puede varix de un sistema a otro.
El protocoloTCP/IP estabke un valor maxim0 de 255.

El siguiente comando ping usa la opci6n -q para no visualizar la salida de 10s datagramas, per0
sf visualiza la pn'lmera linea y las estadhticas cOrrespondientes a 10s 10 paquetes enviados:
$ ping 410 q hpcm
PING hpcmeiemta (130.206.40~56 data bytes

\ -hpcm.ciemates PING Statistics--


10pa&t.strpasmitted,10pa~tsrrceived,0%packetloss
round-trip (ms) minlavg/max = UylO ms

El siguiente script, che-equipos, puede sex incluido en nuestro fichero crontab (ver "Ufifidad
crontab",p a g i ~220) con el fin de verificarperi6dicament.esi determi~dose q u i p de nuestra
red han perdido la mnectividadEn este script se us8 la utilidad maiix con la funci6n here do-
cument para crear el rnensaje que recibuh 10s usuarios operator y sistemas cuando se produzca
una p&dida de comunicaci6n en uno de 10s e q u i p de la red especificada;en lista-equipos del
script. Si el usuario operator estA alojado en un asdenador con sistema Berkeley y tiene estable-
cido el comando biffy, visualizara el mensaje en el acto. (Vex "cltilidad mailx", p6gina 3 11):

$ cat che-equipm
#!/biih
-
# script: the-equip Verifica k conectividad de q u i p
#
liita~equipos"eq&p01equipo2 equip03 ...'*
for nombrc h$lii-equipos
do
ping 4$ n o d r e 1>Idevlnd
if [ "$?" -ne 0 ]
then
maits -s "Chequeo cquipos" operator sistemas@aematcs<< STOP
-
Equip0 desconectado: Snombre 'date +'%a%mf%y %T
STOP
fi
done

Este script tiene un inconvenientG si no se soluciona rtlpidamente la anomalfa, podemos inundar


de mensajes los buzones de 10s usuarios a 10s que enviamos el mensaje, ya que cada interval0 de
tiempo (el especificadoen el ficherocron) hasta que dure la averfa, sera generado un mensaje.

12 -CObiUhTCAClON ENTRE SISTEMAS 331


Programus de Utilidad UNIX

Utilidad nslookup
Descripcibn
La utilidad nslookup es un programa utilizado para preguntar al dominio Internet 10s nombres
de los servidores. Las preguntas pueden hacerse de forma interactiva y no interactiva.

Formato
nslookup [-opcibn . .I
-
nslookup [-opci6n -.I [senidor]
nslookup [-opcibn . .I host
nslookup [-opcibn ...I host [semidbrl

La utilidad nslookup tiene dos modos de trabajo: interactivo y no interactivo:

Modo interactivo: Permite al usuario solicitar a un servidor informaci6n de varios hosts y


dominios, y visualizar una hta de hosts de un dominio. El modo interactivo es hvocado:
cuando emitimos el comando nslookup sin argumentos (entonces es visualizado el mmbre
de defecto y la direcci6n del servidor); o cuando en el command-line nslookup especilka-
mos como primer argumento un car* gui6n (-) y apcionalmente como segundo argu-
mento el nombre o direcci6n del host de un servidar dado (senidor).
Modo no interactivo: Es utilizado para visualizar just0 el nombre y la informaci6n solicita-
da a un host y dominio. El modo no interactivo es invocado cuando el Ilombre o la direc-
ci6n Internet del host que va a ser cunsultado es dado mmo primer argumento.El segundo
argumento es apcional y especifica el nombre o direcci6n del host de un servidor dado.

En el command-line nslookup tambien pueden ser especificadas las opciones (-opdbn) del c o
mando set si van precedidas de un gui6n (-) para establecer el stafus de la informac6n
que afecta a la comulta. Por ejemplo, para cambiar el tip0 de comulta de defecto de la informa-
ci6n del host, y el intemilo de tiempo a 10 segundos, emitir el siguientecomando nslookup:
nslookup -query=hinfo -timeout=lO

Cornandos interactivos
Cuando nos situamos en modo interactivo, visualizamos un prompt con el sign0 mayor que (>),
desde donde podemos emitir 10s comandos de la utilidad nslookup. Los comandos pueden ser
intemmpidos en cualquier momento tecleando c C f r l - 0 ,devolvihdonos al modo interactivo.
Para salir del modo interactivo teclear cCtrl-d> @OF) o emitir el comando exit, devolviCn&
nos alprompt del sistema. L a siguientes son 10s comandos interactivos de la utilidad nslookrcp:
root Cambia el servidor de defecto al servidor root del dominio. El nombre del servidor pue-
de ser cambiado con el comando set root.

server dominio
lserver domi&
Cambia el servidor de defecto al servidor especificado en dominio. El comando lserver
usa el servidor inicial para buscar informaci6n amca del dominio dado en dominio,
mientras que el comando server usa el servidor de defecto en curso.

332 -
12 COMUNICACION ENTRE SISllCMAS
finger [nombre][>fiherol
finger [nombre][>>ficherol
Conecta con el servidor designado del host en curso. El host en curso es definido cuan-
do una consulta previa a un host fue un~ectay devolvi6 informaci6n de la direcci6n

Is [opcidn]dorninio [>@hero]
Is [opcibn]domini0 [>>fihero]
Lista la informaci6n disponible del dominio especificado en dominio. La salida de de-
fecto contiene nombres de hosts y sus direcciones Internet. El argument0 opcibn puede
ser uno de 10s siguientes:

-t tip0 Lista todos 10s registros del dominio del tip especificado en tipo, o del tip0 en
curso si el tip no es specificado. (VK tip en el comando querytype).
-a Lista l a alias de 10s hosts del dominio.
-d Lista todos los registros del dominio.
-h Lista informaci6n del sistema Operativo y de la CPU del dominio.
-m Lista informaci6n de intercambio del correo del dominio.
-s Lista 10s servicios conocidos del dominio.

Cuando la salida es dirigida a un ficko, es visualizado un sign0 xulmero (#) por cada
50 registros recibidos del servidor.

viewfichero
Clasifica y lista la salida del comando o mmandos Is previos, contenida en el fichero
especificado enfichero, usando la utilidad more
?
help Visualiza una lista resumida de Ios comandos nslookup.

exit SaIimos del programa nslookup.

set opcibn[Jtrrlor]
Este comando es usado para cambiar el estado de la inform_-i6n que afecta a las con-
sul-. Las upcwnes vtilidas son:

all Visualiza 10s valores en curso de las &tintas opcwms que se pueden establecer.
Tambign visualiza informaci6n del host y servidar en curso.

class=vrrlcrr
Cambia la clase de consulta en curso a UM de las siguientes. Et defecto es IN, y la
abreviatura c l
IN Clase de registro Internet.
CHAOS Clase de registro Chaos.
HESIOD Clase de registro Hesiod
ANY Cualquier clase de registro.

domain=nombre
Cambia el nombre del dominio de defecto al specificado en nombre. Si la opci6n
defname estA establecida, el nombre del dominio es agregado a las peticiones de
consulta. m defect0 es tomado del fichero /efc/resollv.confl,la abreviatura es do.

srcNist=nombrel/nombre2/.. .
Cambia el nombre de defecto del dominio a nombrel y la hta de btisqueda del
dominio a nombrel, nombre2, etc. Pueden especificarse un maxim0 de 6 nombres.

-
12 COMVMCACIONENTRE SISTEMAS 333
Programas de U t i l W UNIX

[noldebug
Activa el modo depUraci611. Visualiza informaci6n del paquete euviado al servidor,
y de la respuesta resultante. El defecto es nodebug, y la abreviatura [noldeb.

[nola
Activa el modo depuraci6n minuciosa. El defecto es nod2.

[noldefname
Agrega el nor,*bredel dominio de defecto a cada mnsulta. El defect0 es defname,
y la abreviatura [noldef.

[nolsearch
Agrega 10s nombres del dominio de kta de btkqueda del dominio, a la petici6n. El
defecto es search, y la abreviatura [nolsea

port=nrimro
Cambia el dmero de puerta usado para mnectar el nombre del servidor al especi-
ficado en nrhero. El defecto es 53, y la abreviatura PO.
querytype=valor
tYP-hr
Cambia el t i p de informaci6n de una mnsulta a uno de 10s siguientes. El defecto
es A, y la abreviatura q y t:
A Direcci6n Internet del host (es el defecto).
CNAME Nombre can6nico de 10s alias.
HINFO T i p del sistema operatho y de la CPU del host.
MX InfOpmaci6nde intacambio del currm.
NS Los nombres del servidor del dominio especifhdo.
PTR Registro indicador de una direcci6n Internet.
WKS Los servicios conocidos sapoptados.

[nolrecurse
Llama al servidor dado para oonsultar a otros servidores si no tiene informaci6n. El
defecto es recurse, y la abreviatura [nolrec

retry=nrimro
Establece el ntlmero de intentos de las peticiones, a1 dado en n h e r o . Si la res-
puesta de una petici6n no es recibida en el interval0 del tiempo & espera (timeout),
&e es doblado y la petici6n es reenviada. El defecto es 4, y la abreviatura ret.

rootrhost
Cambia el nombre del servidor root al especificado en host. Esta opci6n afecta al
comando root. El defecto es el establecido en la instalaci6n, y la abreviatura ro.

timeout=nrimero
Cambia el interval0 del tiempo de espera (timeout) de UM respuesta, al xnhero de
segundos dado en nzhnero. El defecto es 5 segundos, y la abreviatura ti.

[no]vc
Utiliza un circuito virtual cuando envia peticiones al servidor. El defecto es novc

[nolignoretc
Ignora 10s mores de truncaci6n del paquete. El defecto es noignoretc

334 -
12 COMUMCAClONENTRE SlSTEMAS
Programas de Utilidud UNIX .:

Ejemplos
L a dos comandos nslookup siguientes, el primer0 emitido en modo no interactivo y el segundo
en modo interactivo, nos facilitan informaci6n similar: el nombre y direcci6n del servidor de de-
fecto, y el nombre y direcci6n del host especificado ( d q ) :

$ nslookupdarp
Server: decaemat-es
Address: 130.206.11.6

Name: daxpdemats
Address: 130.206.11.244

$ nslookup
Default Server: decaemat.es
Address: 130.206.11.6

> daxp
Server: deaiematss
Ad*. 130.206.11.6

Name: daxp.aemat.es
Address: 130.206.11244

El siguiente es un ejemplo de una sesi6n nslookup, en la que primer0 preguntarnos 10s valores
de las apciones en curso, despu& salvamos t& 10s registrm de tipA (el defecto: nombres de
l a hosts y sus direcciones Internet) de rmestro domini0 en el fichero direccionesIP, seguida-
mente listamos el contenido del fichero direccwnesIP. clasificado y controlado por la utilidad
more, fioalmente dejamos el entmo nslookup emitiendo el mmandoexit

$ nslookup
Default Server: petra-aematss
Address: 130.206.40.11

> set all


Default Sewer: petmciemaks
Address: 130.206.40.ll

Set options:
nodebug defname search recurse
nod2 now noignoretc p o d 3
querytype=A elass=IN timeout4 retry4
root=a.root-servers.ad
domain=aemat.es
srchfibaematxs

> Is -t A ciemates > direccwneslp


[petra.aemaLesJ

Received 1642 records.


> view direccwnesZP
...
...
> exit

-
12 COMVNICACION ENTRE SISTEMAS 335
Programas de Utilidad UNIX

Utilidad netstat
Descripcibn
La utilidad netstat visualiza simb6licamente el contenido de varias estructurasde datos, en dife-
rentes formates, relacionados con la red.

Fomato
netstat [-opcionesl Einfemz.fo1

Opcwnes
-a Modifica la visualizaci6n de defecto. Visualiza el estado de todos los sockets (puntas de
una conexi61116gica de comienzo y destino) relacionados con el protocolo Internet. Esta
opci6n usada con la apci6n -I visualiza la direcci6n IP y el nivel de enlace asociado con
las interfaces.

-A Visualiza la direcci6n de 10s bloques de control del protocolo asociado con 10s sockets,
y las direcciones de las entradas de la tabla de rutas con mhcaras de bits. Usualmente,
esta opci6n es usada en depuraciones.
-fdirecdn-faamiCia
Limita el infarme estadlstico y el del bloque de control de direcci611,a la d i r d 6 n de la
familia e!specificada en d i r e c c i h - f m . Las direcciones de las familias son:
inet Especifica infcxmaci6n de la familia AF-INET. Es el defecto.
unix Especifica informaci6n de la familia AF-UNX
all S6Io en Berkeley. Usta infurmaci6n de todas las familias del sistema.
trace S610 en System V. Especifica informaci6n de la familia AF-TMCE.

-H Visualiza informaci6n de 10s paquetes leidos y escritos. Muestra la tabla AFW en curso.

-i Visualiza estadfsticas de las interfaces configuradas. (Las interfaces configuradas esati-


camente en el sistema, per0 no localizadas al ham la carga del sistema, no son mostra-
das). Fsta opci6n emitida con la opci6n -s proporciona una tabla de estadisticas acumu-
lativas de 10s paquetes enviados y recibidos, y de 10s mores de cada interface que fue
autoconfigurada.

-I interface
S610 visualiza infurmaci6nrelativa a la interface especificada en interface.

-I interjime -s
Visualiza 10s contadures del nivel de enlace de datos DNA (Data Link Layer) de la inter-
face de la red apecificada en interface, y de las caractedsticas del adaptador.

-rn Visualiza infurmaci6n relacionada con la memoria asignada a la estructura de data aso-
ciada con las operaciones de la red

-n Visualiza las diremiones de la red en formato numQico. Si esta opci6n no es especifi-


cada, la diremi6n es visualizada como nombre de host y ntimero de puerta.

336 -
I2 COMUNICACION ENTRE SISTEUA!J
-protocolo
S6l0 en la versi6n Berkeley. Visualiza estadfsticas del protocolo especificado enproto-
cob si las rutinas de estadfsticas de dicho protmlo e s t h implementadas en el sistema.
Los nombres de 10s protocolos sopcntados est611incluidos en el fichero/etdprottocooLr.

-r Visualiza las tabhs de ruta de los hosts. Esta opci6n usada con la opci6n -s, muestra
estadfsticas de la ruta de los hosts, en vez de las tablas de ruta.

-s Visualiza estadisticas de cada protocolo en formato amplio.

-t Visualiza el valor del contador de tiempo; se usa con las @ones -i y -I interface.

-v Modo verboso. Visualiza infmmaci6n complementaria. bta apci6n, en la versi6n Ber-


keley espaificada con la apci6n -r, visualiza los valores m&imde la ruta.

Argumentos
interval0 Especifica, en segundos, el interval0 para la actuatiZaci6n y visualizaci6n de la in-
farmaci6n. Cuando se espxifica un infervahen el command-line netstat, la primera
linea de la visualizaci6n muestra estadfsticas acumulativas; las subsiguientes lineas
muestran estadkticas grabadas durante cada inkmalo.

Visualizaci6n de defecto
Cuando el wmando netstat es emitido sin apciones, la utilidad netstat visualiza una lista de
sockets activa por cada ppotocolo. La visualizaci6n de defecto mestra los siguientes elementos
de infomaci6n:

Nombres de los protmlos del host (Proto).


Tamafios (en bytes) de las colas recibidas (Rem-Q) y enviadas (Send-Q).
Direcciones, local (Local Address) y remota (ForeignAddress).
Estado (state).

Los formatos de las direcciones son de la forma host.puem, y redpuerfu si la dirwi6n de un


socket especifica una red per0 no especifica la direcci6n de un host. Las direcciones del host y
de la red son visualizadas SinhSlicarnente, a no ser que se espifique la w i 6 n -n

Visualizacih de las interfaces


El formato de la visualizaci6n de las interfaces, generado con la opci6n 4, proporciona una tabla
de estadlsticas acumulativas con los siguientes elementos de informaci6n:
Nombre de la interface (Name).
Unidad de transmisi6n maxima (Mtu).
Direcci6n de red de la interface (Address).
Paquetes recibidos (Ipkts.
Paquetes recibidos en error (lens).
Paquetes transferidos (Opkts).
Paquetes salientes en error (Oens).
Colisiones (Coll),cuyos data tiene distintos significados para diferentes interfaces de red.
Contadores de tiempo (Time). Optional con la apci6n -t.

I2 -COMUNlCACION ENTRE SISTEMAS 337


Programas de Utilidad UNIX

Visualizacih de la tabla de rutus


Una ruta consta de un host y una red de destino, y una pasarela (gateway) para el reenvfo de pa-
quetes. Las rutas directas son creadas autodticamentepor cada interface asignada al host local
con el comando ifconfrg par el administrador del sistema. Las rutas pueden ser modificadas ac-
cediendo a la condici6n vigente de la red

El formato de la visualizaci6n de la tabla de rutas se obtiene con la opci6n -r, e indica las rutas
disponibles y el estado de cada una, en 10s siguientes campos con las siguientes cabeceras:
Destination: Nombre del host de la red del destino de la ruta.

Gateway: Pasarela de la ruta usada en el endo de paquetes. Si la ruta no usa una pasarela,
esta columna puede contener la direcci6n de la interface usada cuando se envia al htino, o
direcciones de nivel de enlace.

Flags: Son una o varias lmas indicmdo el estado de la ruta, las cuales tiem el siguiente
signifkado:

U Ruta funcionandoy disponible.


G Ruta para una pasarela.
H Ruta para un host.
D Ruta creada didmicamente.
M Ruta modificada.
S Ruta estatica creada marmalmente.
R Rutarechazada.
C S6Io en System V. Genera rutas m e w .
L S6lo en System V. Pratocolo v a d o para traducir direcciones de enlace.

Refs: Represents el mlmero en curso de 10s usos activos de la ruta.


&:Raparciona la suma del mlmero de paqu&es enviados usando la ruta.

Infedace: Indica la interface de la red usada por la ruta.

Notas
El sistema UNIX tiene utilidades adicionales para manejar las funciones de la red. Par ejemplo,
el administrador del sistema dispone de la utilidad route para manipular las rutas de la red;de la
I utilidad ifconfig para definir direcciones de red de cada interface, etc.

El sistema UNIX tambibn dispone de ficheros con informaci6n relativa a la red Par ejemplo, el
fichero/etc/potocols contiene infarmaci6n relacionada con 10s protocolos usados en InterneC el
fichero /etc/seWes contiene la base de datos de 10s servicios Internet, como sockets, protom
los, etc; el fichero/etc/m&orh contiene informaci6n de 10s nombres de redes Internet.

El sistema UNIX tambibn dispone de otras muchas utilidades que proporcionan informaci6n re-
lativa a la red Por ejemplo, la utilidad nslookup facilita al usuario 10s nombres y direcciones de
los servidores y hots de la red (ver “Utilidud nslookup”, p a g i ~332); la utilidad ping nos per-
mite enviar y recibir paquetes a 10s e q u i p de la red para comprobar la conectividad (ver “Uti-
lidad ping”, pfigina 329); la utilidad finger proporciona informaci6n relativa a 10s usuarios de la
red (ver “Utilidud finger”, Pagina 307), etc.

338 -
12 COMUNX&4CXONENTRE SXSTEMAS
Programas de Utilidad UNIX *:I 1%

Ejemplos
Los formatos de salida generadm par el comando netstat pueden variar de un sistema a otro.

El siguiente comando netstat visualiza estadsticas de las interfaces configwadas en CUTSO:

$ netstat -i
Name Mtu Network Address I P h ImS oplds oerls coll
tu0 1500 < L i d o 08:00:2b:86439e 4913915 0 2367665 27 0
tu0 1500 DLI none 4913915 0 2367665 27 0
tu0 1500 130206 daxp 4913915 0 2367665 27 0
tu1 1500 < L h b 08:00:2b:86:439c 0 0 5458 5458 0
tu1 1500 DLI none 0 0 5458 5458 0
s10* 296 <Linlo 0 0 2181785 0 0
Io0 40% <Linlr> 2181785 0 2181785 0 0
lo0 4096 loop localhost 2181785 0 2181785 0 0
pppo* 1500 < L m b 0 0 0 0 0

El siguiente command-line netstat muestra )as tablas de rutas en curso de nuestro host:

$ netstat -r
Routing tables
Destination Gateway Flags Ret; Use Intvtace
Netmasks
bet 255.0.0.0
Inet 255.255.0.0
Inet 255.255.255.0

Route Tree for Prosocol F d y 2


default Cfll UGS 3 3037251 tu0
90 mc
m U 45 27697722 md)
localhost localhost UH 20 44705783 lo0
130206 inf2 U 126 173215158 tu0
192.101 id2 us 4 59552137 tu0

El siguiente ejemplo genera la visualizaci6nde defect0 de las conexiones a la red:

$ netstat
Active Internet connections
Proto R m - Q &ndQ LuxlAddress Foreign Address (SQte)
tCP 0 0 cryab.ciemaLcs.1022 sprtaemaLesprinter TIME-WAIT
kP 0 0 crpb.demat.es.pop3 fulO.ae~t.es.2200 TIME-WAIT
tCP 0 0 crayb.ciemat.es.telnet crayb.aemat.cs.mkuser ESTABLISHED
tcp 0 0 crayb.aemat.cs.mkuser crayb.aemat.es.telnet ESTABLISHED
tCP 0 0 crayb.demat.es.telnet tablero.qfauam.1304 ESTABLISHED
tCP 0 0 crayb.ciernat.es.te1net ceu76.ciematcs.lOS2 ESTABLISHED
tCP 0 0 crayb.ciemat.es.1192 cmt045.aemaLcs.x-ser ESTABLISHED
tCP 0 0 crayb.aemates.telnet mickty2.ceu.cs.14378 ESTABLISHED
tCP 0 0 crayb.ciemat.cs.4990 tecgel0.aemat.e.xar ESTABLISHED
kP 0 0 crayb.ciemat.es.4710 xl40cpd.ualmesx-serv ESTABLISHED
kP 0 0 crayb.aemat.cs.4044 x140cpd.ualm~x-serv ESTABLISHED
tCP 0 0 crayb.aemat.es.22 *.* LISTEN
UdP 0 0 crayb.aemat.es.515 *.*
UdP 0 0 1ocalhost.domain *.*
UdP 0 0 crayb.ciemat.cs.domain *.*
Active UNMdomain sockets
Address Type R m - Q Send4 Vnode Conn Refs Nextref Addr
272216400 stream 0 0 2757006 0 0 0 ldevlprinter

Obs&txe, que la versi6n System V,al final de algunos informes, visualiza una estadktica adi-
cional de los sockets del domini0 UNIX.

-
12 COMVNICACION ENTRE SISTEMAS 339
Programus de Utilidd UNIX

Utilidad ftp
Descripcihn
La utilidad ftp es la interface del usuario al protocolo FTP (File Transfer Protocol). La utilidad
ftp, primer0 establece UM conexi6n con un host remoto, y despuh permite transferir ficheros
entre el host local y ese host remoto usando los subcomandos ftp.

Si en el command-lineftp especificamos un host remoto, la utilidad ftp intentar4 establecer una


conexi6n a un servidoT F W de ese host. Si no se especifica un host, la utiIidad ftp da entrada al
int&pre$e de comandos y visualiza el prompt ftp> para que introduzcamos subcomandos ftp.
Para conectarnos a un host remoto emitiremos el subcomando open host, donde host es el host
al que queremos conectamos. UM vez obtenida la conexi6n con el host remoto, la utilidad ftp
visualiza otro prompt para introducir el nombre de usuario y password en el host remoto antes
de volver a visualizar el promptf2p>, a no ser que tengamos establecido el login uutormftico.

El protwolo lTP est4 diseliado para realizar transferencias de datos entre hosts que usan siste
mas de fichos diferentes. Aunque el protocolo proporcione mucha flexibilidad para transferir
datos, no intenta comervar 10s alributa que son especfficos de un sistema de ficheros determi-
nado (par ejemplo, el modo de protecci6n o las fechas de modifcaci6n de un fichero). El p r
m
cot0 lTP hace pocas distinciones acerca de la estructura global de un sistema de f i c h m , y no
praporciona ni permite acciones como copiar recursivamente subdirectorios. Si necesitamos
transferir ficheros entre sistemas UNIX compatibles, y tenemos que conservar 10s atributos del
fichero teniendo que cop& recursivamente subdirectorios, podemos usar la utilidad rcp.

Formato
ftp [-opciones] [host]

Opciones
-a Activa el modo depuraci6n. Vex el subcomando debug.

-g Desactiva la expansi6n de metacaracteres en 10s nombres de fichero.

-i Desactiva el prompt interactivo durante las transferencias de varios ficheros.

-n Impide un login automdtico de la utilidad ftp durante la conexi6n inicial. Si esta op-
ci6n no es especificada, la utilidad ftp busca una entrada en el fichero .netrc del di-
rectorio de defecto del usuario del host local que describa un promso de autologin pa-
ra el host remoto. (Ver “Fichero.net&’, pfigina 348).

-t Activa el anillisis del paqude.

-v Visualiza todas las respuestas del servidor remoto y proparciona estadfsticas de la


transferencia de data. Este es el defecto cuando la salida va dirigida a una pantalla.

Argumentos
host Especifka el nombre del host remoto al cual se va a conectar la utilidad ftp.

340 -
12 COMUNlCAClON ENTRE SXSTEMAS
Programas de Ulilidad UNIX

Subcomandos
La utilidad ftp prcpxciona subcomandos para realizar tareas como: listar directories remotos,
cambiarse de directorio en las milquinas local y remota, transferir ficheros en una linica petici6n,
crear y barrar directories, cambiarse al shell para ejecutar comandos del shell, e&.

Los subcomandos de la utilidad ftp son emitidos en modo cornando &de el prompt&>. Si el
submando ftp requiere un urgumento y no se lo suministramos, la utilidai ftp visualiza un
prompt para que lo introduzcamos. Si el argumento incluye espacios, encmar el argumento en-
tre comillas. LQSsiguientes son 10s subcomandos recomidos pur la utilidad ftp:

![cornando [argument0 ...I1


Sin argumentos, el subcomndo admiraci6n (!) invuca w shell interactivo en la m6-
quina local. (Para volva a la sesi6n ftp, teclear eKit o <Cnl-d>). Si se specifican ar-
guments, cornando es considerado un comando del shell que sera ejecutado en el host
local, y rugwnento es el argumento o argumentos de dicho comando.

$ macro [argument0 ...I


Ejecuta la macro especificada en macro, previamente definida con el submando
macde€ Los argumentos no son expandidos.

2 [subcomando]
help [subcomando]
Visualiza un mensaje informative relativo al subcomando ftp del host local especifi-
cad0 en subcomando. Si en subcomando no se especifica nin@n subcomando, la uti-
lidad ftp visualiza una bta de subcomandosftp del host local.

account CpasswordJ
Suministra unpasword suplementario si es requerido par el sistema remota para p
der acceder a los recursos despueS de completarse el login. Si 110 es suministrado un
password, recibiremos unprompt para que lo introduzcamos.

appendfichero-focaf~ i k r o - r e m t o ]
Agrega elfichero=focdalfichero-remto. Si elfichero-remoto no es eqecikado, el
nombre delfichero-&caZ es usado como nombre delfichero-remto. La transferencia
de fickos usa los valores en curso de 10s subcomandos form, mode, struct y type
mientras se agrega el fichero.

ascii Establece el tip de la transfaencia de fichaos al tip ASCII de la red. Los t ip de


transferencia de ficheros XIAI S usadas son ASCII (ascii) e imagen binaria (binary).

bell Suena una campanilla @pu& de la conclusi6n de cada transfaencia de ficheros.

binary Establece el tip0 de la transferencia de ficheros al tip0 imgen binaria

bye
quit Finaliza la sesi6n ftp con el servidor FIT remoto, saliendo de la utilidadftp.

case Activa o desactiva la correspondencia de las l a a s del nombre del fichero del host re-
mot0 al host local. Cuando el subcomando case esUI activo (el defect0 s no activo, no
variando la escrihxra), las letras mayriSculas de 10s nornbres de fichero del host remoto
son cambiadas a letras minclsculas cuando 10s fichaos son escritos en el directwio de
la dquina local.

12 -COMUMCACION ENTRE SISTEMAS 341


Progmmas de U t i l W UNIX

cd rlirectono-remto
Nos traslada del directcnio remoto en curso, al directmio dado en directOriO-renwto.
cdup Nos traslada del directorio remoto de trabajo en curso, al directorio padre de &e.
disconnect
close Termina la conexi6n ftp, per0 nos deja en modo comando @romp&>). Para conti-
nuar la sesi6n &be estabIecerse otra conexi6n Borra las macros defimdas.

cr E l i m i ~el deter retarno de carro de una secuencia r e t o r n o - d ~ - c u ~ o / s ~ r o - ~ e - ~ ~ ~ e u


cuando recibimos registros durante la transferencia de ficheros de tip0 ASCII.

deletefichero-remto
Borra el fichero especificadoenfichero-renwfo de la d @ n a remota

debug [on 1081


Cuando el subcomando debug es especifcado (entonces se activa), cada subcomando
ftp enviado al host remoto es visualizado y precedido de la cadena -->. El modo de-
bug se desactiva emitiendo el subcomando debug o#.

dir [duectorio-remto] Whero-bcN


Is [directorio-renwto] mhero-bcall
Genera una lista de 10s nombres de fichero contenid06 en el ditectorio-renwto y la in-
cluye en elfichero-loal. Sifuhero-Zocd no es especificado o es especificado un ca-
racter gui6n carnoficheto-local,la utilidad ftp visualiza una lista de 10s mmbres
(0)

de fichero contenidos en el directado specificado en directorio-fremoto. Si no es es-


pecifido undirectorio-rmto, s610 son mostrados 10s ficheros del directado de tra-
bajo en curso. Ambos subcomandos, dir y Is, funcionan igual, la diferexaciaeSta en que
la lista de nombres de fichero genera par el subcomami0 dir esta en formato mplio
(Is -I), y la del subcomando Is en formato reducido.

formforma0
Establece el formato de la transferencia de ficheros al especificado enfomdo. El ihi-
co fopmato sOQortad0 es el de defecto: nonprinf.

getfichero-renwto mhero-1od.l
recvfichero-remto [Fehero-locrrlJ
Obtiene una copia delflhero-remto y la deposita en el host local con el nombre es-
pecificado enfichero-bed. Sifuhero-bedno es especifkado, el fichero local toma-
rA el nombre deljichero-remto; a w e puede ser alterado por el establecimiento en
curso de 10s subcomandos case, ntrans y nmap. J 3 establecimiento en curso de los
subcomandos type, form, mode y struct es usado mientras se transfiere el fichero.

glob Activa o desactiva la expansi6n de nombres de fichero de 10s subcomandos mdelete,


mget y mput Si la expansi6n estA desactivada, los argumentos de nombres de fichero
de estos subcomandos no son expandidos. En el subcomando mput la expansi6n se
realiza igual que en el comando csb En los subcomandos mdeiete y mget el nombre
de cada fichero remoto es expandido separadamente en la xdquina remota.

La expansi6n de un nombre de directorio puede ser diferente que la de un nombre de


fichero, dependiendo del host y del servidor remotos. La expansi6n puede verse pre-
viamente usando el subcornando: mlsfichero-remto -. Para transferir directories
completos de ficheros, transferir WI archivo del directorio con el comando tar en mo-
~ usar 10s subcomandos mget o mput.
do binaxio, en v e de

342 -
I2 COMUNICACXON ENTRE SISTEMAS
hash Activa o desactiva la visualizaci6n del d c t e € nGmao (#) por cada bloque de datos
transferido. El tamaflo de un bloque es de 4096 bytes en System V y 1024 bytes en
Berkeley. (par defecto, la visualizaci6n del caracter # esUi desactivada).

Icd [direcfunu]
Nos sitda en el directorio de la maqUina local especificado en di2ecfuh. Si no esm-
ficamos ningCln directorio, el subcomandoIcd nos traslada al directorio de defecto.

macdef macro
Define UM macro de un sutxomando ftp. Las lineas subsiguientes (basta una linea
nula) son salvadas como text0 de la macro especificada en macro. Pueden sa defini-
das hasta 16 macros, con un d m o de 4096 bytes. Las macros permanwen definidas
hasta que sean redefinidas o sea ejecutado un subcomandoclose.

mdeletefihero-remfo ...
Expande la currespondencia de nombres de fichero especificada enfichero-remfo de
I la wins remata, banando10s ficheros remota resultantes.

...
mdir [directorio-remfo ficheto~call
ntls [duectoorio-renwfo ...fihero-lucal.l
Expande la carespondencia de nombres de directaio especificada en el argumento
di&x&&-remofo y scribe la lista de nombres de fichero resultante en el fichero local
especificado enfichero-local. Si en direcfoiiu-remofo se especifica una plantilla de
correspondencia de nombres de fichero yjkhero-focal no es especiticado, lm s u b
mandos mdir y mls visualizan unprompt para que introduzcamos un fichem local.

Si en el argumentodirecforbremotose especifica mils de un dkectaio separados par


espacios, el tlltimo argumento de la lista debe ser el nombre de un fichero local o un
carikta gui6n (-). Si enfichero-localse especifica un arikter gui6n (-), los s u b
mandos mdir y mls visualizanla lista de nombres de ficheros en el tgmiaal local.

Si el prompt interacrivo est.&activado, la utilidad ftp visualiza unprompt para verificar


que el Gltimo argumento es unjichero-local. Estos dos submandos se diferencian en
que la Lists de nombres de fichero genaada por el submando mdir est4 en formato
amplio (Is -1). y la del s u b & mls en formato reducido.

mgetfichero-remoto ...
Expande la mpondencia de nombres de fichero especificada enfichero-remfu,
copiando 10s ficham resultantes en el directorio en curso del host local con los mis-
mos nombres que 10s del host remato, per0 pueden ser alterados por el establecimiento
de los subcomandos case, ntrans y nmap. Mientras se transfieren 10s ficheros, es usa-
do el establecimiento en curso de 10s subcomandos type, mode, form y struct.

mkdir [directoriO-remful
Crea en el host remoto el directorio especificado en direcforbrcmoto. En la m i n a
local podemos crear directorios emitiendo el submando !mkdir direcfuriu.

mode [modo]
Establece el modo de la transfaencia de fichaos al especificado en modo. El Mco
modo disponible, y el de defecto, es el modo strewn.

modtime ~heru-reemoful
Muestra la fecha de la Gltima modifcaci6n delfichero-remtodel host remoto.

-
I2 COMUNICACIONENTRE SISTEMAS 343
Programas de Utilidad UNIX

mput [fichero-cocal ..I


Expande la currespondencia de nombres de fichero especificada en fNher0-locac y
copia 10s ficheros resultantes en el host remoto con 10s mismos nombres de f i c k o
que 10s del host local, per0 pueden ser alterados conforme al establecimiento de 10s
subcomandos nmap y ntrans. Cuando se estan transfiriendo los ficheros, la utilidad
ftp usa el establecimiento de 10s subcomandos type, form, mode y struct.

nlist [directoriu-remoto] [FEhero-locall


Visualiza una lista de 10s ficheros del directorio especificado en directorb-reemoto del
host remoto. Si en directoriu-remoto no se especifica un directorio, es usado el direc-
tori0 remoto de trabajo en curso. Si el prompt interactivo est4 activado, la utilidad ftp
visualiza unprompt para verificar que el tiltimo argumento es unfichero-fucal, el cual
recibiril la salida del subcomando nlist directorio-remfo; si enfickro-focal no es es-
pecificado ningiin fichero, la salida es aviada al terminal.

nmap IpMlh-entprcurtiUa-saCJ
Activa o desactiva el mecanismo de altemancia de nombres de ficko. Si no es espec
cificado nimn argumento, el establecimiento de altersuncia de nombres de fichero es
desactivado. Si 10s argumentos son especificadas, 10s nombres de 10s fickos locales
se corresponden durante las operaciones de 10s subcomandos mget y mput; y 10s
nombres de 10s ficheros remotos se carresponden durante las operaciones de los sub-
comandos get y put cuando el nombre del fichero de destino no es especificado.
Este subcornando es fitd cuando el host local y el host remoto usan convenios We-
rentes en 10s nombres de fichero. La comespondencia de ficheros se lleva a cab0 con el
establecimiento de las plantillas pzarrtilla-nt y prcurtiUa-sal. La variableplantilla-ent
especifica la plantilla de 10s nombres de fichero entrantes, 10s cuales ya pueden haber
sido procesados confame al establecimiento de 10s subcomandos case y ntrans. En la
plantilla plantilla-ent pueden incluirse las sentencias $1 a $9. Usar el car&% barra
inversa 0)para evitar el tratamiento especial de car&- d6lar (8.
Todos 10s caractera deplantilla-ent definen 10s valares de la plantilla de entrada. Par
ejemplo, si la plantilla de entrada es $I.$2 y el nombre del f i c k o remoto es my&-
tadat, el valor de $I es mydata y el valor de $2 es dut. Los valaes de la plantilla de
salida, plantillasd, determinan el nombre de fichero currespondido resultante. Las
secuencias $1 a $9 son reemphuadas por cualquier valor que resulte de la plantilla de
entrada. L a semencia $0 es reemplazada por el nombre del fichero original. Adicio-
nalmente, la secuencia [secZ,sec2] es reemplazada por el valor de s e d si s e d no es
nula; si s e d es nula, es reemplazada por el valor de sec2.

ntrans [caracteres-ent caracteres-sail


Activa o desactiva el mecanismo de traduai6n de caracteres de nombre de fichero. Si
no es especificado ningiin argumento, la traducci6n de caracteres es desactivada. Si
son especificados argumentos, 10s caractem de 10s nombres de fichero fuente son tra-
ducidos durante las aperaciones de 10s subcomandos mget y mput, y durante las ope-
raciones de 10s subcomandos get y put cuando el nombre de f i c k o de destino no es
especificado.

Los caractetes de 10s nombres de fichero que se correspondan con 10s de la cadena de
entrada, caracteres-ent, son reemplazados por 10s mespondientes caracteres de la
C&M de salida, caracteres-sal. Si la cadena caracteres-ent es m& larga que la ca&-
M caracteres-sd, 10s caradexes de la cadena caracteres-ent son borrados si no tienen
caradexes de correspondencia en la cadena cwacteres-sal.

314 -
12 COMUMCACIONENTRE SXSlEMAS
Pmmmas de Utilidad UNIX

open host Cpuertal


Establece una conexi6n al semidm FTP del host remoto especificado en host. Si en
puertrr es dado un niimero de puerta, el ~ ~ v i d Fl"P
a p intenta la conexi6n a esa puerta.
Si la funci6n autologin esta activada, la utilidad ftp intentar6 el login autodtico. (Por
defecto, la fmcidn autologin eSta activada si est4 establecida en el fichero .net= del
usuario, y la opci6n -n no es especificada en el command-lineftp).

prompt Activa o desactiva el prompt interactivo. Si el prompt interactivo esta activado (es el
defecto), la utilidad ftp visualiza un prompt para que el usuario verifique las opera&-
nes rmfltiples de los submandos mget, mput y mdelete, antes de traspasar, enviar o
borrar ficheros. Si el prompt interactivo estA desactivado, la utilidad ftp ejecutar6 la
operaci6n en todos los ficheros especificados sin preguntiu. (El prompt interactivo
taxnbien se desactiva especificando la opci6n -i en el command-lineftp).

proxy [subcomzndo]
Ejecuta el submmando del ftp especificado en subcomando en una conexi6n de con-
trol secundaria. El subcornando proxy permite conexiones simultheas entre dos ser-
vidmes remotos para transferir ficheros entre ellos. Para establecer la conexi6n secun-
daria, especificar open como primer subcomando del argument0 proxy* Para ver los
subcomandosque pueden ser ejecutados en la conexi611secundaria,emitir proxy ?.
Los siguientes subcomandos se compoctan de la siguienteforma cuando son incluidos
como argumentos en el subcomando proxy:
El subcomando open no define nuem m a
m durante el proceso de autologin.
El subcomandoclase noborradefiiuones de macros existents.
Los subamandos get y mget transfieren ficheros del host de la conexi6n prima-
ria al host de la conexi6n secundaria.
Los subcomandos put, mput y append transfieren ficbos del host de la cone
xi6n secundaria al host de la conexi6n primaria

putfichero-local mhero-remtol
sendfichero-local vuhero-remto]
Transfiere el fichero del host local especificado enfiheru-heal a la mAquina r
em
con el nombre de fichero specificado enfichero-remto. Si enfichero-remoto no se
especifica un fichero*la utilidad ftp usa el nombre dado enfickro-locd como nom-
bre del fichero remoto, pudiendo ser alterado por el establecimiento de 10s subcoman-
dos ntrans y nmap. La utilidad ftp usa el establecimiento en curso de 10s subman-
dos type, mode, form y struct mientras se transfiere el fichmo.

pwd Visualiza el mmbre del directdo de trabajo en curso de la dquina remota.

rename Renombra un fichero especificado de la rdquina remota.

reset Limpia la cola de respuestas. Este submando vuelve a sincronizar el submando, y


responde secuencialmenteusando el servidor FTP remoto.

regetfuhero-remto [fichero-locaIl
A d a como el subcomando get, except0 que si el fichero especificado enfichero-
local existe y es mAs pequeiio que el fichero especificado enfuhero-remto, se s u p
ne que sera transferida parcialmente una capia del fichero remoto al fichero local y se-
rB continuada en el punto aparente del fallo. Este subcomando es titi1 cuando se trans-
fieren fiChKos muy largos que pueden ocasionar la Wdida de la conexi6n.

-
I 2 COMUNICACIONENTRE SISTEMAS 345
Programas de Utilidad UNIX

rhelp [subcomaando]
Muestra las instrucciones del servidor FTP remoto. Si en subcomando se especifica
UM instruccidn del servidor FTP remoto, muestra informaci6n de esa instrucci6n.

rmdir diFectorio-renuNo
Bma el directorio especificado en directorio-remoto de la m4.qUina remota. Este sub-
comando funciona igual que el comando rmdir del shell.

rstatus Visualiza informaci6n del est& de 'a utilidad ftp en la II@U~Mremota.

runique Activa o desactiva la creaci6n de ficheros con nombres de fichero Wco en la m&@na
local, durante las operaciones de los subcomandos get y mget Si la creaci6n de nom-
bres de fichero con nombre iinico en el host local no esta establecida (esel defecto), la
utilidad ftp sobrescribe 10s fickos locales.

Si la creaci6n de ficheros con nombre llnico est4 establaida, y un fichero del host l e
cal tiene el mismo nombre que el especificado en el de destino (enflckro-locd), la
utilidad ftp modifica el nombre dado en el fichero de &tino agreghdde el sufijo .I.

Si un fichero del host local ya existe con el nuevo mmbre (fkhero.1). la utiIidad ftp
agrega el sufijo.2 al nombre del f i c h ~ de
o destino Vchero.Z),y asf sucesivamente; la
utilidad ftp puede repetir este proceso hash el sufijo .99. El subcumando Nlfque no
afecta a 10s nombres de 10s ficheros locales generadm por un cornando del shell.

sendport Activa o desactiva el uso de instrucciones PORT del servidor FTP. Por defecto, la uti-
lidad ftp USB una instrud6n PORT cuando se establece una mnexj6n pop cada trans-
fmncia de datos.
sizefihero-remoto
Visualiza el tamaiIo en bytes del f i c k o dado enfiehero-renwto del host mato.

status Visualiza el estado en curso de la utilidad ftp de la milquina local.

struct [estruekrra]
Establece el tip de estructura de la transferencia de ficheros a la especificada en es-
tnrctura. S610 es soportada la estructurafile.

sunique Activa o desactiva la crmci6n de ficheros con nombre de fichero h i c o en la miiquina


remota, durante las apemuones de 10s submandos put y mput Si la aeaci6n de
nombres de fichero ~nicoremoto no est.& establecida (es el defecto), la utilidad ftp so-
brescribe los fichaos remotos.
Si la creaci6n de ficheros con nombre de fichero fink0 en el host remoto eSta estable-
cida, y un fichero del host remoto tiene el mismo nombre que el especficado en el fi-
chero de destino fichero-remoto),el servidor FTP remoto mOdifica el mmbre del fi-
chero de destino (fichero-remoto),usando el mismo metodo que el subcomando r&-
que, siempre que el servidor FTP soporte la instruCci6n STOU.

system Muestra el tip de sistema operative en curso de la m6quina remota.

tenex Establece el tip de la transferencia de ficheros al que necesitau las mQuhas TENLX

trace Activa o desactiva el @isis de paquetes.

346 -
22 COMVNICXCIONEN= SlSWAS
Promamas de Ulilidad UNIX
2 :
.: % I

type [tipol
Establece el tipo de la transferencia de ficheros al especificado en tipo. Si en t@o no se
especifica un tip de transferencia, es visualizado el t i p en curso. Hay tres t i p de
transferencia de ficheros villidos: tenex, binary y ascii. El defect0 es ascii.

user usuario [passwor~[cuenta]


Don& us& 1#)s identifica ante el servidor FTP remoto. Si no especificamos un
password, la utilidad ftp visualiza un prompt para introducirlo. Si no se especifica una
c u e d y el servidor remoto la requiere, la utilidad ftp visualiza un prompt para inwe
ducirla. Si tenemos activada lafuncidn mologin (es decir, si est4 establwida en el fi-
chero .netrc), y en el command-line ftp no es especificada la opci6n -n, a t e proceso
sera realizado autom&icamente al hacer la conexi6n inicial al host remoto.

verbose Activa o desactiva el modo verboso. Cuando el modo verboso est4 activado (es el &-
fecto), la utilidad ftp visualiza todas las respuestas del servidor FTP remoto. La utili-
dad ftp, adicionalmente visualiza estadfsticas de los ficheros transferidos cuando las
transferencias son concluidas.

AbortQI.una &ansfreencia de frcheros


Para abortar una transferencia de ficheros, usar la csombinaci6n de teclas de intmpci6n del
terminal (usualmente c C n l - 0 ) ; el endo de tramferencias es inmediatamente suspendido. La
recepci6n de tramferemias se suspende enviando la instrucci6nABOR del proW010 FTP al ser-
vi& remoto, y borrando 10sdatos adicionales recibidos.

Nombres de @hero
Los ficheros especificados corn argumentos en 10s subcomandos de la utilidad ftp son proce-
sados por el int&pretede comandos conforme a las siguientes reglas:

Si el nombre de fichero es especificado como un cadcter gui6n (-), el standard-input es


usado para leer operaciones y el stundurd-output para escribir operaciones.

Si el primer ca&ter del nombre de f i c k o es un car- bana vertical (I), el rest0 del ar-
gumento es interpretado como un cornando del shell. Entonus, la utilidad ftp carga un
shelf con el argument0 &do y lee o (esdbe) del stdout o (stdin). Si el comando del shell
incluye espacios, el argument0 &be sa encerrado entre comillas @or ejemplo, “I Is W).

Si falla la verificaci6n precedente y si la expansi6n de nombres de fichero est4 activada, 10s


nombres de 10s ficheros locales son expandidos conforme a las reglas usadas en el shell C.
Si la utilidad ftp espera un fichero local dnico @or ejemplo, una operaci6n put), s610 es
usado el primer nombre de fichero generado por la expansi6a

Cuando se usan subcomandos mget y get sin especificar el nombre del fichero local, el
nombre del f i c k o local es el mismo que el nombre del f i c k o remoto, el cual puede ser
alterado por un establecimiento de los subcomandos case, ntrans y nmap. Si el s u b
mando runique estA activado, el nombre del Echero resultante puede ser alterado.

Cuando se usan subcomandos mput y put sin especificar el nombre del fichero remoto, el
nombre del fichero remoto es el mismo que el nombre del fichero local, el cual puede ser
alterado por un establecimiento de 10s subcomandos ntrans y nmap. Si el subcomando
sunique esa activado, el servidor remoto puede alterar el nombre del fichero resultante.

-
I2 COMUNICACIONENTRE SISTEMAS 347
Programas de U t i l W UNIX

Fichero .nettc
Si en el command-lineftp especificamos el nornbre de un host remoto, la utilidad ftp inmedia-
tamente trata de establecer una conexi6n al host especificado. Si el comando ftp realha una ah
nexi6n corrects, la utilidad ftp busca el fichero.netrc local en nuestro directorio de defecto.

Si el fi&ero.netrc existe, la utilidad ftp examina el fichexo para que UM entrada inicie el proce-
so de login uutormfticoy las definiciones de macros de 10s subcomandos ftp para el host rem
to. Si el fichero .netrc no existe o no tiene entradas de autologin, la utilidad ftp visualiza un
prompt para que introduzcamos un nombre de usuario y de pussword vilidos en el host remoto.

El fichero .netrc contiene la informaci6n de login requerida por la utilidad ftp para acceder it
una m@uina remota. El fichero .netrc contiene las siguientes entradas, las cuales constan de un
indicador y un valor asociado. L.as entradas de Zogin pueden ir en una Unea separadas pa ca-
ractares espacios, tabuladores o nuevas lf- (0 cada entrada en una linea):

machine host
Donde host es el nombre de un host remoto, definiendo el comienzo de autologin al host
especificado. Las entradas siguientes son opcionales y se aplican a dicho host.

login usuario
Donde usU(ui0 es el nombre de Zogin del usuario usado en el host remoto. Si no se k l a -
ra esta entrada, recibiremos unprompt para que suministremos un nombre de usuario.
passwordpassword
Dondepassword es el nombre depussword del login remoto que va a ser usado. Si no se
especifica esta entrada, visualizaremos unprompt para que introdummos unpussword.

accountpassword
Don& password es el nombre de password de la cuenta que va a ser usada, si &ta es re-
querida por la XIQU~M
remota a la que vamos a hacer login.
macdef macro
Dondemacro es el nombre de UM mmro de subcomandas ftp para el host remota. La de-
finici6n de la macro comienza en la lfnea siguiente, asumiendo que todos 10s caractges
hasta una linea blanca van a ser la defiinici6n de esa macro.

Par rmnes de seguridad, la utilidad ftp requiere que el fichero .netrc s610 pueda ser leIdo y es-
crito por el usuario propie€ario del fichero (modo 600). Aunque para mayor seguridad tambien
podemos no especifkar entradas depussword. El siguiente es un fichero.netrc ejemplo:

$ cat .netre
machine ibml login password m&assword
machine inf2 login garcia password mipasword
macdef If
PWd
Is -a?

Notas
Otra utilidad que tambien permite el envio de ficheros entre hosts remotos, es la utilidad rcp
(ver “lltilidad rcp”, pAgina 357). La utilidad mailx nos permite enviar fichexos de tip0 text0 en
un mensaje a uno o varios usuarios remotos (ver “Utilidad mailx”, Mgina 311).

348 -
I2 COMUNICACION ENTRE SISlEMAS
Programas de U t i l W UNIX

Ejemplos
El siguiente ejemplo muestra como la usuario susana, alojada en el host crayb, hace un Login al
host remoto daxp (primer0 introduce el identificadur de usuario y despuQ el password, el cual
no es visualizado), seguidamente realiza las siguientes opemiones: se traslada al subdirectdo
procs del host local crayb y lista su contenido, copia el fichexo verdis en el directorio de defecto
del host d q y conqwueba su existencia, saliado de la utilidad ftp con el subcornando quit

may@ ftp daxp


Connected to daxp.aemates.
220 daxp FTP server (DigitalUNIX Version 5.60) ready.
Remote systemtype is UNM.
Using binary mode to transfer fiIes.
Name (daxp:susana): S U S M
331 Password required for susana.
Password:
230 User susana logged in.
r t p Icd procs
Local directory now/Psuarios/cccasusana/procs
f t p I Is -c
grands impm =uPa dva verdis
r t p put verdis
200 PORT command successfd.
150 Opening BINARY mode dah connection for verdis (130206.11.8,4660).
226 Transfer complete.
710 bytes sent in 0.016 seconds (43 Kbytesls)
rtp dir verdis
200 PORT command successfd.
150 Opening ASCQ mode data connection for/binlls(130.206.11.8,4661).
-rwxr--r- 1 susana adm 710Apr101038verdis
226 Transfer e~mplete.
f t p quit
221 Goodbye.
crayb$

Supongarnos, que en mestro host local ejecutamos con derta periodicidad una cadena de pro-
gramas, generando f i c k m con distintos dam. Lus fickos cuyos nombres finalizan en .fits,
ubicados en nuestro directorio& defecto, contienen determinados resultados, los cuales es ne-
cesario que 10s reciba un determinado usuario de un host remoto en su subdirectcg.io resultados.
La transfaencia de dichos fickos puede realfiarse de forma autorniltica con el siguiente script,
llamado envb-results, si lo incluimos en nuestro fichero cion para ser ejecutado a una hora
dada, despueS de generase 10s resultados:

$ cat envia_iesults
#!/binlksh
-
# script: e n v i a - d t s Envia fEheros a un usuario rtmoto.
set -x
ftp -n host-remoto e< M)F
user u s e d - r e d opassword
cd resdtados
sunique
prompt
mput *.rsts
EOF

Observemos, que el subcomando prompt desactiva el modo interactive para que se copien to-
dos 10s ficheros, el submando sunique se activa para que no Sean sobrescritos los ficheros de
las subsiguientes transferencias, y la opci6n -n se especifica para evitar un Login autdtico. El
subcomando mput expande y transfiere al host remoto todos 10s ficheros finalizados en .m&.

-
I 2 COMUMCACIUNENTRE SISTEMAS 349
Programas de U t i l W UNIX

La siguiente es UM sesi6n ftp que el usuario garcia establece desde el host daxp,primer0 co.
ntxtbdose con el host remoto crayb usando el usuario Zopez y despub con el host remoto inj2,
u s d o el Zogin automtifico del usuario garcia, realizando las siguientes aperaciones:

1. Visualiza el nombre del directorio en curso del host remoto crayb (submando pwd).
2. Se cambia al subdirectorioprogramasdel host crayb (submando cdprogrmrus).
3. Copia el ficheroremoto m a h c al directorio de trabajo del host d2a-p (get mainc).
4. Cierra la conexi6n con el host crayb, per0 no sale de la utilidad ftp (submando close).
5. Abre UM conexi6n con el host remoto inj2 (open inp), y suponiendo que el usuario gar-
cia tenga establecido el fichero.Ratre ejemplo @6gina =), realiza un autologin.
6. Visualiza el nombre del directorio remoto en curso y su contenido con la macro K
7. Visualiza el estado de la utilidad ftp del host remoto inj2 (submando rstatus).
8. Deja la sesi6n ftp (submando quit), siendole dewelto el prompt del sistema.

daxp$ ftp crayb


connected tocrayb.ciemat.cs.
220 crayb FTP sewer (Version 5.2 Fri Sep 7 1409:58 CDT lW) ready.
Name (crayb:garcia): bpez
331 Password required for lopez
Password:
230 User lopez logged in.
EIem0tesystemtypeisUNl.X.
Using binary mode to transfer files.
ftppwd
257 " l u s u a r i d d p e z ' * is current dirrctorg.
f t p cd programas
250 CWD cwnmand successful.
iqDgetmairrc
200 PORT command successful.
150 Opening BINARY mode data connection for maiac (23208 bytes).
226 Transfer complete.
23208 bytes received in 0.12 SecOIIds (L-2 Kbytesls)
f t p close
221 Goodbye.
r t p open inf2
Connected to inf2.ciemat.a.
220 inf2.ciemaLc~FTP server (Digital UNM Version 5.60) ready.
331 Pasword required for garcia.
230 User garcia logged in.
RemottsystemtypeisUNIX.
using binary mode to transfer fk .
r t p $r f
PWd
257 "lusrlusuaridgarcia**is current dirrctory.
Is -cF
200 PORT command successful.
150 Opening ASCII mode data connection for hi& (130.206.11.244,23!4).
...
226 Transfer complete.
f t p rstatus
211-inf2.ciemat.c~ FTP server status:
Version 5.60
Connected to daxp.aemat.cS
Lagged in as garcia
TYPE ASCII, FORM:Nonprint; STRUcture: File; transfer MODE Stream
211- No data connection
211 Ead of status
f t p quit
221 Goodbye.
daxp$

350 -
I2 COMUNICACION ENTRE SISlEMAS
Pronramas de Uti1idiu-lUNIX
i - . 7 ....
',

Descripcidn
La utilidad rlogin (remote login) establece un login remoto, conectando nuestro terminal local
a1 sistema UNIX de un host remoto especificado.

Formato
rlogin [-opciones] host-remoto

Opciones
-8 Permite la cran~misi6nde datos de 8 bits. Si esta apci6n no es especificada, la utili-
dad rlogln usa datos de 8 bits y el octavo bit de cada byte es eliminado.

-ec Cambia el carktex escape de defecto par el carkta especiEcado en c. El carkter


escape de defecto es el signo tilde (-).
-I usII(ui0 Utiliza el nombre de usuario especificado en uszcCui0 como el nombre de login re-
mote, en vez del mismo nombre de usuario que el del usuario local.

A rgumentos
host-remoto Especifica el nombre del host remoto al cual vamos a conectarms.

Conexih
El tip0 de terminal del host local es pasado al host remoto (como si fuse obtenido de la variable
de entorno TERM del host local). El tamafio de la ventana, y cualquia &io de tamaAo
transmitido, tambien es pasado al host remoto si eSte lo soporta.
Si en el command-line rfogh no especificamos la opci6n -1, la utilidad rlogin intentaril estable-
cer una conexi6n con el host remoto especificado en host-remoto bajo el mismo nombre de
usuario que el nombre de usuario del host local. Si especificamos la opci6n -I usuario, el nom-
bre de usuario especificado en u s m ' o serA usado en el host remoto. En ambos casos, el host
remoto s610 permite el ac.x;esosi una de las siguientes condiciones es satisfecha:

Si el nombre del hosz local est4 bcluido en el fichero /efcLhosts.equkdel host remoto, el
usuario local no es un usuario supewer, y la opi6n -I usuario no es especifkada.
I

Si el nombre del host local esta incluido en el fichero xhosfs del dirtxtorio de defecto del
usuario del host remoto. Si la opcidn -I usuari0 es especificada, el nombre de usuario del
host local tambi6n debe estar incluido en el fichero.rhost&del host remoto.

Si no es satisfecha ninguna de atas condiciones, el host remoto visualiza unprompt para que el
usuario introduzca el password. El intento de login remoto se finaliza presionando el carficter
escape tilde seguido del signo punto (-.) en el prompt fogin:o password:. La conexi6n rlogin a1
host remoto se termina con el comando exit, o presionando la secuencia <Ctrl-d>.

12 -COMVNICACION ENTRE SISTEMAS 351


Programus de Utilidad UNIX

Fichero .rhosts
El fichero .rhos& es un fichero opcional, que permite a los usuarios incluir entradas con nom-
bres de hosts remotos y nombres de usuario remotos, para ham login remoto en esos hosts y
con esos usuarios sin que sea requerido el identificador de usuario cuando esos usuarios ejecu-
tan las utilidades remotas rlogin, rsh y rcp.

Los usuarios incluidos en el fichero .rhos& pueden realizar las siguientes operaciones:

Copiar fickos (usando el comando rcp) entre el host local y el host remoto, y viceversa.
Ejemtar comandos del shell (usando el comando rsh) en el host remoto desde el host local.
H a m autologin remoto (usando el comando rlogin) con el mismo nombre de usuario que
el del usuario local sin que sea requerido unpussword.

siguientes puntos describen 10s requisitos del fichero .rhos&:


El fi-o .rhos& debe residir en el directmi0 de defect0 del usuario del host remoto.
Por rmnes de seguridad, el fichero.rhos& debe p e r t e m al usuario remoto, y s610 podri
ser lefdo y escrito par el usuario propiebrio del fichero (modo 600).
Puede sernos ~ I ttener
il en nuestro host local un fichero .rhos& para identificar que usuarios
pueden acceder a nuestros ficheros.
Cada entrada del fichero .rhos& identifica un host remoto y un usuario remoto. El formato de
una entrada del fichero.rhus& es el siguiente:

host-remoto [usuario-remoto] # comentario opcwrad


Donde:
host-remoto Es el nombre del host remoto al que vamos a conectamos. (En realidad, es el
nombre del host local desde el cud vamos a conectamos).
usuario-remooto Es el nombre de usuario remoto con el que vamos a h am login. (En realidad,
es el nombre de usuario del host local con el que vamos a haax login remoto).
Cuando se crea o modifica un fichero .rhos&, tener en cuenta las siguientes reglas:
Separar con espacios o tabuladores el nombre de host remoto de nombre de usuario remoto.
Si el host remoto est4 ubicado en un dominio diferente al del host local, en host-remoto
debe especificarse el nombre completo del dominio.
Si omitimos el nombre de usuario remoto (usum’o-remto),se asume que el nombre de
usuario del host remoto ser6 el mismo que el del usuario del host local.
Si se va a ham login remoto con un nombre de usuario distinto al del usuario del host l e
cal, debemos especiiicar el nombre de usuario remoto en el fichero .rhos& remoto; y en el
command-line rlogin debemos espificar la opci6n -1 usuario, siendo usuario el nombre
de usuario remoto (distinto al del usuario local).

El siguiente es un ejemplo de fichero .rhosts remoto; donde, por ejemplo, el identificador de


usuario de los hosts locales es el usuario garcia:

$ cat .rhos&
daxp # El userid del host remoto ser6 el mismo que cl del host local daxp (garcia).
id2 garcia # garcia del host local inf2 podri hacer login remoto con distinto userid.
crayb lopez # El usuario lopez del host remoto crayb puede acceder a1 host local.

352 -
12 COMUNICACION ENTRE SISlEMAS
Programas de Utilidad UNIX
I I. s,. :i

NOtaS
Una utilidad usada con mu& frecuencia para hacer Zugin remoto es la utilidad telnet, ya que
permite la conexi6n entre hosts remotos sin tener en cuenta el sistema operativo de cada rdqui-
M (ver “Utilidadtelnet”, pQha 298).

Ejemplos
En el siguiente ejemplo, el usuario Zopez, alojado en el host local daxp, hace login al host re-
mot0 i@. El usuario Zopez tiene el mismo nombre de usuario en 10s dos hosts. Por supuesto, el
nombre depassword tecleado no es visualizado. LA salida producida despuds de introducir el
password es la propia del sistema al ham un login:

I daxp$ rlogin inj2


Password:
Last login:Fri Apr ...
...
inf2$
En el siguiente ejemplo, el usuario lopez, hace Zogin al host rem0 crayb. El usuario Lopez te-
clea su password per0 el sistema visualiza el prompt logkc para que introdum un nombre de
usuario, indicando que el host cruyb no reconoce el idenWicador de usuario lopez. Entonces, el
usuariolopez decide finalhr el Zogin remoto tecleando la secuencia tilde punto (-.):

daxp$ dogin crwb


UNICOS Release 1a.o
Password:
Logi inwmct
login: -.
rlogin: dosed connection.
daxp$

En este ejemplo, el usuario lopez especifica el nombre de usuario remoto en el command-line


rlogin y hace un login carrecto. (Cuando 10s nombres de usuario de ambos hosts, local y remoto
son diferentes, debe especificarsela apci6n -1 usuario, aunque est6 establecido el autologin):
daxp$ rlogin -1 fopez crayb
Password:
Last login: Fri Apr ...
...
crayb$

En el siguiente ejemplo, la usuario Carolina hace un autologin remoto a1 host hpcm, con el
mismo nombre de cuenta (Carolina)que la del host local; por supuesto, la usuariocarolina tiene
establecido en el host remoto hpcm, el fichero .rhosts con la entrada daxp o daxp carolina:

daxp$ dogin hpcm


Last logia: Fri Apr ...
...
hpcm$
...
hpcm$ exit
rlogin: connection dosed.
daxp$

~~

I2 -COMUhTCACION ENTRE SISTEMAS 353


Progmmas de Utilgad UNIX

UtiltYad rsh
Descripcih
La utilidad rsh en la versi6n Berkeley, y remh en la versi6n System V, se utiliza para conec-
tarnos con un host remoto y ejecutar comaflcIos del shell en dicho host, desconectandonos de ese
host remoto una v a finalizada la ejecuci6n del comando especificado.

La utilidad rsh requiere la existencia de un fichero.rbsts en el directorio de defect0 del usuario


del host remoto, en el que estara incluido el identificador del host local y del usuario local (ver
"Fichero.rhos&', pilgina 352).

Formato
rsh [-opciones] host-remio [comundol [argwnenfo ...1
Opciones
-d Activa la depuraci6nde 10s sockets usados en la comunicaci6n con el host moto.

-I us& Especifica que la utilidad rsh va a hacer login en el host remoto con el no- de
usuario especifid enusuario, en vez de con el nombre de usuario local.
-n Redirige la entrada del standard-input del comando rsh al fichero/dev/dulz.

Argumentos
host-remto Es el nombre del host remoto en el que sera ejecutado un oomando del shell, o
sera hecho un login remuto.

comdndo Especifica el comando del shell que serg ejecutado en el host remoto. Si en el ar-
gumento cornando no se especifica un comando del shell, la utilidad rsh har6 un
login remoto en el host especificado, como con la utilidad rlogin.

argunzento Especifica el argument0 o argumentos del comando del shell remoto.

Conexidn
Si no especificamos la opci6n -1el nombre del usuario local es usado en el host remoto. Si la
opci6n -I mu&o es especificada, el nombre de usuario especificado en usuario es usado en el
host remoto. En ambos casos,el host remoto s610 permite el acceso, si al menos una de las si-
guientes condiciones es satisfecha:

Si el identifador de usuario local no es el de un usuario supewer, y el nombre del host


local est4 incluido en el fichero/etc/hosts.equiv del host remoto.

Si el identificador de usuario local es el de un usuario supewer y la veirficaci6n del f i c b


ro/etc/hosts.eqUiv falla, el directorio de defecto del usuario remoto debe contener un fick-
ro .rb& que incluya el nombre del host y del usuario local.

354 -
I2 COMWNICACXONENTRE SISTEMAS
Proammas de U t i l W UNIX
I , -*

La utilidad rsh envia el standard-input del host local al comando remoto, y recibe el standard-
output y el standard-errordel comando remoto.

Si mientras se est4 ejecutando el comando remoto, tecleamos una seM de intermpci611, por
ejemplo <Ctrf-c>,&a es pasada al comando remoto. Usualmente, el proceso de la utilidad rsh
local termina cuando el comando remoto termina.

Si queremos que la maquina remota int-ete los caracteres especiales del shell, encerrarlos
entre comillas. Si los metacaracmes no son encerrados entre comillas, entonces son interprets-
dos por el shell local.

Ejemplos
Se asume, que en 10s ejemplos siguientes, existe un fichero .rhosts en el directorio de defecto
del usuario remoto, con el nombre de usuario y del host local. El siguiente comando rsh, ejecu-
tado desde el host local daxp, visualiza el espacio libre de disco del host mot0hpcm:

daxp$ rsh hpcm df

El siguiente command-line rsh, agrega el ficheto cupihdo3 al fichero capitufo2(ambos ficheros


e s t h ubicados en el directop.io de defect0 del host remoto inf2):

daxp$ rsh inf2 cat capifzh3'*>>**capituh2

El siguiente ejemplo agrega el fichero cupihtfo2 del host remoto infl al fichero cupitulol del
host local daxp:

En el siguiente ejemplo, el usuario lopez del host local cruyb (bajo System V) ejecuta el coman-
do Is -al en el host remoto ibml con un nombre de usuario distinto al del host local:

crayb$ remh ibml -1rcunirez k -al

El siguiente script, llamado identifca, verifica la existencia de la cuenta del usuario o usuarios
especificados en el command-he coxno argumentos del script cuando 6 t e es ejecutado, indi-
cilndonos: la existencia o no de la cuenta, el nombre del host, el nombre de cuenta y el nombre
real del usuario:

$ cat i&t@Zca
#!fbinfksh
-
# script: identifii Verifica la existencia de una cuenta dada.
#
echo ""
bost=*hostname*
for i
do
- -
awk -F: '{ printf"H0st: '$host' Cuenta: %-8s Nombre real: %&I",
/etc/passwd I grep -i "si"
$1, $5 \

if [ $? I= 01
then

fi
-
echo "Host: 'hostname' La cuenta: Si NO existe."

echo ""
done

12 -COblUNIC4CION ENTRE SISTEMAS 355


Programas de Utilidad UNIX

Supongamos que el script identifica pertenece al usuario operator y lo ejecuta desde el host lo-
cal daxp, entonces visualizarii UM salida parecida a la siguiente:

daxp$ identifica blanc0


- -
Host:daxp Cuentil: blanc0 Nombre real: Fernando Blanco MarciIla,Edif.22-206,6246,

Si el usuario operator copia el script identifica a un host remoto, por ejemplo al host hj2, des-
pu& lo podria ejecutar desde el host local daxp. (Para el capiado de fichera remota, ver "Uti-
li& ftp", pagina 340 y "Utili& rcp", p i i g i ~357). AI emitir el siguiente command-line rsh, el
usuario operator obtenctria UM salida parecida a la mostrada bajo el comando rsh:

daxp$ rsh i d 2 flllsers/oper/operator/bin/identificablanco pepit0


-
Host:W.ciematcs Cuenta: psa -
N o d r e real: Manuel Blanco
- -
Host:Wsiematcs Cuenta: bknco Nombre real: Fernando Blanc0 MarcillaJM.22 k p . 128,6246,
-
Host:id2.ciernatcs Int cuenta. pepito NO aiSte.

Si el usuario operator necesita saber en un moment0 determiatdo, la existencia de ciertas


cuentas en alguno o en todos los ordenadares de la red, poWa copiar el script ldentifca en to-
dos sus subdirectorios bin de los hosts & la red, &put% crear en su host local daxp un script
mentl como el siguiente, llamado identifica-t, y ejecutarlo desde el host local:

$ cat i&nti.jka-t
#!/biih
-
# script: identicia-t V d i la existencia de una cuenta dada en UII host remota.
#
if sa *q 01
then
echo **"
echo "Us0 eorrecto:identifica-t cue& *.
echo "**
exit1
fi
clear
whie [ "$host" != **s"]
do
echo "Teclea el numero de host:*'
-
echo 'It 1 daxp"
-
echo *It2 inn'*
-
Who * I t3 cmyb"
....
echo 9 t t - todos"
-
echo 'It s SALIR"
echo "-> k"
read host
case$host in
1)lusrl~ers/operator/operator~~identir $* ;;
2) rsh i d 2 /lusers/oper/opentflidenWica $* ;;
3) rsh uayb /usuariddoperator/binlidentif'ica $* ;;
...
t) / u s r / ~ r d o p e r r a t o r ~ ~ i d e$*n t;;i ~ ~
tsh i d 2 /Iusers/operloperator/bin/identifica$*
tsh crayb /Isuanos/ceulopera~Ptorminlidenti~ca $*
...
s) exit 0 ;;
*) echo "Opcion $host no permitida." ;;
eSaC
done

356 -
12 COMUN1ChClON ENTRE SISTEMAS
Promumas de Utilidd UNIX

Utilidad rcp
Descripcidn
La utilidad rep (remote copy) es usada para transferir ficheros entre hosts con sistemas UNIX.
La utilidad rcp permite copiar uno o maS ficheros entre un host local y un host remoto, entre
dos hosts remotos o entre el mismo host remoto. La utilidad rep no dispone de un juego de co-
mandos, la infmmaci6n se la debemos suministrar en el command-line rcp.

La utilidad rep no visualiza un prompt para que la suministremos un nombre de password. La


utilidad rep requiere la existencia de un fichero .rhsfs ubicado en el directurio de defecto del
usuario del host remoto, en cuyo fichero estarh incluidos los identificadures del host y del
usuario local (ver “Fichero .rhosts”, p@na 352).

Formato
rep [-opciones] origen destino

Opciones
-p Conserva la f e c b de modificaci6n y el modo de acceso del fichero de origen en la copia
de destino. Por defecto, el modo de acceso y el propietario del fichero de origen es ccm-
smado en el fichero de destino, si &e existe. Narmalmente, si no se especifica la op-
ci6n -p y el fichero de destino no existe, el modo de 8cceso del fichero de destino es
modificado por la utilidad umask del host remoto, y la fecha de modifcaci6n del f i c b
ro de destino es establecida a la fecha en la que hte es copiado.
-r S610 es usada en la copia de directorim. Copia recursivamente los ficheros y subdirecb
rios del directario de origen en el directurio de destino.

Argumentos
origen Especifica uno o maS ficheros locales, ficheros remotos o directories.
destino Especifica el fichero de destino o directorio.

Si en 10s argumentos origen y destino no se especifica un host remoto, la utilidad rep asume el
host local y a d a como la utilidad cp (ver “UtiLidud cp”, pfigina 58). L a argumentos origen y
destine pueden tener, respedivamente, los siguientes formatos:

host-remoto:twmbre-fihero nombre-usuario@h:n~mbremoto.’trcEmbre-fic
host-locdnombre-fichero nombre-usuario@,hombre-fichero
La cadena nombre-fiheru puede contener un nombre de path absoluto o relativo de un fichero
o directorio. Si no se especifica ninghpath de fichero o directorio o el path est6 incompleto, la
utilidad rep asume el directorio de defecto.

C u d 0 se copian ficheros o directories a o de un host remoto, los nombres de path en los hosts
remotos deben ser protegidos con caracmes barra inversa (I comillas
), (“) o ap6strofos (‘) para
que los caracteres especiales Sean interpretados en el host remoto.

-
I2 COMUNICACIONENTRE SISTEMAS 357
Pmgratnas de UtiWizd UNIX

Si no es especificado un nombre de usuario, se asume que el nombre de usuario local es el mis-


mo que el del host remoto. Si el nombre de usuario del host 1ocaI difiere del nombre de usuario
del host remoto, &te debe especificarse de la forma: nombre-uswrio@host-remoo:,y ate
nombre de usuario sera usado como nombre de usuario del host remoto. En cualquiera de los
dos casos,el host remoto permite el acceso si una de las siguientes mndiciones es satisfecha:

El nombre del host local estA incluido en el fichero /etc&sts.equiv del host remoto y el
usuario remoto no es el usuario root.

El nombre de usuario local y el nombre de host local &An incluidm en el fichero .rhsts
del directorio de defecto del usuario del host remoto.

Notas
Otra utilidad muy usada en la copia de ficheros remotos es la utilidad ftp, la cual permite copiar
ficheros entre un host local y un host remoto, y viceversa, sin kner en cuenta el sistema operati-
vo de cada m a q u i ~
(ver “Utilidad Ap”, pagina 340).

Ejemplos
Se asume que en los siguientes ejemplos, el usuario local tiene establecido un fichero .rhos& en
el directorio de defecto del usuario remoto con 10s nombres de usuario y host locales. El si-
guiente ejemplo copia el fichero datus.sal ubi& en el directorio de traba. en curso del host
lacal darp, al directorio de defect0 del host remoto inf;! con el mismo nombre de fichero que
tiene en el host local (dizfos.sal):

daxp$ rcp datos.sal inft:


El siguiente command-line q i a el fichero report ubi& en el directorio texfos del host local
duxp, al directorioprocs del host remoto cruyb con nombre informe:

daxp$ rcp textosheport crayb:procs/nfom

El siguiente comando rcp capia todos 10s ficheros del directorio programas del host remoto
fusc, al directorio progs de nuestro host local daxp con los mismos nombres de fichero que tie-
nen en el host remoto:

daxp$ rcpfusc:programusSr progsl

El siguiente command-line rcp copia el contenido (ficheros y subclirectorios) del directorio suli-
dus de nuestro host local daxp, al directorio de defecto del host remoto ibrnl, con 10s mismos
nombres de directorio, ficheros y subclirectorios que los del host local:

daxp$ rcp -r salidas ibml:

El siguiente ejemplo copia el fichero enlucefdel directorio de trabajo en curso del host local
darp, al dirmorio progsfor del host remoto cruyb con el mismo nombre de fichero que el del
host local, usando en el command-line rcp un nombre de usuario distinto al del host local, y
conservando en la copia el modo de acceso y la fecha de modifkaci6n del fichero local:

daxp$ rcp -p enlacef gwciiz@crayb:progsfor/

3S8 -
I2 COMUNICACION ENTRE SISlEMAs
Programus de Utilidad UNIX
. . '* <.I XiT

13 - UTILIDAD make

Introduccwn
La utilidad make mantiene, actualiza y genera fickos de destino (tfpicamente programas eje-
cutables) ejecutandocomandos del shell contenidos en un fichero de descripci6n (makern), pa-
ra crear 10s ficheros correspondientes, controlando estos comandos y la relaci6n entre los fick-
ros implicados.
Cuando tenemos un program coqlejo con muchos fickos fuente, ficheros header y ficheros
objeto que dependen o se derivan uno6 de otros, tendremos que volver a compilar algunos o to-
dos losficheros dependientes; esta aperaci6n podemos realizarla de forma autodtica con la
utilidad make. Un cas0 tfpico de ficheros dependientes, es en el que 10s ficheros obje€oson de-
rivados & 10s fickos fuente carrespondientes.

La utilidad make examina la relaci6n entre las fechas de modificaci6n de 10sficheros implica-
dos, actuatizando aquelios fickas derivadas (Ilamados destino) que tienen las fechas de modi-
ficaci6n anterimes a las fahas de modifcaci6n de los fichaos de 10s que son derivados (llama-
dos requisitosprevios).

La utilidad make usa unfichero de descripcidn (convencionalmente llamado d e f l e ) ubicado


en el dhxtorio de trabaJoen curso para guardar la dependencia entre ficheros. Esta especifica-
cidn de dependencia amtiene una descripci6n de la relad6n entre los ficheros implicados y 10s
comandos del shell que deben sa ejecutados para actuabu* los ficheros de destino, reflejando
10s cambios de la requisitos previa.

Cada especijicucidn de dependencia, consta de un destino y de requisitos previos opcionales,


que junto con 10s comandos asociados que van a ser ejecutados, construirh el fichero de desti-
no (usualmente, 106 comandos compilan y hacen link al fichero de destino) cuando un requisito
previo es m6s nuevo que el destino.

Adicionalmente, la utilidad make dispone de reglas de &stino, r e g h de inferencia, reglas de


defect0 y definicidn de mucros que infieren la relaci6n entre el destino y 10s requisitos previos
para simplificar el mantenimiento de programas.

En la dependencia deficheros existen dos tipos de reglas: de inferencia y de destino:

Las reglas de inferencia especifican c6mo va a ser actualizado un destino.


Las reglas de destino especifican c6mo construir et destino.
!
La utilidad make intenta ejecutar las acciones requeridas para asegurar que 10s destinos especi-
ficados son actualizados. Un fichero de destino es considerado no actualizado, si su fecha de
modificaci6n es maS antigua que la de sus requisitos previa, o si et destino no existe.

La utilidad make trata todos 10s requisitos previos como destinas propios, y asegura que 10s re-
quisitos previos de un destino son agregados recursivamente a la lista de ficheros de destino,
actualizandolos y proces&udolosen el orden en el que aparecen en la regla. La utilidad make
usa las fechas de modificaci6n de 10s ficheros para determinar si 10s destinos currespondientes
no est4n actualizados. Los ficheros no especificados se consideran no actualizados.

-
13 Ul'lLIlMD make 359
Programas de Utilidad UNIX

Despu& que la utilidad make se ha asegurado que todos 10s requisitos previos de un destino
est411actualhadm y el destino no, 10s comandos del shell asociados con la entrada del destino
son ejecutados. Si no hay mmandos incluidos para el destino, &te es tratado mmo actualizado.
Siempre que es hecho un cambio en cualquiera de 10s ficheros que componen un programa, la
utilidad make crea 10s programas finales, recompilando solamente aquellas partes afectadas di-
rectamente o indirectamente por el cambio. h i pues, podemos considem que las operaciones
bhicas de la utilidad make son las siguientes:

Localizar el fichero de destino en elfichero de descripcibn.


Asegurar que todos 10s fichaos de los que depende el destino (los ficheros que se necesitan
para crear el destino), existen y son actualizados.
Crear el fichero de destino si cualquiera de los ficheros generadores (requisitos previos) ha
sido modificado mAs recientemente que el de destino.

Grcifica de dependencia
La utilidad make actualiza un destino, s610 si &e depende de los ficheros que son maS nuevos
que los del &tino; par lo que el fichero de destiw, ser& generado si 10s ficherm de reqUisito6
previos fueron modificados desput?~que el fichero o ficheros de destino. La aperaci6n de la uti-
lidad make depende de la capacidad para localizar la fecha y hora en la que un ficko tuvo la
tlltima modificaci6n; es decir, la utilidad make busca la relaci6n gr6jica o jerdrquica de &pen-
dencia entre fichaos.

A continuaci6n se muestra la gr&fica de relaci6n de dependencia junto con el fichero makefile


correspondiente a dicha gr&ficapara c ~ e a rel f i c k o de destinofonn:

.
num h table.h

Ficheros header

Ficheros fuente C

Ficheros objeto

Fichero ejecutable

360 13 - u n u ~ ~ m a k r
Programas de Ulilidad UNIX
-/.. ‘t r k

Cada uno de 10s requisitos previos de una linea de dependencia puede sa un destino en otra li-
nea de dependencia. Par ejemplo, 10s ficheros siZe.0 y Zengtku son &tinos en otras lfneas de
dependencia. Aunque este es un ejemplo sencillo, el anidado de las especificaciones de depen-
dencia puede crear UM jerarqufa compleja que especifica la relaci6n entre muchos ficheros.

El fichero ejecutablefum depnde de 10s ficheros Objeto, mientras que cada uno de los ficheros
objeto depende de sus respectivos ficheros fuente y del fichero header f u m h . A la vez, el fi-
cherofonnh depende de utros dos ficheros header.

La utilidad make usa un fichero de descripci6n (makefice) para describir la relaci6n entre el
programa fuente original y el programa ejecutable final. El programa final es considerado el
destino de la operaci6n de la utilidad make El programa final est6 en la cima de una jerarqda
piramidal de dependencia.

-
El siguiente fichero make$& es usado para describir la jerarqufa de dependencia del programa
ejecutablefonn:

$ cat makefice
# Fichero makefde
If

form siae.0 length0


cc -o farm size.0 1ength.o

size.0: sizer f0rm.h


cc c &.e

1ength.o: 1ength.c f0rm.h


cc c kngthc

forah: numb tablah


cat numh tablch > f m h

La tiltima lpnea de este fichero &e$& muestra que en una lfnea de comandos de construcci6n
del destino, podemos especificar cualquier comando v6lido del shell.

Una vez creado el fichero make@, el siguiente comando make Wco bastar6 para ejecutar las
operaciones necesarias para genaar el programa ejecutablefonn:
$ make

La utilidad make opera usando principalmente, las siguientes fuentes de infarmaci6n:

Unfichero de descripcibn (makefile) suministrado por el usuario.


Los nombres de fichero y las fechas de la l U n a modificaci6n de los ficheros implicados.
Reglas de defect0 que facilitan la codificaci6n para generar el destino.
0 Comandos del shell asociados con la dependencia entre ficheros que al ser ejecutados gene-
rarh el destino final: el nuevo fichero ejecutable.

La utilidad make puede ser utilizada como parte del desarrollo de software, ya que la utilidad
make se comporta como un int&prete de comandos, teniendo capacidad para: discernir en que
momento los ficheros que componen un programa heron actualizados, identificar las partes que
dependen del program y recompilar solamente las partes necesarias para actualizar y crear el
programa final. Estas acciones reducen el us0 de recursos del sistem y economizan consumo de
CPU durante la vi& de un proyecto de software importante.

-
13 UTIUDAD make 361
Programas de Utilidad UNIX

Formato
make [-opciones] [definicinn-mucro ..I [nombre-destino ..I

Opciones
-b Usada con fines de compatibilidad en versiones antiguas de ficheros mukern.

-d Modo depuraci6n Visualiza informaci6n relacionada con los ficheros examinados.

e Hace que las variables de entorno de la utilidad make, incluyendo las que contienen
valores nulos, anulen las definiciones de macros de los ficheros d e f i k .

-ffihero Es el nombre de un fichero de descripci6n (equivalente al d e @ , ver “Fichero de


descripci6n (makefile)”,pagina 363), indicando que el fichero especificado e n f i b
ro sera lefdo por la utilidad make, en vez del fichero d e @ de defecto. Si en el
argumentofidzero especificamos un car- gui6n (-) como nombre de fichero, la
utilidad make lee el standard-input,y &e es usado como el fichero de descripci6n.
Si no especificamos la opci6n -f, la utilidad make examina el directcnio en curso pa-
ra localizar y leer un fichero de descripci6n llamado makefile, Makefile, s.m(zkLfle,
s.Makefle, d e f i k p y Make@p. Puede usarse m& de un fichero de descripci6n
especificando maS de una opci6n -ffihero, siendo procesados en el orden dado.

-i Ignura 10s c6digos de mor (exit-stufusdistintos de cero) devueltos por 10s comandos
invocados, continuando la ejecuci6n. Esta apci6n es adloga a la especifcaci6n del
destino especial .IGNOREsin requisitos previos, en el fichero de descripci6n.

-k N e n e el proceso del destino en curso si se produce un mor, par0 la actuahm‘6n


continfia en Was zonas que no dependen de la entrada que fall&

-I Ignora el fichero de descripci6n del sistema (MAKEFlLB, Makeconf, etc.) si &e


existe. El nombre de fichero d e @ del sistema pueden variar @n la instalaci6n.

-n Modo no ejecuci6n. Visualiza en el standard-output los comandos que podria e$-


cutar la utilidad make!, per0 no los ejecuta, a no ser que dichos comandos vayan pre-
cedidos de un caracter m& (+). Los comandos que van precedidos de un carikter
moba (@) tambien son devueltos al standard-output sin ejecutarse.

-P Visualiza en el standard-output las definiciones de macros y las descripciones de


destino antes de ejecutar 10s comandos que generaran el destino.

-4 Devuelve un exit-status ceco si los ficheros de destino son actualizados. Si los fiche-
ros de destino no son actualizados, la utilidad make devuelve un c6digo de rdorno
distinto de cero. No ejecuta los comandos del shell contenidos en el fichero d e f i -
le, a no ser que vayan precedidos del sign0 m& (+).

-r Borra la lista de sufijos e ignora las reglas de defecto. Si esta apci6n es especificada,
el sistema visualiza el mensaje: No s u m fist. La apei6n -r es &oga a la especifi-
caci6n del destino especial .SUFFIXES sin requisitos previos, en el fichero d e f l e .

-S Modo silent. No visualiza 10s comandos cuando son ejecutados. Esta opci6n es equi-
valente a la especificaci6n del destino especial SILENT,en el ficherod e w .

362 I 3 -UTlUVADmakc
Programas de Utilidad UNIX
y --*% 1. .?
-S Finaliza el proceso de la utilidad make si se produce un mor mientras se ejecutan
los comandos usados para generar el destino actualizado. Esta opci6n es el defecto y
es opuesta a la opci6n -k

-t La opci6n -t (touch) actualizala fecha de modificaci6n de los ficheros de destino a la


fecha en curso sin ejecutar los comandos asociados con cada destino. Los destinos
que tienen requisitos previa per0 no comandos o que ya estaban actualizados, no se-
r h actualizatx con esta apci6n. La utilidad make visualiza un mensaje por cada fi-
chero de destico tratado con la apci6n 4

A rgumentos
definicidn-macro Especifica UM o maS definiciones de macros usadas par la utilidad make pa-
ra la sustituci6n en las Uneas de dependencia y en las Hneas de comandos.
A d e d de las macros definidas par el usuario, la utilidad make dispone de
macros especiales e internas. (Ver "DDefinicidn de Macros", pAgina 376).

nombre-destino Es el nombre o nombres del fichero o ficheros de destino que serh genera-
dos par la utilidad make Si en el commund-finemake no es especificado
ni@n mmbre de destino, la utilidad make usaril el primer f i c k o de desti-
no emntrado en el fichero de descripci6~4que no sea un destino especial o
una regla de inferencia para us0 general.

Fichero de descripcio'n (makefile)


Elfichero de descripcidn usado pop la utilidad make es un f i c k o de t a b , convencionalmente
llamadomakefile, Make?, &make?, s.Makem, make file,^ y M&@le,v. (El prefijo s. indi-
ca que el fichero de descripci6n es mantenid0 por el sistema SCCS,y el sufijo ,v indica que el
fichero de descripci6n es mantenid0 par el sistema RCS). Si estos nombres del fichero de des-
cripci6n e s t h ubicados en el directario de trabajo en curso, un comando make llnico es gene-
ralmente suficiente para gemar el destino, sin tener en cuenta el niimero de ficheros modifica-
dos desde la W m a invocaci6n de la utilidad make.

EI &mino makefile es usado para referirse a &quia regla proporcionada par el usuario, si
&ta eta incluida en dicho fichero; y para definir las dependencias entre el programa ejecutable,
su c6digo fuente compilado y su u5digo fuente original.

La utilidad make contiene un conjunto de reglas de defecto, las cuales pueden ser incluidas en
el fichero d e f i l e para ayudarnos a actualizar 10s destinos. Si en el command-finees especifi-
cada la apcidn -r o en el fichero makefile es especificado el destino especial .SUFFIXES sin re-
quisitos previos, las reglas de defecto son ignoradas y la lista de sufijos es barrada. (Ver "Regfus
de inferencia", pagina 367). Si una misma regla o macro es definida d de UM vez, el valor de
la regla o de la macro sera el valor de la espedficada en atimo lugar.
El fichero makefih?puede contener los Siguientes tipos de Uneas:

Lineas de comentarios y blancas.


Lfneas de esPecifcaci6n de la dependencia entre ficheros.
Lfneas de comandos asociados con la dependencia para construir el destino final.
Lfneas de definici6n de macros.
13-Ul7UDADmake 363
Programas de Utilidad UNIX

El formato general de un fichero de descripci6n omaRefjle es el siguiente:

[# ...I
[demih-macro][# . .I
destinol [destin02 ...I :[dependencia ...I [;cornando]
etabuludorxomando
etubuladorxomando
...
linea que no comienzcr con un <tabulador>

Generalmente, las lineas de un fichero pueden ser continuadas fbaktndolas con un


signo b m inversa 0).Cuando un carficter barra inversa 0) es encontrado en un fichero make-
jik, l a caracteres bama inversa, nueva lfnea y tabulador que van a continuaci6n, son teempla-
zados par un cafacter blanm Cmico.
Los comenti-iriacomienzan con el cariktm nfimero (#), y todo el texto que sigue a este simbolo
hasta el final de la linea es considerado parte del comentario. Las lfneas blancas y las que UF
mienzan con un cariktm niimero (#), son ignoradas.

Los destinos y las dapende& son nombres de fichero, y si &os contienen metacaracteres
del shell, como el asterisco (*) o la intmogaci6n (?), son expandidos cuando la Unea es evalua-
da. Los commfos pueden aparecer despu& del signo punto y coma (;) en la lfnea de dependen-
cia o en las lineas que siguen a la lfnea de dependencia, en el rIltimo caso, las lIneas de comau-
dos deben comenzar con un cariktm <tabuladon.

Si el fichero d e @ no existe, la utilidad make ejecuta la comandos del shell basandose en


las dependenciasimplfcitas y en dichos comandos para genaar el destino.

El administrador del sistema puede definir y controlar ficheFos de descripci6n o conQuraci6n


( U E F I U , Makeconf, etc.) de la utilidad make en un entorno especifico de la instalaci6n.
Este fichero de descripci6n puede contener un conjunto adicional de macros, destinos especiales
y reglas de inferencia que modificm las reglas de defect0 o agregan m5s definiciones, las d e s
usa la utilidad make.
Este fichero &ern del sistema permite definir en la instalaci6n un entomo especifco para la
utilidad make!, y es autom&kamente leido cuando dicha utilidad es invocada y antes de sa pro-
cesado el fichero makefile del usuario, a no sa que en el command-line make se especifique la
opci6n -1 u m a equivalente.

Especificucibn de la dependencia
Normalmente, la utilidad make examina en el fichero makefile la dependencia entre ficheros.
Una especificucidn de dependencia es una entrada que consta de uno o mlis ficheros de destino
y de cero, uno o maS requisitos previa. Este hecho crea una relaci6n donde el &tho depende
de uno o mi& fichaos de requisitos previos. Si la fecha de modificaci6n de alguno de 10s requi-
sites previos es mAs reciente que la del destino, la utilidad make actualiza y crea el destino ba-
sibdose en 10s comandos del shell que van a continuaci6n de la linea de dependencia.

Una linea de dependencia es definda con el siguiente formato:

destinol [destim2 ...I :[:I [requisite-previo ...I [; cornando]

364 I3 -UllUDADmakc
Programas de Utilidad UNIX
-,.<s
a -
3- $-
La Ihea de dependencia comienza en el margen izquierdo, y pueden espificarse uno o maS
destinos y cero, uno o varios requisitos previos separados por espacios. La relaci6n exacta entre
el destino y 10s requisitos previos es determinada por el operador que 10s separa, que es un ca-
ratter dos puntos (:) usado cuando el destino aparece en una linea de dependencia y dos caracte-
res dos puntos (::) usados cuando el destino aparece en varias lineas de dependencia.
El us0 de requisitos previos no es obligatorio, per0 si no son especificados, el command-line
make siempre es ejecutado cuando el destino es dado. A continuaci6n de la lista de requisitos
previos puede especificarse un comando con tal de que vaya precedido de un carkter punto y
coma (;), y todas las lineas subsiguientes que comiencen con un tabulador son consideradas a+
mandos del shell que van a ser usados para actualizar el destino.
En la especificaci6n de la dependencia entre ficheros existen dos t i p de reglas:

Reglas de destino,las cuales pueden kner maS de un destino.


Reg& de inferencia, las cuales s610 tienen un destino, con al menos un signo punto (.) y
nimn signo barra inclinada (0.
El siguiente es un ejemplo sencillo para mostrar dependencia, usando entracks altemativas o
etiquetas en el fichero makefile:

$ cat makern
dpk
@echoEste axnando ser6 ejecutado primem.

s t a r t dpte
@echo Fkte eorrrando cs dcpendiente de dpte.

$makestart
Este eomando ser6 ejecutado primera
Este axnando cs dependiente de dpte.

En este makefice, 10s comandos subordinados de la entrada start: son dependientes de la entrada
dpte:, por lo que 10s comandos dependientes de la etiqueta dpfe: serh ejecutados en primer lu-
gar. Si no especificamos un destino inicial (entrada alternativa del d e @ ? ) en el command-line
make, la utilidad make comienza en el primer destino del mokefile, entrada dpte:. Per0 la en-
trada dpte: no es dependiente de nadie. Asf, emitiendo el siguiente command-line:
$ make
Esk comando s d cjecutado primero.

s610 s e d ejecutadoel primer grupo de comandos. (Seguramente, este noes el resultado que que-
remos obtener). Un mejor aprovechamiento seria invertir el orden de 10s g r u p & dependencia
en el makefile. De esta forma obtendremos la misma plantilla de ejecuci6n especifiquemos o no
la e€iquetastart como destino inicial:

$ cat makefile
stak dpte
@echoEste wmando cs dependiente de dpte.

dpte:
@echo Este eomando s e d cjecutado primera

$ make
Este wmando ser6 ejecutado primera
Este comando cs dependiente de dpte.

-
13 UnLlDADmake 365
P m p . de Utilidad UNIX

Reglas de destino
Las reglas de destino especifican como construir un destino. Las reglas de destino tienen el si-
guiente formato:

destinol [tiestin02 . .I :[requisito-previo ...I [; comLutd01


<tubu~or>comando
...
Ir'wa que no comierua con un <tabuhior>
Donde destim2 y destino2 son 10s nombres de fichero que dependen de los fichera especifia-
dos en requisifo-previo. Las lineas de dependencia pueden ir seguidas de lineas con comandos
del shell; dichos ColIlitndoS s e r h ejecutados una vez que las dependencias hayan sido satisfe
chas. Las beas del comando comienzan con un cardcter <tabulador> seguido de cualquier
comando W d o del shell, que generalmente sail usado para actualizar y generar el destino. No
hay Hmite espedfico para el mimero de comandos que siguen a la linea de dependencia.

La especificaci6n de una linea subsiguiente a la Hnea de comandos del shell que 110 comience
con un caraCter tabulador o un caraCter nhero (#), indica una meva entrada de destino o una
definici6n de macro. Un destino que tiene requisitos previos per0 no tiene comandos del shell,
puede ser usado para agregar a la lista de requisitos previos ese destino. S6l0 una regla de desti-
no de cualquier destine dado puede contenet comandos.

Destinos especiules
Las lineas de destino del f i c k o nuke@ que comiencen con uno de l a siguientes desfinos es-
pecides, controlan la operaci6n de la utilidad make Estos destinos no pueden ser especifhdos
con otro destino, es decir, el destino especial debe ser el dnico destino espeMcado:
.DEFAULT: Si el fichero make@ usa a t e destino espedal, &e debe ser especificado con
comandos per0 sin requisitos previos. Los comandos asociados s e r h usados por
la utilidad make si no hay otras reglas disponibles para generar un destino.

.IGNORE: Los requisitos previa de este destino especial son propiamente destinos, hacien-
do que la utilidad make continfie la ejecuci6n de los comandos asociada, a w e
&os devuelvan mores, los cuales serh ignorados como si fuese especilkada la
opci6n 4.

.PRECIOUS: Narmalmente, cuando la utilidad make es intmmpida @or ejemplo con 10s in-
dicadores SIGHUP, SIGTERM, SIGINIT o SIGQWT), la utilidad make borra
cualquier destino creado parcialmente, a no ser que el destino sea un directorio o
un requisito previo del destino especial .PRECIOUS.
.POSM. Haw que la utilidad make use el fichero del sistema de reglas de defect0 de las
normas del sistema POSIX. Este detino especial debe especificarse sin requisitos
previos ni comandos. El destino especial .POSIX es conveniente especificarlo en
los ficheros makefile portables.

.SILENT: Los requisitos previa del destino especial .SILENT son propiamente destinos.
Est0 hace que 10s comandos asociados con los destinos no Sean visualizados en el
standard-output antes de ser ejecutados. Si no es especificado n i n a n requisito
previo, la utilidad make actfia como si se hubiese especificadola opci6n -s.

366 13 - u n ~ . I ~ ~ ~ m a k e
Programas de U t i l W UNIX
li '.La: :qr-
.SUFFIXES: ~ s t &tino
e especial se tisa para agregar nuevos sufijos a la lista de sufijos que la
utilidad make reconoce, siendo usados pop las reglas de inferencia para i d e a -
car t i p espedficos de ficheros. Si el destino .SUFFIXES se especifica sin requi-
sites previos, la lista de sufijos existente sera borrada.

Reglas de inferencia
Las reglas de inferencia especifrcan c6mo va a ser actualizado un destino. Las reglas de inie-
rencia constan de sufijos con un destino hico y de comandos del shell para aear el destino. De
los sufijos, la utilidad make determina 10s requisitos previos; y de ambos (de 10s requisitos pre-
vios y de 10s sufijos), la utilidad make de€erminac6mo creaf el destino actualizado.

La inferencia de requisitos previos puede ser controlada. La regla para crear un f i c k o con un
sufljo .o de un fichero con sufijo .c es especificada como una entrada .LOpara
: el destine y sin
requisitos previos. Los mmandos del shell asociados con el destino definen la regla para aear
un fichero .u de un fichero.e. Cualquia destino que no tenga ningtin signo b m inclinada (0 y
comience con un signo punto (.) es identificadocomo una regla y no como un destino real.

Las reglas de inferencia tienen el siguiente farmato:

destino:
<tabuladorxomundo
...
m a que IW conaienza con un <tabulador>
El ficherorrmkefije no debe especificar requisites previos para las reglas de inferencia. Al sign0
dos puntos del destino (destho:) s610 le puede seg& u1 espacio (except0 si es una regla vada).
El destino debe sa el nombre de un destino vdlido bniw, de las formas .sZ 0 .sI.s2. Donde .sZ y
.s2 son sufijos que heron dados como requisitos previos del destino especial . S u F F M E s y no
contienen ningtln signo barra inclinada (0. per0 si contienen signa punto (.). Ask

.sZ Es una regla de inferencia de s@jo ijnico que describe c6mo comtruir un f i c k o de
destino que se corresponde con uno de 10s sufijos 6nicos agregados. Las reglas de infe-
rencia de sufijo 6nico s610 tienen un signo punto (.) en el destino.
.sI.s2 Es una regla de inferencia de s@jo doble que describe c6mo se va a comtruir un f i b
ro de destino que se corresponde con el sufijo .s2 agregado con un requisito previo, el
cud es agregado con el suf'ijo .sZ. Las reglas de inferencia de sufijo doble tienen dos
signos punto en el destino.

Los sufijos .sZ y .s2 deben sa sufijos conocidos en el mismo momento en que la regla de infe
rencia aparece en el ficheromakefile.El destino especial .SuFFMEs se utiliza para agregar mih
sufijos a la lista de sufijos, 10s cuales s e r h usados con las reglas de inferencia para identif'icar
1 s t i p de fickos.

Si una regla esta vada (por ejemplo, la siguiente es una regla vacia):

destino: ;

la ejecuci6n no tiene efecto, y la utilidad make reconoce que el sufijo existe, per0 no tom nin-
guna acci6n cuando el destino no esta actualizado.

13 -UTIuDADmoPr 367
Programus de U t i M UNIX

Normalmente, el usuario podra proporcionar una regla de inferencia par cada sufijo. Las macros
internas propurcionan 10s medios para especificar las reglas de inferencia general. (Ver “Mucros
internas”, pAgina 378). Las reglas de inferencia tambikn usan algunas macros especiales para
incluir las @ones de cualquier comando resultante. Par ejemplo, las macros CFLAGS e
Y n A G S son usadas para incluir @ones de 10s comandos cc y yaw, respectivamente.

La utilidad make usa 10s sufijos y los destinos de sus requisitos previos para discernir c6mo un
destino puede ser actualizado. UM lista de reglas de inferencia defhen 10s comandos que van a
ser ejecutados. Par defecto, la utilidad make tiene un conjunto de reglas de inferencia integradas
incluidas en un fichero del sistema. El usuario puede agregar al fichero mukern estas reglas de
defecto o redem las existentes con reglas de inferencia adicionales.

Sufjos
La utilidad make facilita requisitos previos de inferencia para 10s ficheros de una linea de de-
pendencia, con lo mal ninguna dependencia explfcitaes declarada. Es deck, si el nombre de un
fichero de destino finaliza en .o, par ejemplo, xyzo, este fichero podria tener un requisito previo
inferible de xyzc.

Si no hay comandos incluidos en el makern para actwhir - un fichero con tales nombres y si
un requisito previo que puede ser inferido existe, ese requisite sent compilado para generar el
destine. En este caso, la utilidad make time reglas de inferencia que permiten crear fichaos de
otros ficheros cuando 10s sufijos son procesados y la regla de inferencia apropiada es usada.

Adicionalmente, la utilidad make usa una tabla de sufijos como la siguiente, para buscar en el
directaio de trabajo en curso un fichero con un Sutijo apropiado. Si encuentra un fichero fuente
asociado, la utilidad make proporciona el comando de defecto que llamaril al mmpilador o eu-
sambladar conveniente para crear el fichero objeto.

La siguiente es una lista de sujijos de defect0 asociada respectivamente a cada tip de fichero:
.O Fichero objeto.
.C Fichero fuente C.
J Fichero fuente Fortrun.
.e Fichero fuente EFL
.r Fichero fuente Rutfor.
*P Fichero fuente Pascal.
.S Fichero fuente ensamblador.
*Y Fichero fuente Yacc.
.I Fichero fuente Lex.
.h Fichero header.
sh Fichero del shell.

Si uno de estos sufijos de dependencia impllcita va inmediatamente seguido de un carikter tilde


(-), indica que es un fichero del sistema SCCS (Source Code Control System) correspondienteal
.
fichero fuente asociado. Par ejemplo, el sufijo f- especifica un fichero del sistema SCCS de re
quisitos previos del lenguaje Fortran, y la regla .c-.o: poCtria representar un fichero SCCS de
requisitos previos del lenguaje C para el fichero objeto .o. La utilidad make soporta el sign0 til-
de (-) por cada lenguaje de programaci6n

UM regla con un s610 sufijo @or ejemplo .c:) es la definici6n de u5mo construir el fichero x de
X.C. En efecto, el otro sufijo es nulo. Est0 es dtil para generar destinos de un solo fichero fuente
(como prwedimientos del shell y programas C dnicos).

368 -
13 UTIUDADmuke
Programas de Utilidad UNIX
‘*: 75 A $+
El modo de agregar sufijos adicionafes k la lista de sufijos, es especificando en el fichero make-
fice una entrada con el destino especial .SUFFIXES, conteniendo como requisitos previos la lista
de 10s nuevos sufijos. Las reglas de inferencia usan 10s sufijos en el orden en el que son especi-
ficados en el destino especial .SUFFMEs. El orden de la lista de sufijos es significativo, ya que
la Uta es examinada de izquierda a &aha. El prima nombre existente para un fichero y para
una regla asociada con el sufijo es inferido como un requisite previo.
Si el destino especial .SUFFIXES es especificado sin requisitos previos, la lista de sufijos es bo-
rrada. Para cambiar el orden de la lista de sufijos es requerida una especificaci6n del destino es-
pecial .SUFFIXES vacfa, seguida de la nueva espificaci6n del destino .SUFFIXES.

Ficheros SCCS
La sintaxis de la utilidad make no permite directamente referenciar prefijos de ficheros, per0
permite aoceder fikilmente al prefijo .s utilizando el sign0 tilde identificando asi 10s fiche-
(e),

ros fuente C del sistema SCCS (Source Code Control System). De esta forma, la especificaci6n
.c- ideWica un fichao fuente C del sistema SCCS. Por tanto, la especificaci6n .c-.o: es la re-
gla que transforma un fichero fuente del lenguaje C del sistema SCCS en el fichero objeto .o. La
siguiente podria ser la regla de defecto usada:

Si hay al@n fichero fuente de la forma .#uente.c y no hay ficheros cOtreSpOndienteSpara este
fichero (./k.fiente.c o hccs/s.fiente.c), la utilidad make mar4 el fichero SCCS del directario en
curso. Por supuesto, 10s ficherots de descripci6n mantenid06 por el sistema SCCS (s.makcfize y
s.lllakefile) pueden SIX accedidos pas la utilidad make; entonces, si la utilidad make es emitida
y existe un fichero makefile con esos nombres, la utilidad make ejecuta un comando get al fi-
chero SCCS, borrando seguidamente el fichero fuente.

Ficheros RCS
Si un fichero es especificado en la linea de dependencia y no est4 presente en el directorio de
trabajo en curso, la utilidad make intenta localizarlo. El camino de b6squeda comienza en el di-
rectario en cufso, &put% examina 10s componentes de la macro VPATH y finalmente el direc-
torio JRCS y el directorio en curso con la extensi6n ,v. (Ver “SISTEMA DE CONTROL DE VER-
SIONES (RCS)”, p@na 253). Si es encontrado un fichero del sistema RCS (Revision Control
System), &e fichero es verificado usando la apci6n -9,y despub borrado.

Par defecto, la fecha de actualizaci6n de un fichero del sistema RCS es tomada de su clltima m-
dificaci6n; aunque especificandoUM regla del destino especial .RCSTIME, la fecha real de mo-
. macro interna $e establece el nombre
dificaci6n de una vasi6n dada puede ser d e t m m i ~ d aLa
del fichero RCS (fkhero,v)antes de invocar el comando, con lo cual se espera que se visualice
la fecha y hora en el standard-output. Una definici6n apropiada del destino especial .RCSTIME
podria ser como la siguiente:
.RCSTIME:
ercstime $(COFLACS) $e

13-UTXLlDADm& 369
Programas de Utilidad UNIX

Reglus de defect0
Las reglus de defectto de la utilidad make euincluidas en un fichero del sistema, y pueden ser
s
listadas de una forma apropiada, para ayudar al usuario a incluir nuevas reglas o modificar las
existentes en el fichero makefice. El siguiente command-line (el cud puede variar depndiendo
de la instalaci6n) puede ser usado para visualizar las reglas internas de la utilidad make:
$ make -p -i/dev/null
# MACROS
#
AR = ar
AS==
cc = cc
co = co
CP = cp
EC = en
FC = f77
LD = Id
MV=mv
PC=pc
RC=f77
RM=rm
ENV = /usr/us&nserid/mv
GET = get
LEX = lex
F90c=f90
HOME = /dtmerduserid
LINT = l i t
MAIL = /asr/spooI/cnaWarid
MAKErInakC
PATH =/ p s r / b i a ~ u s ~ ~ l l ~ a s ~ ~ ~ ~ ~ r / s ~ ~ ~ u s r ~ ~ ~ ~ ~ ~ : .
TERMrVt220
UsER=oserid
YACC = pcc
SHELL = /usr/biih
YACCE = pa -e
YACCR = yacc -r
CFLAGS =
EDITOR =/usr/binlvi
EFLAGS = -0 1
FCEDIT= v i
FFLAGS =
GFLAGS =
LFLAGS =
MFLAGS =
PFLAGS =
RANLIB = ranlib
RFLAGS =
VISUAL = vi
YFLAGS =
ARFLAGS = -W
ASFLAGS =
COFLAGS = -q
CPFLAGS =
LDFLAGS =
LOCNAME = userid
MACHINE = alpha
MAKEDIR = /
MAKESUB=
MAKETOP =
MVFLAGS =
RMFLAGS = -f
MAKEDm=
MAKEFILE = /dev/null
Programas de Utilidad UNIX

# W)UBLE SUFFIX RULES:


#
.p.out:
commands:
$PC)$(LDFLAGS) $(€'FLAGS)k $(WADLIBIS) -0 $@
lout:
commands:
$(LEX) $(LFLAGS) k
$(CC) $(LDFLAGS) $(CFLAGS) 1ex.yy.c $(U)ADLJBES) -U -0 $@
$(RM)S(RMFLAGS) k y y . c
.y.out:
commands:
SOrACC) $(YFLAGS) $<
$(CC) $oFLAGS) $(CFLAGS) y.tab.~ $(u)ADLJBEs) -1y -0 $@
$(RM)$(RMFLAGS) y.tabr
&out:
commands:
$(RC) $(LDFLAGS) $(RFLAGS) $< $(WADLIBES)-0 $@
.e.out:
commands:
$W)
$(LDFLAGS) $@FLAGS) $< SOADLJBES) -0 $@
.f.out:
commands:
$(FC) $(LDFLAGS) $@'FLAGS) k $(uIADLKBES)-0 $@
.F.out:
commands:
$@C) $(LDmAGS) $@FLAGS) k $OADLIBEs) -0 $@
.Gout:
commands:
$(CC) s(LDFLAcS)$(CFLAGS) $< $OADLIBES) -0 $@
.&out:
commands:
$(CC) $(LDFLAGS)$(CFLAGS) $< s(u)ADLIBES) -0 $@
&.out:
commands:
$(CC) $(LDFLAGS) $(CFLAGS) $< $(uIADLIBES)-0 $63
.Lc
commands:
$(LEX) S(LFLAGS)$<
$0
$(MYFLAGS) lex.yy.c $@
.ye.e:
commands:
$(YACCE) SWLAGS) $<
SWV) $(MYFLAGS) y.tabr $@
.yrG
commands:
SOrACCR)$(YFLAGS) $<
$(MV)$(MYFLAGS) y.tab.r $63
.y.c:
commands:
SOrACC) $(yFLAGS) $<
SWV)$(MYFLAGS) y.tabx $@
.p.o:
commands:
$(PC)WFLAGS) $<
lo:
commands:
$(LEX) $(LFLAcs)$<
$(CC) $(CFLAGS) c 1ex.yy.c
$(RM)$(RMFLAGS) kx.yy.c
$(MV)$(MYFLAGS) kx.yy.0 $@
.ye.o:
commands:
SWACCE) SWFLAGS) $<
$(EC) $(EFLAGS) c y.tab.e
$(RM)$(RMFLAGS)y.tabr
$(MV)$(MYFLAGS)y.tab.0 $@
-
I 3 UTlLIDADmake 371
Programas de UtiMad UNIX

.JT.0:
commands:
SWACCR) $(YFLAGS) $c
$(RC) $(RFLAGS) -c y.tab.r
$(W $(RMFLAGS) y-tab.r
$(MV)$(MVFLAGS) y.tab.0 $@
.y.o:
commands:
SWACC) SOIFLAGS1 $<
$(CC) $(CFLAGS) -c y.tab.c
$0 $(RMFLAGS) y.tabs
$(MV)$(MVFLAGS) y.tab.0 $@
.r.o:
commands:
$(RC) $(RFLAGS) -c $<
.eo:
commands:
$0
$(EFLAGS) c $<
.f?&.mOd:
commands:
$(GET) $(GFLAGS) -p $< > $*.W
$(F9oc)$FLAGS) -c $*.Do
.f!lo-.E
commands:
$(GET) $(GFLAGS) p $< > $*.BO
S(F90c) $FLAGS) -c $*Do
.f-.o:
commands:
$(GET) $(GFLAGS) -p $< > $*.f
$(FC) $@FLAGS) e $*.f
.fa:
commands.
$(Fc)SrnLAGS) e $c
P.0:
commands:
$(FC) $@FLAGS) -c $c
.Wa:
commands:
$(F!Joc) SrnLAGS) -c $<
$(AR)$(ARFLAGS) $@ $*.o
$0
S(RMFLAGS)$*.0
.fa:
commands:
S(FC) $(FFLAGS) -c $c
$(AR) $(ARFLAGS) $@ $*.o
$(RM)S(RMFLAGS)$*a
.a:
commands:
$(CC) $(CFLAGS) -c $<
$(AR) $(ARFLAGS) $@ $*.o
$(RM)$(RMFLAGS) $*.o
.GO:
commands:
$(CC) $(CFLAGS) c $<
s.0:
commands:
$(AS)$(ASFLAGS) -o $@ $c ,
#
# SINGLE SUFFIX RULE
#
.m-:
commands:
$(GET) $(GFLAGS) -p $< > $*.DO
S(F90C) $@FLAGS) $(LDFLAGS) -o $@ $*.BO
Programas de UtiMad UNIX

.f-:
commands:
$(GET) $(GFLAGS) -p $< > $*.f
$(FC) $@FLAGS) $(LDFLAGS) Q $@ $*I
.h
.ah:
commands:
$(CP) S(CPFLAGS) $< $@
chmod +x $@
ah:
commands:
$(CP)$(CPFLAGS) $< $@
chmod +x $@
.p:
commands:
$(PC) $(LDFLAGS) $(PFLAGS) $C $(UIADLIBES) -0 $@
.I:
commands.
V G S )
$(CC) $(LDFWGS) $(CFLAGS) 1ex.yy.c $(u)ADLIBES) 4-0 $63
$0
$(RMFLACS) leLyy.C
.Ye
-31:
.y:
commands:
$(YACC) $(yFLAcS) $e
$(CC) $(LDFUGS) $(CFLAGS) y.tab.c s(u)ADLIBES) 4y -o $@
$(RMFLAGS) y.tab.c
.r:
commands:
$(RC) S(LDFLAGS) $(RFWGS) $< E(uIADLIBES)-0 $@
.e:
commands:
$(E )
$(LDFLAGS) $@FLAGS) $e $(TBADLIBES) Q $@
.mod
.m
commands.
$WC S(FFLAGS)
) S V F W G S ) -0 $@
.f:
commands:
$(FC) S(LDFLAGS1 $@FLAGS) $< $(LOADLIBES) -0 $@
.F
commands:
$(FC) WDFLAGS) $@FLAGS) $< S(IDADLIBES) -0 $62
a
.C:
commands:
$(CC) $(LDFLAGS) $(CFLAGS) $<S(L0ADLIBES) -o $@
a:
commands:
$(AS) $(ASFLAGS) -0 $@ $<
#
# SPECIAL TARGETS:
#
.CLEANUP:
commands:
$(W
S W L A G S ) $?
.co:
commands:
$(<XI) $(<XIFLAGS)$< $@
SCCS-GET.
commands:
sccs $(SCCSFLAGS) get $(SCCSGE"I'FWIGS)$@
SUFFIXES:
dependson:.out .o s r .a P I .f90 .mod e. .r .y .yr .ye .l.p ah .rsh .h .f- .m-

-
I3 U T I u D A z ) ~ a k ~ 3 73
Programus de U t i l W UNIX

Ejecucidn del makefile Comandos -


En un fichero de descripci6n, las lineas que van directamente a continuaci6n de las lineas de de-
pendencia son command-lines del shell. Cada linea de estos comandos cornienza con un car&-
ter <tabulador> seguido del comando o comandos viilidos del shell, asociados con la depen-
dencia, los cuales son narmalmente ejecutados para construir el destino.

Los comandos de comtrucci6n de la utilidad make son ejecutados uno a uno por el shell, cuan-
do la fecha de modificaci6n del requisito previo es posterior a la fecha de modificaci6n del des-
tino. Por defecto, cuando el Echero maRefile es ejecutado, la utilidad make devuelve las lineas
de comandos de construcci6n al standard-output. Este defecto puede sa alterado precediendo el
command-linecon uno de los siguientes caracteres:
El carilcter gui6n (-) hace que cualquier mor producido en la ejecuci6n del command-
line & construcci6n sea ignorado. Esta acci6n es equivalente a la especifcaci6n en el
fichero makefile del &tino especial .IGNORE sin requisitos previos, o a la espedE-
caci6n de la opci6n -i en el command-line make.

Si un comando de construCci6n va precedido de un car- arroba (@), ese comando


no serit visualizado en el standard-output antes de ejecularlo. Esta acci6n tiene el
mismo efecto que la especificaci6n de la apci6n 4,o que la del destino especial
.SILENT:no visualinndo 10s mrnandos antes de ser ejecutados. Gemalmente, este es
el prefijo usado en un comando echo.
UM linea de comandos de construcci6n precedida del signo maS (+) hace que el
command-linesea ejecutado, aunque las apciones -n,-q o -t sean especificadas.

Cuando un comando es impreso en el standard-output estos caractem no son incluidos en la


salida. Cuando la utilidad make ejecuta un cornando,&e usa el entorno de ejecuci6n de la uti-
lidad make, incluyendo cualquier definici6n de macro (aunque las macros &Enidas en el
command-line anulan las definiciones axrespondientes enmntradas en el makefiie), y cualquier
variable especificada en la variable de entmo MAKEFLAGS.

Por defecto, cuando la utilidad make recibe un exit-status distinto de cero de la ejecuci6n de un
comando, la utilidad make finaliza visualizando un mensaje de mar. Si la utilidad make recibe
una s e a de intmpci6n (SIGWP, SIGTERM, SIGINIT o SIGQvrr) durante la ejecuci6n de
un comando, esta acci6n ham que el destino asociado sea borrado, a no ser que el destino sea un
requisito previo del destino especial .PRECIOUS.

Si un fichero debe ser generado, per0 no hay comandos explfcitos ni reglas de defecto pertinen-
tes, 10s comandos asociados con el destino especial .DEFAULT son usados si el destino existe.

Cuando el command-linemake es invocado, la utilidad make realiza las siguientes operaciones:


Lee la variable de entomo MAKEFLAGS, y si estA establecida, se asume que cada letra
contenida en esta variable es una opci6n de entrada de la utilidad make, siendo procesada
como tal (except0 las opciones -2-p y -r).

Analiza las definiciones de macros (incluyendo el signo igual), teniente en cuenta que las
definiciones de macros del command-line anulan las definiciones cmespondientes encon-
tradas en el ficheromakefile.

Define, por defecto, una lista de macros (del fichero de reglas de defecto). Esta lista de ma-
cros predefinidas puede ser reasignada dando un nuevo valor a la macro deseada.
Programas de Utilidad UNIX
’ 7.q 4’ k;
Antes de ejecutar cualquier coxbando del makefile, la utilidad make establece las macros
internas a 10s siguientes valores: la macro $@ al nombre completo del destino en curso; la
macro $1 a la cadena de nombres rn& nuevos que el destino; la macro $e a1 nombre usado
para crear el destino (de un requisito previo o de un destino); y la macro $* a1 nombre del
fichero del destino en curso sin el sufijo.

Lee el entorno. Las variables de entorno son tratadas como definiciones de macros, agrega-
das al entomo make y marcadas como eqmtadas.

Lee el fichero defile. Las asignaciones del d e f i l e anulan las del entomo. Este orden
es elegido de modo que cuando un fichero d e f i l e es leido y ejecutado, el usuario obtiene
lo deseado, a no ser que la apci6n -e haya sido especificada.

La apci6n -n indica visualizaci6n sin ejecuci6n. Si la opci6n -n es especificada, siempre es


agregada a la variable MAKEFLAGS y exportada a la utilidad make Si la especificaci6n
$ w K E ) aparece en un command-line del fichero makefice, &ta Unea siempre ser6 ejecutada
sin tener en cuenta la @6n -n,permitiendo que el command-line make -n realice un proceso
recursive complete de nuestro proyecto de software, el cual sa6 usado para visualizar todas las
acciones que podrim ser tomadas sin realmente ejecutar el proyecto. El us0 de la macro MAKE
es fitil cuando se usa una jerarqda de ficheros d e $ % ? .

Variablesde entorno
Las variables de entorno usadas par la utilidad make son leidas en el entorno inicial, procesadas
y exportadas por el shelf, quedando disponibles cada vez que la utilidad make es ejecutada. Las
variables de entarno utilizadas con m h fiemencia por la utilidad make son MAKEFLAGS,
VPATH, SHELL y HOME:

MAKEFLAGS La variable MAKEFLAGS es usualmente definida en el command-line, y con-


tiene una combinaci6n de opciones vfidas de la utilidad make usadas como
opciones de defect0 (except0 las opciones -f, -py -r). Las opciones definidas en
esta variable son especificadas sin el cat.aCtet.gui6n (-) que precede a la opci6n,
y sin espacios de sqaraci6n. La variable MAKEFLAGS, primer0 es accedida
desde el entorno antes que el fichero makefile sea lefdo, y despub procesada
por la utilidad make.

Adicionalmente, despub de la invocaci6n la utilidad make agrega el contenido


del command-line make a la variable MAKEFLAGS, y despub es introducida
en el entorno de todos 10s programas que se van a ejecutar, pasando las
nes a las invocaciones de 10s comandos incluidos en el fichero makefile. Ad,la
variable MAKEFLAGS siempre contiene las opciones en curso.

Si las apciones -k y -s son especificadas en la variable de entorno MAKE-


FLAGS, primer0 es evaluada la variable, y desput’s el command-line make. De
esta forma,la relaci6n entre el command-line make, la variable MAKEFLAGS y
el fichesomakefite puede sa controlada meticulosarnente.

VPATH Cuando la utilidad make busca ficheros para su uso, por ejemplo, fichesos de
destino, de requisitos previa, etc., la utilidad make espera localizarlos en el di-
rectorio de trabajo en CUTSO (.) o en 10s directories especificados.

-
13 UnUDAD make 375
Programas de Utilidad UNIX

La variable VPATH, igual que la variable de entorno PATH del shell, permite
especificar caminos alternatives en la bdsqueda de ficheros, estableciendo de
este modo una lista de directories separados por signos dos puntos (:). Asf, la
siguiente especificaci6n:

VPATH = srcdusrhocaYsrc

Dice a la utilidad make que examine 10s directorios para localizar 10s ficheros
en el siguiente orden:

En el directorio en curso (est0 sucede por defecto).


En el directoriosrc (un subdirectoriodel directorio en curso).
En el directoriohrsr/local/src.

SHELL La utilidad make usa la variable de entorno SHELL para establecer el nombre
depafh del int-rete de comandos del shell (el defecto es hidsh).

En entarnos make, se asume que las variables de entorno tambien se consideran defdciones de
macros, except0 la variable de entorno SHELL, debido a que la macro SHELL es lratada de
forma especial y no rnodifhril el valor de la variable SHELL, ya que esta variable no seril usa-
da como macro por la macro SHELL.

DeJinicidn de macros
La utilidad make dispone de la funci6n de dejinicibn de macros, permiti&donos crear, referen-
ciar y evaluar macros. Las macros pueden sa definidas de distintas farmas y en distintos sitios:

Por defecto.
Intemamente por la utilidad make.
En 10s ficheos mokefile.
En el command-line make.
En un ficheo sqarado y &put3 incluido en el fichero&e$&%.
La utilidad make trata las variables de entorno como macros.

Una definici6n de macro consta de un identificador seguido de un signo igual (=), y &e seguido
de UM cadena de c a r m e s . Los nombres que idenWican la macro pueden estar compuestos de
10s siguientes caracteres: puntos, guiones de subrayado, Cugitos y letras. El siguiente es el far-
mato & una definici6n de macro dnica en un fichero makefile:

macro = valor

Donde macro es el nombre de identificaci6nde la macro que contendril como valor la cadena de
caracteres especificados en valor. Pueden especificarse caracteres espacio a ambos lados del
signo igual ( = ); los caracmes espacio a la izquierda del operador igual son ignorados, per0 a la
derecha del operador de asignaci6n no son ignorados; siendo reconocidos como separadores de
UM inclusi6n dltiple.

Las macros definidas en el command-line make no pueden contener caracteres espacio a ambos
lados del operador igual. Una definici6n de macro sin el valor (macro = ), es considerada nula.
En un fichero mQkefile las definiciones de macro comienzan en el margen izquierdo de la Hnea
del fichero, per0 no tienen porquC comenzar en la columna uno.

376 -
13 UTTLIDAD make
Programas de Utilidad UNIX
i ?& *' .3

En el ficheromakefile, adem& de la definici6n de macros dnicas, pu&n definirse macros con-


dicionales, las cuales tienen el siguiente formato:

destino: = macro = c&na

En la definici6n de macro bnica, la asignacih al nombre de la macro siempre se produce. En la


definici6n de la macro condicional, la asignaci6n s610 se produce si destino es el nombre del
destino en curso.

Las definiciones de macros son referenciadas y evaluadas usando el siguiente formato:

Si el nombre de la macro es un caracter Wco, los signos ( ) y { } pueden ser omitidos, per0 el
sign0 $ debe permanecer; aunque esta furma no es recomendada. La utilidad make dispone de
UM facilidad para sustituir partes de una deEnici6n de macro predefinida durante la evaluaci6n
de la macro. El formato es el siguiente:

Cuando la macro $(MACRO) es evaluada, cada OcUrreIlcia de ~adenales sustituida por cade-
na2. La expresi6n cadenal es considerada una serie de palabras delimitadas por caracteres
blancos o tabuladom. Ad,eadem2 poWa ser una expresi6n regular de la forma:

indicando de esta forma la presencia de sufijos.

Las macros pueden aparecer en 10s siguientes lugares y sa evaluadas de la siguiente forma:
Si la macro aparece en una linea de destino de un makefile, dicha macro es evaluada cuan-
do el comando sea ejecutado.
Si la macro aparece en una Unea de definici6n de macros de un makefile, la macro es eva-
luada cuandola nueva macro definida sea usada en una regla o mmando.
Si una macro aparece en un command-linemake. esa macro es avaluada cuando el cornan-
do sea ejecutado.
Una macro que no ha sido deEnida es evaluada pur defecto a una cadena nula sin producir
Nnguna mndici6n de enor.

En un entorno de macros pueden darse 10s siguientes eventos:


La definici6n de una mcro sobrescribkit el valor de otra existente del mismo nombre.
Las macros definidas en el fichero makefile anulan las variables de entorno.
Las macros definidas en el command-line make anulanlas definidas en el ficheromakefile.
* Pur defecto, las macros intemas son anuladas por las variables de entorno.
La opci6n -e ham que las variables de entorno de la utilidad make anulen las macros defi-
nidas en el fichero makefile.

A&IX& de las macros definidas por el usuario, la utilidad make dispone de macros intanas,
macros especiales y macros predefinidas, tratadas en los siguientes apartadas, las d e s pueden
ser usadas en las reglas de infaencia y de destino.

13-UnLJDADm& 3 77
Programas de U t i l W UNIX

Macros internas
La utilidad make mantiene cinco macros internas que pueden ser usadas en las reglas de infe-
rencia y en las reglas de destino. Para clarificar el significado de estm macros convendria tener
en cuenta las siguientes explicaciones de 10s t&minos: regla de destino, regla de inferencia y
requisitoprevio:

Las reglas de destino son especificadas en el fichK0 makefile por el usuario para un desti-
no determinado.
Las reglas de inferencia son especificadas por el usuario o por la utilidad make para una
detexminada clase de nombres de destino.
Los requisitos previos explfcitos son especificados en las Ifmas de destino de un fichexo
makefile. Los requisitos previos impllcitos son generados cuando las reglas de inferencia
son usadas.
Las reglas de inferencia son aplicadas en requisitos previos implfcitos y explfcitos que no
tienen reglas de destino definidas en el ficheromakefile.
Las reglas de destino son aplicadas a destinos especiales en el makefile.
Antes que cualquier destino del &e@ sea actualizado, cada requisito previo (implfcito o
explfcito) sera actualizado. Est0 se realiza procesando recursivamnte cada reqUiSit0 pre-
vio. Desputs de la recursi6~cada requisito previo se convierte en su mismo destino. Estos
requisitos previos, a su vez, son procesados recursivamente hasta que sea encontrado un
destino que no tenga requisitos previos, en cuyo punto la recursi6n se para.
En las definiciones de macros internas que veremos seguidamente, la palabra destino se refiere a
uno de 10s siguientes c o q t o s :
A un destino especificadoen el ficheromaRefi2e.
A un requisito previo explicit0 especificado en el &eNe que se convierte en el destino
cuando la utilidad make lo process durante la ejecuci6n.
A un requisito previo implfcito que se convierte en un &tino cuando la utilidad make lo
procesa durante la recursi6n.

En las siguientes definiciones, la palabra requisifoprevio se refiere a:

A un requisito previo explfcito especificado en el &eNe para un destino determinado.


A un requisito previo implicit0 generado como consmencia de localizar una regla de infe-
rencia apropiada y un fiche0 determinado que se mesponda con el WfijO del destino.

Las mucros internus se establecen por cada dependencia sucesiva que va a ser procesada, pu-
diendo cambiar 10s valores durante la ejecuci6n del comando. Las siguientes son las macros in-
ternas de la utilidad make:

$* Representa el nombre del destino en curso con el sufijo borrado. Al menos son evaluadas
las reglas de inferencia. Por ejemplo, en la regla de inferencia .c.a:, la especificaci6n $50
representa el fichero .o desactualizado que corresponde al requisito previo .c.

$63 Esta macro representa el nombre completo del destino en curso. Son evaluadas las reglas
de infexencia y de destino. Por ejemplo, en la regla de inferencia .ea:, la macro $@ re-
presenta el fichero .a desactualizado que va a ser aeado. Similarmente, la macro $@ r e
presenta el miembro 1ib.a desactualizado del directario de librdas.

Existe otra macro interna, la macro $$@ que tambien representa el nombre mmpleto del
destino en curso; per0 s610 tiene significado en la lfnea de dependencia de un makefile.

378 -
13 UTIUVADmakc
Ptoararnas de Utilidad UNIX

$e En una regla de inferencia, &’&acro $e represents el d & e completo del destino en


curso desactualizado. La macro $c evaliia el nombre de fichero cuya existencia permite
que la regla de infexencia sea elegida para el destino. En el &tino especial .DEFAULT,
la macro $c evdiia el nombre de destino en curso. Por ejemplo, en la regla de inferencia
.c.o:, la macro $c represents el requisito previo del fichero .c. Las siguientes son dos
formas de generar ficheros objeto (.o) de ficheros fuente C (.c):

.LO:
cc c $fs
0
.c.o:
cc c $<

$1 La macro $1 evdtla la bta de requisitos previos que no e s t h actualIzados con respecto al


destino en curso. Por ejemplo, en una regla de destino para generar el fichero ejecutable
prog de los ficherosfilel.o,~2.0yfrCe3.0, y dondeprog esa actualizado con respecto a
f i l . 0 , per0 no eSta actualizado con respecto a fi2.0 yfile3.0, la macro $? represenla
frCe2.0 yf&3.0.

$% La macro $96 s610 es evaluada cuando el -tho en curso es un miembro del archivo de
libredas de la forma nombreHj(miembro.o)). En estos casos, la macro $@ evalda el nom-
bre de la libreda (nombrelib)y la macro $% evalda las regh de destino y de inferencia.
Por ejemplo, en un ntakefile ulii regla de destino para genera lib.a yichero.o), la macro
$% represenla el fichero.0, lo opuesto a la mac~o$@ que fepresenta fib.a.

Macros especiules
Las siguientes son dgunas macros especial= usadas en las reglas de inferencia con el compila-
d a asociado. (Ver tambien “Variables de entomo”, @ana375):

CFLAGS Usada con opdom del compilador C.


FFLAGS Usada con opciones del compiladar Forfrm.
LFLAGS Usada con @ones del compiladar lex.
YFLAGS Usada con @ones del compilador yucc.
LDFLAGS Usada con 10s curgadores.
MFLAGS Contiene las opciones de la invocaci6n del comrnund-line make inicial, inclu-
yendo el carktm gui6n (-) que precede a cada opci6n.
Por defecto, la utilidad make invoca el compilador C sin opciones. Entonces podemos usar la
macro CFLAGS para establecer en ella las apciones del compilador C deseadas, para que el co-
mando cc sea ejecutado con las @ones establecidas en dicha macro. Asf, la siguiente defini-
ci6n dice al comando cc que incluya informaci6n de depwaci6n:
!
CFLAGS = -d

Tambien es posible cambiar algunos nombres de 10s compiladares usados en el defecto y las
opciones con 10s que heron invocados conociendo 10s nombres de las macros usadas. Por
ejemplo, si el nombre del compilador de defecto del lenguaje C es la macro CC, el siguiente
comnmd-line:
make CC = newcc

hace que el comando invocado sea new% en vez del nombre del compilador C usual.

-
I 3 UTILIDm 379
Programas de U t i l W UNIX

Librerlas
Un destino o requisito previo tambien puede ser un miembro de una libreda del archivo de li-
bredas. La utilidad make dispone de una interface a las libredas de un archivo de libredas. Si
un nombre de destino o de requisito previo va emerrado entre caractem parhtesis, se asume
que va a ser un archivo de librerias.
Por ejempio, en la especificaci6n: nombrelib(m*embro.o),la expresi6n nombrelib indica el
nombre & la libreda, y la expresi6n miembro.0 indica un miembro de la libreda. La utilidad
make exadna la libreria, localiza el miembro de entrada (mkrnbro.u), y la traduce al nombre
del fichero cmecto. La utilidad make proporciona al usuario acceso a una regla para crear li-
brerias. La gesti6n de la regla es el sufijo .u (aunque implfcitamente el sufijo .a no es especifi-
cado, el sign0 par6ntesis implica el sufijo .u, indicando de esta forma el destino).

Asf, una regla &.a: es la regla interna de la utilidad make para compilar un fichtxo del lenguaje
C, agreghdole a la libreria y barrando un fichero con sufijo.o. Es deck es usada la regla de in-
ferencia de sufijo doble, .sl.u, para actualizar un miembro de la libreda con sutijo.SI.

El siguiente ejemplo puede incluirse en un fichero makefice para mantener una libreda de un ar-
chive de libreda gib) con los miembrm de la misma (#i%?I.oyfile2.0):
l i b lib(6lel.o) lib(file2.0)
@echoLibreria actualizada.

donde la regla .c.u: es una regla intema de la utilidad make, la macro $@ represents el destino
.u (lib); las macros $< y $* son establecidas para actualizar el fichero de lenguaje C y el nombre
de f i c k o menos el sufijo (f2kl.c yfrcel), respectivamente.

Entradas alternativas
La utilidad make permite especificar en un fichero de descripci6n, puntos de entrada altemati-
vos, cuyas entradas serh usadas como reglas con nombres nemotknicos y con comandos del
shell que realmente no generan nin@n fichero con esos nombres. h i , en un fichero makefile
podriamos inclujr e n t r e como las siguientes para determinados fines:

clean: Para borrar los ficheros intemedios de las salidas no deseadas despueS que la utilidad
make ha sido ejecutada mectamente.

update: Para actualizar las fechas de modificaci6n de 10s ficheros fuente, y asi asegurarse que
son compilados.

delete: Para borrar las salidas & una ejecuci6n anterior asegurhdose que la siguiente ejm-
ci6n de la utilidad make recompilaril todos 10s programas.

save: Para copiar un determinado conjunto o tip0 de ficheros.

Las entradas altemativas tambien pueden tener dependencias de otras entradas altemativas.

380 I 3 -UIILlDADnaRa
Programas de Utilidad UNIX

Ejemplos
Los siguientes son un conjunto de programas escrita en lenguaje C que s e r h utilizados en l a
ejemplos make vista a continuaci6n El primer programa, llamado muin.c, es el programa
principal, el mal llama a cuatro funciones o subrutinas, las d e s podr4.11sex ejecutadas cuando
el programa ejecutable, llamado c&ula, sea creado:

$ cat maitrc
I* main-e: Punter0 para funcioaes *I
I* Este programa llama a 4 funciones o subrutinas *I
I* Las funciones son: cuadrado, culm, cuartap y nab *I
P &O: calcula f u n a h numero [funab niimero] *I

main(argc, argv)
int argc;
char *arg$j;

int (*calcula)O, cuadrado0, cuboo, cuartap0, nab();


inti=l;
whiie ( i c )
{
it(!strc~cuadrada**,arg~il))
d c d a = cuadrado;
else if (~~("eubo",arargv[il))
calcula = cub,
else if ( ! s t r c ~ c u a r t a p * ' ~ i l ) )
calcukreuartap;
elseealcula=na&
printf("%bd\n", (*calcula)(atoi(argvfkll)));
i+=&
1

!$ cat cu(Ldfad0.c
euadndo(i)
inti;

*
return(i i);
1
$ cat cub0.c
rubo(i)
inti;

return(i * i * 9;
1
$ cat cuar&zp.c
cuartap(i)
inti;
{
* *
return(i i * i i);
1
$ cat nada.c
nada(i)
inti;

return(0);
1

-
13 UTILIDAD make 381
Promamas de Utilidud UNIX

El siguiente puede ser el ficheromakefife usado para describir 10s ficheros y comandos implica-
dos en la creaci6n del fichero de destino crrlcula. El fichero tambit% contiene defini-
ciones de macros y en&& altemativas, las cuales nos serin dtiles en diferentes usos:

$ cat makern
t
# Fichero makefile para d ejecutable atlcula
#
ejecutable= calcula
FUENTES = mains cuadradox cubox cuartap.~nadas
OBJ1=main.0
CC=cc #Esddefecto
OBJ2 = cuadradao cubo.0 cuartap.0 ~ d a . 0
CFLAGS = c

$(OBJl): makc
$(CC) $(CFLAGS) nrain.c

cuadradao: cuadradac
$(CC) $(CFLAGS) cuadradac

cub0.0: cubac
$(CC) $(CFLAGS) cub0.c

cuartapo: cuartapx
S(CC) $(CFLAGS) Euaftapf

Mda.0: M A C
$(CC) $(CFLAW nada.c
imprime:
@echoImprime 10s fiche- fuentc.
cat $(FUE”ES)I lpr -pt2x

install:
@echoEnvja d ordenador de esplotaa6n los fichens finalizados en .c J calcula.
rcp $(FuENTEs) i n t t d u s d u s w d u s e r i d r s ~ l i ~
rcp $(ejecutable)inttJusr/useduserid!ejsluseridlcjecut;rblesl

clean:
@echo B m 10s ficheros f i n a b d o s en .a
-rm -f $(OBJl) S(OBJ2)

cleanup: dean
@echo Borra todas LISsalidas pneradas por la utilidad make.
@echo El pr6ximo make had U M recompilaabn completa.
-rm -f $(ejecutable) core

Para evitar conflictos, el fichero makern junto con 10s programas C estarh ubicados en un di-
rectorio de trabajo rinico:

$ cddirmake
$ Is -I
-rw-r-r-- 1 usuario IPpo 45 Jun 12 1459 cuadradac
-rw-r-r-- 1 usuario grupo 52 Nov 121509cuartapc
-rw-r-r-- 1 usuario grupo 44 Jun 121503cubo.c
-rw-r-r-- 1 usuario grupo 734 Jun 121453main.c
-rw-r-r-- 1 usuario grupo 1053 Jun 1215:lgmakefde
-rw-r-r- 1 usuario wupo 37 Nov 121515nada.c

382 I 3 -U~TLJDAD~&C
Program de Utilidati UNIX

El siguiente command-line invoca la 6tilidad make con la opci6d in con el fin de visualizar 10s
comandos del shell (sin ejecutarlos) que construirdn el fichero de destino final: el program eje-
cutable ccrlnrla. De esta forma,la utilidad make verifica que nuestro makefile =til correct0 an-
tes de utilizarlo:

$ make -n
cc -c mainr
cc c cuadradac
cc -c CUb0.C
cc -c cuartap.c
cc e nadar
echo "Ensamblando -> calcula."
e89 -0 dark main.0 cuadrado.o cubao cuartap.0 M&O

El siguiente comando make clnico sera suficientepara realizar una mmpilaci6n completa de 10s
ficheros fuente implicados:

$ make
cc c minx
cc e cuadradac
cc e eubor
cc c cuartap.c
cc -c n a b &
Ensamblando -> ealcula,
e89 Q calcuh mainm cuadradao cubao cuartap.0 n a b

El siguiente sera el contenido del directoriodinnake despueS de ejecutar la utilidad make:

$Is-Ftl
-rwxr-m-x 1 asuario 20672 Jun 12 1531calcula*
-nv-r-r- 1 usuario 768 Jun 121531 cuadradao
-rw-r-r- 1 usuario 760 Nov 121531eunrtapo
-rw-r-r-- 1 usuario 760 Jun 12153lcubo.o
-rw-r-r-- 1 usuario 2368 Jun 121531main.o
-rw-r-r- 1 usuario 760 Nov 12 1531M&.O
-rw-r-r- 1 usuario 1053 Jun 1215:19makefde
-rw-r-r-- 1 osuario 37 Nov 121515nada.c
-rw-r-r-- 1 usuario 52 Nov 121509cuartap.c
-rw-r-r- 1 usuario 44 Jun 121S:03cubac
-rw-r-r- 1 usuario 45 Jun 1214:59cuadradac
-rw-r-r- 1 usuario 734 Jun 1214:53mainx

Ahma podemos invocar el program ejecutable calcula con cualquiera de las opciones del pro-
grama (cud&, cubo, &.):

$ calcula cudado 25 cub0 25


625
15625

Seguidamente podemos ejecutar la entrada instdl emitiendo el siguiente comando make, para
copiar el program ejecutablecacCula y 10s ficheros fuente C al ordenador de explotaci6n:

$ make install
Envia al ordenador de aplotaci6n 10s fichem finalizados en .cy d c u l a .
rcp main.c cuadradac eubac cuartap.~M&C inFtJusduserduseridIsimbolicoscJ
rcp calcula inf2:IusrJusers'useridfejecutabled

-
I 3 UTluDAD make 383
Programas de Utilidad UNIX

Si ejecutamos el comando make nuevamente sin hacer cambios a los ficheros fuente, la utilidad
make nos v i s u m f i un mensaje indicando que el programa ejecutable est4 actwbado, no eje-
cutando nin@n comando:

$ make
‘dcula’ is up to date.

El siguiente command-line make puede ser ejecutado para haw una limpieza general de todos
1 0 s programas generados por la utilidad make en la riltima ejecuci6n. De esta forma,la pr6xima
ejecuci6n que realice la utilidad make recompilarfi todos los ficheros fuente. Observemos que la
entrada cleanup es dqendiente de la entrada clean, par lo tanto, a h ejecutados 10s comandos
subordinados de ambas entradas:

$ make cleanup
B o ~ 10s
a ficheros fiilizados en .a
rm -f d u o cuadradao cubao cuartap.0 nada.0
Born todas las salidas generodas por k utilidad make.
El pr6ximo make hari una rrcompiIaa6n eompleta.
rm -f calcula core

El sistema UNlX dispone de la utilidad touch para actualizar las fechas de modificaci6n de los
- losfichefos
fichaos (ver “CItiZidud touch”, Mgina 76), la cual puede ser usada para achalmr
fuente de mestro entarno make, asegurbdonos asf, que las fechas de los requisitos previos son
mils recientes que la del destino, permiti6ndonoshacer una recompilaci6n completa:
$ touch *.c

El siguiente puede ser otro fieheromakefile v6lido para nuestro ejemplo, per0 maS reducido:

$ catf i m k
#~
# Fichero makcfile para d ejecutable ealcula
#
OBJETOS = main.0 cuadradao c u h o cuartapo M&O

calcuk: $(OB-S)
@echo“Ensamblando -> calcuk.”
e89 -o d c u l a $(OBjFlrOS)

NOBJETOS):
cc e $+.E

clean:
@echo Borra todos 10s ficheros objeto.
-m-f *.o

cleanup: dean
@echoBorn todas ks salidas generadas por la utilidad make.
@echo El pr6ximo make h a d una rccompilaa6ncompleta.
-m-f dcula EOM

$ make -fjUe.mk
cc e maills
cc -c cuadrados
cc c cubox
cc c cuarrapc
cc c nadax
Ensamblando -> cakula.
e89 -o calcula main.0 cuadrado-ocub0.0 cuartap.0 nadzo

384 13 -UTIuDADmakc
Programas de UtiMad VNIX

14 - OTRAS U T I L I D ~ E S

Utilidhd echo
Descripcih
La utilidad echo devuelve al standard-output sus prqios argumentos. Los argumentos del
command-line echo van separados pop espacios, y el ciltimo argumento va seguido de un carik-
ter <numu linea> (generando asi un satto de linea).

Formato
echo [-opcionesl [text01

Opcwnes
-n S610 en la vgsi6n Berkeley. Esta opci6n evita que la utilidad echo visualice el c a r e
nueva Unea (evita el salto de linea)al final del text0 del mensaje.

Argurnentos
text0 Indica el argumento o argumentos de la utilidad echo. Cada ca&na de caractares del
texio es considerada un argumento del command-line echo, componiendo asf el mensaje
que va a ser visualizado en el standard-output.Si no es especiilcado ningtin argumento,
la utilidad echo visualiza una lfnea blanca (un carilcter nueva linea).

En 10s argumentos del command-line echo pueden especificarse plantillas de ma-


pondencia de ficheros, reftxencias a variables y secuencias de escape. La utilidad echo
acepta el convenio sobre escapes como el lenguaje C. Los siguientes son los escapes re-
conocidos por la utilidad echo, 10s cuales afectarhal resultado de la visualizaci6n:
\a Genera un cadcter aim.
\b Genera un cadcter re-troceso.
\c Suprime el carilcter nueva U n a que sigue al ciltimo argumento.
\f Genera un car- salto de p6gina.
b Genera un car- nueva Una.
\r Genera un caI5cter retorno de carro.
\t Genera un car- tabulador.
\V Genera un caracteE tabulador vertical.
\\ Represents un cartlcter barra inversa (I).
b Visualiza un caI5cter de 8 bits, siendo n un nfimero octal de 1,2 6 3 digitas. El
ncimero octal (n)siempre debe ir pmedido de un &@tocero (0).Par ejemplo,
el siguiente command-line:

$ echo ‘WARNING:\07’

visualiza la C&M WARNING:y hace sonar la campanilla del terminal.

I4-0TRAS UTIUDADES 385


Prugramas de Utilidad UNIX

El signo barra inversa 0) es un carkter especial del shell, significando que cuando
especifiquemos algh escape en el command-line echo, el mensaje debe ser protegi-
do con caracteres ap6strofos o comillas; o si queremos especificar el milcter I &te
debe ser protegido con otro carficter barra inversa o\).

GenKdmente, la utilidad echo se usa en 10s shell-scripts para generar mensajes de diagn6stic0,
ejecutar instrucciones del shell y redirigir data a pipes y a ficheros.

Notas
El shell Korn proporciona otra utilidad similar a la utilidad echo, la utilidad print per0 con m h
funciones que la utilidad echo. Bajo el shell C, la utilidad echo es una utilidad integrada con ca-
racteristicas ligeramente difaentes. UM utilidad del mismo tip0 muy completa, es la utilidad
printf, la mal convierte, formatea y sus argumentos en el standard-output.

Ejemplos
El siguiente command-line echo visualiza en el standard-output el mensaje especificado:

$ echo Porfmor, insertar el disquete AB12.


Por favor, insertar d disquete ABl2.

El siguiente command-lineecho contiene secuencias de escape,por lo que tendremos que pro&-


ger el mensaje. Primm visuaba las lfneas blancas (gaeradas por los dos primeras escapes b)
y despueS el text0 del mensaje en dos lfneas (la Wma lfnea es genera& por el tercer escape b):

$ echo “WZEstOycomiendO.n\Volver~a las 14:30.

&toy comienda
VolverC a las 1430.

El siguiente ejemplo visualiza el mensaje: Los fieheros de backup son:, seguido de 10s nombres
de fichero finalizados en .bk de nuestro directorio en curso:

$ echo Los jkheros de backup son: *.bk


Los fEheros de backup son: incrementaLbk semanal.bk mensual.bk

El siguiente ejemplo agrega el mensaje especificado en el command-line echo al final del fick-
ro notas, despub que el shell sustituya el valor de la variable PATH:

$ echo Recuerda, elpatti de biisqueda estd en $PATH > notas

Con la utilidad echo podemos enviar mensajes a un determinado usuario conmiendo el nombre
del terminal en el que estA alojado (ver “Utilidudwho”, pfigina 3):

$iecho Ya he vuelto. >/dev&02

El siguiente comando echo suprime el salt0 de linea de1 mensaje. Observemos que el prompt de1
shell (el signo $) aparece a1 final de la misma linea del mensaje de salida:

$ echo ‘%ste mensaje no tiene car&ter nueva linea. W


Este mensaje no tiene car6cter nueva linea.$

386 -
14 OTRAS UTXUDADES
Programas de U t i W UNIX
4
6 . .*" 5
EI siguiente script, enviomail, primeib nos visualiza un promj;t'para que introduzcamos el
nombre del fichao que contiene la nota que vmos a enviar, y despuh usa la utilidad mailx pa-
ra redirigir dicho fichero como un mensaje, al correo del usuario o usuarios especificados en el
command-lineenviomail:

$ cat cnviomail
#!fbinlsh
-
# script: enviomail Envia un fichem a varios usuarios.
echo Tedear cl nombrc del fichero que eontiene la nota:
read filenota
mailx $* < SfiIenota

El siguiente script, whoecho, mea el fichero who.sal, el cual contendra las lfneas de cabecera
espe&icadas en-elscript, seguidas de la salida genera& por el comando who:

$i cat whoecho
#!fbiish
-
(Iscript: whoecho Crca un tichem.
#
echo'Usuario
echo'-
who -M
cat w h o d
-
Terminal Fccha-hm Nombrc-host" > whosal
-9s >> whom1
>> w h d

El siguiente script, usos-echo, muestra varios usos de la utilidad echo:

$i cat usos-echo
#!hWsh

#
-
# ruipt: IIsoG_cchO Disti~~t~~
US= del m n d o aha.

host='umm-n'
echo "Introduce cl nombrc de cuenta: \c"
read cuenta
-
userid='awk -F: PSCuentaV { print $1 y feWpassw8
if [ ((suerid"!= "$cUenta" J
then
echo "Q psuario $menta no tiene cuenta en d host $host'"
exit 3
fin
dir='awk -F: '$1P k n t a ' l { print $6 y IetdpsswC
echo
echo "M3Oia Scuenta. T u dircctorio de del& es $ d i i "
numero='who I awk '{ print $1y I WE -w I sed W /fr
echo Usuarios alojados a hs'date '+%H%M:%Sdel %dl%d%yr en el host $host:"
echo ---I ------ -3

echo
who I awk '{ print $1 )' I sort I pr -6 -t -w90
echo e
echo 7titToh-k $nuwro usuarios dojados.b"

$ usos-echo
Introduce el nombrc de cuenta:operator

Hola operator. Tu directorio de defect0 cs: /usr/usecs/operak/operator

Usuarios rlojados a ks 1539:06 del 09/07/01 en el host daxp.ciematcs:


------------
-- -
adminl casado hidrogeo ope=* pmyesp sic070
blanco rrpl070 ilZga00 pheras roldan triocubo

Totak l2 usuarios alojados.


Programas de U t i W UNIX
#

Utilidad xargs
Descripcih
La utilidad xargs construye un command-line combinando una utilidad que contiene sus Opcio-
nes y argumentos con argumentos adicionales leidos del standard-input, ejecutando esa utilidad
una o maS veces. Las @ones del comando xargs determinan el niimero de argumentos lefdos
de cada invocaci6n y la manera en la que van a ser combinados.

Formato
xargs [-opciones][utilidadJ ~atgumntol

Opciones
-Ecadeof Esta apci6n usa el argumento cadeof como la cadena EOF 16gica para sustituir el
carilcter gui6n de subrayado 0 de defecto. La utilidad xargs lee del smdard-
input hasta que sea encontrado el end-offile o la cadma EOF 16gica.

-e [cadeofi Esta opei6n es equivalente a la opci6n -Ecadeo$ Si no especificamos el argumento


cadeox la utilidad xargs inteqreta el carkter gui6n subrayado como un carilcter
literal, en vez de c6mo una marca end-of-flk.

-I cudsust La utilidad sera ejecutada por cada linea del standard-input, tomando la linea e
mo un argumento 8nic0, insertandola en los argumentos par cada ocurrencia de la
cadena cadsust. La &na cudsust no puede ser usada en maS de cinco argumen-
tos. La utilidad xargs ignara los espacios y tabuladores al comienzo de una Una.

-i [cudsust] Esta @6n es equivalente a la @6n -I cudsust. Si no especificamos el argu-


mento cadsust, es usada la cadena de defecto, el caracter Uaves: 0.

-Lnlimero La utilidad es ejecutada por cada niimero de linea, no vada, de 10s argumentos lel-
dos del stanhrd-input. La 6ltima invocaci6n de la u t i M tiene tantas lfneas de
argumentos como lineas quedan en nrimero. Una lfnea finaliza con el primer ca-
r6.cter nueva linea, a no ser que el 8ltimo caracter de la lfnea sea un espacio o un
tabulador. Un car6cter espacio o tabulador al final de la lfnea indican continuacih
hasta la siguiente linea no vada.

-I [nrimero] Esta @6n es equivalente a la opci6n -Lnrimero. Si el argumento ndmero no es


especificado, el defecto de niimero es 1.

-n nlimero Ejecuta la utilidad usando tantos argumentos del standard-input como sea posible,
hasta el maxim0 especificado en nkmero. La utilidad xargs usa pocos argumentos
si el niimero de bytes contenidos en el command-line de la utillidad es mayor que el
niimero de bytes especificado en la opci6n -stmuzh, o si la 8ltima invocaci6n tie-
ne tantos argumentos como 10s que permanean en ntimero.

-P Modo prompt. El usuario es preguntado si va a ejecutar o no la utilidad en cada in-


vocaci611, visualizando el command-line constmido seguido del prompt: ?. . Una
respuesta y dada al prompt ejecuta la utilidad, cualquier otra respuesta, incluyendo
el caracter <RETURN>,hace que la utilidad xargs no ejecute esa u t i W .

388 14 -0TRAS UTILJDADES


Programas de Utilidad UNIX
t .es ; Q- >.:
-s kunaiio Establece el tamaflo Mime en bytes del command-line'construido.El tamaiio de-
be ser un nfimero enter0 positivo menor o igual al tamaAo de bytes permitido se@n
el tip0 de mAquina (470,3996, etc.). En d tamaiio se incluye un car&& adicional
por cada argumento y por el ntlmero de caracteres del nombre de la utilidad

-t La opci6n -t activa el modo a s i s y devuelve a1 standard-error el command-line


construido, antes de la ejecuci6n.

-X Finaliza la ejecuci6n de la utilidad xargs si el tamail0 de al@n command-line


construido es mayor que el nfimero de caracmes especifkado en la opci6n -s ta-
ma&. La opci6n -x tambien es activada si especificamos la opciones -I, -i, -Lo -1.

Argumentos
utiliidad Es el nombre de la utilidad que va a sa ejecutada, la cual sera localizada se@n la
variable de entorno PATH. El argumento el cud tambien puede ser un E-
chero del shell, es ejecutado pur la utilidad xargs tantas veces como sea necesario
para procesar todos 10s argumentos. Si el argumento ufifkhi es omitido, el defect0
es la utilidad echo.
crrgumeno Son las opciones y argumentos de la utW& 10s cuales sera$ ejecutadm cuando la
utilidad xargs sea hvocada. Los argumentos lefdos del standard-input son cadenas
de caracteres, delimitadas por espacios, tabulaches o nueva Una; las llneas vacfas
son ignaradas; las cadenas emerradas entre caractem ap6strofos o comillas son
tratadas literalmente y 10s caracteres de prot&6n son borrador;.

Ejemplos
El siguiente command-line usa la utilidad find para buscar todos 10s ficheros finalizados en .o
de nuestro &bo1 y despu& borrarlos usando las utilidades xargs y rm La opci6n -p nos visuali-
zara unprompt con el comando rm construido para m ar o no cada fichero seleccionado:
$ find $HOME -name-*.o -print I xargs -p -i rm -f {}

El siguientescript, cornpara, ejecutarz5 la utilidad diff con pares sucesivos de ficheros tecleados
como argumentos del scn'pr cornpara:

$ cat c o q a r a
#!hidsh
-
# script: compra Compara pars de fxheros.
#
who $ * I -nt dilf

El siguiente script, move, mueve todos 10s ficheros del directorio especificado como primer ar-
gumento, al directox-io especificado como segundo argumento del script move, visualizando el
command-line mv construidopor cada fichero movido:

$ cat move
-
# script: move Mueve todos 10s Gcheros del dirrctorio $1 .
I$2.
case $#in
2) Is $1 I xarF -i -t mv $U{}
SY{} ;;
*) echo "Us0 corredo:move dirl dir2" 1-2 ;;
eSaC

II-OTRASUTIUDADES 389
Prowamas de Vlilidad UNIX

Utilidad test
Descripcidn
La utilidad test evalfia expresiones mndicionales. Si el valor de la expresi6n evaluada es va-
dad, la utilidad test devuelve un exit-status cero; y si el valor de la expresi6n evaluada es falso,
la utilidad test devuelve un exit-status distinto de cero. La utilidad test tambih devuelve un
exit-stuurs distinto de cero si es especificada sin argumntos.

Fomtato
test expresidn
[ expresih J

El segundo formato, [ expresibn 1, es un formato altemativo de la utilidad test, el cual puede ser
usado en vez de la pal- test. A ambos ladm demo del sign0 CoTchetes debe ir un carilctef
espacio. Este formato es m y utilizado, ya que facilita la lectura del mmando test cuando es
usado con sentexxias del shell como i t while o until.

Argumentos
expresibn Es la expresi6n que sa&verifcada por la utilidad test para una condici6n falsa o
vadadera. Las expresiunes pueden tener funciones y operadbres, 10s cuales son
tratados por la utilidad test mmo argumentos distintos. Estos argumentos deben ir
sqarados unos de otros por espacios.

Expresiones de la'diltu test


Cada expresibn puede =tar coastruida de una o maS de las siguientesfunciones:
i

-bficheru Verdad, si el fichero dado enficheru existe y es un f i c k o especial de bloque.

cficheru Verdad, si el fichero dado enficheru existe y es un f i c k o especial de carikter.

-d@heru Verdad,si el fichero especificadoenficheru existe y es un fichero directorio.


-efichero Verdad,si el fichero especificado enfichero existe.

-ffichero Verdad,si el fichero especificado enficheru existe y es un fichero ordinario.


-gficheru Verdad, si el fichero especificado en@heru existe y tiene establecido el bit de ID
de grupo.
-hficheru Verdad,si el fichero especificado enfichero existe y es unlink sixnb6lico.

-kficheru Verdad,si el fichero especificado enjkhero existe y tiene establecido el bit sticky.

-pficheru Verdad,si el fichero dado enfiehero existe y es un fichero espial FIFO opipe.

-rfichero Verdad,si el fichero especificado enfiehero existe y puede ser lddo.


Programas de UtiMad UNIX

-sfiehero Verdad,si el fichero espkdficado enfichero existe y'tiene informaci6n


-ufieirero Verdad, si el fichero especificado enfichro existe y tiene establecido el bit de ID
de usuario.

-wfichero Verdad, si el fichero especificado enfiehero existe y tiene permiso de escritura.

-xfihero Verdad,si el fichero especificado enfierero existe y puede ser ejecutado.


-t descfile Verdad,si el fichero con el nfimero defile-descriptorespecif~cadoen descfile est4
abierto y asociado con el terminal.Par defecto, se asume el mlmero 1 (stmdard-
output). El nfimero defile-descriptor para el standard-input es el 0 y para el stan-
dard-error el 2.

cadem Verdad,si la cadena especificada en cadem no es una cadena nula.

-ncadena Verdad, si la cadena especificada encadem tiene un tamafio distillto de cero.

-z cadem Verdad, si la adena especificada encadem tiene un tamafio de cero.


c l = c2 Verdad,si las cadenas especificadas en CI y c2 son idhticas.
cl I= e2 Verdad, si las cadenas especificadasen c l y e2 no son iguales.

nl -eq n2 Verdad, si los mlmeros especificados en nl y n2 son algebraicamente iguales.

n l -ne n2 Verdad, si 10s nimeros especificados en nl y n2 no son algebraicamente iguales.


nl -ge n2 Verdad, si el ncimero especificados en nl es algebraicamente mayor o igual que el
nfimero espificado enn2.
nl -It n2 Verdad, si el mlmero especificados en nl es algebraicamente menor que el nfimero
especificado e n d .
nl -le n2 Verdad,si el mlmero apecificados en nl es algebraicamente menor o igual que el
nfimero especificado en n2.
Lasfunciones pueden sa combinadas con 10s siguiente operudores para construir expresiones
compuestm:

-a Opaadar AND l6gic0. Si este operador separa dos funciones, ambas deben ser ver-
dad para que la utilidad test devuelva un exit-statuscero.

-0 Operador OR 16gico. Cuando el aperadar -0 separa dos funciones, una u otra fun-
ci6n (0 ambas) debe ser verdad para que la utilidad test devuelva una mndici6n
verdadera.

! Operador NOT l6gico. Niega la funci6n que va precedida de este apexador.

(expresidn) Los parhtesis son usados para agrupar expresiones. Ya que 10s caracteres parknte-
sis tienen un signifkado especial, &os (el de apertura y el de cierre) deben ser
protegidos: \( y \). Si la expresi6n no va encerrada entre caracteres parhtesis, el
operador -a toma precedencia sobre el operador -0.

14-OTRAS UTlUDADES 391


Programas de Utilidad UNIX

Notas
En adici6n al formato altemativo de la utilidad test, [ expresibn 1, el shell Korn dispone de otro
evaluador para mejorar la verificaci6n de ficheros y la mmparaci6n de cadenas de caractera,
cuyo formato es el siguiente:

[[ expresibn I]

La utilidad test del shell Kam, adem& de las expresiones vistas en “Expresiones de la utiZidud
test”, dispone de las siguientes:

-afichero Verdad, si el fichero especificado enfichero existe.

-Gficher~ Verdad, si el ficheroespecificado enfrchero existe y su ID de grupo se cOrreSpOnde


con el ID de grupo real de ese proceso.

Verdad, si el fichero especificado enfichero existe y es un link simMlico.

Verdad, si el fichero especificado enfichero existe y su propietario tiene el ID de


usuario real de ese proceso.

Verdad, si el fichero especificado enfichero existe y es un fichero socket.

Verdad, si el fichero dado enfl existe y es m& nuevo que el fichero dado enf2.

Verdad, si el fichero dado enfl existe y es maS antiguo que el especificado enf2.

Verdad, si 10s ficheros dadas enfl yj2 existen y se refieren al mismo fichero.

Verdad, si 10s caracteres especificados en la cadena cl estan en un orden de clasifi-


caci6n superior a 10s caracteres especificados en la cadena c2.

c l >c2 Verdad, si 10s caracteres especificados en la cadena cl e s t h en un orden de clasifi-


caci6n inferior a los caractexes especificados en la cadena c2.

el e q e 2 Verdad, si la expresi6n especificada en e l es igual a la expresi6n dada en e2.

e l -nee2 Verdad, si la expresi6n dada en el no es igual a la expresi6n dada en e2.

e l -It e2 Verdad, si la expresi6n dada en e l es menor que la expresi6n dada en e2.

e l -gte2 Verdad, si la expresi6n dada en e l es mayor que la expresi6n dada en e2.

e l -lee2 Verdad, si la expresi6n dada en e l es menor o igual que la expresi6n dada en e2.

el -gee2 Verdad, si la expresi6n dada en el es mayor o igual que la expresi6n dada en e2.

e l &&e2 Verdad, si las expresiones especificadas en e l y en e2 son ambas verdad.

el lie2 Verdad, si UM de las expresiones especificadas en e l y en e2 es verdad

Los apehadores 16gicos && y ll pueden ser usados en vez de 10s operadores -a y +, respectiva-
mente, para mnstruir expresiones compuestas.

392 II-OTRASUl’TLiDADES
Programas de Utilidud UNIX
L I )
i :

Ejemplos
El siguiente script, verifde, verifica si el fichero especifkado existe y no eti4 vacfo:

$ cat v e r i !
#!/bilJsh
-
# script: verifiie Veflica la existencia de un fichem.
if test !a "$1"
then
echo E! fichero $1 no cxiste o cSt;i vncio.
cxit
ti

Si el fichero dado como primer argumento ($1) del script verifde, no existe o est4 vacfo, la uti-
lidad test visualiza el mensaje del comando echo y finaliza. Si el fichero existe y tiene un tama-
Bo mayor de cero, la utilidad test no visualiza ningrfn mensaje.

Los caractere comillas que enciman el argumento positional $1, aseguran que la utilidad test
hionaril oonrectamente, auque el valor de $1sea UM cadena nula.

El sigdente script, verifile2, ham una verifrcaci6n mils fflmpleja. Si al ejecutar el script especi-
ficamos menos de dos argumentos o el fichero especificado en $1(primer fichero) no existe, el
script visualiza el primer grupo de comandos echo y fmliza. Si en el comnrand-line verifide2 se
especifica dos ficheros existentes, el script visualiza el segundo grupo de comandos echo:

$ cat vmm2
#!tbidsh
-
# script: reriGXe2 Vcrifica la existencia de un CKhera
#
if[$#-It2-o!*us1")
then
echo El Gchero $1no &te o e! us0 de! script cs incorreeta
echo Us0 wmcto: verifiIe2fik0fih0
ait
else
num='Is -I "$1" I awk '{ print $5 }p
nu&-% -I "$2" I a d '{ print $5 }p
echo El fichero$1 tiene Saum bytes.
echo El fichero $2 tiene h u m bytes.
fi

El siguiente script, verifile3, visualiza un prompt para que el usuario introduzca un nombre de
fichero; despuds, la utilidad test verifica si el usuario puede leer ese fichero y si el fichero existe
y tiene informci6n Si no se cumplen las dos condiciones, el scrip2 finaliza, si se cumplen las
dos condiciones, el script continCia y ejecuta 10s comandos que siguen a la sentencia else:

$ cat verim3
#!/binlsh

#
-
#script: verifide3 Verifica si un fichero puede ser
leido, erdste y tiene informaci6n.
echo "Intmdudrd nombre de fichero: kl*
read nombre-fichero
if [ -r "$nombrc-fiihero" -a !-s "Snombre-fkhero" ]
then
echo El fichero$nombre-fichero no puede ser leido, no erdste o csta vacio.
cxit
eke
echo El fichero $nombre-fichero puede ser leido, existe y tiene informaah.
Is -I$nombre-fichero
fi

I4 -0TRAS UTIUDADES 393


Programas de Utilihd UNIX

El siguiente script, mvfile, mueve el fichero dado como primer argumento del command-line, al
subdirectorio especificado como segundo argumento. El script mvfile, primer0 verifica si sus
argumentos son exactamente dos, si no es ad,el script finaliza. Despu&, verifica la existencia
del fichero y del directorio especificados, y si ambos existen el script ejecuta el mmando mv:

$ cat mvfile
#!lbinlksh
-
# script: mv€iie Mueve d fiihero especificadoen $1
# d subdireborio espeatiado en $2.
#
if[s#-ne2]
then
echo Us0 eomcto:mvfiiejicliercr ~ubdirccrorib
exit
fi
if [ !-f $1]
then
echo El fichero $1no existe.
urit
fi
if [! d $ 2 ]
then
echo El directorio $2 no adstc
exit
else
m$1$2
echo Fichero $1movido a! s u b d i i r i o $2
ti

El siguiente script, numero, muestra el us0 del comando test en evaluaciones numdricas. El
script al ser ejecutado nos visualiza un prompt para que introduzcamos un nbxo, el cual trata-
remos de acertar. El nfimero a buscar es un nfimero aleatdo entero, entre 0 y 32767, generado
par la variable de entarno RANDOM del shell Korn cada vez que &a es referenciada. Cuando
el nfimero tecleado es igual que el nfimeroregistradoen la variable numero, el script finaliza:

$ cat numero
#!/biih
-
# script: numero "rata de acertar un niimero deatorio contenido en UM
# variable con el fm de mstrar ewluaciones nudricas.
#
clear
numero='echo $RANDOM
numdados=0
until [ **$numero** -eq "$nuadado" 1
do
echo "Introduce UII niimero: k**
read numdado
numdados='expr $numdados+ 1'
if [ "$numdado**-It "$numero**]
then
echo Niimero bajo.
elif [ ''$numdado'* -gt "$numero" ]
then
echo Niimro alto.
elif [ "$numdado" -eq "$numero" 1
then
echo El niimero Snumdadoes el niimero buscado.
echo El total de nhaneras dados fue $nudadas
fi
done

394 14-0- UTZIDADES


Programas de UtilidiulUNIX

+ .J
Utilidud typeset
Descripcih
La utilidad typeset es un comando integrado del shell Korn usado para visualizar y establecer
variables y atributos a las variables, como pueden sa:la rqresentaci6n interna de la variable, la
forma en que la variable es visualizada, la exportaci611, etc.

Formato
typeset [+ I -opciones[n]] [numbre[=valor...I1

Opcwnes
La siguiente es la lista de atributos que puede ser especificada en el c o m d - l i n e typeset

-H Esta opci6n prroporciona el nombre de fichero del host del sistema UNIX, estableciendo
una correspondencia en maquinas con sistemas distintos al UNIX.

-L Ajusta el campo del valor a la izquierda y borra los espacios de la izquierda. Si se especi-
fica el argumento n con un valor, bte define el tam&lo del campo; si no es especificado
el argumento n, el tamafio del campo es detaminado pop el valor de la primera asigna-
ci6u Cuando la variable es asignada, eSta es completada con espacios a la derecha, o
tnmcada si fuese necesario, para ajustar el campo. Si la opci6n -Ztambien es especifica-
da, 10s ceros de la izquierda son borrados. La opci6n -Ldesactiva la opci6n -R
-R Ajusta el campo del valor de la variable a la &=ha y lo rellena con espacjos a la iz-
quierda. Si se eqecifica el argumenton con un valor, bte define el tamafio del campo;si
no es especificado el argumento n, el tamaflo del campo es determinado por el valor de la
primera asigoaci6n. La opci6n -Les desactivada.

-Z Ajusta el campo del valor pur la derecha y lo rellena con ceros a la izquierda si el primer
cdcter no blanco es un digit0 y la @6n -Lno ha sido establecida. Si se especifica el
argumento n con un valor, &e define el tamafio del campo;si no es especificado el ar-
gumento n,el tamafio del campo es determinado por el valor de la primera asignaci6n.

-f Esta apci6n define 10s nombres de funciones, en vez de 10s nombres de variables.
-i Especifica que el valor de la variable es un nfimero entero. Si se especifica n con un va-
lor, bte indica la base, la cud puede estar entre 2 y 36, la base de defect0 es 10. La varia-
ble es internamente representada como un nfimero entero y cuando las asignaciones son
hechas, btas son evaluadas como expresiones aritm&cas.

-I Convierte todos 10s caracteres maylisculas a caracteres minfisculas. La opci6n de may&


culas, -u,es desactivada.

-r Los nombres dados en sombre son m a r c a b de s610 lectura; estos nombres no pueden
ser cambiados por subsiguientes asignaciones.
-t Etiqueta 10s nombres de las variables especificadas. Las etiquetas son definibles por el
usuario y no tienen significado especial en el shell.

14-OTRAS UllLJDADES 395


Programas de Uiilidad UNIX

-u Convime todos los caracteres minfisculas a caracteres maflsculas. La apci6n de miniis-


culas, -I, es desactivada.

-x Los nombres espificados en nombre son marcados para la expartaci6n autodtica al


entomo de los comandos ejecutados subsiguientemente.

Si en la apciones especificamos un signo in& (+) en vez del signo menos (-), las @ones son
desactivadas. Si en nombre no es especificado @n@nargumento, per0 si son especificadas op-
ciones, entonces es visualizada una lista de nombres de variables (y opcionalmente los valores
establecidos par esas opciones). Si no son especificadas apciones ni argumentos, entonces son
visualizados los nombres y atributos de todas las variables.

Argumentos
nombre=v&r Es el formato de asignaci6n de una variable, don& nombre es el nombre de la
variable a la cual se aplican 10s atributos y a la que se le asignaril un valor. Si
los datos asignados a la variable no comerdan con los atributos de esa varia-
ble, esm datos serh cambiados conforme a los atributos.

Ejemplos
Las @ones -u y -I establecen los atributos de may&mlas y minfisculas, respectivamente. El
siguiente grupo de comandos convierte el valor de la variabie numbre a letras maylsculas:

$ typeset -unombre
$ nombre="Lolita Rami&
$ print $nombre
LOLITA RAMIRIZ

Las apciones -L, -R y -Z son los atributos para ajustar campos. La opci6n -L amta y elimina
blancos a la izquierda; la opci6n -R ajusta a la derecha y agrega blancos a la izquierda; y la op-
ci6n -Z ajusta a la derecha completando con ceros a la izquierda. Si una de estas opciones va
seguida de un mlmero, &e es interpretado como el tamaffo de la cadena de la variable.

El siguiente ejemplo usa el atributo -L9 para ajustar a la izquierda el valor de la variable upelli-
do a un campo de9 caractmes:

$ typeset -L9apeIlido
$ apeIIido=Santamaria-Gomez
$ print $apelIido
Sanhmari

El siguiente ejemplo usa la opci6n -R5 para ajustar a la &=ha el valor de la variable numero a
un campo de 5 caractem:

$ typeset -R5 numero


$ numero=123456789
$ print $numero
56789

Estos dos filtimos ejemplos muestran que los valores dados a una variable serh truncados si son
maS largos que el tamailo especificadoen 10s atributos del command-linetypeset.

396 14-OTRASUllLlDADES
Programas de Utilidad UNIX

La opci6n 4 del comando typeset & utilizada para crear variabl& numQicas enteras. Si la op
ci6n -i va seguida de un nfimero comprendido entre 2 y 36, el nfimero es tomado como la base.
Si la base no va seguida de ningtln nimero, la base es 10. El siguiente ejemplo crea UM variable
numQica llamada num en base 2:

$ typeset -12 num


$ num=7
$ print $num
H111

La cadena 2# indica la base del ntlmero que sigue al sign0 #. Asf, 7 en decimal es 111 en base 2.

El siguiente script, llamado vreport, utiliza el comando typeset, para formalear y visualizar un
informe de 10s datos contenidos en un Echero:

$ cat vreport
#!/biih
-
I f script: weport Formatea un lichen, dado.
#
typeset -uL10 apenio
typeset-uL8 nombre
typeset48 cantidad
typeset-LA apacio
m="
espacio=''"
cat $1 I
while read apellido n d c e cantidad cspacio
do
print Sapellido $espaao$nombre $cantidad
done

El siguiente es el Ech~o,llamado &os, utilizado pur el script vreport para crear el infarme:

$ cat datos
Hernandez JOSE 40
Rodriguez Maria 60
Velarde Matilde 300
Sanchdhrcia PCdrO 400
Volemela Susana 80
Perez Antonio 120
Hasea Richard 250
Ortega Hermenegildo 120

$ vreportdatos
HERNANDEZ JOSE 40
RODRIGUEZ MARIA 60
VELARDE MATILDE 300
SANCHOGAR PEDRO 400
VALENZUELA SUSANA 80
PEREZ ANTONIO 120
HASEN RICHARD 250
ORTIXA HERMENEG 120

El script vreport lee 10s datos del fichero dafus linea a linea. Cada registro del fichero datos se
supone que tiene tres campos, 10s males son lefdos por tres variables: upellido, nombre y canti-
dud. La variable upellidu trunca el campo a 10 caracteres y lo convierte a letras mayrisculas; la
variable nombre trunca el campo a 8 caracteres y lo convierte a letras mayclsculas; y la variable
cantidad ajusta el campo a la derecha. El script tambien usa una variable nula, espacio, para se-
parar 10s campos del apellido y del nombre.

14-OTRAS UnLIDtWES 397


Programas de Utilidhd UNIX

Utilidadad exec
Descripcibn
La utilidad exec es un comando built-in del shell que tiene principalmente dos usos:
Ejmtar un mmando o script sin crw un nuevo proceso. Es decir, el comando exec solapa
el programa que se est4 ejecutando con otro programa del mismo shell.
Redirigir el standard-output, el standard-input y el standard-error de un shell-script dentro
del mismo shell-script.

Cuando el shell ejecuta un cornando no integrado, el shell en curso crea un nuevo proceso. El
nuevo promo hereda las variables de entomo de su parent-process, per0 no las variables loca-
les de ese promso. Par el mntrario, cuando ejecutamos un mmando con la utilidad exec, el co-
mando exec ejecuta el wevo comando en lugar del proceso en curso. Por lo tanto, el entorno,
incluyendo las variables locales del proceso original, est611 disponibles para el wevo comando.

En cuanto a la ejecuci6n, en el entomo del proceso original, el comando exec es similar al co-
mando punto (.).La diferencia eSta en que el comando punto s610 puede ejecutar scripts, y el
comando exec puede ejecutar scripxs, programas mmpilados y comandos. Otra diferencia es que
el comando punto (.) devuelve el control al script original cuando finaliza la ejecuci6n, y el co-
mando exec no.

Formato
exec [arg ...I

Argumentos
arg Es el comando o script que sera tratado por la utilidad exec. Si en arg no se especifica
ni@n argumento, la acci6n del comando exec es modificar 10s descriptores de fiche-
ro especificados en la lista de redirecci6n de entrada/salida.

Ejemplos
Ya que no es creado n i n g h nuevo proceso cuando se ejecuta un comando con la utilidad exec,
la ejecuci6n del comando es d s dpida. Puesto que el comando exec no devuelve control al
programa original, el mmando exec s610 puede sa utilizado con el ~ltimocomando que quera-
mos ejecutar en un script. El siguiente ejemplo muestra que el control no es devuelto al script:

$ cat demo-exec
#!/bin/ksh
# script: dem-exec
who
exec date
echo “Este comando echo no es ejecutada”

$ demo-exec
operator coosole Jun 15 08:OO
alopez tQOO5 Jun 15 0820
barbara ttyOO2 Jun 15 0905
Tue Jun 15 09:06:35 CET 2001

398 -
14 OTRAS UTIUDADES
Programas de Utilidad UNIX

El siguiente shell-script, llamado out-exec, utiliza el comando exec para que los comandos cat
y pg Sean mmpletamente ejecutados: '
r- ;4-

$! cat out-exec
#!/bin/ksh
# scriptt out-exec - Us0 del conrando exec
#
ir[$#=O]
then
echo "Us0 cor& ...
out-exec [ -v ]/ichcrolfihcro2 2> /dev/nd
ait1
fi
if [ "$1" != "4'1
then
-
exec eat "$@"
else
shit
a=pg %@"
fi

El otro us0 del comando exec es redirigir el stm&rd-input, el standard-output y el standard-


error de un script. Desde un shell-script, el cornando exec puede ser utilizado para redirigir la
entrada al scripz o la salida del scripz. Par ejemplo, la siguiente sentencia dentro de un script,
redirigiril la entrada del fichero Snfice a ese scripr.

Igualmente, el siguiente command-lineredirige el standard-output y el standard-error a los fi-


cheros outfile y errfile, respectivamente:

exec>o@.kZ>errfile
I
1
El siguiente es un script ejemplo, llamado pru-exec, que rediredona un fichero al mmando
exec dentro del mism scripr.

# catpm-exec

I
i
I

I
#!/binfsh
# script: pru-exec
# set -x
#
-Us0 del comando exec.
qstat -r I grcp -v 'S[O-9]' I grcp 'crayb' I sort -r -a +6 > d q u e
exec salque
while read regisPo
do
requestid='ccho $rcgistro I awk '(print $1)"
userid='echo $registro I awk '{print $3)"
if grep "$userid" /eWpasswd I grep 'fmneos' >/dev/null
then
I echo "$rcgistm''
I exit
I fi
1 done

El bucle while del script pru-exec tom la informaci6n del fichero salque ya que su entrada es
redirigida mediante el comando exec a1 script. El mmando while recibe el contenido del fichero
salque leyendolo linea a linea. La condici6n del bucle while (read registro) dewelve un exit-
stufus vadadero mientras reciba registros del fichero. Cuando la correspondencia del comando
grep es encontrada, el script visualiza la linea m p o n d i d a y finaliza.

-
I4 OTRAS UllUlMLlES 399
Programas de U t i l W UNIX

Mecanismo history
El shell Korn, igual que el shell C, dispone del mecanismo history usado para reejecutar una o
varias oprxaciones relacionadas con 10s tiltimos comandos ejecutados interactivamente en el
shell. Para ello, la utilidad history mantiene unfichero hist6rico con 10s tiltimos command-lines
emitidos previamente desde el terminal.

Aunque el acceso a 10s comandos de la lista histhica es diferente en el shell C que en el shell
Kom, en ambos shells podemos listar, seleccionar, modificar y reejecutar cualquier comando de
la lista hist6rica de la sesi6n en curso o de una sesi6n previa.

Cada command-line registrado en la lista del fichero hist6rico es mantenido en un modo FIFO
bhico y es conocido wmo un event. Cada event de la lista hist6rica en curso tiene un nfimero
clnico asociado a dicho comando o event. Cada nlrmero de event indica el lugar que m p a ese
comando en la lista hist6rica; asf, el nlrmero del rtltimo event refleja el ntimero total de coman-
dos que contiene el fichero hist6rico en ese momento.

Mecanismo history del shell Korn


La operaci6n y efectividad del mecanismo history del shell korn depende del establecimiento
de deterininadas variables y del us0 de ciertas utilidades. Ask

La variable de entoeno HIsrsIZE identifiat el tamaA0 del fichero hist6rico. Si la variable


HISTSIZE eSta establecida, eSta determina el ntsmero de mmandos previa que van a sex
salvados; si dicha variable no eSta establecida, el defecto son 128 events.
La variable de entmno HISTFILE identBca el nombre y el path del fichero don& van a ser
salvados 10s comandos. Si la variable HISTFILE no est4 establecida, el defecto de la ubica-
ci6n y del nombre del fichero hist6rico es $HOMH.sh-hisfo?y.

*Para tram los comandos de nuestro fichero hist6rico podemos usar indistintamente 10s
editores emacs, vi o ed, y l a comandos history y fc. Para usar el editor deseado podemos
establecerlo con las variables de entomo EDITOR y VISUAL. Si no est4 establecida ningu-
na de estas dos variables, es usado por defecto, el editor ed

Cuando se usa el comando integrado fc para listar y editar el fichero hist6rico y no es espe-
cificado ningisn editor en el command-linefc e editor, entonces es usado el valor de la va-
riable de entorno FCEDIT si &ta est4 establecida. Si la variable FCEDiT no esa estableci-
da, es usado por defecto, el editor ed

Cuando especificamos un event del fichero hist6rico para sa tratado por el mecanismo history
pueden ser usadas dos formas:

Un nlirnero.- Si el nclmero es positivo, &e se refiere a1 event con ese nclmero (la numaa-
ci6n de 10s events de la lista hist6riat comienza por 1). Si el nfimero es negativo, este mi-
mer0 selecciona un event relativo al event en curso (-1 se refiere al event previo al event en
curso, -2 se refiere al event anterior a1 event previo en curso, y asf sucesivamente).

Una cadena.- Selecciona el event mils reciente que se mesponda con esa cadena. Un
event se considera que va a ser mapondido con una cadena, si 6 t a se corresponde con el
primer0 o primeros caracteres del event o con la primera palabra del event (comando).

400 14-OTRAS UTILIDADES


Programas de Utilidad UNIX

Us0 del comando historypara listar events .&, .+,.


La utilidad history s6lo permite visualizar 10s events de la lista hist6rica. Por defecto, el coman-
do history visualiza 10s 16 tlltimos comandos registrados en el fichero hist6rico con sus respec-
tivos ntimeros de event.

Opciones
-r Visualiza 10s events GJ la lista hist6rica en orden inverso al de defecto. Si no se especi-
fica n i n e argumento son visualizados 10s 16 Utimos mmandos.

Argumentos
urg En este argumento puede especificarse un nfimero o una cadena. Si en urg se especifica
una cadena, la utilidad history visualiza desde el tlltimo comando que comience con di-
cha cadena hasta el tlltimo comando de la lista hist6rica.

Si en el argumento arg se especifica un ntimero negativo, la utilidad history visualiza


10s tiltimos n events comenzando por el dmero de event espificado hasta el event en
curso. Si el nclmero dado en arg es un namero positivo, la utilidad history lists desde el
nfimero que hace el event en la lista hist6rica, hasta el Utimo event de la lista hist6rica.

En el argumentoczrg se puede especificar un rango de llclmeros o de cadew, o un rango


de ambos. Un rango indica desde-hasta 10s events maS recientes comprendidos entre 10s
nfimeros de event o cadenas dentro de la lista hist6rica en curso.

Us0 del editor vi para reejecrctar events


Una forma rilpida de acceder a 10s events del fichero hist6rico es presionando la tecla <ESC>.
De esta forma,el mecanismo history nos pone en modo comando del editor vi, siempre y cuan-
do tengamos establecido este editor en las variables EDITOR o VISUAL,permiti6ndonos emitir
algunos comandos del editor v i Si despuk de teclear el escape emitimos el comando k, visuali-
zaremos el tlltimo comando del fichero hist6rico. el siguiente comando k visualizaril el peniilti-
mo, event, y asi sucesivamente. (El comando k avanza lineas de un fichero hacia el principio).

Con el comando) podemos movernos en la lista hist6rica en sentido contrario (hacia el final).
Con el comando 1 podemos desplazarnos hacia la derecha de la Ilnea, con el comando h hacia la
izquierda y con el comando $ a1 final. con el comando x podemos borrar caracteres de la linea y
con el comando D borrar parte o toda la linea. Con el comando a se puede agregar texto al
command-line, con el comando s cambia texto, con el comando i insertar texto, etc.

Una vez que el comando deseado haya sido situado en el prompt del shell (haya sido o no modi-
ficado), el nuevo comando sera reejecutado presionando <RETURN>, pasando a ser un nuevo
event del fichero hist6rico.

-
14 OTRAS UTILlDALlES 401
Programas de Utilidad UNIX

Us0 del comando fcpara W a r y reejecutar events


El comando fc es un comando built-in utilizado para visualizar elfichero hist6ric0, asf como pa-
ra modificar y reejecutar comandos previos registrados en dicho fichero. El comando fc dispone
de varias de las prestaciones que proporcionan 10s editores.

Fomzato

En el primer formato, el programa editor es invocado sobre el fichero hist6rico el cud contiene
10s comandos previamente tecleados en el prompt del shell. En el segundo formato, 10s coman-
dos del fichero hist6rico son listados en el standard-output y no es invocado ni@n editor; por
defecto, el comando fc -1 visualiza una lista numerada secuencialmente con 10s 16 tiltimOS co-
mandos del fichero hist6rico. El tercer formato ejecuta, y opcionalmente modifica, un mmando
del fichero hist6rico sin invocar ningSin editor.

Opciones
e editor Usa el editor especifcadoen editor para editar 10s events. Si la a@6n -e no es aped-
ficada, el comando fc u t i b par defecto el valor de la variable FCEDlT. Si la variable
FCEDlT es nula o no eSta establecida, es usado el editor ed

-I Lista Ios comandos del fichero hist6rico. Los comandos son listados en secuencia in-
dicados par los argumentosfirsty krst, siendo afectados por la @6n -r cuando van
precedidos del nfimero de comando.

-n Suprime la numeraci6n de los comandos cuando son listados con la opci6n -1.

-r Esta opci6n invierte el orden de 10s comandos listados con la opci6n -I y 10s editados
sin las opciones -1 o -s.

-S Reejecuta un comando sin invocar un editor, sustituyendo opcionalmente una cadena.

Cuando un event delfichero hist6rico es editado (ya sea o no modificado), nada m2.s salir del
editor el comando resultante es visualizado y ejecutado, y despu& introducido al final de la lista
hist6rica formando parte del fichero hist6rico como un nuevo event; per0 el comando fc que
caus6 la edici6n no es introducido en la lista hist6rica. Usualmente, cuando se listan events del
fichero hist6rico con el comando fc o history, el comando causante de la lista visualizada sf es
introducido en la lista hist6rica.

Como nombre del editor se puede especificar un sign0 gui6n (-) con el fin de saltar la fase de
edici6n y reejecutar el comando. En este caso, puede ser usado el argument0 de sustituci6n
oM=mw para modificar el comando antes de ejecutarlo.
Por ejemplo, si la cadena r es un alias del command-line fc e -,entonces la siguiente especifi-
caci6n: r muh=bueno E, reejecutars el comando m2.s reciente que comience con la cadena c,
sustituyendo la primera m e n c i a de la cadena malo con la cadena bueno.

402 -
I4 OTRAS UllLIDADES
Programas de U t i l W VNIX

Argumentos &
.,. 4’ -Ti,

fmf I last Selecciona 10s comandos para listarlos o editarlos. El ntimero de comandos previos
que pueden sex accedidos es dete!rminado por el valor de la variable HISTSIZE. El
valor de 10s argumentosfirst y last o el de ambos es uno de 10s siguientes:

[+Inrimer0 Donde nrimero es un mimero positivo representando un ntimero de co-


mando de la lista hist6rica. Los n~rnerosde mmando pueden ser visua-
lizados con la w i 6 n -1.

-nrimero Donde nrimero es un ntimero negativo representando el niimero relativo


de un comando con relaci6n al comando en curso de la lista histbcica.

cudem Es una cadena indicando el comando maS reciente que comience con la
cadena dada en cadena. Si el argumento old=mw no es especificado
con la opci6n -s,la cadena dada enfmf no puede contaer un sign0 =.

Cuando emitimos el tercer farmato del comando fc con la apci6n -s:

Si el argumentofirst es omitido, es usado el comando previo.


Cuando emitimos el tercer fcn-mato del comando fc sin la apci6n 6:
Si el argumento last es omitido, ate argumento es el defect0 para el comando
previo cuando la opci6n -I es especificada,por el contrario, el defect0 e s m t .

Si Isargumentosfirsty Cast son ambos omitidos, 10s 16 comandos previos son


listados y el comando cinico previo es editado (basado en kopci6n -1).

Si 10s argumentosfirsry h
f est411 presentes, todos 10s comandos &first a cast
son dtados (sin la apci6n -I) o listados (con la apci6n -I). Para editar varios
comandos, presentiulos al editor todos al mismo tiempo, cada comando comen-
zando en una nueva Unea.
Si el argumentosjhf representa un comando m& nuevo que el especificado en
last, 10s comandos son listados o editadas en orden inverso, est0 es equivalente
a1 us0 de la apcidn -r. Par ejemplo, 10s siguientes comandos de la primera linea
de cada grupo son equivalentes a 10s comandos de la segunda Ifnea:
fc -r 10 20 fc 3040
fc 2010 fc -r 40 30

Cuando se usa un rango de comandos, no es un mor especificar 10s valores de


los argumentosfmt y last aunque no est& en la lista hist6rica, el comando fc
sustituye 10s valores representando el comando m& antiguo y maS nuevo de la
lista como los valores apropiados. Par ejemplo, si s610 hay 10 comandos en la
lista hkt6rica numerados de 1 a 10,los siguientes ejemplos listan y editan, res-
pectivamente, 10s 10 comandos:
fc -1
fc -I 199

old=new La primera ommencia de la cadena especificada en old del comando que va a sa


reejecutado, es reemplazada con la cadena especificada en new.

14-OTRAS UTIUDADES 403


Proammas de Utilidad UNIX

Ejemplos
Si nuestro login del shell Korn tiene establecido el mecanismo history, podemos establecer un
prompt para que visualicemos continuamente el nfimero de event en curso de la lista hist6rica,
facilitando asf la visi6n y comprensi6n de la operativa con events:

$ PSl=**!ksh-> '*
22 ksh->

Visualizar IQ lista hist6rica


Los dos command-lines siguientes visualizan events de la lista hist6rica, obteniendo una lista
parecida a la indicada bajo 10s comandos invocados. Los dos comandos, history y fc, listan por
defecto, 10s16 iiltimos comandos del fichero hist&ico, incluyendo el comando invocado:

36 ksh-> history
36 ksh-> fc -I
21 PSI=**!kh-> **
22 mails
23 cd bin
24 vi procesrs
25 chmod u+x procsos
26 cd
27 pravsasramirrz
zs k4*s
29 grep dfa d0ta.c
30 mvclatasprogsc/
31 man grip I Ipr - W x
32 find /\( i(-name core -0 -name a.out \) *time +7 -print \) -exec rm {} \ 2> /dev/null
33 a t etastxt I wc -I
34 mailx n m i d j c n 5 0 < dastxt
35 rsh crayb /usuarioslcccaloperatorhididenWi
36 hiry

Los dos comandos del siguiente ejemplo, fc e history, visualizan 10s events del fichero hist6ri-
co, en este caso, desde el event n~mero32 hasta el event en curso:

37 ksh-> fC -I 32
37 ksh-> history 32
32 find / \( \( -name core -o -name a.out \) - 4 m e +7 -print \) -exec rm {} \ t> /dev/null
33 Catetastxtlwc-1
34 rnaih ramircz@jen50< etastxt
35 rsh era$ /usuarios/doperator/binlidenWm
36 h i
37 fc-I32

Cualquiera de 10s dos comandos (fc e history) del siguiente ejemplo visualizan 10s command-
lines & la lista hist6rica desde el event maS reciente que comience con la cadena ch hasta el
event m h reciente que comience con la cadena mv:

38 ksh-> history ch m~
38 ksh-> fc -I ch MY
25 chmod u+x procsos
26 cd
27 procesosmdrez
28 ls-I*s
29 grcpalfadota.~
30 mv clotax progsU

404 14- OTRAS UIIUDADES


Programas de U t i l W UNIX

Para visualizar un event Wco del fichero hist6Pic0, por ejemplo el event 34, emitir cualquiera
- 7

de los dos command-lines siguientek

39 ksh-> fC -I 34 34
39 ksh-> history 34 34
34 mails ramircz@jen50 W t x t

En el siguiente ejemplo, los dos command-lines, fc e history, visualizan 10s 6 iiltimos evenfs de
la lista hist6rica en curso, z& el cornando causante de la lista visualizada:

40 ksh-> fc -I -6
40 ksh-> history -6
34 mailx raminx@je&O < etastxt
35 rsh ctayb /usuarioslcecalopetatorlbitor/binlidentifica
36 hiry
37 fc-l 32
38 bistorychmv
39 IC-1 3434
40 fc-l 4

Los siguientes comandos visualizan 10s events de la lista hist6rica comprendidos entre el c+
mando mAs reciente que comience con la cadena gr hasta el event niimero 35:

41 ksh-> history gr 35
41 ksh-> fc -I gr 35
29 grepalfad0ta.c
30 melotacprogsc/
31 man +p I Ipr -pL2r
32 fmd / y -name core -0 -name ..aut \) -.time +7 -print \) -exes rm {} 2> Idednd
33 catctas.txtlwc-l
34 mailx ramim@jen50< etasbrt
35 rsh crayb /usuarioslceca/operatorWidentifka

Editar y reejecutur events


Con el primer furmato del comando fc podemos filcilmente, recuperar, modifcar y reejecutar
cornandos de la lista hist6rica. Por ejemplo, el siguiente comando fc llamarii aI editor vi e in-
duciril en el bu@r de trabajo, por defecto, el iiltimo event de la lista hist6rica:
42 ksh-> fC e Vi

Si tenemos establecido el editor vi en la variable FCEDIT, no es necesario especificar la opci6n


-e del comando fc para invocar el editor vi. El siguiente ejemplo, invoca el editor vi e incluye en
su bufler de trabajo el event niimero 32 de la lis& hist6rica en curso. Una vez corregido el event
.
(aquf se cambia el signo / por el signo y la C ~ & Mnn por la cadena Is), salimos del editor y el
nuevo command-linefind es ejecutado:

43 ksh-> fc 32
32 find. \( -name core -o -name..out \) -atime +7 -print \) -exec Is {} 2> ldevlnun
..
-
...
ltmplsh271202.6" 1 line, 90 characters
find. \( \( -name core -0 -namea.wt \) -atime +7 -print \) -exec Is {} 2> /dev/nuU
Jcore
Jprograda.out
44 ksh->

-
I4 OTRAS UnUDADES 405
Programas de U t i W UNIX

Tambien se puede reejecutar un event del fichero hist6rico identificando el event por una cadena
que se cmesponda con parte o con toda la primera palabra del event, en vez de por el rnfmero
de event. Ad,el siguiente ejemplo edita el comando mailx maS reciente de la lista hist6rica, ha-
cemos las modificaciones (a@ cambiamos rmirez por mmlo) y al dejar el editor el nuevo
command-linemailx es reejecutado, enviando el mensaje electr6nico a la usuario marilo:

44 ksh-> fc mLliLx
mailx marilo@jen50< etastst

Una forma de modificar y reejecutar un comando de la lista hist6pica sin invocar nin@n editor
es usando la apci6n -s del comando fc. El siguiente ejemplo reejecuta el event 31 de nuestra lista
hist6rica en curso, per0 sustituyendola ~ a dgzip
e ~con la cadena compress antes de ejecutarlo: \

45 ksh-> fc -6 gzipcompress 31
man compress I Ipr -P22x

El comando fc permite reejecutar un comando de la lista hist6rica sin invocar el editor per0
anulando su edici6n, para ello especificaremosun caracter gui6n (-) como nombre del editor. El
siguiente ejemplo reejecuta directamente el event ntimero 35 del fichero hist6rico en curso:

Normalmente, el shell Korn tiene establecido un alias con nombre r al valor fc -e -,por lo que
el siguiente comando reejecutarg directamente el event ntimero 35 de la lista hist4rica en CUTSO,
igual que el comando del ejemplo anterior:

47 bh-> r 35
35 rsh crayb /usuariddoperatorfbirtor/binlidentirrca
...
El siguiente ejemplo utiliza el alias r para reejecutar el event 29 de la lista hist6rica en curso, pe-
ro antes de ejecutarlo sustituye la cadena arfa pop la C ~ & Mbeta del comando grep:

48 ksh-> r aCfa=beta29
29 grepbetadotac
...
Si el alias r es emitido sin identificador de event, el shell Korn reejecutaril el liltimo comando de
la lista hist6rica en curso, como se muestra en el siguiente ejemplo:

49 ksh-> date
Moa Oct 22 154136 CEST 2001

50 ksh-> r
date
Mon Oct 22 154213 CEST 2001

Nota
Tener presente, que si con la utilidad fc se edita un grupo de comandos de la lista hist6rica, o si
cuando estamos editando un comando agregamos otrm comandos, y despuQ 10s ejecutamos, el
comando fc resultante crear& en ambos casos,un nuevo event conteniendo varias Ilneas,el cual
sera agregado al final de la lista hist6rica en curso como un event cmico.

406 -
14 OTRAS UIILIDADES
Programas de U t i l W UNIX

Mecanismo history del shell C x i:(

El mecanismo history del shell C, igual que el del shell Kom, es usado para facilitar la reejecu-
ci6n de comandos previa. El mecanismo history salva a unfichero histbrico (tambien conoci-
do como lisfa histbricu) 10s comandos previamente emitidos en el prompt del shell. Los mman-
dos de la lista histclrica tambien son llamados events. Cada event del fichero hist6rico tiene un
nfimero asociado conocido como nlimero de event.

El tamafio del bufler del fichero hist6rico (es decir, el nfimero de command-lines que van a ser
mantenidos) lo identifica la variable de entmo history del shell C, la cual puede ser establecida
en cada sesi6n de login o en nuestro fichero .schrc. Por defecto, el fichero hist6rico es ubicado
en nuestro directorio de defecto con nombre .history.

Otra variable de entarno del shell C, la variable savehist, especifica el nfimero de events de la
sesi6n en curso que s e r h salvados cuando hagamos logout. Si la variable savehist est4 estable-
cida, podemos hacer logout y login de nuevo, y el nfimero de events de la sesi6n de login ante-
rior especificados en eta variable permanecerh disponibles en nuestra lista hist6rica.
El mecanismo history asigna un nfimero de event secuencial a cada uno de 10s comandos regis-
trados en la lista histclrica, comemando la numaaci6n por 1. El shell C dispone de la variable
de entmo prompt (equivalente a la variable PS1 del shell Korn), la cual puede se establecida
para que el shell visualice continuamente como parte del prompt, el nfimero de event en curso.

Listar events con el comando history


La farma de visualizar 10s events de la lista hist6rica del shell C es con el comando history. Par
defecto, la utilidad history lista todos 10s events del fichero hist6ricq visualizando primer0 los
events m h antigua. (E1comando history del shell C varfa ligeramente con el del shell Korn).

Formato
history [-h] [-rl [nlimerol

Opciones
-h Visualiza los events de la lista hist6rica sin los nfimeros de event.

-r Visualiza 10s events de la lista hist6rica en orden inverso a l de defecto. Primer0 son
visualizada 10s events m h recientes.

Argumentos
nlimro Indica el nfimero de events de la lista hist6rica que s e r h visualizados, siendo el nfixne
ro &do en d m e r o , un nfimero enter0 positivo que rqresenta el nfimero relativo de
un event con relaci6n al event en curso. P a ejemplo:
history 1 Lista el event en curso de la lista hist6rica en curso.
history 2 Lista 10s dos filtimos events, el event previo y el event en curso.
history 8 Lista los tlltimos 8 events, incluido el event en curso.

14-OTRAS UllLJDADES 407


Programas de Utilidad UNIX

En el siguiente ejemplo, el primer command-line establece un nuevo prompt para visualizar


contiwamente el ntlmero de event en curso. DespueS de introducir varios comandos, emitimos
el segundo command-line, visualizando 10s 12 siltimos events de la lista histbrica, incluido el
event en curso (el comando que genera la lista visualizada):

9% set prompt = "!ah->"


...
41 ah-> history 12
30 s t prompt = "I ah-> *'
31 echo $history
32 cat letdpaswd I sort I awk -F: '{ printf "%-1Os %An", $1, $5 )'
33 Ipr -Plaser-22x salidaslresultados02
34 rcp proccsoslprocsdia a a y b : p r o c e S o d p ~ l O
35 ma& .s "Error backup" sistemas@daxp< backerror
36 k 4I g c p *"d*
37 fmd .i( aize 0 -0 -name core\) 4rm {}\;
38 grep -i 'resultest' programas/progsftvericamps
39 awk - F'$7 4csW { printf "%-12s %h", $1, $7 I e t d p w d
40 procesosmarilo-
41 history 12
42 ah->

Reejecutar events
El mecanismo history del shell C proporciona cuatro farmas de refexenciar un event de la lista
hist6rica para despueS reejecutarlo:
Par el &mer0 absoluto del event.
Par el nfimerorelativo del event con relaci6n al event en curso.
Por una cadena que se curresponda con caracteres de la primera palabra del event.
Por una cadena que se curresponda con cualquier palabra del event.
Todas las referemias a 10s comandos de la lista hist6rica se realizan mediante el carkter admi-
raci6n (!), seguido de un ntlmero 0 de una cadena, con el siguiente formato:

El siguiente ejemplo usa el carikter admiraci6n con un niimero absoluto para, primer0 referen-
ciar y despuQ reejmtar al presionar < R E " > el event niimero 37 de la lista hist6rica en cur-
so. Obsehvemos que el comando reejecutado es visualizado:

42 ah-> !37
fmd .\(& 0 -0 -name core\) -0k rm {}\;
...
Tambien podemos reejecutar un event relativo al event en curso de la lista hist6rica, especifi-
cando un nfimero negativo. Por ejemplo, si nuestro event en curso es el 43, y queremos reejecu-
tar el event ntimero 31 de nuestra lista histhica, emitir el siguiente comando:

43 Sh-> !-12
echo $history
100

408 -
14 OTRAS UTILJDADES
Programus de U t i l W UNIX

El siguiente ejemplo usa la correspondencia de text0 para reejecutar el comando m& reciente de
la lista W i c a en curso que comience con la cadena Is:

44 ah-> !IS
k -dI grep '"d'
...
El siguientt ejemplo reejecuta el command-line mhs reciente de la lista hist6rica que contenga la
cadena sort <especVicadade la forma indicada) en cualquier parte del event:

45 Sh-> !?sort?
cat Ietcfpasswd I sort I a d - F'{ printf "%-l0s% s W , $1,$5 }'
...

Reejecutar el event previo


Como una forma especial, dos caractexes admiraci6n (!!) reejecutan el event previo de la lista
hist6rica. A un comando previo se le pueden agregar operadares adicionals. Est0 es titil sobre
todo cuando el comando emitido genera salidas que ocupan mAs de una p-a. Por ejemplo, el
siguiente comando reejecuta el went previo controlando la salida con la utilidad more:

46 ah-> !!I
cat /etc/passwd I sort I awk -F'{ printf "Z-lOs%sW, $1,$5 }'
...

Recuperar argumentos del event previo


El mecanismo history pennite la recuperaci6n de palabras, y posterior ejecuci6n, del cualquier
event previo. Para ello, el mecanismo history proporciona el carkter admiracih, seguido del
caracter dos puntos (!:), y estos seguidos de un carh3er indicudor de palabra, para indicar que
palabra del event va a ser recuperada. El fcirmato general es:

Las palabras de un went de la lista hist6rica son numeradas secuencialmente, comenzando la


primera palabra por 0 (usualmente el comando), siguiendo la segunda palabra por 1 (primer ar-
gumento). y asf sucesivamente.

Los indicadores de pdubra bhicos, usados por el shell C, son los siguientes:

Indicador Descnvcidn

0 Referencia la primera palabra del event (usualmente el comando).


n Indica el argumento enkimo, donde n > 0.
A Referencia la palabra 1 del event (el primer argumento).
$ Indica el tiltimo argumento del event.
X-Y Referencia un rango de argumentm desdex hastay.
-Y Indica las palabras de 0 ay.
* Referencia todos 10s argumentos, o ninguno si el event s610 tiene UM palabra.
X* Referencia los argumento desdex al tiltimo.
X- Indica 10s argumentos desdex hasta el pemlltimo.

-
I4 OTRAS UTIUDADES 409
Programas de Utilidad UNIX

Podemos omitir el signo dos puntos (:) que separa el signo admiraci6n (!) del indicador de pa-
Zubru, si el indicador comienza con 10s signos ",$, *, o -. Par ejemplo, las dos especificaciones
siguientes: !:"y !",realizan la misma acci6n: recupan el primer argumento de un even?.
En los siguientes ejemplos, primer0 emitiremos un command-line relacionado con el comando
ejempfo del mecanismo history para ver con m& claridad 10s events previos de la lista hist6rica,
y seguidamente se recuperarfiy ejecutaril el nuevo even?.

En el siguiente ejemplo, el event 48 recupera el filtimo argumento del even? previo, seguida-
mente el nuevo comando sera reejecutado al presionar <RETURN>:

47 ah-> mvficherol fichero2


48 ah-> Vi $
:!
v i ticherd
...
El siguiente ejemplo recupera el primer argumento del command-line previo. El nuevo even?
generado es seguidamenteejecutado:

49 ah-> Is proc-uno proc-dbs proc-tres


...
50 ah-> chmod u+x !:"
ChmOd u+r proc_uno

El siguiente ejemplo recupexa el segundo argumento del comando previo, volviendo a ejmtar
el nuevo comando rsh en otro ordenadm:

51 ah-> rsh crarpc huariodcecaloperator.mios/ceca/operator/bin/cuentas


...
52 ah->
rsh crayb !:2
rsh crayb lusuarioslcealopera~lb~cuentas
...
En el siguiente ejemplo, el comando del event 54 recupera tdos 10s argumentos del even? pre-
vio, recomponiendo y ejecutando un nuevo comando Is; en el segundo comando, el event 55 re-
cupera el segundo y tercer argument0 del even?previo:

53 ah-> Is4fortab catalogs backup catidoscop


Is4 Command not found.
54 ah-> IS -1 !*
Is -I fortab cataloga backup calidoscop
...
55 ah-> grep ' W a ' !:2-3
grcp 'Wi'
cataloga backup
...

Recuperar argumentos de los tiltimos events


El mecanismo history tambien permite recupem argumentos, y la posterior ejecuci6n, de un
event determinado de la lista hist6rica en curso, con el siguiente formato:

Donde nzlmero es el ntimero de even?de la lista hist6rica en curso del cual queremos recuperar
sus argumentos, e indicador es uno de 10s indicadores de palabra vistos en la p f i g i ~anterior.
410 14-OTRAS UTXLJDADES
Proaramas de Utilidad UNIX

El siguiente ejemplo recupera el tercer argumento del event niimero 38 de nuestra lista histckica,
reejecutando el nuevo comando generado:

El siguiente ejemplo recupera el comando (argumento 0)del event rUimero 35 de nuestro fichero
hist6ric0, el cual es seguidamentereejecutado:

57 ah-> !3&0
mailx
...
El siguiente ejemplo recupera todos 10s argumentos del event n6mero 35 (incluido el comando),
excepto el atimo argumento:

El siguiente ejemplo recupera todos 10s argumentos del event nfimero 32 de nuestra lista hist6ri-
ca. El nuevo oomando rediraiona la salida generada pop el command-line al fichero salctcrs:

Modificar events
El mecanism0 hktory permite modificar un event o una palabra del event, pudiendo reejecutarlo
seguidamente. La 1nodificaci6n se realiza especifkando uno o varias modifcudores, precedidas
de un signo dos puntos (:), indicando el tip0 de modificaci6n que va a recibir el event.

Los siguientes son 10s rnodificadores reconoddas por el shelf C

Modificador Descripcibn
& Repite la sustituci6nprevia.
e Bma el nombre de un fichero, excepto la extensi6n.
h Borra el ciltimo elemento de un nombre de path.
P Visualiza el nuevo event modificado, per0 no lo ejecuta.
Q Protege las modificaciones, evitando sustituciones adicionales.
r Borra la extensi6n de un nombre de fichero.
t Borra todos los elementos de un nombre de path, excepto el filtimo.
[g]docd/new/ Reemplaza la cadena especifcada en uzd con la especificada en new.

El modificador s sustituye la primera m e n c i a de la palabra espwificada en old con la especi-


ficada en new; si se especifica la letra g delante del modificador s, la sustituci6n sobre el event
es global, reemplazando todas las ocurrencias de la c a d e especificada
~ en old.

Usualmente, el signo bam inclinada (0 es el delimitador usado en las cadenas, per0 podemos
usar cualquier cat.aCter que no est6 incluido en las cadenas de sustituci6n. El delimitador final
puede ser omitido si hediatamente despueS de la c a d e es ~ emitido un <RETURN>.

-
14 OTRAS UTILIDADES 4Zl
Programus de Utilidad UNIX

Si epecificamos un sign0 ampersand (&) en la sustituci6n new,entonces es reemplazada con el


text0 de la cadena dada en old. Una ~ a d nulae ~especificada en old (sl/new),sera reenq>lazada
con la dltima cadena dada en old o por la Cltima cadena usada con la plantilla ?cadem?.

En el siguiente ejemplo, el event 62 llama al event previo, para m e g i r UR mor gramatical del
comando previo con el modificador s,siendo seguidamentereejecutado:

6 1ah-> car / u s r / c e d ~ ~ s d O S /O 60 5 0 6
car: Command not found.
62 ah-> !!:s/car/cat
cat /usr/axalmarildsaLOSO6 /usr/dramidmem.0506
...
Como un cas0 especial de sustituci6n podemos usar el acento circunflejo (A) para modificar un
event previo, en vez del modifcadur s. El siguiente comando produciri el mismo resultado que
el del ejemplo anterior:

62 ah->
AcarAcat

El siguiente ejemplo llama a l event previo, recupera 10s argumentos 1 y 2, borra la extemi6n del
primer mmbre de fichero y &put% reejecuta el nuevo command-line:
63 ah-> echo !!:1-2:r
echo /usr/ceca/marildsaI /usr/cecatramkedmemo.O506
...
El siguie- ejemplo llama al event 62, recupexa 10s argumentos 1 y 2, modifica los dos paths
del event dejando solamente 10s nombres de fichero, y reejecuta e4 nuevo cornando:

...
El siguiente ejemplo llama al event previo, modifica las extemiones de 10s dos fickm, usando
la opci6n g del modificadoc s, y seguidamente reejecuta el nuevo command-line Is -I:

65 ah-> !!:g~/0506/1012/
Is -I saI.1012 memo.lOl2
...
El siguiente ejemplo llama al event 62, rmpera el segundo argument0 y lo modifica, y al pre-
sionar <RETUZW> el nuevo event es visualizado, peso no es ejecutado:

66 ah-> vi !62:2:p:r
vi /usr/dramiredmemo

El siguiente es un ejemplo de alias, llamado ev, que puede s m o s dtil si lo establecemos en


nuestro fichero .cshrc. El alias ev llama al event previo y lo introduce en un fichero temporal,
ubicado en nuestro direct0130 de defecto, creado por el editor vi, hacemos las modificaciones
pertinentes, y al salir del editor con <ZZ>el nuevo comando es ejecutado:

67 ash-> cat .cshrc


...
sethiStwy=100
a l i i ev "echo \!-l:p!
-/tmp; vi +op Amp; source 4 m p ; source 4mp; f m 4tmp"
...
412 -
14 OTRAS UTIUDADES
Programas de U t i l M UNIX

APENDICE
:.,
Tabhs de utilidades UNIX
Tabla A

APEhDICE 413
Programas de Utilidad UNIX

hostname Visualiza o establece el nombre del host del sistema en curso. 305
id Visualiza informaci6n de la identidad de un usuario en el sistema. 1
ident Examina y extrae plantillas de 10s identijicudores de un fichero RCS. 272
iostat Genera informaci6n relativa a terminales, discos y CPU. (S6lo Berkeley). 24
jobs Facilita infarmaci6n de los jobs en ejecuci6n submitidos a background. -208
join Junta las lineas de dos ficheros que contienen campos comunes. -131

pack Compacta ficheros conservanda sus nombres miginales @hero .z). -80
paste concatena las fieas de uno 0 varios ficheros de entrada. -
129
Pp: Visualiza el contenido de uno o varios ficheros en pantallas comple€as. -52
pinp: Comprueba la conectividad de un host visualizandopings. -
329
pr F m t e a y visualiza el contenido de uno o varios ficheros. -55
ps Visualiza informaci6n relativa al estado de 10s procesos en curso. 7
quota Visualiza el estado del espacio en disco que nos ha sido asignado. 223
-
rCp Copia ficheros de un host local a otro remoto con sistemas UNM. -
357
rcs Crea nuevos ficheros RCS, cambia y establece atributos a 10s existentes. 266
rcsclean Borra ficheros de trabajo no modificados del sistema RCS. -
273
rcsdiff Visualiza las diferencias entre dos versiones de un fichero RCS. ~ -
271
rcsfreeze Asigna un nombre simb6lico de versi6n a ficheros RCS. 272
-
rcsmerge Incorpora los cambios entre dos ficheros del sistema RCS. 274
restore Copia a disco fichaos de cinta salvados con la utilidad dump. 250
rlog Visualiza informaci6n de las distintas versiones de un fichero RCS. -
269
rlogin Establece una conexi6n remota entre usuarios del sistema UNM. 35 1
rm I Nos Dermite borrar uno o varios ficheros o directories d a b .
rmdir Borra uno o varim directorios del sistema, 10s cuales deben estar vacfos. 63
rsh Permite ejecutar un comando en un host remoto. (remsh en System V). 354
Sdiff Comara dos fichaos indicando las diferencias entre ambos. 69
Sed Editor de flujo no interactivo usado para modificar lfneas de un fichero. 139
sleep Suspende la ejecuci6n de un proceso durante un tiempo especificado. 16

414 APENDICE
Programas de Utilidad UNIX

Tabla B

APENDXCE 425
Programas de U t i l W UNIX

Editor de lfnea usado para crear, editar y modificar ficheros.


Localiza plantillas en fichetos y permite usar expresiones regulares extendidas.
Editor de lfnea que usualmente trabaja en modo input.
Visualiza y establece 10s valores de las variables de entorno.
eval Avaliia sus argumentos y pasa 10s resultados del command-lineal shell.
exit Produce la salida del shell con un exit-status determinado.
expand Cambia espacios a tabuladores en uno o varios ficheros.
export Permite usar el valor de UM variable en el shell en curso y en 10s subshells.
factor Obtiene los factores de un niimero enter0 espedficado. (S610 System V).
fgrep Loc& plantillas en uno o varios ficheros usando cadenas sencillas.
fmt Formatea lineas de un fichero a un tamaflo especificado. (S610 Berkeley).
fold Fragmenta lfneas de un fichero ins- un caz%ctmmeva linea.
from Visualiza las lineas de cabeaxa de mestras mensajes del carreo.
gawk Analiza y procesa plantillas en un ficko. Similar a la utilidad awk.
get Obtiene una copkt de un fichero SCCS y crea versiones.
getconf Visualiza valores de las variables de la co11figuraci6n del sistema.
getopts Amliza y recupera qxiones y parhetros posicionales de una utilidad.
groups Visualiza el nombre de grupo al que pertenece un usuario.
gzcat Lee ficheros comprimidos con la utilidad gzip sin descomprimirlos.
host Viiualiza infarmaci6n relativa a 10s hosts Internet. (S610 System V).
hostid Establece y v i s u d h en hexadecimal el idenMiaidor del host en curso.
ipcs Visualiza estadfsticas 8cerca de la furaci6n IPC (Interprocess Communication).
ja R O ~ X Xinfmmaci6n
~ ~ O M relativa al accounting del usuario.
ksh Invoca el int&pre$e interactive de comandos del shell Korn.
Id Invoca el link editor para producir un programs ejecutable.
learn Proporciona i n € d 6 n de ayuda en varios temas del shell. (S610 Berkeley).
leX Genera programas para ser usados en adisis de texto.
line Lee una lfnea del standard-input y la scribe en el srandard-ourput.
lint Intenta ckztecm funciones mal usadas en programas escritos en lenguaje C.
~~

In Hace link a un fichero permitiendo compartir datos entre usuaries.


locale Visualiza informaci6n relativa a las variables de entorno locales.
logname Visualiza el idenMicador de login del usuario alojado en curso.
mail Permite enviar y &bir mensajes entre usuarios de un ordenador.
man Visualiza las pfiginas del manual-online del sistema UNIX.
merge Incorpora 10s cambia6 entre dos ficheros en un tercer fichero.
mesg Permite activar y desactivar la entrada de mensajes talk y write.
newgrp Cambia el identificador del wpo primario del proceso del shell en curso.
news Visualiza las noticias en curso del sistema contenidas en el fichero/irsr/nms.
nl Numera las lfneas de un fiChK0 &do y las visualiza en el stdout.
nm Visualiza UM lista formateada de sfmbolos de uno o varios ficheros objeto.
nroff Formatea texto contenido en un fichero para su posterior visualizaci6n.
onintr Toma una acci6n en procesos bajo el shell C si se produce una seAal SIGINT.
passwd Permite cambiar el pmword asociado a nuestro login.
paX Exme, scribe y lista ficheros miembros de un archivo de fichem.
pcat Pennite leer ficheros compactados previamente con la utilidad pack
print Utilidad del shell Korn similar a echo per0 con m5s prestaciones.
printenv Visualiza y establece variables de entorno en el shell C.
printf Convierte, formatea y escribe sus argumentos en el standard-output.
prs Visualiza el historial de un fichero SCCS conforme a un formato dado.
pwd Visualiza el nombre del path de nuestro directorio de trabajo en curso.

416 APENDICE
Proaramas de Utilidad UNlX

stop Suspende la ejecuci6n de unjob que se est4 procesando en background.


su Permite hac= login con otro nombre desde nuestra sesi6n en curso.
SUm Viiualiza el tamafio de un fichero en unidades de 512 bytes.
talk Permite a dos usuarios comunicarse simultbeamenteentre sus terminales.
tbi E3 un wewocesador me farmatea tabIas D ~ G Ila utilidad oroff.
tftp PropoPciona la funci6n TFlT (Trivial File Transfer Protocol).
tic Traduce fichos temkfo del formato fuente al formato compilado.
time Visualiza el tie- comumido en la ejecuci6n de un comando.
timex Permite medir el tiernpo de ejecuci6n de un comando dado. (S610 System V).
tput Pennite OMener prestaciones del terminal y usarlas en el shell.
trap Define la &6n en un s c h t cuando se recibe un indicador de error.
trbsd Traduce 10s caracteres de una cadena y 10s reemplaza por otra. (S610 Berkeley).
tset Permite obtener prestaciones del terminal mediante la base de datos tenninfo.
tSOrt Viiualiza una lista desordenadade pares ordenados de un fichero.
ulimit Visualiza y establece el limite en et tamafio de 10s recursm del sistema.
unalias Borra uno o varios alias declarados antexiormente con el comando alias.
unexpand Cambia tabdadores a espacios en uno o varim fickos.
unget Permite restaurar un fichero SCCScreado con el comando get -e.
unset E l i m i ~uno o varios nombres de variables o de funciones declaradas.
unsetenv Bma una o varias variables de entmo declarada bajo el shell C.
uptime ~~
Visualiza un sumario de la actividad del sistema. (S6lo en Berkeley).
~

vacation Devuelve un mensaje mail al remitente indicandole la ausencia. (Berkeley).


vi Invoca el editor de pantalla basado en el editor de linea de nivel inferior ex.
vmtat Facilita estadisticas de la memoria, proax0s y CPU. (S610 en Berkeley).
wait Espera a que terrnine un proceso background para notificar el status de final.
wali Envia mensajes a todos 10s usuarim del sistema alojados en ese momento.
what Visualiza informaci6n de identificaci6n de un fichero SCCS.
whatis Describe la funci6n del comando dado (lista la s d 6 n NAME del man).
which Locdiza el comando o shell-script especificado, visualizandoalias y paths.
whoami Visualiza el identificador de login del usuario alojado en curso.
Write Permite convecsar entre dos usuarios alojados (envla y recibe mensajes).
1 yacc

APENDXCE 417

También podría gustarte