You are on page 1of 181

G.L.U.P.

Gu de Linux Para el Usuario a


Copyright c 1993, 1994, 1996 Larry Greeneld

Todo lo que Ud. necesita saber para comenzar a utilizar Linux, el clon gratuito de Unix. Este manual cubre los comandos bsicos de Unix, y tambin los espec a e cos de Linux. El destinatario de este manual es el usuario principiante de Unix, aunque puede ser de utilidad como referencia para los usuarios ms a experimentados.

Esta pgina se ha dejado en blanco intencionalmente. a

UNIX es marca registrada de X/Open. MS-DOS y Microsoft Windows son marcas registradas de Microsoft Corporation. OS/2 y Operating System/2 son marcas registradas de IBM X Window System es una marca registrada del X Consortium, Inc. Motif es una marca registrada de la Open Software Foundation. Linux no es marca registrada, ni tiene ninguna conexin con UNIX o con los UNIX System Laborao tories, o con X/Open. Por favor, ponga en conocimiento del autor cualquier marca registrada que no se haya mencionado.

Copyright c Larry Greeneld 427 Harrison Avenue Highland Park, NJ 08904 leg+@andrew.cmu.edu Traduccin al castellano 1997 Grupo LuCAS. o Ver apndice LuCAS para una relacin completa. e o Se garantiza el permiso para realizar y distribuir copias literales de este manual, siempre que se preserven la nota de derechos de autor y este permiso en todas las copias. Se garantiza el permiso para copiar y distribuir versiones modicadas de este manual bajo las condiciones de las copias literales, siempre que las secciones en las cuales se reimprime La Licencia Pblica General GNU, La Licencia Pblica General de Biblioteca GNU, y otras en las cuales haya u u partes claramente marcadas bajo un derecho de autor separado, se reproduzcan bajo las mismas condiciones que ellas estipulan, y se logre que el trabajo derivado resultante en su totalidad se distribuya bajo los trminos de una noticacin de permiso idntica a esta misma. e o e Se garantiza el permiso de copiar y distribuir traducciones de este manual a otros idiomas bajo las condiciones dadas para versiones modicadas. La Licencia Pblica General GNU y La Licencia u Pblica General de Biblioteca GNU pueden incluirse a travs de una traduccin aprobada por la u e o Free Software Foundation, en lugar de los originales en ingls. e A su opcin, Ud. puede distribuir copias literales o modicadas de este documento bajo los trminos o e de la La Licencia Pblica General GNU, excepto las secciones marcadas claramente bajo otros u derechos de autor. Con distintos objetivos, pueden garantizarse ciertas excepciones a esas reglas. Escriba a Larry Greeneld a la direccin dada ms arriba, o env correo electrnico a leg+@andrew.cmu.edu y o a e o consulte. Se solicita (pero no se requiere) que Ud. notique al autor cuando se imprima a gran escala o se comercialice este documento. Las regal y donaciones sern aceptadas y sustentarn as a a las siguientes ediciones.

ii

Estas son algunas de las convenciones tipogrcas que se utilizan en este libro. a negrita Se utiliza para iniciar nuevos conceptos, AVISOS, y palabras reservadas de lenguajes. Se utiliza para enfatizar el texto. Se usa para marcar meta-variables en el texto, especialmente en representaciones de la l nea de comandos. Por ejemplo, ls -l foo donde foo se coloca en la posicin donde ir un nombre de archivo, como por ejemplo /bin/cp. o a

itlica a inclinada

monoespaciada Se usa para representar la interaccin en la pantalla. o Tambin se usa para los ejemplos de cdigo fuente, sea que se trate de cdigo C, e o o guiones de shell, o lo que sea, y para mostrar archivos en general, como por ejemplo archivos de conguracin. Cuando razones de claridad adicional lo exijan, estos o ejemplos se enmarcarn en cuadros nos. a Tecla Representa la tecla que debe oprimir. En general lo ver utilizado de la siguiente a manera: Oprima Intro para continuar. 3 El diamante en el margen, como los diamantes negros en las montaas de ski, n marcan los lugares de peligro o precaucin. Debe leer cuidadosamente los o prrafos marcados de este modo. a

Esta X en el margen indica la existencia de instrucciones especialmente destinadas a los usuarios del X Window System.

SLOW
Esto indica un pargrafo que contiene informacin especial que debe leerse con todo a o cuidado.

Agradecimientos
El autor quiere agradecer a las siguientes personas por su invaluable ayuda, tanto con Linux en s como con la escritura de The Linux Users Guide. Linus Torvalds por proveer el material acerca del cual se escribe este libro. Karl Fogel me ha proporcionado una enorme ayuda con la escritura de mi documentacin de Linux o y adems escribi la mayor parte del Cap a o tulo 8 y el Cap tulo 9. Cualquier reconocimiento hacia su labor ser insuciente. a Maurizio Codogno escribi gran parte del Cap o tulo 11. David Channon escribi el apndice sobre el vi. (Apndice A) o e e Yggdrasil Computing, Inc. por su generoso (y voluntario) sostn para este manual. e Red Hat Software por su (ms reciente y tambin voluntario) sostn. a e e El programa fortune por proveerme algunas de las preciosas citas con las cuales comenzar cada cap tulo. An cuando a nadie ms le gusten, a m me encantan. u a

iii

iv

Indice General
1 Introduccin o 1.1 Quin debe leer este libro? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 1.1.1 Qu debe hacer antes de leer este libro? e . . . . . . . . . . . . . . . . . . . . 1 1 1 2 2 3 4 4 4 4 7 7 8 9 9 10 11 11 12 14 14 15 16

1.2 Cmo evitar leer este libro? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 1.3 Cmo leer este libro? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 1.4 Documentacin de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 1.4.1 1.4.2 1.4.3 Otros libros de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . COMOs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Qu es el Proyecto de Documentacin de Linux? . . . . . . . . . . . . . . . . e o

1.5 Sistemas operativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 A propsito, qu es Unix? o e 2.1 La historia de Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 La historia de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 2.2.2 2.2.3 Linux aqu y ahora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Unas pocas preguntas y respuestas . . . . . . . . . . . . . . . . . . . . . . . . Software comercial en Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 En el principio 3.1 La computadora despierta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Linux despierta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 La actuacin del usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 3.3.1 3.3.2 3.3.3 El ingreso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Al abandonar la computadora . . . . . . . . . . . . . . . . . . . . . . . . . . . Como apagar la computadora . . . . . . . . . . . . . . . . . . . . . . . . . . . v

vi

INDICE GENERAL

3.4 Mensajes del ncleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u 4 El shell de Unix 4.1 Comandos Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Un comando Unix t pico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17 21 21 22 23 24 25 27 29 30 31 32 33 35 35 35 35 36 36 37 38 38 38 39 39 40 40 40 41 41 41

4.2 Autoayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Almacenaje de la informacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 4.3.1 4.3.2 4.3.3 Miremos los directorios con ls . . . . . . . . . . . . . . . . . . . . . . . . . . El directorio actual y cd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creacin y borrado de directorios . . . . . . . . . . . . . . . . . . . . . . . . . o

4.4 Informacin en movimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 4.4.1 4.4.2 4.4.3 cp como un monje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La poda con rm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ser interesante tener un rastrillo . . . . . . . . . . . . . . . . . . . . . . . . a

5 El sistema de ventanas X 5.1 Ejecucin y salida del sistema de ventanas X . . . . . . . . . . . . . . . . . . . . . . o 5.1.1 5.1.2 Ejecucin de X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o Salida de X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.2 Qu es el sistema de ventanas X? . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 5.3 Qu es esto que hay en mi pantalla? . . . . . . . . . . . . . . . . . . . . . . . . . . . e 5.3.1 5.3.2 XClock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XTerm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.4 Gestores de ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 5.4.2 5.4.3 5.4.4 5.4.5 5.4.6 5.4.7 5.4.8 Cuando se crean nuevas ventanas . . . . . . . . . . . . . . . . . . . . . . . . . Foco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Moviendo ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Profundidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Iconizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variando el tamao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n Maximizacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o Mens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u

5.5 Atributos X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

INDICE GENERAL

vii

5.5.1 5.5.2

Geometr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Presentacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o

41 42 43 43 44 44 47 47 48 48 49 49 49 50 50 50 51 51 52 52 56 57 61 61 62 64 65 67 71 71 73

5.6 Caracter sticas comunes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.1 5.6.2 5.6.3 Botones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Barras de men . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u Barras de desplazamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6 Trabajando con Unix 6.1 Comodines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 6.1.2 Qu ocurre realmente? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e El signo de interrogacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o

6.2 Ganar tiempo con bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 6.2.2 Editando la l nea de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . Completamiento de comandos y nombres de chero . . . . . . . . . . . . . . .

6.3 La entrada estndar y La salida estndar . . . . . . . . . . . . . . . . . . . . . . . . a a 6.3.1 6.3.2 6.3.3 6.3.4 Algunos conceptos de Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . Redireccionar la salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Redireccionar la entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Las tuber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . as

6.4 Multitarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.1 6.4.2 Usando el control de trabajos . . . . . . . . . . . . . . . . . . . . . . . . . . . Teor del control de trabajos . . . . . . . . . . . . . . . . . . . . . . . . . . . a

6.5 Consolas virtuales: como estar en varios lugares a la vez . . . . . . . . . . . . . . . . 7 Peque os programas potentes n 7.1 El poder de Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Trabajando con cheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Estad sticas del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Qu hay en un chero? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 7.5 Comandos de edicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 8 Editando archivos con Emacs 8.1 Qu es Emacs? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 8.2 Comenzar rpidamente en X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a

viii

INDICE GENERAL

8.3 Editando varios archivos al mismo tiempo . . . . . . . . . . . . . . . . . . . . . . . . 8.4 Terminando una sesin de edicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o 8.5 La tecla Meta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6 Cortar, pegar, destruir y tirar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.7 Buscar y reemplazar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.8 Qu es lo que ocurre realmente? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 8.9 Pidiendo ayuda a Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.10 Especializando buers: Modos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

74 75 76 76 77 78 79 80 81 81 81 82 83 84 88 91 91 91 92 92 93 99

8.11 Modos de programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 8.11.1 Modo C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.11.2 Modo Scheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.11.3 Modo de correo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.12 Como ser ms eciente an . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a u 8.13 Personalizando Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.14 Averiguando ms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 9 Tengo que ser yo mismo! 9.1 Personalizacin del bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 9.1.1 9.1.2 9.1.3 9.1.4 Arranque del shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ficheros de arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creando alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variables de entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9.2 Los cheros de inicio de X Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.1 9.2.2

Conguracin de twm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 o Conguracin de fvwm o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

9.3 Otros cheros de inicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 9.3.1 9.3.2 9.3.3 9.3.4 El chero de conguracin de Emacs . . . . . . . . . . . . . . . . . . . . . . . 107 o Conguracin por defecto del FTP . . . . . . . . . . . . . . . . . . . . . . . . 107 o Permitiendo un acceso remoto sencillo a su cuenta . . . . . . . . . . . . . . . 108 Redireccin de correo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 o

9.4 Veamos algunos ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

INDICE GENERAL

ix

10 Hablando con los dems a

111

10.1 Correo electrnico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 o 10.1.1 Enviar correo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 10.1.2 Leer el correo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 10.2 Noticias ms que de sobra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 a 10.3 Localizar a la gente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 10.3.1 Planes y proyectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 10.4 Uso remoto de sistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 10.5 Intercambio de cheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 10.6 Viajando por la telaraa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 n 11 Comandos divertidos 117

11.1 find, el buscador de cheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 11.1.1 Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 11.1.2 Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 11.1.3 Opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 11.1.4 Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 11.1.5 Acciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 11.1.6 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 11.1.7 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 11.1.8 Una ultima palabra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 11.2 tar, el archivador en cinta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 11.2.1 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 o 11.2.2 Opciones principales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 11.2.3 Modicadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 11.2.4 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 11.3 dd, el duplicador de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 11.3.1 Opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 11.3.2 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 11.4 sort, el clasicador de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 11.4.1 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 o 11.4.2 Opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 11.4.3 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

INDICE GENERAL

12 Errores, equivocaciones, bugs, y otras molestias

129

12.1 Evitando errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 12.2 Qu hacer cuando algo va mal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 e 12.3 No es fallo tuyo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 12.3.1 Cuando hay un error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 12.3.2 Noticando un error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 A Introduccin a vi o 133

A.1 Una rpida historia de Vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 a A.2 Rpido tutorial de Ed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 a A.2.1 Crear un chero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 A.2.2 Editar un chero existente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 A.2.3 Nmeros de l u nea en detalle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 A.3 Rpido tutorial de Vi a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

A.3.1 Ejecutar vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 A.3.2 Comandos de movimiento del cursor . . . . . . . . . . . . . . . . . . . . . . . 138 A.3.3 Borrar texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 A.3.4 Salvar un chero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 A.3.5 Qu viene a continuacin? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 e o A.4 Tutorial avanzado de Vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 A.4.1 Movimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 A.4.2 Modicacin del texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 o A.4.3 Copiar y mover bloques de texto . . . . . . . . . . . . . . . . . . . . . . . . . 142 A.4.4 Bsqueda y cambio de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 u B The GNU General Public License C The GNU Library General Public License D Qu es LuCAS? e E Qu es INSFLUG? e 147 155 165 167

Cap tulo 1

Introduccin o
How much does it cost to entice a dope-smoking Unix system guru to Dayton? Brian Boyle, Unix Worlds First Annual Salary Survey

1.1

Quin debe leer este libro? e

Es Ud. la persona que debe leer este libro? Perm tame responder a esta pregunta hacindole estas e otras: Acaba de obtener Linux de alguna fuente, lo instal y ahora quiere saber que puede hacer? o O, es un usuario de computadoras que nunca ha utilizado Unix y est considerando usar Linux a pero quiere saber lo que puede hacer con l? e Si tiene este libro, la respuesta a esas preguntas probablemente es s Cualquiera que tiene . Linux (el clon gratuito de Unix escrito por Linus Torvalds) en su PC, pero no sabe que hacer despus de la instalacin, debe leer este libro. Aqu encontrar explicaciones sobre la mayor de los e o a a comandos bsicos de Unix, e incluso de algunos avanzados. Tambin trataremos acerca del potente a e editor GNU Emacs y de muchas otras aplicaciones importantes en Unix.

1.1.1

Qu debe hacer antes de leer este libro? e

Este libro da por sentado que Ud. tiene acceso a un sistema Unix (Para aprender a nadar hay que mojarse!). Ms importante an, el sistema Unix antes mencionado debe ser una PC INTEL a u corriendo Linux. Este requerimiento no es estrictamente necesario, pero cuando las versiones de Unix dieran en su comportamiento, nos ocuparemos de las respuestas que exhiba Linux y no de las otras variantes de Unix. Linux est disponible de distintas maneras, llamadas distribuciones. Espero que haya encontrado a una distribucin completa, como por ejemplo la MCC-Interim, y que la tenga instalada. Existen o diferencias entre las distintas distribuciones de Linux, pero la mayor de ellas son insignicantes. a Ocasionalmente ver que en este libro las cosas se ven un poquito distintas a lo que ve en su a 1

Cap tulo 1. Introduccin o

computadora. Si le sucede esto, es probable que est utilizando una versin distinta de la m estoy e o a: interesado en recibir informes de tales casos. Si Ud. es el superusuario (el ocupado del mantenimiento, el instalador) del sistema, deber crearse a una cuenta de usuario normal para Ud. mismo. Consulte por favor los manuales de instalacin para o obtener la informacin necesaria. Si no es el superusuario, deber solicitarle a quien lo sea que le o a cree una cuenta. Ahora deber tener tiempo y paciencia. El aprendizaje de Linux no es fcil la mayor de las a a a personas encuentran que es ms fcil aprender el sistema operativo del Macintosh. Una vez que a a aprende Linux las cosas se vuelven mucho ms fciles. Unix es un sistema muy poderoso y con l es a a e muy fcil realizar tareas complejas. a Adems, este libro supone que Ud. est moderadamente familiarizado con algunos trminos a a e computacionales. Aunque este requerimiento no es necesario, hace ms fcil la lectura. Debe conocer a a trminos como programa o ejecucin. Si no los maneja, necesitar de la ayuda de alguien ms e o a a avezado durante su aprendizaje de Unix.

1.2

Cmo evitar leer este libro? o

La mejor manera de aprender el uso de casi cualquier programa de computadora es ponindose a e trabajar sobre la computadora. La mayor de las personas encuentran de poco benecio la lectura a de un libro si no utilizan a la vez el programa. Por lo tanto, la mejor manera de aprender Unix y Linux es utilizndolos. Utilice Linux para todo lo que pueda. Experimente. No tenga miedo es a posible que haga algunos l pero siempre puede volver a instalar todo. Mantenga actualizadas las os, 1 copias de seguridad y divirtase! e Unix no es un sistema operativo tan intuitivamente obvio como algunos otros. Por lo tanto, es probable que deba leer al menos los cap tulos 4, 5, y el 6, antes de empezar a experimentar. La manera nmero uno para evitar la lectura de este libro es que utilice la documentacin u o disponible en l nea en Linux. Para ello debe aprender a utilizar el comando man su descripcin o est en la Seccin 4.2. a o

1.3

Cmo leer este libro? o

La manera sugerida para aprender Unix es leer un poquito, luego jugar un poquito. Juegue hasta que se sienta cmodo con los conceptos, y luego puede saltar entre los temas que se cubren en el o libro. Encontrar una variedad de temas, algunos de los cuales sern de su inters. Luego de un a a e tiempo, se sentir lo sucientemente conado como para utilizar comandos sin saber exactamente a que es lo que deber hacer. Esta es una buena seal. an n Lo que mucha gente asocia con Unix es el shell de Unix: se trata de un programa especial que interpreta comandos. En la prctica, sta es una manera conveniente de ver las cosas, pero debe a e
1 N.

del T.: backups

1.4. Documentacin de Linux o

saber que Unix es realmente mucho ms que el shell, o mucho menos dependiendo de como lo a mire. Este libro le dir como utilizar el shell, los programas que usualmente vienen con Unix, y a algunos programas que no son muy comunes (pero que Linux casi siempre trae). El cap tulo actual es un meta-cap tulo se discute acerca del libro y de como aplicarlo para poder hacer nuestro trabajo. Los otros cap tulos contienen: Cap tulo 2 trata del origen y destino de Unix y Linux. Tambin se habla de la Free Software e Foundation y el proyecto GNU. Cap tulo 3 habla de como arrancar y detener su computadora, y de lo que sucede durante esas operaciones. Gran parte de esto tiene que ver con temas que no es necesario conocer para utilizar Linux, pero an as son utiles e interesantes. u Cap tulo 4 introduce el shell de Unix. Es con este programa con el cual las personas realizan su trabajo, y corren los programas que necesitan. Trata de los programas y comandos bsicos a que necesitar conocer para utilizar Unix. a Cap tulo 5 cubre el sistema de ventana X2 . X es la cara grca principal de Unix, e incluso algunas a distribuciones lo conguran como opcin predeterminada. o Cap tulo 6 analiza algunas de las caracter sticas ms avanzadas del shell de Unix. El aprendizaje a de las tcnicas tratadas en este cap e tulo le ayudar a ser ms eciente. a a Cap tulo 7 tiene breves descripciones de muchos de los comandos Unix. Cuanto ms herramientas a sabe utilizar un usuario, ms rpidamente puede concluir su trabajo. a a Cap tulo 8 describe el editor de textos Emacs. Se trata de un programa muy extenso que integra varias de las herramientas de Unix bajo una unica interfaz. Cap tulo 9 trata acerca de las distintas maneras que hay de personalizar un sistema Unix para satisfacer sus gustos personales. Cap tulo 10 investiga los medios por los cuales un usuario Unix puede comunicarse con otras mquinas alrededor del mundo, incluyendo el correo electrnico y la Red de Alcance Mundial 3 . a o Cap tulo 11 describe algunos de los comandos con ms opciones y ms dif a a ciles de utilizar. Cap tulo 12 muestra formas sencillas de evitar errores en Unix y Linux.

1.4

Documentacin de Linux o

Este libro, Gua de Linux Para el Usuario, est pensado para el principiante en Unix. Afortuna a damente, el Linux Documentation Project (Proyecto de Documentacin de Linux) tambin est o e a 4 escribiendo libros para los usuarios ms experimentados . a
del T.: X Window System. del T.: tambin conocida como WWW o World Wide Web. e 4 N. del T.: El proyecto LuCAS est ocupndose de traducir parte de la documentacin de Linux al castellano. a a o Para obtener informacin actualizada de las traducciones, vea el apndice D. o e
3 N. 2 N.

Cap tulo 1. Introduccin o

1.4.1

Otros libros de Linux

Los otros libros incluyen Installation and Getting Started 5 , que es una gu para obtener e instalar a Linux, The Linux System Administrators Guide, trata como organizar y mantener un sistema Linux, y The Linux Kernel Hackers Guide, que explica como modicar Linux. The Linux Network Administrator Guide6 muestra como instalar, congurar y utilizar una conexin de red. o

1.4.2

COMOs

Adems de los libros, el Proyecto de Documentacin de Linux7 ha realizado una serie de pequeos a o n documentos que describen como congurar algn aspecto particular de Linux. Por ejemplo, el u SCSI-COMO describe algunas de las complicaciones que aparecen al utilizar SCSI que es una manera estndar de comunicarse con ciertos dispositivos y Linux. a Estos COMOs estn disponibles en varios formatos: en un libro como The Linux Bible o Dr. Linux ; a en el foro de discusin comp.os.linux.answers; o en varios lugares de la WWW. El sitio central o de la informacin acerca de Linux es http://www.linux.org. o

1.4.3

Qu es el Proyecto de Documentacin de Linux? e o

Como casi todo lo asociado con Linux, el Proyecto de Documentacin de Linux consiste en un o conjunto de gente que trabaja alrededor del mundo. Originalmente organizado por Lars Wirzenius, el Proyecto est coordinado en la actualidad por Matt Welsh con la ayuda de Michael K. Johnson. a Se espera que el Proyecto de Documentacin de Linux provea los libros que satisfagan todas las o necesidades de documentacin de Linux en algn momento. Por favor, d o u ganos si hemos tenido xito e o qu es lo que debemos mejorar. Puede contactar al autor en leg+@andrew.cmu.edu, a Matt Welsh e en mdw@cs.cornell.edu8.

1.5

Sistemas operativos

El propsito principal de un sistema operativo es dar el soporte que necesitan los programas que o hacen un trabajo de inters para el usuario. Por ejemplo, Ud. puede estar utilizando un editor e si quiere crear un documento. Ese editor no puede realizar su trabajo sin la ayuda del sistema operativo necesitar esta ayuda para interactuar con la terminal, los archivos, y el resto de la a computadora. Si todo lo que hace el sistema operativo es dar soporte a las aplicaciones que Ud. desea utilizar, por qu se necesita todo un libro slo para hablar del sistema operativo? Existe un montn de e o o actividades de mantenimiento de rutina (adems de los programas que utilizar principalmente) a a
del T.: Disponible en castellano del T.: Disponible en castellano 7 N. del T.: El grupo INSFLUG ha Vea el apndice E. e 8 N. del T.: y al coordinador de esta
6 N. 5 N.

como Linux: Instalacin y Primeros Pasos. Vea el apndice D o e como Gu de Administracin de Redes con Linux. Vea el apndice D a o e traducido varios de los documentos HOWTO, acuando el trmino COMO. n e traduccin Csar Ballardini en cballard@santafe.com.ar o e

1.5. Sistemas operativos

que Ud. tambin necesitar realizar. En el caso de Linux, el sistema operativo contiene adems e a a un montn de mini-aplicaciones para ayudarle a realizar de manera ms eciente su trabajo. El o a conocimiento del sistema operativo le ser de ayuda si su trabajo no se centra en alguna aplicacin a o monol tica. Los sistemas operativos (SO, para abreviar) pueden ser simples y m nimos, como DOS, o grandes y complejos, como OS/2 o VMS. Unix trata de estar en un punto medio. A la vez que proporciona ms recursos y hace ms que los primitivos SO, no trata de hacer todo. Unix se diseo originalmente a a n como una simplicacin de un sistema operativo que se denomin Multics. o o La losof original de diseo de Unix fue la de distribuir la funcionalidad en pequeas partes: los a n n 9 programas . De esta forma, el usuario puede obtener nueva funcionalidad y nuevas caracter sticas de una manera relativamente sencilla mediante las diferentes combinaciones de pequeas partes n (programas). Adems, en el caso de que aparezcan nuevas utilidades (y de hecho aparecen), puede a Ud. integrarlas en su espacio de trabajo. Cuando escribo este documento, por ejemplo, utilizo activamente los siguientes programas: fvwm para manejar mis ventanas, emacs para editar el A texto, L TEX para darle forma, xdvi para ver una presentacin preliminar, dvips para prepararlo o para la impresin, y luego lpr para imprimirlo. Si maana llegara a conseguir otro programa de o n presentacin preliminar de archivos dvi, podr utilizarlo en lugar del xdvi sin cambiar el resto de o a los programas que uso. En el momento actual mi sistema est corriendo treinta y ocho programas a simultneamente. (Gran parte de ellos son programas del sistema que duermen hasta que tienen a algn trabajo espec u co para realizar.) Cuando utilice un sistema operativo, desear minimizar la cantidad de trabajo que tiene que llevar a a cabo para concluir su tarea. Unix proporciona varias herramientas que pueden ayudarle, pero para ello debe conocer que es lo que hacen. No es muy productivo perderse una hora intentando poner a andar alguna cosa y al nal tener que abandonar todo. Este libro le ensear qu herramientas n a e debe Ud. utilizar en qu situacin, y como combinar esas herramientas entre s e o . La parte clave de un sistema operativo se denomina ncleo10 . En muchos sistema operativos, u como Unix, OS/2, o VMS, el ncleo proporciona las funciones necesarias para los programas que u estn corriendo, y los planica para su ejecucin. Esto signica bsicamente que el programa A a o a puede tomar una cierta cantidad de tiempo, el programa B la misma cantidad, etc.. El ncleo u siempre est funcionando: es el primer programa que arranca cuando se enciende el sistema, y el a ultimo programa que hace algo cuando se apaga el equipo.

diseo estuvo determinado por el hardware sobre el cual funcion originalmente Unix. Por alguna extraa n o n razn, el sistema operativo resultante fue muy util sobre otras plataformas de hardware. El diseo bsico fue tan o n a bueno que an veinticinco aos despes sigue usndose. u n u a 10 N. del T.: ncleo del ingls kernel. u e

9 Este

Cap tulo 1. Introduccin o

Cap tulo 2

A propsito, qu es Unix? o e
Ken Thompson tiene un automvil en cuyo proyecto de diseo trabaj. A diferencia de otros o n o automviles, ste no tiene veloc o e metro, nivel de combustible, ni ninguna de las estpidas u luces que importunan al conductor moderno. En su lugar, si el conductor comete algn error, u se enciende un enorme ? en el centro del tablero. El conductor experimentado, dice, sabr usualmente que es lo que anda mal. a

2.1

La historia de Unix

En 1965, los Bell Telephone Laboratories (Bell Labs, una divisin de AT&T) estaba trabajando con o General Electric y el Proyecto MAC del MIT para escribir un sistema operativo llamado Multics. Para hacer ms corta una historia de por s larga, Bell Labs decidi que el proyecto no estaba yendo a o a ninguna parte y disolvi el grupo. Esto, sin embargo, dej a la Bell sin un buen sistema operativo. o o Ken Thompson y Dennis Ritchie decidieron esbozar un sistema operativo que supliera las necesidades de la Bell Labs. Cuando Thompson lleg a necesitar un entorno de desarrollo (1970) o que corriera en una PDP-7, aprovech para poner en prctica sus ideas. Brian Kernighan le di el o a o nombre de Unix como un juego de palabras contra Multics. Un tiempo despus, Dennis Ritchie invent el lenguaje de programacin C. En 1973, se reese o o 1 cribi el sistema operativo Unix en C, en lugar del ensamblador original . En 1977, se movi Unix a o o una nueva mquina distinta de las PDP en las que hab corrido previamente, mediante un proceso a a que se denomina migracin. El hecho de que Unix estaba escrito en C facilit la migracin, pues o o o gran parte del cdigo ya escrito necesit slo una simple recompilacin, y no una rescritura. o o o o Al nal de los 70, AT&T ten prohibido competir en la industria de la computacin, por lo que a o otorg licencias econmicas de Unix a varios colegios y universidades. Unix se difundi lentamente o o o fuera de las instituciones acadmicas, pero pronto tambin se hizo popular en el ambito comercial. e e El Unix de la actualidad es distinto del Unix de 1970. Existen dos corrientes principales: System V,
1 Lenguaje ensamblador es un lenguaje de computadoras muy elemental, y que est indisolublemente ligado a un a tipo particular de ordenador.

Cap tulo 2. A propsito, qu es Unix? o e

de los Unix System Laboratories (USL), que es una subsidiaria de Novell2 , y BSD, Berkeley Software Distribution. La versin USL est ahora por su cuarta versin, o SVR4 3 , mientras que la ultima o a o BSD es la 4.4. Sin embargo, existen muchas diferentes versiones de Unix entre estas dos. La mayor de las versiones de Unix son desarrolladas por compa de software y derivan de uno a nas de los dos agrupamientos. Las versiones que se utilizan actualmente incorporan caracter sticas de ambas variaciones. Las versiones actuales de Unix para PC Intel cuestan entre $500 y $2000.

2.2

La historia de Linux

El autor primario de Linux es Linus Torvalds. A partir de la versin original, ha sido mejorado o por incontables personas de todo el mundo. Se trata de un clon del sistema operativo Unix, escrito desde cero. Ni USL, ni la Universidad de California, Berkeley, tuvieron participacin en la escritura o de Linux. Una de las cosas ms interesantes de Linux es que el desarrollo ocurre simultneamente a a alrededor del mundo. La gente ha contribu desde Australia a Finlandia y esperamos que lo siga do haciendo. Linux comenz como un proyecto para explorar el chip 386. Uno de los primeros proyectos de o Linus fue un programa que pueda alternar entre la impresin de AAAA y BBBB. Esto luego evolucion o o hacia Linux. Linux ha sido registrado bajo los trminos de la Licencia Pblica General GNU (GNU General e u Public License) o GPL. Esta licencia, escrita por la Free Software Foundation (FSF), est diseada a n para evitar que alguna persona restrinja la distribucin de software. En pocas palabras, dice que o aunque Ud. cobre a alguien por entregarle una copia, no podr impedir que ese alguien la regale. a Tambin signica que debe estar disponible el cdigo fuente4 . Esto es util para los programadores. e o Cualquiera puede modicar Linux y an distribuir sus modicaciones, siempre que mantenga el u cdigo bajo la misma licencia. o En Linux puede correr la mayor del software popular en Unix, incluyendo el Sistema de Vena tanas X. X se desarroll en el Instituto Tecnolgico Massachusetts, para permitir a los sistemas o o Unix la creacin de ventanas grcas, y la cmoda interaccin con las mismas. En la actualidad, el o a o o sistema X se usa en todas las versiones disponibles de Unix. Adems de las dos variaciones de Unix, System V y BSD, existe un conjunto de documentos de a estandarizacin publicados por la IEEE denominados POSIX. Linux antes que nada satisface los o documentos POSIX-1 y POSIX-2. Su apariencia se asemeja mucho a la de BSD en ciertas partes, mientras que es parecido a System V en otras. Es una combinacin (y para la mayor de las o a personas, una buena) de los tres estndares. a Algunas de las utilidades inclu das con las distribuciones de Linux proceden de la Free Software Foundation y son parte del proyecto GNU. El proyecto GNU es un esfuerzo para escribir un avanzado
vendida a Novell, antes era propiedad de AT&T. manera cr ptica de decir System ve, Revision four. 4 El cdigo fuente de un programa es lo que el programador lee y escribe. Luego se traduce a un cdigo de o o mquina ilegible para las personas, que es el que la computadora interpreta. a
3 Una 2 Recientemente

2.2. La historia de Linux

sistema operativo portable con el estilo de Unix. Portable signica que pueda correr en una variedad de mquinas distintas, no slo en PCs Intel, Macintoshes, o lo que sea. El sistema operativo a o del Proyecto GNU se llama Hurd. La principal diferencia entre el Linux y el GNU Hurd no se encuentra en la interfaz del usuario, sino en la del programador el Hurd es un sistema operativo moderno, mientras que Linux es ms parecido al diseo original de Unix. a n La historia precedente de Linux olvida mencionar otra persona ms all de Linus Torvalds. Por a a ejemplo, H. J. Lu se ha ocupado de mantener gcc y la biblioteca C de Linux (dos elementos necesarios para todos los programas en Linux) casi desde el principio de la vida del sistema operativo. Ud. puede encontrar una lista de personas que merecen reconocimiento por su trabajo en cada sistema Linux, en el archivo /usr/src/linux/CREDITS.

2.2.1

Linux aqu y ahora

La primer cifra en el nmero de versin de Linux indica revisiones realmente importantes en alcance. u o Este nmero cambia muy lentamente y para la poca en que esto se escribe (febrero de 1996), u e 5 slo est disponible la versin 1 . La segunda cifra indica revisiones de menor envergadura. o a o Los segundos nmeros cuando son pares representan versiones ms estables, en las que uno puede u a conar plenamente; cuando son impares indican versiones en desarrollo, que son ms propensas a a contener errores. La ultima cifra es el nmero menor de lanzamiento cada vez que se libera una u nueva versin, que tal vez slo arregla unos pocos problemas o agrega unas pocas caracter o o sticas, se incrementa en uno este nmero. En febrero de 1996, la ultima versin estable es la 1.2.11, y la u o ultima en desarrollo es la 1.3.61. Linux es un sistema grande y desafortunadamente contiene errores que los desarrolladores reparan al encontrarlos. An cuando algunas personas puedan experimentar malfuncionamientos regularu mente, esto se debe normalmente a causa de piezas de hardware que no son estndares o que estn a a defectuosas; los errores6 que afectan a todos los usuarios son escasos y no se dan seguido. Por supuesto, sos son los errores del ncleo. Los errores pueden presentarse en casi cada ase u pecto del sistema, y los usuarios de poca experiencia tienen problemas para diferenciar los distintos programas entre s Por ejemplo, cierto problema puede hacer que todos los caracteres aparezcan . como un galimat es un error o una caracter as stica? Sorpresivamente es una caracter stica existen ciertas secuencias de control que al aparecer provocan el galimat Espero que este libro as. le sea de ayuda para poder identicar esas situaciones.

2.2.2

Unas pocas preguntas y respuestas

Antes de embarcarnos para nuestra larga traves repasemos las cuestiones ultra-importantes. a, Pregunta: Cmo se pronuncia Linux? o Respuesta: De acuerdo con Linus, debe pronunciarse con un sonido corto ih, como prInt, mInImal, etc. Linux debe rimar con Minix, que es otro clon de Unix. No debe pronunciarse como
5 N. 6 N.

del T.: La traduccin se hace en febrero de 1997, y ya la versin 2 es cosa de todos los d o o as. del T.: error del ingls bug. e

10

Cap tulo 2. A propsito, qu es Unix? o e

la pronunciacin (americana) de Peanuts en Linus, sino ms bien como LIH-nucks. Y la u es o a cortante, como en rule, no suave como en ducks. Linux debe al menos rimar con cynics. Pregunta: Por qu trabajar en Linux? e Respuesta: Por qu no? Linux es generalmente ms barato que los otros sistemas operativos e a (o al menos no ms caro) y con frecuencia es menos problemtico que algunos sistemas comerciales. a a Puede que no sea el mejor sistema para sus aplicaciones en particular, pero para alguien que est a interesado en utilizar las aplicaciones Unix disponibles para Linux, se trata de un sistema de alta performance.

2.2.3

Software comercial en Linux

Existe un montn de software comercial disponible para Linux. Comenzando con Motif que es una o interfaz para el sistema X Window que vagamente nos recuerda a Microsoft Windows, Linux tiene cada vez ms software comercial. En estos tiempos, Ud. puede adquirir cualquier cosa, desde Word a Perfect (el popular procesador de palabras) hasta Maple, que es un paquete que realiza complejas manipulaciones simblicas, para Linux. o Para aquellos lectores interesados en las cuestiones legales, esto est permitido por la licencia de a Linux. A la vez que la licencia GNU General Public License (que se reproduce en el Apndice B) e cubre el ncleo de Linux, la licencia GNU Library General Public License (que se puede ver en el u Apndice C) cubre la mayor parte del cdigo del cual dependen las aplicaciones. Esto permite que e o los proveedores de software comercial puedan vender sus aplicaciones y reservarse el cdigo fuente o de las mismas. Debe Ud. percatarse de que los dos documentos antes nombrados son noticaciones de derechos de autor. Ellos no regulan como utiliza Ud. el software, solamente indican bajo cuales circunstancias Ud. puede copiar dicho software, o sus productos derivados. Para la Free Software Foundation, sta es una distincin muy importante: Linux no involucra ninguna licencia estilo pitn, que lo e o o envolver y asxiar, sino que est protegido por la misma ley que le impide a Ud. fotocopiar un a a a libro.

Cap tulo 3

En el principio
This login session: $13.99, but for you $11.88. Tal vez ha tenido experiencia con MS-DOS u otro sistema operativo monousuario, como OS/2 o el de Macintosh. En esos sistemas operativos, Ud. no tiene que identicarse frente a la computadora antes de poder utilizarla; siempre se supone que es el unico usuario en el sistema y que puede acceder a todo lo que quiera. Por el contrario, Unix es un sistema operativo multiusuario no slo puede o utilizarlo ms de una persona a la vez, sino que las distintas personas recibirn distinto trato. a a Para poder identicar las personas, Unix necesita un usuario para que el proceso denominado ingreso1 pueda identicarlo o identicarla2 . Apenas se enciende una computadora, tiene lugar un complejo proceso antes que la misma est lista para ser usada. Como esta gu est orientada a e a a Linux, les dir que es lo que sucede durante la secuencia de arranque3. e Debe advertir Ud. que si est utilizando Linux en alguna clase de ordenador distinto a una PC a Intel, algunos temas de este cap tulo no se aplicarn a su caso. En su mayor dichos temas se a a, encontrarn en la Seccin 3.1. a o Si Ud. est interesado unicamente en utilizar su computadora, puede saltearse toda la informaa cin de este cap o tulo, excepto la de la Seccin 3.3. o

3.1

La computadora despierta

Lo primero que sucede cuando se conecta la alimentacin a su computadora es la ejecucin de un o o programa denominado BIOS. Su nombre proviene de las iniciales de Basic Input/Output System, que signica Sistema de Entrada/Salida Bsico. Este programa est almacenado de manera permaa a nente dentro de la computadora en chips que normalmente son del tipo de lectura solamente. Para
del T.: ingreso en ingls logging in e ahora en adelante, utilizar los pronombres masculinos para identicar a todas las personas. Esta es la e convencin estndar en ingls (N. del T.: y en castellano), y con esto no quiero decir que slo los hombres pueden o a e o utilizar computadoras. 3 N. del T.: arranque, del ingls boot-up. e
2 Desde 1 N.

11

12

Cap tulo 3. En el principio

nuestros propsitos, el BIOS es un programa que nunca se puede cambiar. Al funcionar, realiza o ciertas comprobaciones m nimas y luego se ja si hay un disquete en la primer disquetera. Si encuentra alguno, mira en su sector de arranque y comienza a ejecutar su cdigo, si lo hay. Si hay o un disquete pero no contiene un sector de arranque, el BIOS mostrar el siguiente mensaje: a
Non-system disk or disk error

Si quitamos el disquete y apretamos una tecla, el proceso de arranque continuar. a Si no existe un disquete en la disquetera, el BIOS se ja si existe un registro maestro de arranque (MBR: master boot record) en el disco r gido. Si es as comienza a ejecutar el cdigo que all o encuentra, que se ocupa de cargar el sistema operativo. En los sistemas Linux, el cargador se llama LILO por LInux LOader, puede ocupar el MBR y en ese caso cargar el Linux. (La distribucin a o en particular que est utilizando puede manejar el arranque desde el disco r e gido de otra manera, as que debe controlar esto en la documentacin que se incluye con la distribucin. Otra buena o o referencia es la documentacin de LILO, [1].) o

3.2

Linux despierta

Luego que el BIOS le pasa el control a LILO, LILO a su vez le pasa el control al n cleo de Linux. El u ncleo es el programa central del sistema operativo, que controla a todos los dems. Lo primero que u a hace Linux una vez que comienza su ejecucin es cambiar la CPU a modo protegido. El procesador o 803864 que controla su computadora tiene dos modos que se denominan modo real y modo protegido. El sistema operativo DOS corre en modo real, al igual que el BIOS. Sin embargo, los sistemas operativos ms avanzados necesitan correr en modo protegido. Por ello, cuando Linux a arranca, descarta el BIOS. Los procesadores distintos al 386 llegan a este estado de manera diferente. Ningn otro procesador u necesita cambiar a modo protegido, y slo unos pocos tienen un contexto tan pesado de carga, como o LILO y el BIOS. Una vez que arranca el ncleo, Linux trabaja casi de la misma manera. u A continuacin, Linux mira que clase de hardware tiene debajo. Necesita saber que clase de o discos r gidos tiene, si hay o no un ratn de bus, si est conectado a una red, y otras trivialidades o a como esas. Linux no puede recordar ciertas cosas luego de apagado, de manera que las pregunta cada vez que arranca. Afortunadamente, no se las pregunta a Ud.: se las pregunta al hardware! Durante el arranque, el ncleo de Linux muestra unos cuantos mensajes, aunque con ciertas variaciones. u Puede leer acerca de esos mensajes en la Seccin 3.4. Este proceso de consulta puede causar algunos o problemas con el sistema, pero si lo hace, lo har probablemente cuando instale Linux por primera a vez. Si tiene problemas, consulte la documentacin de la distribucin. o o El ncleo solamente se ocupa de administrar los otros programas, entonces cuando est satisfecho u a con que todo anda bien debe arrancar otro programa para que haga los trabajos utiles. El programa que el ncleo arranca se llama init. (Note la diferencia en el tipo de letra. Las cosas en este u tipo de letra sern usualmente los nombres de programas, de archivo, de directorio u otros items a
4 Cuando hable del 80386, tambin hago referencia a computadoras basadas en 80486, Pentium, y Pentium Pro a e menos que espec camente indique lo contrario. Adems, abreviar 80386 mediante el trmino 386. a e e

3.2. Linux despierta

13

Figura 3.1 El camino que sigue un PC Intel hasta que nos muestra el indicativo del intrprete de e comandos. init puede o no arrancar X. Si lo hace, corre xdm. Si no, corre getty.

the kernel

LILO BIOS

Linux login

init

getty

xdm
the X Window System

bash
the shell
relacionados con las computadoras.) Una vez que el ncleo arranca init, no lanza ningn otro u u programa. El ncleo se transforma as en un administrador y proveedor, no en un programa activo. u Por lo tanto, para saber que es lo que hace la computadora luego que el ncleo arranca, deberemos u examinar init. La complicada secuencia de arranque por la que atraviesa init no es idntica en e todas las computadoras. Para Linux existen varias versiones de init, y cada una hace las cosas a su manera. Adems tambin inuye si su mquina est en red, e incluso cual distribucin utiliz a e a a o o para instalar Linux. Algunas de las cosas que pueden suceder cuando init arranca son: El control de integridad del sistema de archivos. Pero qu es un sistema de archivos?, se e estar preguntando Ud. . Un sistema de archivos es la disposicin de los archivos en el disco a o r gido. Adems permite que Unix sepa cuales partes del disco r a gido estn ocupadas y cuales a no. Desafortunadamente, ciertos factores como los cortes en el suministro de energ hacen que a la informacin que el sistema de archivos tiene sobre la disposicin en el disco de los archivos o o no coincida con la disposicin real. En estos casos se ve la utilidad de un programa llamado o fsck, que es capaz de encontrar estas situaciones y (con suerte) corregirlas. Se lanzan programas especiales de encaminamiento para las redes. Estos programas informan a su computadora cmo se supone que puede comunicarse con las otras. o Se borran los archivos temporales que crean ciertos programas. Se actualiza correctamente el reloj del sistema. Esto es ms complicado de lo que puede parecer, a pues Unix de manera predeterminada, necesita la hora en UCT (Universal Coordinated Time), tambin conocido como hora de Greenwich, y el reloj de la CMOS que es alimentado por e una bater dentro de la computadora muy probablemente estar congurado con la hora a a local. Esto signica que debe tener algn programa que lea la hora del reloj de la CMOS y la u corrija transformndola en hora UCT. a

14

Cap tulo 3. En el principio

Despus que init termina con sus actividades de arranque, comienza con sus tareas planicadas. e init se convierte as en el padre de todos los procesos del sistema Unix. Un proceso es simplemente un programa que est corriendo; como cualquier programa puede correr ms de una vez, entonces a a puede haber ms de un proceso para un programa dado en particular. a En Unix, los procesos instancias de un programa se crean mediante una llamada al sistema 5 que es un servicio provisto por el ncleo denominada fork. (Se lo llama fork (bifurcacin) u o pues un proceso se bifurca en dos independientes.) init forkea (bifurca) unos cuantos procesos, los que a su vez forkean6 otros. En su sistema Linux con toda seguridad init corre varias instancias de un programa llamado getty. getty es el programa que le permitir iniciar el ingreso al usuario, a y que a continuacin lanzar el programa login. o a

3.3
3.3.1

La actuacin del usuario o


El ingreso

Lo primero que hay que hacer para poder utilizar una mquina con Unix es identicarse frente a la a misma. Este proceso, conocido en ingls como logging in (registro de ingreso), es la manera que e tiene Unix de saber cuales son los usuarios autorizados para utilizar el sistema. Durante el ingreso se le preguntar un nombre de cuenta y una contrasea7. Los nombres de las cuentas son por lo a n general parecidos a los nombres de las personas, y se lo asignar el administrador del sistema. Si a Ud. es el administrador del sistema deber crearse una cuenta para poder trabajar sin los cuidados a especiales que requiere la cuenta root. (La informacin necesaria para llevar a cabo dicha tarea o podr encontrarla en Installation and Getting Started 8 o en The Linux System Administrators a Guide.) Luego de que tenga lugar la secuencia de procedimientos durante el arranque, Ud. ver en la a pantalla algo como lo que se muestra a continuacin: (la primer l o nea es meramente un saludo podr ser alguna advertencia legal, o cualquier otra cosa) a
Welcome to the mousehouse. Please, have some cheese. mousehouse login:

Sin embargo, puede ser que lo que el sistema le presente al arrancar no se parezca a esto. Por ejemplo, puede que en lugar de una aburrida pantalla de texto nos muestre una pantalla grca. An a u en este caso, la computadora le pedir sus datos al ingreso y ms o menos de la misma manera. Si ste a a e es el caso en su sistema, entonces el entorno de trabajo que utilizar es el sistema X. El X Window a System es un sistema de ventanas y en el cap tulo 5 se discutirn algunas de las diferencias con las a que se enfrentar. De cualquier manera, el proceso de ingreso ser similar en ambos casos. Si va a a a utilizar X, busque las apariciones de una X grandota en el margen de esta gu a.
del del 7 N. del 8 N. del
6 N. 5 N.

T.: T.: T.: T.:

llamada al sistema del ingls system call. e Mis disculpas por el trmino, prometo no usarlo ms :-). e a contrasea, palabra clave del ingls password n e Puede consultar la versin en castellano ya existente o

3.3. La actuacin del usuario o

15

Esta es, por supuesto, la invitacin que Ud. buscaba para ingresar (login). A lo largo de este o manual utilizaremos el usuario cticio (o no tan cticio, dependiendo de su mquina) larry 9. Donde a Ud. vea larry debe poner el nombre de su propia cuenta. Los nombres de las cuentas se basan en general en los nombres reales; los sistemas Unix ms grandes y serios tienen cuentas que usan a el apellido del usuario, alguna combinacin de nombre y apellido, y an se da el caso que deban o u agregarle algunos d gitos. Por ejemplo, nombres de cuentas posibles para Larry Greeneld podr an ser: larry, greenfie, lgreenfi, lg19. mousehouse ser, de la misma manera, el nombre de la mquina sobre la que trabajar. a a e Es posible que cuando Ud. instale Linux se le pregunte el nombre que desea asignarle. Esto no es demasiado importante, pero cada vez que haga falta utilizar mousehouse o, ms raramente, e a lionsden cuando necesite de un segundo sistema por razones de claridad o de contraste. Luego de teclear larry y apretar Intro , nos encontramos con lo siguiente:
mousehouse login: larry Password:

Linux est solicitando su contrase a10 . Cuando escriba su contrasea no podr ver lo que est a n n a a tecleando, en razn de la privacidad necesaria a dicha palabra. Escriba cuidadosamente: puede o borrar caracteres, pero no podr ver lo que est editando. No escriba muy despacio si hay gente a a mirndole podr llegar a descubrirla. En cualquier caso, si se equivoca no se haga problemas, a an pues el sistema le dar otra oportunidad de ingresar. a Luego que ingrese correctamente su nombre de cuenta o nombre de usuario y su contrasea, n aparecer un corto mensaje denominado mensaje del d 11 que se obtiene del archivo /etc/motd. a a Este archivo se utiliza para dar a conocer cualquier clase de informacin a los usuarios con respecto o al estado del sistema y es responsabilidad del administrador del sistema jar su contenido. Despus e de todo esto aparece un prompt. Un prompt es un s mbolo que nos indica que la computadora est a lista para recibir un comando. Debe parecerse a la siguiente gura:
/home/larry$

Si Ud. est utilizando X Window, el prompt aparecer en alguna de las ventanas que hay en a a pantalla. (Las ventanas son simples cajas rectangulares.) Para escribir en el prompt, mediante el ratn, mueva el cursor del mismo (probablemente se ve como una gran X o una echa) dentro de o la ventana.

3.3.2

Al abandonar la computadora

SLOW

No apague la computadora directamente! Se arriesga a perder valiosos datos! A diferencia de la mayor de las versiones de DOS, no es una buena idea apagar la llave de a alimentacin de la computadora as como as cuando termine de utilizarla. Si reinicia la mquina o , a
9 N. del para otros 10 N. del 11 N. del

T.: He dejado aqu sin traducir ni cambiar el nombre del autor de la versin en ingls, y lo mismo vale o e nombres como el de la mquina, etc. . a T.: contrasea del ingls password. n e T.: mensaje del d del ingls Message Of The Day(motd). a e

16

Cap tulo 3. En el principio

(con el botn de reset) sin antes tomar las debidas precauciones ser igual de pernicioso. Linux o a tiene una antememoria o cach que mejora el rendimiento del disco. Esto signica que tempoe ralmente guarda en RAM informacin perteneciente al sistema de almacenamiento permanente 12 . o Las diferencias entre lo que Linux cree que hay en el disco y lo que efectivamente est almacenado a en el disco se sincronizan cada 30 segundos. Si desea apagar o reiniciar la computadora, necesitar a ejecutar algn procedimiento que indique a Linux que debe detener el sistema de cach y actualizar u e la informacin en el disco. o Si ya ha terminado sus tareas con la computadora, pero an est dentro del sistema (ya tecle u a o su nombre de usuario y su palabra clave), lo primero que debe hacer es registrar la salida (logout) del sistema. Para ello, teclee el comando logout. Todos los comandos se env oprimiendo la tecla an marcada como Enter , Return o Intro . Hasta que no apreta Intro no pasa nada, y por lo tanto, puede borrar lo que escribi y recomenzar. o
/home/larry$ logout Welcome to the mousehouse. Please, have some cheese. mousehouse login:

Ahora puede ingresar otro usuario.

3.3.3

Como apagar la computadora

Si el suyo se trata de un sistema en el cual trabaja un unico usuario Ud., :-) puede desear apagar la computadora cuando haya nalizado su trabajo con ella13 . Para bajar el sistema14 o sea, apagarlo ordenadamente deber ingresar a una cuenta especial denominada root. La cuenta a del root es la cuenta del administrador del sistema y puede acceder a todos los archivos que existen en el sistema. Si desea apagar la computadora, primero debe bajar el sistema, y para ello deber a obtener la palabra clave que utiliza el administrador del sistema. Por favor, ingrese Ud. entonces como root:
mousehouse login: root Password: Linux version 1.3.55 (root@mousehouse) #1 Sun Jan 7 14:56:26 EST 1996 /# shutdown now Why? fin del dia de trabajo URGENT: message from the sysadmin:
12 La diferencia entre RAM y un disco r gido es como la diferencia enrte la memoria de corto plazo y la de largo plazo. Al quitar la alimentacin de la computadora es como si le diramos un fort o e simo golpe en la cabezaolvidar a todo lo que ten en la memoria de corto plazo. Pero las cosas guardadas en la memoria de largo plazo, el disco r a gido, estarn bien. El disco es miles de veces ms lento que la RAM. a a 13 Para evitar el debilitamiento prematuro de ciertos componentes de hardware, es mejor que apague la computadora slo cuando ya no la vaya a utilizar por el resto del d Encender y apagar una vez al d la computadora o a. a probablemente es el mejor compromiso entre ahorrar energ y machacar el sistema. a 14 N. del T.: bajar el sistema del ingls shutdown. e

3.4. Mensajes del n cleo u

17

System going down NOW ... fin del dia de trabajo ... Now you can turn off the power...

El comando shutdown now prepara al sistema para que pueda apagarse o reiniciarse. Debe esperar por el mensaje que dice que es seguro apagar o reiniciar el sistema. (Cuando el sistema le pregunta Why?15 , slo le est preguntando una razn para decirle a los otros usuarios. Como o a o no hay otra persona utilizando el sistema cuando Ud. lo baja, puede responderle con lo que se le ocurra, o con nada.) Un pequeo dato para el perezoso: como alternativa al enfoque de logout/login se puede utilizar n el comando su. Mientras est trabajando con su nombre de cuenta habitual (larry a nuestros a a efectos) escriba su y luego Intro . Se le solicitar la palabra clave del administrador del sistema, y si la ingresa correctamente tendr a partir de dicho momento los privilegios que le corresponden a al mismo. Ahora, con estos privilegios agregados, podr bajar el sistema mediante el comando a shutdown now.

3.4

Mensajes del n cleo u

Cuando se conecta la alimentacin a su computadora, aparece una serie de mensajes en la pantalla, o que describe el hardware conectado al ordenador. Estos mensajes son producto de la actividad del ncleo de Linux. En esta seccin, intentaremos describir y explicar esos mensajes. u o Naturalmente, estos mensajes var de mquina a mquina. Describir entonces los mensaan a a e jes que aparecen en la m El siguiente ejemplo contiene todos los mensajes estndar y algunos a. a espec cos. (En general, la mquina sobre la que voy a realizar la descripcin est m a o a nimamente congurada: no ver por lo tanto mucha informacin relacionada con la conguracin de dispositivos.) a o o Se utiliz Linux versin 1.3.55 uno de los ms recientes al momento de escribir. o o a 1. Lo primero que hace Linux es decidir que clase de tarjeta de video y pantalla tiene conectado, de manera de seleccionar un tamao de letra apropiado. (Cuanto ms pequeo es el tamao, n a n n ms caben en una pantalla a la vez.) Linux puede consultarle si desea algn tipo de letra en a u particular, o puede que tenga una seleccin ya compilada en su interior16 . o

Console: 16 point font, 400 scans Console: colour VGA+ 80x25, 1 virtual console (m

En este ejemplo, el dueo de la mquina decidi, al momento de compilar, que utilizar el n a o a tipo de letra estndar tamao grande. Adems, notar que la palabra color est mal escrita. a n a a a Evidentemente, Linus aprendi la versin incorrecta de idioma ingls17. o o e
del T.: why? signica por qu?. e se reere al proceso mediante el cual un programa de computadora escrito por una persona se traduce a algo que entiende la computadora. Si una caracter stica se ha compilado en su interior signica que est a inclu en el programa. da 17 N. del T.: colour es la variante ortogrca del ingls insular y color la norteamericana. a e
16 Compilada 15 N.

18

Cap tulo 3. En el principio

2. La prxima tarea del ncleo es informar acerca de la velocidad de su sistema, medida en o u BogoMIPS. Un MIP equivale a un milln de instrucciones por cada segundo, mientras que o un BogoMIP es un bogus MIP18 : cuantas veces la computadora puede hacer absolutamente nada por cada segundo. (Como este bucle no hace nada en realidad, el nmero calculado no es u tampoco una medida de la velocidad del sistema.) Linux utiliza este nmero cuando necesita u esperar por algn dispositivo de hardware. u
Calibrating delay loop.. ok - 33.28 BogoMIPS

3. El ncleo de Linux tambin nos comenta acerca de la utilizacin de la memoria: u e o


Memory: 23180k/24576k available (544k kernel code, 384k reserved, 468k data)

Esto signica que la mquina tiene 24 megabytes de memoria. Parte de esta memoria est rea a servada por el ncleo. El resto puede ser utilizada por los programas. Este es el lugar temporal u conocido como RAM que se utiliza slo como almacenamiento de corto plazo. Su computao dora tambin dispone de una memoria permanente denominada disco r e gido. El contenido del disco r gido se mantiene intacto an luego de quitar la alimentacin del ordenador. u o 4. A lo largo del proceso de arranque, Linux controla distintas partes del hardware y nos muestra mensajes indicativos de las mismas.
This processor honours the WP bit even when in supervisor mode. Good.

5. Ahora Linux pasa a la conguracin de red. Lo que veremos a continuacin est mejor explicado o o a en The Linux Networking Guide 19 , y est fuera del alcance de este documento. a
Swansea University Computer Society NET3.033 for Linux 1.3.50 IP Protocols: ICMP, UDP, TCP

6. Linux soporta la FPU, la unidad de punto otante20 Esta es un chip especial (o parte de un chip en el caso del procesador 80486DX) que se ocupa de la aritmtica con nmeros no enteros. e u Algunos de esos chips no estn en buenas condiciones, y cuando Linux trata de identicarlos la a mquina se cuelga21. La mquina deja de funcionar. Si esto sucede, Ud. ver en su pantalla a a a lo siguiente:
Checking 386/387 coupling...

Sino, el mensaje ser: a


18 N. 19 N.

del del 20 N. del 21 N. del

T.: T.: T.: T.:

bogus signica espurio (para los argentinos: trucho). Disponible en castellano. Vea el apndice D. e unidad de punto otante del ingls Floating Point Unit. e se cuelga del ingls crashes. e

3.4. Mensajes del n cleo u

19

Checking 386/387 coupling... Ok, fpu using exception 16 error reporting.

si est utilizando un 486DX. Si tiene un 386 con un 387, le aparecer: a a


Checking 386/387 coupling... Ok, fpu using irq13 error reporting.

7. Y ahora se controla la instruccin halt. o


Checking hlt instruction... Ok.

8. Luego de esta conguracin inicial, Linux escribe una l o nea identicndose a s mismo. En a ella explica cual es la versin del ncleo, la del compilador de C de GNU que se utiliz para o u o compilarlo, y la fecha de dicha compilacin. o
Linux version 1.3.55 (root@mousehouse) (gcc version 2.7.0) #1 Sun Jan 7 14:56:26 EST 1996

9. El controlador serie comienza a consultar acerca del hardware instalado. Un controlador es una parte del ncleo que controla un dispositivo, normalmente un perifrico. Se hace u e responsable por los detalles de la comunicacin entre la CPU y el dispositivo. Esto permite o que la gente que escribe aplicaciones de usuario se pueda concentrar en la aplicacin, pues no o tiene que preocuparse por como trabaja exactamente la computadora.
Serial driver version 4.11 with no serial options enabled tty00 at 0x03f8 (irq = 4) is a 16450 tty01 at 0x02f8 (irq = 3) is a 16450 tty02 at 0x03e8 (irq = 4) is a 16450

Aqu vemos que ha encontrado tres puertos serie. Un puerto serie es el equivalente del puerto COM en DOS; es el dispositivo que se utiliza normalmente para comunicarse con modems y ratones. Lo que signican las l neas anteriores es que el puerto serie 0 (COM1) tiene la direccin 0x03f8. o Cuando dicho puerto interrumpe al ncleo, usualmente para decir que tiene datos listos, utiliza u la IRQ 422 . Las IRQ son un medio que tienen los perifricos de hablarse con el software. Cada e puerto serie tambin tiene un chip controlador, que usualmente se denomina 16450; aunque e tambin puede ser el 8250 o el 16550. e 10. A continuacin viene el puerto paralelo, que normalmente se conecta a la impresora. Los o puertos paralelos en Linux tienen nombres que comienzan con lp. lp son las iniciales de Line Printer23 , aunque en los tiempos actuales parece ms apropiado usar las iniciales de Laser a Printer. (Sin embargo, Linux se comunica sin problemas con cualquier clase de impresora conectada al puerto paralelo: de matriz de puntos, chorro de tinta, o laser.)
22 N. 23 N.

del T.: IRQ, Interrupt ReQuest (peticin de interrupcin). o o del T.: Impresora de l neas.

20

Cap tulo 3. En el principio

lp0 at 0x03bc, (polling)

Este mensaje dice que ha encontrado un puerto paralelo, y que usar el controlador de dispoa sitivo estndar. a 11. Linux identica luego las unidades de disco r gido. En el sistema que le estoy mostrando, mousehouse, tengo instalados dos unidades de disco r gido IDE.
hda: WDC AC2340, 325MB w/127KB Cache, CHS=1010/12/55 hdb: WDC AC2850F, 814MB w/64KB Cache, LBA, CHS=827/32/63

12. El ncleo ahora busca las unidades de disco exible. En este ejemplo, la mquina tiene dos u a unidades: la A es una unidad de 5 1/4", y la B es una de 3 1/2". Linux denomina fd0 a la unidad A, y fd1 a la unidad B.
Floppy drive(s): fd0 is 1.44M, fd1 is 1.2M floppy: FDC 0 is a National Semiconductor PC87306

13. El prximo controlador que arranca en mi sistema ejemplo es el controlador SLIP. Escribe un o mensaje acerca de su conguracin. o
SLIP: version 0.8.3-NET3.019-NEWTTY (dynamic channels, max=256) (6 bit encapsulation enabled) CSLIP: code copyright 1989 Regents of the University of California

14. El ncleo explora dentro de los discos r u gidos que ha encontrado. Busca las distintas particiones que tiene cada uno. Una particin es una seccin lgica de una unidad que se utiliza para o o o evitar que intereran entre s distintos sistemas operativos coexistentes. En este ejemplo, la computadora tiene dos discos (hda y hdb) con cuatro y una particiones, respectivamente.
Partition check: hda: hda1 hda2 hda3 hda4 hdb: hdb1

15. Finalmente, Linux monta la particin ra Esta es la particin del disco en la cual reside el o z. o sistema operativo Linux. Cuando Linux monta esta particin, hace que est disponible para o e los usuarios.
VFS: Mounted root (ext2 filesystem) readonly.

Cap tulo 4

El shell de Unix
Es muy fcil crear archivos en el sistema operativo UNIX. Por lo tanto, los usuarios tienden a a crear muchos archivos que utilizan una gran cantidad de espacio. Se ha dicho que la unica cosa estndar y comn a todos los sistemas UNIX es el mensaje-del-d que les pide a a u a los usuarios que borren los archivos que no necesitan. Gu del administrador de System V.2 a

4.1

Comandos Unix

Cuando ingresa al sistema Unix, se enfrenta con algo ms o menos como lo que se muestra a a continuacin: o
/home/larry$

Ese algo se denomina prompt1 . Como su nombre sugiere, le solicita a Ud. que ingrese un comando. Todos los comandos Unix consisten de una secuencia de letras, nmeros y caracteres. No u son vlidos los espacios dentro del nombre del comando. Algunos comandos vlidos son mail, cat, a a y CMU is Number-5. Algunos caracteres no estn permitidosvolveremos a este tema ms adelante. a a Unix adems hace diferencia entre may sculas y min sculas2, lo que signica que Cat y cat a u u son comandos distintos. El prompt se muestra como resultado del accionar de un programa especial denominado intrprete e de comandos3 . El intrprete de comandos o shell acepta los comandos que escribe el usuario y e los ejecuta. Los comandos pueden formar programas en el lenguaje del intrprete de comandos, y a e dichos programas se los denomina guiones de shell.
del T.: prompt signica solicitud. diferenciacin entre maysculas y minsculas es una cosa muy personal. Algunos sistemas operativos como o u u OS/2 y Windows NT preservan las diferencias, pero no las cuentan como distintas. En la prctica habitual con Unix, a se utiliza raramente la diferenciacin. La situacin de tener un par de comandos Cat y cat diferentes, no es comn. o o u 3 N. del T.: intrprete de comandos del ingls shell. e e
2 La 1 N.

21

22

Cap tulo 4. El shell de Unix

Los shell en Unix se clasican en dos grandes grupos: los tipo Bourne y los tipo C. Los shell tipo Bourne toman su nombre a partir de su inventor, Steven Bourne. Steven Bourne escribi el shell o original de Unix, denominado sh; a partir de entonces, la mayor de los shells tienen un nombre con a el sujo sh para indicar que son extensiones de la idea original. Existen varias implementaciones de este shell, que colectivamente llevan el nombre de shells Bourne. Tambin son comunes los shells tipo e C cuyo original fue implementado por Bill Joy. Tradicionalmente, los shell Bourne se han utilizado para los scripts de shell y por razones de compatibilidad con el sh original, mientras que los shells C han sido ms comunes en su aplicacin interactiva. (Los C tienen ventajas en cuanto a sus mejores a o caracter sticas interactivas, aunque son ms dif a ciles de programar.) Linux viene con un shell Bourne denominado bash, escrito por la organizacin Free Software o Foundation4 . El nombre bash proviene de Bourne Again SHell, uno de los tantos juegos de palabras en Unix. Se trata de un shell Bourne avanzado: tiene las capacidades estndar de programacin a o que se encuentran en todos los shells Bourne y adems varias de las caracter a sticas interactivas que se encuentran en los shells C. bash es el shell predeterminado cuando uno usa Linux. Apenas ingresa por primera vez, el prompt que Ud. ve es producto de la accin de bash, en otras o palabras: est Ud. corriendo su primer programa Unix, el shell bash. Mientras est conectado, el a e shell bash estar permanentemente funcionando. a

4.1.1

Un comando Unix t pico

El primer comando que debe conocer es cat. Para utilizarlo, escriba cat y luego oprima Intro :
/home/larry$ cat

Si tiene ahora el cursor posicionado en una l nea nueva, entonces lo que ha hecho est bien. a Existen unas cuantas variantes que podr haber tecleadoalgunas funcionarn, otras no. a a Si tuvo algn error de tecleo al escribir cat, deber haber visto algo ms o menos as u a a :
/home/larry$ ct ct: command not found /home/larry$

Por lo tanto, el shell le informa que no pudo encontrar un programa denominado ct, y le ofrece otro prompt para seguir trabajando. Recuerde que Unix hace diferencia entre maysculas u y minsculas: CAT est mal escrito. u a Puede que Ud. haya escrito algunos espacios en blanco antes del comando, como: 5
/home/larry$ cat

4 N. del T.: La Fundacin para el Software Libre tal es la traduccin de su nombre se ocupa de la produccin o o o y distribucin de software que no tiene limitaciones en su uso y/o copia, enfrentando de esta manera las prcticas de o a las compa tradicionales de desarrollo. Que el software sea libre no signica que sea barato: la libertad incluye la nas gratuidad, pero es mucho ms que ello. a 5 El indica que el usuario escribi un espacio. o

4.2. Autoayuda

23

Sin embargo, el resultado es correcto, y el programa cat corre sin problemas. Tambin puede que haya oprimido un Intro en una l e nea en blanco; no se preocupe y contine, u pues no tiene ningn efecto. u Doy por sentado que Ud. ha corrido con xito cat y est esperando que haga algo que lo e a maraville. Pues bien, no, no es un juego. cat es una muy util utilidad que no parece muy util a a primera vista. Escriba cualquier cosa y luego oprima Intro . Lo que ver es:
/home/larry$ cat Help! Im stuck in a Linux program! Help! Im stuck in a Linux program!

(El texto inclinado marca que es lo que he tecleado.) Lo que parece haber hecho cat es devolver un eco de lo escrito. Esto es util a veces, tal vez no ahora. As que salgamos de este programa y veamos otros con benecios ms obvios. a Para nalizar ciertos comandos Unix, teclee Ctrl-d 6 . Ctrl-d es el carcter end-of-le7 , o EOF, a para abreviar. Puede que en ciertos libros de texto aparezca como end-of-text 8 . Nos referiremos a este carcter como EOF. Es un carcter de control que informa a los programas Unix que ha cesado a a el ingreso de datos. Cuando cat ve que no teclea ms nada, termina. a Para ver otro ejemplo parecido, pruebe el programa sort. Como su nombre lo indica, sort es un programa de clasicacin. Si Ud. teclea unas cuantas l o neas y luego oprime Ctrl-d , sort las mostrar a la salida de manera ordenada. Esta clase de programas se denominan ltros, porque a toman texto desde su entrada, lo ltran, y lo vierten a su salida modicado de alguna manera. Tanto cat como sort son ltros inusuales. cat es inusual pues lee el texto de entrada y no lo cambia. sort es inusual porque lee todas las l neas de entrada hasta el EOF, antes de emitir su salida. La mayor de los ltros trabajan sobre la base de l a nea por l nea: leen una l nea de la entrada, realizan cierto cmputo, y escriben una l o nea diferente de salida.

4.2

Autoayuda

El comando man muestra las pginas de la gu de referencia para un comando dado 9 . Por ejemplo: a a
/home/larry$ man cat cat(1) NAME
oprimida la tecla etiquetada Ctrl y aprete d , luego suelte ambas. del T.: n de archivo. 8 N. del T.: n de texto. 9 man tambin puede mostrar informacin acerca de las llamadas al sistema, subrutinas, formatos de archivos, e o etc.. En la versin original de Unix el comando mostraba la informacin exactamente igual a la que aparec en la o o a documentacin impresa. Por ahora, es probable que Ud. slo est interesado en obtener ayuda acerca de los comandos. o o e
7 N. 6 Mantenga

cat(1)

24

Cap tulo 4. El shell de Unix

cat - Concatenates or displays files SYNOPSIS cat [-benstuvAET] [--number] [--number-nonblank] [--squeeze-blank] [--show-nonprinting] [--show-ends] [--show-tabs] [--show-all] [--help] [--version] [file...] DESCRIPTION This manual page documents the GNU version of cat ...

Hay aproximadamente una pgina completa de informacin sobre cat10 . Pruebe correr man en a o este momento. No espere entender la pgina de manual que se le muestra. Las pginas de manual a a suponen un cierto conocimiento de Unix conocimiento que tal vez Ud. no tenga en este momento. Cuando termine de leer la pgina, es probable que vea un bloque en video inverso al nal de la a pgina, parecido a --more-- o a Line 1. Se trata del pedido de ms (informacin), que a a o pronto le ser muy familiar. a En lugar de dejar escapar el texto fuera de los l mites de la pantalla, man se detiene al nal de cada pgina, y espera para ver que ha decidido hacer Ud.. Si desea seguir leyendo, oprima a Barra espaciadora y avanzar una pgina. Si desea terminar con la lectura de la pgina del manual, a a a oprima q . Regresar entonces al prompt del shell, que esperar hasta que Ud. escriba otro a a comando. man provee adems una funcin de bsqueda de palabras clave. Por ejemplo, digamos que Ud. a o u est interesado en el tema PostScript, el lenguaje de control de impresoras desarrollado por Adobe. a Si escribe man -k ps o man -k Postscript, recibir como resultado una lista de todos los a comandos, llamadas al sistema, y otras partes documentadas de Unix que contengan la palabra ps (o Postscript) en su nombre o descripcin breve. Esto puede llegar a ser muy util cuando quiere o buscar una herramienta para hacer algo, pero no conoce su nombre o si existe.

4.3

Almacenaje de la informacin o

Los ltros son muy utiles cuando Ud. se ha transformado en un usuario experimentado, pero tienen un pequeo problema. Cmo almacena Ud. la informacin. Seguramente, no se espera que Ud. n o o teclee todas las cosas cada vez que desea utilizar el programa! Por supuesto que no. Unix provee archivos y directorios. Un directorio es como una carpeta, contiene hojas de papel, o archivos. Una carpeta sucientemente grande puede contener otras carpetaspuede haber directorios dentro de directorios. En Unix, se denomina sistema de archivo a la coleccin de archivos y directorios. Inicialmente en el o sistema de archivo slo existe un directorio, denominado root11 . Dentro de este directorio hay o
del T.: El ejemplo se ha mantenido en ingls, pues es muy probable que Ud. tenga instaladas las pginas de e a manual en dicho idioma, de manera predeterminada. Pruebe ms tarde de instalar el conjunto de pginas de manual a a que estn disponibles en castellano. a 11 N. del T.: directorio ra z.
10 N.

4.3. Almacenaje de la informacin o

25

ms directorios, y dentro de ellos hay archivos, y an ms directorios 12 . a u a Cada archivo y cada directorio tiene un nombre. Nos referiremos a su nombre corto 13 que puede coincidir con el de otro archivo y/o directorio en alguna otra parte del sistema de archivo, y al nombre largo14 que es unico. Un nombre corto para un archivo puede ser joe, mientras que su nombre completo podr ser /home/larry/joe. El nombre completo se denomina usualmente a trayectoria15 . La trayectoria puede decodicarse como una secuencia de directorios. Por ejemplo, veremos como se lee /home/larry/joe: /home/larry/joe La barra inicial indica el directorio ra z. Aqu esta el directorio denominado home. Est dentro del directorio ra a z. Este es el directorio larry, el cual est dentro de home. a joe est dentro de larry. Una trayectoria puede referirse tanto a un directorio a como a un nombre de archivo, as que joe podr ser cualquiera de ellos. Todos a los items antes del nombre corto deben ser directorios. Una manera sencilla de visualizar todo esto es mediante un diagrama en arbol. Para ver el diagrama de un sistema t pico Linux, mire la Figura 4.1. Debe Ud. notar que dicho diagrama no est completo un sistema Linux completo tiene ms de 8000 archivos! y slo muestra algunos a a o de los directorios estndar. Por lo tanto, puede haber algunos directorios del diagrama que no estn a e en su sistema, y de hecho su sistema tendr directorios que no aparecen en la gura. a

4.3.1

Miremos los directorios con ls

Ahora que ya sabe de la existencia de archivos y directorios, debe haber tambin una manera de e manipularlos. Por supuesto. El comando ls es uno de los ms importantes, y lo que hace es listar a los archivos. Si prueba a correr el comando ls, entonces ver: a
/home/larry$ ls /home/larry$

Est bien, no se preocupe por no ver nada. Unix es intencionalmente callado: si no hay archivos a para mostrar, no muestra nada (ni siquiera un no hay archivos). Por lo tanto, la ausencia de salida es la manera de ls de decir que no encontr ningn archivo. o u Pero hace un momento dije que hay ms de 8000 archivos por all dnde estn? Acaba de a : o a encontrar el concepto de directorio actual. Como puede ver en el prompt, su directorio actual es /home/larry y all no hay archivos. Si desea la lista de archivos de un directorio ms poblado, a pruebe con el directorio ra z:
/home/larry$ ls /
haber o no un l mite a la profundidad a la cual puede llegar el sistema de archivo. (En mi caso nunca la alcancuno fcilmente puede tener directorios de 10 niveles de profundidad.) e a 13 N. del T.: Nombre relativo del archivo o directorio. 14 N. del T.: Nombre completo o absoluto. 15 N. del T.: trayectoria del ingls path. e
12 Puede

26

Cap tulo 4. El shell de Unix

Figura 4.1 T pico arbol (podado) de directorios Unix. / bin dev etc home lib proc tmp usr

larry sam

X11R6 bin emacs etc g++-include include lib local bin emacs etc lib man spool src tmp linux

bin etc dev home /home/larry$

install lib

mnt proc

root tmp

user usr

var vmlinux

En el comando anterior, ls /, el directorio (/) es lo que se denomina un parmetro. La a primer palabra de un comando es el nombre del comando, y cualquier cosa que le siga son sus parmetros. Los parmetros generalmente modican la forma en la que acta un programapara a a u ls, el parmetro le dice de cual directorio desea Ud. la lista de archivos. Algunos comandos tienen a parmetros especiales denominados opciones o interruptores16 Para ver esto, pruebe: a
/home/larry$ ls -F / bin/ etc/ install/ dev/ home/ lib/ /home/larry$
16 N.

mnt/ proc/

root/ tmp/

user/ usr/

var@ vmlinux

del T.: interruptores del ingls switches. e

4.3. Almacenaje de la informacin o

27

El -F es una opcin. Las opciones son clases especiales de parmetros que comienzan con un o a guin y modican el funcionamiento del programa. Para ls, -F es una opcin que le permite o o a Ud. ver cuales de las entradas son directorios, cuales son archivos especiales, cuales programas, y cuales son archivos normales. Cualquiera que termina con una barra es un directorio. Trataremos con ms detalle las caracter a sticas de ls ms adelante. Es un programa sorprendentemente complejo! a Por ahora, hay dos lecciones que se deben aprender. Primero, debe aprender que es lo que hace ls. Pruebe unos cuantos otros directorios de los que se muestran en el arbol de la Figura 4.1, y f jese en su contenido. Naturalmente, algunos estarn vac y otros tendrn muchos archivos a os, a dentro. Le sugiero que utilice ls con y sin la opcin -F. Por ejemplo, ls /usr/local debe o aparecer ms o menos as a :
/home/larry$ ls /usr/local archives bin emacs /home/larry$

etc

ka9q

lib

tcl

La segunda leccin es ms general. Muchos comandos Unix son como ls. Tienen opciones, que o a en general consisten de un carcter precedido por un guin, y tienen parmetros. A diferencia de a o a ls, algunos comandos requieren ciertos parmetros y/u opciones. Para mostrar como se usan los a comandos, utilizaremos el siguiente formato:

ls [-aRF] [directorio]
En general, y desde ahora en adelante, utilizar plantillas de comandos como la mostrada, antes e de introducir comandos nuevos para Ud.. La primer palabra es el comando (en este caso ls). A continuacin del comando siguen todos los parmetros. Los parmetros opcionales se encerrarn o a a a entre corchetes ([ y ]). Las meta-variables estn inclinadasson palabras que toman el lugar a de los parmetros reales. (Por ejemplo, ms arriba puede Ud. ver que dice directorio, lo cual debe a a ser reemplazado por el nombre de un directorio real.) Las opciones son un caso especial. Estn encerradas entre corchetes, pero Ud. puede utilizar una a sola de ellas sin necesidad de emplear todas juntas. Por ejemplo, con las tres opciones enumeradas ms arriba para el caso de ls, Ud. tiene ocho maneras posibles de correr el comando: con o sin cada a una de las opciones. (Contraste ls -R con ls -F.)

4.3.2

El directorio actual y cd

pwd
El uso de los directorios puede ser insoportable si se tiene que teclear la trayectoria completa cada vez que se quiere acceso a un directorio. En lugar de ello, los shell de Unix tienen una caracter stica denominada directorio actual, presente, o de trabajo. Es muy probable que su conguracin o de shell muestre dicho directorio como parte del prompt: /home/larry. Si no lo hace, pruebe el

28

Cap tulo 4. El shell de Unix

comando pwd, que proviene de la sigla de las palabras present working directory 17 . (Algunas veces el prompt muestra el nombre de la mquina. Esto slo es util realmente en un entorno de red en el a o cual hay una gran cantidad de mquinas diferentes.) a
mousehouse>pwd /home/larry mousehouse>

cd [directorio]
Como puede Ud. ver, pwd le dice cul es su directorio actual18 se trata de un comando muy a simple. La mayor de los comandos acta, de forma predeterminada, sobre el directorio actual. a u Podemos cambiar nuestro directorio actual mediante el comando cd. Por ejemplo, pruebe:
/home/larry$ cd /home /home$ ls -F larry/ sam/ shutdown/ /home$

steve/

user1/

Si Ud. omite el parmetro opcional directorio, se lo retornar a su directorio ra personal, o a a z directorio original. De otro modo, cd lo cambiar al directorio especicado. Por ejemplo: a
/home$ cd /home/larry$ cd / /$ cd home /home$ cd /usr /usr$ cd local/bin /usr/local/bin$

Como puede ver, cd le permite expresar el directorio de destino con trayectorias absolutas o relativas. Una trayectoria absoluta comienza con una / y especica todos lo directorios que existen antes del archivo que Ud. desea. Una trayectoria relativa est referida a su directorio actual. En a el ejemplo anterior, cuando estaba en /usr, hice un movimiento relativo a local/binlocal es un directorio que existe bajo /usr, y bin es un directorio bajo local. (cd home tambin e fue un cambio de directorio relativo.) Existen dos directorios que se utilizan solamente para trayectorias relativas: . y ... El directorio . se reere al directorio actual, y .. es el directorio anterior: son abreviaturas de directorio, y existen en todos los directorios, aunque no cuadran bien en la metfora de carpeta a dentro de carpeta. An el directorio ra tiene un directorio anterior: l es su propio directorio u z e anterior.
del T.: Directorio de trabajo actual. este libro ver todos los trminos en uso: directorio de trabajo presente, directorio actual, o directorio de a e trabajo. Preero directorio actual, aunque a veces recurra a las otras formas a causa de razones de estilo.
18 En 17 N.

4.3. Almacenaje de la informacin o

29

El archivo ./chapter-1 viene a ser el archivo chapter-1 que est en el directorio actual. Ocaa sionalmente, ser necesario que Ud. coloque expl a citamente el ./ para que ciertos comandos funcionen, aunque esto es raro. En la mayor de los casos, dar igual poner ./chapter-1 o chapter-1. a a El directorio .. es ms util cuando queremos retroceder: a
/usr/local/bin$ cd .. /usr/local$ ls -F archives/ bin/ emacs@ /usr/local$ ls -F ../src cweb/ linux/ xmris/ /usr/local$

etc/

ka9q/

lib/

tcl@

En este ejemplo, me cambi al directorio anterior mediante cd .. y luego list el directorio e e /usr/src desde /usr/local utilizando el nombre ../src. Debe advertir que si hubiese estado en /home/larry, ejecutar el comando ls -F ../src no me habr servido al propsito de ver lo a o que hay en /usr/src. El directorio ~/ es un alias para su directorio personal:
/usr/local$ ls -F ~/ /usr/local$

Puede ver que an no hay nada en su directorio personal. ~/ ser ms util a medida que u a a aprendamos ms acerca de como manipular los archivos. a

4.3.3

Creacin y borrado de directorios o

mkdir directorio1 [directorio2 . . . directorioN]


En Unix, crear directorios es extremadamente simple, y puede ser una muy util herramienta de organizacin. Para crear un nuevo directorio, utilice el comando mkdir. Por supuesto, mkdir viene o de make directory19 . Con un pequeo ejemplo, veamos como funciona esto: n
/home/larry$ ls -F /home/larry$ mkdir report-1993 /home/larry$ ls -F report-1993/ /home/larry$ cd report-1993 /home/larry/report-1993$

mkdir puede tomar ms de un parmetro, a los que interpreta como nombres de directorios que a a debe crear. Puede especicarlos mediante su nombre relativo o absoluto; report-1993 es un caso de ejemplo con trayectoria relativa.
19 N.

del T.: Crear directorio.

30

Cap tulo 4. El shell de Unix

/home/larry/report-1993$ mkdir /home/larry/report-1993/chap1 ~/report-1993/chap2 /home/larry/report-1993$ ls -F chap1/ chap2/ /home/larry/report-1993$

rmdir directorio1 [directorio2 . . . directorioN]


El opuesto de mkdir es rmdir (remove directory20 ). rmdir trabaja exactamente igual que mkdir. Un ejemplo de rmdir es:
/home/larry/report-1993$ rmdir chap1 chap3 rmdir: chap3: No such file or directory /home/larry/report-1993$ ls -F chap2/ /home/larry/report-1993$ cd .. /home/larry$ rmdir report-1993 rmdir: report-1993: Directory not empty /home/larry$

Como puede apreciar, rmdir se niega a borrar un directorio que no existe, y tampoco permite eliminar directorios que tengan algo dentro. (Recuerde que report-1993 tiene un subdirectorio, chap2, dentro de l) Existe un tema interesante para pensar, entonces: qu pasa si intenta eliminar e e su directorio actual? Averigmoslo: ue
/home/larry$ cd report-1993 /home/larry/report-1993$ ls -F chap2/ /home/larry/report-1993$ rmdir chap2 /home/larry/report-1993$ rmdir . rmdir: .: Operation not permitted /home/larry/report-1993$

Otra situacin del mismo estilo, es que sucede si intenta eliminar el directorio anterior al directorio o actual. Bien, esto no es un problema nuevo: el directorio anterior al actual no est vac (existe el a o actual en l), as que no puede ser borrado. e

4.4

Informacin en movimiento o

Todos este asunto de los directorios est muy lindo, pero no son de ninguna ayuda, a menos que a Ud. tenga algn sitio donde almacenar sus datos. Los dioses del Unix vieron este problema y lo u solucionaron haciendo que los usuarios tengan archivos21
20 N. 21 N.

del T.: Eliminar directorio. del T.: Tambin denominados cheros. e

4.4. Informacin en movimiento o

31

Aprenderemos ms acerca de la creacin y edicin de archivos en los prximos cap a o o o tulos. Los comandos bsicos para manipular archivos en Unix son cp, mv, y rm. Sus nombres provienen a de copy22 , move23 , y remove24, respectivamente.

4.4.1

cp como un monje

cp [-i] fuente destino cp [-i] archivo1 archivo2 . . . archivoN directorio-de-destino25


cp es una utilidad muy prctica en Unix, y adems muy poderosa. Permite que una persona a a pueda copiar ms informacin en un segundo que lo que pod copiar un monje del siglo XIV en a o a todo un ao. n

SLOW

Debe ser muy cuidadoso con cp si no dispone de una cantidad importante de espacio en disco. A nadie le hace gracia ver el mensaje Disk full26 cuando est trabajando con archivos importantes. a cp tambin puede sobreescribir archivos existentes sin previo aviso trataremos este tema ms e a adelante. Bien, hablaremos primero acerca de la primer l nea en la plantilla del comando. El primer parmetro de cp es el nombre del archivo que hay que copiar, el segundo es el lugar donde se desea a depositar la copia. Puede obtener una copia con un nombre distinto, o una en un directorio diferente. Veamos algunos ejemplos:
/home/larry$ /etc/passwd /home/larry$ /home/larry$ passwd /home/larry$ /home/larry$ frog passwd /home/larry$ ls -F /etc/passwd cp /etc/passwd . ls -F cp passwd frog ls -F

El primer comando cp que corr tom el archivo /etc/passwd, que contiene los nombres de o todos los usuarios en un sistema Unix, y lo copi en mi directorio ra cp no borra el archivo fuente, o z. as que no hice nada que pudiera daar el sistema. O sea que ahora existen dos copias del contenido n del archivo /etc/passwd, ambas se denominan passwd, pero una est en el directorio /etc y la a otra en /home/larry.
del T.: Copiar. del T.: Mover. 24 N. del T.: Quitar, borrar. 25 cp necesita de dos renglones en su plantilla porque el signicado del segundo parmetro depende de la cantidad a de parmetros. a 26 N. del T.: Disco lleno.
23 N. 22 N.

32

Cap tulo 4. El shell de Unix

Luego, creamos una tercera copia de /etc/passwd cuando tecleamos cp passwd frog ahora hay tres copias: /etc/passwd, /home/larry/passwd y /home/larry/frog. El contenido de esos tres archivos es el mismo, sus nombres de archivo dieren. cp puede copiar archivos entre directorios si el primer parmetro es un archivo y el segundo es a un directorio. En este caso, el nombre simple (sin el path) de destino coincidir con el original, para a cada archivo. Tambin se puede copiar un archivo y cambiar su nombre de destino en una sola operacin, caso e o que se da cuando ambos parmetros son nombres de archivo. Aqu reside uno de los peligros de cp. Si a tecleara cp /etc/passwd /etc/group, el comando cp crear normalmente un archivo nuevo con a el contenido idntico al de /etc/passwd y con el nombre /etc/group. Por lo tanto, si /etc/group e ya existiera, cp destruir el contenido del antiguo sin darle la oportunidad de guardarlo. (Ni siquiera a escribir un mensaje en el cual le advierta que est por destruir un archivo al copiarle otro encima.) a a Echemos una mirada a otro ejemplo de cp:
/home/larry$ frog passwd /home/larry$ /home/larry$ /home/larry$ frog /home/larry$ frog passwd /home/larry$ ls -F mkdir passwd_version cp frog passwd passwd_version ls -F passwd passwd_version/ ls -F passwd_version

Cmo us cp en este caso? Evidentemente, cp puede tomar ms de dos parmetros, como se o e a a puede apreciar en la segunda l nea de plantillas del comando. Lo que el comando anterior realiz o es copiar los archivos que aparecen listados (frog, y passwd) al directorio passwd version. De hecho, cp puede tomar cualquier nmero de parmetros: interpreta los primeros n 1 como los u a e nombres de archivo que debe copiar, y el nsimo parmetro como el nombre del directorio al cual se a deben copiar los anteriores.

SLOW

No puede renombrar archivos cuando copia ms de uno a la vezsiempre mantienen su noma bre simple. Esto nos lleva a una pregunta interesante. Qu es lo que pasar si tecleamos e a cp frog passwd toad, donde frog y passwd existen, y toad no es un directorio? Intntelo e y lo sabr. a

4.4.2

La poda con rm

rm [-i] archivo1 archivo2 . . . archivoN


Ahora que hemos aprendido como crear millones de archivos con cp (y crame, muy pronto e encontrar nuevas maneras de crear ms archivos), ser util aprender la manera de borrarlos. De a a a

4.4. Informacin en movimiento o

33

hecho, es muy simple: el comando que anda necesitando es rm, y funciona como Ud. se lo esperar a: a cualquier archivo cuyo nombre se pasa como parmetro a rm se lo borra. a Por ejemplo:
/home/larry$ ls -F frog passwd passwd_version/ /home/larry$ rm frog toad passwd rm: toad: No such file or directory /home/larry$ ls -F passwd_version/ /home/larry$

Como puede Ud. apreciar, rm es extremadamente espartano. No slo no pide su conrmacin, o o sino que borra cosas an en el caso en que haya errores en la l u nea de comandos. Esto bien puede ser peligroso. Considere la diferencia entre estos dos comandos:
/home/larry$ ls -F toad frog/ /home/larry$ ls -F frog toad /home/larry$ rm frog/toad /home/larry$

y este otro:
/home/larry$ rm frog toad rm: frog is a directory /home/larry$ ls -F frog/ /home/larry$

SLOW

Como puede ver, la diferencia en un caracter hace una diferencia importante en la salida del comando. Es vital que Ud. controle lo que ha escrito en sus l neas de comando antes de presionar Intro !

4.4.3

Ser interesante tener un rastrillo a

mv [-i] nombre-viejo nombre-nuevo mv [-i] archivo1 archivo2 . . . archivoN nuevo-directorio


Por ultimo, el otro comando del que debe cuidarse es mv. mv se parece un montn a cp, excepto o que borra el archivo original despus de copiarlo. Se puede entender como la utilizacin conjunta de e o cp y rm. Veamos que podemos hacer:
/home/larry$ cp /etc/passwd . /home/larry$ ls -F

34

Cap tulo 4. El shell de Unix

passwd /home/larry$ /home/larry$ frog /home/larry$ /home/larry$ /home/larry$ report/ /home/larry$ frog /home/larry$

mv passwd frog ls -F mkdir report mv frog report ls -F ls -F report

Como puede ver, mv renombra un archivo (que es el primer parmetro) si el segundo parmetro a a es un archivo. Si el segundo parmetro es un directorio, mv mover el archivo al nuevo directorio, a a manteniendo el mismo nombre simple.

SLOW

Debe Ud. ser muy cuidadoso con mv el comando no controla si el archivo ya existe, y borrar a cualquier archivo que hubiera con el nombre de destino. Por ejemplo, si ya tengo un archivo de nombre frog existente en mi directorio report, el comando mv frog report borrar el archivo a /report/frog y lo reemplazar con /frog. a De hecho, existe una manera de lograr que tanto rm, cp, y mv le consulten a Ud. antes de eliminar archivos. Los tres comandos nombrados aceptan la opcin -i a tal efecto. Si Ud. utiliza un alias o puede hacer que el shell ejecute: rm -i automticamente cuando teclee: rm. Aprender ms de a a a estos temas luego en la Seccin 9.1.3 en la pgina 92. o a

Cap tulo 5

El sistema de ventanas X
Lo mejor de los estndares es que haya tantos para elegir. a Andrew S. Tanenbaum Este cap tulo slo es aplicable para aquellos que usen el sistema de ventanas X. Si se encuentra o con una pantalla con mltiples ventanas, colores o un cursor que slo se mueve con el ratn, est u o o a usted usando X. (Si su pantalla contiene caracteres blancos sobre fondo negro no est usando X. a Para arrancarlo, rerase a la Seccin 5.1.) e o

5.1
5.1.1

Ejecucin y salida del sistema de ventanas X o


Ejecucin de X o

Incluso cuando X no arranque de forma automtica durante el ingreso en el sistema, es posible arrana carlo desde la l nea de comandos del intrprete en modo texto. Hay dos comandos que arrancan X, e bien startx o bien xinit. Debe intentar startx primero. Si el intrprete de comandos se queja de e que ese comando no existe, entonces pruebe con xinit a ver si arranca X de ese modo. Si no funciona ninguno de los comandos anteriores, puede que no tenga X instalado en su sistemarerase e a la documentacin local de su distribucin. o o Si el comando se ejecuta pero regresa al intrprete en modo texto tras un rato, X est instalado e a pero no ha sido congurado todav En ese caso debe consultar la documentacin que acompaaba a. o n su distribucin en lo referente a como congurar X. o

5.1.2

Salida de X

Dependiendo de cmo se haya congurado X, puede haber dos modos diferentes de salir de X. El o primero es que su gestor de ventanas controle la ejecucin de X. En ese caso, deber salir de X o a usando un men (ver Seccin 5.4.8 en la pgina 41). Para ver el men, basta apretar un botn del u o a u o ratn sobre el fondo. o 35

36

Cap tulo 5. El sistema de ventanas X

La entrada del men que busca debe ser algo as como Exit Window Manager 1 o Exit X2 . u Trate de encontrar esa entrada (puede que haya ms de un menintente usar diferentes botones) a u y el jala. El otro mtodo utiliza una ventana xterm especial para controlar X. En este caso, segramente e u 3 4 existir una ventana cuyo t a tulo sea login o system xterm . Para salir de X, mueva el cursor a esa ventana y escriba exit5 . Si X arranc automticamente tras su ingreso en el sistema, uno de estos mtodos probablemente o a e le sacar de l. Basta conectarse de nuevo para regresar a l. Si ejecut X de forma manual, al salir a e e o volver al interprete de comandos en modo texto. (Si quiere salir del sistema, bastar con escribir a a logout.)

5.2

Qu es el sistema de ventanas X? e

El Sistema de Ventanas X es un mtodo de trabajo grco y distribuido, desarrollado principale a mente en el Instituto Tecnolgico de Massachusetts. Actualmente est a cargo de un consorcio de o a fabricantes (debidamente llamado El Consorcio X) y es mantenido por ellos. El Sistema de Ventanas X (que a partir de ahora abreviaremos como X 6 tiene revisiones cada pocos aos, conocidas como lanzamientos. La ultima revisin ha sido X11R6, o sexto lanzamiento 7 . n o El nmero 11 indica la versin ocial pero no ha habido cambios en los ultimos aos y tampoco hay u o n planes para cambiarla en un futuro prximo. o Al ser cliente y servidores programas diferentes, es posible ejecutar cada uno en en mquinas a completamente diferentes. Adems de constituir un mtodo estndar para aplicaciones grcas, es a e a a posible ejecutar un programa en una mquina remota (incluso al otro lado del pa si quiere!) y a s, que los resultados aparezcan en la estacin de trabajo que tiene enfrente suyo. o Un tercer concepto con el que debe familiarizarse es el de gestor de ventanas. El gestor de ventanas es un cliente especial que le dice al servidor en que posicin deben colocarse las diferentes o ventanas y permite al usuario moverlas. El servidor, por s mismo, no interacciona con el usuario. Se trata de un medio que conecta el usuario y el cliente.

5.3

Qu es esto que hay en mi pantalla? e

Al arrancar X, varios programas son ejecutados. Primero, arranca el servidor. Luego, generalmente arrancan varios clientes. Desgraciadamente no hay un estndar comn entre las diferentes distribua u
En ingls, salir del gestor de ventanas e En ingls, salir de X. e 3 N.T.: En ingls, ingreso en el sistema o autenticacin. e o 4 N.T.: En ingls, xterm del sistema o terminal X del sistema. e 5 N.T.: En ingls, salir. e 6 Existen varias formas de referirse al Sistema de Ventanas X. Una forma que aunque com n es incorrecta es u X Window o Ventanas X. 7 N.T.: La palabra inglesa es release. Por ello los lanzamientos se diferencian a adiendo una R y el n mero n u correspondiente.
2 N.T.: 1 N.T.:

5.3. Qu es esto que hay en mi pantalla? e

37

Figura 5.1 Ejemplo comentado de una pantalla X estndar. En este ejemplo el usuario est a a ejecutando twm. El reloj estndar ha sido sustitu por uno transparente llamado oclock. a do

icon manager title bar xeyes oclock

xterm menu bar

emacs scrollbar

root menu

ciones. Es bastante probable que entre los clientes se encuentre un gestor de ventanas, bien fvwm o twm, un intrprete de comandos, xterm, y un reloj, xclock. e

5.3.1

XClock

xclock [-digital] [-analog] [-update segundos] [-hands color]


Primero explicaremos el ms simple: xclock funciona exctamente como se puede esperar. Marca a a los segundos, minutos y horas en una ventana pequea. n Ni usar los botones del ratn, ni escribir en la ventana xclock produce efecto alguno eso es o todo lo que hace. O quiz no? En realidad hay varias opciones diferentes que permiten hacer que a el programa se comporte de modos diferentes. As por ejemplo, xclock -digital crea un reloj , digital. xclock -update 1 hace que el segundero se mueva cada segundo y xclock -update 5

38

Cap tulo 5. El sistema de ventanas X

hace que se mueva cada cinco segundos. Para obtener ms informacin sobre las opciones de xclock puede consultar la pgina del manual a o a correspondienteman xclock. Si piensa ejecutar varias copias de xclock, probablemente deber a consultar la Seccin 6.4 (Multitarea) para saber como se ejecutan a la vez que sus otros programas. o (Si ejecuta una copia de xclock en primer planoque es la forma usual en la que se ejecuta un programay quiere salir de l, basta teclear Ctrl-c .) e

5.3.2

XTerm

La ventana que muestra el prompt del intrprete de comandos (podr ver algo parecido a /home/larry$) e a es controlada por un programa llamado xterm. xterm es un programa engaosamente complicado. A n primera vista, no parece que haga mucho pero realmente hace much simo trabajo. xterm emula una terminal de forma que las aplicaciones de modo texto de Unix funcionen correctamente. Tambin e mantiene en memoria informacin de forma que se pueden consultar comandos usados previamente. o (Para ver como hace uso de esto, rerase a la Seccin 5.6.3.) e o Gran parte de este libro est dedicada a aprender como usar el interprete de comandos de Unix a que se encuentra dentro de la ventana xterm. Para poder escribir en la xterm, generalmente es necesario mover el cursor (que posiblemente aparece en forma de X o de echa) al interior de la ventana xterm. De todos modos este comportamiento es dependiente del gestor de ventanas. Uno de los modos en los que se puede arrancar un programa bajo X es a travs de una xterm. e Al tratarse los programas X de programas Unix estndar, pueden ser arrancados a travs de un a e intrprete de comandos como el de las xterms. Para evitar bloquear la xterm ejecutando un programa e largo desde ella, generalmente se preere arrancar los programas X en segundo plano. Para consultar este tema puede referirse a la Seccin 6.4. o

5.4

Gestores de ventanas

Bajo Linux, los gestores de ventanas ms comunes son dos. El primero, llamado twm que viene a de Tab Window Manager. Es un programa mayor que el segundo, fvwm. (fvwm viene de F(?) Virtual Window Managerel autor nunca explic que signicaba la f8 .). Ambos gestores de o ventanas son altamente congurables lo cual impide dar instrucciones espec cas sobre que teclas usar para hacer algo en particular. Si le interesa saber algo sobre la conguracin de twm, rerase a la Seccin 9.2.1. La conguracin o e o o de fvwm se describe en la Seccin 9.2.2. o

5.4.1

Cuando se crean nuevas ventanas

Hay tres tipos de cosas que un gestor de ventanas puede hacer cuando se crea una nueva ventana. Es posible congurar el gestor de ventanas de manera que aparezca la forma de la ventana, permitindole e
8 N. del T.: En el Linux Journal N.o 43, Noviembre 1997, hay una entrevista a Robert Nation, pgs. 46-47, y ste a e dice que la Fest porFeeble(Gracias Jos Luis Gurpegui por la aclaracin.) a e o

5.4. Gestores de ventanas

39

colocarla en la posicin que preera en la pantalla. Este modo se llama colcacin manual. Si o o ve aparecer la forma de la ventana, puede moverla con el ratn y colocarla presionando el botn o o izquierdo. A veces es posible que el gestor de ventanas las coloque por s mismo. Se trata de la colocacin o aleatoria. Finalmente, a veces, la aplicacin pregunta por el lugar preciso en el que el quiere que se situe. o Tambin el gestor de ventanas puede congurarse de forma que siempre site las ventanas de ciertas e u aplicaciones en lugares jos. (As por ejemplo, se puede especicar que xclock siempre aparezca en la esquina superior derecha de la pantalla.)

5.4.2

Foco

El gestor de ventanas controla otras cosas importantes. Lo que probablemente le interesa ms es a el foco. El foco del servidor determina que ventana recibe los carcteres introducidos mediante el a teclado. Generalmente, en X, el foco es determinado por la posicin del cursor del ratn. Si mueve o o el cursor del ratn dentro de una ventana xterm9 , esa xterm recibe los caracteres tecleados. Se trata o de un comportamiento diferente al de otros sistemas de ventanas como, Windows de Microsoft, OS/2, o Macintosh, donde debe pinchar con el ratn en una ventana para que adquiera el foco. o Generalmente bajo X, si el cursor del ratn se sale de una ventana, se pierde el foco y le resultar o a imposible escribir en ella. Debe notar, sin embargo, que es posible congurar tanto twm como fvwm de forma que para cambiar el foco necesite pinchar la ventana correspondiente, y pinchar fuera para desenfocarla, de forma que se comporten igual que Windows de Microsoft. Una de dos, trate de averiguar como funciona su gestor de ventanas probando o consulte la documentacin local. o

5.4.3

Moviendo ventanas

Otro aspecto de X que es altamente congurable es el mtodo para mover ventanas. Yo tengo e congurados tres mtodos para mover ventanas en twm. El ms obvio es mover el cursor del ratn e a o sobre la barra del t tulo y arrastrar la ventana. Desgraciadamente, la conguracin permite denir o el movimiento usando cualquiera de los tres botones10 (Para arrastrar, site el cursor sobre la barra u del t tulo, y mantenga presionado el botn del ratn correspondiente mientras se mueve). Lo ms o o a probable es que su conguracin use el botn izquierdo para mover ventanas. o o Otra forma de mover ventanas puede ser manteniendo una tecla pulsada mientras mueve el ratn. As en mi caso, si mantengo pulsada la tecla Alt y muevo el cursor sobre una ventana, o , puedo arrastrarla usando el boton izquierdo de mi ratn. o Por supuesto, para ver como funciona en su caso puede probar igual que antes o referirse a la documentacin local. Alternativamente, si quiere tratar de interpretar los cheros de conguracin o o de los gestores de ventanas puede referirse a la Seccin 9.2.1 para twm o 9.2.2 para fvwm. o
ejecutar varias copias de xterm al mismo tiempo! ratones de PCs tienen dos botones unicamente. En este caso, generalmente es posible emular el botn o central presionando ambos botones simultneamente. a
10 Muchos 9 Puede

40

Cap tulo 5. El sistema de ventanas X

5.4.4

Profundidad

Dado que las ventanas pueden solaparse en X, necesitamos el concepto de profundidad. A pesar de que tanto las ventanas como la pantalla son bidimensionales, unas ventanas pueden estar delante de otras, de forma que cubren total o parcialmente aquella situada detrs. a Existen varias operaciones que manejan la profundidad: Subir o poner una ventana delante. Generalmente se hace pinchando con alguno de los botones en la barra de t tulo de la ventana en cuestin. El botn usado depende de la conguracin o o o del gestor de ventanas. (Es posible que sean varios los botones que produzcan este efecto.) Bajar o empujar una ventana hacia atrs. Generalmente se hace pinchando igualmente en la a barra de t tulo pero usando otro botn. Tambin es posible congurar el gestor de ventanas o e de forma que pinchar traiga la ventana hacia delante siempre que haya algo encima de ella y la lleve hacia atrs si no hay nada delante. a Alzar en ciclo, de forma que el gestor de ventanas va alzando las ventanas una a una, en orden.

5.4.5

Iconizar

Existen otras operaciones que pueden tapar ventanas o hacerlas desaparecer completamente. La primera es iconizacin. Dependiendo del gestor de ventanas que use, este proceso puede realizarse o de varias formas. Con twm, muchas personas conguran un gestor de iconos. Se trata de una ventana especial que contiene una lista con las dems ventanas en uso en la pantalla. Pinchando a con el ratn en uno de los nombres (o, dependiendo de la conguracin en uno de los botones) la o o ventana desaparecees iconizada. La ventana est an activa, pero no puede verse. Pinchando otra a u vez en el gestor de iconos, la ventana vuelve a aparecer en la pantalla. Se trata de algo muy util. Se podr por ejemplo tener xterm remotas en diferentes mquinas a, a que use ocasionalmente al mismo tiempo. Dado, sin embargo, que slo las usa raramente, puede o mantenerlas iconizadas mientras trabaja con un pequeo grupo. El unico problema es que resulta n fcil perder alguna ventana. Generalmente eso lleva a crear nuevas ventanas que dupliquen la a funcionalidad de las que estn iconizadas. a Otros gestores de ventanas crean verdaderos iconos en la parte inferior de la pantalla o simplemente en la ventana raiz.

5.4.6

Variando el tamao n

Existen diversos mtodos para variar el tamao de las ventanas bajo X. De nuevo, esto depende de e n su gestor de ventanas y de cmo haya sido congurado. El mtodo al que estn acostumbrados los o e a usuarios de Windows de Microsoft consiste en pinchar en el borde de la ventana y arrastrarlo. Si las ventanas que produce su gestor tienen un borde gordo que hace que el cursor del ratn cambie o al pasar por encima de l, seguramente tambin puede usar ese mtodo. e e e

5.5. Atributos X

41

Otra forma es crear un botn de variacin de tamao en la barra del t o o n tulo. Es el botn visible o en la parte derecha de las barras de los t tulos de la Figura 5.3. Para usarlo, pinche con el botn o izquierdo del ratn en l y mantenindolo presionado, muvalo fuera de la ventana para variar el o e e e tamao. Para jar el nuevo tamao basta soltar el botn del ratn. n n o o

5.4.7

Maximizacin o

La mayor de los gestores de ventanas soportan maximizacin. En twm, por ejemplo, puede maa o ximizar la altura de una ventana, su ancho o ambos a la vez. Aunque twm llama a este proceso zooming yo preero usar maximizacin. Las aplicaciones pueden responder de modo diferente a o un cambio de tamao. (Por ejemplo, xterm no cambia el tamao de letra pero aumenta el espacio n n de trabajo.) Desgraciadamente no hay un modo estndar de maximizar ventanas. a

5.4.8

Mens u

Los gestores de ventanas tambin proporcionan al usuario un sistema de mens para realizar tareas e u de forma rpida una y otra vez. Por ejemplo, podr tener una opcin que ejecute Emacs de forma a a o automtica o una xterm adicional. De ese modo no tendr que ejecutar el comando dentro de una a a xtermesto es especialmente bueno si no hay ninguna xterm ejecutndose en la que pueda escribir a para ejecutar un programa nuevo! De forma general, se puede acceder a los mens pinchando en la ventana ra que es una ventana u z, inmvil que siempre est debajo de las dems. Por defecto esta ventana es de color gris, pero puede o a a tener cualquier aspecto.11 Si quiere probar a ver un men, pinche y mantenga cualquier botn del u o ratn sobre la ventana ra Deber aparecer un men. Para seleccionar una opcin, mantenga o z. a u o presionado el botn y mueva el ratn hasta marcar la opcin deseada. Entonces suelte el botn. o o o o

5.5

Atributos X

Hay muchos programas que usan X. Algunos, como emacs, puede ejecutarse tanto en modo texto como en una ventana X que l mismo crea automticamente. Pero en general, la mayor de los e a a programas para X slo funcionan bajo X. o

5.5.1

Geometr a

Existe una serie de cosas que son comunes a todos los programas que se ejecutan bajo X. En X el concepto de geometr engloba el lugar y el tamao de la ventana. La geometr de una ventana a n a tiene cuatro componentes, a saber:
11 Un programa divertido que puede probar se llama xfishtank. Este programa crea un peque o acuario en el fondo n de su pantalla.

42

Cap tulo 5. El sistema de ventanas X

La dimensin horizontal, generalmente medida en pixels. (Un pixel es la unidad ms pequea o a n que puede colorearse y representarse en la pantalla. Muchas conguraciones X en PCs basados en un procesador Intel tienen una resolucin de 1024 pixels horizontalmente por 768 pixels o verticalmente.) Algunas aplicaciones como xterm o emacs, miden su tamao en caracteres. n (Por ejemplo, ochenta caracteres por l nea.) La dimensin vertical, tambin medida en pixels generalmente. Al igual que antes, en algunos o e casos se puede medir en l neas. La distancia horizontal a uno de los bordes de la pantalla. Por ejemplo, +35 signica a treinta y cinco pixels desde la izquierda. Sin embargo, -50 signica que el extremo derecho de la ventana est a cincuenta pixels del borde derecho de la pantalla. Generalmente no es posible lanzar a una ventana fuera de la pantalla, aunque si se puede mover fuera. (La principal excepcin es o cuando la ventana es demasiado grande.) La distancia vertical desde la parte superior o inferior de la pantalla; la distancia se mide desde la parte superior si es positiva o desde la inferior si es negativa. Los cuatro componentes se unen formando la cadena de geometr 503x73-78+0. (Esto marca la a: geometr de una ventana de 503 pixels de largo, 73 pixels de alto, situada cerca de la esquina superior a derecha de la pantalla.) O de otro modo, tendremos tamaoh tamaovsituacinhsituacinv. n n o o

5.5.2

Presentacin o

Toda aplicacin X tiene asociada una presentacin. Esta determina cul es la pantalla controlada o o a por el servidor X. La presentacin est formada por tres elementos: o a El nombre de la mquina en la que se ejecuta el servidor. En el caso de sistemas Linux aislados, a el nombre de la mquina que ejecuta el servidor coincide con la que ejecuta los clientes. En a ese caso se puede omitir el nombre por completo. El nmero del servidor de dicha mquina que debe responder a las peticiones de los clientes. u a Dado que una mquina puede estar corriendo diferentes servidores a la vez (es algo improbable a pero posible en mquinas Linux) cada uno tiene que tener un nmero propio. a u El nmero del monitor. X permite que un servidor controle ms de un monitor a la vez. Por u a ejemplo, puede que alguien quiera tener ms espacio, de forma que use dos monitores a la vez. a Para evitar que el rendimiento de la mquina sea muy malo, en vez de tener dos servidores, a hacen que sea el mismo servidor el que controle las dos mquinas. a Si ponemos estas tres cosas juntas obtendremos: mquina:nmero-de-servidor.nmero-de-pantalla. a u u Por ejemplo, en mousehouse, todas mis aplicaciones tienen la presentacin jada en :0.0, lo que o signica que la salida aparece en la primera pantalla del primer servidor local. Sin embargo si uso una computadora remota, tendr que ser mousehouse:0.0. a

5.6. Caracter sticas comunes

43

Figura 5.2 Opciones Estandar para Programas X Nombre -geometry -display -fg -bg Seguido de geometr de la ventana a adnde quiere que el programa env la o e salida color primario en primer plano color primario en el segundo plano Ejemplo xterm -geometry 80x24+0+90 xterm -display lionsden:0.0 xterm -fg yellow xterm -bg blue

Por defecto, la presentacin se toma de una variable de entorno (ver Seccin 9.1.4) llamada o o 12 DISPLAY , pero puede ser jada mediante una opcin desde el intrprete de comandos (ver Figuo e ra 5.2). Para ver cul es el valor de la variable DISPLAY, basta ejecutar echo $DISPLAY. a

5.6

Caracter sticas comunes

A pesar de que X es una interfaz grca de usuario, se trata de una interfaz muy desequilibrada. a Resulta imposible predecir como va a comportarse cualquier elemento del sistema porque se pueden recongurar, cambiar o incluso sustituir muy fcilmente. Eso signica que es muy dif explicar a cil como se han de usar los distintos elementos de la interfaz. Una de las razones que ya conocemos es la posibilidad de utilizar diferentes gestores de ventanas que a su vez son altamente congurables. Otra explicacin para el desequilibrio de la interfaz es que las aplicaciones X se pueden conso truir mediante conjuntos de chismes13 . La distribucin X estndar incluye los widgets Athena o a desarrollados en el MIT. Las aplicaciones gratuitas suelen hacer uso de este conjunto. Tienen la desventaja de que su aspecto no es particularmente atrayente y resultan algo ms dif a ciles de usar en un programa que los otros. Otro conjunto de widget popular es Motif. Motif es un conjunto no gratuito similar a la interfaz de usuario usada por Windows de Microsoft. Muchas aplicaciones comerciales as como algunas gratuitas usan el conjunto de widget Motif. El popular Browser de World Wide Web netscape, por ejemplo, usa Motif. Veamos cuales son algunas de las cosas ms habituales que puede encontrar. a

5.6.1

Botones

Los botones son generalmente los componentes de la interfaz ms fciles de usar. Un botn se a a o invoca situando el cursor del ratn sobre el botn en cuestin y pinchando (pulsando y soltando o o o inmediantamente) el botn izquierdo. Los botones Athena y Motif son funcionalmente equivalentes o pero tienen diferencias de apariencia.
12 N.T. 13 N.T.

DISPLAY signica presentacin en ingls. o e Se trata de la traduccin de la palabra inglesa widget. o

44

Cap tulo 5. El sistema de ventanas X

Figura 5.3 emacs cambia la barra de men en funcin del tipo de chero que est editando. Aqu u o e se puede ver una posible barra de men. u

5.6.2

Barras de men u

Una barra de men es una coleccin de comandos accesibles mediante el ratn. Por ejemplo, la u o o Figura 5.3 muestra la barra de men de emacs. Cada palabra es la cabecera de una categor File 14 u a. contiene comandos que permiten cargar o grabar cheros. Por convencin, esta categor incluye o a tambin el comando que termina la aplicacin. e o Para utilizar un comando, mueva el cursor del ratn sobre la categor correspondiente (como o a por ejemplo File) y apriete el botn izquierdo. Sin soltarlo, arrastre el ratn hacia abajo para ver o o los diferentes comandos de esa categor Para seleccionar uno, mueva el cursor sobre el mismo y a. suelte el botn del ratn. Algunas barras de men le permiten pinchar sobre la categor o o u asi este es su caso, pinche sobre la categor para ver el men que se mantendr hasta que pinche de nuevo a u a para seleccionar un comando, otro men, o pinche fuera (indicando que no est interesado en ningn u a u comando en particular).

5.6.3

Barras de desplazamiento

Una barra de desplazamiento es un mtodo que permite ver slo una parte de un documento, e o mientras que mantiene el resto fuera de la pantalla. Por ejemplo, en la Figura 5.4, la ventana de xterm slo presenta el tercio inferior del texto disponible. Es muy fcil ver cual parte del texto es o a el que se puede ver en cualquier momento: la franja oscura de la barra est situada y tiene una a longitud relativa a la porcin de texto que se puede ver. Cuando no hay ms que lo que se puede o a ver, toda la barra aparece de color oscuro. Si se trata de la mitad, ser la mitad la que aparezca a oscurecida. Puede tener una barra de deplazamiento vertical a la derecha o la izquierda de su texto y una horizontal en la parte superior o inferior, dependiendo de la aplicacin de que se trate. o Barras de deplazamiento Athena Las barras de desplazamiento Athena funcionan de forma diferente a las de otros sistemas de ventanas. Cada uno de los tres botones del ratn tiene una funcin diferente. Para desplazarse hacia o o arriba (es decir, para que ver el material situado por encima de lo que se puede ver en ese momento) puede pinchar en cualquier lugar de la barra con el botn derecho. Para desplazarse hacia abajo, o puede usar el botn izquierdo de forma anloga. o a Tambin puede saltar a cualquier lugar en particular usando el botn central del ratn y pine o o chando en el lugar de la barra que corresponde a la posicin del texto que le interesa. Esto hace a o
14 N.T.

Del ingls chero o archivo. e

5.6. Caracter sticas comunes

45

Figura 5.4 Barra de desplazamiento de tipo Athena en la parte izquierda de una ventana xterm. Junto a ella, una barra tipo Motif visible en una ventana con netscape.

la ventana presentar el material situado en ese punto del documento. Barras de desplazamiento Motif Una barra Motif actua de un modo ms parecido al acostumbrado en Windows de Microsoft o en a un Macintosh. La parte derecha de la Figura 5.4 muestra un ejemplo. Debe notar que adems de a la barra en s misma, hay unas echas tanto en la parte superior como en la inferior. Estas echas se pueden usar para ajuste no de la pantalla: pinchando tanto el botn izquierdo como el central o mueve la ventana ligeramente (por ejemplo una l nea); el botn derecho no hace nada. o El comportamiento asociado a pinchar en la barra de desplazamiento es completamente diferente en las barras Motif del que exhiben las barras Athena. El botn derecho no tiene efecto. Asociado al o botn izquierdo, la ventana se mover hacia arriba si pincha sobre la posicin actual o hacia abajo en o a o el caso contrario. Si pincha sobre la barra en el lugar actual y la arrastra podr moverse a cualquier a posicin a voluntad. Al soltar el botn se ja cual es la posicin nal de la ventana. o o o Pinchando el botn central en cualquier lugar de la barra hace que la ventana se desplace hacia o ese lugar de forma inmediata igual que ocurre en barras Athena. Sin embargo el punto elegido se convierte en el centro de la nueva pantalla de datos.

46

Cap tulo 5. El sistema de ventanas X

Cap tulo 6

Trabajando con Unix


A UNIX saleslady, Lenore, Enjoys work, but she likes the beach more. She found a good way To combine work and play: She sells C shells by the seashore. Unix es un potente sistema para aquellos que saben cmo dominar su poder. En este cap o tulo, intentar describir varias maneras de usar el shell de Unix, bash, ms ecientemente. e a

6.1

Comodines

En el cap tulo anterior, se ensearon los comandos para mantener cheros cp, mv, y rm. A veces, se n querr tratar con ms de un chero a la vezen realidad, con muchos a la vez. Por ejemplo, se quiere a a copiar todos los cheros que empiecen por data en un directorio llamado /backup. Se podr hacer a esto ejecutando muchos comandos cp, o escribiendo cada chero en una l nea de comando. Estos dos mtodos llevan mucho tiempo, incluso, se tienen muchas posibilidades de cometer errores. e Una buena manera de hacer este trabajo es teclear:
/home/larry/report$ ls -F 1993-1 1994-1 data1 1993-2 data-new data2 /home/larry/report$ mkdir ~/backup /home/larry/report$ cp data* ~/backup /home/larry/report$ ls -F ~/backup data-new data1 data2 /home/larry/report$

data5

data5

Como se puede observar, el asterisco indica a cp que tome todos los cheros que empiecen por data y los copie a /backup. Qu cree que cp d*w /backup puede haber hecho? e 47

48

Cap tulo 6. Trabajando con Unix

6.1.1

Qu ocurre realmente? e

Buena pregunta. De hecho, hay un par de carcteres especiales interceptados por el shell, bash. El a carcter *, un asterisco, dice cambia esta palabra con todos los cheros que se ajusten a esta espea cicacin. As el comando cp data* /backup, como el de arriba, cambia a cp data-new data1 data2 data5 o , antes de ejecutarse. Para ilustrar esto, introducir un comando nuevo, echo. echo es un comando extremadamente e simple; repite, o muestra, cualquier parmetro. De este modo: a
/home/larry$ echo Hola! Hola! /home/larry$ echo Como se encuentra? Como se encuentra? /home/larry$ cd report /home/larry/report$ ls -F 1993-1 1994-1 data1 1993-2 data-new data2 /home/larry/report$ echo 199* 1993-1 1993-2 1994-1 /home/larry/report$ echo *4* 1994-1 /home/larry/report$ echo *2* 1993-2 data2 /home/larry/report$

/ba

data5

Como se puede ver, el shell expande el comod y pasa todos los cheros al programa que se va a n ejecutar. Esto plantea una pregunta interesante: qu ocurre si no hay cheros que se ajusten a la e especicacin del comod Pruebe echo /rc/fr*og y bash pasar literalmente la especicacin o n? a o del comod al programa. n Otros shells, como tcsh, en vez de pasar el comod literalmente, contestarn No match. Aqu n a est el mismo comando ejecutado bajo tcsh: a
mousehouse>echo /rc/fr*og echo: No match. mousehouse>

La ultima pregunta que podr hacerse es, qu pasa si quisiera mostrar data*, en vez de la lista a e de nombres? Bien, tanto en bash como en tcsh, slo se debe incluir la cadena entre comillas: o
/home/larry/report$ echo "data*" data* /home/larry/report$

O bien

mousehouse>echo "data*" data* mousehouse>

6.1.2

El signo de interrogacin o

Adems del asterisco, el shell tambin interpreta un signo de interrogacin como un carcter especial. a e o a Un signo de interrogacin coincidir con un carcter, y slo uno. Por ejemplo, ls /etc/?? o a a o mostrar todos los cheros de dos letras en el directorio /etc. a

6.2. Ganar tiempo con bash

49

6.2
6.2.1

Ganar tiempo con bash


Editando la l nea de comandos

A veces, escribe un comando largo a bash y, antes de pulsar Intro , se da cuenta de que ha cometido un error al escribirlo. Se puede simplemente borrar todo y volver a teclear correctamente, pero es demasiado esfuerzo! En cambio, se pueden usar las echas para moverse, borrar el/los carcter/es a incorrecto/s, y escribir la informacin correctamente. o Hay muchas teclas especiales que ayudan a editar la l nea de comandos, muchas de ellas similares a los comandos usados en GNU Emacs. Por ejemplo, C-t intercambia dos carcteres adyacentes 1 . a Se pueden encontrar muchos de los comandos en el cap tulo sobre Emacs, Cap tulo 8.

6.2.2

Completamiento de comandos y nombres de chero

Otra peculiaridad de bash es la ejecucin automtica de las l o a neas de comando. Por ejemplo, veamos el siguiente ejemplo de un comando cp t pico:
/home/larry$ ls -F esto-es-un-fichero-largo /home/larry$ cp esto-es-un-fichero-largo corto /home/larry$ ls -F corto esto-es-un-fichero-largo /home/larry$

Es una gran molestia tener que teclear cada letra de esto-es-un-chero-largo cada vez que se quiere acceder a l, sucede lo mismo si queremos crear esto-es-un-chero-largo copiando en e l /etc/passwd2 . Ahora, aprenderemos a escribir el anterior comando cp ms rpidamente y con e a a menos posibilidad de error. En vez de teclear el nombre del chero entero, se escribe cp es, se pulsa y suelta la tecla Tab . Por arte de magia, el resto del nombre del chero aparece en la l nea de comandos, y se puede escribir corto. Desgraciadamente, bash no pude leer los pensamientos, por lo que se debe teclear corto. Cuando se pulsa Tab , bash mira lo que hay escrito y busca un chero que empiece como eso. Por ejemplo, si tecleo /usr/bin/ema y luego pulso Tab , bash encontrar /usr/bin/emacs ya que es a el unico chero que empieza por /usr/bin/ema en mi sistema. En cambio, si tecleo /usr/bin/ld y pulso Tab , bash me avisar. Eso es porque tres cheros, /usr/bin/ld, /usr/bin/ldd, y a /usr/bin/ld86 empiezan por /usr/bin/ld en mi sistema. Si se intenta un completamiento y bash avisa, se puede pulsar inmediatamente Tab otra vez para conseguir una lista de todos los cheros que coincidan con el patrn. De este modo, si no se o est seguro del nombre exacto del chero, podemos teclear los primeros carcteres del nombre y a a buscarlo en una lista ms pequea de cheros. a n
1 2 cp

C-t signica mantener pulsada la tecla marcada como Ctrl, y apretar la tecla t. Luego soltar ambas. /etc/passwd esto-es-un-fichero-largo

50

Cap tulo 6. Trabajando con Unix

6.3

La entrada estndar y La salida estndar a a

Intentemos abordar un problema simple: conseguir un listado del directorio /usr/bin. Si hacemos ls /usr/bin, algunos de los nombres de los cheros saldrn por arriba de la pantalla. Como se a pueden ver todos los cheros?

6.3.1

Algunos conceptos de Unix

El sistema operativo Unix facilita mucho a los programas el uso del terminal. Cuando un programa escribe algo en la pantalla, est usando algo llamado salida estndar. Salida estndar, en ingls a a a e standard output o stdout, es la manera que tiene el programa de escribirle cosas al usuario. El nombre por el que se indica un programa es entrada estndar (stdin). Es posible que un programa a se comunique con el usuario sin usar la entrada o salida estndar, pero la mayor de los comandos a a que se tratan en este libro usan stdin y stdout. Por ejemplo, el comando ls imprime una lista de los directorios en la salida estndar, que est a a normalmente conectada al terminal. Un comando interactivo, como el shell, bash, lee los comandos de la entrada estndar. a Un programa tambin puede escribir en el error estndar, ya que es muy fcil hacer que la e a a salida estndar apunte a cualquier lugar aparte del terminal. El error estndar (stderr) est casi a a a siempre conectado al terminal para que alguna persona pueda leer el mensaje. En esta seccin, examinaremos tres modos de enredarse con la entrada y salida estndar: redio a reccionar la salida, redireccionar la entrada, y las tuber as.

6.3.2

Redireccionar la salida

Un aspecto muy importante de Unix es la posibilidad de redireccionar la salida. Esto permite que, en vez de ver los resultados de un comando, los salvemos en un chero o los enviemos directamente a una impresora. Por ejemplo, para redireccionar la salida del comando ls /usr/bin, se coloca un signo > al nal de la l nea, y se indica el chero donde dejar la salida:
/home/larry$ ls /home/larry$ ls -F /usr/bin > listado /home/larry$ ls listado /home/larry$

Como se puede ver, en vez de escribir los nombres de todos los cheros, el comando crea un chero totalmente nuevo en el directorio actual. Echemos un vistazo a este chero usando el comando cat. Si se recuerda, cat era un comando bastante intil que copiaba lo que se escrib (entrada estndar) u a a al terminal (salida estndar). cat tambin imprime un chero en la salida estndar si se indica el a e a chero como parmetro: a
/home/larry$ cat listado

6.3. La entrada estndar y La salida estndar a a

51

.. /home/larry$

La salida exacta del comando ls /usr/bin aparece en el contenido de listado. Por ahora todo bien, sin embargo no resuelve el problema original.3 A pesar de todo, cat hace algunas cosas interesantes cuando se redirecciona su salida. Qu hace e el comando cat listado > fichero? Normalmente, el > fichero dice coge toda la salida del comando y ponla en chero. La salida del comando cat listado es el chero listado. As hemos inventado un nuevo (y no tan eciente) mtodo de copiar cheros. e Qu ocurre con el comando cat > zorro? cat lee cada l e inea escrita en el terminal (entrada estndar) y la imprime de vuelta (salida estndar) hasta que lee Ctrl-d . En este caso, la salida a a estndar se ha redireccionado al chero zorro. Ahora cat sirve como un editor rudimentario: a /home/larry$ cat > zorro El rapido zorro marron salta sobre el descuidado perro. pulsa Ctrl-d Ahora se ha creado el chero zorro que contiene la frase El rapido zorro marron salta sobre el descuidado perro. Un ultimo uso del verstil comando cat es concatenar cheros. cat imprimir ca a a da chero dado como parmetro, uno despues de otro. El comando cat listado zorro imprimir a a el listado del directorio /usr/bin, y luego la tonta frase. As el comando cat listado zorro > listyzorro , crear un nuevo chero conteniendo los contenidos de listado y zorro. a

6.3.3

Redireccionar la entrada

As como cuando se redirecciona la salida estndar, es posible redireccionar la entrada. En lugar a de que un programa lea su entrada desde el teclado, la leer desde un chero. Como redireccionar a la entrada est relacionado con redireccionar la salida, parece natural que < sea el carcter para a a redireccionar la entrada. Este tambin se usa despus del comando que se desee ejecutar. e e Esto es generalmente util si se tiene un chero de datos y un comando que espera sus datos desde la entrada estndar. Muchos comandos permiten especicar un chero sobre el cual operar, as que a en las actividades diarias el < no se usa tanto como otras tcnicas. e

6.3.4

Las tuber as

Muchos comandos Unix producen gran cantidad de informacin. Por ejemplo, es normal que un o comando como ls /usr/bin produzca ms salida que la que se puede ver en pantalla. Para a que se pueda ver toda la informacin de un comando como ls /usr/bin, es necesario usar otro o 4 comando Unix llamado more . more parar cada vez que la pantalla se llene de informacin. Por a o
3 Para lectores impacientes, el comando que se debe usar es more. Sin embargo, hay que hablar un poco sobre algo ms antes de llegar ah a . 4 Se llama more porque ese es el indicador que originalmente mostraba: --more--. En varias versiones de Linux el comando more es identico a un comando ms avanzado que hace todo lo que more puede hacer y ms an. Como a a u demostracin de que los programadores de ordenadores son malos cmicos, llamaron a este nuevo programa less. o o

52

Cap tulo 6. Trabajando con Unix

ejemplo, more < /etc/rc mostrar el chero /etc/rc como lo har cat /etc/rc, excepto que a a more permite leerlo. more tambin admite el comando more /etc/rc, y esa es la forma normal e de invocarlo. Sin embargo, eso no ayuda al problema de que ls /usr/bin muestre ms informacin de la a o que se pueda ver. more < ls /usr/bin no funciona la redireccin de entrada slo funciona o o con cheros, no comandos! Se podra hacer esto:
/home/larry$ ls /usr/bin > temp-ls /home/larry$ more temp-ls .. /home/larry$ rm temp-ls

Pero, Unix propone una forma ms limpia de hacerlo. Se puede usar el comando ls /usr/bin | more. a El carcter | es una tuber Como una tuber de agua, una tuber Unix controla el ujo. En a a. a a vez de agua, se controla el ujo de informacin. o Los ltros son programas muy utiles para usarse en conjuncin con las tuber Un ltro es un o as. programa que lee la entrada estndar, la cambia de alguna manera, y la saca por la salida estndar. a a more es un ltrolee los datos que coge de la entrada estndar y los muestra por la salida estndar a a pantalla a pantalla, permitiendo leer el chero. more no es un gran ltro porque su salida no se puede enviar a otro programa. Otros ltros incluyen los programas cat, sort, head, y tail. Por ejemplo, si se quiere leer slo o las primeras diez l ineas de la salida de ls, se puede usar ls /usr/bin | head.

6.4
6.4.1

Multitarea
Usando el control de trabajos

Control de trabajos se reere a la habilidad de poner procesos (esencialmente, otra palabra para programas) en background (segundo plano) y ponerlos de vuelta en foreground (primer plano). Esto es como decir, que se quiere ser capaz de ejecutar algo mientras se hacen otras cosas, pero que estn ah otra vez cuando se les quiera decir algo o pararlos. En Unix, la principal herramienta e para el control de procesos es el shellseguir la pista de los procesos por usted, si se aprende como a hablar su lenguaje. Las dos palabras ms importantes en ese lenguaje son fg, para primer plano, y bg, para segundo a plano. Para entender como funcionan, use el comando yes en el indicador del sistema.
/home/larry$ yes

Esto produce el maravilloso efecto de desplazar una larga columna de yes por la parte izquierda de la pantalla, tan rpido que no se pueden seguir5 . Para pararlo, se podr pulsar Ctrl-c y matarlo, a a
5 Hay buenas razones para que este extra o comando exista. Ciertos comandos esperan una conrmacin un si n o ([y]es en ingls) a una pregunta. El comando yes permite al programador automatizar la respuesta a esas preguntas. e

6.4. Multitarea

53

pero esta vez Ud. oprimir Ctrl-z . Parece haberse detenido, pero habr un mensaje antes del a a indicador de sistema, ms o menos parecido a este: a
[1]+ Stopped yes

Signica que el trabajo yes se ha suspendido en el segundo plano. Se puede hacer que siga ejecutndose tecleando fg en el indicador de sistema, que lo pondr en primer plano otra vez. Si se a a desea, se pueden hacer otras cosas antes, mientras est suspendido. Pruebe unos cuantos ls o algo a antes de ponerlo en primer plano nuevamente. Una vez que ha vuelto al primer plano, las yes empezarn a salir otra vez, tan rpido como antes. a a No hay que preocuparse de que si mientras ha estado suspendido ha almacenado ms yes para a enviarlas a la pantalla: cuando un trabajo se suspende, el programa entero no se ejecuta hasta que se lo vuelva de vuelta a la vida. (Ahora pulse Ctrl-c para matarlo de veras). Pongamos aparte el mensaje que obtuvimos del shell:
[1]+ Stopped yes

El nmero entre corchetes es el n mero de trabajo de este proceso, y se usar cuando se u u a necesite referenciarlo espec camente. (Naturalmente, desde el momento que tengamos en ejecucin o mltiples trabajos, se necesita un modo de acceder a cada uno). El + siguiente indica que se es el u e trabajo actual esto es, el proceso ms reciente que se ha movido del primer plano al segundo. a Si se tecleara fg, se pondr el trabajo con el + en primer plano otra vez. (Ms sobre esto a a despus, cuando se discuta la ejecucin de mltiples trabajos a la vez). La palabra Stopped signica e o u que el trabajo est parado. El trabajo no est muerto, pero actualmente no se ejecuta. Linux a a lo ha guardado en un estado especial de suspendido, listo para saltar a la accin cuando alguien lo o solicite. Finalmente, el yes es el nombre del trabajo que se ha detenido. Antes de seguir adelante, matemos este trabajo y lo arrancamos otra vez de forma diferente. El comando se llama kill y se usa del siguiente modo:
/home/larry$ kill %1 [1]+ Stopped /home/larry$

yes

Ese mensaje sobre el proceso que indica parado otra vez induce a error. Para saber si an est u a vivo (eso es, tanto en ejecucin como congelado en un estado suspendido), teclee jobs: o
/home/larry$ jobs [1]+ Terminated /home/larry$

yes

Ahora ya lo sabe: el trabajo ha terminado! (Es posible que el comando jobs no muestre nada, lo que simplemente signica que no hay trabajos ejecutndose en segundo plano. Si se acaba de a matar un trabajo, y al teclear jobs no muestra nada, se tiene la seguridad de que el comando kill se ha ejecutado correctamente. Normalmente indicar que el trabajo ha terminado.) a Ahora, ejecute yes de nuevo, de esta forma:

54

Cap tulo 6. Trabajando con Unix

/home/larry$ yes > /dev/null

Si lee la seccin sobre la redireccin de entrada y salida, sabr que se est enviando la salida de o o a a yes a un chero especial llamado /dev/null. /dev/null es un agujero negro que come cualquier salida que se le env (se puede imaginar ese torrente de yes saliendo por detrs del ordenador y e a perforando un agujero en la pared, si eso le hace feliz). Despues de teclear esto, no se recuperar el indicador de sistema, pero tampoco saldr esa a a columna de yes. Sin embargo la salida se est enviando a /dev/null, el trabajo an se ejecuta en a u a primer plano. Como siempre, se puede suspender pulsando Ctrl-z . Hgalo ahora para volver al indicador del sistema.
/home/larry$ yes > /dev/null ["yes" se ejecuta, y solamente se ha pulsado Ctrl-z] [1]+ Stopped yes >/dev/null /home/larry$

Hmm. . . hay alguna forma de ponerlo en ejecucin en segundo plano, mientras deja el indicador o del sistema para trabajar de forma interactiva? El comando para hacer eso es bg:
/home/larry$ bg [1]+ yes >/dev/null /home/larry$

&

Ahora, deber tener conanza en m sobre esto: despus de teclear bg, el trabajo yes > /dev/null a e habr continuado con su ejecucin otra vez, pero esta vez en segundo plano. De hecho, si hace ala o guna cosa en el prompt, como ls u otros, se dar cuenta que su mquina se ha ralentizado un poco a a (generar y descargar continuamente una cadena preparada de yes lleva algo de tiempo, al n y al cabo!) Aparte de esto, no hay ningn otro efecto. Se puede hacer lo que se desee en el indicador u del sistema, y yes continuar felizmente enviando su salida al agujero negro. a Ahora hay dos formas diferentes de matarlo: con el comando kill que ya se explic, o poniendo o el trabajo en primer plano de nuevo e interrumpirlo con una interrupcin, Ctrl-c . Probemos la o segunda forma, slo para entender la relacin entre fg y bg un poco mejor; o o
/home/larry$ fg yes >/dev/null [ahora esta en primer plano. /home/larry$ Imagine que pulso Ctrl-c para terminarlo]

Bueno, se acab. Ahora, ejecute unos cuantos trabajos simultneamente, como estos: o a
/home/larry$ yes > /dev/null & [1] 1024 /home/larry$ yes | sort > /dev/null & [2] 1026

6.4. Multitarea

55

/home/larry$ yes | uniq > /dev/null [y aqui, pulse Ctrl-z para suspenderlo, por favor] [3]+ Stopped /home/larry$ yes | uniq >/dev/null

La primera cosa que le debe llamar la atencin de estos comandos es la terminacin & al nal o o de los dos primeros. Poner un & despus del comando indica al shell que los ejecute en segundo e plano desde el principio. (Es una forma de evitarse tener que ejecutar el programa, pulsar Ctrl-z , y luego teclear bg.) As estos dos comandos han empezado a ejecutarse en segundo plano. El , tercero est suspendido e inactivo en este momento. Se puede dar cuenta de que la mquina se ha a a vuelto ms lenta, ya que los que se estn ejecutando requieren un poco de tiempo de CPU. a a Cada uno indica su nmero de trabajo. Los dos primeros tambin muestran sus n meros de u e u identicacin de proceso, o PID, despues del nmero de trabajo. Los PIDs normalmente no son o u algo que se necesite conocer, pero a veces viene bien. Matemos el segundo, ya que creo que est ralentizando su mquina. Se puede teclear kill %2, a a pero eso ser demasiado fcil. Por el contrario, haga esto: a a
/home/larry$ fg %2 yes | sort >/dev/null [pulse Ctrl-c para matarlo] /home/larry$

Como esto demuestra, fg toma parmetros empezando con %. De hecho, se podr teclear slo a a o esto:
/home/larry$ %2 yes | sort >/dev/null [pulse Ctrl-c para matarlo] /home/larry$

Esto funciona por que el shell automticamente interpreta un nmero de trabajo como una a u peticin para poner ese trabajo en primer plano. Se puede indicar los nmeros de trabajo con otros o u nmeros precedidos por un %. Ahora teclee jobs para ver cules trabajos quedan en ejecucin: u a o
/home/larry$ jobs [1]- Running [3]+ Stopped /home/larry$

yes >/dev/null & yes | uniq >/dev/null

El - indica que ese trabajo nmero 1 es segundo en la lista para ser puesto en el primer plano, u si slo se teclea fg sin dar parmetros. El + indica que el trabajo especicado es el primero en o a la listaun fg sin parmetros pondr al trabajo nmero 3 en el primer plano. Sin embargo, se a a u puede acceder a l llamndolo, si se desea, mediante: e a

56

Cap tulo 6. Trabajando con Unix

/home/larry$ fg %1 yes >/dev/null [ahora pulse Ctrl-z para suspenderlo] [1]+ Stopped /home/larry$ yes >/dev/null

Al cambiar al trabajo nmero 1 y luego suspenderlo han cambiado las proridades de todos los u trabajos de usuario. Esto se puede ver con el comando jobs:
/home/larry$ jobs [1]+ Stopped [3]- Stopped /home/larry$

yes >/dev/null yes | uniq >/dev/null

Ahora los dos estn parados (porque los dos se han suspendido con Ctrl-z ), y el nmero 1 es a u el siguiente en la lista a entrar en el primer plano por defecto. Esto es as porque se le puso en el primer plano manualmente, y luego fue suspendido. El + siempre se reere al trabajo ms reciente a que ha sido suspendido del primer plano. Se puede continuar con su ejecucin otra vez: o
/home/larry$ bg [1]+ yes >/dev/null /home/larry$ jobs [1]- Running [3]+ Stopped /home/larry$

& yes >/dev/null yes | uniq >/dev/null

F jese que ahora est en ejecucin, y el otro trabajo se ha movido en la lista y tiene el +. Ahora a o matmoslos para que el sistema no est permanentemente ralentizado por procesos que no hacen e e nada.
/home/larry$ kill %1 %3 [3] Terminated /home/larry$ jobs [1]+ Terminated /home/larry$

yes | uniq >/dev/null yes >/dev/null

Aparecern varios mensajes sobre la terminacin de los trabajosnada muere tranquilamente, a o al parecer. La gura 6.1 de la pgina 59 muestra un breve resumen de lo que se debe saber acerca a del control de trabajos.

6.4.2

Teor del control de trabajos a

Es importante entender que el control de procesos lo hace el shell. No hay ningn programa en el u 6 sistema llamado fg; por eso, fg, bg, &, jobs, y kill son internos al shell . (A veces kill es un programa independiente; en el shell bash usado por Linux pertenece al shell). Esto es una forma
6 N.

del T.: En el original pone shell-builtins, eso es que se compilan dentro del shell.

6.5. Consolas virtuales: como estar en varios lugares a la vez

57

lgica de hacerlo: ya que cada usuario quiere su propio espacio de control de trabajos, y cada usuario o ya tiene su propio shell, es ms fcil que el shell siga la pista de los trabajos usuario. Por otro lado, a a cada nmero de trabajo de usuario slo tiene signicado para ese usuario: mi trabajo nmero [1] y u o u su trabajo nmero [1] son probablemente dos procesos totalmente diferentes. De hecho, si se est u a conectado ms de una vez, cada uno de los shells tendr datos unicos sobre el control de trabajos, a a as como tambin un usuario puede tener dos trabajos diferentes con el mismo nmero ejecutndose i e u a en dos shells diferentes. La manera segura de referenciarlos es usar el nmero IDenticador de Proceso (PID). Estos u nmeros abarcan todo el sistema cada proceso tiene su propio (y unico) nmero. Dos usuarios u u diferentes pueden referenciar un proceso por su PID y saber que estn hablando sobre el mismo a proceso (asumiendo que estn conectados en la misma mquina!) a a Echmosle un vistazo a un comando ms para entender que son los PIDs. El comando ps lista e a todos los procesos en ejecucin, incluyendo el shell. Prubelo. Tiene tambin unas cuantas opciones, o e e de las cuales las ms importantes (para mucha gente) son a, u, y x. La opcin a lista los a o procesos pertenecientes a algn usuario, no slo los suyos propios. La x lista los procesos que no u o tienen un terminal asociado a ellos7 . Finalmente, la u da informacin adicional sobre los procesos o que es frecuentemente util. Para hacerse una idea de lo que realmente est haciendo el sistema, se ponen todos juntos: a ps -aux. Se pueden ver los procesos que usan ms memoria mirando la columna %MEM, y ms a a CPU mirando a la columna %CPU. (La columna TIME lista la cantidad total de tiempo de CPU usado.) Otra nota rpida sobre los PIDs. kill, aparte de tomar opciones de la forma %n otrabajo, toma a opciones de los PIDs en crudo. Esto es, si pone un yes > /dev/null en segundo plano, se ejecuta ps, y se busca el yes. Luego se teclea kill PID8 . Si empieza a programar en C con su sistema Linux, pronto aprender que el control de trabajos del a shell es slo una versin interactiva de las llamadas a las funciones fork y execl. Esto es demasiado o o complejo para explicarlo aqu pero ser util recordarlo despus cuando se est programando y se , a e e quieran ejecutar mltiples procesos desde un simple programa. u

6.5

Consolas virtuales: como estar en varios lugares a la vez

Linux soporta consolas virtuales. Son una manera de hacer que su simple mquina aparezca a como mltiples terminales, todos conectados al mismo ncleo Linux. Por fortuna, usar las consolas u u virtuales es una de las cosas ms simples en Linux: hay hot keys9 para cambiar entre las consolas a rpidamente. Para probarlo, hay que conectarse al sistema, pulsar la tecla Alt izquierda, y pulsar a
slo tiene sentido para ciertos programas que no tienen que hablar con el usuario a travs del teclado. o e general, es ms fcil matar el nmero del trabajo en vez de usar PIDs. a a u 9 N.T.: No he creido apropiado traducir este trmino, ya que muchos usuarios saben a lo que se reere. De todas e formas para el que no lo sepa, esto es, una simple combinacin de teclas que hace un cierto trabajo. o
8 En 7 Esto

58

Cap tulo 6. Trabajando con Unix

F2 (esto es, la tecla de funcin nmero 2)10 o u

11

Se encontrar con otro indicador para conectarse. No se alarme: ahora est en la consola virtual a a (VC) nmero 2. Conctese y haga algunas cosas unos cuantos ls o lo que sea para conrmar u e que es un shell real. Ahora puede volver a la VC nmero 1, pulsando el Alt izquierdo y F1 . O u se puede mover a una tercera VC, de la forma obvia ( Alt-F3 ). Generalmente los sistemas Linux vienen con cuatro VC activadas por defecto. Esto se puede incrementar a ocho; estos temas se cubrirn en The Linux System Administrators Guide. Ello a implica editar uno o dos cheros en el directorio /etc. Sin embargo, cuatro deben ser sucientes para la mayor de las personas. a Una vez las haya usado, las VC probablemente se convertirn en una herramienta indispensable a para tener varias cosas ejecutndose a la vez. Por ejemplo, yo normalmente ejecuto Emacs en la a VC 1 (y hago la mayor parte de mi trabajo ah mientras tengo un programa de comunicaciones ), en la VC 3 (as puede coger o dejar cheros via modem mientras trabajo, o ejecutar programas en mquinas remotas), y mantengo un shell en la VC 2 slo en caso de que tenga que ejecutar algo sin a o involucrar a la VC 1.

10 Hay que asegurarse de que esto se hace desde consolas en modo texto: si se est ejecutando X Window u otra a aplicacin grca, probablemente no funcionar, sin embargo corre el rumor de que pronto se podr cambiar entre las o a a a consolas virtuales en X Window de Linux. 11 N.

del T.: De hecho al momento de la traduccin, la combinacin es Ctrl-Alt-tecla-de-funcin . o o o

6.5. Consolas virtuales: como estar en varios lugares a la vez

59

Figura 6.1 Resumen de comandos y teclas usados para el control de trabajos. fg %notrabajo Este es un comando del shell que devuelve un trabajo al primer plano. Para saber cul es ste por defecto, se teclea jobs y se busca el que tiene el +. a e Parmetros: nmero de trabajo opcional. El trabajo por defecto se identica con a u el +. & Cuando se aade un & al nal de la l n nea de comandos, indica al comando que se ejecute en segundo plano automticamente. Este trabajo est entonces sujeto a a a todos los mtodos usuales para el control de trabajos aqu detallados. e

bg %notrabajo Este es un comando del shell que manda a un trabajo suspendido ejecutarse en segundo plano. Para saber cual es ste por defecto, se teclea jobs y se busca el e que tiene el +. Parmetros: nmero de trabajo opcional. El trabajo por defecto se identica con a u el +. kill %notrabajo PID Este es un comando del shell que obliga a un trabajo en segundo plano, ya sea suspendido o en ejecucin, a terminar. Se debe siempre especicar el nmero de o u trabajo o PID, y si se estn usando nmeros de trabajo, no hay que olvidar poner a u el %. Parmetros: El nmero de trabajo (a continuacin del %) o el PID (no es necesario a u o el %). Se puede especicar ms de un proceso o trabajo en una l a nea. jobs Este comando del shell lista informacin sobre los trabajos que estn en ese momento o a en ejecucin o suspendidos. A veces tambin dice cules son los que acaban de salir o e a o han terminado. Este es el carcter genrico de interrupcin. Normalmente, si se pulsa mientras un a e o programa se est ejecutando en primer plano, matar al programa (puede que haya a a que hacerlo varias veces). Sin embargo, no todos los programas respondern a este a mtodo de terminacin. e o Esta combinacin de teclas normalmente suspende un programa, puede que algunos o programas lo ignoren. Una vez suspendido, el trabajo se puede reiniciar en el segundo plano o se puede matar.

Ctrl-c

Ctrl-z

60

Cap tulo 6. Trabajando con Unix

Cap tulo 7

Pequeos programas potentes n


better !pout !cry better watchout lpr why santa claus <north pole >town cat /etc/passwd >list ncheck list ncheck list cat list | grep naughty >nogiftlist cat list | grep nice >giftlist santa claus <north pole > town who who who for } | grep sleeping | grep awake | egrep bad|good (goodness sake) { be good

7.1

El poder de Unix

El poder de Unix1 se esconde en pequeos comandos que no parecen ser muy utiles cuando se utilizan n por separado, pero combinados con otros (directa o indirectamente) proporcionan un entorno mucho ms potente y exible que la mayor de los otros sistemas operativos. Los comandos de los que a a hablaremos en este cap tulo son entre otros: sort, grep, more, cat, wc, spell, diff, head, y tail. Veremos lo que cada una de las utilidades hace por separado y luego daremos algunos ejemplos de como utilizarlos conjuntamente2 .
del T.: El cookie de apertura de este cap tulo es la traduccin a comandos Unix de una cancin de navidad: o o Santa Claus is coming to town (escrita por H. Gillespie, J. F. Coots) 2 Ntese que los res menes de los comandos en este cap o u tulo no son extensos. Para conocer cada una de los opciones,
1 N.

61

62

Cap tulo 7. Peque os programas potentes n

7.2

Trabajando con cheros

Junto a comandos como cd, mv, y rm que ya se vieron en el Cap tulo 4, hay otros comandos que trabajan con cheros pero no con los datos contenidos en ellos. Estos son touch, chmod, du, y df. Ninguno de ellos se preocupa por lo que contiene el cherosimplemente modican algunas de las informaciones que Unix guarda acerca del chero. Estos comandos manipulan: Los registros de tiempo. Todo chero tiene tres fechas asociadas a l. 3 Las tres fechas son las e siguientes: creacin del chero, ultima modicacin (cuando se produjo el ultimo cambio en o o el chero), y ultimo acceso (cuando se produjo la ultima lectura del chero). El dueo. Cada chero en Unix pertenece a un unico propietario. n El grupo. Cada chero tiene tambin asociados un grupo de usuarios. El grupo ms usual e a para los cheros de usuario se denomina users, que es al cual, por lo general, pertenecen todos los usuarios con cuenta en el sistema. Los permisos. Cada chero tiene ciertos permisos (tambin llamados privilegios) asociados e a l, que indican a Unix quin puede acceder a ese chero, cambiarlo o en el caso de ser un e e programa, ejecutarlo. Cada uno de estos permisos puede ser establecido por separado para el dueo, el grupo, y el resto de usuarios. n

touch chero1 chero2 . . . cheroN


touch actualiza los registros de fecha y hora con la fecha y hora actual de los cheros indicados en la linea de comandos. Si el chero no existe, touch lo crear. Tambin es posible especicar la a e fecha y hora a registrar en la informacin de los cherosconsulte la pgina del manual (comando o a man) para ms informacin sobre touch. a o

chmod [-Rfv] modo chero1 chero2 . . . cheroN


El comando que se utiliza para modicar los permisos de un chero es el chmod4. Antes de meternos en como utilizar este comando, veamos primero que permisos hay en Unix. Cada chero tiene asociados un grupo de permisos. Estos permisos le indican al sistema operativo quien puede leer, escribir o ejecutar como programa el chero. (A continuacin, se explica como puede un usuario o hacer estas cosas. Un programa ejecutado por un usuario puede hacer las mismas cosas que las que
vea la pgina del manual correspondiente con el comando man. a 3 Los antiguos sistemas de cheros de Linux slo almacenaban una fecha, ya que derivaban de Minix. Si se utiliza o alguno de estos sistemas de cheros, parte de la informacin no estar disponibley las operaciones que se realicen o a sobre ellas sern intiles. a u 4 N. del T.: Abreviatura de change mode, cambiar modo.

7.2. Trabajando con cheros

63

le estn permitidas al propio usuario; esto puede suponer un problema de seguridad, si se desconoce e lo que hace cada programa en particular.) Unix reconoce tres tipos diferentes de individuos: primero, el propietario del chero (y la persona que puede utilizar el comando chmod sobre ese chero). Segundo, el grupo. El grupo de la mayor a de los cheros normales de un usuario del sistema ser users. (Para ver el grupo de un chero a en particular, utilizar ls -l chero.) Por ultimo, est el resto que no son ni propietarios ni a pertenecen al grupo, denominados otros5 De esta forma, por ejemplo, un chero puede tener permisos de lectura y escritura para el propietario, permiso de lectura para el grupo y ningn tipo de permisos para otros. O por alguna u razn, un chero puede tener permisos de lectura/escritura para el grupo y otros, pero ningn o u privilegio para el propietario! Veamos algunos ejemplos de como cambiar permisos utilizando chmod. Primero creamos un chero utilizando cat, emacs, o cualquier otro programa. Por defecto, son posibles las operaciones de lectura y de escritura sobre el chero. (Los permisos dados a otros usuarios dependen de como estn establecidas las variables del sistema y de la cuenta del usuario). Podemos asegurarnos de que e tenemos permiso de lectura utilizando el comando cat, a continuacin eliminamos el privilegio de o 6 lectura para nosotros mismos utilizando chmod u-r chero . Ahora si intentamos leer el chero, obtendremos el mensaje de error Permission denied. Devolvemos el privilegio de lectura utilizando chmod u+r chero. Los permisos de directorio utilizan las tres mismas ideas anteriores: leer, escribir, y ejecutar, pero con ligeras variaciones. El privilegio de lectura permite al usuario (o al grupo, o a otros) leer el directoriolistar los nombres de los cheros. El permiso de escritura permite aadir o borrar n cheros. El permiso de ejecucin permite al usuario acceder a cheros en el directorio o a cualquier o subdirectorio. (Si un usuario no tiene permisos de ejecucin para un directorio, entonces no puede o siquiera hacer un cd al mismo). Para utilizar chmod, reemplazar el modo por el usuario, grupo, otro o todos (all) y la operacin a o realizar. (Es decir, utilizar un signo ms + para aadir privilegios y un menos para quitarlos. a n Un signo igual = indica los mismos permisos para los usuarios involucrados en el modo). Los permisos posibles son lectura (read), escritura (write) , y ejecucin (execute). o La opcin -R al utilizar chmod cambiar los permisos de un directorio, de todos los cheros o a contenidos en l, y de forma recursiva los permisos del arbol de subdirectorios a partir de l. La e e opcin -f fuerza a que chmod intente cambiar los permisos incluso si el usuario no es el dueo del o n chero. (Si se utiliza el parmetro f al ejecutar chmod no se mostrar un mensaje de error en caso a a de que no pueda cambiar los permisos del chero.), por ultimo la opcin v hace que la ejecucin o o del chmod informe de todo lo que hace.

5 N. 6 N.

del T.: En ingles: owner (con u de user), group and others respectivamente. del T.: El parmetro u-r indica user minus read, es decir: usuario menos lectura. a

64

Cap tulo 7. Peque os programas potentes n

7.3

Estad sticas del sistema

Los comandos de esta seccin son de utilidad a la hora de mostrar las estad o sticas del sistema operativo, o de una parte de l. e

du [-abs] [trayectoria1 trayectoria2 . . . trayectoriaN]


El comando du7 contabilizar el espacio de disco ocupado por un subdirectorio y todos sus a subdirectorios. El uso de este comando sin utilizar parmetros devolver una lista de cuanto disco a a consume cada subdirectorio del directorio actual, y al nal del informe, cuanto disco utiliza el directorio (y todos sus subdirectorios). Si se le pasa uno o ms parmetros, devolver la cantidad a a a de espacio utilizado por esos cheros o directorios en lugar de la del directorio actual. La opcin a mostrar adems del espacio de los directorios, el de los cheros. Utilizando o a a b como opcin presentar el total en bytes, en lugar de kilobytes (1 kilobyte = 1024 caracteres) 8. o a Finalmente el parmetro s informar slo acerca de los directorios explic en la linea de comando a a o tos y no de sus subdirectorios.

df
El comando df9 resume la cantidad de espacio utilizada en el disco. Para cada sistema de cheros (recuerde que sistemas de cheros diferentes son o bien unidades f sicas o particiones diferentes) muestra el espacio total de disco, la cantidad utilizada, la cantidad disponible y la capacidad total del sistema de cheros que se utiliza. Un caso extrao que puede darse es la posibilidad de tener una capacidad superior al 100%, o n que la cantidad utilizada ms la disponible no sea igual a la total. Esto es debido a que Unix reserva a parte del espacio de cada sistema de cheros para el directorio raz. De esta forma aunque algn u usuario accidentalmente sature el disco, el sistema todav tendr un poco de espacio para seguir a a operativo. Este comando no ofrece opciones que puedan ser de utilidad al usuario.

uptime
El comando uptime10 informa sobre el tiempo en el que el sistema ha estado activo, es decir el tiempo transcurrido desde que Unix arranc por ultima vez. o Este comando tambin devuelve la hora actual y el promedio de carga que soporta el sistema. El e promedio de carga es el nmero medio de procesos esperando a ejecutar en un determinado periodo u
del T.: Abreviatura de disk usage, utilizacin del disco. o byte es el equivalente de una letra en un documento de texto. 9 N. del T.: Abreviatura de disk filling, espacio disponible en el disco. 10 N. del T.: Tiempo en estado activo.
8 Un 7 N.

7.4. Qu hay en un chero? e

65

de tiempo. uptime muestra el promedio de carga del ultimo minuto y de los cinco y diez ultimos minutos. Si este promedio de carga se aproxima a cero indica que el sistema ha estado relativamente desocupado; por el contrario si el promedio es cercano al uno indica que el sistema ha estado casi completamente utilizado pero en ningn momento sobrecargado. Los promedios de carga altos son u el resultado de la ejecucin simultnea de varios programas. o a Extraordinariamente, uptime es uno de los pocos comandos de Unix que no tienen opciones!

who
El comando who muestra los usuarios activos en ese momento en el sistema y cuando han iniciado su respectiva sesin. Si le damos los parmetros am i (es decir : who am i), nos devuelve la o a 11 informacin relativa a nosotros mismos. o

w [-f] [nombre usuario]


El programa w devuelve los usuarios actuales del sistema y que estn haciendo. (Bsicamente a a combina la funcionalidad de uptime y who. La cabecera del informe que presenta w es exactamente la misma que uptime, siendo la informacin de cada una de las l o neas la siguiente: el nombre del usuario, hora de inicio de la sesin (y cuanto tiempo ha estado ocioso). JCPU es la cantidad total de o tiempo de CPU utilizada por ese usuario, mientras que PCPU es la cantidad total de tiempo utilizada por sus tareas actuales. Si al comando se le pasa la opcin f, mostrar los sistemas remotos desde los que los usuarios o a acceden, si los hay. Puede indicarse un nombre de usuario como parmetro para mostrar slo a o informacin relativa a l. o e

7.4

Qu hay en un chero? e

Principalmente hay dos comandos en Unix para listar cheros, cat y more. Sobre ambos ya se habl o en el Cap tulo 6.

cat [-nA] [chero1 chero2 . . . cheroN]


cat no es un comando de uso amigableno espera a que el usuario acabe de leer el chero, y se utiliza generalmente en contextos de tuber Aunque pueden utilizarse algunas opciones muy utiles as. del comando, por ejemplo, n numera todas las l neas del chero, y A mostrar los carcteres de a a control como carcteres normales en lugar de hacer (posiblemente) cosas extraas en la pantalla. a n (Recuerde que para ver las opciones ms curiosas y quiz menos utiles utilice el comando man: a a
11 N.

del T.: literalmente es como preguntar al sistema quin soy yo? e

66

Cap tulo 7. Peque os programas potentes n

man cat.) Si no se especican cheros en la l nea de comandos, cat aceptar la entrada desde a stdin12.

more [-l] [+n mero l u nea] [chero1 chero2 . . . cheroN]


more es ms util, y adems es el comando recomendado para ver cheros de texto ASCII. La a a unica opcin interesante es l, que indica al comando que no se desea interpretar el carcter Ctrl-L o a como carcter de nueva pgina. El comando comenzar en la l a a a nea nmero l u nea especicada. Al ser more un comando interactivo, hemos resumido a continuacin las ordenes ms comunes: o a Barra espaciadora d / Pasar a la siguiente pantalla de texto.

Pasar 11 l neas de pantalla, o aproximadamente la mitad de una pantalla normal: 25 l neas. Busca una expresin regular. La construccin de una expresin regular puede ser muy complio o o cada por lo que es recomendable teclear simplemente el texto a buscar. Por ejemplo, /sapo Intro buscar la primera ocurrencia de sapo en el chero a partir de la posicin actual. a o La misma tecla seguida por un Intro buscar la siguiente ocurrencia de la ultima expresin a o buscada. Buscar la prxima aparicin de la expresin regular especicada. a o o o Pasar al siguiente chero, en caso de que se especique ms de un chero en la l a nea de comandos. Pasar al chero anterior.

: n

: p q

Terminar more.

head [-l neas] [chero1 chero2 . . . cheroN]


head mostrar las primeras diez l a neas de los cheros especicados, o las primeras diez l neas de la stdin si no se especica ningn chero en la l u nea de comandos. Cualquier opcin numrica se o e tomar como el nmero de l a u neas a mostrar, por ejemplo head -15 rana mostrar las primeras a quince l neas del chero rana.

tail [-l neas] [chero1 chero2 . . . cheroN]


Como head, tail mostrar solo una parte del chero, en este caso el nal del chero, las ultimas a diez l neas del chero, o que provengan de la stdin. tail tambin acepta la opcin de especicar e o el nmero de l u neas, como en el caso anterior.
12 N.

del T.: standard input, entrada estndar, generalmente entrada de datos por teclado. a

7.5. Comandos de edicin o

67

file [chero1 chero2 . . . cheroN]


El comando file intenta identicar que tipo de formato tiene un chero en particular. Debido a que no todos los cheros tienen extensin o otras formas de identicarlos fcilmente, este comando o a realiza algunas comprobaciones rudimentarias para intentar comprender exactamente que contiene el chero. Hay que tener cuidado ya que es bastante posible que file realice una identicacin incorrecta. o

7.5

Comandos de edicin o

Esta seccin trata de los comandos que alteran un chero, realizando sobre el chero operaciones o concretas o mostrando estad sticas del mismo.

grep [-nvwx] [-n mero] expresin [chero1 chero2 . . . cheroN ] u o


Uno de los comandos ms utiles de Unix es el grep13 , utilizado para buscar expresiones en un a chero de texto. La forma ms sencilla de usarlo es: a
/home/larry$ cat animales Los animales son unas criaturas muy interesantes. Uno de mis animales favoritos es el tigre, una temible bestia con grandes colmillos. Tambien me gusta el leon--- realmente increible! /home/larry$ grep igre animales el tigre, una temible bestia con grandes colmillos. /home/larry$

Una de los problemas de esta forma de usarlo, es que simplemente muestra las l neas que contienen la palabra a buscar, no aporta informacin acerca de donde buscar en el chero, es decir el nmero o u de l nea. Pero dependiendo de lo que se pretenda puede ser hasta ms que suciente, por ejemplo si a se buscan los errores de la salida de un programa, se puede probar a.out | grep error, donde a.out es el nombre del programa. Cuando es necesario conocer donde estn las palabras a buscar, es decir el nmero de l a u nea, hay que utilizar la opcin n. Si lo que se desea es ver todas las l o neas donde no se encuentra la expresin especicada, entonces utilice la opcin v. o o Otra posibilidad que ofrece el grep es la bsqueda de partes de una palabra, como en el ejemplo u anterior que igre se equipar con tigre. Para buscar slo palabras completas hay que pasarle o o al grep la opcin w, y para l o neas completas la opcin es x. o Si no se especica ningn chero (por ejemplo: grep igre), grep examinar la stdin. u a
13 N.

del T.: Abreviatura de generalized regular expression parser, analizador general de expresiones regulares.

68

Cap tulo 7. Peque os programas potentes n

wc [-clw] [chero1 chero2 . . . cheroN ]


El comando wc14 simplemente cuenta el nmero de palabras, l u neas y carcteres en los cheros a pasados como parmetros. Si no se especica ningn chero, operar sobre la stdin. a u a Los tres parmetros, clw, indican el elemento a contar: carcteres, l a a neas y w para palabras. Por ejemplo, wc -cw contar el nmero de carcteres y palabras, pero no el nmero de l a u a u neas. Si no se indica ningn parmetro wc cuenta todo: palabras, l u a neas y carcteres. a Se puede utilizar wc para saber el nmero de cheros de un directorio: ls | wc -w. Si se u desea saber el nmero de cheros que acaban en .c, entonces ejecute ls *.c | wc -w. u

spell [chero1 chero2 . . . cheroN]


spell es el corrector ortogrco ms sencillo de Unix generalmente para ingls americano 15 . a a e spell es un ltro, igual que la mayor de los comandos que hemos comentado antes, que toma el a chero de texto ASCII y devuelve todas las palabras que considera errneas. spell opera sobre los o cheros especicados, y si no se incluye ninguno, entonces utiliza la stdin. Tambin es posible que est disponible en su mquina ispell, que es un corrector ortogrco e e a a un poco ms sosticado. ispell ofrece diversos vocabularios y un men ms manejable en caso de a u a ejecutarlo con un chero en la l nea de comandos. Tambin puede ejecutarse como un ltro si no se e especica ningn chero. u La forma de trabajar con ispell es bastante obvia, pero si necesita ms ayuda consulte la pgina a a del manual correspondiente: man ispell.

cmp chero1 [chero2]


cmp compara dos cheros. El primero debe ser obligatoriamente pasado como parmetro, miena tras que el segundo puede ser pasado como un segundo parmetro o le desde la entrada estndar. a do a cmp es muy sencillo, y simplemente dice donde se diferencian los dos cheros.

diff chero1 chero2


Uno de los comandos estndar ms complejos de Unix es el diff. La versin GNU de diff a a o tiene hasta veinte opciones! en la l nea de comandos. Es una versin mucho ms potente que cmp o a y muestra cuales son las diferencias en lugar de decir simplemente donde est la primera. a Ya que una buena parte de las opciones del diff estn ms alla del alcance de este manual, a a
del T.: Abreviatura de word count, contar palabras. hay versiones del corrector para diversas lenguas europeas, la copia que puede encontrarse en su mquina a Linux es con toda probabilidad para ingls americano. e
15 Aunque 14 N.

7.5. Comandos de edicin o

69

simplemente hablaremos del funcionamiento bsico. Brevemente, diff toma dos parmetros y a a muestra las diferencias entre ellos l nea a l nea. Por ejemplo:
/home/larry$ cat rana Los animales son una criaturas muy interesantes. Uno de mis animales favoritos es el tigre, una temible bestia con grandes colmillos. Tambien me gusta el leon--- realmente increible! /home/larry$ cp rana sapo /home/larry$ diff rana sapo /home/larry$ cat perro Los animales son una criaturas muy nteresantes. Uno de mis animales favoritos es el tigre, una temible bestia con grandes colmillos. Tambien me gusta el leon--- realmente increible! /home/larry$ diff rana perro 1c1,2 < Los animales son una criaturas muy interesantes. Uno de mis animales favoritos es ---> Los animales son una criaturas muy nteresantes. Uno de mis animales favoritos es > 3c4 < Tambien me gusta el leon--- realmente increible! ---> Tambien me gusta el leon--- realmente increible! /home/larry$

Como puede observarse, diff no devuelve nada cuando los dos cheros son iguales. Pero cuando hemos comparado dos cheros diferentes, se muestra una cabecera de seccin, 1c1,2 indicando o que ha comparando la l nea 1 del chero de la izquierda, rana, con las l neas 12 de perro y las diferencias que ha encontrado. Luego ha comparado la l nea 3 de rana con la l nea 4 de perro. Aunque pueda parecer extrao que compare diferentes nmeros de l n u nea, es bastante eciente ya que es posible que pueda haber algn retorno de l u nea de ms en alguno de los cheros. a

gzip [-v#] [chero1 chero2 . . . cheroN] gunzip [-v] [chero1 chero2 . . . cheroN] zcat [chero1 chero2 . . . cheroN]
Estos tres programas se utilizan para comprimir y descomprimir datos. gzip, o GNU Zip, es un programa que lee de los cheros originales y devuelve cheros ms pequeos, borra los cheros a n especicados en la l nea de comandos y los reemplaza con cheros que tienen el mismo nombre pero con .gz aadido a su nombre. n

tr cadena1 cadena2

70

Cap tulo 7. Peque os programas potentes n

El comando de traduccin de caracteres opera sobre la entrada estndarno acepta un nombre o a de chero como parmetro. Reemplaza todas las ocurrencias de cadena1 en la entrada con la cadena2. a En comparacin con llamadas tan sencillas como tr rana sapo, tr puede aceptar comandos ms o a complejos. Por ejemplo, hay una forma rpida de convertir los carcteres en minscula por otros en a a u mayscula : u
/home/larry$ tr {:lower:] [:upper:] Esta es una frase RARA. ESTA ES UNA FRASE RARA.

tr es relativamente complejo y se usa normalmente en pequeos programas shell, como ltro. n

Cap tulo 8

Editando archivos con Emacs


FUNNY SOMETHING OR OTHER

8.1

Qu es Emacs? e

Para obtener algo en una computadora, necesita una forma de introducir texto en los archivos, y una manera de cambiar el texto que ya est en los archivos. Un editor es un programa para este a tipo de tareas. emacs es uno de los editores ms populares, en parte porque es muy fcil para un a a principiante hacer trabajos con l. (El editor de Unix clsico, el vi, se trata en el Apendice A.) e a Para aprender emacs, tiene que encontrar un archivo de texto (letras, nmeros, etc.) cpielo a u o su directorio de usuario 1 (no queremos modicar el archivo original, si ste contiene informacin e o importante), y luego llame a Emacs con el archivo:
/home/larry$ emacs LEAME

(Por supuesto, si decide copiar /etc/rc, /etc/inittab, o cualquier otro archivo, sustituya ese nombre de archivo por LEAME. Por ejemplo, si cp /etc/rc ~/rc, entonces emacs rc.) Llamar a Emacs puede tener efectos diferentes dependiendo en dnde lo haga. Desde una o consola que muestra slo caracteres de texto Emacs se apoderar de toda la consola. Si lo llama o a desde X, Emacs abrir su propia ventana. Asumir que lo est haciendo desde una consola de texto, a e a pero todo sucede de la misma manera en la versin de X, lgicamente simplemente sustituya la o o palabra ventana en los lugares en donde lea pantalla. Adems, recuerde que debe mover el a puntero del ratn a la ventana de Emacs para escribir! o Su pantalla (o ventana, si est usando X) deber parecerse a la Figura 8.1. La mayor parte de la a a pantalla contiene su documento de texto, pero las dos ultimas l neas son especialmente interesantes si est tratando de aprender Emacs. La penltima l a u nea (la que tiene una cadena larga de guiones) se denomina l nea de modo (mode line en ingls). e
1 Por

ejemplo, cp /usr/src/linux/LEAME ./LEAME

71

72

Cap tulo 8. Editando archivos con Emacs

Figura 8.1 Emacs se inici con emacs LEAME o

En mi l nea de modo, ve Top. Deber decir All, y puede haber otras pequeas diferencias. a n (A muchas personas les aparece la hora actual en la l nea de modo). La l nea inmediatamente inferior a la l nea de modo se denomina minibuer, o a veces el rea de eco. Emacs usa el minibuer a para enviar mensajes al usuario, y ocasionalmente cuando es necesario, para leer informacin que o introduce el usuario. De hecho, ahora mismo Emacs le est diciendo Para obtener informacin a o acerca del Proyecto GNU y sus objetivos, teclee C-h C-p. (slo que en ingls). Ignrelo o e o por ahora; no vamos a usar mucho el minibuer por un tiempo. Antes de realizar cualquier cambio en el texto del archivo, necesita aprender cmo movero se. El cursor deber estar al principio del archivo, en la esquina superior-izquierda de la pantaa lla. Para avanzar, presione C-f (reteniendo la tecla Control mientras presiona f, para forward(avanzar)). Avanzar un carcter cada vez, y si retiene ambas teclas, la repeticin automtica a a o a de teclas de su sistema deber surtir efecto en medio segundo aproximadamente. Notar como, a a cuando llega al n de la l nea, el cursor automticamente se mueve a la prxima l a o nea. C-b (para backward(retroceder)) tiene el comportamiento opuesto. Y, ya que estamos en ello, C-n y C-p le llevan a las l neas siguiente y anterior, respectivamente. 2 Usar las teclas de control es comnmente la manera ms rpida de moverse cuando est editando. u a a a El objetivo de Emacs es mantener sus manos sobre las teclas alfa-numricas del teclado, donde se e realiza la mayor del trabajo. Sin embargo, si quiere, las teclas de movimiento debern funcionar a a tambin. e De hecho, cuando usa X, deber ser capaz de ubicar el puntero del ratn y hacer click con a o el botn izquierdo para mover el cursor donde quiera. Sin embargo, esto es muy lentotiene que o mover la mano hasta el ratn! La mayor de la gente que usa Emacs usa principalmente el teclado o a para moverse por el texto.
2 En caso de que a n no lo haya notado, muchos de los comandos de movimiento de emacs consisten en combinar u Control con una unica letra mnemotcnica. e

8.2. Comenzar rpidamente en X a

73

Use C-p y C-b para ir a la esquina superior-izquierda. Ahora mantenga C-b un poco ms. a Deber o un sonido molesto de campana, y ver el mensaje Beginning of buffer (Principio del a r buer) que aparece en el minibuer. En este punto se puede preguntar, Pero qu es un buer? e Cuando Emacs trabaja sobre un archivo, no trabaja realmente sobre el archivo en s En vez de . eso, copia los contenidos del archivo en un area de trabajo especial de Emacs llamada buer, donde puede modicar el contenido. Cuando ha acabado de trabajar, debe decirle a Emacs que guarde los buers en otras palabras, que escriba el contenido de los buers en el archivo correspondiente. Hasta que haga esto, el archivo permanece sin cambiar, y el contenido de los buers existe unicamente dentro de Emacs. Con esto en mente, preprese a insertar su primer carcter en el buer. Hasta ahora, todo lo que a a hemos hecho ha sido no destructivo, este es un gran momento. Puede escoger cualquier carcter a que quiera, pero si quiere hacer esto con estilo, yo sugiero usar una bonita y slida, X mayscula. o u Mientras lo teclea, eche un vistazo al principio de la l nea de modo al pie de la pantalla. Cuando cambia los buer de modo que sus contenidos no sean iguales que los del archivo sobre el disco, Emacs muestra dos asteriscos a principios de la l nea de modo, para hacerle saber que el buer ha sido modicado:
--**- Emacs: algun_archivo.txt (Fundamental)--Top------------------------

Estos dos asteriscos se muestran tan pronto como modica el buer, y permanecen visibles hasta que guarde el buer. Puede guardar los buer muchas veces durante una sesin de edicin el o o comando para hacerlo es simplemente C-x C-s (presione Control y pulse x y s mientras la mantiene apretada, probablemente ya se lo imagin!). Es deliberadamente fcil de escribir, porque o a lo mejor es salvar sus buers al principio y frecuentemente. Ahora voy a enumerar ms comandos, adems de los que ya ha aprendido, y los puede practicar a a del modo que preera. Yo sugiero familiarizarse con ellos antes de proseguir: C-f C-b C-n C-p C-a C-e C-v C-l C-d C-k C-x C-s Retroceso Avanza un carcter. a Retrocede un carcter. a Va a la prxima l o nea. Va a la l nea anterior. Va al comienzo de la l nea. Va al nal de la l nea. Va a la prxima pgina/pantalla de texto. o a Redibuja la pantalla, con la l nea actual en el centro. Borra este carcter (practica este). a Borra el texto desde aqu hasta el n de l nea. Salva el buer en su archivo correspondiente. Borra el carcter anterior (el ultimo que escribiste). a

8.2

Comenzar rpidamente en X a

Si est interesado en editar unos archivos rpidamente, un usuario de X no tiene que ir mucho ms a a a all de los mens en la parte superior de la pantalla: a u

74

Cap tulo 8. Editando archivos con Emacs

Estos mens no estn disponibles en el modo texto. u a Cuando ejecute por primera vez Emacs, habr cuatro mens en la parte superior de la pantalla: a u Buers, File, Edit, y Help. Para usar un men, simplemente mueva el puntero del ratn sobre el u o nombre (como File, haga click y retenga el botn izquierdo). Entonces, mueva el puntero a la accin o o que quiere y libere el botn del ratn. Si cambia de idea, retire el puntero del ratn del men y o o o u libere el botn. o El men Buers enumera los diferentes archivos que han sido editados en esta instancia de Emacs. u El men Files muestra un grupo de comandos para cargar y guardar archivos muchos de ellos se u describirn ms adelante. El men Edit muestra algunos comandos para editar un buer, y el men a a u u Help deber dar la documentacin en l a o nea. Notar que las equivalencias del teclado se enumeran junto a las opciones del men. Puesto que, a u a largo plazo, stas sern ms rpidas, podr quererlas aprender. Tambin, para bien o para mal, e a a a a e la mayor de la funcionalidad de Emacs est unicamente disponible mediante el teclado as que a a puede que le interese leer el resto de este capitulo.

8.3

Editando varios archivos al mismo tiempo

Emacs puede trabajar sobre ms de un de archivo a la vez. De hecho, el unico l a mite sobre cuantos buers puede contener Emacs es la cantidad real de memoria disponible en la mquina. El comando a para traer un nuevo archivo a un buer de Emacs es C-x C-f . Cuando lo teclee, se le pedir un a nombre de archivo en el minibuer:
Find file (Buscar archivo):~/

La sintaxis, aqu es la misma que la usada para especicar archivos desde la l , nea de comandos; las barras representan subdirectorios, ~ es su directorio de usuario. Tambin consigue terminacin e o automtica de nombre de archivo, signica que si ha escrito suciente de un nombre de archivo a en la l nea de comandos para identicar el archivo singularmente, puede simplemente presionar Tab para completarlo (o para ver las terminaciones posibles, si hay ms de una). Espacio tambin tiene a e un papel en la terminacin automtica de nombres de cheros en el minibuer, parecido a Tab , o a pero dejar que experimente para que averige cmo dieren las dos. Una vez que tiene el nombre e u o completo en el minibuer, presione Intro , y Emacs crear un buer mostrando el archivo. En a Emacs, este proceso es conocido como encontrar un archivo. Siga adelante y busque ahora algn u otro archivo de texto sin importancia y trigalo a Emacs (haga esto desde nuestro buer original a algun archivo.txt). Ahora tiene un nuevo buer; Supondr que se llama otro archivo.txt, ya e que no puedo ver su l nea de modo. Su buer original parece haber desaparecido probablemente se pregunta dnde fue. Est o a todav dentro de Emacs, y puede volver a l con C-x b . Cuando teclee esto, ver que en el a e a

8.4. Terminando una sesin de edicin o o

75

minibuer le pide el nombre un buer al que cambiar, y nombra uno por defecto. El buer por defecto lo consigue slo con presionar Intro en la l o nea de comandos, sin escribir un nombre de buer. El buer por defecto al que cambiar, es siempre el ms recientemente usado, para que cuando a a est haciendo mucho trabajo entre dos buers, C-x b tenga por defecto el otro buer (salvndole e de tener que escribir el nombre del buer). Incluso si el buer por defecto es el que quiere, deber a probar a teclear su nombre de todos modos. Note que consigue el mismo tipo de terminacin automtica que obtuvo al buscar un archivo: o a al pulsar Tab completa todo lo que puede del nombre de un buer y as sucesivamente. Cada vez que se le pida algo en el minibuer, es una buena idea ver si Emacs hace terminacin automtica. o a Aprovechando la terminacin automtica cuando se le ofrezca, ahorrar teclear mucho. Emacs o a a comnmente hace la terminacin automtica cuando elige un elemento de alguna lista predenida. u o a Todo lo que ha aprendido para moverse y editar texto en el primer buer se aplica a los nuevos. Siga adelante y cambie algn texto en el nuevo buer, pero no lo guarde (es decir, no teclee C-x C-s ). u Djeme asumir que quiere desechar los cambios sin guardarlos en el archivo. El comando para e esto es C-x k, que mata (kill) el buer. Teclelo ahora. Primero se le preguntar qu buer matar, e a e pero por defecto es el buer actual, y casi siempre es el que se quiere matar, simplemente presione Intro . Entonces le preguntar si realmente quiere matar el buer Emacs siempre controla antes a de matar un buer que tiene cambios sin salvar. Simplemente escriba yes (s y presione Intro , ) si quiere matarlo. Siga adelante y practique cargar archivos, modicarlos, guardarlos, y matar sus buers. Por supuesto, cercirese de no modicar ningn archivo de sistema importante de una forma que cause o u problemas 3 , pero trate de tener por lo menos cinco buers abiertos al mismo tiempo, para que se pueda dar el gusto de moverse entre ellos.

8.4

Terminando una sesin de edicin o o

Cuando haya hecho su trabajo en Emacs, asegrese de que se guarden todos los buers que deben u guardarse, y salga de Emacs con C-x C-c . a A veces C-x C-c le har una pregunta o dos en el minibuer antes de dejarle salir no se alarme, simplemente conteste en las maneras obvias. Si piensa que podr volver a Emacs luego, no a use C-x C-c ; use C-z , que suspender Emacs. Puede volver luego con el comando fg del shell. a Esto es ms eciente que detener a Emacs y comenzar varias veces, especialmente si tiene que editar a los mismos archivos nuevamente. Bajo X, presionar C-z reducir a icono la ventana. Mire la seccin sobre minimizar en el a o Capitulo 5. Esto le da dos formas de minimizar Emacs la manera normal que ofrece el gestor de ventanas, y C-z . Recuerde, cuando minimice, un simple fg no traer la ventana anterior a tendr que usar el gestor de ventanas. a
3 De cualquier manera, si no es el usuario root de la mquina, no deber ser capaz de da ar el sistema, pero a a n tenga cuidado igualmente.

76

Cap tulo 8. Editando archivos con Emacs

8.5

La tecla Meta

Ha aprendido ya sobre una tecla modicadora en Emacs, la tecla Control . Hay una segunda, llamada la tecla Meta, que se usa casi tan frecuentemente. Sin embargo, no todos los teclados tienen su tecla Meta en el mismo lugar, y algunos ni siquiera la tienen. Lo primero que necesita hacer es encontrar dnde se encuentra su tecla Meta. Es probable que las teclas Alt de su teclado o sean tambin teclas Meta, si usa un PC IBM o algn otro teclado que tenga una tecla Alt . e u La forma de probar esto es mantener presionada una tecla que crea que puede ser una tecla Meta y teclear x. Si ve que un pequeo prompt aparece en el minibuer (como esto: M-x ) entonces n la ha encontrado. Para librarse del prompt y regresar al buer de Emacs, teclee C-g . Si no consigue un prompt, entonces todav queda una solucin. Puede usar la tecla Escape a o como una tecla Meta. Pero en vez de mantenerla pulsada mientras teclea la prxima letra, tiene o que pulsarla y soltarla rpidamente, y entonces teclee la letra. Este mtodo funcionar tenga a e a o no una tecla Meta verdadera, tambin es la manera ms segura para hacerlo. Intente ahora e a pulsar ligeramente Escape y entonces teclee x. Deber conseguir otra vez ese pequeo prompt. a n Simplemente use C-g para salir. C-g es la manera general en Emacs para salir de algn lugar u donde no quiere estar. Los fastidiosos y comunes pitidos son para hacerle saber que ha interrumpido algo, pero est bien, porque es lo que quer hacer cuando tecle C-g 4 a a o a a La notacin M-x es anloga a C-x (ponga cualquier carcter en el lugar de la x). Si ha o encontrado una verdadera tecla Meta, use sta, de otra manera simplemente use la tecla Escape . e Yo escribir simplemente M-x y ud. tendr que usar su propia tecla Meta. e a

8.6

Cortar, pegar, destruir y tirar

Emacs, como cualquier buen editor, le permite cortar y pegar bloques de texto. A n de hacer esto, necesita una forma de denir el comienzo y n del bloque. En Emacs, se hace esto estableciendo dos ubicaciones en el buer, conocidas como marca y puntero. Para colocar la marca, vaya al lugar donde quiere que comience el bloque y teclee C-SPC (SPC signica Espacio , por supuesto). Deber ver el mensaje Mark set (Marca establecida) que aparece en el minibuer 5 . Ahora la a marca ha sido establecida en ese lugar. No habr ningn indicador especial destacando este hecho, a u pero Ud. sabe dnde la ha puesto, y eso es lo que importa. o Y qu hay del puntero? Bien, resulta que ha colocado un puntero cada vez que ha movido e el cursor, porque puntero simplemente se reere a su ubicacin actual en el buer. En trminos o e formales, el puntero es el punto donde se insertar el texto si escribe algo. Al colocar la marca, y a luego moverse al nal del bloque, ha denido un bloque de texto. Este bloque es conocido como la regin. La regin siempre signica el area entre la marca y el puntero. o o El slo hecho de denir la regin no la deja disponible para pegar. Tiene que decirle a Emacs o o
4 Ocasionalmente, un C-g no es suciente para persuadir a emacs que realmente quiere interrumpir lo que hace. Simplemente insista, y normalmente Emacs volver a un modo ms cuerdo. a a 5 Sobre

algunos terminales, C-SPC no funciona. Para estas mquinas, debe usar C-@ . a

8.7. Buscar y reemplazar

77

que lo copie para poder ser capaz de pegarlo. Para copiar la regin, asegrese de que la marca y el o u puntero estn correctamente establecidos, y teclee M-w . Ahora ha sido grabada por Emacs. Para a pegarlo en alguna otra parte, simplemente vaya all y teclee C-y . Esto es conocido como tirar el texto en el buer. Si quiere mover el texto de la regin a alguna otra parte, o matar la regin todo el texto dentro de ella desaparecer. a o a modo que si hubiera usado M-w . Puede tirar de nuevo con emacs guarda todo este texto es conocido como el c rculo de el porta papeles o el buer de pegado. teclee C-w en vez de M-w . Esto De hecho, se ha guardado del mismo C-y , como siempre. El lugar donde muerte. Algunos editores lo llaman

nea, Existe otra manera para cortar y pegar: cuando usa C-k para matar hasta el nal de una l el texto matado se guarda en el c rculo de muerte. Si mata ms de una l a nea seguida, se guardarn a todas juntas en el c rculo de muerte, para que la prxima tirada pegue todas las l o neas al mismo tiempo. Por ello, casi siempre es ms rpido usar repetidas veces C-k para matar algn texto, que a a u a establecer la marca y el puntero y usar C-w . Sin embargo, de una u otra manera funcionar. Es realmente una cuestin de preferencia personal cmo lo hace. o o

8.7

Buscar y reemplazar

Hay varias maneras para buscar texto en Emacs. Muchas son ms bien complejas, y no merece la a pena tratarlas aqu La ms fcil y la ms entretenida es usar isearch. . a a a Isearch se reere a incremental search (bsqueda incremental). Supongamos que quiere u buscar la cadena tbano en el siguiente buer: a Yo estaba temeroso que nos quedramos sin gasolina, cuando mi tcito pasajero a a exclam Auch un aguijn! Hay un tbano aqu dentro! . o o a Deber moverse al comienzo del buer, o por lo menos a algn punto que sabe que est antes de a u a la primera aparicin de la palabra, tbano, y teclear C-s . Eso le pondr en el modo de bsqueda o a a u isearch. Ahora comience a escribir la palabra que est buscando, tbano. Pero tan pronto como a a escribe la t, ve que Emacs ha saltado a la primera aparicin de t en el buer. Si la cita de arriba o es todo el contenido del buer, entonces la primera t es de la palabra temeroso. Ahora escriba la de tbano, y Emacs saltar sobre tcito, que contiene la primer ocurrencia de t. Y a a a a a nalmente, b consigue tbano, sin haber tenido que escribir la palabra entera. a Lo que hace en una isearch es denir una cadena para buscarla. Cada vez que agrega un carcter a al nal de la cadena, el nmero de posibles cadenas se reduce, hasta que haya escrito lo suciente u para denir la cadena singularmente. Una vez que ha encontrado la palabra, puede salir de la bsqueda con Intro o cualquiera de los comandos normales de movimiento. Si piensa que la cadena u que buscas esta atrs en el buer, entonces deber usar C-r , que hace isearch hacia atrs. a a a Si encuentra una palabra, pero no es la que buscaba, entonces presione C-s nuevamente mientras todav est en la bsqueda. Esto le mover hasta la prxima palabra coincidente, cada vez que a e u a o lo haga. Si no existe una prxima palabra, dir que la bsqueda fracas, pero si presiona C-s o a u o

78

Cap tulo 8. Editando archivos con Emacs

nuevamente en este punto, la bsqueda volver a comenzar desde el principio del buer. Se puede u a decir lo opuesto de C-r comienza al nal del buer. Intente introducir un buer de texto en ingls y haga un isearch para la cadena the. Primero e teclee todos los the que quiera y luego use C-s para ir a todas las apariciones. Note que tambin aparecern palabras como them, dado que tambin contiene la subcadena the. Para e a e buscar un unico the, deber agregar un espacio al nal de la cadena de bsqueda. Puede agregar a u nuevos caracteres a la cadena en cualquier punto de la bsqueda, despus tiene que presionar C-s u e repetidamente para encontrar las prximas palabras coincidentes. Puede usar tambin la Retroceso o e o Supr para quitar caracteres de la cadena en cualquier punto de la bsqueda, y presionando Intro u sale de la bsqueda, dejndole en la ultima coincidencia. u a Emacs tambin permite reemplazar todas las apariciones de una cadena con alguna nueva cae dena esto es conocido como query-replace (preguntar-reemplazar). Para invocarlo, teclee query-replace y Intro . Como se hace terminacin automtica sobre el nombre del comando, una vez que has escrito o a query-re, puede simplemente presionar Tab para terminarlo. Digamos que desea reemplazar todas las ocurrencias de tbano por mosca. En el prompt Query replace: (preguntar-reemplazar), a escriba tbano, y presione Intro . Entonces aparecer el prompt nuevamente, y deber introducir a a a mosca. Entonces Emacs recorrer el buer, parando a cada aparicin de la palabra tbano, y a o a preguntando si quiere reemplazarla. Simplemente presione en cada instancia y o n, por Yes o No, hasta que termine. Si no entiende esto mientras lo lee, prubelo. e

8.8

Qu es lo que ocurre realmente? e

Realmente, todas estas teclas ligadas que ha aprendido son los atajos a funciones de Emacs. Por ejemplo, C-p es una manera abreviada de decirle a Emacs que ejecute la funcin interna o previous-line (l nea previa). Sin embargo, todas estas funciones internas pueden ser llamadas por el nombre, usando M-x . Si olvida que previous-line est ligado a C-p , puede escribir a simplemente M-x previous-line Intro , y se mover una l a nea hacia arriba. Pruebe esto ahora, para que comprenda como M-x previous-line y C-p son realmente la misma cosa. El diseador de Emacs comenz desde la base hacia arriba, primero deni un lote completo de n o o funciones internas, y entonces les asoci o lig ciertas teclas a las ms comnmente usadas. A veces o o a u es ms fcil llamar a una funcin expl a a o citamente con M-x que recordar a qu tecla est ligada. e a La funcin query-replace, por ejemplo, est ligada a M-% en algunas versiones de Emacs. Pero o a quin puede recordar tan rara combinacin? A menos que use query-replace muy frecuentemente, e o es ms fcil simplemente llamarla con M-x . a a La mayor de las teclas que pulsa son letras, cuya funcin es ser insertadas en el texto del a o buer. Cada una de esas teclas est ligada a la funcin self-insert-command, que no hace nada a o ms que insertar la letra en el buer. Las combinaciones que usan la tecla Control con una letra a generalmente estn ligadas a funciones que hacen otras cosas, como mover el cursor. Por ejemplo, a C-v est ligada a una funcin llamada scroll-up (avanzar pgina), que mueve el buer una a o a

8.9. Pidiendo ayuda a Emacs

79

pantalla hacia arriba (lo que quiere decir que su posicin en el buer se mueve hacia abajo, por o supuesto). Si alguna vez quisiera realmente insertar un carcter de Control en el buer, entonces, cmo lo a o har Despus de todo, los caracteres de Control son caracteres ASCII, aunque rara vez usados, y a? e puede querer tenerlos en un archivo. Hay una manera para impedir que los caracteres de Control sean interpretados como comandos por Emacs. La tecla C-q 6 est ligada a una funcin especial a o llamada quoted-insert (insertar lo citado). Todo lo que quoted-insert hace es leer la prxima o tecla e insertarla literalmente en el buer, sin tratar de interpretarla como un comando. As es cmo o puede poner los caracteres de Control en sus archivos usando Emacs. Naturalmente, la manera de insertar un C-q es presionar C-q dos veces! Emacs tambin tiene muchas funciones que no estn ligadas a ninguna tecla. Por ejemplo, si e a escribe un mensaje largo, y no quiere tener que presionar Intro al nal de cada l nea. Puede hacer que emacs lo haga por Ud. (de hecho puede hacer que Emacs haga cualquier cosa por Ud.) el comando para hacerlo se llama auto-fill-mode (modo de auto llenado, pero no est ligado a a ninguna tecla por defecto. A n de invocar este comando, debe escribir M-x auto-fill-mode. M-x es la tecla usada para llamar a funciones por el nombre. Podr usarlo para llamar a funciones a como next-line y previous-line, pero eso ser muy inecaz, ya que esas funciones estn ligadas a a a C-n y C-p . A propsito, si mira su l o nea de modo despus de invocar auto-fill- mode, notar que la e a palabra Fill se ha agregado al lado derecho. Mientras est all Emacs llenar (rellenar) el e , a a texto automticamente. Puede desactivarlo escribiendo M-x auto-fill-mode nuevamente es a un comando de palanca. La incomodidad de escribir largos nombres de funcin en el minibuer disminuye porque Emacs o hace terminacin automtica en los nombres de funciones de la misma manera que lo hace en los o a nombres de archivo. Por lo tanto, rara vez deber encontrarse escribiendo el nombre entero de la a funcin letra a letra. Si no est totalmente seguro de si puede o no usar la terminacin automtica, o a o a n simplemente presione Tab . No puede hacer dao: lo peor que puede suceder es que consiga un carcter Tab, y si es afortunado, resultar que puede usar la terminacin automtica. a a o a

8.9

Pidiendo ayuda a Emacs

Emacs tiene extensas facilidades de ayuda tan extensas de hecho, que slo podemos comentarlas o un poco aqu A las facilidades de ayuda ms bsicas se accede tecleando C-h y luego una unica . a a letra. Por ejemplo, C-h k muestra la ayuda sobre una tecla (le pide que presiones una tecla, y entonces le dice lo que esa tecla hace). C-h t abre un breve manual sobre Emacs. Ms importante a an, C-h C-h C-h le da ayuda sobre la ayuda, para decirle que est disponible una vez que ha u a tecleado C-h por primera vez. Si sabe el nombre de una funcin de Emacs (save-buffer (grabar o el buer), por ejemplo), pero no puede recordar cul es la combinacin de teclas a la que est ligada, a o a use C-h w , para where-is (dnde est), y escriba el nombre de la funcin. O, si quiere conocer o a o
6 Llamamos a C-q una tecla, aunque se produce manteniendo presionada la tecla Control y presionando q, porque es un unico carcter ASCII. a

80

Cap tulo 8. Editando archivos con Emacs

qu hace una funcin con detalle, use C-h f , que preguntar por un nombre de funcin. e o a o Recuerde, que como Emacs hace terminacin automtica del nombre de la funcin, realmente no o a o tiene que estar seguro de cmo se llama para pedir ayuda sobre ella. Si piensa que puedes adivinar o la palabra con la que podr comenzar, teclee sa y presione Tab para ver si se completa. Si no, a e vuelva atrs e intente otra cosa. Lo mismo ocurre con los nombres de archivo: an cuando no pueda a u recordar del todo como nombr cierto archivo al que no ha accedido en tres meses, puede probar y o usar la terminacin automtica para averiguar si est en lo cierto. Usa la terminacin automtica o a a o a como una forma de preguntar, y no slo como una manera de teclear menos. o Hay otros caracteres que puede pulsar despus de C-h , y con cada uno consigue ayuda de una e manera diferente. Los que usar ms frecuentemente son C-h k , C-h w , y C-h f . Una vez que a a est ms familiarizado con Emacs, otra para probar es C-h a , que le pregunta por una cadena y e a le comenta todas las funciones que tienen esa cadena como parte de su nombre (la a ser para a apropos [a propsito], o about[acerca]). o Otra fuente de informacin es el lector de documentacin Info. Info es demasiado complejo para o o tratarlo aqu pero si est interesado en explorarlo por si mismo, teclee C-h i y lea el prrafo en la , a a parte superior de la pantalla. Le dir cmo conseguir ms ayuda. a o a

8.10

Especializando buers: Modos

Los buers de Emacs tienen modos asociados7. La razn para esto, es que sus necesidades cuando o escribe un mensaje de correo son muy diferentes de sus necesidades cuando, por ejemplo, escribe un programa. Mejor que tratar de crear un editor que satisfaga cada necesidad particular en todo momento (que ser imposible), el diseador de Emacs8 eligi hacer que Emacs se comporte de a n o manera diferente dependiendo de qu hace Ud. en cada buer individual. As los buers tienen e , modos, cada uno diseado para alguna actividad espec n ca. Los aspectos principales que distinguen un modo de otros son las combinaciones de teclas, pero tambin pueden existir otras diferencias. e El modo ms bsico es el modo Fundamental, que realmente no tiene ningn comando especial. a a u De hecho, esto es todo lo que Emacs dice sobre el Modo Fundamental: Modo Fundamental: Modo mayor no especializado para nada en particular. Los otros modos mayores son definidos por comparacin con este. o Obtuve as esa informacin: Teclee C-x b , que es switch-to-buffer (cambiar al buer), o e introduje foo cuando se me pregunt por un nombre de buer al que cambiar. Como no o hab anteriormente ningn buer llamado foo, Emacs cre uno y me cambio a l. Estaa u o e ba en el modo fundamental por defecto, pero si no lo hubiese estado, podr haber tecleado a M-x fundamental-mode para que estuviese. Todos los nombres de modo tienen un comando
colmo de males, hay Modos Mayores y Modos Menores, pero en este momento no necesita conocer nada acerca de esto. 8 Richard Stallman, a veces tambin conocido como rms , porque es su login. e
7 para

8.11. Modos de programacin o

81

llamado <nombre-de-modo>-mode que pone el buer actual en ese modo. Entonces, para averiguar ms sobre este modo mayor, tecle C-h m , que consigue ayuda sobre el modo mayor actual del a e buer en que est. a Hay un modo ligeramente ms util llamado text-mode (modo texto, que tiene los comandos a a o especiales M-S , para centrar prrafo, y M-s , que invoca centrar lnea. M-S , a propsito, signica exactamente lo que piensa: mantenga pulsadas la Meta y la tecla Shift , y presiona S. Pero no me tome la palabra en esto cree un nuevo buer, pngalo en modo texto, y teclee o C-h m . Puede que no entienda todo lo que Emacs le diga cuando lo haga, pero deber ser capaz a de conseguir sacar alguna informacin util de ello. o Esto es una introduccin a algunos de los modos ms comnmente usados. Si los usa, asegrese o a u u de que teclea en cada uno C-h m alguna vez, para averiguar ms sobre cada modo. a

8.11
8.11.1

Modos de programacin o
Modo C

Si usa Emacs para programar en el lenguaje C, puede conseguir que l le haga toda la indentacin e o automticamente. Los archivos cuyos nombres terminan en .c o .h se abrirn automticamente en a a a el modo c. Esto signica que ciertos comandos especiales de edicin, utiles para escribir programas o a en C, estn disponibles. En el modo C, Tab est ligado a c-indent-command (indentar comandos a c). Esto signica que presionando la tecla Tab no inserta realmente un carcter de Tabulacin. En a o cambio, si presiona Tab en cualquier parte de una l nea, Emacs automticamente indenta esta l a nea correctamente para su ubicacin en el programa. Esto implica que Emacs sabe algo sobre la sintaxis o de C, (aunque nada sobre semntica no puede asegurar que su programa no tenga errores!). a Para hacer esto, asuma que las l neas anteriores estn indentadas correctamente. Esto signica a que si en la l nea anterior falta un parntesis, un punto y coma, llaves, o cualquier otra cosa, Emacs e indentar la l a nea actual de una manera peculiar inesperada. Cuando vea que hace esto, sabr que a debe buscar un error de puntuacin en la l o nea anterior. Puede usar esta caracter stica para vericar que ha puntuado correctamente sus programas en vez de leer el programa entero buscado problemas, simplemente comience a indentar las l neas desde arriba hasta abajo con Tab , y cuando alguna se indenta de forma rara, verique las l neas inmediatamente anteriores. En otras palabras, deje a Emacs hacer el trabajo por Ud.!

8.11.2

Modo Scheme

Este es un modo mayor que no le servir de nada a menos que tenga un compilador o un interprete a para el lenguaje de programacin Scheme en su sistema. Tener uno no es tan normal como, digamos, o un compilador de C, pero se est haciendo cada vez ms comn, as que lo trataremos tambin. a a u e Mucho de lo que es cierto para el modo Scheme es tambin cierto para el modo Lisp, si preere e escribir en Lisp .

82

Cap tulo 8. Editando archivos con Emacs

Bien, para complicar las cosas, Emacs viene con dos modos Scheme diferentes, porque la gente no pod decidir cmo quer que funcionara. El que estoy describiendo se llama cmuscheme, y luego, a o an en la seccin personalizando a Emacs, hablar de cmo puede haber dos modos Scheme diferentes o e o y qu hacer acerca de ello. Por ahora, no se preocupe si las cosas en su Emacs no coinciden con e las que yo digo aqu Un editor personalizable signica un editor impredecible, y no hay vuelta de . hoja!. Puede ejecutar un proceso Scheme interactivo en Emacs con el comando M-x run-scheme. Esto crea un buer llamado *scheme*, que tiene el prompt habitual de Scheme. Puede teclear expresioa a , nes de Scheme en el prompt, presionar Intro , y Scheme las evaluar y mostrar la respuesta. As a n de interactuar con el proceso de Scheme, podr simplemente escribir todas sus aplicaciones y a deniciones de funcin en el prompt. Es posible que haya escrito previamente cdigo fuente Scheme o o en un algn archivo, y ser ms fcil hacer su trabajo en el archivo y enviar las deniciones al buer u a a a de proceso Scheme segn sea necesario. u Si el archivo fuente termina en .ss o .scm, automticamente se abrir en el modo Scheme a a cuando lo encuentre con C-x C-f . Si por alguna razn, no surge en el modo Scheme, puede hacerlo o a mano con M-x scheme-mode. Este modo scheme no es lo mismo que el buer que ejecuta el proceso Scheme; ms bien, el que el buer de cdigo fuente est en modo scheme signica que tiene comandos a o e especiales para comunicar con el buer de proceso. Si est dentro de la denicin de una funcin en el buer de cdigo fuente Scheme y teclea a o o o C-c C-e , entonces esa denicin ser enviada al buer de proceso exactamente como si lo o a a o hubiera tecleado Ud. mismo. C-c M-e env la denicin y entonces le lleva al buer de proceso para hacer algo de trabajo interactivo. C-c C-l carga un archivo de cdigo Scheme (ste funciona desde o e el buer de proceso o el buer de cdigo fuente). Y como otros modos de lenguajes de programacin, o o al presionar Tab en cualquier lugar de una l nea de cdigo se indentar correctamente esa l o a nea. Si est en el prompt del buer de proceso, puede usar M-p y M-n para moverse entre sus a comandos anteriores (tambin conocido como la historia de entrada). As que si est depurando e a la funcin rotar, y ya lo ha aplicado a los argumentos en el buer de proceso, como: o
>(rotar (a b c d e))

entonces puede recuperar ese comando anterior tecleando M-p en el prompt. Aqu no deber a ser necesario volver a escribir expresiones largas en el prompt de Scheme habitese a usar la u historia de entrada y ahorrar mucho tiempo. a Emacs conoce bastantes lenguajes de programacin: C, C++, Lisp, y Scheme son simplemente o algunos. Generalmente, sabe cmo indentarlos de forma intuitiva. o

8.11.3

Modo de correo

Tambin puede editar y enviar correo en Emacs. Para entrar en un buer de correo, teclee C-x m . e Necesita llenar los campos To: (A:) y Subjet: (Asunto:), y entonces use C-n para ir, por debajo de la l nea de separacin, al cuerpo del mensaje (que est vac cuando comienza por primera o a o vez). No cambie o borre la l nea de separacin, o sino Emacs no ser capaz de enviar su correo use o a

8.12. Como ser ms eciente a n a u

83

esa l nea para distinguir el encabezamiento del correo, que le dice dnde enviar el correo, de los o contenidos del mensaje. Puede escribir lo que quiera por debajo de la l nea de separacin. Cuando est listo para enviar el o e mensaje, simplemente teclee C-c C-c , y Emacs lo enviar y har que el buer de correo desaparezca. a a

8.12

Como ser ms eciente a n a u

Los usuarios experimentados de Emacs son fanticos de la eciencia. De hecho, frecuentemente a acaban derrochando mucho tiempo buscando formas para ser ms ecientes!. No quiero que le a suceda esto, aunque hay algunas cosas fciles con las que puede llegar a ser un mejor usuario de a Emacs. A veces los usuarios experimentados hacen que los novatos se sientan tontos por no saber todos estos trucos por alguna razn, la gente llega a hacerse religiosas sobre el uso correcto de o Emacs. All vamos: a Cuando se mueve de un lado a otro, usa los medios ms rpidos disponibles. Ud. sabe que C-f a a es forward-char (un carcter hacia adelante) supon que M-f es forward-word (una palabra a a a a e hacia delante)? C-b es backward-char (un carcter hacia atrs). Supone qu hace M-b ? Sin embargo, esto no es todo, puede avanzar una frase cada vez con M-e , siempre que escriba sus frases de modo que haya siempre dos espacios despus del punto nal (de otra manera Emacs no e puede distinguir donde termina una frase y comienza la siguiente). M-a es backward-sentence (una frase atrs). a nea, avergncese, y asegrese de usar ue u Si ve que usa repetidamente C-f para llegar al nal de la l C-e en su lugar, y C-a para ir al principio de la l nea. Si usa muchos C-n para bajar pantallas de texto, avergncese mucho, y usa C-v siempre. Si usa repetidamente C-p para avanzar pantallas, ue no se atreva a ensear la cara, y use M-v en su lugar. n Si se est acercando al nal de una l a nea y se da cuenta de que hay una palabra mal tecleada o de que se ha olvidado alguna en algn lugar anterior de la l u nea, no use la Retroceso o Supr para volver a ese punto. Eso requerir volver a escribir porciones enteras de texto perfecto. En vez a de eso, use combinaciones de M-b , C-b , y C-f para moverse a la ubicacin precisa del error, o nea nuevamente. arrglelo, y entonces use C-e para moverse al n de la l e Cuando tiene que escribir un nombre de archivo, nunca teclee el nombre completo. Solamente escriba lo suciente para identicarlo singularmente, y deje que Emacs termine el trabajo presionando Tab o Espacio . Por qu teclear de ms cuando puede derrochar ciclos de CPU en su lugar? e a Si escribe algn tipo de texto simple, y de algn modo su auto-llenando (auto-lling)lo ha fastiu u diado, use M-q , que es rellenado de prrafo en los modos de texto comunes. Esto ajustar el a a prrafo en el que est, como si hubiese sido llenado l a a nea a l nea, pero sin tener que liarse hacindolo e a a a mano. M-q trabajar desde dentro del prrafo, o desde su comienzo o nal. A veces es util usar C-x u , (undo (deshacer)), que tratar de deshacer el (los) ultimo(s) a cambio(s) que hizo. Emacs decidir cuanto deshacer; habitualmente decide muy inteligentemente. a Llamndolo repetidamente deshar ms y ms, hasta que Emacs no pueda recordar qu cambios se a a a a e

84

Cap tulo 8. Editando archivos con Emacs

hicieron.

8.13

Personalizando Emacs

Emacs es tan grande, y tan complejo, que de hecho tiene su propio lenguaje de programacin!. No o bromeo: para personalizar Emacs ajustndolo a sus necesidades, tiene que escribir programas en a este lenguaje. Se llama Emacs Lisp, y es un dialecto de Lisp, as que si tiene experiencia previa en Lisp, le parecer bastante amistoso. Si no, no se preocupe: no voy a profundizar mucho, porque a denitivamente se aprende mejor practicando. Para aprender realmente a programar Emacs, deber a consultar las pginas de informacin de Emacs Lisp, y leer mucho cdigo fuente de Emacs Lisp. a o o La mayor parte de la funcionalidad de Emacs est denida en archivos de cdigo de Emacs a o Lisp9 . La mayor de estos archivos se distribuyen con Emacs y colectivamente son conocidos como a la Biblioteca de Emacs Lisp. La ubicacin de esta biblioteca depende de cmo se instal Emacs en o o o su sistema son ubicaciones comunes /usr/lib/emacs/lisp, /usr/lib/emacs/19.19/lisp/, etc. El 19.19 es el nmero de versin de Emacs, y podr ser diferente en su sistema. u o a No necesita hurgar por su sistema de archivos buscando la biblioteca de lisp, porque Emacs tiene la informacin almacenada internamente, en una variable llamada load-path (trayectoria o de carga). Para averiguar el valor de esta variable, es necesario evaluarla; esto es, hacer que el intrprete de lisp de Emacs consiga su valor. Hay un modo especial para evaluar las expresiones e de Lisp en Emacs, llamado modo lisp interactivo (lisp-interaction-mode). Comnmente, hay un u buer llamado *scratch* que est ya en este modo. Si no lo puede encontrar, cree un nuevo a buer con cualquier nombre, y escriba M-x lisp-interaction-mode dentro de l. e Ahora tiene un espacio de trabajo para interactuar con el intrprete Lisp de Emacs. Teclee esto: e
load-path

a y entonces presione C-j al nalizar. En el modo Lisp interactivo, C-j est ligado a eval-print-last-sexp (evaluar-imprimir-ltima-sexp). Una sexp es una s-expresion, lo que signica un grupo balanu ceado de parntesis, inclu el caso de que no haya ninguno. Bueno, esto es simplicarlo un poco, e do pero ir entendiendo que son segn programe con Emacs Lisp. De cualquier manera, al evaluar a u load-path deber conseguir algo como esto: a
load-path C-j ("/usr/lib/emacs/site-lisp/vm-5.35/home/kfogel/elithp" "/usr/lib/emacs/site-lisp/usr/lib/emacs/19.19/lisp")

Por supuesto, no tendr el mismo aspecto en cada sistema, puesto que es dependiente de cmo a o se instal Emacs. El ejemplo de arriba viene de mi PC 386 que funciona con Linux. Como indica lo o anterior, load-path es una lista de cadenas. Cada cadena nombra un directorio que podr contener a archivos de Emacs Lisp. Cuando Emacs necesita cargar un archivo de cdigo Lisp, va buscndolo o a en cada uno de estos directorios, en orden. Si un directorio se nombra pero no existe en el sistema de archivos, Emacs simplemente lo ignora.
9A

veces llamados no ocialmente Elisp.

8.13. Personalizando Emacs

85

Cuando Emacs arranca, automticamente trata de cargar el archivo .emacs desde su directorio a de usuario. Por lo tanto, si quiere hacer personalizaciones en Emacs, deber ponerlas en .emacs. a La personalizacin ms comn son las teclas ligadas, as que aqu est cmo hacerlo: o a u a o
(global-set-key "\C-cl"goto-line)

global-set-key (jar teclas globalmente) es una funcin de dos argumentos: la tecla a la que ha o de ser ligada, y la funcin a la que ligarla. La palabra global signica que esta tecla ligada tendr o a efecto en todos los modos mayores (hay otra funcin, local-set-key (jar teclas localmente), que o o nea). liga una tecla en un unico buer). Arriba, he ligado C-c l a la funcin goto-line (ir a tal l La tecla se describe usando una cadena. La sintaxis especial \C-<carcter> signica mantener a pulsada la tecla Control mientras se presiona <carcter>. As mismo, \M-<carcter> indica la a a tecla Meta . Todo eso est muy bien, pero cmo supe que el nombre de la funcin era goto-line?. Puedo a o o saber que quiero ligar C-c l a alguna funcin que pregunta por un nmero de l o u nea y mueve el cursor a esa l nea, pero cmo hice para averiguar el nombre de esa funcin? o o Aqu es donde intervienen las facilidades de ayuda de Emacs. Una vez que ha decidido qu tipo e de funcin busca, puede usar Emacs para rastrear su nombre exacto. He aqu una manera rpida y o a sucia para hacerlo: puesto que Emacs completa los nombres de funcin, simplemente escriba C-h f o (que es describe-function (describir funcin), recurdelo), y entonces presione Tab sin escribir o e nada ms. Esto pide a Emacs que complete la cadena vac en otras palabras, la terminacin a a o automtica se corresponder con cada una de las funciones!. Puede tardar un momento en construir a a la lista de funciones, ya que Emacs tiene muchas funciones internas, pero mostrar todo lo que entre a en la pantalla cuando est listo. e o o a En este momento presione C-g para abandonar la funcin describir funcin. Habr un buer llamado *Completions*, que contiene la lista de terminaciones automticas que acaba de generar. a Cambie a este buer. Ahora puede usar C-s , isearch, para buscar las funciones probables. Por ejemplo, es una suposicin segura que una funcin que pregunta por un nmero de l o o u nea y entonces va a esa l nea contendr la cadena line (l a nea) en su nombre. Por lo tanto, simplemente comience buscando la cadena line , y acabar encontrando lo que busca. a Si quiere otro mtodo, puede usar C-h a , command-apropos, para mostrar todas las funciones e cuyos nombres se ajustan a la cadena dada. La salida de command-apropos es un poco ms dif de a cil clasicar, que simplemente buscar una lista de terminacin automtica, en mi opinin, pero puede o a o encontrar que tiene distintas sensaciones. Prueber ambos mtodos y a ver que opina. e Siempre existe la posibilidad de que Emacs no tenga ninguna funcin predenida para hacer lo o que est buscando. En esta situacin, tiene que escribir la funcin Ud. mismo. No voy a hablar de a o o cmo hacer eso deber buscar en la biblioteca de Emacs Lisp ejemplos de deniciones de funcin, o a o y leer las paginas Info sobre Emacs Lisp. Si resulta que conoce a un gur local de Emacs, pregntele u u cmo hacerlo. Denir sus propias funciones de Emacs no es un gran asunto para darle una idea, o yo he escrito 131 de ellas durante ms o menos el ultimo ao. Requiere un poco de prctica, pero la a n a curva de aprendizaje no es empinada. Otra cosa que la gente hace a menudo en su .emacs es asignar a ciertas variables los valores preferidos. Por ejemplo, ponga esto en su .emacs y entonces inicie un nuevo Emacs:

86

Cap tulo 8. Editando archivos con Emacs

(setq inhibit-startup-message t)

Emacs verica el valor de la variable inhibit-startup-message (bloquear mensaje de arranque) para decidir si muestra la informacin sobre la versin y la falta de garant cuando arranca. La o o a expresin de Lisp de arriba usa el comando setq para asignar a esa variable el valor t, que es un o valor especial de Lisp que signica true (verdadero). Lo contrario de t es nil (nada o nulo), que es el valor false (falso) designado en Emacs Lisp. He aqu dos cosas que estn en mi .emacs que a podr encontrar utiles: a
(setq case-fold-search nil);causa la insensibilidad a maysculas y minsculas para u u la bsqueda u ; ;; Hacer indentar los programas C de la manera que me gusta: (setq c-indent-level 2)

La primera expresin hace que las bsquedas (incluyendo isearch) sean insensibles a maysculas o u u y minsculas; esto es, la bsqueda encontrar versiones de un mismo carcter sea mayscula o u u a a u minscula aunque la cadena de bsqueda contenga unicamente la versin en minscula. La segunda u u o u expresin establece que la indentacin por defecto para las sentencias en lenguaje C sea un poco o o menor de lo normalesto es solamente una preferencia personal; encuentro que esto hace el cdigo o C ms legible. a El carcter de comentario en Lisp es ;. Emacs ignora cualquier cosa que siga a uno de stos, a e a menos que aparezca dentro de una cadena literal, como esta:
;;estas dos lneas son ignoradas por el intrprete de Lisp, pero la e ; ;; s-expression que le sigue se evaluar totalmente: a (setq alguna-cadena-literal "Una pausa torpe; sin ningn propsito.") u o

Es una buena idea comentar sus cambios en los archivos Lisp, porque seis meses despus no se e acordar en qu estaba pensando cuando los modic. Si el comentario aparece slo en una l a e o o nea, precdalo con dos punto y coma. Esto ayuda a Emacs a indentar los archivos Lisp correctamente. e Puede encontrar informacin sobre las variables internas de Emacs de las mismas formas que con o las funciones. Use C-h v , describe-variable para hacer una lista de terminacin automtica, o o a use C-h C-a , apropos. Apropos diere de C-h a , command-apropos, en que muestra variables y funciones en vez de solamente funciones. La extensin por defecto para los archivos de Emacs Lisp es .el, como en c-mode.el. Sin o embargo, para hacer que el cdigo Lisp se ejecute ms rpido, Emacs permite que sea byte-compiled o a a (compilado a un formato interno), y estos archivos de cdigo Lisp compilado terminan en .elc en o vez de .el. La excepcin a esto es su archivo .emacs, que no necesita la extensin .el porque Emacs o o sabe buscarlo para arrancar. Para cargar un archivo de cdigo Lisp interactivamente, use el comando M-x load-file (cargar o archivo). Le preguntar por el nombre del archivo. Para cargar archivos Lisp desde dentro de otros a archivos Lisp, haga esto:
(load "c-mode");fuerza a Emacs a cargar el contenido de c-mode.el o .elc

8.13. Personalizando Emacs

87

Emacs aadir la extensin .elc al nombre del archivo e intentar encontrarlo en algn lugar del n a o a u load-path. Si falla, lo intenta con la extensin .el; si falla esto, usa la cadena literal tal y como es o pasada a load. Puede compilar (byte-compile) un archivo con el comando M-x byte-compile-file, pero si modica el archivo a menudo, probablemente no merezca la pena. Sin embargo no deber a compilar de esa manera su .emacs, ni siquiera darle la extensin .el. o Despus de que .emacs se ha cargado, Emacs busca un archivo llamado default.el para cargarlo. e Comnmente se ubica en un directorio en la trayectoria de carga (load-path) llamado site-lisp o u local-elisp o algo parecido (ver el ejemplo load-path que di hace un rato). La gente que mantiene Emacs en un sistema multiusuario usa default.el para hacer cambios que afectarn los Emacs de a todos, puesto que todos los Emacs lo cargan despus de los .emacs personales. default.el no e deber ser compilado, ya que tiende a ser modicado frecuentemente. a Si el .emacs de una persona contiene algn error, Emacs no intentar cargar default.el, sino u a que simplemente se detendr, destellando un mensaje diciendo Error in init file. (Error en a el archivo de inicio) o algo similar. Si ve este mensaje, probablemente algo vaya mal con su .emacs. Hay un tipo ms de expresin que a menudo va en un .emacs. La libreria de Emacs Lisp a a o veces ofrece mltiples paquetes para hacer lo mismo de diferentes formas. Esto signica que tiene u que especicar cul quiere usar (o tendr el paquete por defecto, que no es siempre el mejor para a a todos los propsitos). Un area donde esto sucede es en las caracter o sticas de interaccin del Scheme o de Emacs. Hay dos interfaces diferentes de Scheme distribuidos con Emacs (al menos en la versin o 19): xscheme y cmuscheme.
prompt> ls /usr/lib/emacs/19.19/lisp/*scheme* /usr/lib/emacs/19.19/lisp/cmuscheme.el /usr/lib/emacs/19.19/lisp/cmuscheme.elc /usr/lib/emacs/19.19/lisp/scheme.el /usr/lib/emacs/19.19/lisp/scheme.elc /usr/lib/emacs/19.19/lisp/xscheme.el /usr/lib/emacs/19.19/lisp/xscheme.elc

Resulta que el interfaz ofrecido por cmuscheme me gusta mucho ms que el que ofrece xscheme, a pero el que Emacs usar por defecto es xscheme. Cmo puedo hacer que Emacs acte de acuerdo a o u con mi preferencia?. Puse esto en mi .emacs:
;; note cmo la expresin puede quebrarse en dos lneas. o o ;; ignora los espacios en blanco, generalmente: (autoload run-scheme "cmuscheme" "Corre un Scheme inferior, de la forma que me gusta."t) Lisp

La funcin autoload (auto carga) toma el nombre de una funcin (citada con , por razones o o que tienen que ver con cmo funciona Lisp) y le dice a Emacs que esta funcin est denida en un o o a determinado archivo. El archivo es el segundo argumento, una cadena (sin la extensin .el o .elc) o indicando el nombre del archivo a buscar en la trayectoria de carga load-path. Los argumentos restantes son opcionales, pero necesarios en este caso: el tercer argumento es una cadena de documentacin para la funcin, de modo que si llama a describe-function (describiro o

88

Cap tulo 8. Editando archivos con Emacs

funcin), consigue alguna informacin util. El cuarto argumento le dice a Emacs que esta funcin o o o autocargable puede ser llamada interactivamente (esto es, usando M-x ). Esto es muy importante en este caso, porque uno deber poder teclear M-x run-scheme para comenzar un proceso de scheme a que se ejecuta bajo Emacs. Ahora que run-scheme ha sido denido como una funcin autocargable, qu sucede cuando o e tecleo M-x run-scheme?. Emacs mira la funcin run-scheme, ve que est establecida para ser o a autocargable, y carga el archivo nombrado por la autocarga (en este caso, cmuscheme). El archivo compilado cmuscheme.elc existe, as que Emacs lo cargar. Ese archivo debe denir la funcin a o run-scheme, o habr un error de autocarga. Por suerte, dene run-scheme, as que todo va sin a tropiezos, y consigo mi interfaz preferida de Scheme10 . Una autocarga es como una promesa a Emacs, de que cuando llegue el momento, puede encontrar la funcin especicada en el archivo en el que le dice que mire. A cambio, consigue algn control o u sobre lo que se carga. Tambin, la autocarga ayuda a reducir el tamao de Emacs en la memoria, al e n no cargar ciertas caracter sticas hasta que se pidan. Muchos comandos no estn denidos realmente a como funciones cuando Emacs se inicia. Ms bien, estn simplemente preparados para autocargarse a a desde cierto archivo. Si nunca invoca el comando, nunca se carga. Este ahorro de espacio es vital para el funcionamiento de Emacs: si cargara todos los archivos disponibles en la biblioteca Lisp, Emacs tomar veinte minutos simplemente para arrancar, y una vez hecho, podr ocupar la mayor a a parte de la memoria disponible en su mquina. No se preocupe, no tiene que establecer todas estas a autocargas en su .emacs; ya se tomaron en cuenta cuando Emacs se desarroll. o

8.14

Averiguando ms a

No le he contado todo lo que se puede saber sobre Emacs. De hecho, no creo haberle contado siquiera un 1% de lo que se puede saber sobre Emacs. Aunque sabe suciente para proseguir, todav hay a montones de comodidades y trucos que ahorran tiempo que deber averiguar. La mejor forma de a hacerlo es esperar hasta que vea que necesita algo, y buscar entonces una funcin que lo haga. o La importancia de estar cmodo con las facilidades de ayuda en l o nea de Emacs no puede enfatizarse lo suciente. Por ejemplo, suponga que quiere poder insertar los contenidos de algn archivo u en un buer que ya est trabajando sobre un archivo diferente, para que el buer contenga a ama bos. Si intuyese que hay un comando llamado insert-file (insertar archivo), tendr razn. Para a o vericar su acertada suposicin, teclee C-h f. En el prompt del minibuer, introduzca el nombre o de una funcin sobre la que quiera ayuda. Puesto que sabe que hay terminacin automtica en los o o a nombres de funciones, y puede suponer que el comando que busca comienza con insert, escriba o insert y presiona Tab . Esto le muestra todos los nombres de funcin que comienzan con insert, e insert-le es uno de ellos. De este modo completa el nombre de funcin y lee sobre como trabaja, y entonces usa M-x o insert-file. Si se est preguntando si tambin est ligado a una tecla, escribe C-h w insert-file a e a Intro , y aver uelo. Cuanto ms sepa de las facilidades de ayuda de Emacs, ms fcilmente podr g a a a a
10 A propsito, cmuscheme era la interfaz de la que hablaba antes, en la seccin sobre el trabajo con Scheme, as que o o si quiere usar algo de este manual, necesita asegurarse de que ejecuta cmuscheme.

8.14. Averiguando ms a

89

hacer preguntas a Emacs acerca de s mismo. La capacidad de hacerlo, combinada con un esp ritu de exploracin y un deseo de aprender nuevas formas de hacer las cosas, puede acabar por ahorrarle o mucho tecleado. Para pedir una copia del manual de usuario de Emacs (Emacs users manual) y/o el manual de Programacin en Emacs Lisp (Emacs Lisp Programming manual), debe escribir a: o Free Software Foundation 675 Mass Ave Cambridge, MA 02139 USA Ambos manuales se distribuyen electrnicamente con Emacs, en una forma legible usando el o lector de documentacin Info (C-h i), pero puede encontrar ms fcil tratar con freeware que con o a a las versiones en l nea. Adems, sus precios son bastantes razonables, y el dinero va a una buena a causasoftware gratuito de calidad!. En algn momento, deber teclear C-h C-c para leer las u a condiciones de copyright de Emacs. Es ms interesante de lo que puede pensar, y le ayudar a a a aclarar el concepto de software libre. Si cree que el termino free software simplemente signica que el programa no cuesta nada, por favor lea el copyright en cuanto tenga tiempo!.

90

Cap tulo 8. Editando archivos con Emacs

Cap tulo 9

Tengo que ser yo mismo!


Si Dios hubiera sabido que necesitar amos previsin, nos la habr dado. o a

9.1

Personalizacin del bash o

Una de las cosas que distinguen la losof de Unix es que los diseadores de sistemas no intentaron a n predecir cada necesidad que los usuarios podr tener; en lugar de eso, intentaron hacer fcil para an a cada usuario individual la conguracin del entorno a sus necesidades particulares. Esto se consigue o principalmente a travs de cheros de conguracin. Tambin son conocidos como cheros de e o e inicio , cheros rc (por run control, control de arranque), o incluso cheros punto (dot les), porque los nombres de los cheros siempre empiezan con .. Recordemos que los cheros que empiezan por . no se visualizan normalmente con ls. Los cheros de conguracin ms importantes son los usados por el shell. El shell por defecto o a de Linux es el bash, y ste es el shell que cubre este cap e tulo. Antes de empezar a explicar cmo o personalizar el bash, tenemos que saber cuales son los archivos que mira.

9.1.1

Arranque del shell

Hay diferentes modos de funcionamiento del bash. Puede funcionar como shell de ingreso, que es el modo en que arranca cuando se ingresa por primera vez. El shell de ingreso deber ser el primer a shell que vea. Otro modo en que puede funcionar bash es como shell interactivo. Este es un shell que presenta un prompt a un humano y espera una entrada de datos. Un shell de ingreso tambin es e un shell interactivo. Una manera de conseguir un shell interactivo sin ingresar en el sistema es, por ejemplo, un shell dentro de xterm. Cualquier shell que sea creado por otro medio distinto del ingreso registrado en el sistema es un shell de no-ingreso. Finalmente, hay shells no interactivos. Estos shells se usan para ejecutar un archivo de comandos, muy parecidos a los cheros de procesamiento por lotes del MS-DOS los archivos que 91

92

Cap tulo 9. Tengo que ser yo mismo!

acaban en .BAT. Estas macros de shell funcionan como mini-programas. Aunque son usualmente mucho ms lentos que un programa normal compilado, suele ser cierto tambin que son mucho ms a e a fciles de escribir. Dependiendo del tipo de shell, se usarn distintos tipos de archivo al arrancarlo: a a Tipo de Shell Ingreso interactivo Interactivo No interactivo Accin o Se lee y ejecuta el archivo .bash prole. Se lee y ejecuta el archivo .bashrc. Se lee y ejecuta la macro de shell.

9.1.2

Ficheros de arranque

Como muchos usuarios quieren tener mayormente el mismo entorno, sin importar que tipo de shell interactivo acaben teniendo, y sea o no un shell de ingreso, empezaremos nuestra conguracin o poniendo un comando muy simple en nuestro archivo .bash prole: source ~/.bashrc. El comando source ordena al shell que interprete el argumento como una macro de shell. Lo que e signica para nosotros es que cada vez que .bash profile se ejecuta, tambin se ejecuta .bashrc. Ahora, slo aadiremos comandos a nuestro archivo .bashrc. Si alguna vez queremos que se o n ejecute un comando unicamente cuando hemos hecho un ingreso registrado, lo aadiremos a nuestro n .bash prole.

9.1.3

Creando alias

Cuales son algunas de las cosas que interesar personalizar? Esto es algo que creo que el 90% de a los usuarios de Bash han puesto en su .bashrc:
alias ll="ls -l"

Este comando dene un alias de shell llamado ll que expande el comando normal de shell ls -l cuando se invoca por el usuario. De modo que, asumiendo que Bash ha le este comando do del chero .bashrc, podemos teclear ll para conseguir el efecto de ls -l con solo la mitad de pulsaciones. Lo que ocurre es que cuando tecleamos ll y pulsamos Intro , Bash lo intercepta, lo reemplaza por ls -l, y ejecuta ste en su lugar. No hay ningn programa llamado ll en el e u sistema, pero el shell automticamente traduce el alias a un programa vlido. a a Hay algunos alias de ejemplo en la gura 9.1.3. Puede ponerlos en su propio .bashrc. Uno especialmente interesante es el primero. Con l, cada vez que alguien teclea ls, automaticamente e tiene una opcin -F aadida. (El alias no intenta expandirse a s mismo otra vez). Este es un o n modo muy comn de aadir opciones que se usan constantemente al llamar a un programa. u n Ntese los comentarios con el caracter # en la gura 9.1.3. Cada vez que aparece un #, el o shell ignora el resto de la l nea. Quiz haya notado unas cuantas cosas sueltas sobre los ejemplos. Primero, me he dejado las a comillas en algunos de los aliascomo pu. Estrictamente hablando, las comillas no son necesarias cuando slo se tiene una palabra a la derecha del signo igual. o

9.1. Personalizacin del bash o

93

Figura 9.1 Algunos alias de ejemplo para bash.


alias ls="ls -F" # muestra los caracteres al final del listado alias ll="ls -l" # ls especial alias la="ls -a" alias ro="rm *~; rm .*~" # este borra las copias de seguridad creadas por Emacs alias rd="rmdir" # ahorra teclas! alias md="mkdir" alias pu=pushd # pushd, popd, y dirs no estan incluidos en este alias po=popd # manual---quiza quiera echarles un vistazo alias ds=dirs # en la pagina man de Bash # estos solo son atajos de teclado alias to="telnet cs.oberlin.edu" alias ta="telnet altair.mcs.anl.gov" alias tg="telnet wombat.gnu.ai.mit.edu" alias tko="tpalk kold@cs.oberlin.edu" alias tjo="talk jimb@cs.oberlin.edu" alias mroe="more" # correcion ortografica! alias moer="more" alias email="emacs -f rmail" # mi lector de correo alias ed2="emacs -d floss:0 -fg \"grey95\" -bg \"grey50\"" # asi llamo a Emacs

Pero no hace dao poner comillas, as que no me dejis crearos malos hbitos. Ciertamente habr n e a a que usarlas si se va a crear un alias de un comando con opciones y/o argumentos:
alias rf="refrobnicate -verbose -prolix -wordy -o foo.out"

Adems, el ultimo alias tiene algn entrecomillado gracioso: a u


alias ed2="emacs -d floss:0 -fg \"grey95\" -bg \"grey50\""

Como es fcil suponer, he querido pasar entrecomillados dentro de las opciones, as que tengo a que anteponerles una contrabarra para que bash no crea que ya ha llegado al nal del alias. Finalmente, he creado dos alias de dos errores de escritura comunes, mroe y moer, apuntando al comando que pretend escribir, more. Los alias no intereren con el paso de argumentos a un a programa. Lo siguiente funciona bien:
/home/larry$ mroe hurd.txt

De hecho, saber como crear sus propios alias es probablemente por lo menos la mitad de las personalizaciones que har jams. Experimente un poco, descubra cules son los comandos largos a a a que teclea frecuentemente, y cree alias para ellos. De esta manera, le resultar ms confortable a a trabajar con el prompt del shell.

9.1.4

Variables de entorno

Otra cosa que uno hace frecuentemente en .bashrc es denir variables de entorno. Y qu son e las variables de entorno? Vamos a mirarlo desde otra direccin: Supongamos que est leyendo la o a

94

Cap tulo 9. Tengo que ser yo mismo!

documentacin del programa fruggle, y se encuentra con una de estas expresiones: o Fruggle normalmente busca su chero de conguracin, .frugglerc, en el directorio ra o z del usuario. Sin embargo si la variable de entorno FRUGGLEPATH indica un nombre de archivo diferente, mirar ah en su lugar. a Cada programa se ejecuta en un entorno, y ese entorno es denido por el shell que llam al o programa1. Se puede decir que el entorno existe dentro del shell. Los programadores tienen una rutina especial para interrogar al entorno, y el programa fruggle usa esa rutina. Comprueba el valor de la variable de entorno FRUGGLEPATH. Si esa variable no est denida, sencillamente usar el a a archivo .frugglerc del directorio ra Si est denida, usar el valor de esa variable (que debe ser z. a a el nombre de un archivo que fruggle pueda usar) en lugar del archivo por defecto .frugglerc. As es como se puede cambiar el entorno en bash:
/home/larry$ export PGPPATH=/home/larry/secrets/pgp

Hay que pensar en el comando export con este signicado: Por favor exporta esta variable fuera del entorno donde estar llamando programas, de modo que su valor sea visible para ellos. e Realmente hay razones para llamarlo export, como se ver despus. a e Esta variable en particular es usada por el infame programa de encriptacin mediante clave o pblica de Phil Zimmerman, pgp. Por defecto, pgp usa el directorio ra como lugar para encontrar u z determinados archivos que necesita (que contienen claves de encriptacin), y tambin un lugar para o e guardar archivos temporales que crea mientras est en marcha. Al darle este valor a la variable a PGPPATH, le he dicho que use el directorio /home/larry/secrets/pgp en lugar de /home/larry. He tenido que leer el manual de pgp para encontrar el nombre exacto de la variable y lo que hace, pero es bastante estndar el uso del nombre del programa en maysculas, seguido del sujo PATH. a u Tambin es util saber como preguntar al entorno: e
/home/larry$ echo $PGPPATH /home/larry/.pgp /home/larry$

Ntese el $; se precede la variable de entorno con un signo de dlar para extraer el valor de o o la variable. Si lo hubiera escrito sin el signo de dlar, echo simplemente habr mostrado su(s) o a argumento(s):
/home/larry$ echo PGPPATH PGPPATH /home/larry$

El $ se usa para evaluar variables de entorno, pero slo lo hace dentro del contexto del shell o o sea, cuando el shell est interpretando. Cuando est el shell interpretando? Bueno, cuando se a a
1 Ahora se puede comprobar porqu los shells son tan importantes. No hay que andar pasando un entorno completo e a mano cada vez que se llame a un programa!

9.1. Personalizacin del bash o

95

Figura 9.2 Algunas variables de entorno importantes. Nombre HOME TERM SHELL USER PATH Contenido Directorio principal del usuario Tipo de terminal del usuario Path del shell del usuario Nombre de ingreso Lista de bsqueda de programas u Ejemplo /home/larry xterm, vt100, o console /bin/bash larry /bin:/usr/bin:/usr/local/bin:/usr/bin/X11

escriben comandos en el prompt, o cuando bash est leyendo comandos de un archivo como .bashrc, a se puede decir que est interpretando los comandos. a Hay otro comando muy util para preguntar al entorno: env. env ensear un listado de todas n a las variables de entorno. Es posible, especialmente si se usa X, que la lista se salga de la pantalla. Si esto ocurre, hay que canalizar env a travs de more: env | more. e Unas cuantas de estas variables pueden ser muy utiles, as que las comentaremos. Mire la Figura 9.1.4. Estas cuatro variables estn denidas automticamente cuando se ingresa en el sistema: a a no se denen en .bashrc o .bash login. Vamos a echar un vistazo ms de cerca a la variable TERM. Para comprenderla, vamos a mirar a hacia atrs en la historia del Unix: El sistema operativo necesita conocer ciertos datos sobre su a consola para poder realizar funciones bsicas, como escribir un carcter en la pantalla, mover el a a cursor a la l nea siguiente, etc. En los primeros d de los ordenadores, los fabricantes estaban as continuamente aadiendo nuevas caracter n sticas a sus terminales: primero el v deo inverso, luego quizs juegos de carcteres europeos, eventualmente incluso primitivas funciones de dibujo (hay que a a recordar que stos eran los tiempos anteriores a los sistemas de ventanas y el ratn). Pero todas e o estas funciones representaban un problema para los programadores: Cmo iban a saber lo que un o terminal pod soportar y lo que no? Y como pod emplear nuevas caracter a an sticas sin convertir los viejos terminales en inservibles? En Unix, la respuesta a estas cuestiones fue /etc/termcap . /etc/termcap es una lista de todos los terminales que un sistema conoce, y como controlan el cursor. Si un administrador de sistema consigue un terminal nuevo, todo lo que tiene que hacer es aadir una entrada para ese n terminal en /etc/termcap en lugar de recompilar todo el Unix. A veces es incluso ms simple. Al a pasar el tiempo, el vt100 de Digital Equipment Corporation se convirti en un pseudo-estndar, y o a muchos nuevos terminales fueron construidos para que pudieran emularlo, o comportarse como si fueran un vt100. Bajo Linux, el valor de TERM es a veces console, un clnico de vt-100 con algunas caracter o sticas aadidas. n Otra variable, PATH, es tambien crucial para el funcionamiento correcto del shell. Aqu est la a m a:
/home/larry$ env | grep ^PATH PATH=/home/larry/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/TeX/bin /home/larry$

96

Cap tulo 9. Tengo que ser yo mismo!

El PATH es una lista, separada por el carcter dos puntos :, de los directorios donde el shell a buscar el nombre del programa a ejecutar. Cuando yo tecleo ls y pulso Intro , por ejemplo, a Bash primero busca en /home/larry/bin, un directorio que he hecho para guardar los programas que escribo. Pero yo no he escrito ls (de hecho, creo que se escribi antes de que yo naciera!). Como o no lo encuentra en /home/larry/bin, Bash mira despus en /biny ah hay una coincidencia! e /bin/ls existe y es ejecutable, de modo que Bash deja de buscar un programa llamado ls y lo arranca. Podr haber habido perfectamente otro ls esperando en el directorio /usr/bin, pero a bash nunca lo ejecutar si no lo pido especicando una ruta de directorios expl a cita:
/home/larry$ /usr/bin/ls

La variable PATH existe para no tener que teclear rutas de directorio completas para cada comando. Cuando se escribe un comando, Bash lo busca en los directorios nombrados en el PATH, en orden, y si lo encuentra, lo ejecuta. Si no lo encuentra, devuelve un descorts mensaje de error: e
/home/larry$ clubly clubly: command not found

Notar que en mi PATH no existe el directorio actual, .. Si estuviera, tendr este aspecto: a
/home/larry$ echo $PATH .:/home/larry/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/TeX/bin /home/larry$

Esto es asunto de debate en los c rculos de Unix (de los cuales ahora es miembro, le guste o no). El problema es que tener el directorio actual en el path puede ser un agujero en la seguridad. Supongamos que entramos en un directorio en el que alguien ha dejado un Caballo de Troya llamado ls, y hacemos un ls, como es natural despus de entrar en un directorio nuevo. Como el e directorio actual, ., viene primero en nuestro PATH, el shell encontrar esta versin de ls y la a o ejecutar. Sea cual sea el dao que hayan puesto en ese programa, lo acabamos de activar (y puede a n ser un montn de dao). Quien fuera no necesita permisos de root para hacerlo; slo hace falta o n o permisos de escritura en el directorio donde se encuentra el falso ls. Incluso podr ser su propio a directorio home, si sabe que vamos a estar husmeando por ah en algn momento. u En su propio sistema, es muy improbable que las personas se estn dejando trampas unas a otras. e Pero en un gran sistema multiusuario (como muchos ordenadores de universidades), hay un montn o de programadores hostiles con los que nunca se ha encontrado. Que quiera tentar a la suerte o no teniendo . en el path depende de la situacin; no voy a ser dogmtico en ningn sentido, slo o a u o quiero informar de los riesgos impl citos2 . Los sistemas multiusuario son verdaderas comunidades, donde la gente puede hacerles cosas a los dems en todo tipo de maneras nunca vistas. a El modo en que he dejado mi PATH incluye la mayor de lo que se ha aprendido hasta ahora a sobre variables de entorno. Esto es lo que hay actualmente en mi .bashrc:
export PATH=${PATH}:.:${HOME}/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/TeX/bin
2 Recurdese e

que siempre se puede ejecutar un programa en el directorio actual siendo expl cito, p.ej.: ./foo .

9.1. Personalizacin del bash o

97

Me aprovecho de que la variable HOME se activa antes de que Bash lea el chero .bashrc, usando su valor en la construccin del PATH. Las llaves ({...}) son un nivel aadido de cita; delimitan o n el tamao de lo que va a evaluar $, de modo que el shell no se confunda por culpa del texto n inmediatamente posterior (/bin en este caso). Aqu hay otro ejemplo del efecto que tienen:
/home/larry$ echo ${HOME}foo /home/larryfoo /home/larry$

Sin las llaves, no connseguir nada, porque no hay ninguna variable de entorno llamada HOMEfoo. a
/home/larry$ echo $HOMEfoo /home/larry$

Quisiera aclarar una cosa en este path: el signicado de $PATH. Lo que hace es incluir el valor de cualquier variable PATH previamente activada en mi nuevo PATH. Dnde se habr activado la o a u variable anterior? El archivo /etc/prole sirve como una especie de .bash prole global, comn a todos los usuarios. Tener un archivo centralizado como este hace ms sencillo para el administrador a del sistema aadir un directorio nuevo al PATH de todo el mundo, sin que cada uno tenga que hacerlo n individualmente. Si se incluye el path antiguo en el nuevo, no se perdern ninguno de los directorios a que el sistema ya haya preparado. Tambin se puede controlar como aparece el prompt. Esto se consigue mediante la variable de e entorno PS1. Personalmente, quiero un prompt que me indique el path del directorio actualas es como lo hago en mi .bashrc:
export PS1=$PWD\$

Como se puede ver, en realidad se usan dos variables. La que se activa es PS1, y toma el valor de PWD, que puede ser interpretada como Print Working Directory (imprime el directorio de trabajo) o Path to Working Directory(trayectoria al directorio de trabajo). Pero la evaluacin de PWD tiene o lugar entre apstrofos agudos. Estos apstrofos sirven para evaluar la expresin en su interior, la o o o cual a su vez evala la variable PWD. Si slo hubieramos hecho export PS1=$PWD, nuestro prompt u o nos habr mostrado constantemente el path del directorio de trabajo en el momento en que PS1 fu a e activada, en lugar de actualizarse constantemente mientras cambiamos de directorios. Bueno, es un poco confuso, y no muy importante en realidad. Slo hay que tener en cuenta que se necesita esa o clase de apstrofos si se quiere mostrar el directorio actual en el prompt. o Quiz se preera export PS1=$PWD>, o incluso el nombre del sistema: a
export PS1=hostname>

Diseccionemos este ejemplo un poco ms. Aqu se usa un nuevo tipo de literal, el apstrofo grave. a o Esta clase de literal no protege nada de hecho, hostname no aparece en ninguna parte del prompt cuando intentamos arrancarlo. Lo que sucede realmente es que se evala el comando dentro de los u apstrofos graves, y el resultado se guarda en lugar del nombre del comando entrecomillado. o

98

Cap tulo 9. Tengo que ser yo mismo!

Probemos con echo ls o wc ls. A medida que se consiga ms experiencia usando el a shell, esta tcnica se hace ms y ms potente. e a a Hay mucho ms por comentar de como se congura el chero .bashrc, y aqu no hay bastante a espacio para hacerlo. Se puede aprender ms leyendo la pgina man de bash, o preguntando a a a usuarios experimentados. Aqu hay un .bashrc completo para poder estudiarlo; es razonablemente estndar, aunque el path es un poco largo. a
# Algunas cosas al azar: ulimit -c unlimited export history_control=ignoredups export PS1=$PWD> umask 022 # paths especficos de aplicaciones: export MANPATH=/usr/local/man:/usr/man export INFOPATH=/usr/local/info export PGPPATH=${HOME}/.pgp # PATH principal: homepath=${HOME}:~/bin stdpath=/bin:/usr/bin:/usr/local/bin:/usr/ucb/:/etc:/usr/etc:/usr/games pubpath=/usr/public/bin:/usr/gnusoft/bin:/usr/local/contribs/bin softpath=/usr/bin/X11:/usr/local/bin/X11:/usr/TeX/bin export PATH=.:${homepath}:${stdpath}:${pubpath}:${softpath} # Tcnicamente, las llaves no eran necesarias, porque los dos puntos son e # delimitadores vlidos; pero las llaves son una buena costumbre, a # y no hacen da~o. n # alias alias ls="ls -CF" alias fg1="fg %1" alias fg2="fg %2" alias tba="talk sussman@tern.mcs.anl.gov" alias tko="talk kold@cs.oberlin.edu" alias tji="talk jimb@totoro.bio.indiana.edu" alias mroe="more" alias moer="more" alias email="emacs -f vm" alias pu=pushd alias po=popd alias b="~/.b" alias ds=dirs alias ro="rm *~; rm .*~" alias rd="rmdir" alias ll="ls -l" alias la="ls -a" alias rr="rm -r"

9.2. Los cheros de inicio de X Window

99

alias md="mkdir" alias ed2="emacs -d floss:0 -fg \"grey95\" -bg \"grey50\"" function gco { gcc -o $1 $1.c -g }

9.2

Los cheros de inicio de X Window

Mucha gente preere trabajar dentro de un entorno grco, y para las mquinas bajo Unix eso suele a a signicar usar X. Si se est acostumbrado al Macintosh o al Microsoft Windows, puede costar un a poco acostumbrarse al sistema X Window, especialmente al modo en que se congura. Con Macintosh o Microsoft Windows, se personaliza el entorno desde dentro: si se quiere cambiar el fondo, por ejemplo, se pulsa con el ratn sobre el nuevo color en algn programa grco especial o u a de conguracin. En X, las opciones por defecto del sistema se controlan mediante cheros de texto, o que se editan directamenteen otras palabras, se escribe el nombre del color en un chero para cambiar el color del fondo. No se puede negar que este mtodo no es tan llano como el de algunos sistemas de ventanas e comerciales. Creo que esta tendencia a permanecer basado en texto, incluso en un entorno grco, a tiene mucho que ver con el hecho de que X fu creado por un puado de programadores que simplee n mente no estaban tratando de escribir un software que pudieran usar sus abuelos. Esta tendencia puede cambiar en futuras versiones de X (por lo menos as lo espero3 ), pero por ahora, hay que aprender como entenderse con unos cuantos cheros de texto ms. Por lo menos nos da un control a muy exible y preciso de nuestra conguracin. o Aqu estn los cheros ms importantes para congurar X: a a .xinitrc .twmrc .fvwmrc Un script arrancado por X cuando se inicia. Leido por el gestor de X Window, twm. Leido por el gestor de X Window, fvwm.

Todos estos cheros deber estar en el directorio $HOME, si es que existen. an .xinitrc es una macro de shell muy simple que se ejecuta cuando invocamos a X. Puede hacer cualquiera de las cosas que pueden hacer otras macros de shell, pero por supuesto su uso principal es arrancar varios programas de X y establecer parmetros del sistema de ventanas. El ultimo a comando en .xinitrc es usualmente el nombre de un gestor de ventanas a ejecutar, por ejemplo /usr/bin/X11/twm. Qu tipo de cosas nos gustar poner en .xinitrc? Quiz algunas llamadas al programa e a a xsetroot, para hacer que la ventana de fondo (escritorio) y el ratn tengan el aspecto que deo seamos. Llamadas a xmodmap, que informa al servidor4 de como interpretar las seales del teclado. n
del T.: Yo tambin ;-) e servidor slo se reere al proceso principal en la mquina, con el que todos los dems programas de X tienen o a a que comunicar para usar la pantalla. Estos otros programas se conocen como clientes, y todo el paquete se llama
4 El 3 N.

100

Cap tulo 9. Tengo que ser yo mismo!

O cualquier otro programa que se quiera iniciar cada vez que se arranque X (por ejemplo, xclock). Aqu est una parte de mi .xinitrc; el suyo seguramente ser distinto, as que hay que tomrselo a a a slo como ejemplo: o
#!/bin/sh # La primera lnea le dice al sistema operativo que shell usar para # interpretar esta macro. La macro en s misma debe estar marcada como # ejecutable; se puede hacer con "chmod +x ~/.xinitrc". # xmodmap es un programa que informa al servidor X de como interpretar las # se~ales del teclado. Es *definitivamente* aconsejable aprender como n # funciona. Se puede probar con "man xmodmap", "xmodmap -help", # "xmodmap -grammar", y otras opciones. # No garantizo que las expresiones abajo escritas signifiquen nada en tu # sistema (ni siquiera garantizo que signifiquen algo en el mo): xmodmap -e clear Lock xmodmap -e keycode 176 = Control_R xmodmap -e add control = Control_R xmodmap -e clear Mod2 xmodmap -e add Mod1 = Alt_L Alt_R # xset es un programa para establecer otros parmetros del servidor X: a xset m 3 2 & # parmetros del ratn a o xset s 600 5 & # preferencias del salvapantallas xset s noblank & # lo mismo xset fp+ /home/larry/x/fonts # para cxterm # Para aprender ms, "xset -help". a # Ordena al servidor X que sobreponga fish.cursor sobre fish.mask, y use # el patrn resultante como cursor del ratn: o o xsetroot -cursor /home/lab/larry/x/fish.cursor /home/lab/larry/x/fish.mask & # Un placentero patrn y color de fondo: o xsetroot -bitmap /home/lab/larry/x/pyramid.xbm -bg tan # para hacer: xrdb aqu? Y que hay del fichero .Xdefaults?

# Hay que mirar "man xsetroot", o "xsetroot -help" para ms a # informacin sobre el programa usado arriba. o # Un programa cliente, el imponente reloj circular de color de Jim Blandy: /usr/local/bin/circles & # Quiz os gustara tener un reloj en la pantalla a todas horas? a /usr/bin/X11/xclock -digital &

sistema cliente-servidor.

9.2. Los cheros de inicio de X Window

101

# Permite a programas cliente de X ejecutndose en occs.cs.oberlin.edu a # mostrarse a s mismos aqu, y lo mismo para juju.mcs.anl.gov: xhost occs.cs.oberlin.edu xhost juju.mcs.anl.gov # # # # # # # # # Se puede simplemente decirle al servidor X que permita usar aqu a clientes que estn ejecutndose en cualquier otra mquina, e a a pero esto es un agujero en la seguridad -- <estos clientes pueden ser usados por cualquier otro, que puede vigilar lo que se teclea cuando se entra una contrase~a, o algo as! n Si se quiere hacerlo de todos modos, se puede usar un "+" para indicar cualquier nombre de host posible, en lugar de un nombre especfico, as: xhost +

# Y finalmente arrancar el gestor de ventanas: /usr/bin/X11/twm # Alguna gente prefiere otros gestores de ventanas. # distribuye tambin muchas veces con Linux: e # /usr/bin/X11/fvwm

Yo uso twm, pero fvwm se

Ntese que algunos comandos son iniciados en segundo plano (p.ej.: los que van seguidos de o &), mientras que otros no lo son. La distincin est en que algunos programas se iniciarn cuando o a a arranquemos X y seguirn en marcha hasta que salgamos. Los otros se ejecutan una vez y se cierran a inmediatamente. xsetroot es uno de stos; slo establece la ventana principal o el cursor a lo que e o sea, y luego se cierra. Una vez que el gestor de ventanas ha arrancado, leer su propio chero de inicio, que controla a cosas como la composicin de los mens, en qu posiciones se presentan las ventanas cuando se o u e abren, control de iconos, y otros asuntos terriblemente importantes. Si se usa twm, el chero es .twmrc en nuestro directorio home. Si se usa fvwm, el chero es .fvwmrc, etc. Explicaremos slo o estos dos, ya que son los gestores de ventanas que ms frecuentemente se encontrarn con Linux. a a

9.2.1

Conguracin de twm o

.twmrc no es una macro de shellest escrito en un lenguaje especialmente hecho para twm, cralo a e o no!5 Principalmente, a la gente en su .twmrc le gusta jugar con los estilos de la ventana (colores y dems), y hacer interesantes mens, as que ah va un .twmrc de ejemplo: a u
# Indica colores para varias partes de una ventanas. Tiene un gran impacto # en la "sensacin" que transmite el entorno. o Color {
es uno de los problemas de los cheros de conguracin: normalmente usan su propio lenguaje de comandos. o Esto signica que los usuarios se vuelven muy buenos a la hora de aprender lenguajes nuevos rpidamente. Supongo a que habr estado bien que los primeros programadores de Unix se hubieran puesto de acuerdo en algn estndar de a u a chero de inicio, pero para ser justo es dif de predecir que tipo de informaciones necesitarn los programas. cil a
5 Este

102

Cap tulo 9. Tengo que ser yo mismo!

BorderColor "OrangeRed" BorderTileForeground "Black" BorderTileBackground "Black" TitleForeground "black" TitleBackground "gold" MenuForeground "black" MenuBackground "LightGrey" MenuTitleForeground "LightGrey" MenuTitleBackground "LightSlateGrey" MenuShadowColor "black" IconForeground "DimGray" IconBackground "Gold" IconBorderColor "OrangeRed" IconManagerForeground "black" IconManagerBackground "honeydew" } # Espero que no tengas un sistema monocromo, pero si lo tienes... Monochrome { BorderColor "black" BorderTileForeground "black" BorderTileBackground "white" TitleForeground "black" TitleBackground "white" } # He creado beifang.bmp con el programa "bitmap". Aqu le digo a twm # que lo use como el patrn por defecto para destacar las barras de o # ttulo de las ventanas: Pixmaps { TitleHighlight "/home/larry/x/beifang.bmp" } # No os preocupis por estas cosas, son slo para usuarios avanzados :-) e o BorderWidth 2 TitleFont "-adobe-new century schoolbook-bold-r-normal--14-140-75-75-p-87-iso8859-1" MenuFont "6x13" IconFont "lucidasans-italic-14" ResizeFont "fixed" Zoom 50 RandomPlacement # Estos programas no tendrn una barra de ttulo por defecto a NoTitle { "stamp"

9.2. Los cheros de inicio de X Window

103

"xload" "xclock" "xlogo" "xbiff" "xeyes" "oclock" "xoid" } # "AutoRaise" significa que una ventana aparece al frente cuando el ratn o # entra en ella. Lo encuentro desconcertante, as que lo he desactivado. # Como puedes ver, he heredado mi .twmrc de otra gente a quien tampoco le # gustaba Autoraise. AutoRaise { "nothing" # No me gusta auto-raise # Ni a mi # A mi tampoco } # # # # # # # # # # Aqu es donde se define la funcin de los botones del mouse. o Ntese el patrn: Un botn del ratn pulsado en la ventana o o o o principal, si no se est pulsando ninguna tecla modificadora, siempre a hace aparecer un men. Otras posiciones usualmente producen u modificaciones de la ventana en algn modo, y las teclas modificadoras u se usan junto con los botones del ratn para acceder a las funciones o ms avanzadas de manipulacin de ventanas. a o No hay porqu seguir este patrn en .twmrc -- el cmo e o o establecer el entorno es un asunto totalmente personal

# Button = KEYS : CONTEXT : FUNCTION # ---------------------------------Button1 = : root : f.menu "main" Button1 = : title : f.raise Button1 = : frame : f.raise Button1 = : icon : f.iconify Button1 = m : window : f.iconify Button2 Button2 Button2 Button2 Button2 Button2 Button2 = = = m = = = s = s : : : : : : : root icon window title frame frame window : : : : : : : f.menu "stuff" f.move f.move f.move f.move f.zoom f.zoom

Button3 = Button3 = Button3 =

: root : title : frame

: f.menu "x" : f.lower : f.lower

104

Cap tulo 9. Tengo que ser yo mismo!

Button3 =

: icon

: f.raiselower

# Puedes escribir tus propias funciones; esta se usa en el men u # "windowops" cerca del final de este fichero: Function "raise-n-focus" { f.raise f.focus } # # # # # Muy bien, abajo estn los mens a los que me refera en la a u seccin de los botones del ratn. Ntese que muchas de estas o o o entradas de men llaman a submens a su vez. Se pueden tener tantos u u niveles como se quiera, pero no se pueden tener mens recursivos. Ya u lo he probado.

menu "main" { "Vanilla" "Emacs" "Logins" "Xlock" "Misc" }

f.title f.menu "emacs" f.menu "logins" f.menu "xlock" f.menu "misc"

# Esto me permite llamar a emacs desde varias mquinas diferentes. Ver a # la seccin sobre ficheros .rhosts para ms informacin sobre o a o # como funciona: menu "emacs" { "Emacs" f.title "here" !"/usr/bin/emacs &" "" f.nop "phylo" !"rsh phylo \"emacs -d floss:0\" &" "geta" !"rsh geta \"emacs -d floss:0\" &" "darwin" !"rsh darwin \"emacs -d floss:0\" &" "ninja" !"rsh ninja \"emacs -d floss:0\" &" "indy" !"rsh indy \"emacs -d floss:0\" &" "oberlin" !"rsh cs.oberlin.edu \"emacs -d floss.life.uiuc.edu:0\" &" "gnu" !"rsh gate-1.gnu.ai.mit.edu \"emacs -d floss.life.uiuc.edu:0\" &" } # Esto me permite llamar a xterms desde varias mquinas diferentes. a # la seccin sobre ficheros .rhosts para ms informacin sobre o a o # como funciona: menu "logins" { "Logins" f.title Ver

9.2. Los cheros de inicio de X Window

105

"here" "phylo" "geta" "darwin" "ninja" "indy" }

!"/usr/bin/X11/xterm -ls -T hostname -n hostname &" !"rsh phylo \"xterm -ls -display floss:0 -T phylo\" &" !"rsh geta \"xterm -ls -display floss:0 -T geta\" &" !"rsh darwin \"xterm -ls -display floss:0 -T darwin\" &" !"rsh ninja \"xterm -ls -display floss:0 -T ninja\" &" !"rsh indy \"xterm -ls -display floss:0 -T indy\" &"

# El salvapantallas xlock, llamado con varias opciones (cada una de # ellas da una bonita imagen): menu "xlock" { "Hop" !"xlock -mode hop &" "Qix" !"xlock -mode qix &" "Flame" !"xlock -mode flame &" "Worm" !"xlock -mode worm &" "Swarm" !"xlock -mode swarm &" "Hop NL" !"xlock -mode hop -nolock &" "Qix NL" !"xlock -mode qix -nolock &" "Flame NL" !"xlock -mode flame -nolock &" "Worm NL" !"xlock -mode worm -nolock &" "Swarm NL" !"xlock -mode swarm -nolock &" } # Programas de todo tipo que uso ocasionalmente: menu "misc" { "Xload" !"/usr/bin/X11/xload &" "XV" !"/usr/bin/X11/xv &" "Bitmap" !"/usr/bin/X11/bitmap &" "Tetris" !"/usr/bin/X11/xtetris &" "Hextris" !"/usr/bin/X11/xhextris &" "XRoach" !"/usr/bin/X11/xroach &" "Analog Clock" !"/usr/bin/X11/xclock -analog &" "Digital Clock" !"/usr/bin/X11/xclock -digital &" } # Esto es para menu "stuff" { "Chores" "Sync" "Who" "Xhost +" "Rootclear" } lo que uso el botn central del ratn: o o

f.title !"/bin/sync" !"who | xmessage -file - -columns 80 -lines 24 &" !"/usr/bin/X11/xhost + &" !"/home/larry/bin/rootclear &"

# Funciones de X que a veces conviene usar:

106

Cap tulo 9. Tengo que ser yo mismo!

menu "x" { "X Stuff" "Xhost +" "Refresh" "Source .twmrc" "(De)Iconify" "Move Window" "Resize Window" "Destroy Window" "Window Ops" "" "Kill twm" }

f.title !"xhost + &" f.refresh f.twmrc f.iconify f.move f.resize f.destroy f.menu "windowops" f.nop f.quit

# Este es un submen del de arriba: u menu "windowops" { "Window Ops" f.title "Show Icon Mgr" f.showiconmgr "Hide Icon Mgr" f.hideiconmgr "Refresh" f.refresh "Refresh Window" f.winrefresh "twm version" f.version "Focus on Root" f.unfocus "Source .twmrc" f.twmrc "Cut File" f.cutfile "(De)Iconify" f.iconify "DeIconify" f.deiconify "Move Window" f.move "ForceMove Window" f.forcemove "Resize Window" f.resize "Raise Window" f.raise "Lower Window" f.lower "Raise or Lower" f.raiselower "Focus on Window" f.focus "Raise-n-Focus" f.function "raise-n-focus" "Destroy Window" f.destroy "Kill twm" f.quit }

Guau! Creedme, este no es el .twmrc ms largo que he llegado a ver. Es probable que con a vuestra versin de X vinieran algunos ejemplos de archivos .twmrc bastante decentes. Se pueden o buscar dentro del directorio /usr/lib/X11/twm/ o en /usr/X11/lib/X11/twm. Un defecto de programa que hay que vigilar en los cheros .twmrc es no olvidarse de poner el & despus de un comando en un men. Si se nota que X se cuelga cuando se usan ciertos e u

9.3. Otros cheros de inicio

107

comandos, lo ms probable es que sta sea la causa. Hay que salir de X con Ctrl - Alt - Retroceso , a e editar .twmrc, y probar otra vez.

9.2.2

Conguracin de fvwm o

Si se usa fvwm, el directorio /usr/lib/X11/fvwm/ (o /usr/X11/lib/X11/fvwm/) tiene algunos ejemplos de cheros de conguracin. o [Companeros: No s nada sobre fvwm, aunque supongo que sacar algo en claro de los cheros n e e de ejemplo, igual que el lector :-). Adems, dado el pequeo pero decente system.twmrc en el a n directorio arriba mencionado, me pregunto si vale la pena que de este largo ejemplo con mi propio .twmrc. De momento est aqu pero no s si lo dejaremos o no.-Karl] a , e

9.3

Otros cheros de inicio

Otros cheros de inicio dignos de mencin son: o .emacs .netrc .rhosts .forward Leido por el editor de texto Emacs cuando arranca. Da los nombres y contraseas por defecto para ftp. n Hace una cuenta accesible remotamente. Para redireccin automtica del correo. o a

9.3.1

El chero de conguracin de Emacs o

Si se usa emacs como editor principal, entonces el chero .emacs es muy importante. Se discute con extensin en el Cap o tulo 8.

9.3.2

Conguracin por defecto del FTP o

El chero .netrc permite tener ciertas conguraciones por defecto cada vez que se arranca ftp. Aqu hay un pequeo .netrc de ejemplo: n
machine machine machine machine machine machine machine machine machine machine machine machine floss.life.uiuc.edu login larry password fishSticks darwin.life.uiuc.edu login larry password fishSticks geta.life.uiuc.edu login larry password fishSticks phylo.life.uiuc.edu login larry password fishSticks ninja.life.uiuc.edu login larry password fishSticks indy.life.uiuc.edu login larry password fishSticks clone.mcs.anl.gov login fogel password doorm@ osprey.mcs.anl.gov login fogel password doorm@ tern.mcs.anl.gov login fogel password doorm@ altair.mcs.anl.gov login fogel password doorm@ dalek.mcs.anl.gov login fogel password doorm@ juju.mcs.anl.gov login fogel password doorm@

108

Cap tulo 9. Tengo que ser yo mismo!

machine sunsite.unc.edu login anonymous password larry@cs.oberlin.edu

Cada l nea de .netrc especica un nombre de mquina, un nombre de cuenta de acceso a usar a por defecto con esa mquina, y una contrasea. Esto es muy util si se usa ftp continuamente y se a n est harto de teclear el nombre de acceso y la contrasea en cada uno. El programa de ftp intentar a n a acceder automticamente usando los datos del chero .netrc, si se hace ftp a una de las mquinas a a listadas all . Se puede obligar a ftp a ignorar el chero .netrc y no intentar acceder de manera automtica, a arrancndolo con la opcin -n: ftp -n. a o Hay que asegurarse de que el chero .netrc slo es legible por el usuario. Se puede usar el o programa chmod para establecer los permisos de lectura. Si otra gente puede leerlo, signica que pueden encontrar su contrasea de acceso a varios otros ordenadores. Esto es un agujero en la n seguridad tan grande como uno pueda tenerlo. Como recomendacin para ser cuidadoso, ftp y o otros programas que miran el chero .netrc no funcionarn si los permisos de lectura del chero a son incorrectos. Hay mucho ms sobre el chero .netrc de lo que se ha explicado aqu Cuando se tenga una a . oportunidad, hay que probar man .netrc o man ftp.

9.3.3

Permitiendo un acceso remoto sencillo a su cuenta

Si tiene un chero .rhosts en su directorio $HOME, le permitir usar programas en esta mquina a a de forma remota. Por ejemplo, se puede estar registrado en la mquina cs.oberlin.edu, pero con a un .rhosts correctamente congurado en floss.life.uiuc.edu, se puede usar un programa en floss y presentar el resultado en cs, sin tener que registrarse o teclear una contrasea frente a n floss. El archivo .rhosts se ve ms o menos as a :
frobnozz.cs.knowledge.edu jsmith aphrodite.classics.hahvaahd.edu wphilps frobbo.hoola.com trixie

El formato es muy directo: un nombre de mquina, seguido de un nombre de usuario. Supongaa mos que este ejemplo es en realidad mi archivo .rhosts en floss.life.uiuc.edu. Esto signicar a que puedo usar programas en floss, y ver el resultado en cualquiera de las mquinas listadas, siema pre y cuando yo est tambin registrado como el usuario correspondiente a cada mquina cuando e e a intento ejecutar el programa. El mecanismo exacto con el que uno usa un programa remoto es normalmente el programa rsh. Signica remote shell(shell remoto), y lo que hace es iniciar un shell en la mquina remota y a ejecutar el comando especicado. Por ejemplo:

9.3. Otros cheros de inicio

109

frobbo$ whoami trixie frobbo$ rsh floss.life.uiuc.edu "ls ~" foo.txt mbox url.ps snax.txt frobbo$ rsh floss.life.uiuc.edu "more ~/snax.txt" [snax.txt aparece pagina a pagina aqui]

El usuario trixie en floss.life.uiuc.edu, que ten el chero .rhosts de ejemplo mosa trado antes, permite explicitamente a trixie en frobbo.hoola.com usar programas como si fuera trixie de floss. No hay porqu tener el mismo nombre de usuario en todas las mquinas para que .rhosts e a funcione. Se puede usar la opcin -l con rsh para especicar a la mquina remota cual nombre o a de usuario se quiere usar para registrarse. Si ese nombre existe en la mquina remota, y tiene un a chero .rhosts con el nombre de la mquina local y el nombre de usuario correspondiente, entonces a la orden inclu con rsh se ejecutar. da a
frobbo$ whoami trixie frobbo$ rsh -l larry floss.life.uiuc.edu "ls ~" [Inserta aqui un listado de mi directorio en floss]

Esto funcionar si el usuario larry en floss.life.uiuc.edu tiene un chero .rhosts que a permite a trixie de frobbo.hoopla.com usar programas en su cuenta. Si son o no la misma persona es irrelevante: la unica cosa importante son los nombres de usuario, los nombres de las mquinas y la la referente a floss en el .rhosts de Larry. Ntese que el chero .rhosts de a o Trixie en frobbo no importa, slo cuenta el de la mquina remota. o a Hay otras combinaciones que se pueden poner en un chero .rhosts por ejemplo, se puede dejar en blanco el nombre de usuario detrs del nombre de una mquina remota, para permitir a a a cualquier usuario de esa mquina que ejecute programas en la mquina local. Esto es, por supuesto, a a un riesgo en la seguridad: alguien podr ejecutar remotamente un programa que borre mis archivos, a por el simple hecho de tener una cuenta en cierta mquina. Si se va a hacer cosas como esta, entonces a hay que asegurarse de que el chero .rhosts es legible slo por el usuario implicado, y por nadie o ms. a

9.3.4

Redireccin de correo o

Tambin se puede tener un chero .forward, el cual no es un chero de conguracin estrictamente e o hablando. Si contiene direcciones de e-mail, entonces todo el correo que llegue al usuario se redirigir a a esas direcciones. Esto es util cuando se tienen cuentas en varios sistemas, pero se quiere leer el correo desde un solo sitio. Hay una gran cantidad de otros cheros de conguracin posibles. La cantidad exacta variar de o a sistema a sistema, y depende de los programas instalados. Una manera de saber ms es mirar todos a los archivos en el directorio $HOME que empiecen por .. No es seguro que todos sean cheros de conguracin, pero seguro que la mayor s lo es. o a

110

Cap tulo 9. Tengo que ser yo mismo!

9.4

Veamos algunos ejemplos

El ejemplo denitivo que puedo dar es mostrar un sistema Linux en funcionamiento. As que, si tenis acceso a Internet, estis invitados a hacer telnet a floss.life.uiuc.edu. Registros como e a a guest, contrasea explorer, y husmead por dentro. Muchos de los archivos de ejemplo se pueden n encontrar en /home/kfogel, pero tambin hay otros directorios de usuarios. Sois libres de copiar e cualquier cosa que se pueda leer. Por favor tened cuidado: floss no es un sitio terriblemente seguro, y ciertamente se puede conseguir acceso como root si uno lo intenta lo suciente. Preero creer en la conanza, ms que en la vigilancia constante, para mantener la seguridad. a

Cap tulo 10

Hablando con los dems a


Una nocin fundamental de Usenet es que es una cooperativa. o Cuando ya van para diez los aos que llevo en Usenet, discrepo con lo anterior. La n nocin fundamental de Usenet es el insulto airado. o Chuq Von Rospach Los modernos sistemas operativos tipo Unix son muy buenos a la hora de hablar con otras mquinas y funcionar en red. Dos mquinas Unix diferentes pueden intercambiar informacin de a a o muchas, muchas maneras distintas. Este cap tulo va a intentar contar cmo se puede sacar provecho o de esta gran facilidad para la comunicacin. o Trataremos de cubrir el correo electrnico, las noticias de Usenet, y diversas utilidades bsicas o a de comunicaciones de Unix.

10.1

Correo electrnico o

Una de las facilidades ms populares que ofrece Unix de forma estndar es el correo electrnico. a a o Con l evitamos el habitual folln de buscar un sobre, una hoja de papel, un lpiz, un sello, y un e o a servicio postal. A cambio debemos enfrentarnos al folln de pelear con el ordenador. o

10.1.1

Enviar correo

Todo lo que hay que hacer es teclear mail nombre y escribir el mensaje. Por ejemplo, supongamos que queremos enviar correo a un usuario que se llama sam:
/home/larry$ mail sam Subject: Documentacion del usuario Solo estoy probando el sistema de correo. [Ctrl-d]

111

112

Cap tulo 10. Hablando con los dems a

/home/larry$ /home/larry$

El programa mail es muy simple. Como cat, acepta texto de la entrada estndar, l a nea a l nea, hasta que recibe un caracter de n-de-texto como unico carcter en una l a nea: Ctrl-d . As para , e enviar nuestro mensaje, tuvimos que pulsar Intro y despus Ctrl-d . Usar mail es la manera ms rpida de mandar correo, y es bastante util cuando se usa con redia a reccin de entrada y/o salida. Por ejemplo, si quisiramos enviar por correo electrnico el chero reo e o port1 a Sam, podr amos escribir mail sam < report1, o incluso sort report1 | mail sam. Sin embargo, la desventaja de usar mail para enviar correo es su primitiv simo editor. No se puede cambiar ni una l nea una vez se ha pulsado Intro ! As que yo recomiendo mandar correo (cuando no se use redireccin) con el modo mail del Emacs. El tema se trata en la Seccin 8.10. o o

10.1.2

Leer el correo

mail [nombre]
El programa mail ofrece una forma algo liosa de leer el correo. Si se teclea mail sin parmetros, aparecer lo siguiente: a a
/home/larry$ mail No mail for larry /home/larry$

No mail for larry signica: No hay correo para larry. Me voy a enviar correo a m mismo para poder utilizar el lector:
/home/larry$ mail larry Subject: Sapos! Y ranas! EOT /home/larry$ echo "culebras" | mail larry /home/larry$ mail Mail version 5.5 6/1/90. Type ? for help. "/usr/spool/mail/larry": 2 messages 2 new >N 1 larry Tue Aug 30 18:11 N 2 larry Tue Aug 30 18:12 &

10/211 9/191

"Sapos!"

El s mbolo peticin de ordenes del programa mail es un et a la inglesa (&). Acepta un par de o ordenes sencillas, y muestra una breve pantalla de ayuda si se pulsa ? seguido de Intro . Las ordenes bsicas de mail son: a

10.2. Noticias ms que de sobra a

113

t lista-de-mensajes Mostrar los mensajes en la pantalla. d lista-de-mensajes Borrar los mensajes. s lista-de-mensajes chero Guardar los mensajes en chero. r lista-de-mensajes Responder a los mensajesesto es, comenzar a escribir un nuevo mensaje dirigido a quien fuera que envi los mensajes referidos. o q Salir y guardar los mensajes que no hayan sido borrados en un chero llamado mbox en el directorio ra del usuario. z

Qu es una lista-de-mensajes? Consiste en una lista de nmeros separados por espacios, o incluso e u un rango de los mismos como 2-4 (lo que es equivalente a 2 3 4). As mismo se puede introducir el nombre del remitente, de este modo la orden t sam mostrar todos los mensajes provinientes de a Sam. Si se omite la lista-de-mensajes, se supone que la orden se reere al ultimo mensaje mostrado. Leer el correo con el programa mail presenta varios inconvenientes. El primero es que si un mensaje es ms largo que la pantalla, el programa mail no se detiene! Habr que guardar el a a mensaje en un chero y usar more sobre l despus. El segundo es que no ofrece una buena interfaz e e para manejar el correo antiguo cuando se quiere guardar el correo para leerlo ms tarde. a Emacs tambin permite leer el correo con rmail, pero este libro no lo cubre. Adicionalmente e la mayor de los sistemas Linux vienen con algunos lectores de correo adicionales adems de mail, a a como elm, o pine.

10.2 10.3

Noticias ms que de sobra a Localizar a la gente

El programa finger permite obtener informacin de otros usuarios del sistema y de todo el mundo. o Sin duda el programa finger recibi este nombre por los anuncios de la AT&T que exhortaban a la o gente a salir y tocar a alguien. Dado que el Unix tiene sus origenes en la AT&T, probablemente eso le hiciera gracia al autor.

finger [-slpm] [usuario][@maquina]


Los parmetros opcionales de finger pueden resultar algo liosos. La verdad es que no es tan a dif cil. Se puede solicitar informacin de un usuario local (sam), informacin de otra mquina o o a (@lionsden), informacin sobre un usuario remoto (sam@lionsden), o simplemente informacin o o sobre la mquina local (nada). a Otra caracteristica es que si se pide informacin sobre un usuario y no hay ningn nombre de o u cuenta que coincida exactamente con el dado, tratar de emparejar el nombre real con lo que se a

114

Cap tulo 10. Hablando con los dems a

haya especicado. Eso signica que si ejecutamos finger Greenfield, nos contestar que existe a la cuenta sam de Sam Greeneld.
/home/larry$ finger sam Login: sam Name: Sam Greenfield Directory: /home/sam Shell: /bin/tcsh Last login Sun Dec 25 14:47 (EST) on tty2 No Plan. /home/larry$ finger greenfie@gauss.rutgers.edu [gauss.rutgers.edu] Login name: greenfie In real life: Greenfie Directory: /gauss/u1/greenfie Shell: /bin/tcsh On since Dec 25 15:19:41 on ttyp0 from tiptop-slip-6439 13 minutes Idle Time No unread mail Project: Debes estar bromeando! de que proyecto me hablas? No Plan. /home/larry$ finger Login Name Tty Idle Login Time Office larry Larry Greenfield 1 3:51 Dec 25 12:50 larry Larry Greenfield p0 Dec 25 12:51 /home/larry$

Office Phone

La opcin -s hace que finger utilize siempre la forma abreviada (la que se obtiene normalo mente cuando se hace finger a una mquina), y la opcin -l hace que use siempre la forma a o larga, incluso al hacer finger a una mquina. La opcin -p hace que finger no muestre los a o cheros .forward, .plan, ni .project, y la -m hace que, cuando se ha pedido informacin sobre o un usuario, slo de informacin de un nombre de cuenta que no intente emparejar el nombre que o o se le da con un nombre real.

10.3.1

Planes y proyectos

Pero, qu es eso de .plan y .project? Son cheros que existen en el directorio ra de un usuario e z y que se muestran cuando se le hace finger. Cada uno puede crear sus propios cheros .plan y .project la unica restriccin es que slo se muestra la primera l o o nea del chero .project. Adems, todo el mundo debe tener permisos de bsqueda (la x de ejecucin) del directorio ra a u o z del usuario en cuestin (chmod a+x ~/) y debe ser posible para todo el mundo leer los cheros o .plan y .project (chmod a+r ~/.plan ~/.project).

10.4

Uso remoto de sistemas

telnet sistema-remoto

10.5. Intercambio de cheros

115

La forma ms habitual de usar un sistema Unix remoto es con telnet. telnet es normalmente a un programa muy sencillo de usar:
/home/larry$ telnet lionsden Trying 128.2.36.41... Connected to lionsden Escape character is ^]. lionsden login:

Como puede verse, despues de teclear telnet, se nos presenta un mensaje de acceso al sistema remoto. Podemos introducir cualquier nombre de usuario (siempre que conozcamos la contrasea!) n y despus usar el sistema remoto casi como si estuviramos sentados all e e . La manera normal de salir de telnet es hacer logout en el sistema remoto. Otra forma es tecleando la secuencia de escape, que (como en el ejemplo de arriba) es habitualmente Ctrl-] . Esto nos presenta un nuevo s mbolo del peticin de ordenes: telnet>. Entonces podemos teclear o quit y Intro y la conexin con el otro sistema ser cerrada y el programa telnet nalizar. (Si o a a amos al sistema remoto). cambiramos de idea, simplemente pulsando Intro volver a Si se estn usando las X, se puede crear un nuevo xterm para el otro sistema al que estamos a saltando. Con la orden xterm -title "lionsden" -e telnet lionsden & crearemos una nueva ventana xterm que automticamente ejecute telnet. (Si eso se hace con frecuencia, probablemente a ser deseable crear un alias o un programa de shell que lo haga automticamente.) a a

10.5

Intercambio de cheros

ftp sistema-remoto
La manera usual de intercambiar cheros entre sistemas Unix es ftp, acrnimo que proviene de o file transfer protocol (protocolo de transferencia de cheros). Tras ejecutar la orden ftp, se nos pedir que nos identiquemos, de forma muy parecida a con telnet. Despus de hacerlo aparece a e un s mbolo de peticin de ordenes especial: el s o mbolo ftp. La orden cd funciona de la manera habitual, pero en el sistema remoto: cambia de directorio en el otro sistema. De la misma forma, la orden ls lista los cheros en el sistema remoto. Las dos ordenes ms importantes son get y put. get transere un chero del sistema a remoto al local, y put lleva un chero del sistema local al remoto. Ambas ordenes tienen efecto en el directorio local en el que se haya arrancado ftp y en el directorio remoto en el que se est en ese e momento (que se puede haber cambiado con la orden cd). Un problema habitual con ftp es la distincin entre cheros de texto y binarios. ftp es un o protocolo muy antiguo, y antes ten ventajas suponer que los cheros que se transfer eran de a an texto. El comportamiento por omisin de algunas versiones de ftp es se, lo que signica que los o e

116

Cap tulo 10. Hablando con los dems a

programas que se env o reciban se corrompern. Por seguridad conviene usar la orden binary en a antes de empezar a transferir cheros. Para salir de ftp se usa la orden bye.

10.6

Viajando por la telara a n

La Telaraa Mundial (World Wide Web), o WWW, es un uso muy popular de la Internet. Consiste en n un conjunto de pginas, cada una con su propia URLLocalizador Uniforme de Recursos asociado. a Los URLs son simpticas secuencias de caracteres de la forma <http://www.rutgers.edu/>. Las a pginas estn por lo general escritas en HTML (Lenguaje de Composicin de Hipertexto). a a o El HTML permite al autor de un documento enlazar ciertas palabras, frases, o imgenes, con otros a documentos que se hallen en cualquier lugar de la telaraa. Cuando un usuario lee un documento, n puede moverse rpidamente a otro picando en una palabra clave o en un botn y se le mostrar el a o a otro documento en cuestinque posiblemente est a miles de kilmetros del primero. o e o

netscape [url]
El navegador ms popular de Linux es netscape; se trata de un navegador comercial que vende a (y regala) Netscape Communications Corporation. netscape slo funciona con las X. o netscape trata de ser tan fcil de usar como sea posible y utiliza el conjunto de widgets Motif a para lograr una apariencia muy a lo Microsoft Windows. El conocimiento bsico para poder usar a netscape es que las palabras azules subrayadas son enlaces, as como muchas de las imgenes. (Se a puede averiguar cuales imgenes son enlaces picando en ellas.) Picando en esas palabras con el botn a o izquierdo del ratn, aparece una nueva pgina. o a Linux soporta muchos navegadores ms, incluyendo el navegador original lynx. lynx es un a navegador orientado a textono muestra ninguna imagen que es con lo que actualmente se relaciona al Webpero funciona sin las X.

lynx [url]
Es un poco ms complicado aprender a usar lynx, pero normalmente se le coge el truco despus a e de jugar un rato con las echas del cursor. Las echas hacia arriba y hacia abajo nos mueven entre los enlaces de una pgina. La echa hacia la derecha sigue el enlace seleccionado (resaltado). La a echa hacia la izquierda vuelve a la pgina anterior. Para salir de lynx, se debe pulsar q . lynx a tiene muchas ordenes msconsltese la pgina del manual. a u a

Cap tulo 11

Comandos divertidos
Bueno, la mayor de la gente que tiene que ver con los comandos de UNIX expuestos en este a cap tulo no estarn de acuerdo con este t a tulo. Que diablos! Se me ha enseado que el interfaz n del Linux es muy estndar, y ahora tenemos un grupo de comandos, cada uno trabajando de una a manera completamente diferente. Nunca recordar todas esas opciones, y dice que son divertidos? e S Vd. ha visto un ejemplo del humor de los hackers1. Adems, m , a relo desde el lado positivo: no hay comandos del MS-DOS equivalentes a stos. Si los necesita, tiene que adquirirlos por separado, e y nunca sabr como ser su interfaz. Aqu hay un util y econmico valor aadido, as que a a o n disfrtelo!!. u El conjunto de comandos explicados en este cap tulo cubre find, que permite al usuario buscar grupos de cheros especicados dentro del arbol de directorios; tar, util para empaquetar algn u archivo para ser enviado o slo salvado; dd, el multicopista de bajo nivel; y sort, el cual . . . s clasica o , cheros. Una ultima condicin: estos comandos no estn bajo ningn concepto estandarizados, y si o a u bien podr amos encontrar un ncleo de opciones comunes en todos los sistemas IX, las versiones (de u GNU) que se explican ms abajo, y Vd. puede encontrar en su sistema Linux, usualmente poseen a muchas ms capacidades. Por tanto, si Vd. planea usar otros sistemas operativos UNIX, por favor, a no olvide comprobar la pgina del manual del sistema en cuestin para aprender las quizs no tan a o a pequeas diferencias. n

11.1
11.1.1

find, el buscador de cheros


Generalidades

Entre los diversos comandos vistos hasta aqu hab algunos que permit al usuario bajar recursi, a an vamente el arbol del directorio para llevar a cabo alguna accin: los ejemplos cannicos son ls -R o o y rm -R. Bien. find es el comando recursivo. Cada vez que piense Bueno, tengo que hacer tal cosa con todos esos cheros en mi propia particin, har mejor en pensar en usar find. En o a
1 N.T.:

La palabra Hacker en este contexto se reere a una persona con profundos conocimientos de informtica. a

117

118

Cap tulo 11. Comandos divertidos

cierto sentido el hecho que find encuentre cheros es solo un efecto secundario: su ocupacin real o es evaluar. La estructura bsica del comando es como sigue: a

find ruta [. . . ] expresin [. . . ] o


Esto es al menos en la versin de GNU; otras versiones no permiten especicar ms que una ruta, o a y adems es muy infrecuente la necesidad de hacer tal cosa. La explicacin burda de la sintaxis del a o comando es bastante simple: Vd. indica desde dnde quiere empezar la bsqueda (la parte de la o u ruta; con el find de GNU puede omitir esto y ser tomado por defecto el directorio en uso .), y que a clase de bsqueda quiere realizar (la parte de la expresin). u o El comportamiento estndar del comando es un poco engaoso, por lo que ms vale tenerlo en a n a cuenta. Supongamos que en su directorio principal de usuario existe un directorio llamado basura, el cual contiene un chero foobar. Vd. felizmente escribe find . -name foobar(lo que como puede adivinar busca cheros llamados foobar), y obtiene . . . nada ms que otra vez el prompt. El a problema reside en el hecho de que find es por defecto un comando silencioso; slo devuelve 0 si la o bsqueda fue completada (con o sin haber encontrado algo) o un valor distinto de cero si hubiera u habido algn problema. Esto no ocurre con la versin que Vd. puede encontrar en el Linux, pero u o de todas maneras es util recordarlo.

11.1.2

Expresiones

La parte de la expresin puede ser dividida en cuatro grupos diferentes de palabras clave: opciones, o tests, acciones, y operadores. Cada uno de ellos puede devolver un valor verdadero/falso, junto con un efecto secundario. La diferencia entre los grupos se muestra a continuacin. o opciones afecta a la funcin general de find, ms que al procesamiento de un solo chero. Un o a ejemplo es -follow, el cual instruye a find para seguir enlaces simblicos en vez de slo o o presentar el nodo-i. Siempre devuelven verdadero. tests son verdaderos tests (por ejemplo, -empty comprueba si el chero est vac a o), y puede devolver verdadero o falso. acciones tienen tambin un efecto secundario sobre el nombre del chero considerado. Pueden e asimismo devolver verdadero o falso. operadores no devuelven realmente un valor (convencionalmente pueden ser considerados como verdaderos), y se usan para construir expresiones sintticas. Un ejemplo es -or, el cual hace e la OR lgica de las dos subexpresiones a su lado. Note que cuando se yuxtaponen expresiones, o est involucrada una -and. a Debe advertir que find depende del intrprete de comandos para tener la l e nea de comandos analizada sintcticamente: esto signica que todas las palabras clave deben ser introducidas entre a

11.1. find, el buscador de cheros

119

espacios en blanco y adems, que hay un montn de caracteres bonitos que debern precederse de a o a escape, si no ser destrozados por el propio intrprete de comandos. Cada v de escape (barra an e a invertida, simples y dobles comillas) est bien; en los ejemplos las palabras clave de un solo carcter a a se sealizarn en general mediante con una barra invertida, porque es la manera ms simple (al n a a menos en mi opinin. Y soy yo quien est escribiendo estas notas!). o a

11.1.3

Opciones

Aqu est la lista de todas las opciones conocidas de la versin GNU de find. Recuerde que siempre a o devuelven verdadero. -daystart mide el tiempo transcurrido no desde hace 24 horas si no desde la ultima medianoche. Un autntico hacker probablemente no entender la utilidad de tal opcin, pero un trabajador e a o que programa de ocho a cinco si lo apreciar. a -depth procesa el contenido de cada directorio antes que el directorio en si. A decir verdad, no conozco muchos usos de esto, aparte de una emulacin del comando rm -F (por supuesto o Vd. no puede borrar un directorio antes de que todos sus cheros sean borrados tambin . . . e -follow respeta (es decir, sigue) los enlaces simblicos. Implica la opcin -noleaf; ver abajo. o o -noleaf desactiva una optimizacin que dice Un directorio contiene dos subdirectorios menos que o su cuenta de enlaces r gidos2. Si el mundo fuera perfecto, todos los directorios ser refean renciados por cada uno de sus subdirectorios (a causa de la opcin ..), como . dentro de s o mismo, y por su nombre real desde su directorio padre. Esto signica que cada directorio debe ser referenciado al menos dos veces (una por s mismo, otra por su directorio padre) y cualquier referencia adicional es por subdirectorios. En la prctica, sin embargo, los enlaces simblicos y los sistemas de chero distribuidos 3 pueden a o alterar esto. Esta opcin hace que find funcione ligeramente ms despacio, pero debe dar los o a resultados esperados. -maxdepth niveles, -mindepth niveles, donde niveles es un entero no negativo. Indican respectivamente que a lo sumo o que al menos niveles de directorios deber explorarse. Un par de an ejemplos son obligados: -maxdepth 0 indica que el comando deber realizarse slo sobre a o los argumentos de la l nea de comandos, es decir, sin bajar recursivamente el arbol de directo rios; -mindepth 1 inhibe el procesamiento del comando para los argumentos en la l nea de comandos, pero se consideran todos los otros cheros debajo. -version imprime la versin en uso del programa. o -xdev, el cual es un nombre engaoso, instruye a find para no cruzarse de dispositivo 4 , es decir, n no cambiarse de sistema de cheros. Es muy util cuando se tiene que buscar algo en el
hard link count sistemas de chero distribuidos permiten a los cheros mostrarse como si fueran locales a una mquina cuando a realmente estn situados en algn otro lugar. a u 4 N.T.: to cross device
3 Los 2 N.T.

120

Cap tulo 11. Comandos divertidos

sistema de cheros ra en muchas mquinas es una particin algo pequea, pero, sino, un z; a o n find / buscar en la estructura entera! Podemos as evitar los sistemas de archivo que no a son promisorios.

11.1.4

Test

Los dos primeros test son muy simples de comprender: -false siempre devuelve falso, mientras que -true siempre devuelve verdadero. Otros test que no necesitan la especicacin de un valor o son -empty, el cual devuelve verdadero si el chero est vac y el par -nouser/-nogroup, los a o, cuales devuelven verdadero en el caso que ninguna entrada en /etc/passwd o /etc/group cuadre con el identicador de usuario/grupo del propietario del chero. Veamos un problema comn en los u sistemas multiusuario: se borra un usuario, pero los cheros pertenecientes a l permanecen en la e parte ms extraa de los sistemas de cheros, y debido a las leyes de Murphy ocupan mucho espacio. a n El par de test que hemos visto en ultimo lugar nos permitir encontrar esos archivos. a Por supuesto, es posible buscar un usuario o grupo espec co. Los test son -uid nn y -gid nn. Desafortunadamente no es posible dar directamente el nombre del usuario, sino que es necesario usar el identicador numrico, nn. e Adems est permitido usar las formas +nn, que signica un valor estrictamente ms grande a a a que nn, y nn, que signica un valor estrictamente ms pequeo que nn. Esto es bastante a n estpido en el caso de identicadores de usuario5 , pero se volver prctico con otros test. u a a Otra opcin util es -type c, la cual devuelve verdadero si el chero es del tipo especial de o carcter. Los mnemnicos para las posibles selecciones son las mismas letras que se encuentran en ls; a o entonces, tenemos bloque cuando el chero es uno especial de bloque; directorio; pipes para tuber as 6 7 designadas ; link para enlaces simblicos, y socketssockets . Los cheros regulares se indican con file. o Un test relacionado es -xtype, que es similar a -type excepto en el caso de enlaces simblicos. o Si se ha proporcionado la opcin -follow, se examina el enlace, en lugar del chero al que se o apunta. El test -fstype type no tiene nada que ver; en este caso, lo que se examina es el tipo del sistema de cheros. Creo que la informacin se consigue del chero /etc/mtab, el unico que o presenta los sistemas de cheros montados; estoy seguro que los tipos nfs, tmp, msdos y ext2 estn a entre los reconocidos. Los test -inum nn y -links nn examinan si el chero tiene nmero de nodo-i nn, o nn u enlaces, mientras que -sizenn es verdadero si el chero tiene nn bloques de 512 bytes asignados. (Bueno, no precisamente; para cheros disgregados los bloques no asignados tambin se cuentan). e Como hoy en d el resultado de ls -s no siempre se mide en trozos de 512 bytes (Linux, por a ejemplo, usa 1 kbyte como la unidad), es posible adicionar a nn el caracter b, el cual signica contar en bytes, o k, contar en kilobytes. Los bits de permiso son examinados a travs del test -perm mode . Si el modo no est antee a cedido por un signo, entonces los bits de permiso del chero deben cuadrar exactamente con ellos. Un - al principio signica que todos los bits de permiso deben ser puestos a uno, pero no hace
5 N.T.: 6 N.T.:

UIDs named pipes 7 N.T.: enchufe

11.1. find, el buscador de cheros

121

suposiciones sobre los otros; un + al principio se satisface slo si cualquiera de los bits est a uno. o a Ups! Olvid decir que el modo se escribe en octal o simblicamente, como se usa en chmod. e o El prximo grupo de test est relacionado con el tiempo que hace que se ha utilizado un chero o a por ultima vez. Esto viene bien cuando un usuario ha llenado su espacio, ya que usualmente hay muchos cheros que no usaba desde hace aos, y cuyo signicado ha olvidado. El problema es n localizarlos, y find es la unica esperanza a la vista. -atime nn es verdadero si la ultima vez que se accedi al chero fue hace nn d -ctime nn si el estado del chero fue cambiado por o as; ultima vez hace nn d por ejemplo, con un chmod y -mtime nn si el chero fue modicado as por ultima vez hace nn d as. Algunas veces Vd. necesita una marca de tiempo 8 ms precisa; el a test -newer archivo se satisface si el chero considerado ha sido modicado ms tarde que el a archivo. Por lo tanto, Vd. slo tiene que usar touch con la fecha deseada, y ya est. El find de o a GNU aade los test -anewer y -cnewer los cuales se comportan de una manera similar; y los n test -amin, -cmin y -mmin que cuentan el tiempo en minutos en vez de per odos de 24 horas. Por ultimo pero no menos importante, el test que yo uso ms a menudo. -name patrn a o es verdadero si el nombre del chero concuerda exactamente con patrn, el cual es ms o menos o a el unico que se usar en un ls estndar. (Por qu ms o menos ? Porque, por supuesto, Vd. a a e a tiene que recordar que todos los parmetros son procesados por el intrprete de comandos, y esos a e encantadores metacaracteres sufren una expansin. As un test como -name foo* no devolver lo o , a que Vd. desea, y Vd. deber escribir cualquiera de los dos -name foo o -name "foo*". Este es a probablemente uno de los ms comunes errores cometidos por usuarios descuidados, as que escr a balo en letras GRANDES en su pantalla. Otro problema es que, como con ls, no se reconocen los puntos al principio del nombre del archivo. Para hacer frente a esto, puede usar el test -path patrn o el cual no se preocupa acerca de los puntos y barras inclinadas cuando compara la ruta del chero considerado con patrn. o

11.1.5

Acciones

Hemos dicho que las acciones son aquellas que realmente hacen algo. Bueno, -prune ms bien no a hace nada, es decir, al descender el arbol de directorios (a menos que se le agregue -depth). Se la encuentra usualmente junto con -fstype, para elegir entre varios sistemas de cheros a aquellos que deber examinarse. an Las otras acciones pueden ser divididas en dos amplias categor as; Acciones que imprimen algo. La ms obvia de estas y en realidad, la accin por defecto de a o find es -print que imprime el nombre del(os) chero(s) que concuerde(n) con las otras condiciones en la l nea de comandos, y devuelve verdadero. Una variante sencilla de -print es -fprint archivo , en la cual se usa archivo en vez de la salida estndar; otra es -ls a lista el chero en uso en el mismo formato que ls -dils; -printfformato se comporta ms o menos como la funcin de C printf(), para que se pueda especicar que formato a o deber tener la salida, y -fprintf archivo formato hace lo mismo, pero escribindolo en a e archivo. Estas acciones tambin devuelven verdadero. e
8 N.T.:

timestamp

122

Cap tulo 11. Comandos divertidos

Acciones que ejecutan algo. Su sintaxis es un poco extraa y su uso est muy extendido, por lo n a que, por favor, considrelas. e -exec comando \; ejecuta el comando, y la accin devuelve verdadero si el estado retornado o por el comando es 0, lo que signica que la ejecucin fue correcta. La razn para el \; o o es bastante lgica: find no sabe donde termina el comando, y el truco de poner la accin o o ejecutable al nal del comando no es aplicable. Bueno, la mejor manera para sealar el nal n del comando es usar el caracter que usa el intrprete de comandos para este n, que es ;, pero, e por supuesto, un punto y coma solo en la l nea de comandos ser comidopor el intrprete a e de comandos y nunca llegar a find, as que tienen que ser precedidos de escape. La segunda a cosa a recordar es como especicar el nombre del chero en uso dentro del comando, ya que probablemente Vd. hizo todo el esfuerzo al construir la expresin para hacer algo, y no slo o o para ver la hora. Esto se hace por medio de la cadena de caracteres {}. Algunas versiones antiguas de find requieren que coloque las llaves entre espacios en blanco no muy prctico a si Vd. necesita, por ejemplo, la ruta entera y no slo el nombre del chero pero con el find o de GNU podr ser cualquier lugar de la cadena de caracteres que compone el comando. (Y a no deber estar precedido de escape o entrecomillado?, seguramente se estar preguntando. a a Asombrosamente, yo nunca tuve que hacer esto ni bajo tcsh ni bajo bash (sh no considera { y } como carcteres especiales, as que no es ni mucho menos un problema). Mi idea es que a los intrpretes de comandos saben que {} no es una opcin que tenga sentido, por tanto no e o intentan expandirlas, afortunadamente para find que puede obtenerla intacta. -ok comando \; se comporta como -exec, con la diferencia que para cada chero seleccionado se pregunta al usuario que conrme el comando; si la respuesta empieza por y o Y, se ejecuta, de otra manera no, y la accin devuelve falso. o

11.1.6

Operadores

Hay una cierta cantidad de operadores; aqu hay una lista, en orden de prioridad decreciente. \( expr \) Fuerza el orden de prioridad. Los parntesis deben, por supuesto, estar entre comillas, ya que e tambin son muy signicativos para el intrprete de comandos. e e ! expr -not expr Cambia el verdadero valor de la expresin, esto es, si expr es verdadera, se vuelve falsa. El signo o de exclamacin no tiene que ser precedido de escape, porque est seguido por un espacio en o a blanco. expr1 expr2 expr1 -a expr2 expr1 -and expr2 Todas corresponden con la operacin lgica AND. El caso ms comn es el primero, en el cual o o a u est impl a cita. expr2 no se evalua, si expr1 es falsa. expr1 -o expr2

11.1. find, el buscador de cheros

123

expr1 -or expr2 corresponden a la operacin lgica OR. expr2 no es evaluada, si expr1 es verdadera. o o expr1 , expr2 es la declaracin de lista; ambas expr1 y expr2 se evaluan (junto con todos los efectos secundarios, o por supuesto!), y el valor nal de la expresin es el de expr2 . o

11.1.7

Ejemplos

S find tiene demasiadas opciones, lo se. Pero, hay un montn de casos preparados que valen la , o pena recordar, porque son usados muy a menudo. Veamos algunos de ellos. $ find . -name foo\* -print encuentra todos los nombres de chero que empiezan con foo. Si la cadena de caracteres est a incluida en el nombre, probablemente tiene ms sentido escribir algo como "*foo*", en vez de a foo. $ find /usr/include -xtype f -exec grep foobar \ /dev/null {} \; Es un grep ejecutado recursivamente que empieza del directorio /usr/include. En este caso, estamos interesados tanto en cheros regulares como en enlaces simblicos que apuntan a cheros o regulares, por tanto el test -xtype. Muchas veces es ms simple evitar especicarlo, especialmente a si estamos bastante seguros cuales cheros binarios no contienen la cadena de caracteres deseada. (Y por qu el /dev/null en el comando? Es un truco para forzar al grep a escribir el chero del e nombre donde se ha encontrado un emparejamiento. El comando grep se aplica a cada chero con una invocacin diferente, y, por tanto no cree que sea necesario mostrar a la salida el nombre del o chero. Pero ahora hay dos cheros, esto es: el activo y /dev/null! Otra posibilidad podr ser a 9 redirigir la salida del comando a xargs y dejarle llevar a cabo el grep. Yo lo intent, e hice pedazos e completamente mi sistema de cheros (junto con estas notas que estoy intentando recuperar a mano :-( ). $ find / -atime +1 -fstype ext2 -name core \ -exec rm {} \;

Es un trabajo clsico para la tabla de tareas preplaneadas. Borra todos los cheros llamados core a en el sistema de cheros del tipo ext2 al cual no se ha accedido en las ultimas 24 horas. Es posible que alguien quiera usar los cheros de imagen de memoria10 para realizar un volcado post mortem, pero nadie podr recordar lo que estuvo haciendo despus de 24 horas. . . a e $ find /home -xdev -size +500k -ls > piggies
9 N.T.: 10 N.T.:

to pipe core le

124

Cap tulo 11. Comandos divertidos

Es util para ver quin tiene esos archivos que atascan el sistema de cheros. Note el uso de -xdev; e como slo estamos interesados en un sistema de cheros, no es necesario descender otro sistema de o cheros montado bajo /home.

11.1.8

Una ultima palabra

Tenga en mente que find es un comando que consume mucho tiempo, ya que tiene que acceder a cada uno de los nodos-i del sistema para realizar su operacin. Por lo tanto, es sabio combinar o cuantas operaciones sean posibles en una unica invocacin de find, especialmente en las tareas de o mantenimiento interno que usualmente se administran mediante un trabajo de la tabla de tareas planicadas. Un ejemplo informativo es el siguiente: supongamos que queremos borrar los cheros que acaban en .BAK y cambiar la proteccin de todos los directorios a 771 y todos los cheros o que acaban en .sh a 755. Y quizs temgamos montado el sistema de cheros NFS en un enlace a telefnico, y no querramos examinar los cheros ah (Por qu escribir tres comandos diferentes? o . e La manera ms efectiva para realizar la tarea es sta: a e

$ find . \( \( \( \(

-fstype nfs -prune \) -o \ -type d -a -exec chmod 771 {} \; \) -o \ -name "*.BAK" -a -exec /bin/rm {} \; \) -o \ -name "*.sh" -a -exec chmod 755 {} \; \)

Parece feo (y con mucho abuso de barras invertidas!), pero mirndolo jamente revela que la lgica a o subyacente es bastante sencilla. Recuerde: lo que se hace es una evaluacin verdadero/falso; el o comando introducido es slo un efecto secundario. Pero esto signica que se ejecuta slo si find o o puede evaluar la parte ejecutable de la expresin, esto es slo si la parte izquierda de la subexpresin o o o se evala como verdadera. As si por ejemplo el chero considerado en el momento es un directorio u , entonces el primer ejecutable se evala y el permiso del nodo-i se cambia a 771; de otra manera u olvida todo y pasa a la siguiente subexpresin. Probablemente, es ms fcil verlo en la prctica que o a a a escribirlo; pero despus de un momento, llegar a ser una cosa natural para Vd. e a

11.2. tar, el archivador en cinta

125

11.2
11.2.1 11.2.2 11.2.3 11.2.4

tar, el archivador en cinta


Introduccin o Opciones principales Modicadores Ejemplos

11.3

dd, el duplicador de datos

La leyenda dice que all lejos en las nieblas del tiempo, cuando el primer UNIX fue creado, sus a desarrolladores necesitaron un comando de bajo nivel para copiar datos entre dispositivos. Como ten prisa, decidieron tomar prestada la sintaxis usada en las mquinas IBM-360, y desarrollar ms an a a tarde un interfaz consistente con la de los otros comandos. El tiempo pas, y todos se acostumbraron o tanto con la manera extraa de usar dd que ya ha quedado as No se si es verdad, pero es una n . bonita historia para contar.

11.3.1

Opciones

A decir verdad, dd no es totalmente distinto de los otros comandos de UNIX: es en realidad un ltro, esto es, lee por defecto de la entrada estndar y escribe en la salida estndar. Por tanto, si a a Vd. escribe slo dd, la terminal se queda quieta, esperando una entrada, y un Ctrl-C es la unica o cosa con sentido a teclear (para cortarlo). La sintaxis del comando es como sigue:

dd [if=archivo entrada] [of=archivo salida] [ibs=cant bytes] [obs=cant bytes] [bs=cant bytes] [cbs=cant bytes] [skip=cant bloques] [seek=cant bloques] [count=cant bloques] [conv={ascii, ebcdic, ibm, block, unblock, lcase, ucase, swab, noerror, notrunc, sync}]
Todas las opciones son de la forma opcin=valor. No se permite ningn espacio ni antes ni o u despus del signo de igual; esto sol ser molesto, porque el intrprete de comandos no expand un e a e a nombre de chero en esta situacin, pero la versin de bash presente en Linux es bastante inteligente, o o as que Vd. no tiene que preocuparse por eso. Es tambin importante recordar que todos los valores e numerables (cant bytes y cant bloques citados arriba) pueden ser seguidos por un multiplicador. Las opciones posibles son b para bloque, el cual multiplica por 512, k para kilobytes (1024), w para palabra (2), y xm que multiplica por m.

126

Cap tulo 11. Comandos divertidos

El signicado de las opciones se explica a continuacin. o if=archivo entrada y of=archivo salida instruye a dd a respectivamente leer de archivo entrada y escribir a archivo salida. En el ultimo caso, el chero de salida es truncado al valor dado por seek, o si la palabra clave no est presente, a 0 (esto es, borrado), antes de realizar la a operacin. Mire tambin la opcin notrunc. o e o ibs=nn y obs=nn especican cuantos bytes deben ser le dos o escritos a la vez. Creo que por defecto es 1 bloque, esto es, 512 bytes, pero no estoy muy seguro de ello: desde luego funciona de esa manera con cheros planos11 . Estos parmetros son muy importantes cuando se usa a dispositivos especiales como entrada o salida; por ejemplo, leer de la red deber establecer a ibs a 10 kbyte, mientras que una disquetera 12 de 3.5de alta densidad tiene como tamao n natural de bloque 18 kbyte. Fallar al establecer estos valores podr repercutir no slo a largo a o plazo al llevar a cabo el comando, sino inclusive en errores de expiracin de plazo, as que o tenga cuidado. bs=nn tanto lee y escribe nn bytes a la vez. Este no hace caso a las palabras clave ibs y obs. cbs=nn establece el buer de conversin a nn bytes. Este buer se usa cuando se traduce de ASCII o a EBCDIC, o desde un dispositivo no ablocado a uno ablocado13 . Por ejemplo, los cheros creados bajo VMS tienen a menudo un tamao de bloque de 512, as que se tiene que poner n cbs a 1b cuando se lee una cinta externa de VMS. Espero que Vd. no tenga que entretenerse en estas cosas! skip=nbl y seek=nbl le dicen al programa que omita nbl bloques respectivamente al nal de la entrada y al principio de la salida. Por supuesto, el ultimo caso tiene sentido si se da la conversin notrunc (ver abajo). Cada tamao de bloque es el valor de ibs (obs). o n Cuidado: si no establece el ibs y escribe skip=1b Vd. est realmente omitiendo 512512 a bytes, esto es 256KB. No es precisamente lo que Vd. quer no? a, count=nbl pretende copiar slo nbl bloques de la entrada, cada uno de los tamaos dados por o n ibs. Esta opcin, junto con la previa, se vuelve util si, por ejemplo, Vd. tiene un chero o corrupto y quiere recuperar cuanto sea posible de l. Vd. debe omitir la parte ilegible y copiar e lo que resta. conv=conversin,[conversin. . . ] transforma el chero de la manera que se especica en sus arguo o mentos. Transformaciones posibles son ascii, que convierte de EBCDIC a ASCII; ebcdic y ibm, las cuales realizan una conversin inversa (s no existe una unica conversin de EBCo , o DIC a ASCII! La primera es la estndar, pero la segunda funciona mejor cuando se imprimen a cheros en una impresora IBM); block, la cual rellena registros terminados en nueva l nea del tamao de cbs, reemplazando los cambios de l n nea con espacios nales; unblock, que realiza lo contrario (elimina espacios nales, y los reemplaza con cambios de l nea); lcase y ucase, para convertir a minsculas y maysculas, respectivamente; swab, que intercamu u bia cada par de bytes de entrada (por ejemplo, para usar un chero que contiene enteros de
plain les oppy 13 N. del T.: ablocado se reere a la caracter stica de agrupamiento en bloques de los datos en el dispositivo.
12 N.T.: 11 N.T.:

11.4. sort, el clasicador de datos

127

tipo short escritos en una mquina 680x0 en una mquina basada en Intel se necesita dicha a a conversin); noerror, para continuar procesando an despus de encontrar errores; sync, o u e que rellena los bloques de entrada del tamao de ibs con caracteres NUL nales. n

11.3.2

Ejemplos

El ejemplo cannico es con el unico que Vd. probablemente ha chocado hasta ahora, cuando intent o o crear el primer disco de Linux: como escribir a un disco sin un sistema de cheros MS-DOS. La solucin es simple: o $ dd if=disk.img of=/dev/fd0 obs=18k count=80 Decid no usar ibs porque no se cual es el mejor tamao de bloque para un disco duro, pero en n este caso no habr hecho ningn perjuicio si en vez de obs usara sencillamente el bs inclusive a u podr haber sido un poquito ms rpido. Observe la explicacin del nmero de sectores a escribir a a a o u (18 kbyte es lo que ocupa un sector, as que count se pone a 80) y el uso del nombre de bajo nivel del dispositivo de la disquetera. Otra aplicacin util de dd est relacionada con la copia de seguridad de la red. Supongamos que o a estamos en una mquina alfa y que en la mquina beta est la unidad de cinta /dev/rst0 con un a a a chero tar que estamos interesados en obtener. Tenemos los mismos privilegios en ambas mquinas, a pero no hay espacio en beta para volcar 14 el chero tar. En este caso, podr amos escribir $ rsh beta dd if=/dev/rst0 ibs=8k obs=20k | tar xvBf para hacer en un solo paso la operacin completa. En este caso, hemos usado las facilidades de rsh o para realizar la lectura de la cinta. Los tamaos de entrada y salida estn establecidos a los valores n a por defecto por estas operaciones, esto es 8 kbyte para la lectura de la cinta y 20 kbyte para la escritura en ethernet; desde el punto de vista de la otra cara del tar, hay el mismo ujo de bytes el cual podr ser obtenido de la cinta, excepto el hecho de que llega de una manera bastante errtica, a a y la opcin B es necesaria. o Ah! Casi lo olvidaba: No creo para nada que dd sea un acrnimo de data duplicator, pero al o menos es una manera divertida de recordar su signicado. . .

11.4
11.4.1 11.4.2 11.4.3
14 N.T.:

sort, el clasicador de datos


Introduccin o Opciones Ejemplos
dump

128

Cap tulo 11. Comandos divertidos

Cap tulo 12

Errores, equivocaciones, bugs, y otras molestias


Unix nunca fue diseado para evitar que la gente hiciera cosas estpidas, porque esa n u pol tica les habr evitado tambin hacer cosas inteligentes. a e Doug Gwyn

12.1

Evitando errores

Muchos usuarios hablan de su frustracin con el sistema operativo Unix en alguna ocasin, a menudo o o a causa de lo que ellos mismos han hecho. Una caracter stica del sistema operativo Unix que muchos usuarios adoran cuando estn trabajando bien, y odian despus de una sesin hasta bien a e o avanzada la noche, es que muy pocas ordenes piden conrmacin. Cuando un usuario est despierto o a y funcionando, raramente piensa sobre ello, y esto es una ventaja, ya que le permite trabajar ms a ecientemente. De todos modos, hay algunas desventajas. rm y mv no piden nunca conrmacin, y esto conduce o frecuentemente a problemas. Por eso, veamos una pequea lista que puede ayudarle a evitar el n desastre total: Tenga copias de seguridad! Esto va dirigido especialmente a sistemas de un solo usuario todos los administradores de sistema deben realizar copias de seguridad de su sistema regularmente! Una vez a la semana es suciente para salvar muchos cheros. Para ms informacin a o consulte The Linux System Administrators Guide. Los usuarios individuales deben tener sus propias copias de seguridad, si es posible. Si usa ms de una mquina regularmente, intente mantener copias actualizadas de todos sus cheros a a en cada una de las mquinas. Si tiene acceso a una unidad de disquetes, puede hacer copias a de seguridad en disquetes de su material cr tico. En el peor de los casos, mantenga copias adicionales del material ms importante que haya en su cuenta en un directorio separado. a 129

130

Cap tulo 12. Errores, equivocaciones, bugs, y otras molestias

Piense sobre las ordenes, especialmente las destructivas como mv, rm, y cp antes de actuar. Debe ser tambin cuidadoso con las redirecciones (>) sobreescribirn sus cheros cuando e a no est prestando atencin. Incluso el ms inofensivo de los comandos puede convertirse en e o a siniestro:
/home/larry/report$ cp report-1992 report-1993 backups

puede convertirse fcilmente en desastre: a


/home/larry/report$ cp report-1992 report-1993

El autor tambin recomienda, a partir de su propia experiencia personal, no hacer limpieza e de cheros a altas horas de la madrugada. Que su estructura de directorios parece un poco desordenada a la 1:32am? Djelo estar un poco de desorden nunca ha daado un ordenador. e n S gale la pista a su directorio actual. A veces, el prompt que est usando no muestra en a que directorio est usted trabajando, y el peligro acecha. Es triste leer un mensaje en a comp.unix.admin1 sobre un usuario root que estaba en / en vez de en /tmp! Por ejemplo:
mousehouse> pwd /etc mousehouse> ls /tmp passwd mousehouse> rm passwd

La anterior serie de comandos podr hacer muy infeliz al usuario, al ver como eliminaron el a chero de contraseas de su sistema. Sin l la gente no puede acceder! n e

12.2 12.3

Qu hacer cuando algo va mal e No es fallo tuyo

Por desgracia para los programadores del mundo, no todos los problemas son a causa de errores del usuario. Unix y Linux son sistemas complicados, y todas las versiones conocidas tienen errores de programacin (bugs2 ). Algunas veces esos errores son dif o ciles de encontrar y slo aparecen bajo o ciertas circunstancias. Ante todo, qu es un error? Un ejemplo de error es si le pide al ordenador que calcule 5+3 e y contesta 7. Aunque este es un ejemplo trivial de que puede ir mal, la mayor de los errores a en programas de computadoras se relacionan con la aritmtica en alguna forma extremadamente e extraa. n
foro de discusin internacional en Usenet, que trata sobre la administracin de computadoras Unix. o o (polilla, fam. bicho). Se denomina as a los errores que aparecen en un programa. Cuenta la leyenda que cuando los ordenadores eran unos monstruos llenos de vlvulas, que ocupaban habitaciones enteras, un tcnico que a e trataba de resolver un error en el Mark II de Harvard detect que la causa era una polilla de verdad que se hab o a colado entre las vlvulas y provocaba pequeos cortocircuitos al revolotear de un lado a otro. a n
2 Bug: 1 Un

12.3. No es fallo tuyo

131

12.3.1

Cuando hay un error

Si la computadora da una respuesta errnea (compruebe que la respuesta es errnea!) o se bloquea, o o eso es un error. Si cualquier programa se bloquea o da un mensaje de error del sistema operativo, eso es un error. Si un comando no naliza nunca su ejecucin, puede ser un error, pero debe asegurarse de que no o le ha pedido que est durante mucho tiempo haciendo lo que usted quer que hiciera. Pida ayuda e a si no sabe lo que hac el comando. a Algunos mensajes le alertarn de la existencia de errores. Algunos mensajes no son errores. a Revise la seccin 3.4 y el resto de la documentacin para estar seguro de que no son mensajes o o informativos normales. Por ejemplo, mensajes como disk full (disco lleno) o lp0 on re (lp0 ardiendo) no son problemas de software, sino algo incorrecto en su hardwareno hay suciente espacio libre en el disco, o la impresora est mal. a Si no puede encontrar informacin sobre un programa, es un error en la documentacin, y deber o o a ponerse en contacto con el autor de dicho programa y ofrecerse para escribirla usted mismo. Si algo est incorrecto en la documentacin existente3 , es un error en ese manual. Si algo aparece incompleto a o o poco claro en el manual, eso es un error. Si no puede vencer al gnuchess al ajedrez, es un fallo de diseo en el algoritmo de ajedrez que n usted usa, pero no necesariamente un error en su cerebro.

12.3.2

Noticando un error

Cuando est seguro de haber encontrado un error, es importante asegurarse de que su informacin e o llega al lugar adecuado. Intente encontrar que programa causa el errorsi no puede encontrarlo, tal vez pueda pedir ayuda en comp.os.linux.help o comp.unix.misc. Una vez encuentre el programa, intente leer la pgina del manual para ver quien lo escribi. a o El mtodo preferido para enviar noticaciones de errores en el mundo Linux es v correo e a electrnico. Si no tiene acceso al correo electrnico puede ponerse en contacto con la persona que le o o suministr Linux eventualmente, encontrar alguien que o bien tiene correo electrnico, o vende o a o Linux comercialmente y por tanto quiere eliminar el mayor nmero de errores posibles. Recuerde, u en todo caso que nadie est obligado a corregir ningn error a menos que tenga un contrato. a u Cuando env una noticacin de error, incluya toda la informacin que se le ocurra. Esto incluye: e o o Una descripcin de lo que usted piensa que es incorrecto. Por ejemplo, Obtengo 5 cuano do calculo 2+2 o Dice segmentation violation -- core dumped. Es importante decir exactamente que est sucediendo para que el responsable del mantenimiento pueda corregir su e error. Incluya cualquier variable de entorno relevante. La versin de su ncleo (mire en el chero /proc/version) y sus bibliotecas de sistema (mire o u en el directorio /libsi no puede descifrarlo, env un listado de /lib). e
3 Especialmente

en sta! e

132

Cap tulo 12. Errores, equivocaciones, bugs, y otras molestias

Cmo ejecut el programa en cuestin?, o, si era un error del ncleo, qu estaba haciendo o o o u e en ese momento?. Toda la informacin complementaria. Por ejemplo, el comando w puede no mostrar el proceso o actual para ciertos usuarios. No diga simplemente, w no funciona para cierto usuario. El error podr ocurrir debido a que el nombre del usuario tiene ocho caracteres de longitud, o a cuando est accediendo a travs de la red. En su lugar diga, w no muestra el proceso actual a e para el usuario greenfie cuando accede a travs de la red. e Y recuerde, sea amable. La mayor de la gente trabaja en el software libre por el gusto de haa cerlo, y porque tienen un gran corazn. No los amarguela comunidad Linux ha desilusionado o ya a demasiados desarrolladores, y an es pronto en la vida del Linux. u

Apndice A e

Introduccin a vi o
vi (pronunciado vi ai en ingls, o uve i) es en realidad el unico editor que se puede encontrar en e prcticamente cualquier instalacin de Unix. Este editor fue escrito originalmente en la Universidad a o de California en Berkeley y se puede encontrar versiones en casi cualquier edicin de Unix, inclu o do Linux. Al principio cuesta un poco acostumbrarse a l, pero tiene muchas caracter e sticas muy potentes. En general, recomendamos que un nuevo usuario aprenda Emacs, que generalmente es ms fcil de usar. Sin embargo, la gente que usa ms de una plataforma o que encuentra que no le a a a gusta Emacs, puede estar interesada en aprender vi. Es necesaria una breve resea histrica de vi para comprender cmo la tecla k puede signicar n o o mover el cursor arriba una l nea y porqu hay tres diferentes modos de uso. Si no le apetece aprender e a usar el editor, los dos tutoriales le llevarn de ser un crudo principiante hasta tener el suciente a conocimiento del grupo de comandos que usted puede llegar a usar. El cap tulo tambin incluye una e gu de comandos, que sirve de util referencia para tenerla cerca del terminal. a Incluso si vi no se convierte en su editor de texto normal, el conocimiento de su uso no ser a desperdiciado. Es casi seguro que el sistema de Unix que use tendr alguna variante del editor vi. a Puede ser necesario usar vi mientras instala otro editor, como Emacs. Muchas herramientas de Unix, aplicaciones y juegos usan un subconjunto del grupo de comandos de vi.

A.1

Una rpida historia de Vi a

Los editores de texto en la antigedad funcionaban en modo de una l u nea y se usaban t picamente desde terminales no inteligentes de impresin. Un editor t o pico que operaba en este modo es Ed. El editor es potente y eciente, y usa una cantidad muy pequea de recursos del sistema, y funcionaba n con las pantallas de aquel entonces. vi ofrece al usuario una alternativa visual con un grupo de comandos notablemente amplio comparado con ed. vi como lo conocemos hoy comenz como el editor de l o nea ex. De hecho, ex se ve como un modo especial de edicin en vi, aunque ahora lo contrario es verdad. El componente visual de ex o puede ser iniciado desde la l nea de comando usando el comando vi, o desde dentro de ex. 133

134

Apndice A. Introduccin a vi e o

El editor ex/vi fue desarrollado en la universidad de California en Berkeley por William Joy. Originalmente se suministraba como una utilidad no soportada hasta su inclusin ocial en la diso tribucin del Unix AT&T System V. Se ha ido haciendo cada vez ms popular, incluso con la o a competencia de los modernos editores de pantalla completa. Debido a la popularidad de vi existen muchas variantes clnicas y se pueden encontrar varias o versiones para la mayor de los sistemas operativos. No es el propsito de este cap a o tulo el incluir todos los comandos disponibles bajo vi o sus variantes. Muchos clones han aumentado y modicado el comportamiento original de vi. La mayor de los clones no soportan todos los comandos originales a de vi. Si tiene un buen conocimiento de trabajo con ed entonces vi presenta una curva de aprendizaje ms suave. Aunque usted no tenga ninguna intencin de usar vi como su editor regular, el a o conocimiento bsico de vi solamente puede serle una ventaja. a

A.2

Rpido tutorial de Ed a

El propsito de esta gu es que usted empiece a usar ed. ed est diseado para ser fcil de usar, y o a a n a requiere poco entrenamiento para comenzar. La mejor manera de aprender es practicando, as que siga las instrucciones y pruebe el editor antes de descontar sus ventajas prcticas. a

A.2.1

Crear un chero

ed slo puede editar un chero a la vez. Siga el siguiente ejemplo para crear su primer chero de o texto usando ed. /home/larry$ ed a Este es mi primer fichero de texto usando Ed. Esto es divertido de verdad. . w primero.txt q /home/larry$ Ahora puede vericar el contenido del chero usando la utilidad de concatenacin de Unix. o /home/larry$ cat primero.txt El ejemplo anterior ha mostrado un nmero de puntos importantes. Cuando invoca ed como en u n el ejemplo tendr un chero vac La tecla a se usa para aadir texto al chero. Para nalizar a o. la sesin de entrada de texto, se usa un punto . en la primera columna del texto. Para salvar el o texto a un chero, la tecla w se usa en combinacin con el nombre del chero y nalmente la tecla o q se usa para salir del editor.

A.2. Rpido tutorial de Ed a

135

La observacin ms importante es que hay dos modos de operacin. Al principio el editor est o a o a en modo de comandos. Un comando se dene por caracteres, para asegurarse de cuales son las intenciones del usuario, ed usa un modo de texto, y un modo de comando.

A.2.2

Editar un chero existente

Para aadir una l n nea de texto a un chero existente siga el siguiente ejemplo: /home/larry$ ed primero.txt a Esta es una nueva linea de texto. . w q Si comprueba el chero con cat ver que hay una nueva l a nea insertada entre las dos l neas originales. Cmo supo ed dnde poner la nueva l o o nea de texto?. n a Cuando ed lee el chero, se acuerda de cual es la l nea actual. El comando a aadir el texto despus de la l e nea actual. ed tambin puede poner el texto antes de la l e nea actual con la tecla i . El efecto ser la insercin del texto antes de la l a o nea actual. Ahora es fcil ver que ed opera en el texto l a nea por l nea. Todos los comandos se pueden aplicar a una l nea elegida. Para aadir una l n nea de texto al nal de un chero. /home/larry$ ed primero.txt $a La ultima linea de texto. . w q n nea despus de la ultima l e nea. Para El modicador de comandos $ le dice a ed que aada la l aadir la l n nea despues de la primera l nea el modicador ser 1 . Ahora tenemos la posibilidad de a seleccionar la l nea para aadir una l n nea de texto despus del nmero de l e u nea o insertar una l nea antes del nmero de l u nea. Cmo sabemos lo que hay en la l o nea actual? El comando p muestra el contenido de la l nea actual. Si quiere hacer que la l nea actual sea la l nea 2, y a la vez quiere ver el contenido de esa l nea entonces haga lo siguiente. /home/larry$ ed primero.txt 2p q

136

Apndice A. Introduccin a vi e o

A.2.3

Nmeros de l u nea en detalle

Ha visto cmo mostrar el contenido de la l o nea actual, usando el comando p . Tambin sabemos e que hay modicadores del nmero de l u nea para los comandos. Para ver el texto de la segunda l nea, 2p Hay algunos modicadores especiales que se reeren a posiciones que pueden cambiar durante el tiempo que edita un chero. El $ es la ultima l nea del texto. Para ver la ultima l nea, $p nea El nmero de l u nea actual usa un simbolo de modicador especial . . Para mostrar la l actual usando un modicador, .p Esto puede parecer innecesario, aunque es muy util en el contexto de los grupos de nmeros de u l nea. Para mostrar el contenido del texto desde la l nea 1 a la l nea 2, se le debe pasar el alcance. 1,2p El primer nmero se reere a la l u nea de comienzo y el segundo se reere a la ultima l nea. La l nea actual ser por consiguiente el segundo nmero del grupo de l a u neas. Si quiere mostrar el contenido del chero desde el comienzo hasta la l nea actual, 1,.p Para mostrar el contenido desde la l nea actual hasta el nal del chero, .,$p Todo lo que queda es mostrar el contenido de todo el chero, y esto queda como un ejercicio para usted. Cmo puede borrar las dos primeras l o neas del chero? 1,2d nea por l nea. Si usted quisiera borrar el contenido completo, lo El comando d borra el texto l har con: a 1,$d

A.3. Rpido tutorial de Vi a

137

Si usted ha hecho muchos cambios y no quiere salvar los contenidos del chero, lo mejor es salir del editor sin escribir el chero antes. La mayor de los usuarios no usan ed como el principal editor. Los editores ms modernos a a ofrecen una pantalla completa de edicin y grupos de comandos ms exibles. ed ofrece una buena o a introduccin a vi y ayuda a explicar cmo se originaron los comandos de vi. o o

A.3

Rpido tutorial de Vi a

El propsito de este tutorial es que comience a usar el editor vi. Este tutorial asume que no tiene o ninguna experiencia con vi, as que le mostraremos los diez comandos ms basicos de vi. Estos a comandos fundamentales son sucientes para realizar la mayor de sus necesidades de edicin, y a o puede expandir su vocabulario de vi cuanto necesite. Se recomienda que tenga un ordenador para practicar, segn avanza con el tutorial. u

A.3.1

Ejecutar vi

Para ejecutar vi, simplemente tiene que teclear las letras vi seguidas del nombre de chero que desea crear. Ver una pantalla con una columna de tildes (~) en el lado izquierdo. vi est ahora en a a modo de comando. Cualquier cosa que teclee ser interpretado como un comando, no como texto a que usted desea escribir. Para introducir texto, tiene que teclear un comando. Los dos comandos de entrada bsicos son los siguientes: a i a insertar texto a la izquierda del cursor. aadir texto a la derecha del cursor. n

Dado que est al comienzo de un chero vac no importa cual de estos usar. Escriba uno de a o, ellos, y despus teclee el siguiente texto (un poema de Augustus DeMorgan encontrado en The Unix e Programming Environment por B.W. Kernighan y R. Pike):

Las pulgas grandes tienen peque~nas pulgas<Intro> sobre sus espaldas para que les muerdan.<Intro> Y las pulgas peque~nas tienen pulgas mas peque~nas<Intro> y asi hasta el infinito.<Intro> Y las pulgas grandes, a su vez,<Intro> tienen pulgas mas grandes sobre las que estar;<Intro> Mientras que estas de nuevo tienen otras mas grandes aun,<Intro> y mas grandes aun, y asi.<Intro> <Esc>

F jese que tiene que pulsar la tecla Esc para nalizar la insercin y volver al modo de comando. o

138

Apndice A. Introduccin a vi e o

A.3.2
h j k l

Comandos de movimiento del cursor


el el el el cursor cursor cursor cursor un un un un espacio espacio espacio espacio a la izquierda. abajo. arriba. a la derecha.

mueve mueve mueve mueve

Estos comandos se pueden repetir manteniendo la tecla pulsada. Intente mover el cursor por el texto ahora. Si intenta un movimiento imposible, por ejemplo, pulsar la tecla k cuando el cursor est en la l a nea superior, la pantalla parpadear momentaneamente o el terminal sonar. No se a a preocupe, no muerde, y su chero no saldr daado. a n

A.3.3
x dd

Borrar texto

borra el carcter que hay en el cursor. a borra la l nea donde est el cursor. a

Mueva el cursor a la primera l nea y pngalo de modo que est bajo la n. Pulse la letra x , y la o e o n desaparecer. Ahora pulse la letra i para cambiarse al modo de insercin y vuelva a teclear la a n. Pulse Esc cuando haya terminado.

A.3.4
:w :q

Salvar un chero

salvar (escribir al disco). salir.

Asegrese de que est en modo de comando pulsando la tecla Esc . Ahora pulse :w. Esto u a salvar su trabajo escribindolo a un chero de disco. a e El comando para salir de vi es q . Si quiere combinar el salvar y salir, escriba :wq. Tambin e hay una abreviacin para :wq ZZ. Dado que gran parte del trabajo de programacin consiste en o o ejecutar un programa, encontrar algn problema y llamar el programa en el editor para hacer algn u u pequeo cambio, y luego volver a salir del editor para ejecutar el programa otra vez, ZZ ser un n a comando que usar a menudo. (En realidad, ZZ no es un sinnimo exacto de :wq si no ha hecho a o ningn cambio al chero que est editando desde la ultima vez que lo salvo, ZZ simplemente saldr u a a del editor mientras que :wq salvar (redundantemente) el chero antes de salir.) a Si usted se lo ha cargado todo sin esperanzas y simplemente quiere volver a empezarlo todo, a puede teclear :q! (recuerde pulsar la tecla Esc primero). Si omite el !, vi no le permitir salir sin salvar.

A.3.5

Qu viene a continuacin? e o

Los diez comandos que acaba de aprender deber ser sucientes para su trabajo. Sin embargo, an solamente ha rozado la supercie del editor vi. Hay comandos para copiar material de un lugar del chero a otro, para mover material de un lugar a otro, para mover material de un chero a otro, para ajustar el editor a sus gustos personales, etc. Con todo, hay unos 150 comandos.

A.4. Tutorial avanzado de Vi

139

A.4

Tutorial avanzado de Vi

La ventaja y la potencia de vi est en la habilidad de usarlo con xito con slo saber unos pocos a e o comandos. La mayor de los usuarios de vi se sienten un poco incmodos al principio, sin embargo a o despus de algn tiempo se encuentran avidos de mayor conocimiento de los comandos disponibles. e u El siguiente tutorial asume que el usuario ha completado el tutorial rpido (arriba) y por lo tanto a se siente a gusto con vi. Este tutorial expone algunas de las caracter sticas ms poderosas de ex/vi a desde copiar texto hasta la denicin de macros. Hay una seccin sobre ex y los parmetros para o o a ajustar el editor a su gusto. Este tutorial describe los comandos, en vez de llevarle grupo por grupo. Se recomienda que usted disponga de algn tiempo para probar los comandos en algn texto de u u ejemplo, que se pueda permitir destruir. Este tutorial no expone todos los comandos de vi, aunque se cubren los ms comnmente usados a u y an otros adicionales. Aunque usted elija usar otro editor de texto, se espera que apreciar vi y u a lo que ofrece a quienes deciden usarlo.

A.4.1

Movimiento

La funcionalidad ms bsica de un editor es el mover el cursor por el texto. Aqu estn los comandos a a a de movimiento. h j k l mueve mueve mueve mueve el el el el cursor cursor cursor cursor un espacio a la izquierda. una l nea hacia abajo. una l nea hacia arriba. un espacio a la derecha.

Algunas implementaciones tambin permiten el uso de las teclas de cursor para mover el cursor. e w e E b 0 ^ $ <CR> G 1G nG <Cntl> G % H M L n| mueve al principio de la siguiente palabra. mueve al nal de la siguiente palabra. mueve al nal de la siguiente palabra antes de un espacio. mueve al principio de la palabra anterior. mueve al principio de la l nea actual. mueve a la primera palabra de la l nea actual. mueve al nal de la l nea. mueve al principio de la siguiente l nea. mueve al principio de la l nea anterior. mueve al nal del chero. mueve al principio del chero. mueve a la l nea n. muestra el nmero de l u nea actual. va al parntesis correspondiente. e mueve a la l nea superior en pantalla. mueve a la l nea de en medio de la pantalla. mueve al nal de la pantalla. mueve el cursor a la columna n.

140

Apndice A. Introduccin a vi e o

El texto se desplaza automticamente cuando el cursor alcanza la parte superior o inferior de la a pantalla. Tambin hay comandos que permiten controlar el desplazamiento del texto. e <Cntl> <Cntl> <Cntl> <Cntl> f b d u desplaza desplaza desplaza desplaza una pantalla hacia delante. una pantalla hacia atrs. a media pantalla hacia abajo. media pantalla hacia arriba

Los comandos anteriores controlan el movimiento del cursor. Algunos de los comandos usan un modicador de comandos en la forma de un nmero que precede al comando. Esta caracter u stica normalmente repite el comando ese nmero de veces. u Para mover el cursor ocho posiciones a la izquierda. 8l mueve el cursor 8 posiciones a la izquierda.

Si desea introducir un nmero de espacios delante de un texto, podr usar el modicador de u a comandos con el comando insertar. Introduzca el nmero de repeticiones (n) y despus i seguido u e por el espacio y luego pulse la tecla Esc . ni inserta algn texto y lo repite n veces. u

Los comandos que tratan con l neas usan el modicador para referirse al nmero de l u nea. El G es un buen ejemplo. 1G mueve el cursor a la primera l nea.

vi tiene un voluminoso grupo de comandos que se puede usar para mover el cursor por el texto. vi tambin puede posicionar el cursor en una l e nea desde la l nea de comandos. vi +10 mi_fichero.tex neas ms abajo del a Este comando abre el chero llamado mi chero.tex y pone el cursor 10 l comienzo del chero. Pruebe los comandos de esta seccin. Muy poca gente los recuerda todos en una sola sesin. La o o mayor parte de los usuarios solamente utiliza una parte de estos comandos. Ahora se puede mover, pero cmo modicar el texto? o

A.4.2

Modicacin del texto o

El propsito es cambiar el contenido del chero y vi ofrece un amplio conjunto de comandos para o ayudarnos en este proceso. Esta seccin se concentra en aadir texto, cambiar el texto existente y borrar texto. Al nal o n de esta seccin usted tendr el conocimiento para crear cualquier chero de texto que desee. Las o a secciones restantes se concentran en comandos ms especializados y convenientes. a Cuando usted teclea nuevo texto puede introducir varias l neas usando la tecla Intro . Si hay que corregir un error tipogrco mientras introduce texto, puede usar la tecla Retroceso para mover el a cursor sobre el texto. Las varias implementaciones de vi se comportan de manera diferente. Algunas

A.4. Tutorial avanzado de Vi

141

simplemenente mueven el cursor hacia atrs y el texto sigue vindose y es aceptado. Otras borran el a e texto cuando pulsa la tecla de borrado. Otras versiones incluso permiten usar las teclas de cursores para mover el cursor mientras se est en modo de entrada de texto. Este modo de funcionamiento a a nea en la no es el normal de vi. Si el texto es visible y usa la tecla Esc mientras est en la l que puls Retroceso , entonces el texto que hay despus del cursor se borrar. Use el editor para o e a acostumbrarse a este comportamiento. a A i I o O Aadir texto a partir de la posicin actual del cursor. n o Aadir al nal de la l n nea. Insertar texto a la izquierda del cursor. Insertar texto a la izquierda del primer caracter que no sea espacio en la l nea actual. Abrir una nueva l nea y aade texto debajo de la l n nea actual. Abrir una nueva l nea y aade texto encima de la l n nea actual.

vi tiene un pequeo grupo de comandos para borrar texto que se pueden mejorar con el uso de n modicadores. x dw dd D Borrar Borrar Borrar Borrar el caracter que est debajo del cursor. a desde la posicin actual al nal de la palabra. o la l nea actual. desde la posicin actual al nal de la l o nea.

Los modicadores se pueden usar para aumentar la potencia de los comandos. Los siguientes ejemplos son un subgrupo de las posibilidades. nx ndd dnw dG d1G d$ dn$ Borrar Borrar Borrar Borrar Borrar Borrar Borrar n caracteres desde el que est bajo el cursor. a n l neas. n palabras (igual que ndw). desde la posicin actual hasta el nal del chero. o desde la posicin actual hasta el principio del chero. o desde la posicin actual al nal de la l o nea. (Esto es igual que D). desde la l nea actual al nal de la ensima l e nea.

La lista de comandos anterior muestra que la operacin de borrado puede ser muy util. Esto se o hace patente cuando se aplica en combinacin con los comandos de movimiento de cursor. Hay que o hacer notar que el comando D ignora los modicadores que se le apliquen. En ocasiones usted puede necesitar deshacer los cambios al texto. Los siguientes comandos recuperan el texto que hab antes de hacer cambios. a u U :e! Deshacer el ultimo comando. Deshacer todos los cambios ocurridos en la l nea actual. Editar otra vez. Recupera el estado del chero desde la ultima vez que se salv. o

vi no slo le permite deshacer cambios, tambin puede dar la vuelta al comando deshacer. Por o e ejemplo, si usamos el comando 5dd para borrar 5 l neas, se pueden recuperar usando el comando u . Si usted usa u una vez ms, las 5 l a neas desaparecern de nuevo. a vi ofrece comandos que permiten que se hagan cambios al texto sin tener que borrar y volver a escribir:

142

Apndice A. Introduccin a vi e o Reemplaza el caracter bajo el cursor con la letra c. Mueve el cursor a la derecha si se usa el modicador de repeticin, por ejemplo: 2rc. o Sobreescribe el texto con el nuevo texto.. Cambia el texto de la palabra actual. Cambia el texto desde la posicin actual al nal de la l o nea. Cambia las siguientes n palabras. (Igual que ncw). Hacer cambios hasta el nal de la ensima l e nea. Hacer cambios hasta el nal de la l nea actual. Hacer cambios en la l nea actual. Sustituye el texto que escriba por el caracter actual. Sustituye el texto que escriba por los siguientes n caracteres.

rc R cw c$ cnw cn$ C cc s ns

Las series de comandos de cambio que permiten que se introduzca un grupo de carcteres se a terminan con la tecla Esc . o El comando cw empieza en la posicin actual en la palabra y termina al nal de la palabra. Cuando use un comando de cambio que especica la distancia sobre la que se aplicar el cambio, a vi pondr un $ en la ultima posicin de carcter. El nuevo texto puede sobrepasar o no llegar a la a o a longitud original de texto.

A.4.3

Copiar y mover bloques de texto

El movimiento de texto supone la combinacin de un nmero de comandos para conseguir el propsito o u o nal. Esta seccin introduce los buers1 con y sin nombre junto a los comandos que cortan y pegan o el texto. La copia de texto se realiza en tres pasos principales: 1. Copia del texto a un buer. 2. Movimiento del cursor al lugar de destino. 3. Pegar (poner) el texto en el buer de edicin. o El buer de edicin no es sino el propio chero en el que usted est trabajando. o a Para Copiar texto al buer sin nombre use el comando y . yy Y nyy nY yw ynw nyw y$ Mueve Mueve Mueve Mueve Mueve Mueve Mueve Mueve una copia de la l nea actual al buer sin nombre. una copia de la l nea actual al buer sin nombre. las siguientes n lineas al buer sin nombre. las siguientes n l neas al buer sin nombre. una palabra al buer sin nombre. n palabras al buer sin nombre. n palabras al buer sin nombre. el texto desde la posicin actual al nal de la l o nea al buer sin nombre.

1 N. del T.: bueres una palabra inglesa que se reere a un espacio reservado en memoria para guardar alguna informacin temporalmente. En este caso se usan buers para almacenar una copia temporal del texto que usted o desea copiar o mover.

A.4. Tutorial avanzado de Vi

143

El buer sin nombre es un buer temporal que puede ser fcilmente afectado por otros comandos a comunes. Hay ocasiones en las cuales necesitamos mantener el contenido de un buer durante un per odo ms extenso de tiempo. En este caso se usar un buer con nombre. vi tiene 26 buers con a a nombre. Los buers usan las letras del alfabeto como el nombre de identicacin. Para distinguir o un comando de un buer con nombre, vi usa el caracter . Cuando use un buer con nombre de letra minscula los contenidos se sobre escriben, mientras que el uso del nombre en letra mayscula u u aade el nuevo texto al contenido actual. n "ayy "aY "byw "Byw "by3w Mueve la l nea actual al buer con nombre a. Mueve la l nea actual al buer con nombre a. Mueve la palabra actual al buer con nombre b. Aade la palabra actual al contenido del buer b. n Mueve las siguientes 3 palabras al buer b.

Use el comando p para pegar el contenido del buer al buer de edicin. o p P nP "aP "b3P Pegar Pegar Pegar Pegar Pegar del buer sin nombre a la DERECHA del cursor. del buer sin nombre a la IZQUIERDA del cursor. n copias del buer sin nombre a la IZQUIERDA del cursor. del buer con nombre a a la DERECHA del cursor. 3 copias del buer con nombre b a la IZQUIERDA del cursor.

Cuando use vi dentro de un xterm tiene otra opcin para copiar texto. Marque el bloque de o texto que desea copiar arrastrando el cursor del ratn sobre el texto. Si mantiene pulsado el botn o o izquierdo del ratn y arrastra el ratn desde el comienzo al nal, invertir el v o o a deo del texto. Esta operacin automticamente coloca el texto en un buer reservado para el servidor de X Window. o a Para pegar el texto, pulse el botn de enmedio. Acurdese de poner vi en modo de insercin dado o e o que la entrada de texto se podr interpretar como comandos y el resultado ser cuando menos a a desagradable. Usando la misma tcnica se puede copiar una sola palabra haciendo doble click con e el botn izquierdo del ratn sobre la palabra. Solamente se copiar esa unica palabra. Para pegarla o o a se usa el mismo procedimiento que ateriormente. Los contenidos del buer slo cambian cuando se o marca otro bloque de texto. Para mover un bloque de texto son necesarios tres pasos. 1. Borrar el texto para ponerlo en un buer con o sin nombre. 2. Mover el cursor a la posicin de destino. o 3. Pegar el buer. El proceso es el mismo que el de copia con un solo cambio en el primer paso para borrar. Cuando se usa el comando dd , la l nea se borra y se coloca en el buer sin nombre. Luego puede poner el contenido del mismo modo que lo hizo cuando copi el texto en la posicin deseada. o o "add "a4dd dw Borrar la l nea y ponerla en el buer con nombre a. Borrar cuatro l neas y ponerlas en el buer con nombre a. Borrar una palabra y ponerla en el buer sin nombre.

Vea la seccin sobre el modicado de texto para ver ms ejemplos de borrado de texto. o a

144

Apndice A. Introduccin a vi e o

En el caso de que el sistema falle, el contenido de todos los buers se pierde excepto el contenido de los buers de edicin, que se puede recuperar (ver comandos Utiles). o

A.4.4

Bsqueda y cambio de texto u

vi dispone de varios comandos para bsqueda. Usted puede buscar desde un solo carcter hasta u a una expressin completa. o Los dos comandos principales de bsqueda basados en caracteres son f y t . u fc Fc tc Tc ; , Encuentra el siguiente caracter c. Se mueve a la derecha del siguiente. Encuentra el siguiente caracter c. Se mueve a la izquierda del anterior. Se mueve a la DERECHA al caracter anterior al siguiente c. Se mueve a la IZQUIERDA al caracter que sigue al c anterior. (En algunas versiones de vi esto es lo mismo que Fc). Repite el ultimo comando f,F,t,T. Igual que (;) pero cambiando la direccin del comando original. o

Si el caracter que usted buscaba no se encuentra, vi emitir un pitido o le dar otro tipo de a a seal (tal vez un parpadeo de toda la pantalla). n vi le permite buscar una cadena de texto en el buer de edicin. o /tira ?tira n N Busca hacia la derecha y abajo la siguiente instancia de tira. Busca hacia la izquierda y arriba la siguiente instancia de tira. Repite el ultimo comando / o ?. Repite el ultimo comando / o ? en la direccin opuesta. o

nea en la parte baja de la pantalla se vaciar. a Cuando use los comandos / or ? , la ultima l Introduzca en esa l nea la tira de caracteres que desea buscar y pulse Intro . La tira en el comando / or ? puede ser una expresin regular. Una expresin regular puede o o ser una descripcin de un conjunto de tiras. La descripcin se construye usando texto entremezclado o o con caracteres especiales. Los caracteres especiales de una expresin regular son . * [ ] $. o . \ * [] ^ $ [^] [-] Vale por cualquier carcter excepto el carcter de nueva l a a nea. Tecla de escape para cualquier caracter especial. Vale por 0 o ms instancias del caracter anterior. a Busca exactamente uno de los caracteres inclu dos entre los corchetes. El caracter que sigue a ^ debe estar al principio de la l nea. El caracter que precede a $ se busca al nal de la l nea. Busca cualquier cosa que no se encuentre despues de ^ dentro de los corchetes. Busca un rango de caracteres.

El unico modo de acostumbrarse a usar las expresiones regulares es usndolas. A continuacin a o mostramos varios ejemplos de uso:

A.4. Tutorial avanzado de Vi

145

c.ch c\.pe sto*p car.*n xyz.* ^Los abcdef$ ^Solo$ p[aiue]so Ver[D-F] Ver[^1-9] the[ir][re] [A-Za-z][A-Za-z]*

Coincide con coche, cacho, cochera, etc. Coincide con c.pe, c.per, etc. Coincide con stp, stop, stoop, etc. Coincide con cartn, carrilln, carmen, etc. o o Coincide con xyz al nal de la l nea. Encuentra cualquier l nea que empiece con Los. Encuentra cualquier l nea que termine con abcdef. Coincide con cualquier l nea que slo tenga la palabra Solo. o Coincide con paso, piso, puso, peso. Coincide con VerD, VerE, VerF. Coincide con Ver siempre que a continuacin NO haya un nmero. o u Coincide con their, therr, there, theie. Coincide con cualquier palabra.

vi usa el modo de comandos de ex para llevar a cabo bsquedas y sustituciones. Todos los u comandos que empiezan con dos puntos son comandos en modo ex. Los comandos de bsqueda y sustitucin permiten que se usen expresiones regulares sobre un u o rango de l neas y sustituir la tira de caracteres que se busca. El usuario puede pedir conrmacin o antes de que se realice la sustitucin. Merece la pena hacer una revisin de la representacin de los o o o nmeros de l u nea en el tutorial de ed. :<prim>,<ult>s/<busca>/<sust>/g :1,$s/los/Los/g :%s/the/The/g :.,5s/^.*//g :%s/los/Los/gc :%s/^....//g Comando general. Buscar el chero entero y sustituir los por Los. % siginica el chero entero (igual que arriba). Borra el contenido de la l nea actual hasta la quinta. Sustituye los con Los preguntando antes de hacer la operacin. o Borra los primeros cuatro carcteres de cada l a nea.

El comando de bsqueda es muy potente cuando se combina con las expresiones regulares. Si no u o se incluye la directiva g entonces el cambio slo se aplica a la primera instancia que se encuentre en cada l nea. En ocasiones usted quiere usar los caracteres de bsqueda en los caracteres de sustitucin. Se u o puede reescribir todo el comando en la l nea pero vi permite que los caracteres de sustitucin o incluyan algunos caracteres especiales. :1,5s/ayuda/&ndo/g :%s/ */&&/g Sustituye ayuda por ayudando en las cinco primeras l neas. Duplica el nmero de espacios entre palabras. u

El uso de la tira de caracteres completa para bsqueda tiene sus l u mites y por lo tanto vi usa los parntesis en secuencia de escape ( y ) para seleccionar el rango de la sustitucin. El uso de e o un d gito en secuencia de escape 1 identica el rango en el orden de la denicin y la sustitucin o o se puede hacer. :s/\^\(.*\):.*/\1/g :s/\(.*\):\(.*\)/\2:\1/g Borra todo despues de e incluyendo los dos puntos. Da la vuelta a las palabras a los dos lados de los dos puntos.

vi ofrece comandos muy potentes que muchos editores de texto modernos no tienen o no pueden

146

Apndice A. Introduccin a vi e o

ofrecer. El coste de esta potencia suele ser tambin el principal argumento en contra de vi. Los e comandos pueden ser dif ciles de aprender y leer. Sin embargo, la mayor de las cosas buenas a suelen ser un poco extraas al principio. Con un poco de prctica y tiempo, los comandos de vi se n a convertirn en una segunda naturaleza para Ud.. a

Apndice B e

The GNU General Public License


GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright c 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

Preamble
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free softwareto make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundations software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) oer you this license 147

148

Apndice B. The GNU General Public License e

which gives you legal permission to copy, distribute and/or modify the software. Also, for each authors protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modied by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reect on the original authors reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in eect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyones free use or not licensed at all. The precise terms and conditions for copying, distribution and modication follow.

Terms and Conditions


0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The Program, below, refers to any such program or work, and a work based on the Program means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modications and/or translated into another language. (Hereinafter, translation is included without limitation in the term modication.) Each licensee is addressed as you. Activities other than copying, distribution and modication are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Programs source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option oer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a. You must cause the modied les to carry prominent notices stating that you changed the les and the date of any change. b. You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.

149

c. If the modied program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modied work as a whole. If identiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a. Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b. Accompany it with a written oer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c. Accompany it with the information you received as to the oer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an oer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface denition les, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary

150

Apndice B. The GNU General Public License e

form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by oering access to copy from a designated place, then oering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

151

This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may dier in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program species a version number of this License which applies to it and any later version, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are dierent, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES

152

Apndice B. The GNU General Public License e

OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

How to Apply These Terms to Your New Programs


If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source le to most eectively convey the exclusion of warranty; and each le should have at least the copyright line and a pointer to where the full notice is found. one line to give the programs name and an idea of what it does. Copyright c 19yy name of author This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright c 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type show w. This is free software, and you are welcome to redistribute it under certain conditions; type show c for details. The hypothetical commands show w and show c should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than show w and show c; they could even be mouse-clicks or menu itemswhatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a copyright disclaimer for the program, if necessary. Here is a sample; alter the names:

153

Yoyodyne, Inc., hereby disclaims all copyright interest in the program Gnomovision (which makes passes at compilers) written by James Hacker. signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.

154

Apndice B. The GNU General Public License e

Apndice C e

The GNU Library General Public License


GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright c 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the rst released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.]

Preamble
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free softwareto make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. 155

156

Apndice C. The GNU Library General Public License e

For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object les to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) oer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributors protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modied by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reect on the original authors reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in eect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyones free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite dierent from the ordinary one; be sure to read it in full, and dont assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not eectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benet from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header les, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modication follow. Pay close attention to the dierence between a work based on the library and a work that uses the library. The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one.

157

Terms and Conditions for Copying, Distribution and Modication


0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called this License). Each licensee is addressed as you. A library means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The Library, below, refers to any such software library or work which has been distributed under these terms. A work based on the Library means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term modication.) Source code for a work means the preferred form of the work for making modications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface denition les, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modication are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Librarys complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option oer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a. The modied work must itself be a software library. b. You must cause the les modied to carry prominent notices stating that you changed the les and the date of any change. c. You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.

158

Apndice C. The GNU Library General Public License e

d. If a facility in the modied Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith eort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-dened independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modied work as a whole. If identiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by oering access to copy from a designated place, then oering equivalent access to copy the source code from the same place satises the requirement

159

to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a work that uses the Library. Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a work that uses the Library with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a work that uses the library. The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a work that uses the Library uses material from a header le that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially signicant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely dened by law. If such an object le uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object le is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a work that uses the Library with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modication of the work for the customers own use and reverse engineering for debugging such modications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a. Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable work that uses the Library, as object code and/or source code, so that the user can modify the Library and then relink to produce a modied executable containing the modied Library. (It is understood that the user who changes the contents of denitions les in the Library will not necessarily be able to recompile the application to use the modied denitions.) b. Accompany the work with a written oer, valid for at least three years, to give the same user the materials specied in Subsection 6a, above, for a charge no more than the cost

160

Apndice C. The GNU Library General Public License e

of performing this distribution. c. If distribution of the work is made by oering access to copy from a designated place, oer equivalent access to copy the above specied materials from the same place. d. Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the work that uses the Librarymust include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a. Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b. Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to nd the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further

161

restrictions on the recipients exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may dier in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library species a version number of this License which applies to it and any later version, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of

162

Apndice C. The GNU Library General Public License e

preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

NO WARRANTY
11. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY AS ISWITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

How to Apply These Terms to Your New Libraries


If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source le to most eectively convey the exclusion of warranty; and each le should have at least the copyright line and a pointer to where the full notice is found. one line to give the librarys name and a brief idea of what it does. Copyright (C) year name of author This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

163

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a copyright disclaimer for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library Frob (a library for tweaking knobs) written by James Random Hacker. signature of Ty Coon, 1 April 1990 Ty Coon, President of Vice Thats all there is to it!

164

Apndice C. The GNU Library General Public License e

Apndice D e

Qu es LuCAS? e
El proyecto LuCAS (Linux en CAStellano) comenz, como tantas otras cosas ligadas a Linux, en un o bar tomando cervezas (reales, no virtuales). Era all por marzo de 1995 y ya se hab comentado en a a las areas de FidoNet la necesidad de disponer de textos en castellano sobre Linux. Fue en aquel bar, el bar Ekin de Algorta (Bizkaia), donde nos reun amos los usuarios de FidoNet todos los domingos, donde surgi la idea de pasar a la accin. Tras discutirlo un poco, decidimos comenzar por traducir o o algo que fuese util para aquellos que comenzaban a dar sus primeros pasos en linux, y cre mos que el Installation & Getting Started de Matt Welsh era el documento ms adecuado. Como a era mucho trabajo para una sola persona, y hab mucha gente que se hab mostrado dispuesta a a a colaborar, hab que hacerlo bien, y el trabajo de traducir un libro como ste requer una labor a e a de coordinacin que inmediatamente asumimos Ramn Gutirrez y yo, Alfonso Belloso. Yo me hice o o e cargo de coordinar a los traductores para que no hiciesen trabajo repetido, y Ramn se encargaba o de juntar los trabajos y generar el documento nal. Pedimos permiso al propio Matt Welsh, y asi echamos a andar. Hubo que esperar un largo tiempo a tener una primera versin presentable del libro, pero se o consigui. Fundamentalmente, el hecho de que era una experiencia nueva, y la diversidad de gente o que colabor, hizo que este primer paso durase casi un ao, pero mereci la pena esperar. Hay que o n o decir que a pesar de que todo este movimiento surgi de FidoNet, y que desde all se sigue muy de o cerca, al poco de comenzar a trabajar en ello fue cuando consegu mi primera cuenta de Internet, y comprob que la forma ms prctica de coordinarnos era a travs de La Red, ya que por Fidonet las e a a e comunicaciones se hac demasiado largas en el tiempo y no siempre eran seguras (para contactar an con algn colaborador a veces se pod tardar 2 semanas, o no saber nada de l jams). Y con ello u a e a comenzamos a disponer de ms herramientas: primero un servidor de ftp, luego una lista de correo, a un servidor de Web, y as hasta hoy. Bueno, pues una vez terminado este primer libro nos qued el o gusanillo de hacer ms, y visto que yo acab un poco cansado, vino Juan Jos Amor, me tom el a e e o relevo y comenzamos a traducir la Network Administrator Guide de Olaf Kirch. Esta vez, y con la infraestructura ya montada, tardamos unos pocos meses en tener la primera versin. o Y despus de ste ya se estn haciendo ms. Ya esta terminada la traduccion de la Linux User e e a a Guide (en su fase alfa), y hay algn proyecto ms en marcha. No quiero dejar de mencionar otros u a proyectos que trabajan en paralelo a ste. LuCAS en s se ha ido dedicando ms a la labor de traduce a 165

166

Apndice D. Qu es LuCAS? e e

cin de textos tipo libro, ms concretamente a los del LDP, y creaciones propias, si bien en su origen o a se ide para traducir cualquier tipo de documento e incluso para crear documentos directamente o en castellano. El SLUG (Spanish Linux User Group) ya exist cuando surgi LuCAS, o acababa a o de aparecer. Al amparo de LuCAS surgi el INSFLUG, que se centra en la traduccin/creacin o o o de FAQs, HOWTOs y documentos ms pequeos. Y probablemente existan ms grupos haciendo a n a tareas similares, pero que ahora no conozco, ni soy capaz de recordar. Para contactar con los coordinadores del grupo LuCAS, puede hacerlo con Alfonso Belloso Martinez <mailto:alfon@bipv02.bi.ehu.es> o en <mailto:alfon@iies.es>; y con Juan Jose Amor Iglesias <jjamor@ls..upm.es>.

Apndice E e

Qu es INSFLUG? e
El INSFLUG naci all por marzo del 96, siendo su seno materno el area echomail de FidoNet o a R34.LINUX. Surge ante el entusiasmo de los que empezbamos por aquel entonces a adentrarnos en a el mundo del Linux, maravillados por como un SO tan potente, de distribucin libre, pod haberse o a hecho realidad gracias al buen hacer, generosidad e incre ble colaboracin entre tantas personas o dispersaspor el globo. . . Nos sentimos an ms maravillados al observar la incre u a ble participacin de la gente que freo cuentaba el area, modlica en FidoNet, y por la inestimable ayuda que all se prestaba; eso fue, e haciendo un poco de psiclogo lo que produjo la formacin del INSFLUG, un inmenso y sinceo o ro agradecimiento, adems de enormes ganas de corresponder por nuestra parte, aportando nuestro a granito de arena a la comunidad Linux en forma de traducciones de Howtos y FAQs, documentos que generalmente no superan la decena de pginas, y con cuya traduccin adems de aportar, el nvel a o a o o no tan nvel, profundiza en el tema del que trate el Howto a medida que lo traduce, redundando o en benecio para l mismo. . . ;-) e El INSFLUG se centra en la traduccin de Howtos y FAQs (Frecuently Asked Questions, algo o as como Preguntas de Uso Frecuente, PUFs). Para la traduccin no necesitas ms que un editor de texto (En Linux hay muchos) normal, y o a el paquete linuxdoc-sgml, con el que empleando un lenguaje muy sencillo, similar al HTML, una vez escrito un slo fuente, se podrn obtener a partir de l el documento en formatos *.dvi, *.ps, o a e *.txt, *.lyx, *.rtf, *.info, *.html, etc.. Cuentas adems con una gu traducida del uso del linuxdoc-sgml en la que se aaden detalles a a n de conguracin para el castellano, adems de la facilidad que supone el traducir editando el fuente o a original en ingls, ya que los codigos, etc., ya estn; no obstante, es un lenguaje sencill e a simo, adems a de ser el formato ocial de todos los Howtos. El INSFLUG colabora estrechamente con LuCAS, es ms, hay varias personas que colaboran a con ambos grupos. El grupo LuCAS se dedica mayormente a las gu (guides), los libros ms as a extensos del LDP o (Linux Documentation Project). El coordinador de INSFLUG es Francisco J. Montilla (email: <mailto:pacopepe@iname.com>; 167

168

Apndice E. Qu es INSFLUG? e e

irc: pukka; FiDO: 2:345/402.22). Si desea ms informacin puede consultar su pgina en WWW en a o a <http://www.insug.nova.es> y su espacio de FTP en <ftp://ftp.insug.nova.es>.

Bibliograf a
[1] Almesberger, Werner. LILO: Generic Boot Loader for Linux. Disponible electrnicamente: o tsx-11.mit.edu. 3 de Julio de 1993. [2] Bach, Maurice J. The Design of the UNIX Operating System. Englewood Clis, New Jersey: Prentice-Hall, Inc. 1986.
A [3] Lamport, Leslie. L TEX: A Document Preparation System. Reading, Massachusetts: AddisonWesley Publishing Company. 1986.

[4] Stallman, Richard M. GNU Emacs Manual, octava edicin. Cambridge, Massachusetts: Free o Software Foundation. 1993.

169

You might also like