



G.L.U.P.  -  Gua  de  Linux  Para  el  Usuario
_______________________________________________________________________________________________________________
                                                       Copyright Oc  1993, 1994, 1996   Larry Greenfield



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 especficos de Linux. El destinatario de este manual
es el usuario principiante de Unix, aunque puede ser de utilidad como referencia para los usuarios ms
experimentados.
_______________________________________________________________________________________________________________





                          Esta pgina se ha dejado en blanco intencionalmente.
_______________________________________________________________________________________________________________i


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 Labora-
tories, o con X/Open.
Por favor, ponga en conocimiento del autor cualquier marca registrada que no se haya mencionado.



Copyright Oc  Larry Greenfield
427 Harrison Avenue
Highland Park, NJ
08904
leg+@andrew.cmu.edu



Traduccin al castellano 1997 Grupo LuCAS.
Ver apndice LuCAS para una relacin completa.



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  modificadas  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
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 notificacin de permiso idntica a esta misma.

Se garantiza el permiso de copiar y distribuir traducciones de este manual a otros idiomas bajo las
condiciones dadas para versiones modificadas. "La Licencia Pblica General GNU" y "La Licencia
Pblica General de Biblioteca GNU" pueden incluirse a travs de una traduccin aprobada por la
Free Software Foundation, en lugar de los originales en ingls.

A su opcin, Ud. puede distribuir copias literales o modificadas de este documento bajo los trminos
de la "La Licencia Pblica General GNU", excepto las secciones marcadas claramente bajo otros
derechos de autor.

    Con distintos objetivos, pueden garantizarse ciertas excepciones a esas reglas.  Escriba a Larry
Greenfield a la direccin dada ms arriba, o enve correo electrnico a leg+@andrew.cmu.edu y
consulte.  Se solicita (pero no se requiere) que Ud.  notifique al autor cuando se imprima a gran
escala o se comercialice este documento.  Las regalas y donaciones sern aceptadas y sustentarn
las siguientes ediciones.
_______________________________________________________________________________________________________________ii


    Estas son algunas de las convenciones tipogrficas que se utilizan en este libro.


negrita            Se utiliza para iniciar nuevos conceptos, AVISOS, y palabras reservadas de
                   lenguajes.


itlica        Se utiliza para enfatizar el texto.


inclinada          Se usa para marcar meta-variables en el texto, especialmente en representaciones
                   de la lnea de comandos.   Por ejemplo,  "ls  -l  foo"  donde foo  se coloca en la
                   posicin donde "ira" un nombre de archivo, como por ejemplo /bin/cp.


monoespaciada       Se usa para representar la interaccin en la pantalla.

                   Tambin se usa para los ejemplos de cdigo fuente, sea que se trate de cdigo "C",
                   guiones de shell, o lo que sea, y para mostrar archivos en general, como por ejemplo
                   archivos de configuracin.  Cuando razones de claridad adicional lo exijan, estos
                   ejemplos se enmarcarn en cuadros finos.
________
|_Tecla_|          Representa la tecla que debe oprimir.  En general lo ver utilizado de la siguiente
                   manera:
                           _______
                   "Oprima |_Intro_|para continuar."


3                  El  diamante  en  el  margen,  como  los  diamantes  negros  en  las  montaas  de  ski,
                   marcan  los  lugares  de  "peligro"  o  "precaucin".   Debe  leer  cuidadosamente  los
                   prrafos marcados de este modo.



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



                   Esto indica un pargrafo que contiene informacin especial que debe leerse con todo
                   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 User's 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
       y adems escribi la mayor parte del Captulo 8 y el Captulo 9.  Cualquier reconocimiento
       hacia su labor ser insuficiente.


Maurizio Codogno          escribi gran parte del Captulo 11.


David Channon         escribi el apndice sobre el vi. (Apndice A)


Yggdrasil Computing, Inc.           por su generoso (y voluntario) sostn para este manual.


Red Hat Software         por su (ms reciente y tambin voluntario) sostn.


El programa fortune         por proveerme algunas de las preciosas citas con las cuales comenzar cada
       captulo. An cuando a nadie ms le gusten, a m me encantan.



                                                       iii
_______________________________________________________________________________________________________________iv






ndice   General



1   Introduccin                                                                                         1

    1.1   >Quin debe leer este libro?  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    1

          1.1.1   >Qu debe hacer antes de leer este libro?   . . . . . . . . . . . . . . . . . . . .    1

    1.2   >Cmo evitar leer este libro?   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    2

    1.3   >Cmo leer este libro?  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    2

    1.4   Documentacin de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    3

          1.4.1   Otros libros de Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    4

          1.4.2   COMOs  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    4

          1.4.3   >Qu es el Proyecto de Documentacin de Linux? . . . . . . . . . . . . . . . .    4

    1.5   Sistemas operativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    4



2   A propsito, >qu es Unix?                                                                       7

    2.1   La historia de Unix  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    7

    2.2   La historia de Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    8

          2.2.1   Linux aqu y ahora  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    9

          2.2.2   Unas pocas preguntas y respuestas  . . . . . . . . . . . . . . . . . . . . . . . .    9

          2.2.3   Software comercial en Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . .   10



3   En el principio                                                                                     11

    3.1   La computadora despierta  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   11

    3.2   Linux despierta  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   12

    3.3   La actuacin del usuario  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   14

          3.3.1   El ingreso  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   14

          3.3.2   Al abandonar la computadora . . . . . . . . . . . . . . . . . . . . . . . . . . .   15

          3.3.3   Como apagar la computadora  . . . . . . . . . . . . . . . . . . . . . . . . . . .   16


                                                       v
_______________________________________________________________________________________________________________vi      *
 *                                 @


    3.4   Mensajes del ncleo   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   17



4   El shell de Unix                                                                                    21

    4.1   Comandos Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   21

          4.1.1   Un comando Unix tpico  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   22

    4.2   Autoayuda   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   23

    4.3   Almacenaje de la informacin  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   24

          4.3.1   Miremos los directorios con ls   . . . . . . . . . . . . . . . . . . . . . . . . . .   25

          4.3.2   El directorio actual y cd  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   27

          4.3.3   Creacin y borrado de directorios . . . . . . . . . . . . . . . . . . . . . . . . .   29

    4.4   Informacin en movimiento   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   30

          4.4.1   cp como un monje  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   31

          4.4.2   La poda con rm  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   32

          4.4.3   Sera interesante tener un rastrillo   . . . . . . . . . . . . . . . . . . . . . . . .   33



5   El sistema de ventanas X                                                                        35

    5.1   Ejecucin y salida del sistema de ventanas X   . . . . . . . . . . . . . . . . . . . . . .   35

          5.1.1   Ejecucin de X  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   35

          5.1.2   Salida de X  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   35

    5.2   >Qu es el sistema de ventanas X?   . . . . . . . . . . . . . . . . . . . . . . . . . . . .   36

    5.3   >Qu es esto que hay en mi pantalla? . . . . . . . . . . . . . . . . . . . . . . . . . . .   36

          5.3.1   XClock   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   37

          5.3.2   XTerm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   38

    5.4   Gestores de ventanas  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   38

          5.4.1   Cuando se crean nuevas ventanas  . . . . . . . . . . . . . . . . . . . . . . . . .   38

          5.4.2   Foco  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   39

          5.4.3   Moviendo ventanas  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   39

          5.4.4   Profundidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   40

          5.4.5   Iconizar  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   40

          5.4.6   Variando el tamao   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   40

          5.4.7   Maximizacin  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   41

          5.4.8   Mens  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   41

    5.5   Atributos X  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   41
_______________________________________________________________________________________________________________NDI*
 *CE GENERAL              @


          5.5.1   Geometra  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   41

          5.5.2   Presentacin   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   42

    5.6   Caractersticas comunes  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   43

          5.6.1   Botones  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   43

          5.6.2   Barras de men . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   44

          5.6.3   Barras de desplazamiento  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   44



6   Trabajando con Unix                                                                             47

    6.1   Comodines   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   47

          6.1.1   >Qu ocurre realmente?   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   48

          6.1.2   El signo de interrogacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   48

    6.2   Ganar tiempo con bash   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   49

          6.2.1   Editando la lnea de comandos   . . . . . . . . . . . . . . . . . . . . . . . . . .   49

          6.2.2   Completamiento de comandos y nombres de fichero . . . . . . . . . . . . . . .   49

    6.3   La entrada estndar y La salida estndar   . . . . . . . . . . . . . . . . . . . . . . . .   50

          6.3.1   Algunos conceptos de Unix   . . . . . . . . . . . . . . . . . . . . . . . . . . . .   50

          6.3.2   Redireccionar la salida  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   50

          6.3.3   Redireccionar la entrada  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   51

          6.3.4   Las tuberas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   51

    6.4   Multitarea  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   52

          6.4.1   Usando el control de trabajos  . . . . . . . . . . . . . . . . . . . . . . . . . . .   52

          6.4.2   Teora del control de trabajos  . . . . . . . . . . . . . . . . . . . . . . . . . . .   56

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



7   Pequeos programas potentes                                                                  61

    7.1   El poder de Unix  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   61

    7.2   Trabajando con ficheros   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   62

    7.3   Estadsticas del sistema   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   64

    7.4   >Qu hay en un fichero?  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   65

    7.5   Comandos de edicin  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   67



8   Editando archivos con Emacs                                                                   71

    8.1   >Qu es Emacs? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   71

    8.2   Comenzar rpidamente en X   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   73
_______________________________________________________________________________________________________________viii    *
 *                                 @


    8.3   Editando varios archivos al mismo tiempo  . . . . . . . . . . . . . . . . . . . . . . . .   74

    8.4   Terminando una sesin de edicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   75

    8.5   La tecla Meta  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   76

    8.6   Cortar, pegar, destruir y tirar  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   76

    8.7   Buscar y reemplazar  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   77

    8.8   >Qu es lo que ocurre realmente?  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   78

    8.9   Pidiendo ayuda a Emacs  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   79

    8.10  Especializando buffers: Modos   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   80

    8.11  Modos de programacin  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   81

          8.11.1  Modo C  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   81

          8.11.2  Modo Scheme  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   81

          8.11.3  Modo de correo  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   82

    8.12  Como ser ms eficiente an   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   83

    8.13  Personalizando Emacs  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   84

    8.14  Averiguando ms  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   88



9   <Tengo que ser yo mismo!                                                                       91

    9.1   Personalizacin del bash  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   91

          9.1.1   Arranque del shell   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   91

          9.1.2   Ficheros de arranque  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   92

          9.1.3   Creando alias  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   92

          9.1.4   Variables de entorno  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   93

    9.2   Los ficheros de inicio de X Window  . . . . . . . . . . . . . . . . . . . . . . . . . . . .   99

          9.2.1   Configuracin de twm  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  101

          9.2.2   Configuracin de fvwm   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  107

    9.3   Otros ficheros de inicio  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  107

          9.3.1   El fichero de configuracin de Emacs  . . . . . . . . . . . . . . . . . . . . . . .  107

          9.3.2   Configuracin por defecto del FTP  . . . . . . . . . . . . . . . . . . . . . . . .  107

          9.3.3   Permitiendo un acceso remoto sencillo a su cuenta   . . . . . . . . . . . . . . .  108

          9.3.4   Redireccin de correo   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  109

    9.4   Veamos algunos ejemplos   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  110
_______________________________________________________________________________________________________________NDI*
 *CE GENERAL              @


10  Hablando con los dems                                                                        111

    10.1  Correo electrnico   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  111

          10.1.1  Enviar correo  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  111

          10.1.2  Leer el correo  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  112

    10.2  Noticias ms que de sobra  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  113

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

    10.6  Viajando por la telaraa  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  116



11  Comandos divertidos                                                                            117

    11.1  find, el buscador de ficheros   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  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 ltima palabra   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  124

    11.2  tar, el archivador en cinta  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  125

          11.2.1  Introduccin   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  125

          11.2.2  Opciones principales  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  125

          11.2.3  Modificadores  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  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 clasificador de datos   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  127

          11.4.1  Introduccin   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  127

          11.4.2  Opciones   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  127

          11.4.3  Ejemplos   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  127
_______________________________________________________________________________________________________________x       *
 *                                 @


12  Errores, equivocaciones, bugs, y otras molestias                                         129

    12.1  Evitando errores   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  129

    12.2  Qu hacer cuando algo va mal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  130

    12.3  No es fallo tuyo  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  130

          12.3.1  Cuando hay un error  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  131

          12.3.2  Notificando un error  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  131



A   Introduccin a vi                                                                                 133

    A.1   Una rpida historia de Vi   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  133

    A.2   Rpido tutorial de Ed   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  134

          A.2.1   Crear un fichero   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  134

          A.2.2   Editar un fichero existente . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  135

          A.2.3   Nmeros de lnea en detalle  . . . . . . . . . . . . . . . . . . . . . . . . . . . .  136

    A.3   Rpido tutorial de Vi   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  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 fichero  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  138

          A.3.5   >Qu viene a continuacin?  . . . . . . . . . . . . . . . . . . . . . . . . . . . .  138

    A.4   Tutorial avanzado de Vi  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  139

          A.4.1   Movimiento  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  139

          A.4.2   Modificacin del texto  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  140

          A.4.3   Copiar y mover bloques de texto  . . . . . . . . . . . . . . . . . . . . . . . . .  142

          A.4.4   Bsqueda y cambio de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . .  144



B   The GNU General Public License                                                           147



C   The GNU Library General Public License                                                 155



D   >Qu es LuCAS?                                                                                 165



E   >Qu es INSFLUG?                                                                             167




Captulo  1



Introduccin



              How much does it cost to entice a dope-smoking Unix system guru to Dayton?
                                               Brian Boyle, Unix World's First Annual Salary Survey



1.1       >Quin  debe  leer  este  libro?



>Es Ud. la persona que debe leer este libro? Permtame responder a esta pregunta hacindole estas
otras: >Acaba de obtener Linux de alguna fuente, lo instal y ahora quiere saber que puede hacer?
O, >es un usuario de computadoras que nunca ha utilizado Unix y est considerando usar Linux
pero quiere saber lo que puede hacer con l?

    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 mayora de *
 *los
comandos bsicos de Unix, e incluso de algunos avanzados. Tambin trataremos acerca del potente
editor GNU Emacs y de muchas otras aplicaciones importantes en Unix.



1.1.1      >Qu debe hacer antes de leer este libro?


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
corriendo Linux.  Este requerimiento no es estrictamente necesario, pero cuando las versiones de
Unix difieran 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
una distribucin completa, como por ejemplo la MCC-Interim, y que la tenga instalada.  Existen
diferencias entre las distintas distribuciones de Linux, pero la mayora de ellas son insignificantes.
Ocasionalmente  ver  que  en  este  libro  las  cosas  se  ven  un  poquito  distintas  a  lo  que  ve  en  su


                                                       1
_______________________________________________________________________________________________________________2       *
 *                                 @


computadora. Si le sucede esto, es probable que est utilizando una versin distinta de la ma: estoy
interesado en recibir informes de tales casos.

    Si Ud. es el superusuario (el ocupado del mantenimiento, el instalador) del sistema, deber crearse
una cuenta de usuario normal para Ud. mismo. Consulte por favor los manuales de instalacin para
obtener la informacin necesaria.  Si no es el superusuario, deber solicitarle a quien lo sea que le
cree una cuenta.

    Ahora deber tener tiempo y paciencia. El aprendizaje de Linux no es fcil _la mayora de las
personas encuentran que es ms fcil aprender el sistema operativo del Macintosh.  Una vez que
aprende Linux las cosas se vuelven mucho ms fciles. Unix es un sistema muy poderoso y con l es
muy fcil realizar tareas complejas.

    Adems, este libro supone que Ud.  est moderadamente familiarizado con algunos trminos
computacionales. Aunque este requerimiento no es necesario, hace ms fcil la lectura. Debe conocer
trminos como `programa' o `ejecucin'.  Si no los maneja, necesitar de la ayuda de alguien ms
avezado durante su aprendizaje de Unix.



1.2       >Cmo  evitar  leer  este  libro?



La mejor manera de aprender el uso de casi cualquier programa de computadora es ponindose a
trabajar sobre la computadora. La mayora de las personas encuentran de poco beneficio la lectura
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
posible que haga algunos los, pero siempre puede volver a instalar todo. Mantenga actualizadas las
copias de seguridad1 y <divirtase!

    Unix no es un sistema operativo tan intuitivamente obvio como algunos otros.  Por lo tanto, es
probable que deba leer al menos los captulos 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
disponible en lnea en Linux.  Para ello debe aprender a utilizar el comando man _su descripcin
est en la Seccin 4.2.



1.3       >Cmo  leer  este  libro?



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
libro.  Encontrar una variedad de temas, algunos de los cuales sern de su inters.  Luego de un
tiempo, se sentir lo suficientemente confiado como para utilizar comandos sin saber exactamente
que es lo que deberan hacer. Esta es una buena seal.

    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
_____________________________________________1
    N. del T.: backups
_______________________________________________________________________________________________________________1.4.   D*
 *ocumentacin de Linu@


saber que Unix es realmente mucho ms que el shell, o mucho menos _dependiendo de como lo
mire.  Este libro le dir como utilizar el shell, los programas que usualmente vienen con Unix, y
algunos programas que no son muy comunes (pero que Linux casi siempre trae).

    El captulo actual es un meta-captulo _se discute acerca del libro y de como aplicarlo para
poder hacer nuestro trabajo. Los otros captulos contienen:



Captulo 2 trata del origen y destino de Unix y Linux.  Tambin se habla de la Free Software
       Foundation y el proyecto GNU.


Captulo 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 tiles e interesantes.


Captulo 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
       que necesitar conocer para utilizar Unix.


Captulo 5 cubre el sistema de ventana X2. X es la cara grfica principal de Unix, e incluso algunas
       distribuciones lo configuran como opcin predeterminada.


Captulo 6 analiza algunas de las caractersticas ms avanzadas del shell de Unix. El aprendizaje
       de las tcnicas tratadas en este captulo le ayudar a ser ms eficiente.


Captulo 7 tiene breves descripciones de muchos de los comandos Unix. Cuanto ms herramientas
       sabe utilizar un usuario, ms rpidamente puede concluir su trabajo.


Captulo 8 describe el editor de textos Emacs. Se trata de un programa muy extenso que integra
       varias de las herramientas de Unix bajo una nica interfaz.


Captulo 9 trata acerca de las distintas maneras que hay de personalizar un sistema Unix para
       satisfacer sus gustos personales.


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


Captulo 11  describe algunos de los comandos con ms opciones y ms difciles de utilizar.


Captulo 12  muestra formas sencillas de evitar errores en Unix y Linux.



1.4       Documentacin  de  Linux



Este libro, Gua de Linux Para el Usuario, est pensado para el principiante en Unix.  Afortunada-
mente, el Linux Documentation Project (Proyecto de Documentacin de Linux) tambin est escri-
biendo_libros_para_los_usuarios_ms_experimentados4._
   2N. del T.: X Window System.
   3N. del T.: tambin conocida como WWW o World Wide Web.
   4N. del T.:  El proyecto LuCAS est ocupndose de traducir parte de la documentacin de Linux al castell*
 *ano.
Para obtener informacin actualizada de las traducciones, vea el apndice D.
_______________________________________________________________________________________________________________4       *
 *                                 @


1.4.1      Otros libros de Linux


Los otros libros incluyen Installation and Getting Started 5, que es una gua para obtener e instalar
Linux,  The  Linux  System  Administrator's  Guide,  trata  como  organizar  y  mantener  un  sistema
Linux, y The Linux Kernel Hacker's Guide, que explica como modificar Linux. The Linux Network
Administrator Guide6 muestra como instalar, configurar y utilizar una conexin de red.



1.4.2      COMOs


Adems de los libros, el Proyecto de Documentacin de Linux7 ha realizado una serie de pequeos
documentos que describen como configurar algn aspecto particular de Linux.   Por ejemplo,  el
SCSI-COMO describe algunas de las complicaciones que aparecen al utilizar SCSI _que es una manera
estndar de comunicarse con ciertos dispositivos_ y Linux.

    Estos COMOs estn disponibles en varios formatos: en un libro como The Linux Bible o Dr. Linux ;
en el foro de discusin comp.os.linux.answers; o en varios lugares de la WWW. El sitio central
de la informacin acerca de Linux es http://www.linux.org.



1.4.3      >Qu es el Proyecto de Documentacin de Linux?


Como casi todo lo asociado con Linux,  el Proyecto de Documentacin de Linux consiste en un
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.

    Se espera que el Proyecto de Documentacin de Linux provea los libros que satisfagan todas las
necesidades de documentacin de Linux en algn momento. Por favor, dganos si hemos tenido xito
o qu es lo que debemos mejorar. Puede contactar al autor en leg+@andrew.cmu.edu, a Matt Welsh
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
hacen un trabajo de inters para el usuario.  Por ejemplo, Ud.  puede estar utilizando un editor
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
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
actividades de mantenimiento de rutina (adems de los programas que utilizar principalmente)
_____________________________________________5
    N. del T.: Disponible en castellano como Linux: Instalacin y Primeros Pasos. Vea el apndice D
   6N. del T.: Disponible en castellano como Gua de Administracin de Redes con Linux. Vea el apndice D
   7N. del T.: El grupo INSFLUG ha traducido varios de los documentos HOWTO, acuando el trmino COMO.
Vea el apndice E.
   8N. del T.: y al coordinador de esta traduccin Csar Ballardini en cballard@santafe.com.ar
_______________________________________________________________________________________________________________1.5.   S*
 *istemas operativos      @


que Ud.  tambin necesitar realizar.  En el caso de Linux, el sistema operativo contiene adems
un montn de "mini-aplicaciones" para ayudarle a realizar de manera ms eficiente su trabajo.  El
conocimiento del sistema operativo le ser de ayuda si su trabajo no se centra en alguna aplicacin
monoltica.

    Los sistemas operativos (SO, para abreviar) pueden ser simples y mnimos, 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 dise originalmente
como una simplificacin de un sistema operativo que se denomin Multics.

    La filosofa original de diseo de Unix fue la de distribuir la funcionalidad en pequeas partes: los
programas9.  De esta forma, el usuario puede obtener nueva funcionalidad y nuevas caractersticas
de una manera relativamente sencilla mediante las diferentes combinaciones de pequeas partes
(programas). Adems, en el caso de que aparezcan nuevas utilidades (y de hecho aparecen), puede
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
texto, LATEX para darle forma, xdvi para ver una presentacin preliminar, dvips para prepararlo
para la impresin, y luego lpr para imprimirlo.  Si maana llegara a conseguir otro programa de
presentacin preliminar de archivos dvi, podra utilizarlo en lugar del xdvi sin cambiar el resto de
los programas que uso.  En el momento actual mi sistema est corriendo treinta y ocho programas
simultneamente. (Gran parte de ellos son programas del sistema que "duermen" hasta que tienen
algn trabajo especfico para realizar.)

    Cuando utilice un sistema operativo, desear minimizar la cantidad de trabajo que tiene que llevar
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 final tener que abandonar todo.  Este libro le ensear qu herramientas
debe Ud. utilizar en qu situacin, y como combinar esas herramientas entre s.

    La parte clave de un sistema operativo se denomina "ncleo"10. En muchos sistema operativos,
como Unix, OS/2, o VMS, el ncleo proporciona las funciones necesarias para los programas que
estn corriendo, y los planifica para su ejecucin.  Esto significa bsicamente que el programa A
puede tomar una cierta cantidad de tiempo, el programa B la misma cantidad, etc..  El ncleo
siempre est funcionando:  es el primer programa que arranca cuando se enciende el sistema, y el
 ltimo programa que hace algo cuando se apaga el equipo.



_____________________________________________9
    Este diseo estuvo determinado por el hardware sobre el cual funcion originalmente Unix. Por alguna extra**
 a
razn, el sistema operativo resultante fue muy til sobre otras plataformas de hardware.  El diseo bs*
 *ico fue tan
bueno que an veinticinco aos despes sigue usndose.
  10N. del T.: ncleo del ingls "kernel".
_______________________________________________________________________________________________________________6       *
 *                                 @






Captulo  2



A   propsito,   >qu   es   Unix?



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



2.1       La  historia  de  Unix



En 1965, los Bell Telephone Laboratories (Bell Labs, una divisin de AT&T) estaba trabajando con
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 ninguna parte y disolvi el grupo. Esto, sin embargo, dej a la Bell sin un buen sistema operativo.

    Ken Thompson y Dennis Ritchie decidieron esbozar un sistema operativo que supliera las necesi-
dades de la Bell Labs.  Cuando Thompson lleg a necesitar un entorno de desarrollo (1970) que
corriera en una PDP-7,  aprovech para poner en prctica sus ideas.  Brian Kernighan le di el
nombre de Unix como un juego de palabras contra Multics.

    Un tiempo despus, Dennis Ritchie invent el lenguaje de programacin "C". En 1973, se ree-
scribi el sistema operativo Unix en C, en lugar del ensamblador original1. En 1977, se movi Unix a
una nueva mquina distinta de las PDP en las que haba corrido previamente, mediante un proceso
que se denomina migracin.  El hecho de que Unix estaba escrito en C facilit la migracin, pues
gran parte del cdigo ya escrito necesit slo una simple recompilacin, y no una rescritura.

    Al final de los '70, AT&T tena prohibido competir en la industria de la computacin, por lo que
otorg licencias econmicas de Unix a varios colegios y universidades. Unix se difundi lentamente
fuera de las instituciones acadmicas, pero pronto tambin se hizo popular en el mbito comercial.
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
tipo particular de ordenador.


                                                       7
_______________________________________________________________________________________________________________8       *
 *                                 @


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 SVR43, mientras que la ltima
BSD es la 4.4.   Sin embargo,  existen muchas diferentes versiones de Unix entre estas dos.   La
mayora de las versiones de Unix son desarrolladas por compaas de software y derivan de uno
de los dos agrupamientos.  Las versiones que se utilizan actualmente incorporan caractersticas 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
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
de Linux.  Una de las cosas ms interesantes de Linux es que el desarrollo ocurre simultneamente
alrededor del mundo. La gente ha contribudo desde Australia a Finlandia y esperamos que lo siga
haciendo.

    Linux comenz como un proyecto para explorar el chip 386.  Uno de los primeros proyectos de
Linus fue un programa que pueda alternar entre la impresin de AAAA y BBBB. Esto luego evolucion
hacia Linux.

    Linux ha sido registrado bajo los trminos de la Licencia Pblica General GNU (GNU General
Public License) o GPL. Esta licencia, escrita por la Free Software Foundation (FSF), est diseada
para evitar que alguna persona restrinja la distribucin de software.  En pocas palabras, dice que
aunque Ud.  cobre a alguien por entregarle una copia, no podr impedir que ese alguien la regale.
Tambin significa que debe estar disponible el cdigo fuente4. Esto es til para los programadores.
Cualquiera puede modificar Linux y an distribuir sus modificaciones, siempre que mantenga el
cdigo bajo la misma licencia.

    En Linux puede correr la mayora del software popular en Unix, incluyendo el Sistema de Ven-
tanas X. X se desarroll en el Instituto Tecnolgico Massachusetts, para permitir a los sistemas
Unix la creacin de ventanas grficas, y la cmoda interaccin con las mismas. En la actualidad, el
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
estandarizacin publicados por la IEEE denominados POSIX. Linux antes que nada satisface los
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 mayora de las
personas, una buena) de los tres estndares.

    Algunas de las utilidades includas 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
_____________________________________________2
    Recientemente vendida a Novell, antes era propiedad de AT&T.
   3Una manera crptica de decir "System five, Revision four".
   4El cdigo fuente de un programa es lo que el programador lee y escribe.  Luego se traduce a un cdigo de
mquina ilegible para las personas, que es el que la computadora interpreta.
_______________________________________________________________________________________________________________2.2.   L*
 *a historia de Linux     @


sistema operativo portable con el estilo de Unix.  "Portable" significa que pueda correr en una
variedad de mquinas distintas, no slo en PCs Intel, Macintoshes, o lo que sea. El sistema operativo
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.

    La historia precedente de Linux olvida mencionar otra persona ms all de Linus Torvalds. Por
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.
Este nmero cambia muy lentamente y para la poca en que esto se escribe (febrero de 1996),
slo  est  disponible  la  versin  "1"5.   La  segunda  cifra  indica  revisiones  de  menor  envergadura.
Los segundos nmeros cuando son pares representan versiones ms estables, en las que uno puede
confiar plenamente; cuando son impares indican versiones en desarrollo, que son ms propensas a
contener errores.  La ltima cifra es el nmero menor de lanzamiento _cada vez que se libera una
nueva versin, que tal vez slo arregla unos pocos problemas o agrega unas pocas caractersticas,
se incrementa en uno este nmero.  En febrero de 1996, la ltima versin estable es la 1.2.11, y la
 ltima 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 regular-
mente, esto se debe normalmente a causa de piezas de hardware que no son estndares o que estn
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 as-
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 galimatas _>es un error o una "caracterstica"?  Sorpresivamente es una caracterstica
_existen ciertas secuencias de control que al aparecer provocan el galimatas. Espero que este libro
le sea de ayuda para poder identificar esas situaciones.



2.2.2      Unas pocas preguntas y respuestas


Antes de embarcarnos para nuestra larga travesa, repasemos las cuestiones ultra-importantes.

    Pregunta: >Cmo se pronuncia Linux?

    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. del T.: La traduccin se hace en febrero de 1997, y ya la versin "2" es cosa de todos los das.
   6N. del T.: error del ingls bug.
_______________________________________________________________________________________________________________10      *
 *                                 @


la pronunciacin (americana) de "Peanuts" en Linus, sino ms bien como "LIH-nucks".  Y la u es
cortante, como en "rule", no suave como en "ducks". Linux debe al menos rimar con "cynics".

    Pregunta: >Por qu trabajar en Linux?

    Respuesta: >Por qu no? Linux es generalmente ms barato que los otros sistemas operativos
(o al menos no ms caro) y con frecuencia es menos problemtico que algunos sistemas comerciales.
Puede que no sea el mejor sistema para sus aplicaciones en particular, pero para alguien que est
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
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
Perfect (el popular procesador de palabras) hasta Maple, que es un paquete que realiza complejas
manipulaciones simblicas, para Linux.

    Para aquellos lectores interesados en las cuestiones legales, esto est permitido por la licencia de
Linux.  A la vez que la licencia GNU General Public License (que se reproduce en el Apndice B)
cubre el ncleo de Linux, la licencia GNU Library General Public License (que se puede ver en el
Apndice C) cubre la mayor parte del cdigo del cual dependen las aplicaciones. Esto permite que
los proveedores de software comercial puedan vender sus aplicaciones y reservarse el cdigo fuente
de las mismas.

    Debe Ud. percatarse de que los dos documentos antes nombrados son notificaciones 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
envolver y asfixiar, sino que est protegido por la misma ley que le impide a Ud.  fotocopiar un
libro.




Captulo  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 identificarse frente a la computadora
antes de poder utilizarla; siempre se supone que es el nico 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
utilizarlo ms de una persona a la vez, sino que las distintas personas recibirn distinto trato.

    Para poder identificar las personas, Unix necesita un usuario para que el proceso denominado
ingreso1 pueda identificarlo o identificarla2.  Apenas se enciende una computadora, tiene lugar un
complejo proceso antes que la misma est lista para ser usada.  Como esta gua est orientada a
Linux, les dir que es lo que sucede durante la secuencia de arranque3.

    Debe advertir Ud. que si est utilizando Linux en alguna clase de ordenador distinto a una PC
Intel, algunos temas de este captulo no se aplicarn a su caso.  En su mayora, dichos temas se
encontrarn en la Seccin 3.1.

    Si Ud. est interesado nicamente en utilizar su computadora, puede saltearse toda la informa-
cin de este captulo, excepto la de la Seccin 3.3.



3.1       La  computadora  despierta



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



                                                       11
_______________________________________________________________________________________________________________12      *
 *                                 @


nuestros propsitos, el BIOS es un programa que nunca se puede cambiar.  Al funcionar, realiza
ciertas comprobaciones mnimas y luego se fija si hay un disquete en la primer disquetera.  Si en-
cuentra alguno, mira en su "sector de arranque" y comienza a ejecutar su cdigo, si lo hay.  Si hay
un disquete pero no contiene un sector de arranque, el BIOS mostrar el siguiente mensaje:


           Non-system disk or disk error


    Si quitamos el disquete y apretamos una tecla, el proceso de arranque continuar.

    Si no existe un disquete en la disquetera, el BIOS se fija si existe un registro maestro de arranque
(MBR: master boot record) en el disco rgido.  Si es as comienza a ejecutar el cdigo que all
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
en particular que est utilizando puede manejar el arranque desde el disco rgido de otra manera,
as que debe controlar esto en la documentacin que se incluye con la distribucin.  Otra buena
referencia es la documentacin de LILO, [1 ].)



3.2       Linux  despierta



Luego que el BIOS le pasa el control a LILO, LILO a su vez le pasa el control al ncleo de Linux. El
ncleo es el programa central del sistema operativo, que controla a todos los dems. Lo primero que
hace Linux una vez que comienza su ejecucin es cambiar la CPU a modo protegido. El procesador
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
arranca, descarta el BIOS.

    Los procesadores distintos al 386 llegan a este estado de manera diferente. Ningn otro procesador
necesita cambiar a modo protegido, y slo unos pocos tienen un contexto tan pesado de carga, como
LILO y el BIOS. Una vez que arranca el ncleo, Linux trabaja casi de la misma manera.

    A continuacin, Linux mira que clase de hardware tiene debajo.  Necesita saber que clase de
discos rgidos tiene, si hay o no un ratn de bus, si est conectado a una red, y otras trivialidades
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.
Puede leer acerca de esos mensajes en la Seccin 3.4. Este proceso de consulta puede causar algunos
problemas con el sistema, pero si lo hace, lo har probablemente cuando instale Linux por primera
vez. Si tiene problemas, consulte la documentacin de la distribucin.

    El ncleo solamente se ocupa de administrar los otros programas, entonces cuando est satisfecho
con que todo anda bien debe arrancar otro programa para que haga los trabajos tiles. El programa
que el ncleo arranca se llama init.  (Note la diferencia en el tipo de letra.  Las cosas en este
tipo  de  letra sern usualmente los nombres de programas, de archivo, de directorio u otros items
_____________________________________________4
    Cuando hable del 80386, tambin hago referencia a computadoras basadas en 80486, Pentium, y Pentium Pro a
menos que especficamente indique lo contrario. Adems, abreviar 80386 mediante el trmino 386.
_______________________________________________________________________________________________________________3.2.   L*
 *inux despierta          @

_______________________________________________________________________________________________________________
Figura 3.1 El camino que sigue un PC Intel hasta que nos muestra el indicativo del intrprete de
comandos._init_puede_o_no_arrancar_X._Si_lo_hace,_corre_xdm._Si_no,_corre_getty._______________________________



_______________________________________________________________________________________________________________



relacionados con las computadoras.)  Una vez que el ncleo arranca init, no lanza ningn otro
programa. El ncleo se transforma as en un administrador y proveedor, no en un programa activo.

    Por lo tanto, para saber que es lo que hace la computadora luego que el ncleo arranca, deberemos
examinar init.  La complicada secuencia de arranque por la que atraviesa init no es idntica en
todas las computadoras.  Para Linux existen varias versiones de init, y cada una hace las cosas a
su manera.  Adems tambin influye si su mquina est en red, e incluso cual distribucin utiliz****
 *'o
para instalar Linux. Algunas de las cosas que pueden suceder cuando init arranca son:



    o  El control de integridad del sistema de archivos.  >Pero qu es un sistema de archivos?, se
       estar preguntando Ud. . Un sistema de archivos es la disposicin de los archivos en el disco
       rgido. Adems permite que Unix sepa cuales partes del disco rgido estn ocupadas y cuales
       no. Desafortunadamente, ciertos factores como los cortes en el suministro de energa hacen que
       la informacin que el sistema de archivos tiene sobre la disposicin en el disco de los archivos
       no coincida con la disposicin real.  En estos casos se ve la utilidad de un programa llamado
       fsck, que es capaz de encontrar estas situaciones y (con suerte) corregirlas.


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


    o  Se actualiza correctamente el reloj del sistema. Esto es ms complicado de lo que puede parecer,
       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
       una batera dentro de la computadora_ muy probablemente estar configurado con la hora
       local. Esto significa que debe tener algn programa que lea la hora del reloj de la CMOS y la
       corrija transformndola en hora UCT.
_______________________________________________________________________________________________________________14      *
 *                                 @


    Despus que init termina con sus actividades de arranque, comienza con sus tareas planificadas.
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
puede haber ms de un proceso para un programa dado en particular.

    En Unix, los procesos _instancias de un programa_ se crean mediante una llamada al sistema5
_que es un servicio provisto por el ncleo_ denominada fork.  (Se lo llama "fork" (bifurcacin)
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,
y que a continuacin lanzar el programa login.



3.3       La  actuacin  del  usuario



3.3.1      El ingreso


Lo primero que hay que hacer para poder utilizar una mquina con Unix es identificarse frente a la
misma. Este proceso, conocido en ingls como logging in (registro de ingreso), es la manera que
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
general parecidos a los nombres de las personas, y se lo asignar el administrador del sistema.  Si
Ud. es el administrador del sistema deber crearse una cuenta para poder trabajar sin los cuidados
especiales que requiere la cuenta root.  (La informacin necesaria para llevar a cabo dicha tarea
podr encontrarla en Installation  and  Getting  Started 8 o en The  Linux  System  Administrator's
Guide.)

    Luego de que tenga lugar la secuencia de procedimientos durante el arranque, Ud.  ver en la
pantalla algo como lo que se muestra a continuacin:  (la primer lnea es meramente un saludo
_podra ser alguna advertencia legal, o cualquier otra cosa)


       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 grfica. An
en este caso, la computadora le pedir sus datos al ingreso y ms o menos de la misma manera. Si ste
es el caso en su sistema, entonces el entorno de trabajo que utilizar es el sistema X. El X Window
System es un sistema de ventanas y en el captulo 5 se discutirn algunas de las diferencias con las
que se enfrentar.  De cualquier manera, el proceso de ingreso ser similar en ambos casos.  Si va a
utilizar X, busque las apariciones de una X grandota en el margen de esta gua.
_____________________________________________5
    N. del T.: llamada al sistema del ingls system call.
   6N. del T.: Mis disculpas por el trmino, prometo no usarlo ms :-).
   7N. del T.: contrasea, palabra clave del ingls password
   8N. del T.: Puede consultar la versin en castellano ya existente
_______________________________________________________________________________________________________________3.3.   L*
 *a actuacin del usua@


    Esta es, por supuesto, la invitacin que Ud.  buscaba para ingresar (login).  A lo largo de este
manual utilizaremos el usuario ficticio (o no tan ficticio, dependiendo de su mquina) larry9. Donde
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
el apellido del usuario, alguna combinacin de nombre y apellido, y an se da el caso que deban
agregarle algunos dgitos. Por ejemplo, nombres de cuentas posibles para Larry Greenfield podran
ser: larry, greenfie, lgreenfi, lg19.

    mousehouse  ser,  de  la  misma  manera,  el  "nombre"  de  la  mquina  sobre  la  que  trabajar.
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,
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 contrasea10. Cuando escriba su contrasea no podr ver lo que est
tecleando, en razn de la privacidad necesaria a dicha palabra.  Escriba cuidadosamente:  puede
borrar caracteres, pero no podr ver lo que est editando.  No escriba muy despacio si hay gente
mirndole _podran llegar a descubrirla.  En cualquier caso, si se equivoca no se haga problemas,
pues el sistema le dar otra oportunidad de ingresar.

    Luego que ingrese correctamente su nombre de cuenta o nombre de usuario y su contrasea,
aparecer un corto mensaje denominado "mensaje del da"11 que se obtiene del archivo /etc/motd.
Este archivo se utiliza para dar a conocer cualquier clase de informacin a los usuarios con respecto
al estado del sistema y es responsabilidad del administrador del sistema fijar su contenido. Despus
de todo esto aparece un prompt. Un prompt es un smbolo que nos indica que la computadora est
lista para recibir un comando. Debe parecerse a la siguiente figura:


       /home/larry$


    Si Ud. est utilizando X Window, el prompt aparecer en alguna de las "ventanas" que hay en
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 flecha) dentro de
la ventana.



3.3.2      Al abandonar la computadora


<No apague la computadora directamente! <Se arriesga a perder valiosos datos!

    A diferencia de la mayora de las versiones de DOS, no es una buena idea apagar la llave de
alimentacin_de_la_computadora_as_como_as, cuando termine de utilizarla.  Si reinicia la mquina
   9N. del T.: He dejado aqu sin traducir ni cambiar el nombre del autor de la versin en ingls, y lo mis*
 *mo vale
para otros nombres como el de la mquina, etc. .
  10N. del T.: contrasea del ingls password.
  11N. del T.: mensaje del da del ingls Message Of The Day(motd).
_______________________________________________________________________________________________________________16      *
 *                                 @


(con el botn de reset) sin antes tomar las debidas precauciones ser igual de pernicioso.  Linux
tiene una antememoria o cach que mejora el rendimiento del disco.  Esto significa que tempo-
ralmente guarda en RAM informacin perteneciente al sistema de almacenamiento permanente12.
Las diferencias entre lo que Linux cree que hay en el disco y lo que efectivamente est almacenado
en el disco se sincronizan cada 30 segundos. Si desea apagar o reiniciar la computadora, necesitar
ejecutar algn procedimiento que indique a Linux que debe detener el sistema de cach y actualizar
la informacin en el disco.

    Si ya ha terminado sus tareas con la computadora, pero an est dentro del sistema (ya tecle
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_envan_oprimiendo la tecla
marcada como |_Enter_,||_Return_ | |_Intro_|. Hasta que no apreta |_Intro_|no pasa nada, y por lo tanto,
puede borrar lo que escribi y recomenzar.


       /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 nico usuario _Ud., :-)_ puede desear
apagar la computadora cuando haya finalizado su trabajo con ella13. Para "bajar el sistema"14_ o
sea, apagarlo ordenadamente_ deber ingresar a una cuenta especial denominada root. La cuenta
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
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 rgido 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 fortsimo golpe en la cabeza_o*
 *lvidar
todo lo que tena en la memoria de corto plazo. Pero las cosas guardadas en la memoria de largo plazo, el disco r***
 **'igido,
estarn bien. El disco es miles de veces ms lento que la RAM.
  13Para evitar el debilitamiento prematuro de ciertos componentes de hardware, es mejor que apague la computa-
dora slo cuando ya no la vaya a utilizar por el resto del da.  Encender y apagar una vez al da la comput*
 *adora
probablemente es el mejor compromiso entre ahorrar energa y machacar el sistema.
  14N. del T.: bajar el sistema del ingls shutdown.
_______________________________________________________________________________________________________________3.4.   M*
 *ensajes del ncleo  @


       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
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
el comando su.  Mientras est_trabajando_con su nombre de cuenta habitual (larry a nuestros
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
al mismo.  Ahora,  con estos privilegios agregados,  podr bajar el sistema mediante el comando
"shutdown  now"    .



3.4       Mensajes  del  ncleo



Cuando se conecta la alimentacin a su computadora, aparece una serie de mensajes en la pantalla,
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.

    Naturalmente, estos mensajes varan de mquina a mquina.  Describir entonces los mensajes
que aparecen en la ma.  El siguiente ejemplo contiene todos los mensajes estndar y algunos es-
pecficos.  (En general, la mquina sobre la que voy a realizar la descripcin est mnimamente
configurada:  no ver por lo tanto mucha informacin relacionada con la configuracin de disposi-
tivos.) Se utiliz Linux versin 1.3.55 _uno de los ms recientes al momento de escribir.


    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,
       ms caben en una pantalla a la vez.)  Linux puede consultarle si desea algn tipo de letra en
       particular, o puede que tenga una seleccin ya compilada en su interior16.


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



       En este ejemplo, el dueo de la mquina decidi, al momento de compilar, que utilizara el
       tipo de letra estndar tamao grande. Adems, notar que la palabra "color" est mal escrita.
_______Evidentemente,_Linus_aprendi_la_versin_incorrecta de idioma ingls17.
  15N. del T.: why? significa >por qu?.
  16"Compilada" se refiere al proceso mediante el cual un programa de computadora escrito por una persona se
traduce a algo que entiende la computadora. Si una caracterstica se ha "compilado en su interior" significa que es*
 *t
includa en el programa.
  17N. del T.: "colour" es la variante ortogrfica del ingls insular y "color" la norteamericana.
_______________________________________________________________________________________________________________18      *
 *                                 @


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


                      Calibrating delay loop.. ok - 33.28 BogoMIPS



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


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



       Esto significa que la mquina tiene 24 megabytes de memoria.  Parte de esta memoria est
       reservada por el ncleo.  El resto puede ser utilizada por los programas.  ste es el lugar
       temporal conocido como RAM que se utiliza slo como almacenamiento de corto plazo.  Su
       computadora tambin dispone de una memoria permanente denominada disco rgido. El con-
       tenido del disco rgido se mantiene intacto an luego de quitar la alimentacin del ordenador.


   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 configuracin de red. Lo que veremos a continuacin est mejor explicado
       en The Linux Networking Guide19 , y est fuera del alcance de este documento.


            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 flotante20 sta 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.
       Algunos de esos chips no estn en buenas condiciones, y cuando Linux trata de identificarlos la
       mquina "se cuelga"21. La mquina deja de funcionar. Si esto sucede, Ud. ver en su pantalla
       lo siguiente:


            Checking 386/387 coupling...



       Sino, el mensaje ser:
_____________________________________________18
    N. del T.: bogus significa espurio (para los argentinos: trucho).
  19N. del T.: Disponible en castellano. Vea el apndice D.
  20N. del T.: unidad de punto flotante del ingls Floating Point Unit.
  21N. del T.: se cuelga del ingls crashes.
_______________________________________________________________________________________________________________3.4.   M*
 *ensajes del ncleo  @


            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:


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



    7. Y ahora se controla la instruccin "halt".


            Checking 'hlt' instruction... Ok.



    8. Luego de esta configuracin inicial, Linux escribe una lnea identificndose a s mismo.  En
       ella explica cual es la versin del ncleo, la del compilador de C de GNU que se utiliz para
       compilarlo, y la fecha de dicha compilacin.


            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
       responsable por los detalles de la comunicacin entre la CPU y el dispositivo.  Esto permite
       que la gente que escribe aplicaciones de usuario se pueda concentrar en la aplicacin, pues no
       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 significan las lneas anteriores es que el puerto serie 0 (COM1) tiene la direccin 0x03f8.
       Cuando dicho puerto interrumpe al ncleo, usualmente para decir que tiene datos listos, utiliza
       la IRQ 422. Las IRQ son un medio que tienen los perifricos de hablarse con el software. Cada
       puerto serie tambin tiene un chip controlador, que usualmente se denomina 16450; aunque
       tambin puede ser el 8250 o el 16550.


  10.  A continuacin viene el puerto paralelo,  que normalmente se conecta a la impresora.  Los
       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
       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.)
  22N. del T.: IRQ, Interrupt ReQuest (peticin de interrupcin).
  23N. del T.: Impresora de lneas.
_______________________________________________________________________________________________________________20      *
 *                                 @


            lp0 at 0x03bc, (polling)



       Este mensaje dice que ha encontrado un puerto paralelo, y que usar el controlador de dispos-
       itivo estndar.


  11.  Linux identifica luego las unidades de disco rgido.  En el sistema que le estoy mostrando,
       mousehouse, tengo instalados dos unidades de disco rgido 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 flexible.  En este ejemplo, la mquina tiene dos
       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
       mensaje acerca de su configuracin.


            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 rgidos que ha encontrado. Busca las distintas particiones
       que tiene cada uno.  Una particin es una seccin lgica de una unidad que se utiliza para
       evitar que interfieran 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 raz.  sta es la particin del disco en la cual reside el
       sistema operativo Linux. Cuando Linux "monta" esta particin, hace que est disponible para
       los usuarios.


            VFS: Mounted root (ext2 filesystem) readonly.




Captulo  4



El   shell   de   Unix



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



4.1       Comandos  Unix



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



       /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
son vlidos los espacios dentro del nombre del comando. Algunos comandos vlidos son mail, cat,
y CMU_is_Number-5. Algunos caracteres no estn permitidos_volveremos a este tema ms adelante.
Unix adems hace diferencia entre maysculas y minsculas2, lo que significa que Cat y cat
son comandos distintos.

    El prompt se muestra como resultado del accionar de un programa especial denominado intrprete
de comandos3.  El intrprete de comandos o shell acepta los comandos que escribe el usuario y
los ejecuta. Los comandos pueden formar programas en el lenguaje del intrprete de comandos, y a
dichos programas se los denomina "guiones de shell".
_____________________________________________1
    N. del T.: prompt significa solicitud.
   2La diferenciacin entre maysculas y minsculas es una cosa muy personal.  Algunos sistemas operativos *
 *como
OS/2 y Windows NT preservan las diferencias, pero no las cuentan como distintas. En la prctica habitual con Unix,
se utiliza raramente la diferenciacin. La situacin de tener un par de comandos Cat y cat diferentes, no es co*
 *mn.
   3N. del T.: intrprete de comandos del ingls shell.



                                                       21
_______________________________________________________________________________________________________________22      *
 *                                 @


    Los shell en Unix se clasifican 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
original de Unix, denominado sh; a partir de entonces, la mayora de los shells tienen un nombre con
el sufijo 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
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
caractersticas interactivas, aunque son ms difciles de programar.)

    Linux viene con un shell Bourne denominado bash, escrito por la organizacin "Free Software
Foundation"4. 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
que se encuentran en todos los shells Bourne y adems varias de las caractersticas 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
palabras:  est Ud.  corriendo su primer programa Unix, el shell bash.  Mientras est conectado, el
shell bash estar permanentemente funcionando.



4.1.1      Un comando Unix tpico

                                                                                           _______
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 lnea nueva, entonces lo que ha hecho est bien.
Existen unas cuantas variantes que podra haber tecleado_algunas funcionarn, otras no.



    o  Si tuvo algn error de tecleo al escribir "cat"  , debera haber visto algo ms o menos as:


            /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 y minsculas: CAT est mal escrito.


    o  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 producci**
 n
y distribucin de software que no tiene limitaciones en su uso y/o copia, enfrentando de esta manera las prcti*
 *cas de
las compaas tradicionales de desarrollo. Que el software sea libre no significa que sea barato: la libertad i*
 *ncluye la
gratuidad, pero es mucho ms que ello.
   5El ` ' indica que el usuario escribi un espacio.
_______________________________________________________________________________________________________________4.2.   A*
 *utoayuda                @


       Sin embargo, el resultado es correcto, y el programa cat corre sin problemas.
                                              _______
    o  Tambin puede que haya oprimido un |_Intro_|en una lnea en blanco; no se preocupe y contine,
       pues no tiene ningn efecto.



    Doy por sentado que Ud.   ha corrido con xito cat y est esperando que haga algo que lo
maraville.  Pues bien, no, no es un juego.  cat es una_muy_til_utilidad que no parece muy til a
primera vista. Escriba cualquier cosa y luego oprima |_Intro_|. Lo que ver es:



       /home/larry$ cat
       Help! I'm stuck in a Linux program!
       Help!   I'm 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 til a veces, tal vez no ahora.  As que salgamos de este programa y
veamos otros con beneficios ms obvios.
                                                 ________     ________
    Para finalizar ciertos comandos Unix, teclee |_Ctrl-d_|6. |_Ctrl-d_|es el carcter end-of-file7, o EOF,
para abreviar.  Puede que en ciertos libros de texto aparezca como end-of-text8.  Nos referiremos a
este carcter como EOF. Es un carcter de control que informa a los programas Unix que ha cesado
el ingreso de datos. Cuando cat ve que no teclea ms nada, termina.

    Para ver otro ejemplo parecido, pruebe el programa sort.  Como su nombre lo indica, sort_es_
un programa de clasificacin.  Si Ud. teclea unas cuantas lneas y luego oprime |_Ctrl-d_|, sort las
mostrar a la salida de manera ordenada.  Esta clase de programas se denominan filtros, porque
toman texto desde su entrada, lo filtran, y lo vierten a su salida modificado de alguna manera. Tanto
cat como sort son filtros inusuales.  cat es inusual pues lee el texto de entrada y no lo cambia.
sort es inusual porque lee todas las lneas de entrada hasta el EOF, antes de emitir su salida.  La
mayora de los filtros trabajan sobre la base de lnea por lnea: leen una lnea de la entrada, realizan
cierto cmputo, y escriben una lnea diferente de salida.



4.2       Autoayuda



El comando man muestra las pginas de la gua de referencia para un comando dado9. Por ejemplo:


       /home/larry$ man cat


       cat(1)                                                                cat(1)


       NAME
________________________________________________           ___
   6Mantenga oprimida la tecla etiquetada |_Ctrl|_y aprete |_d_|, luego suelte ambas.
   7N. del T.: fin de archivo.
   8N. del T.: fin de texto.
   9man tambin puede mostrar informacin acerca de las llamadas al sistema, subrutinas, formatos de archivos,
etc..  En la versin original de Unix el comando mostraba la informacin exactamente igual a la que aparec*
 *a en la
documentacin impresa. Por ahora, es probable que Ud. slo est interesado en obtener ayuda acerca de los c*
 *omandos.
_______________________________________________________________________________________________________________24      *
 *                                 @


         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
este momento.  No espere entender la pgina de manual que se le muestra.  Las pginas de manual
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 final de la
pgina, parecido a "--more--" o a "Line  1".  Se trata del pedido  de  ms (informacin), que
pronto le ser muy familiar.

    En lugar de dejar escapar el texto fuera de los lmites de la pantalla, man se detiene al final
de_cada_pgina,__y espera para ver que ha decidido hacer Ud..  Si desea seguir leyendo,  oprima
| Barra espaciadora   |y avanzar una pgina. Si desea terminar con la lectura de la pgina del manual,
|_____________________|
oprima |_q_|.   Regresar entonces al prompt del shell,  que esperar hasta que Ud.   escriba otro
comando.

    man provee adems una funcin de bsqueda de palabras clave.  Por ejemplo, digamos que Ud.
est interesado en el tema PostScript, el lenguaje de control de impresoras desarrollado por Adobe.
Si escribe "man  -k  ps"   o "man  -k  Postscript"     ,  recibir como resultado una lista de todos los
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 til cuando quiere
buscar una herramienta para hacer algo, pero no conoce su nombre _o si existe.



4.3       Almacenaje  de  la  informacin



Los filtros son muy tiles 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.
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 suficien-
temente grande puede contener otras carpetas_puede haber directorios dentro de directorios.  En
Unix, se denomina sistema de archivo a la coleccin de archivos y directorios.  Inicialmente en el
sistema de archivo slo existe un directorio, denominado "root"11.  Dentro de este directorio hay
_____________________________________________10
    N. del T.: El ejemplo se ha mantenido en ingls, pues es muy probable que Ud. tenga instaladas las pginas *
 *de
manual en dicho idioma, de manera predeterminada. Pruebe ms tarde de instalar el conjunto de pginas de manual
que estn disponibles en castellano.
  11N. del T.: directorio raz.
_______________________________________________________________________________________________________________4.3.   A*
 *lmacenaje de la informac@


ms directorios, y dentro de ellos hay archivos, y an ms directorios12.

    Cada archivo y cada directorio tiene un nombre.  Nos referiremos a su nombre corto13 _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 nico. Un nombre corto para un archivo puede ser joe, mientras que
su nombre completo podra ser /home/larry/joe. El nombre completo se denomina usualmente
trayectoria15. La trayectoria puede decodificarse como una secuencia de directorios. Por ejemplo,
veremos como se lee /home/larry/joe:



/home/larry/joe

La barra inicial indica el directorio raz.
  Aqu esta el directorio denominado home. Est dentro del directorio raz.
         Este es el directorio larry, el cual est dentro de home.
                 joe est dentro de larry. Una trayectoria puede referirse tanto a un directorio
                 como a un nombre de archivo, as que joe podra ser cualquiera de ellos. Todos
                 los items antes del nombre corto deben ser directorios.


    Una manera sencilla de visualizar todo esto es mediante un diagrama en rbol.  Para ver el
diagrama de un sistema tpico 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
de los directorios estndar. Por lo tanto, puede haber algunos directorios del diagrama que no estn
en su sistema, y de hecho su sistema tendr directorios que no aparecen en la figura.



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
manipularlos. Por supuesto. El comando ls es uno de los ms importantes, y lo que hace es listar
los archivos. Si prueba a correr el comando "ls" , entonces ver:


       /home/larry$ ls
       /home/larry$


    Est bien, no se preocupe por no ver nada. Unix es intencionalmente callado: si no hay archivos
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.

    Pero hace un momento dije que hay ms de 8000 archivos por all:  >dnde estn?  Acaba de
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,
pruebe con el directorio raz:


       /home/larry$ ls /
_____________________________________________12
    Puede haber o no un lmite a la "profundidad" a la cual puede llegar el sistema de archivo. (En mi caso nunca la
alcanc_uno fcilmente puede tener directorios de 10 niveles de profundidad.)
  13N. del T.: Nombre relativo del archivo o directorio.
  14N. del T.: Nombre completo o absoluto.
  15N. del T.: trayectoria del ingls path.
_______________________________________________________________________________________________________________26      *
 *                                 @

_______________________________________________________________________________________________________________
Figura_4.1_Tpico_rbol_(podado)_de_directorios_Unix.__________________________________________________

 / ________||bin
       |___dev
       |
       |___etc
       |
       |___home  ________larry
       |             |
       |             |___sam
       |___
       |  lib
       |___proc
       |
       |___tmp
       |           |
       |___usr________||X11R6
                   |
                   |___bin
                   |
                   |___emacs
                   |
                   |___
                   |  etc
                   |
                   |___g++-include
                   |
                   |___include
                   |
                   |___lib
                   |
                   |___     ________
                   |  local     |  bin
                   |            |
                   |            |___emacs
                   |            |
                   |            |___etc
                   |            |
                   |            |___lib
                   |
                   |___
                   |  man
                   |
                   |___spool
                   |
                   |___src________linux
                   |
                   |___tmp
_______________________________________________________________________________________________________________



       bin       etc       install   mnt       root      user      var
       dev       home      lib       proc      tmp       usr       vmlinux
       /home/larry$



    En el comando anterior, "ls  /" , el directorio ("/" ) es lo que se denomina un parmetro.  La
primer palabra de un comando es el nombre del comando,  y cualquier cosa que le siga son sus
parmetros.  Los parmetros generalmente modifican la forma en la que acta un programa_para
ls, el parmetro le dice de cual directorio desea Ud. la lista de archivos. Algunos comandos tienen
parmetros especiales denominados opciones o interruptores16 Para ver esto, pruebe:


       /home/larry$ ls -F /
       bin/       etc/       install/   mnt/       root/      user/      var@
       dev/       home/      lib/       proc/      tmp/       usr/       vmlinux
       /home/larry$
_____________________________________________16
    N. del T.: interruptores del ingls switches.
_______________________________________________________________________________________________________________4.3.   A*
 *lmacenaje de la informac@


    El "-F"  es una opcin. Las opciones son clases especiales de parmetros que comienzan con un
guin y modifican el funcionamiento del programa.  Para "ls" , "-F"  es una opcin que le permite
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 caractersticas de ls ms adelante. <Es un programa sorprendentemente complejo!

    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 rbol de la Figura 4.1,
y fjese en su contenido.  Naturalmente, algunos estarn vacos, y otros tendrn muchos archivos
dentro.  Le sugiero que utilice "ls"  con y sin la opcin "-F" .  Por ejemplo, "ls  /usr/local"     debe
aparecer ms o menos as:


       /home/larry$ ls /usr/local
       archives   bin         emacs      etc         ka9q       lib         tcl
       /home/larry$


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


_______________________________________________________________________________________________________________

ls [-aRF] [directorio]
_______________________________________________________________________________________________________________

    En general, y desde ahora en adelante, utilizar plantillas de comandos como la mostrada, antes
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
entre corchetes ("[" y "]").  Las meta-variables estn inclinadas_son palabras que toman el lugar
de los parmetros reales.  (Por ejemplo, ms arriba puede Ud.  ver que dice directorio, lo cual debe
ser reemplazado por el nombre de un directorio real.)

    Las opciones son un caso especial. Estn encerradas entre corchetes, pero Ud. puede utilizar una
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
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 caracterstica
denominada directorio "actual", "presente", o "de trabajo". Es muy probable que su configuracin
de shell muestre dicho directorio como parte del prompt:  /home/larry.  Si no lo hace, pruebe el
_______________________________________________________________________________________________________________28      *
 *                                 @


comando pwd, que proviene de la sigla de las palabras present working directory17. (Algunas veces
el prompt muestra el nombre de la mquina. Esto slo es til realmente en un entorno de red en el
cual hay una gran cantidad de mquinas diferentes.)


       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
simple.  La mayora de los comandos acta, de forma predeterminada, sobre el directorio actual.
Podemos cambiar nuestro directorio actual mediante el comando cd. Por ejemplo, pruebe:


       /home/larry$ cd /home
       /home$ ls -F
       larry/      sam/         shutdown/   steve/      user1/
       /home$



    Si Ud.  omite el parmetro opcional directorio, se lo retornar a su directorio raz personal, o
directorio original. De otro modo, cd lo cambiar al directorio especificado. Por ejemplo:


       /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 rela-
tivas. Una trayectoria absoluta comienza con una "/" y especifica todos lo directorios que existen
antes del archivo que Ud. desea. Una trayectoria relativa est referida a su directorio actual. En
el ejemplo anterior, cuando estaba en "/usr", hice un movimiento relativo a "local/bin"_"local"
es un directorio que existe bajo "/usr", y "bin" es un directorio bajo "local". ("cd  home"   tambin
fue un cambio de directorio relativo.)

    Existen dos directorios que se utilizan solamente para trayectorias relativas:  "."  y "..".  El
directorio "." se refiere 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
dentro de carpeta".  An el directorio raz tiene un directorio anterior:  l es su propio directorio
anterior.
_____________________________________________17
    N. del T.: Directorio de trabajo actual.
  18En este libro ver todos los trminos en uso:  directorio de trabajo presente, directorio actual, o directo*
 *rio de
trabajo. Prefiero "directorio actual", aunque a veces recurra a las otras formas a causa de razones de estilo.
_______________________________________________________________________________________________________________4.3.   A*
 *lmacenaje de la informac@


    El archivo ./chapter-1 viene a ser el archivo chapter-1 que est en el directorio actual. Ocasion-
almente, ser necesario que Ud. coloque explcitamente el "./" para que ciertos comandos funcionen,
aunque esto es raro. En la mayora de los casos, dar igual poner ./chapter-1 o chapter-1.

    El directorio ".." es ms til cuando queremos "retroceder":


       /usr/local/bin$ cd ..
       /usr/local$ ls -F
       archives/   bin/         emacs@      etc/         ka9q/       lib/         tcl@
       /usr/local$ ls -F ../src
       cweb/       linux/      xmris/
       /usr/local$


    En este ejemplo, me cambi al directorio anterior mediante "cd  .."   y luego list el directorio
/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 habra servido al propsito de ver lo
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 til a medida que
aprendamos ms acerca de como manipular los archivos.



4.3.3      Creacin y borrado de directorios



_______________________________________________________________________________________________________________

mkdir directorio1 [directorio2 . . . directorioN]
_______________________________________________________________________________________________________________

    En Unix, crear directorios es extremadamente simple, y puede ser una muy til herramienta de
organizacin. Para crear un nuevo directorio, utilice el comando mkdir. Por supuesto, mkdir viene
de make directory19.

    Con un pequeo ejemplo, veamos como funciona esto:


       /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
debe crear.  Puede especificarlos mediante su nombre relativo o absoluto; report-1993 es un caso
de_ejemplo_con_trayectoria_relativa._________
  19N. del T.: Crear directorio.
_______________________________________________________________________________________________________________30      *
 *                                 @


       /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
su directorio actual? Averig"umoslo:


       /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
actual.  Bien, esto no es un problema nuevo: el directorio anterior al actual no est vaco (existe el
actual en l), as que no puede ser borrado.



4.4       Informacin  en  movimiento



Todos este asunto de los directorios est muy lindo, pero no son de ninguna ayuda, a menos que
Ud.  tenga algn sitio donde almacenar sus datos.  Los dioses del Unix vieron este problema y lo
solucionaron haciendo que los usuarios tengan archivos21
_____________________________________________20
    N. del T.: Eliminar directorio.
  21N. del T.: Tambin denominados ficheros.
_______________________________________________________________________________________________________________4.4.   I*
 *nformacin en movimi@


    Aprenderemos ms acerca de la creacin y edicin de archivos en los prximos captulos.

    Los comandos bsicos para manipular archivos en Unix son cp, mv, y rm. Sus nombres provienen
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
pueda copiar ms informacin en un segundo que lo que poda copiar un monje del siglo XIV en
todo un ao.

    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 full"26 cuando est trabajando con archivos importantes.
cp tambin puede sobreescribir archivos existentes sin previo aviso _trataremos este tema ms
adelante.

    Bien,  hablaremos primero acerca de la primer lnea 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
depositar la copia. Puede obtener una copia con un nombre distinto, o una en un directorio diferente.
Veamos algunos ejemplos:


       /home/larry$ ls -F /etc/passwd
       /etc/passwd
       /home/larry$ cp /etc/passwd .
       /home/larry$ ls -F
       passwd
       /home/larry$ cp passwd frog
       /home/larry$ ls -F
       frog   passwd
       /home/larry$



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


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

    cp puede copiar archivos entre directorios si el primer parmetro es un archivo y el segundo es
un directorio. En este caso, el nombre simple (sin el path) de destino coincidir con el original, para
cada archivo.

    Tambin se puede copiar un archivo y cambiar su nombre de destino en una sola operacin, caso
que se da cuando ambos parmetros son nombres de archivo. Aqu reside uno de los peligros de cp. Si
tecleara "cp  /etc/passwd  /etc/group"       , el comando cp creara normalmente un archivo nuevo con
el contenido idntico al de /etc/passwd y con el nombre /etc/group. Por lo tanto, si /etc/group
ya existiera, cp destruira el contenido del antiguo sin darle la oportunidad de guardarlo. (Ni siquiera
escribir un mensaje en el cual le advierta que est por destruir un archivo al copiarle otro encima.)

    Echemos una mirada a otro ejemplo de cp:


       /home/larry$ ls -F
       frog   passwd
       /home/larry$ mkdir passwd_version
       /home/larry$ cp frog passwd passwd_version
       /home/larry$ ls -F
       frog           passwd          passwd_version/
       /home/larry$ ls -F passwd_version
       frog   passwd
       /home/larry$


    >Cmo us cp en este caso?  Evidentemente, cp puede tomar ms de dos parmetros, como se
puede apreciar en la segunda lnea de plantillas del comando.  Lo que el comando anterior realiz
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
nombres de archivo que debe copiar, y el nsimoparmetro como el nombre del directorio al cual se
deben copiar los anteriores.

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



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
encontrar nuevas maneras de crear ms archivos), sera til aprender la manera de borrarlos.  De
_______________________________________________________________________________________________________________4.4.   I*
 *nformacin en movimi@


hecho, es muy simple: el comando que anda necesitando es rm, y funciona como Ud. se lo esperara:
a cualquier archivo cuyo nombre se pasa como parmetro a rm se lo borra.

    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 confirmacin,
sino que borra cosas an en el caso en que haya errores en la lnea 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$


    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 lneas de comando antes de presionar

|_Intro_|!



4.4.3      Sera interesante tener un rastrillo



_______________________________________________________________________________________________________________

mv [-i] nombre-viejo nombre-nuevo

mv [-i] archivo1 archivo2 . . . archivoN nuevo-directorio
_______________________________________________________________________________________________________________

    Por ltimo, el otro comando del que debe cuidarse es mv. mv se parece un montn a cp, excepto
que borra el archivo original despus de copiarlo. Se puede entender como la utilizacin conjunta de
cp y rm. Veamos que podemos hacer:


       /home/larry$ cp /etc/passwd .
       /home/larry$ ls -F
_______________________________________________________________________________________________________________34      *
 *                                 @


       passwd
       /home/larry$ mv passwd frog
       /home/larry$ ls -F
       frog
       /home/larry$ mkdir report
       /home/larry$ mv frog report
       /home/larry$ ls -F
       report/
       /home/larry$ ls -F report
       frog
       /home/larry$


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

    Debe Ud. ser muy cuidadoso con mv _el comando no controla si el archivo ya existe, y borrar
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
/report/frog y lo reemplazar con  /frog.

    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
puede hacer que el shell ejecute: "rm  -i"  automticamente cuando teclee: "rm"  . Aprender ms de
estos temas luego en la Seccin 9.1.3 en la pgina 92.




Captulo  5



El   sistema   de   ventanas   X



                         Lo mejor de los estndares es que haya tantos para elegir.
                                                                                 Andrew S. Tanenbaum


    Este captulo slo es aplicable para aquellos que usen el sistema de ventanas X. Si se encuentra
con una pantalla con mltiples ventanas, colores o un cursor que slo se mueve con el ratn, est
usted usando X. (Si su pantalla contiene caracteres blancos sobre fondo negro no est usando X.
Para arrancarlo, refirase a la Seccin 5.1.)



5.1       Ejecucin  y  salida  del  sistema  de  ventanas  X



5.1.1      Ejecucin de X


Incluso cuando X no arranque de forma automtica durante el ingreso en el sistema, es posible arran-
carlo desde la lnea de comandos del intrprete en modo texto. Hay dos comandos que arrancan X,
bien startx o bien xinit. Debe intentar startx primero. Si el intrprete de comandos se queja de
que ese comando no existe, entonces pruebe con xinit a ver si arranca X de ese modo.  Si no fun-
ciona ninguno de los comandos anteriores, puede que no tenga X instalado en su sistema_refirase
a la documentacin local de su distribucin.

    Si el comando se ejecuta pero regresa al intrprete en modo texto tras un rato, X est instalado
pero no ha sido configurado todava. En ese caso debe consultar la documentacin que acompaaba
su distribucin en lo referente a como configurar X.



5.1.2      Salida de X


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


                                                       35
_______________________________________________________________________________________________________________36      *
 *                                 @


    La entrada del men que busca debe ser algo as como "Exit Window Manager"1 o "Exit X"2.
Trate de encontrar esa entrada (puede que haya ms de un men_intente usar diferentes botones)
y eljala.

    El otro mtodo utiliza una ventana xterm especial para controlar X. En este caso, segramente
existir una ventana cuyo ttulo sea "login"3 o "system xterm"4.  Para salir de X, mueva el cursor
a esa ventana y escriba "exit"5.

    Si X arranc automticamente tras su ingreso en el sistema, uno de estos mtodos probablemente
le sacar de l. Basta conectarse de nuevo para regresar a l. Si ejecut X de forma manual, al salir
volver al interprete de comandos en modo texto.  (Si quiere salir del sistema, bastar con escribir
"logout"   .)



5.2       >Qu  es  el  sistema  de  ventanas  X?



El Sistema de Ventanas X es un mtodo de trabajo grfico y distribuido, desarrollado principal-
mente en el Instituto Tecnolgico de Massachusetts.  Actualmente est a cargo de un consorcio de
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 ltima revisin ha sido X11R6, o sexto lanzamiento7.
El nmero 11 indica la versin oficial pero no ha habido cambios en los ltimos aos y tampoco hay
planes para cambiarla en un futuro prximo.

    Al ser cliente y servidores programas diferentes, es posible ejecutar cada uno en en mquinas
completamente diferentes.  Adems de constituir un mtodo estndar para aplicaciones grficas, es
posible ejecutar un programa en una mquina remota (<incluso al otro lado del pas, si quiere!)  y
que los resultados aparezcan en la estacin de trabajo que tiene enfrente suyo.

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



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 distribu-
_____________________________________________1
    N.T.: En ingls, salir del gestor de ventanas
   2N.T.: En ingls, salir de X.
   3N.T.: En ingls, ingreso en el sistema o autenticacin.
   4N.T.: En ingls, xterm del sistema o terminal X del sistema.
   5N.T.: En ingls, salir.
   6Existen varias formas de referirse al Sistema de Ventanas X. Una forma que aunque comn es incorrecta es
"X Window" o "Ventanas X".
   7N.T.:  La palabra inglesa es "release".  Por ello los lanzamientos se diferencian aadiendo una R y el nme*
 *ro
correspondiente.
_______________________________________________________________________________________________________________5.3.   >*
 *Qu es esto que hay @

_______________________________________________________________________________________________________________
Figura  5.1  Ejemplo  comentado  de  una  pantalla  X  estndar.   En  este  ejemplo  el  usuario  est
ejecutando_twm._El_reloj_estndar_ha_sido_sustitudo_por_uno_transparente_llamado_oclock.______________



_______________________________________________________________________________________________________________



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.



5.3.1      XClock



_______________________________________________________________________________________________________________

xclock [-digital] [-analog] [-update segundos] [-hands color]
_______________________________________________________________________________________________________________
Primero explicaremos el ms simple:  xclock funciona exctamente como se puede esperar.  Marca
los segundos, minutos y horas en una ventana pequea.

    Ni usar los botones del ratn, ni escribir en la ventana xclock produce efecto alguno- eso es
todo lo que hace. >O quiz no? En realidad hay varias opciones diferentes que permiten hacer que
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      *
 *                                 @


hace que se mueva cada cinco segundos.

    Para obtener ms informacin sobre las opciones de xclock puede consultar la pgina del manual
correspondiente_"man  xclock"   . Si piensa ejecutar varias copias de xclock, probablemente debera
consultar la Seccin 6.4 (Multitarea) para saber como se ejecutan a la vez que sus otros programas.
(Si ejecuta una copia de xclock en primer plano_que_es_la_forma usual en la que se ejecuta un
programa_y quiere salir de l, basta teclear |_Ctrl-c_|.)



5.3.2      XTerm


La ventana que muestra el prompt del intrprete de comandos (podr ver algo parecido a /home/larry$)
es controlada por un programa llamado xterm. xterm es un programa engaosamente complicado. A
primera vista, no parece que haga mucho pero realmente hace muchsimo trabajo. xterm emula una
terminal de forma que las aplicaciones de modo texto de Unix funcionen correctamente.  Tambin
mantiene en memoria informacin de forma que se pueden consultar comandos usados previamente.
(Para ver como hace uso de esto, refirase a la Seccin 5.6.3.)

    Gran parte de este libro est dedicada a aprender como usar el interprete de comandos de Unix
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 flecha) 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.
Al tratarse los programas X de programas Unix estndar, pueden ser arrancados a travs de un
intrprete de comandos como el de las xterms. Para evitar bloquear la xterm ejecutando un programa
largo desde ella, generalmente se prefiere arrancar los programas X en segundo plano. Para consultar
este tema puede referirse a la Seccin 6.4.



5.4       Gestores  de  ventanas



Bajo Linux, los gestores de ventanas ms comunes son dos.  El primero, llamado twm que viene
de "Tab Window Manager".  Es un programa mayor que el segundo, fvwm.  (fvwm viene de "F(?)
Virtual Window Manager"_el autor nunca explic que significaba la "f"8.).  Ambos gestores de
ventanas son altamente configurables lo cual impide dar instrucciones especficas sobre que teclas
usar para hacer algo en particular.

    Si le interesa saber algo sobre la configuracin de twm, refirase a la Seccin 9.2.1. La configuraci***
 **'on
de fvwm se describe en la Seccin 9.2.2.



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_configurar_el_gestor_de_ventanas_de_manera_que aparezca la forma de la ventana, permitindole
   8N. del T.: En el Linux Journal N.o 43, Noviembre 1997, hay una entrevista a Robert Nation, pgs. 46-47, y *
 *ste
dice que la "F"est por"Feeble"(Gracias Jos Luis Gurpegui por la aclaracin.)
_______________________________________________________________________________________________________________5.4.   G*
 *estores de ventanas     @


colocarla en la posicin que prefiera en la pantalla.  Este modo se llama colcacin manual.  Si
ve aparecer la forma de la ventana, puede moverla con el ratn y colocarla presionando el botn
izquierdo.

    A veces es posible que el gestor de ventanas las coloque por s mismo. Se trata de la colocacin
aleatoria.

    Finalmente, a veces, la aplicacin pregunta por el lugar preciso en el que el quiere que se situe.
Tambin el gestor de ventanas puede configurarse de forma que siempre site las ventanas de ciertas
aplicaciones en lugares fijos. (As por ejemplo, se puede especificar 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
el foco.  El foco del servidor determina que ventana recibe los carcteres introducidos mediante el
teclado. Generalmente, en X, el foco es determinado por la posicin del cursor del ratn. Si mueve
el cursor del ratn dentro de una ventana xterm9, esa xterm recibe los caracteres tecleados. Se trata
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.
Generalmente bajo X, si el cursor del ratn se sale de una ventana, se pierde el foco y le resultar
imposible escribir en ella.

    Debe notar, sin embargo, que es posible configurar 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.



5.4.3      Moviendo ventanas


Otro aspecto de X que es altamente configurable es el mtodo para mover ventanas.  Yo tengo
configurados tres mtodos para mover ventanas en twm.  El ms obvio es mover el cursor del ratn
sobre la barra del ttulo y arrastrar la ventana. Desgraciadamente, la configuracin permite definir
el movimiento usando cualquiera de los tres botones10 (Para arrastrar, site el cursor sobre la barra
del ttulo, y mantenga presionado el botn del ratn correspondiente mientras se mueve).  Lo ms
probable es que su configuracin use el botn izquierdo para mover ventanas.

    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,
puedo arrastrarla usando el boton izquierdo de mi ratn.

    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 ficheros de configuracin
de_los_gestores_de_ventanas_puede_referirse_a_la Seccin 9.2.1 para twm o 9.2.2 para fvwm.
   9<Puede ejecutar varias copias de xterm al mismo tiempo!
  10Muchos ratones de PCs tienen dos botones nicamente.  En este caso, generalmente es posible emular el botn
central presionando ambos botones simultneamente.
_______________________________________________________________________________________________________________40      *
 *                                 @


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.

    Existen varias operaciones que manejan la profundidad:



    o  Subir o poner una ventana delante. Generalmente se hace pinchando con alguno de los botones
       en la barra de ttulo de la ventana en cuestin.  El botn usado depende de la configuracin
       del gestor de ventanas. (Es posible que sean varios los botones que produzcan este efecto.)


    o  Bajar o empujar una ventana hacia atrs. Generalmente se hace pinchando igualmente en la
       barra de ttulo pero usando otro botn.  Tambin es posible configurar el gestor de ventanas
       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.


    o  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
de varias formas.  Con twm, muchas personas configuran un gestor de iconos.  Se trata de una
ventana especial que contiene una lista con las dems ventanas en uso en la pantalla.  Pinchando
con el ratn en uno de los nombres (o, dependiendo de la configuracin en uno de los botones) la
ventana desaparece_es iconizada. La ventana est an activa, pero no puede verse. Pinchando otra
vez en el gestor de iconos, la ventana vuelve a aparecer en la pantalla.

    Se trata de algo muy til.  Se podra, por ejemplo tener xterm remotas en diferentes mquinas
que use ocasionalmente al mismo tiempo.  Dado, sin embargo, que slo las usa raramente, puede
mantenerlas iconizadas mientras trabaja con un pequeo grupo.  El nico problema es que resulta
fcil "perder" alguna ventana.  Generalmente eso lleva a crear nuevas ventanas que dupliquen la
funcionalidad de las que estn iconizadas.

    Otros gestores de ventanas crean verdaderos iconos en la parte inferior de la pantalla o simple-
mente en la ventana raiz.



5.4.6      Variando el tamao


Existen diversos mtodos para variar el tamao de las ventanas bajo X. De nuevo, esto depende de
su gestor de ventanas y de cmo haya sido configurado. El mtodo al que estn acostumbrados los
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
al pasar por encima de l, seguramente tambin puede usar ese mtodo.
_______________________________________________________________________________________________________________5.5.   A*
 *tributos X              @


    Otra forma es crear un botn de "variacin de tamao" en la barra del ttulo. Es el botn visib*
 *le
en la parte derecha de las barras de los ttulos de la Figura 5.3.  Para usarlo, pinche con el botn
izquierdo del ratn en l y mantenindolo presionado, muvalo fuera de la ventana para variar el
tamao. Para fijar el nuevo tamao basta soltar el botn del ratn.



5.4.7      Maximizacin


La mayora de los gestores de ventanas soportan maximizacin.  En twm, por ejemplo, puede max-
imizar la altura de una ventana, su ancho o ambos a la vez.  Aunque twm llama a este proceso
"zooming" yo prefiero usar maximizacin.  Las aplicaciones pueden responder de modo diferente a
un cambio de tamao.  (Por ejemplo, xterm no cambia el tamao de letra pero aumenta el espacio
de trabajo.)

    Desgraciadamente no hay un modo estndar de maximizar ventanas.



5.4.8      Mens


Los gestores de ventanas tambin proporcionan al usuario un sistema de mens para realizar tareas
de forma rpida una y otra vez. Por ejemplo, podra tener una opcin que ejecute Emacs de forma
automtica o una xterm adicional. De ese modo no tendra que ejecutar el comando dentro de una
xterm_<esto es especialmente bueno si no hay ninguna xterm ejecutndose en la que pueda escribir
para ejecutar un programa nuevo!

    De forma general, se puede acceder a los mens pinchando en la ventana raz, que es una ventana
inmvil que siempre est debajo de las dems. Por defecto esta ventana es de color gris, pero puede
tener cualquier aspecto.11  Si quiere probar a ver un men, pinche y mantenga cualquier botn del
ratn sobre la ventana raz.  Debera aparecer un men.  Para seleccionar una opcin, mantenga
presionado el botn y mueva el ratn hasta marcar la opcin deseada. Entonces suelte el botn.



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 mayora de los
programas para X slo funcionan bajo X.



5.5.1      Geometra


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


    o  La dimensin horizontal, generalmente medida en pixels. (Un pixel es la unidad ms pequea
       que puede colorearse y representarse en la pantalla. Muchas configuraciones X en PCs basados
       en un procesador Intel tienen una resolucin de 1024 pixels horizontalmente por 768 pixels
       verticalmente.)  Algunas aplicaciones como xterm o emacs, miden su tamao en caracteres.
       (Por ejemplo, ochenta caracteres por lnea.)


    o  La dimensin vertical, tambin medida en pixels generalmente. Al igual que antes, en algunos
       casos se puede medir en lneas.


    o  La distancia horizontal a uno de los bordes de la pantalla. Por ejemplo, +35 significa a treinta y
       cinco pixels desde la izquierda. Sin embargo, -50 significa que el extremo derecho de la ventana
       est a cincuenta pixels del borde derecho de la pantalla.  Generalmente no es posible lanzar
       una ventana fuera de la pantalla, aunque si se puede mover fuera. (La principal excepcin es
       cuando la ventana es demasiado grande.)


    o  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 geometra: 503x73-78+0. (Esto marca la
geometra de una ventana de 503 pixels de largo, 73 pixels de alto, situada cerca de la esquina superior
derecha de la pantalla.) O de otro modo, tendremos tamaoh xtamaovsituacinhsituacinv.



5.5.2      Presentacin


Toda aplicacin X tiene asociada una presentacin.  sta determina cul es la pantalla controlada
por el servidor X. La presentacin est formada por tres elementos:



    o  El nombre de la mquina en la que se ejecuta el servidor. En el caso de sistemas Linux aislados,
       el nombre de la mquina que ejecuta el servidor coincide con la que ejecuta los clientes.  En
       ese caso se puede omitir el nombre por completo.


    o  El nmero del servidor de dicha mquina que debe responder a las peticiones de los clientes.
       Dado que una mquina puede estar corriendo diferentes servidores a la vez (es algo improbable
       pero posible en mquinas Linux) cada uno tiene que tener un nmero propio.


    o  El nmero del monitor. X permite que un servidor controle ms de un monitor a la vez. Por
       ejemplo, puede que alguien quiera tener ms espacio, de forma que use dos monitores a la vez.
       Para evitar que el rendimiento de la mquina sea muy malo, en vez de tener dos servidores,
       hacen que sea el mismo servidor el que controle las dos mquinas.



    Si ponemos estas tres cosas juntas obtendremos: mquina:nmero-de-servidor.nmero-de-pantalla.

    Por ejemplo, en mousehouse, todas mis aplicaciones tienen la presentacin fijada en :0.0, lo que
significa que la salida aparece en la primera pantalla del primer servidor local.  Sin embargo si uso
una computadora remota, tendra que ser mousehouse:0.0.
_______________________________________________________________________________________________________________5.6.   C*
 *aractersticas comun@

_______________________________________________________________________________________________________________
Figura_5.2_Opciones_Estandar_para_Programas_X___________________________________________________________________

 |__Nombre_____|__Seguido_de____________________________________|Ejemplo_______________________________________|

 |__-geometry__|__geometra_de_la_ventana___________________|xterm__-geometry__80x24+0+90__________________|
 |  -display   |  adnde quiere que el programa enve la|xterm  -display  lionsden:0.0                 |
 |             |  salida                                        |                                              |
 |_____________|________________________________________________|______________________________________________|

 |__-fg__________|color_primario_en_primer_plano________________|xterm__-fg__yellow____________________________|

 |__-bg__________|color_primario_en_el_segundo_plano____________|xterm__-bg__blue______________________________|
_______________________________________________________________________________________________________________



    Por defecto,  la presentacin se toma de una variable de entorno (ver Seccin 9.1.4) llamada
DISPLAY12, pero puede ser fijada mediante una opcin desde el intrprete de comandos (ver Figu-
ra 5.2). Para ver cul es el valor de la variable DISPLAY, basta ejecutar "echo  $DISPLAY".



5.6       Caractersticas  comunes



A pesar de que X es una interfaz grfica de usuario, se trata de una interfaz muy desequilibrada.
Resulta imposible predecir como va a comportarse cualquier elemento del sistema porque se pueden
reconfigurar, cambiar o incluso sustituir muy fcilmente.  Eso significa que es muy difcil explicar
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 configurables.

    Otra explicacin para el desequilibrio de la interfaz es que las aplicaciones X se pueden con-
struir mediante "conjuntos de chismes13". La distribucin X estndar incluye los "widgets Athena"
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 difciles 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.



5.6.1      Botones



Los botones son generalmente los componentes de la interfaz ms fciles de usar.  Un botn se
invoca situando el cursor del ratn sobre el botn en cuestin y pinchando (pulsando y soltando
inmediantamente) el botn izquierdo. Los botones Athena y Motif son funcionalmente equivalentes
pero tienen diferencias de apariencia.
_____________________________________________12
    N.T. DISPLAY significa presentacin en ingls.
  13N.T. Se trata de la traduccin de la palabra inglesa widget.
_______________________________________________________________________________________________________________44      *
 *                                 @

_______________________________________________________________________________________________________________
Figura 5.3 emacs cambia la barra de men en funcin del tipo de fichero que est editando. Aqu
se_puede_ver_una_posible_barra_de_men.____________________________________________________________________



_______________________________________________________________________________________________________________



5.6.2      Barras de men


Una barra de men es una coleccin de comandos accesibles mediante el ratn.  Por ejemplo, la
Figura 5.3 muestra la barra de men de emacs. Cada palabra es la cabecera de una categora. File14
contiene comandos que permiten cargar o grabar ficheros.  Por convencin, esta categora incluye
tambin el comando que termina la aplicacin.

    Para utilizar un comando, mueva el cursor del ratn sobre la categora correspondiente (como
por ejemplo File) y apriete el botn izquierdo.  Sin soltarlo, arrastre el ratn hacia abajo para ver
los diferentes comandos de esa categora.  Para seleccionar uno, mueva el cursor sobre el mismo y
suelte el botn del ratn.  Algunas barras de men le permiten pinchar sobre la categora_si este
es su caso, pinche sobre la categora para ver el men que se mantendr hasta que pinche de nuevo
para seleccionar un comando, otro men, o pinche fuera (indicando que no est interesado en ningn
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,
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
el que se puede ver en cualquier momento:  la franja oscura de la barra est situada y tiene una
longitud relativa a la porcin de texto que se puede ver.  Cuando no hay ms que lo que se puede
ver, toda la barra aparece de color oscuro.  Si se trata de la mitad, ser la mitad la que aparezca
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.



Barras de deplazamiento Athena


Las barras de desplazamiento Athena funcionan de forma diferente a las de otros sistemas de ven-
tanas.  Cada uno de los tres botones del ratn tiene una funcin diferente.  Para desplazarse hacia
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,
puede usar el botn izquierdo de forma anloga.

    Tambin puede saltar a cualquier lugar en particular usando el botn central del ratn y pin-
chando en el lugar de la barra que corresponde a la posicin del texto que le interesa.  Esto hace a
_____________________________________________14
    N.T. Del ingls fichero o archivo.
_______________________________________________________________________________________________________________5.6.   C*
 *aractersticas comun@

_______________________________________________________________________________________________________________
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
un Macintosh.  La parte derecha de la Figura 5.4 muestra un ejemplo.  Debe notar que adems de
la barra en s misma, hay unas flechas tanto en la parte superior como en la inferior.  Estas flechas
se pueden usar para ajuste fino de la pantalla: pinchando tanto el botn izquierdo como el central
mueve la ventana ligeramente (por ejemplo una lnea); el botn derecho no hace nada.

    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
botn izquierdo, la ventana se mover hacia arriba si pincha sobre la posicin actual o hacia abajo en
el caso contrario. Si pincha sobre la barra en el lugar actual y la arrastra podr moverse a cualquier
posicin a voluntad. Al soltar el botn se fija cual es la posicin final de la ventana.

    Pinchando el botn central en cualquier lugar de la barra hace que la ventana se desplace hacia
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      *
 *                                 @






Captulo  6



Traba jando   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 captulo,
intentar describir varias maneras de usar el shell de Unix, bash, ms eficientemente.



6.1       Comodines



En el captulo anterior, se ensearon los comandos para mantener ficheros cp, mv, y rm. A veces, se
querr tratar con ms de un fichero a la vez_en realidad, con muchos a la vez. Por ejemplo, se quiere
copiar todos los ficheros que empiecen por data en un directorio llamado  /backup. Se podra hacer
esto ejecutando muchos comandos cp, o escribiendo cada fichero en una lnea de comando.  Estos
dos mtodos llevan mucho tiempo, incluso, se tienen muchas posibilidades de cometer errores.

    Una buena manera de hacer este trabajo es teclear:


       /home/larry/report$ ls -F
       1993-1            1994-1            data1              data5
       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              data5
       /home/larry/report$


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


                                                       47
_______________________________________________________________________________________________________________48      *
 *                                 @


6.1.1      >Qu ocurre realmente ?


Buena pregunta. De hecho, hay un par de carcteres especiales interceptados por el shell, bash. El
carcter "*" , un asterisco, dice "cambia esta palabra con todos los ficheros que se ajusten a esta es-
pecificacin". As, el comando "cp  data*   /backup"    , como el de arriba, cambia a "cp  data-new  data1  dat*
 *a2  data5   /backup"
antes de ejecutarse.

    Para ilustrar esto, introducir un comando nuevo, echo.  echo es un comando extremadamente
simple; repite, o muestra, cualquier parmetro. De este modo:


       /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              data5
       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$


    Como se puede ver, el shell expande el comodn y pasa todos los ficheros al programa que se va a
ejecutar. Esto plantea una pregunta interesante: >qu ocurre si no hay ficheros que se ajusten a la
especificacin del comodn? Pruebe "echo  /rc/fr*og"     y bash pasar literalmente la especificacin
del comodn al programa.

    Otros shells, como tcsh, en vez de pasar el comodn literalmente, contestarn No  match. Aqu
est el mismo comando ejecutado bajo tcsh:


       mousehouse>echo /rc/fr*og
       echo: No match.
       mousehouse>


    La ltima pregunta que podra hacerse es, >qu pasa si quisiera mostrar data*, en vez de la lista
de nombres? Bien, tanto en bash como en tcsh, slo se debe incluir la cadena entre comillas:

          /home/larry/report$ echo "data*"                            mousehouse>echo "data*"
          data*                                       bien       data*
          /home/larry/report$                                         mousehouse>



6.1.2      El signo de interrogacin


Adems del asterisco, el shell tambin interpreta un signo de interrogacin como un carcter especial.
Un  signo  de  interrogacin  coincidir  con  un  carcter,  y  slo  uno.   Por  ejemplo,  "ls  /etc/*
 *??"
mostrar todos los ficheros de dos letras en el directorio /etc.
_______________________________________________________________________________________________________________6.2.   G*
 *anar tiempo con bash    @


6.2       Ganar  tiempo  con  bash



6.2.1      Editando la lnea 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 flechas para moverse, borrar el/los carcter/es
incorrecto/s, y escribir la informacin correctamente.

    Hay muchas teclas especiales que ayudan a editar_la_lnea de comandos, muchas de ellas similares
a los comandos usados en GNU Emacs. Por ejemplo, |_C-t_|intercambia dos carcteres adyacentes1.
Se pueden encontrar muchos de los comandos en el captulo sobre Emacs, Captulo 8.



6.2.2      Completamiento de comandos y nombres de fichero


Otra peculiaridad de bash es la ejecucin automtica de las lneas de comando. Por ejemplo, veamos
el siguiente ejemplo de un comando cp tpico:


       /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-fichero-largo cada vez que
se quiere acceder a l, sucede lo mismo si queremos crear esto-es-un-fichero-largo copiando en
l /etc/passwd2.  Ahora, aprenderemos a escribir el anterior comando cp ms rpidamente y con
menos posibilidad de error.

____En_vez de teclear el nombre del fichero entero, se escribe "cp  es"  , se pulsa y suelta la tecla

|_Tab_ |.  Por arte de magia, el resto del nombre del fichero aparece en la lnea 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 fichero que empiece como eso. Por

ejemplo, si tecleo /usr/bin/ema y luego pulso |_Tab_,|bash encontrar /usr/bin/emacs ya que es
el nico_fichero_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  ficheros,  /usr/bin/ld,  /usr/bin/ldd,  y
/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 ficheros que coincidan con el patrn.  De este modo, si no se
est seguro del nombre exacto del fichero, podemos teclear los primeros carcteres del nombre y
buscarlo en una lista ms pequea de ficheros.
______________________________________________
   1|_C-t_|significa mantener pulsada la tecla marcada como "Ctrl", y apretar la tecla "t". Luego soltar ambas.
   2"cp /etc/passwd esto-es-un-fichero-largo"
_______________________________________________________________________________________________________________50      *
 *                                 @


6.3       La  entrada  estndar  y  La  salida  estndar



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



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
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
se comunique con el usuario sin usar la entrada o salida estndar, pero la mayora de los comandos
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
normalmente "conectada" al terminal. Un comando interactivo, como el shell, bash, lee los comandos
de la entrada estndar.

    Un programa tambin puede escribir en el error estndar, ya que es muy fcil hacer que la
salida estndar apunte a cualquier lugar aparte del terminal.  El error estndar (stderr) est casi
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:  redi-
reccionar la salida, redireccionar la entrada, y las tuberas.



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 fichero o los enviemos directamente
a una impresora.  Por ejemplo, para redireccionar la salida del comando "ls  /usr/bin"   , se coloca
un signo ">" al final de la lnea, y se indica el fichero 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 ficheros, el comando crea un fichero
totalmente nuevo en el directorio actual. Echemos un vistazo a este fichero usando el comando cat.
Si se recuerda, cat era un comando bastante intil que copiaba lo que se escriba (entrada estndar)
al terminal (salida estndar).  cat tambin imprime un fichero en la salida estndar si se indica el
fichero como parmetro:


       /home/larry$ cat listado
_______________________________________________________________________________________________________________6.3.   L*
 *a entrada estndar y@


       ..
       /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
el comando "cat  listado  >  fichero"     ?  Normalmente, el ">  fichero"    dice "coge toda la salida
del comando y ponla en fichero". La salida del comando "cat  listado"    es el fichero listado. As
hemos inventado un nuevo (y no tan eficiente) mtodo de copiar ficheros.

    >Qu ocurre con el comando "cat  >  zorro"  ? cat lee cada lnea_escrita_en el terminal (entrada
estndar) y la imprime de vuelta (salida estndar) hasta que lee |_Ctrl-d_|.  En este caso, la salida
estndar se ha redireccionado al fichero zorro. Ahora cat sirve como un editor rudimentario:


       /home/larry$  cat  >  zorro
       El  rapido  zorro  marron  salta  sobre  el  descuidado  perro.
       pulsa  Ctrl-d


    Ahora se ha creado el fichero zorro que contiene la frase "El rapido zorro marron salta sobre el de-
scuidado perro". Un ltimo uso del verstil comando cat es concatenar ficheros. cat imprimir cada
fichero dado como parmetro, uno despues de otro. El comando "cat  listado  zorro"     imprimir el
listado del directorio /usr/bin, y luego la tonta frase. As, el comando "cat  listado  zorro  >  listyzorro"
crear un nuevo fichero conteniendo los contenidos de listado y zorro.



6.3.3      Redireccionar la entrada


As como cuando se redirecciona la salida estndar, es posible redireccionar la entrada.  En lugar
de que un programa lea su entrada desde el teclado, la leer desde un fichero.  Como redireccionar
la entrada est relacionado con redireccionar la salida, parece natural que "<" sea el carcter para
redireccionar la entrada. ste tambin se usa despus del comando que se desee ejecutar.

    Esto es generalmente til si se tiene un fichero de datos y un comando que espera sus datos desde
la entrada estndar. Muchos comandos permiten especificar un fichero sobre el cual operar, as que
en las actividades diarias el "<" no se usa tanto como otras tcnicas.



6.3.4      Las tuberas


Muchos comandos Unix producen gran cantidad de informacin.  Por ejemplo, es normal que un
comando como "ls  /usr/bin"     produzca ms salida que la que se puede ver en pantalla.  Para
que se pueda ver toda la informacin de un comando como "ls  /usr/bin"   , es necesario usar otro
comando_Unix__llamado_more4.__more_parar_cada vez que la pantalla se llene de informacin.  Por
   3Para lectores impacientes, el comando que se debe usar es more. Sin embargo, hay que hablar un poco sobre algo
ms antes de llegar ah.
   4Se 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
demostracin de que los programadores de ordenadores son malos cmicos, llamaron a este nuevo programa "less".
_______________________________________________________________________________________________________________52      *
 *                                 @


ejemplo, "more  <  /etc/rc"    mostrar el fichero /etc/rc como lo hara "cat  /etc/rc"   , excepto que
more permite leerlo.  more tambin admite el comando "more  /etc/rc"    , y esa es la forma normal
de invocarlo.

    Sin embargo, eso no ayuda al problema de que "ls  /usr/bin"    muestre ms informacin de la
que se pueda ver.  "more  <  ls  /usr/bin"     no funciona_ <la redireccin de entrada slo funciona
con ficheros, 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"    .
El carcter "_"  es una tubera. Como una tubera de agua, una tubera Unix controla el flujo. En
vez de agua, se controla el flujo de informacin.

    Los filtros son programas muy tiles para usarse en conjuncin con las tuberas. Un filtro es un
programa que lee la entrada estndar, la cambia de alguna manera, y la saca por la salida estndar.
more es un filtro_lee los datos que coge de la entrada estndar y los muestra por la salida estndar
pantalla a pantalla, permitiendo leer el fichero.  more no es un gran filtro porque su salida no se
puede enviar a otro programa.

    Otros filtros incluyen los programas cat, sort, head, y tail. Por ejemplo, si se quiere leer slo
las primeras diez lneas de la salida de ls, se puede usar "ls  /usr/bin  _  head"    .



6.4       Multitarea



6.4.1      Usando el control de trabajos


Control de trabajos se refiere 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
para el control de procesos es el shell_seguir la pista de los procesos por usted, si se aprende como
hablar su lenguaje.

    Las dos palabras ms importantes en ese lenguaje son fg, para primer plano, y bg, para segundo
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 podra pulsar |_Ctrl-c_|y matarlo,
_____________________________________________5
    Hay buenas razones para que este extrao comando exista. Ciertos comandos esperan una confirmacin _un "si"
([y]es en ingls) a una pregunta. El comando yes permite al programador automatizar la respuesta a esas preguntas.
_______________________________________________________________________________________________________________6.4.   M*
 *ultitarea               @

                                ________
pero esta vez Ud.  oprimir |_Ctrl-z_|.  Parece haberse detenido, pero habr un mensaje antes del
indicador de sistema, ms o menos parecido a este:


       [1]+    Stopped                      yes


    Significa 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
desea, se pueden hacer otras cosas antes, mientras est suspendido. Pruebe unos cuantos ls o algo
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.
No hay que preocuparse de que si mientras ha estado suspendido ha "almacenado" ms yes para
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 nmero  de  trabajo de este proceso, y se usar cuando se
necesite referenciarlo especficamente. (Naturalmente, desde el momento que tengamos en ejecucin
mltiples trabajos, se necesita un modo de acceder a cada uno). El "+"  siguiente indica que se es el
"trabajo actual" _ esto es, el proceso ms reciente que se ha movido del primer plano al segundo.
Si se tecleara "fg"  , se pondra el trabajo con el "+"  en primer plano otra vez.  (Ms sobre esto
despus, cuando se discuta la ejecucin de mltiples trabajos a la vez). La palabra Stopped significa
que el trabajo est "parado".  El trabajo no est muerto, pero actualmente no se ejecuta.  Linux
lo ha guardado en un estado especial de suspendido, listo para saltar a la accin cuando alguien lo
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                     yes
       /home/larry$


    Ese mensaje sobre el proceso que indica "parado" otra vez induce a error. Para saber si an est
vivo (eso es, tanto en ejecucin como congelado en un estado suspendido), teclee "jobs"  :


       /home/larry$ jobs
       [1]+   Terminated                     yes
       /home/larry$


    Ahora ya lo sabe: <el trabajo ha terminado! (Es posible que el comando jobs no muestre nada,
lo que simplemente significa que no hay trabajos ejecutndose en segundo plano.  Si se acaba de
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".)

    Ahora, ejecute yes de nuevo, de esta forma:
_______________________________________________________________________________________________________________54      *
 *                                 @


       /home/larry$ yes > /dev/null


    Si lee la seccin sobre la redireccin de entrada y salida, sabr que se est enviando la salida de
yes a un fichero especial llamado /dev/null.  /dev/null es un agujero negro que come cualquier
salida que se le enve (se puede imaginar ese torrente de yes saliendo por detrs del ordenador y
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
columna de yes.  Sin embargo la salida se est enviando_a_/dev/null,_el trabajo an se ejecuta en
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
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 confianza en m sobre esto: despus de teclear bg, el trabajo "yes  >  /dev/null"
habr continuado con su ejecucin otra vez, pero esta vez en segundo plano.  De hecho, si hace al-
guna cosa en el prompt, como ls u otros, se dar cuenta que su mquina se ha ralentizado un poco
(<generar y descargar continuamente una cadena preparada de "yes" lleva algo de tiempo, al fin y
al cabo!) Aparte de esto, no hay ningn otro efecto. Se puede hacer lo que se desee en el indicador
del sistema, y yes continuar felizmente enviando su salida al agujero negro.

    Ahora hay dos formas diferentes de matarlo: con el comando kill que ya se explic,_o poniendo
el trabajo en primer plano de nuevo e interrumpirlo con una interrupcin, |_Ctrl-c_|.  Probemos la
segunda forma, slo para entender la relacin entre fg y bg un poco mejor;


       /home/larry$ fg
       yes >/dev/null


       [ahora esta en primer plano.   Imagine que pulso Ctrl-c para terminarlo]


       /home/larry$


    Bueno, se acab. Ahora, ejecute unos cuantos trabajos simultneamente, como estos:


       /home/larry$ yes   > /dev/null &
       [1] 1024
       /home/larry$ yes _ sort > /dev/null &
       [2] 1026
_______________________________________________________________________________________________________________6.4.   M*
 *ultitarea               @


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


       [3]+   Stopped                     yes _ uniq >/dev/null
       /home/larry$


    La primera cosa que le debe llamar la atencin de estos comandos es la terminacin "&"  al final
de los dos primeros.  Poner un "&"  despus del comando indica al shell que los ejecute_en_segundo_
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
vuelto ms lenta, ya que los que se estn ejecutando requieren un poco de tiempo de CPU.

    Cada uno indica su nmero de trabajo.  Los dos primeros tambin muestran sus nmeros de
identificacin de proceso, o PID, despues del nmero de trabajo. Los PIDs normalmente no son
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"  ,
pero eso sera demasiado fcil. Por el contrario, haga esto:


       /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 podra teclear slo
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
peticin para poner ese trabajo en primer plano. Se puede indicar los nmeros de trabajo con otros
nmeros precedidos por un "%". Ahora teclee "jobs"   para ver cules trabajos quedan en ejecucin:


       /home/larry$ jobs
       [1]-   Running                     yes >/dev/null   &
       [3]+   Stopped                     yes _ uniq >/dev/null
       /home/larry$


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


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


       [1]+   Stopped                     yes >/dev/null
       /home/larry$


    Al cambiar al trabajo nmero 1 y luego suspenderlo han cambiado las proridades de todos los
trabajos de usuario. Esto se puede ver con el comando jobs:


       /home/larry$ jobs
       [1]+   Stopped                     yes >/dev/null
       [3]-   Stopped                     yes _ uniq >/dev/null
       /home/larry$

                                                                          ________
    Ahora los dos estn parados (porque los dos se han suspendido con |_Ctrl-z_|), y el nmero 1 es
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 refiere al trabajo ms reciente
que ha sido suspendido del primer plano. Se puede continuar con su ejecucin otra vez:


       /home/larry$ bg
       [1]+ yes >/dev/null   &
       /home/larry$ jobs
       [1]-   Running                     yes >/dev/null
       [3]+   Stopped                     yes _ uniq >/dev/null
       /home/larry$


    Fjese que ahora est en ejecucin, y el otro trabajo se ha movido en la lista y tiene el "+" . Ahora
matmoslos para que el sistema no est permanentemente ralentizado por procesos que no hacen
nada.


       /home/larry$ kill %1 %3
       [3]    Terminated                 yes _ uniq >/dev/null
       /home/larry$ jobs
       [1]+   Terminated                 yes >/dev/null
       /home/larry$


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



6.4.2      Teora del control de trabajos


Es importante entender que el control de procesos lo hace el shell.  No hay ningn programa en el
sistema llamado fg; por eso, fg, bg, &, jobs, y kill son internos al shell6.  (A veces kill es un
programa_independiente;_en_el_shell_bash_usado_por Linux pertenece al shell).  Esto es una forma
   6N. del T.: En el original pone "shell-builtins", eso es que se compilan dentro del shell.
_______________________________________________________________________________________________________________6.5.   C*
 *onsolas virtuales:  como@


lgica de hacerlo: ya que cada usuario quiere su propio espacio de control de trabajos, y cada usuario
ya tiene su propio shell, es ms fcil que el shell siga la pista de los trabajos usuario. Por otro lado,
cada nmero de trabajo de usuario slo tiene significado para ese usuario: mi trabajo nmero [1] y
su trabajo nmero [1] son probablemente dos procesos totalmente diferentes.  De hecho, si se est
conectado ms de una vez, cada uno de los shells tendr datos nicos sobre el control de trabajos,
as como tambin un usuario puede tener dos trabajos diferentes con el mismo nmero ejecutndose
en dos shells diferentes.


    La manera segura de referenciarlos es usar el nmero IDentificador de Proceso (PID). Estos
nmeros abarcan todo el sistema _ cada proceso tiene su propio (y nico) nmero.  Dos usuarios
diferentes pueden referenciar un proceso por su PID y saber que estn hablando sobre el mismo
proceso (<asumiendo que estn conectados en la misma mquina!)


    Echmosle un vistazo a un comando ms para entender que son los PIDs.  El comando ps lista
todos los procesos en ejecucin, incluyendo el shell. Prubelo. Tiene tambin unas cuantas opciones,
de las cuales las ms importantes (para mucha gente) son "a" , "u" , y "x" .  La opcin "a"  lista los
procesos pertenecientes a algn usuario, no slo los suyos propios. La "x"  lista los procesos que no
tienen un terminal asociado a ellos7. Finalmente, la "u"  da informacin adicional sobre los procesos
que es frecuentemente til.


    Para hacerse una idea de lo que realmente est haciendo el sistema,  se ponen todos juntos:
"ps  -aux"  .  Se pueden ver los procesos que usan ms memoria mirando la columna %MEM, y ms
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 %no_trabajo, toma
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  PID"  8 .


    Si empieza a programar en C con su sistema Linux, pronto aprender que el control de trabajos del
shell es slo una versin interactiva de las llamadas a las funciones fork y execl. Esto es demasiado
complejo para explicarlo aqu, pero sera til recordarlo despus cuando se est programando y se
quieran ejecutar mltiples procesos desde un simple programa.



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
como mltiples terminales, todos conectados al mismo ncleo Linux. Por fortuna, usar las consolas
virtuales es una de las cosas ms simples en Linux: hay "hot keys"9 para cambiar_entre las consolas
rpidamente. Para probarlo, hay que conectarse al sistema, pulsar la tecla |_Alt_|izquierda, y pulsar

_____________________________________________7
    Esto slo tiene sentido para ciertos programas que no tienen que hablar con el usuario a travs del teclado.
   8En general, es ms fcil matar el nmero del trabajo en vez de usar PIDs.
   9N.T.: No he creido apropiado traducir este trmino, ya que muchos usuarios saben a lo que se refiere. De todas
formas para el que no lo sepa, esto es, una simple combinacin de teclas que hace un cierto trabajo.
_______________________________________________________________________________________________________________58      *
 *                                 @

_____

|_F2_ |(esto es, la tecla de funcin nmero 2)10 11.

    Se encontrar con otro indicador para conectarse. No se alarme: ahora est en la consola virtual
(VC) nmero 2. Conctese y haga algunas cosas _ unos cuantos ls o lo_que_sea _ para confirmar_
que es un shell real.  Ahora puede volver a la VC nmero_1, pulsando el |_Alt_|izquierdo y |_F1_.| O

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 Administrator's Guide.  Ello
implica editar uno o dos ficheros en el directorio /etc.  Sin embargo, cuatro deben ser suficientes
para la mayora de las personas.

    Una vez las haya usado, las VC probablemente se convertirn en una herramienta indispensable
para tener varias cosas ejecutndose a la vez.  Por ejemplo, yo normalmente ejecuto Emacs en la
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 ficheros 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
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
aplicacin grfica, probablemente no funcionar, sin embargo corre el rumor de que pronto se podr camb*
 *iar entre las
consolas virtuales en X Window de Linux.                                       _________________________
  11N. del T.: De hecho al momento de la traduccin, la combinacin es |_Ctrl-Alt-tecla-de-funcin|_.
_______________________________________________________________________________________________________________6.5.   C*
 *onsolas virtuales:  como@





_______________________________________________________________________________________________________________
Figura_6.1_Resumen_de_comandos_y_teclas_usados_para_el_control_de_trabajos.____________________________________

fg %no_trabajo     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 +.
                   Parmetros:  nmero de trabajo opcional.  El trabajo por defecto se identifica con
                   el +.


&                  Cuando se aade un & al final de la lnea de comandos, indica al comando que se
                   ejecute en segundo plano automticamente.  Este trabajo est entonces sujeto a
                   todos los mtodos usuales para el control de trabajos aqu detallados.


bg %no_trabajo     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
                   que tiene el +.
                   Parmetros:  nmero de trabajo opcional.  El trabajo por defecto se identifica con
                   el +.


kill %no_trabajo 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 especificar el nmero de
                   trabajo o PID, y si se estn usando nmeros de trabajo, no hay que olvidar poner
                   el %.
                   Parmetros: El nmero de trabajo (a continuacin del %) o el PID (no es necesario
                   el %). Se puede especificar ms de un proceso o trabajo en una lnea.


jobs               Este comando del shell lista informacin sobre los trabajos que estn en ese momento
                   en ejecucin o suspendidos. A veces tambin dice cules son los que acaban de salir
                   o han terminado.
________
|_Ctrl-c_|         Este es el carcter genrico de interrupcin. Normalmente, si se pulsa mientras un
                   programa se est ejecutando en primer plano, matar al programa (puede que haya
                   que hacerlo varias veces). Sin embargo, no todos los programas respondern a este
                   mtodo de terminacin.
________
|_Ctrl-z_|         Esta combinacin de teclas normalmente suspende un programa, puede que algunos
                   programas  lo  ignoren.   Una  vez  suspendido,  el  trabajo  se  puede  reiniciar  en  el
                   segundo plano o se puede matar.
_______________________________________________________________________________________________________________
_______________________________________________________________________________________________________________60      *
 *                                 @






Captulo  7



Pequeos   programas   potentes



       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 _ grep sleeping
       who _ grep awake
       who _ egrep 'bad_good'
       for (goodness sake) -
                 be good
       "



7.1       El  poder  de  Unix



El poder de Unix1 se esconde en pequeos comandos que no parecen ser muy tiles cuando se utilizan
por separado, pero combinados con otros (directa o indirectamente) proporcionan un entorno mucho
ms potente y flexible que la mayora de los otros sistemas operativos.  Los comandos de los que
hablaremos en este captulo 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.
_____________________________________________1
    N. del T.: El cookie de apertura de este captulo es la traduccin a comandos Unix de una cancin de na*
 *vidad:
"Santa Claus is coming to town" (escrita por H. Gillespie, J. F. Coots)
   2Ntese que los resmenes de los comandos en este captulo no son extensos. Para conocer cada una de los*
 * opciones,



                                                       61
_______________________________________________________________________________________________________________62      *
 *                                 @


7.2       Trabajando  con  ficheros



Junto a comandos como cd, mv, y rm que ya se vieron en el Captulo 4, hay otros comandos que
trabajan con ficheros 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 fichero_simplemente modifican algunas de las
informaciones que Unix guarda acerca del fichero.

    Estos comandos manipulan:



    o  Los registros de tiempo. Todo fichero tiene tres fechas asociadas a l.3  Las tres fechas son las
       siguientes:  creacin del fichero, ltima modificacin (cuando se produjo el ltimo cambio en
       el fichero), y ltimo acceso (cuando se produjo la ltima lectura del fichero).


    o  El dueo. Cada fichero en Unix pertenece a un nico propietario.


    o  El grupo.  Cada fichero tiene tambin asociados un grupo de usuarios.  El grupo ms usual
       para los ficheros de usuario se denomina users, que es al cual, por lo general, pertenecen todos
       los usuarios con cuenta en el sistema.


    o  Los permisos.  Cada fichero tiene ciertos permisos (tambin llamados "privilegios") asociados
       a l, que indican a Unix quin puede acceder a ese fichero, cambiarlo o en el caso de ser un
       programa, ejecutarlo. Cada uno de estos permisos puede ser establecido por separado para el
       dueo, el grupo, y el resto de usuarios.



_______________________________________________________________________________________________________________

touch  fichero1 fichero2 . . . ficheroN
_______________________________________________________________________________________________________________

    touch actualiza los registros de fecha y hora con la fecha y hora actual de los ficheros indicados
en la linea de comandos.  Si el fichero no existe, touch lo crear.  Tambin es posible especificar la
fecha y hora a registrar en la informacin de los ficheros_consulte la pgina del manual (comando
man) para ms informacin sobre touch.


_______________________________________________________________________________________________________________

chmod [-Rfv] modo fichero1 fichero2 . . . ficheroN
_______________________________________________________________________________________________________________

    El comando que se utiliza para modificar los permisos de un fichero es el chmod4.  Antes de
meternos en como utilizar este comando, veamos primero que permisos hay en Unix.  Cada fichero
tiene asociados un grupo de permisos.  Estos permisos le indican al sistema operativo quien puede
leer, escribir o ejecutar como programa el fichero. (A continuacin, se explica como puede un usuario
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.
   3Los antiguos sistemas de ficheros de Linux slo almacenaban una fecha, ya que derivaban de Minix. Si se utiliza
alguno de estos sistemas de ficheros, parte de la informacin no estar disponible_y las operaciones que se rea*
 *licen
sobre ellas sern intiles.
   4N. del T.: Abreviatura de change mode, cambiar modo.
_______________________________________________________________________________________________________________7.2.   T*
 *rabajando con ficheros  @


le estn permitidas al propio usuario; esto puede suponer un problema de seguridad, si se desconoce
lo que hace cada programa en particular.)


    Unix reconoce tres tipos diferentes de individuos: primero, el propietario del fichero (y la persona
que puede utilizar el comando chmod sobre ese fichero). Segundo, el "grupo". El grupo de la mayora
de los ficheros normales de un usuario del sistema ser "users".  (Para ver el grupo de un fichero
en particular, utilizar "ls  -l  fichero" .)  Por ltimo, est el "resto" que no son ni propietarios ni
pertenecen al grupo, denominados "otros"5


    De  esta  forma,  por  ejemplo,  un  fichero  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
razn, un fichero puede tener permisos de lectura/escritura para el grupo y otros, pero <ningn
privilegio para el propietario!


    Veamos algunos ejemplos de como cambiar permisos utilizando chmod.  Primero creamos un
fichero utilizando cat, emacs, o cualquier otro programa.  Por defecto, son posibles las operaciones
de lectura y de escritura sobre el fichero.  (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
tenemos permiso de lectura utilizando el comando cat, a continuacin eliminamos el privilegio de
lectura para nosotros mismos utilizando "chmod  u-r  fichero"  6 . Ahora si intentamos leer el fichero,
obtendremos el mensaje de error Permission  denied. Devolvemos el privilegio de lectura utilizando
"chmod  u+r  fichero"   .


    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 directorio_listar los nombres de los ficheros.  El permiso de escritura permite aadir o borrar
ficheros. El permiso de ejecucin permite al usuario acceder a ficheros en el directorio o a cualquier
subdirectorio.  (Si un usuario no tiene permisos de ejecucin para un directorio, entonces no puede
siquiera hacer un cd al mismo).


    Para utilizar chmod, reemplazar el modo por el usuario, grupo, otro o todos (all) y la operacin a
realizar. (Es decir, utilizar un signo ms "+" para aadir privilegios y un menos "-" para quitarlos.
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).


    La opcin "-R"   al utilizar chmod cambiar los permisos de un directorio, de todos los ficheros
contenidos en l, y de forma recursiva los permisos del rbol de subdirectorios a partir de l.  La
opcin "-f"  fuerza a que chmod intente cambiar los permisos incluso si el usuario no es el dueo del
fichero. (Si se utiliza el parmetro "f"  al ejecutar chmod no se mostrar un mensaje de error en caso
de que no pueda cambiar los permisos del fichero.), por ltimo la opcin "v"  hace que la ejecucin
del chmod informe de todo lo que hace.



_____________________________________________5
    N. del T.: En ingles: "owner" (con "u" de "user"), "group" and "others" respectivamente.
   6N. del T.: El parmetro u-r indica "user minus read", es decir: usuario menos lectura.
_______________________________________________________________________________________________________________64      *
 *                                 @


7.3       Estadsticas  del  sistema



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


_______________________________________________________________________________________________________________

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

    El  comando  du7  contabilizar  el  espacio  de  disco  ocupado  por  un  subdirectorio  y  todos  sus
subdirectorios.  El uso de este comando sin utilizar parmetros devolver una lista de cuanto disco
consume  cada  subdirectorio  del  directorio  actual,  y  al  final  del  informe,  cuanto  disco  utiliza  el
directorio (y todos sus subdirectorios).  Si se le pasa uno o ms parmetros, devolver la cantidad
de espacio utilizado por esos ficheros o directorios en lugar de la del directorio actual.

    La opcin "a"   mostrar adems del espacio de los directorios,  el de los ficheros.  Utilizando
"b"  como opcin presentar el total en bytes, en lugar de kilobytes (1 kilobyte = 1024 caracteres)8.
Finalmente el parmetro "s" informar slo acerca de los directorios explictos en la linea de comando
y no de sus subdirectorios.


_______________________________________________________________________________________________________________

df
_______________________________________________________________________________________________________________

    El comando df9 resume la cantidad de espacio utilizada en el disco. Para cada sistema de ficheros
(recuerde que sistemas de ficheros diferentes son o bien unidades fsicas o particiones diferentes)
muestra el espacio total de disco, la cantidad utilizada, la cantidad disponible y la capacidad total
del sistema de ficheros que se utiliza.

    Un caso extrao que puede darse es la posibilidad de tener una capacidad superior al 100%, o
que la cantidad utilizada ms la disponible no sea igual a la total. Esto es debido a que Unix reserva
parte del espacio de cada sistema de ficheros para el directorio raz.  De esta forma aunque algn
usuario accidentalmente sature el disco, el sistema todava tendr un poco de espacio para seguir
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 ltima vez.

    Este comando tambin devuelve la hora actual y el promedio de carga que soporta el sistema. El
promedio de carga es el nmero medio de procesos esperando a ejecutar en un determinado periodo
_____________________________________________7
    N. del T.: Abreviatura de disk usage, utilizacin del disco.
   8Un byte es el equivalente de una letra en un documento de texto.
   9N. del T.: Abreviatura de disk filling, espacio disponible en el disco.
  10N. del T.: Tiempo en estado activo.
_______________________________________________________________________________________________________________7.4.   >*
 *Qu hay en un ficher@


de tiempo.  uptime muestra el promedio de carga del ltimo minuto y de los cinco y diez ltimos
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
el resultado de la ejecucin simultnea de varios programas.

    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
informacin relativa a nosotros mismos.11


_______________________________________________________________________________________________________________

w [-f] [nombre_usuario]
_______________________________________________________________________________________________________________

    El programa w devuelve los usuarios actuales del sistema y que estn haciendo.  (Bsicamente
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 lneas la siguiente:  el nombre del
usuario, hora de inicio de la sesin (y cuanto tiempo ha estado ocioso). JCPU es la cantidad total de
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
acceden,  si los hay.   Puede indicarse un nombre de usuario como parmetro para mostrar slo
informacin relativa a l.



7.4       >Qu  hay  en  un  fichero?



Principalmente hay dos comandos en Unix para listar ficheros, cat y more. Sobre ambos ya se habl
en el Captulo 6.


_______________________________________________________________________________________________________________

cat [-nA] [fichero1 fichero2 . . . ficheroN]
_______________________________________________________________________________________________________________

    cat no es un comando de uso amigable_no espera a que el usuario acabe de leer el fichero, y se
utiliza generalmente en contextos de tuberas. Aunque pueden utilizarse algunas opciones muy tiles
del comando, por ejemplo, "n"  numera todas las lneas del fichero, y "A"  mostrar los carcteres de
control como carcteres normales en lugar de hacer (posiblemente) cosas extraas en la pantalla.
(Recuerde que para ver las opciones ms curiosas y quiz "menos tiles" utilice el comando man:
_____________________________________________11
    N. del T.: literalmente es como preguntar al sistema >quin soy yo?
_______________________________________________________________________________________________________________66      *
 *                                 @


"man  cat"  .)  Si no se especifican ficheros en la lnea de comandos, cat aceptar la entrada desde
stdin12.


_______________________________________________________________________________________________________________

more [-l] [+nmero_lnea] [fichero1 fichero2 . . . ficheroN]
_______________________________________________________________________________________________________________

    more es ms til, y adems es el comando recomendado para ver ficheros de texto ASCII. La   _________
nica opcin interesante es "l" , que indica al comando que no se desea interpretar el carcter |_Ctrl-L_|
como carcter de "nueva pgina". El comando comenzar en la lnea nmero_lnea especificada.

    Al ser more un comando interactivo, hemos resumido a continuacin las rdenes ms comunes:

_____________________
| Barra espaciadora   |Pasar a la siguiente pantalla de texto.
|____________________ |
____
|_d_|Pasar 11 lneas de pantalla, o aproximadamente la mitad de una pantalla normal: 25 lneas.
____
| / |Busca una expresin regular. La construccin de una expresin regular puede ser muy compli-
|___|
       cada_por_lo que es recomendable teclear simplemente el texto a buscar.  Por ejemplo, /sapo

       |_Intro_|buscar la primera_ocurrencia_de "sapo" en el fichero a partir de la posicin actual.
       La misma tecla seguida por un |_Intro_|buscar la siguiente ocurrencia de la ltima expresin
       buscada.

____
|_n_|Buscar la prxima aparicin de la expresin regular especificada.
_______
|_:|_|_nP|asar al siguiente fichero, en caso de que se especifique ms de un fichero en la lnea de
       comandos.

_______
|_:|_|_pP|asar al fichero anterior.
____
|_q_|Terminar more.


_______________________________________________________________________________________________________________

head [-lneas] [fichero1 fichero2 . . . ficheroN]
_______________________________________________________________________________________________________________

    head mostrar las primeras diez lneas de los ficheros especificados, o las primeras diez lneas de
la stdin si no se especifica ningn fichero en la lnea de comandos.  Cualquier opcin numrica se
tomar como el nmero de lneas a mostrar, por ejemplo "head  -15  rana"    mostrar las primeras
quince lneas del fichero rana.


_______________________________________________________________________________________________________________

tail [-lneas] [fichero1 fichero2 . . . ficheroN]
_______________________________________________________________________________________________________________

    Como head, tail mostrar solo una parte del fichero, en este caso el final del fichero, las ltimas
diez lneas del fichero, o que provengan de la stdin.  tail tambin acepta la opcin de especificar
el_nmero_de_lneas,_como_en_el_caso_anterior.
  12N. del T.: standard input, entrada estndar, generalmente entrada de datos por teclado.
_______________________________________________________________________________________________________________7.5.   C*
 *omandos de edicin  @


_______________________________________________________________________________________________________________

file [fichero1 fichero2 . . . ficheroN]
_______________________________________________________________________________________________________________

    El comando file intenta identificar que tipo de formato tiene un fichero en particular. Debido a
que no todos los ficheros tienen extensin o otras formas de identificarlos fcilmente, este comando
realiza algunas comprobaciones rudimentarias para intentar comprender exactamente que contiene
el fichero.

    Hay que tener cuidado ya que es bastante posible que file realice una identificacin incorrecta.



7.5       Comandos  de  edicin



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


_______________________________________________________________________________________________________________

grep [-nvwx] [-nmero] expresin [fichero1 fichero2 . . . ficheroN ]
_______________________________________________________________________________________________________________

    Uno de los comandos ms tiles de Unix es el grep13, utilizado para buscar expresiones en un
fichero de texto. La forma ms sencilla de usarlo es:


       /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 lneas que contienen
la palabra a buscar, no aporta informacin acerca de donde buscar en el fichero, es decir el nmero
de lnea. Pero dependiendo de lo que se pretenda puede ser hasta ms que suficiente, por ejemplo si
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 lnea,
hay que utilizar la opcin "n" .  Si lo que se desea es ver todas las lneas donde no se encuentra la
expresin especificada, entonces utilice la opcin "v" .

    Otra posibilidad que ofrece el grep es la bsqueda de partes de una palabra, como en el ejemplo
anterior que "igre"   se equipar con "tigre"  . Para buscar slo palabras completas hay que pasarle
al grep la opcin "w" , y para lneas completas la opcin es "x" .

____Si_no_se_especifica_ningn_fichero_(por_ejemplo: "grep  igre"   ), grep examinar la stdin.
  13N. del T.: Abreviatura de generalized regular expression parser, analizador general de expresiones regulares.
_______________________________________________________________________________________________________________68      *
 *                                 @


_______________________________________________________________________________________________________________

wc [-clw] [fichero1 fichero2 . . . ficheroN ]
_______________________________________________________________________________________________________________

    El comando wc14 simplemente cuenta el nmero de palabras, lneas y carcteres en los ficheros
pasados como parmetros. Si no se especifica ningn fichero, operar sobre la stdin.

    Los tres parmetros, "clw"  , indican el elemento a contar: carcteres, lneas y "w" para palabras.
Por ejemplo, "wc  -cw"   contar el nmero de carcteres y palabras, pero no el nmero de lneas. Si
no se indica ningn parmetro wc cuenta todo: palabras, lneas y carcteres.

    Se puede utilizar wc para saber el nmero de ficheros de un directorio:  "ls  _  wc  -w" .  Si se
desea saber el nmero de ficheros que acaban en .c, entonces ejecute "ls  *.c  _  wc  -w" .


_______________________________________________________________________________________________________________

spell [fichero1 fichero2 . . . ficheroN]
_______________________________________________________________________________________________________________

    spell es el corrector ortogrfico ms sencillo de Unix  generalmente para ingls americano15.
spell es un filtro, igual que la mayora de los comandos que hemos comentado antes, que toma el
fichero de texto ASCII y devuelve todas las palabras que considera errneas. spell opera sobre los
ficheros especificados, y si no se incluye ninguno, entonces utiliza la stdin.

    Tambin es posible que est disponible en su mquina ispell, que es un corrector ortogrfico
un poco ms sofisticado. ispell ofrece diversos vocabularios y un men ms manejable en caso de
ejecutarlo con un fichero en la lnea de comandos. Tambin puede ejecutarse como un filtro si no se
especifica ningn fichero.

    La forma de trabajar con ispell es bastante obvia, pero si necesita ms ayuda consulte la pgina
del manual correspondiente: "man  ispell"   .


_______________________________________________________________________________________________________________

cmp fichero1 [fichero2]
_______________________________________________________________________________________________________________

    cmp compara dos ficheros. El primero debe ser obligatoriamente pasado como parmetro, mien-
tras que el segundo puede ser pasado como un segundo parmetro o ledo desde la entrada estndar.
cmp es muy sencillo, y simplemente dice donde se diferencian los dos ficheros.


_______________________________________________________________________________________________________________

diff fichero1 fichero2
_______________________________________________________________________________________________________________

    Uno de los comandos estndar ms complejos de Unix es el diff.  La versin GNU de diff
tiene hasta <veinte opciones!  en la lnea de comandos.  Es una versin mucho ms potente que cmp
y muestra cuales son las diferencias en lugar de decir simplemente donde est la primera.

    Ya que una buena parte de las opciones del diff estn ms alla del alcance de este manual,
_____________________________________________14
    N. del T.: Abreviatura de word count, contar palabras.
  15Aunque hay versiones del corrector para diversas lenguas europeas, la copia que puede encontrarse en su mquina
Linux es con toda probabilidad para ingls americano.
_______________________________________________________________________________________________________________7.5.   C*
 *omandos de edicin  @


simplemente  hablaremos  del  funcionamiento  bsico.   Brevemente,  diff  toma  dos  parmetros  y
muestra las diferencias entre ellos lnea a lnea. 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 ficheros son iguales. Pero cuando
hemos comparado dos ficheros diferentes, se muestra una cabecera de seccin, "1c1,2"    indicando
que ha comparando la lnea 1 del fichero de la izquierda, rana, con las lneas 1-2 de perro y las
diferencias que ha encontrado.  Luego ha comparado la lnea 3 de rana con la lnea 4 de perro.
Aunque pueda parecer extrao que compare diferentes nmeros de lnea, es bastante eficiente ya que
es posible que pueda haber algn retorno de lnea de ms en alguno de los ficheros.


_______________________________________________________________________________________________________________

gzip [-v#] [fichero1 fichero2 . . . ficheroN]

gunzip [-v] [fichero1 fichero2 . . . ficheroN]

zcat [fichero1 fichero2 . . . ficheroN]
_______________________________________________________________________________________________________________

    Estos tres programas se utilizan para comprimir y descomprimir datos.  gzip, o GNU Zip, es
un programa que lee de los ficheros originales y devuelve ficheros ms pequeos, borra los ficheros
especificados en la lnea de comandos y los reemplaza con ficheros que tienen el mismo nombre pero
con .gz aadido a su nombre.


_______________________________________________________________________________________________________________

tr cadena1 cadena2
_______________________________________________________________________________________________________________
_______________________________________________________________________________________________________________70      *
 *                                 @


    El comando de "traduccin de caracteres" opera sobre la entrada estndar_no acepta un nombre
de fichero como parmetro. Reemplaza todas las ocurrencias de cadena1 en la entrada con la cadena2.
En comparacin con llamadas tan sencillas como "tr  rana  sapo"   , tr puede aceptar comandos ms
complejos. Por ejemplo, hay una forma rpida de convertir los carcteres en minscula por otros en
mayscula :


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



Captulo  8



Editando   archivos   con   Emacs



       FUNNY SOMETHING OR OTHER



8.1       >Qu  es  Emacs?



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
tipo de tareas.  emacs es uno de los editores ms populares, en parte porque es muy fcil para un
principiante hacer trabajos con l. (El editor de Unix clsico, el vi, se trata en el Apendice A.)

    Para aprender emacs, tiene que encontrar un archivo de texto (letras, nmeros, etc.)  cpielo a
su directorio de usuario 1 (no queremos modificar el archivo original, si ste contiene informacin
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
consola que muestra slo caracteres de texto Emacs se apoderar de toda la consola.  Si lo llama
desde X, Emacs abrir su propia ventana. Asumir que lo est haciendo desde una consola de texto,
pero todo sucede de la misma manera en la versin de X, lgicamente _simplemente sustituya la
palabra "ventana" en los lugares en donde lea "pantalla".  <Adems, recuerde que debe mover el
puntero del ratn a la ventana de Emacs para escribir!

    Su pantalla (o ventana, si est usando X) debera parecerse a la Figura 8.1. La mayor parte de la
pantalla contiene su documento de texto, pero las dos ltimas lneas son especialmente interesantes
si est tratando de aprender Emacs. La penltima lnea (la que tiene una cadena larga de guiones)
se_denomina_lnea_de_modo_("mode_line"_en_ingls).
   1Por ejemplo, "cp /usr/src/linux/LEAME ./LEAME"



                                                       71
_______________________________________________________________________________________________________________72      *
 *                                 @

_______________________________________________________________________________________________________________
Figura_8.1_Emacs_se_inici_con_"emacs__LEAME"______________________________________________________________



_______________________________________________________________________________________________________________



    En mi lnea de modo, ve "Top". Debera decir "All", y puede haber otras pequeas diferencias.
(A muchas personas les aparece la hora actual en la lnea de modo). La lnea inmediatamente inferior
a la lnea de modo se denomina minibuffer, o a veces el rea de eco.  Emacs usa el minibuffer
para enviar mensajes al usuario, y ocasionalmente cuando es necesario, para leer informacin que
introduce el usuario. De hecho, ahora mismo Emacs le est diciendo "Para  obtener  informacin
acerca  del  Proyecto  GNU  y  sus  objetivos,  teclee  C-h  C-p."  (slo que en ingls).  Ignrelo
por ahora; no vamos a usar mucho el minibuffer por un tiempo.

    Antes de realizar cualquier cambio en el texto del archivo, necesita aprender cmo moverse.  El
cursor deber estar_al principio del archivo,_en_la_esquina superior-izquierda de la pantalla.  Para
avanzar, presione |_C-f_|(reteniendo la tecla |_Control_m|ientras presiona "f", para "forward"(avanzar)).
Avanzar un carcter cada vez, y si retiene ambas teclas, la repeticin automtica de teclas de su sis-
tema deber surtir efecto en medio segundo aproximadamente. Notar como,_cuando_llega al fin de la
lnea, el cursor automticamente se mueve a la prxima_lnea._|_C-b_ |(para "backward"(retroceder))

tiene el comportamiento opuesto.  Y, ya que estamos en ello, |_C-n_ |y ||C-p_ ||le llevan a las lneas
siguiente y anterior, respectivamente. 2

    Usar las teclas de control es comnmente la manera ms rpida de moverse cuando est editando.
El objetivo de Emacs es mantener sus manos sobre las teclas alfa-numricas del teclado, donde se
realiza la mayora del trabajo.  Sin embargo, si quiere, las teclas de movimiento debern funcionar
tambin.

    De hecho, cuando usa X, debera ser capaz de ubicar el puntero del ratn y hacer "click" con
el botn izquierdo para mover el cursor donde quiera.  Sin embargo, esto es muy lento_<tiene que
mover la mano hasta el ratn! La mayora de la gente que usa Emacs usa principalmente el teclado
para moverse por el texto.
_____________________________________________2
____En_caso_de que an no lo haya notado, muchos de los comandos de movimiento de emacs consisten en combinar

|_Control_|con una nica letra mnemotcnica.
_______________________________________________________________________________________________________________8.2.   C*
 *omenzar rpidamente @

        ______     ______                                                          ______
    Use ||C-p_ ||y |_C-b_ |para ir a la esquina superior-izquierda. Ahora mantenga |_C-b_ |un poco ms.
Debera or un sonido molesto de campana, y ver el mensaje "Beginning  of  buffer" (Principio del
buffer) que aparece en el minibuffer. En este punto se puede preguntar, ">Pero qu es un buffer?"

    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 rea de trabajo especial de Emacs llamada buffer, donde
puede modificar el contenido. Cuando ha acabado de trabajar, debe decirle a Emacs que guarde los
buffers _ en otras palabras, que escriba el contenido de los buffers en el archivo correspondiente.
Hasta que haga esto, el archivo permanece sin cambiar, y el contenido de los buffers existe nicamente
dentro de Emacs.

    Con esto en mente, preprese a insertar su primer carcter en el buffer. Hasta ahora, todo lo que
hemos hecho ha sido "no destructivo", este es un gran momento.  Puede escoger cualquier carcter
que quiera, pero si quiere hacer esto con estilo, yo sugiero usar una bonita y slida, "X" mayscula.
Mientras lo teclea, eche un vistazo al principio de la lnea de modo al pie de la pantalla.  Cuando
cambia los buffer de modo que sus contenidos no sean iguales que los del archivo sobre el disco,
Emacs muestra dos asteriscos a principios de la lnea de modo, para hacerle saber que el buffer ha
sido modificado:


       --**- Emacs:   algun_archivo.txt (Fundamental)--Top------------------------


    Estos dos asteriscos se muestran tan pronto como modifica el buffer, y permanecen visibles hasta
que guarde el buffer.  Puede guardar_los_buffer_muchas veces_durante_una sesin de edicin _el
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
lo mejor es salvar sus buffers al principio y frecuentemente.

    Ahora voy a enumerar ms comandos, adems de los que ya ha aprendido, y los puede practicar
del modo que prefiera. Yo sugiero familiarizarse con ellos antes de proseguir:

      C-f             Avanza un carcter.
      C-b             Retrocede un carcter.
      C-n             Va a la prxima lnea.
      C-p             Va a la lnea anterior.
      C-a             Va al comienzo de la lnea.
      C-e             Va al final de la lnea.
      C-v             Va a la prxima pgina/pantalla de texto.
      C-l             Redibuja la pantalla, con la lnea actual en el centro.
      C-d             Borra este carcter (practica este).
      C-k             Borra el texto desde aqu hasta el fin de lnea.
      C-x__C-s_____   Salva el buffer en su archivo correspondiente.

      |_Retroceso__|  Borra el carcter anterior (el ltimo que escribiste).



8.2       Comenzar  rpidamente  en  X



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





    Estos mens no estn disponibles en el modo texto.

    Cuando ejecute por primera vez Emacs, habr cuatro mens en la parte superior de la pantalla:
Buffers, File, Edit, y Help.  Para usar un men, simplemente mueva el puntero del ratn sobre el
nombre (como File, haga click y retenga el botn izquierdo). Entonces, mueva el puntero a la accin
que quiere y libere el botn del ratn.  Si cambia de idea, retire el puntero del ratn del men y
libere el botn.

    El men Buffers enumera los diferentes archivos que han sido editados en esta instancia de Emacs.
El men Files muestra un grupo de comandos para cargar y guardar archivos _muchos de ellos se
describirn ms adelante. El men Edit muestra algunos comandos para editar un buffer, y el men
Help debera dar la documentacin en lnea.

    Notar que las equivalencias del teclado se enumeran junto a las opciones del men. Puesto que,
a largo plazo, stas sern ms rpidas, podra quererlas aprender.  Tambin, para bien o para m*
 *al,
la mayora de la funcionalidad de Emacs est nicamente disponible mediante el teclado _as que
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 nico lmite sobre cuantos
buffers puede contener Emacs es la cantidad real de memoria_disponible_en la mquina. El comando
para traer un nuevo archivo a un buffer de Emacs es |_C-x_C-f_.| Cuando lo teclee, se le pedir un
nombre de archivo en el minibuffer:


       Find file (Buscar archivo):~/



    La sintaxis, aqu, es la misma que la usada para especificar archivos desde la lnea de comandos;
las barras representan subdirectorios, ~ es su directorio de usuario. Tambin consigue terminacin
automtica de nombre de archivo, significa que si ha escrito suficiente de un nombre de archivo______
en la lnea de comandos para identificar el archivo singularmente, puede simplemente_presionar_|_Tab_ |

para completarlo (o para ver las terminaciones posibles, si hay ms de una). ||Espacio_ ||tambin_tiene

un papel en la terminacin automtica de nombres de ficheros en el minibuffer, parecido a |_Tab_,|
pero dejar que experimente para_que_averig"ue_cmo difieren las dos. Una vez que tiene el nombre
completo en el minibuffer, presione |_Intro_|, y Emacs crear un buffer mostrando el archivo.  En
Emacs, este proceso es conocido como encontrar un archivo.  Siga adelante y busque ahora algn
otro archivo de texto sin importancia y trigalo a Emacs (haga esto desde nuestro buffer original
algun_archivo.txt).  Ahora tiene un nuevo buffer; Supondr que se llama otro_archivo.txt, ya
que no puedo ver su lnea de modo.

    Su  buffer  original  parece  haber  desaparecido  _probablemente_ se  pregunta  dnde  fue.   Est
todava dentro de Emacs,  y puede volver a l con |_C-x_b_.| Cuando teclee esto,  ver que en el
_______________________________________________________________________________________________________________8.4.   T*
 *erminando una sesin@


minibuffer le pide el nombre un buffer al que_cambiar,_y nombra uno por defecto.  El buffer por
defecto lo consigue slo con presionar |_Intro_|en la lnea de comandos, sin escribir un nombre de
buffer. El buffer por defecto al que cambiar, es siempre_el_ms recientemente usado, para que cuando
est haciendo mucho trabajo entre dos buffers, |_C-x_b_ |tenga por defecto el "otro" buffer (salvndole
de tener que escribir el nombre del buffer). Incluso si el buffer por defecto es el que quiere, debera
probar a teclear su nombre de todos modos.

    Note que_consigue_el mismo tipo de terminacin automtica que obtuvo al buscar un archivo:
al pulsar |_Tab_ |completa todo lo que puede del nombre de un buffer y as sucesivamente. Cada vez
que se le pida algo en el minibuffer, es una buena idea ver si Emacs hace terminacin automtica.
Aprovechando la terminacin automtica cuando se le ofrezca,  ahorrar teclear mucho.   Emacs
comnmente hace la terminacin automtica cuando elige un elemento de alguna lista predefinida.

    Todo lo que ha aprendido para moverse y editar texto en el primer buffer se aplica a los nuevos.________
Siga adelante y cambie algn texto en el nuevo buffer, pero no lo guarde (es decir, no teclee |_C-x_C-s_)|.

    Djeme asumir que quiere desechar los cambios sin guardarlos en el archivo.  El comando para
esto es C-x  k, que "mata" (kill) el buffer. Teclelo ahora. Primero se le preguntar qu buffer matar,
pero_por_defecto es el buffer actual, y casi siempre es el que se quiere matar, simplemente presione

|_Intro_|. Entonces le preguntar si realmente quiere matar el buffer _ Emacs siempre controla_antes_
de matar un buffer que tiene cambios sin salvar. Simplemente escriba "yes" (s) y presione |_Intro_|,
si quiere matarlo.

    Siga adelante y practique cargar archivos, modificarlos, guardarlos, y matar sus buffers.  Por
supuesto, cercirese de no modificar ningn archivo de sistema importante de una forma que cause
problemas 3, pero trate de tener por lo menos cinco buffers abiertos al mismo tiempo, para que se
pueda dar el gusto de moverse entre ellos.



8.4       Terminando  una  sesin  de  edicin



Cuando haya hecho su trabajo en Emacs,_asegrese_de que se guarden todos los buffers que deben
guardarse, y salga de Emacs con |_C-x_C-c_.|
            __________
    A veces |_C-x_C-c_ |le har una pregunta o dos en el minibuffer antes de dejarle salir _no se
alarme,_simplemente_conteste_en las maneras obvias. Si piensa que podra volver a Emacs luego, no
use |_C-x_C-c_;|use |_C-z_|, que suspender Emacs. Puede volver luego con el comando "fg"  del shell.
Esto es ms eficiente que detener a Emacs y comenzar varias veces, especialmente si tiene que editar
los mismos archivos nuevamente.
                      ______
    Bajo X, presionar |_C-z_|reducir a icono la ventana.  Mire la seccin sobre minimizar en el
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
_tendr que usar el gestor de ventanas.
_____________________________________________3
    De cualquier manera, si no es el usuario "root" de la mquina, no debera ser capaz de daar el sistema*
 *, pero
tenga cuidado igualmente.
_______________________________________________________________________________________________________________76      *
 *                                 @


8.5       La  tecla  Meta

                                                                  __________
Ha aprendido ya sobre una "tecla modificadora" 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

sean tambin teclas Meta, si usa un PC IBM o algn otro teclado que tenga una tecla |_Alt_|.

    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 minibuffer (como esto:__|_M-x__|)_entonces

la ha encontrado. Para librarse del prompt y regresar al buffer de Emacs, teclee ||C-g_.||
                                                                                                __________
    Si no consigue un prompt, entonces todava queda una solucin.  Puede usar la tecla ||Escape__||
como una tecla Meta.  Pero en vez de mantenerla pulsada mientras teclea la prxima letra, tiene
que  pulsarla  y  soltarla  rpidamente,  y  entonces  teclee  la  letra.   Este  mtodo  funcionar  tenga
o no una tecla Meta_verdadera,_ tambin es la manera ms segura para hacerlo.  Intente ahora
pulsar ligeramente_||Escape__||y_entonces_teclee_"x". Debera conseguir otra vez ese pequeo prompt.

Simplemente use ||C-g_ ||para salir.  ||C-g_ ||es la manera general en Emacs para salir de algn lugar
donde no quiere estar. Los fastidiosos y comunes pitidos son para hacerle saber_que_ha interrumpido
algo, pero est bien, porque es lo que quera hacer cuando tecle ||C-g_ ||4
                    _______                  ______
    La notacin |_M-x__|es anloga a |_C-x_|(ponga cualquier carcter en el lugar_de_la_"_x").  Si ha

encontrado una verdadera tecla_Meta,_use sta, de otra manera simplemente use la tecla ||Escape__||.

Yo escribir simplemente |_M-x__|y ud. tendr que usar su propia tecla Meta.



8.6       Cortar,  pegar,  destruir  y  tirar



Emacs, como cualquier buen editor, le permite cortar y pegar bloques de texto. A fin de hacer esto,
necesita una forma de definir el comienzo y fin del bloque. En Emacs, se hace esto estableciendo dos
ubicaciones en el buffer, conocidas como marca_y_puntero._ Para colocar la_marca,_vaya_al lugar
donde quiere que comience el bloque y teclee |_C-SPC__ |("SPC" significa ||Espacio_ ||, por supuesto).
Debera ver el mensaje "Mark set" (Marca establecida) que aparece en el minibuffer5.  Ahora la
marca ha sido establecida en ese lugar. No habr ningn indicador especial destacando este hecho,
pero Ud. sabe dnde la ha puesto, y eso es lo que importa.

    >Y qu hay del puntero?  Bien, resulta que ha colocado un puntero cada vez que ha movido
el cursor, porque "puntero" simplemente se refiere a su ubicacin actual en el buffer.  En trminos
formales, el puntero es el punto donde se insertar el texto si escribe algo.  Al colocar la marca, y
luego moverse al final del bloque, ha definido un bloque de texto. Este bloque es conocido como la
regin. La regin siempre significa el rea entre la marca y el puntero.

    El slo hecho de definir la regin no la deja disponible para pegar.  Tiene que decirle a Emacs
______________________________________________
   4Ocasionalmente, un   C-g no es suficiente para persuadir a emacs que realmente quiere interrumpir lo que hace.
Simplemente insista, y |____n|ormalmente Emacs volver a un modo ms cuerdo.

   5Sobre algunos terminales, ________|_C-SPCno|funciona. Para estas mquinas, debe usar ______|_C-@.|
_______________________________________________________________________________________________________________8.7.   B*
 *uscar y reemplazar      @


que lo copie para poder ser capaz de pegarlo. Para copiar_la_regin,_asegrese de que la marca y el
puntero estn correctamente establecidos, y teclee |_M-w__.|Ahora_ha_sido grabada por Emacs. Para

pegarlo en alguna otra parte, simplemente vaya all y teclee ||C-y_||.  Esto es conocido como tirar el
texto en el buffer.
                                                                          ______            _______
    Si quiere mover el texto de la regin a alguna otra parte, teclee |_C-w_ |en vez de |_M-w__.| Esto
matar la regin _todo_el_texto dentro de ella desaparecer._De hecho, se ha guardado del mismo
modo que si hubiera usado |_M-w__.| Puede tirar de nuevo con ||C-y_||, como siempre.  El lugar donde
emacs guarda todo este texto es conocido como el crculo de muerte. Algunos editores lo llaman
el "porta papeles" o el "buffer de pegado".
                                                       ______
    Existe otra manera para cortar y pegar: cuando usa |_C-k_ |para matar hasta el final de una lnea,
el texto matado se guarda en el crculo de muerte. Si mata ms de una lnea seguida, se guardarn
todas juntas en el crculo de muerte, para que la prxima tirada pegue_todas_las lneas al mismo
tiempo. Por ello, casi siempre es ms_rpido_usar repetidas veces |_C-k_ |para matar algn texto, que

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.



8.7       Buscar  y  reemplazar



Hay varias maneras para buscar texto en Emacs.  Muchas son ms bien complejas, y no merece la
pena tratarlas aqu. La ms fcil y la ms entretenida es usar isearch.

    "Isearch" se refiere a "incremental search" (bsqueda incremental).  Supongamos que quiere
buscar la cadena "tbano" en el siguiente buffer:



       Yo  estaba  temeroso  que  nos  quedramos  sin  gasolina,  cuando  mi  tcito  pasajero
       exclam  ``Auch  un  aguijn!   Hay  un  tbano  aqu  dentro!   ''.



    Debera moverse al comienzo del buffer, o por lo menos a_algn_punto que sabe que est antes de
la primera aparicin de la palabra, "tbano", y teclear |_C-s_|. Eso le pondr en el modo de bsqueda
isearch.  Ahora comience a escribir la palabra que est buscando, "tbano".  Pero tan pronto como
escribe la "t", ve que Emacs ha saltado a la primera aparicin de "t" en el buffer. Si la cita de arriba
es todo el contenido del buffer, 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
finalmente, "b" consigue "tbano", sin haber tenido que escribir la palabra entera.

    Lo que hace en una isearch es definir una cadena para buscarla. Cada vez que agrega un carcter
al final de la cadena, el nmero de posibles cadenas se reduce, hasta que haya escrito lo suficiente
para definir 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

que buscas esta atrs en el buffer, entonces debera usar |_C-r_|, que hace isearch hacia atrs.
                                                                           ______
    Si encuentra una palabra, pero no es la que buscaba, entonces presione |_C-s_|nuevamente mientras
todava est en la bsqueda.  Esto le mover hasta la prxima palabra coincidente, cada_vez_que_
lo haga.  Si no existe una prxima palabra, dir que la bsqueda fracas, pero si presiona |_C-s_|
_______________________________________________________________________________________________________________78      *
 *                                 @


nuevamente en este punto,_la bsqueda volver a comenzar desde el principio del buffer.  Se puede
decir lo opuesto de |_C-r_|_comienza al final del buffer.

    Intente introducir un buffer de texto en ingls_y_haga_un isearch para la cadena "the". Primero
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
buscar un nico "the", deber agregar un espacio al final de la cadena de bsqueda. Puede_agregar_
nuevos caracteres a la cadena en cualquier punto de la bsqueda, despus tiene que presionar_|_C-s_|_

repetidamente_para encontrar las prximas palabras coincidentes. Puede usar tambin la |_Retroceso__|_

o ||Supr_ ||para quitar caracteres de la cadena en cualquier punto de la bsqueda, y presionando |_Intro_|
sale de la bsqueda, dejndole en la ltima coincidencia.

    Emacs tambin permite reemplazar todas las apariciones de una cadena con alguna nueva ca-
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
"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),
escriba "tbano", y presione |_Intro_|. Entonces aparecer el prompt nuevamente, y deber introducir
"mosca".  Entonces Emacs recorrer el buffer, parando a cada aparicin de la palabra "tbano", y
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.



8.8       >Qu  es  lo  que  ocurre  realmente?



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
previous-line (lnea_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

simplemente |_M-x__|previous-line_|_Intro_|, y se_mover_una lnea 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 defini un lote completo de
funciones internas, y entonces les asoci o lig ciertas teclas_a_las_ms comnmente usadas. A veces
es ms fcil llamar a una funcin explcitamente_con_|_M-x__|que recordar a qu tecla est liga*
 *da.

La funcin query-replace, por ejemplo, est ligada a ||M-%__ ||en algunas versiones de Emacs. Pero
>quin puede recordar tan rara combinacin?_A_menos que use query-replace muy frecuentemente,
es ms fcil simplemente llamarla con |_M-x__|.

    La mayora de las teclas que pulsa son letras, cuya funcin es ser insertadas en el texto del
buffer.  Cada una de esas teclas est ligada a la funcin self-insert-command,_que_no hace nada
ms que insertar la letra en el buffer.  Las combinaciones que usan la tecla |_Control_ |con una letra
generalmente_estn ligadas a funciones que hacen otras cosas, como mover el cursor.  Por ejemplo,

|_C-v_|est ligada a una funcin llamada scroll-up  (avanzar  pgina), que mueve el buffer una
_______________________________________________________________________________________________________________8.9.   P*
 *idiendo ayuda a Emacs   @


pantalla hacia arriba (lo que quiere decir que su posicin en el buffer se mueve hacia abajo, por
supuesto).

    Si alguna vez quisiera realmente insertar un carcter de Control en el buffer, entonces, >cmo lo
hara? Despus de todo, los caracteres de Control son caracteres ASCII, aunque rara vez usados, y
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
llamada quoted-insert (insertar lo citado).  Todo lo que quoted-insert hace es leer la prxima
tecla e insertarla literalmente en el buffer, sin tratar de interpretarla como un comando. As es cmo
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
escribe un mensaje largo, y no quiere tener que presionar |_Intro_|al final de cada lnea. 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
ninguna tecla por defecto.  A fin de invocar este comando, debe escribir "M-x  auto-fill-mode".
"M-x" es la tecla usada para llamar a funciones por el nombre. Podra usarlo para llamar a funciones
como_next-line_y_previous-line,_pero eso sera muy ineficaz, ya que esas funciones estn ligadas
a |_C-n_ |y ||C-p_.||

    A propsito,  si mira su lnea de modo despus de invocar auto-fill-  mode,  notar que la
palabra  "Fill"  se  ha  agregado  al  lado  derecho.   Mientras  est  all,  Emacs  llenar  (rellenar****
 *'a)  el
texto automticamente.  Puede desactivarlo escribiendo "M-x  auto-fill-mode" nuevamente _es
un comando de palanca.

    La incomodidad de escribir largos nombres de funcin en el minibuffer disminuye porque Emacs
hace terminacin automtica en los nombres de funciones de la misma manera que lo hace en los
nombres de archivo.  Por lo tanto, rara vez debera encontrarse escribiendo el nombre entero de la
funcin letra a letra._Si no est totalmente seguro de si puede o no usar la terminacin automtica,
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.



8.9       Pidiendo  ayuda  a  Emacs



Emacs tiene extensas facilidades de ayuda _tan extensas de hecho, que slo podemos_comentarlas_
un poco aqu.  A las_facilidades_de ayuda ms bsicas se accede tecleando |_C-h_ |y luego una nica

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

an, |_C-h_C-h_C-h___|le da ayuda sobre la ayuda, para decirle que est disponible una vez que ha

tecleado |_C-h_ |por primera vez. Si sabe el nombre de una funcin de Emacs (save-buffer (grabar
el buffer),_por_ejemplo), pero no puede recordar cul es la combinacin de teclas a la que est ligada,
use |_C-h_w__|, para "where-is" (dnde est), y escriba el nombre de la funcin. O, si quiere conocer
______________________________________________                                      _________
   6Llamamos a   C-q una "tecla", aunque se produce manteniendo presionada la tecla   Controly presionando "q",
porque es un **|____*|'unico carcter ASCII.                                    |________ |
_______________________________________________________________________________________________________________80      *
 *                                 @

                                              ________
qu hace una funcin con detalle, use |_C-h_f_|, que preguntar por un nombre de funcin.

    Recuerde, que como Emacs hace terminacin automtica del nombre de la funcin, realmente no
tiene que estar seguro de cmo se llama para pedir ayuda sobre ella._Si_piensa que puedes adivinar
la palabra con la que podra comenzar, teclee sa y presione |_Tab_ |para ver si se completa.  Si no,
vuelva atrs e intente otra cosa. Lo mismo ocurre con los nombres de archivo: an cuando no pueda
recordar del todo como nombr cierto archivo al que no ha accedido en tres meses, puede probar y
usar la terminacin automtica para averiguar si est en lo cierto.  Usa la terminacin automtica
como una forma de preguntar, y no slo como una manera de teclear menos.
                                                         ______
    Hay otros caracteres que puede pulsar despus de |_C-h_,|y_con_cada_uno_consigue_ayuda_de_una

manera diferente.  Los que usar ms frecuentemente son_|_C-h_k_,||_C-h_w__|,_y |_C-h_f_|.  Una vez que

est ms familiarizado con Emacs, otra para probar es |_C-h_a_,|que le pregunta por una cadena y
le comenta todas las funciones que tienen esa cadena como parte de su nombre (la "a" sera para
"apropos" [a propsito], o "about"[acerca]).

    Otra fuente de informacin es el lector de documentacin Info. Info es_demasiado_complejo para
tratarlo aqu, pero si est interesado en explorarlo por si mismo, teclee |_C-h_i_|y lea el prrafo en la
parte superior de la pantalla. Le dir cmo conseguir ms ayuda.



8.10        Especializando  buffers:  Modos



Los buffers de Emacs tienen modos asociados7. La razn para esto, es que sus necesidades cuando
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 sera imposible),  el diseador de Emacs8  eligi hacer que Emacs se comporte de
manera diferente dependiendo de qu hace Ud.  en cada buffer individual.  As, los buffers tienen
modos, cada uno diseado para alguna actividad especfica. Los aspectos principales que distinguen
un modo de otros son las combinaciones de teclas, pero tambin pueden existir otras diferencias.

    El modo ms bsico es el modo Fundamental, que realmente no tiene ningn comando especial.
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.

                                                    ________
    Obtuve  as  esa  informacin:  Teclee  |_C-x_b_,| que  es  switch-to-buffer  (cambiar  al  buffer),
e  introduje  "foo"  cuando  se  me  pregunt  por  un  nombre  de  buffer  al  que  cambiar.   Como  no
haba  anteriormente  ningn  buffer  llamado  "foo",  Emacs  cre  uno  y  me  cambio  a  l.   Esta-
ba  en  el  modo  fundamental  por  defecto,  pero  si  no  lo  hubiese  estado,  podra  haber  tecleado
"M-x__fundamental-mode"_______"_para_que_estuviese._ Todos los nombres de modo tienen un comando
   7para colmo de males, hay "Modos Mayores" y "Modos Menores", pero en este momento no necesita conocer nada
acerca de esto.
   8Richard Stallman, a veces tambin conocido como "rms ", porque es su login.
_______________________________________________________________________________________________________________8.11.   *
 *Modos de programaci@


llamado <nombre-de-modo>-mode que pone el buffer_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
buffer en que est.

    Hay un modo_ligeramente_ms til llamado_text-mode_ (modo  texto, que tiene los_comandos_
especiales |_M-S__|, para centrar  prrafo, y |_M-s_,|que_invoca_centrar  lnea._|_M-S__|, a propsito,

significa 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 buffer, pngalo en modo  texto, y teclee

|_C-h_m__|. Puede que no entienda todo lo que Emacs le diga cuando lo haga, pero debera ser capaz
de conseguir sacar alguna informacin til de ello.

    Esto es una introduccin_a_algunos de los modos ms comnmente usados. Si los usa, asegrese
de que teclea en cada uno |_C-h_m__|alguna vez, para averiguar ms sobre cada modo.



8.11        Modos  de  programacin



8.11.1       Modo C


Si usa Emacs para programar en el lenguaje C, puede conseguir que l le haga toda la indentacin
automticamente.  Los archivos cuyos nombres terminan en .c o .h se abrirn automticamente en
el modo c. Esto significa que ciertos comandos_especiales_de edicin, tiles para escribir programas
en C, estn disponibles. En el modo C, |_Tab__|est ligado a c-indent-command (indentar comandos

c). Esto significa que_presionando_la tecla |_Tab_ |no inserta realmente un carcter de Tabulacin. En

cambio, si presiona |_Tab_ |en cualquier parte de una lnea, Emacs automticamente indenta esta lnea
correctamente para su ubicacin en el programa. Esto implica que Emacs sabe algo sobre la sintaxis
de C, (aunque nada sobre semntica _<no puede asegurar que su programa no tenga errores!).

    Para hacer esto, asuma que las lneas anteriores estn indentadas correctamente.  Esto significa
que si en la lnea anterior falta un parntesis, un punto y coma, llaves, o cualquier otra cosa, Emacs
indentar la lnea actual de una manera peculiar inesperada. Cuando vea que hace esto, sabr que
debe buscar un error de puntuacin en la lnea anterior.

    Puede usar esta caracterstica para verificar que ha puntuado correctamente sus programas _
en vez de leer el programa entero_buscado_problemas, simplemente comience a indentar las lneas
desde arriba hasta abajo con |_Tab_,|y cuando alguna se indenta de forma rara, verifique las lneas
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
para el lenguaje de programacin Scheme en su sistema. Tener uno no es tan normal como, digamos,
un compilador de C, pero se est haciendo cada vez ms comn, as que lo trataremos tambin.
Mucho de lo que es cierto para el modo Scheme es tambin cierto para el modo Lisp, si prefiere
escribir en Lisp .
_______________________________________________________________________________________________________________82      *
 *                                 @


    Bien, para complicar las cosas, Emacs viene con dos modos Scheme diferentes, porque la gente no
poda decidir cmo queran que funcionara. El que estoy describiendo se llama cmuscheme, y luego,
en la seccin personalizando a Emacs, hablar de cmo puede haber dos modos Scheme diferentes
y qu hacer acerca de ello.  Por ahora, no se preocupe si las cosas en su Emacs no coinciden con
las que yo digo aqu. Un editor personalizable significa 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 buffer llamado "*scheme*", que tiene_el_prompt habitual de Scheme.  Puede teclear expre-
siones de Scheme en el prompt, presionar |_Intro_|, y Scheme las evaluar y mostrar la respuesta. As,
a fin de interactuar con el proceso de Scheme, podr simplemente escribir todas sus aplicaciones y
definiciones de funcin en el prompt. Es posible que haya escrito previamente cdigo fuente Scheme
en un algn archivo, y sera ms fcil hacer su trabajo en el archivo y enviar las definiciones al buff*
 *er
de proceso Scheme segn sea necesario.

    Si el archivo fuente_termina_en_.ss o .scm, automticamente se abrir en el modo  Scheme
cuando lo encuentre con |_C-x_C-f_.|Si por alguna razn, no surge en el modo Scheme, puede hacerlo
a mano con M-x  scheme-mode. Este modo  scheme no es lo mismo que el buffer que ejecuta el proceso
Scheme; ms bien, el que el buffer de cdigo fuente est en modo  scheme significa que tiene comandos
especiales para comunicar con el buffer de proceso.

____Si_est_dentro de la definicin de una funcin en el buffer de cdigo fuente Scheme y teclea

|_C-c_C-e_ |,  entonces esa definicin_ser "enviada" al buffer de proceso _exactamente como si lo
hubiera tecleado Ud. mismo. |_C-c_M-e__|enva_la definicin y entonces le lleva al buffer de proceso para

hacer algo de trabajo interactivo. |_C-c_C-l_|carga un archivo de cdigo Scheme (ste funciona desde
el buffer de proceso_o el buffer de cdigo fuente). Y como otros modos de lenguajes de programacin,
al presionar |_Tab_ |en cualquier lugar de una lnea de cdigo se indentar correctamente esa lnea.
                                                               _______    _______
    Si est en el prompt del buffer de proceso, puede usar ||M-p__||y |_M-n__|para moverse entre sus
comandos anteriores (tambin conocido como la historia de entrada). As que si est depurando
la funcin `rotar', y ya lo ha aplicado a los argumentos en el buffer de proceso, como:


       >(rotar '(a b c d e))

                                                            _______
    entonces puede recuperar ese comando anterior tecleando ||M-p__||en el prompt. Aqu no debera
ser necesario volver a escribir expresiones largas en el prompt de Scheme _habitese a usar la
historia de entrada y ahorrar mucho tiempo.

    Emacs conoce bastantes lenguajes de programacin: C, C++, Lisp, y Scheme son simplemente
algunos. Generalmente, sabe cmo indentarlos de forma intuitiva.



8.11.3       Modo de correo

                                                                                              _________
Tambin puede editar y enviar correo en Emacs. Para entrar en un buffer de_correo,_teclee |_C-x_m__|.

Necesita llenar los campos To:   (A:) y Subjet:   (Asunto:), y entonces use |_C-n_ |para ir, por
debajo de la lnea de separacin, al cuerpo del mensaje (que est vaco cuando comienza por primera
vez). No cambie o borre la lnea de separacin, o sino Emacs no ser capaz de enviar su correo _use
_______________________________________________________________________________________________________________8.12.   *
 *Como ser ms eficien@


esa lnea para distinguir el encabezamiento del correo, que le dice dnde enviar el correo, de los
contenidos del mensaje.

    Puede escribir lo que quiera_por_debajo_de la lnea de separacin. Cuando est listo para enviar el
mensaje, simplemente teclee |_C-c_C-c_,|y Emacs lo enviar y har que el buffer de correo desaparezca.



8.12        Como  ser  ms  eficiente  an



Los usuarios experimentados de Emacs son fanticos de la eficiencia.  <De hecho, frecuentemente
acaban derrochando mucho tiempo buscando formas para ser ms eficientes!.  No quiero que le
suceda esto, aunque hay algunas cosas fciles con las que puede llegar a ser un mejor usuario de
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
Emacs. All vamos:
                                                                                                    ______
    Cuando se mueve de un lado a otro, usa los medios ms rpidos_disponibles. Ud. sabe que |_C-f_|

es forward-char (un_carcter_hacia adelante) _>supona que |_M-f_ |es forward-word (una palabra___

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 final_(de_otra manera Emacs no
puede distinguir donde termina una frase y comienza la siguiente).  |_M-a__|es backward-sentence
(una frase atrs).
                                ______
____Si_ve que usa repetidamente_|_C-f_|para llegar al final de la lnea, averg"uncese,_y asegrese de usar

|_C-e_|en su lugar, y |_C-a_|para ir al_principio_de la lnea. Si usa muchos_|_C-n_ |para bajar pantallas de
texto, averg"uncese mucho, y usa |_C-v_|siempre._Si usa repetidamente ||C-p_ ||para avanzar pantallas,

no se atreva a ensear la cara, y use |_M-v__|en su lugar.

    Si se est acercando al final de una lnea y se da cuenta de que hay una palabra_mal_tecleada____
o de que se ha olvidado alguna en algn lugar anterior de la lnea, no use la |_Retroceso__|o ||Supr_ ||
para volver a ese punto. Eso requerira_volver_a_escribir_porciones enteras de texto perfecto. En vez
de eso, use combinaciones de |_M-b__|,_|_C-b_,|y |_C-f_|para moverse a la ubicacin precisa del error,

arrglelo, y entonces use |_C-e_|para moverse al fin de la lnea nuevamente.

    Cuando tiene que escribir un nombre de archivo, nunca teclee el nombre completo.  Solamente
escriba_lo_suficiente_para identificarlo 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?

    Si escribe_algn_tipo de texto simple, y de algn modo su auto-llenando (auto-filling)lo ha fastidi-
ado, use ||M-q__||, que es rellenado  de  prrafo en los modos de texto comunes. Esto "ajustar" el
prrafo_en_el que est, como si hubiese sido llenado lnea a lnea, pero sin tener que liarse haci*
 *ndolo
a mano. ||M-q__||trabajar desde dentro del prrafo, o desde su comienzo o final.
                             ________
    A veces es til usar |_C-x_u_,|(undo (deshacer)), que tratar de "deshacer" el (los) ltimo(s)
cambio(s) que hizo.  Emacs decidir cuanto deshacer; habitualmente decide muy inteligentemente.
Llamndolo repetidamente deshar ms y ms, hasta que Emacs no pueda recordar qu cambios se
_______________________________________________________________________________________________________________84      *
 *                                 @


hicieron.



8.13        Personalizando  Emacs



<Emacs es tan grande, y tan complejo, que de hecho tiene <su propio lenguaje de programacin!. No
bromeo:  para personalizar Emacs ajustndolo a sus necesidades, tiene que escribir programas en
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
definitivamente se aprende mejor practicando. Para aprender realmente a programar Emacs, deber
consultar las pginas de informacin de Emacs Lisp, y leer mucho cdigo fuente de Emacs Lisp.

    La mayor parte de la funcionalidad de Emacs est definida en archivos de cdigo de Emacs
Lisp9. La mayora de estos archivos se distribuyen con Emacs y colectivamente son conocidos como
la "Biblioteca de Emacs Lisp". La ubicacin de esta biblioteca depende de cmo se instal Emacs en
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 podra ser diferente en su sistema.

    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
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
de Lisp en Emacs, llamado modo lisp interactivo (lisp-interaction-mode). Comnmente, hay un
buffer llamado "*scratch*" que est ya en este modo.  Si no lo puede encontrar, cree un nuevo
buffer con cualquier nombre, y escriba M-x  lisp-interaction-mode dentro de l.

    Ahora tiene un espacio de trabajo para interactuar con el intrprete Lisp de Emacs. Teclee esto:


       load-path

                        _____                                              _____
    y entonces presione ||C-j_||al finalizar. En el modo Lisp interactivo, ||C-j_||est ligado a eval-print-last-se*
 *xp
(evaluar-imprimir-ltima-sexp).  Una "sexp" es una "s-expresion", lo que significa un grupo bal-
anceado de parntesis, includo el caso de que no haya ninguno.  Bueno, esto es simplificarlo un
poco,  pero ir entendiendo que son segn programe con Emacs Lisp.   De cualquier manera,  al
evaluar load-path debera conseguir algo como esto:

                 _____
       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
se instal Emacs. El ejemplo de arriba viene de mi PC 386 que funciona con Linux. Como indica lo
anterior, load-path es una lista de cadenas. Cada cadena nombra un directorio que podra contener
archivos de Emacs Lisp.  Cuando Emacs necesita cargar un archivo de cdigo Lisp, va buscndolo
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 oficialmente "Elisp".
_______________________________________________________________________________________________________________8.13.   *
 *Personalizando Emacs    @


    Cuando Emacs arranca, automticamente trata de cargar el archivo .emacs desde su directorio
de usuario.  Por lo tanto, si quiere hacer personalizaciones en Emacs, deber ponerlas en .emacs.
La personalizacin ms comn son las teclas ligadas, as que aqu est cmo hacerlo:


       (global-set-key ""C-cl"'goto-line)


    global-set-key (fijar teclas globalmente) es una funcin de dos argumentos: la tecla a la que ha
de ser ligada, y la funcin a la que ligarla. La palabra "global" significa que esta tecla ligada tendr
efecto en todos los modos mayores (hay otra funcin, local-set-key_(fijar teclas localmente), que
liga una tecla en un nico buffer). Arriba, he ligado |_C-c_l_|a la funcin goto-line (ir a tal lnea).
La tecla se describe_usando_una cadena.  La sintaxis especial ""C-<carcter>" significa mantener
pulsada_la_tecla_|_Control_ |mientras se presiona <carcter>. As mismo, ""M-<carcter>" indica la

tecla |_Meta__|.

    Todo eso est muy_bien,_>pero cmo supe que el nombre de la funcin era "goto-line"?. Puedo
saber que quiero ligar |_C-c_l_|a alguna funcin que pregunta por un nmero de lnea y mueve el
cursor a esa lnea, pero >cmo hice para averiguar el nombre de esa funcin?

    Aqu es donde intervienen las facilidades de ayuda de Emacs. Una vez que ha decidido qu tipo
de funcin busca, puede usar Emacs para rastrear su nombre exacto. He aqu una manera rpida_y
sucia para hacerlo: puesto que Emacs completa los nombres de funcin, simplemente escriba_|_C-h_f_|

(que es describe-function (describir funcin), recurdelo), y entonces presione |_Tab_ |sin escribir
nada ms.  Esto pide a Emacs que complete la cadena vaca _en otras palabras, <la terminacin
automtica se corresponder con cada una de las funciones!. Puede tardar un momento en construir
la lista de funciones, ya que Emacs tiene muchas funciones internas, pero mostrar todo lo que entre
en la pantalla cuando est listo.
                             ______
    En este momento presione ||C-g_p||ara abandonar la funcin describir  funcin. Habr un buffer
llamado "*Completions*", que contiene la_lista_de terminaciones automticas que acaba de generar.
Cambie a este buffer.  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 lnea y entonces
va a esa lnea contendr la cadena "line (lnea)" en su nombre. Por lo tanto, simplemente comience
buscando la cadena "line" , y acabar encontrando lo que busca.
                                          ________
    Si quiere otro mtodo, puede usar |_C-h_a_,|command-apropos, para mostrar todas las funciones
cuyos nombres se ajustan a la cadena dada. La salida de command-apropos es un poco ms difcil de
clasificar, que simplemente buscar una lista de terminacin automtica, en mi opinin, pero puede
encontrar que tiene distintas sensaciones. Prueber ambos mtodos y a ver que opina.

    Siempre existe la posibilidad de que Emacs no tenga ninguna funcin predefinida para hacer lo
que est buscando. En esta situacin, tiene que escribir la funcin Ud. mismo. No voy a hablar de
cmo hacer eso _debera buscar en la biblioteca de Emacs Lisp ejemplos de definiciones de funcin,
y leer las paginas Info sobre Emacs Lisp. Si resulta que conoce a un gur local de Emacs, pregntele
cmo hacerlo. Definir sus propias funciones de Emacs no es un gran asunto _para darle una idea,
yo he escrito 131 de ellas durante ms o menos el ltimo ao. Requiere un poco de prctica, pero la
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      *
 *                                 @


       (setq inhibit-startup-message t)


    Emacs verifica 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 garanta cuando arranca.  La
expresin de Lisp de arriba usa el comando setq para asignar a esa variable el valor `t', que es un
valor especial de Lisp que significa 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
podra encontrar tiles:


       (setq case-fold-search nil);causa la insensibilidad a maysculas y minsculas para
       la bsqueda
       ; ;; 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
y minsculas;  esto es,  la bsqueda encontrar versiones de un mismo carcter sea mayscula o
minscula aunque la cadena de bsqueda contenga nicamente la versin en minscula. La segunda
expresin establece que la indentacin por defecto para las sentencias en lenguaje C sea un poco
menor de lo normal_esto es solamente una preferencia personal; encuentro que esto hace el cdigo
C ms legible.

    El carcter de comentario en Lisp es ";". Emacs ignora cualquier cosa que siga a uno de stos,
a menos que aparezca dentro de una cadena literal, como esta:


       ;;estas dos lneas son ignoradas por el intrprete de Lisp, pero la
       ; ;; s-expression que le sigue se evaluar totalmente:
       (setq alguna-cadena-literal "Una pausa torpe; sin ningn propsito.")


    Es una buena idea comentar sus cambios en los archivos Lisp, porque seis meses despus no se
acordar en qu estaba pensando cuando los modific.  Si el comentario aparece slo en una lnea,
precdalo con dos punto y coma. Esto ayuda a Emacs a indentar los archivos Lisp correctamente.

    Puede encontrar informacin_sobre las variables internas de Emacs de las mismas formas que con
las funciones._ Use |_C-h_v_,|describe-variable_para_hacer_una lista de terminacin automtica, o

use |_C-h_C-a__|, apropos.  Apropos difiere 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
embargo, para hacer que el cdigo Lisp se ejecute ms rpido, Emacs permite que sea byte-compiled
(compilado a un formato interno), y estos archivos de cdigo Lisp compilado terminan en .elc en
vez de .el. La excepcin a esto es su archivo .emacs, que no necesita la extensin .el porque Emacs
sabe buscarlo para arrancar.

    Para cargar un archivo de cdigo Lisp interactivamente, use el comando M-x  load-file (cargar
archivo). Le preguntar por el nombre del archivo. Para cargar archivos Lisp desde dentro de otros
archivos Lisp, haga esto:


       (load "c-mode");fuerza a Emacs a cargar el contenido de c-mode.el o .elc
_______________________________________________________________________________________________________________8.13.   *
 *Personalizando Emacs    @


    Emacs aadir la extensin .elc al nombre del archivo e intentar encontrarlo en algn lugar del
load-path. Si falla, lo intenta con la extensin .el; si falla esto, usa la cadena literal tal y como es
pasada a load. Puede compilar (byte-compile) un archivo con el comando M-x  byte-compile-file,
pero si modifica el archivo a menudo, probablemente no merezca la pena.  Sin embargo no debera
compilar de esa manera su .emacs, ni siquiera darle la extensin .el.

    Despus de que .emacs se ha cargado, Emacs busca un archivo llamado default.el para cargarlo.
Comnmente se ubica en un directorio en la trayectoria de carga (load-path) llamado site-lisp o
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
todos,  puesto que todos los Emacs lo cargan despus de los .emacs personales.  default.el no
debera ser compilado, ya que tiende a ser modificado frecuentemente.

    Si el .emacs de una persona contiene algn error, Emacs no intentar cargar default.el, sino
que simplemente se detendr, destellando un mensaje diciendo "Error  in  init  file." (Error en
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
veces ofrece mltiples paquetes para hacer lo mismo de diferentes formas.  Esto significa que tiene
que especificar cul quiere usar (o tendr el paquete por defecto, que no es siempre el mejor para
todos los propsitos). Un rea donde esto sucede es en las caractersticas de interaccin del Scheme
de Emacs. Hay dos interfaces diferentes de Scheme distribuidos con Emacs (al menos en la versin
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,
pero el que Emacs usar por defecto es xscheme. >Cmo puedo hacer que Emacs acte de acuerdo
con mi preferencia?. Puse esto en mi .emacs:


       ;; note cmo la expresin puede quebrarse en dos lneas.   Lisp
       ;; ignora los espacios en blanco, generalmente:
       (autoload 'run-scheme "cmuscheme"
       "Corre un Scheme inferior, de la forma que me gusta."t)


    La funcin autoload (auto carga) toma el nombre de una funcin (citada con "'", por razones
que tienen que ver con cmo funciona Lisp) y le dice a Emacs que esta funcin est definida en un
determinado archivo.  El archivo es el segundo argumento, una cadena (sin la extensin .el o .elc)
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 (describir-
_______________________________________________________________________________________________________________88      *
 *                                 @


funcin), consigue alguna informacin til.  El cuarto_argumento_le dice a Emacs que esta funcin
autocargable puede ser llamada interactivamente (esto es, usando |_M-x__|). Esto es muy importante
en este caso, porque uno debera poder teclear M-x  run-scheme para comenzar un proceso de scheme
que se ejecuta bajo Emacs.

    Ahora que run-scheme ha sido definido como una funcin autocargable, >qu sucede cuando
tecleo M-x  run-scheme?.   Emacs mira la funcin run-scheme,  ve que est establecida para ser
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 definir la funcin
run-scheme, o habr un error de autocarga.  Por suerte, define run-scheme, as que todo va sin
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 especificada en el archivo en el que le dice que mire.  A cambio, consigue algn control
sobre lo que se carga. Tambin, la autocarga ayuda a reducir el tamao de Emacs en la memoria, al
no cargar ciertas caractersticas hasta que se pidan. Muchos comandos no estn definidos realmente
como funciones cuando Emacs se inicia. Ms bien, estn simplemente preparados para autocargarse
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 tomara veinte minutos simplemente para arrancar, y una vez hecho, podra ocupar la mayor
parte de la memoria disponible en su mquina. No se preocupe, no tiene que establecer todas estas
autocargas en su .emacs; ya se tomaron en cuenta cuando Emacs se desarroll.



8.14        Averiguando  ms



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 suficiente para proseguir, todava hay
montones de comodidades y trucos que ahorran tiempo que debera averiguar.  La mejor forma de
hacerlo es esperar hasta que vea que necesita algo, y buscar entonces una funcin que lo haga.

    La importancia de estar cmodo con las facilidades de ayuda en lnea de Emacs no puede enfati-
zarse lo suficiente. Por ejemplo, suponga que quiere poder insertar los contenidos de algn archivo
en un buffer que ya est trabajando sobre un archivo diferente, para que el buffer contenga a am-
bos. Si intuyese que hay un comando llamado insert-file (insertar archivo), tendra razn. Para
verificar su acertada suposicin, teclee C-h f.  En el prompt del minibuffer, introduzca el nombre
de una funcin sobre la que quiera ayuda. Puesto que sabe que hay terminacin automtica en los
nombres de funciones,_y_puede suponer que el comando que busca comienza con "insert", escriba
insert y presiona |_Tab_.|Esto le muestra todos los nombres de funcin que comienzan con "insert",
e "insert-file' es uno de ellos.

    De este modo completa el nombre de funcin y lee sobre como trabaja,  y entonces usa M-x
insert-file._Si se est preguntando si tambin est ligado a una tecla, escribe C-h  w  insert-file

|_Intro_|, y averg"uelo. Cuanto ms sepa de las facilidades de ayuda de Emacs, ms fcilmente podr
_____________________________________________10
    A propsito, cmuscheme era la interfaz de la que hablaba antes, en la seccin sobre el trabajo con Scheme, *
 *as que
si quiere usar algo de este manual, necesita asegurarse de que ejecuta cmuscheme.
_______________________________________________________________________________________________________________8.14.   *
 *Averiguando ms     @


hacer preguntas a Emacs acerca de s mismo.  La capacidad de hacerlo, combinada con un espritu
de exploracin y un deseo de aprender nuevas formas de hacer las cosas, puede acabar por ahorrarle
mucho tecleado.

    Para pedir una copia del manual de usuario de Emacs (Emacs user's manual) y/o el manual de
Programacin en Emacs Lisp (Emacs Lisp Programming manual), debe escribir a:



       Free Software Foundation
       675 Mass Ave
       Cambridge, MA 02139
       USA



    Ambos manuales se distribuyen electrnicamente con Emacs, en una forma legible usando el
lector de documentacin Info (C-h  i), pero puede encontrar ms fcil tratar con freeware que con
las versiones en lnea.  Adems, sus precios son bastantes razonables, y el dinero va a una buena
causa_<software gratuito de calidad!.  En algn momento, debera teclear C-h C-c para leer las
condiciones de copyright de Emacs.  Es ms interesante de lo que puede pensar, y le ayudar a
aclarar el concepto de software libre.  Si cree que el termino "free software" simplemente significa
que el programa no cuesta nada, por favor <lea el copyright en cuanto tenga tiempo!.
_______________________________________________________________________________________________________________90      *
 *                                 @






Captulo  9



<Tengo   que   ser   yo   mismo!



       Si Dios hubiera sabido que necesitaramos previsin, nos la habra dado.



9.1       Personalizacin  del  bash



Una de las cosas que distinguen la filosofa de Unix es que los diseadores de sistemas no intentaron
predecir cada necesidad que los usuarios podran tener; en lugar de eso, intentaron hacer fcil para
cada usuario individual la configuracin del entorno a sus necesidades particulares. Esto se consigue
principalmente a travs de ficheros de configuracin. Tambin son conocidos como "ficheros de
inicio" , "ficheros rc" (por "run control", control de arranque), o incluso "ficheros punto (dot files)",
porque los nombres de los ficheros siempre empiezan con ".".  Recordemos que los ficheros que
empiezan por "." no se visualizan normalmente con ls.

    Los ficheros de configuracin ms importantes son los usados por el shell.  El shell por defecto
de Linux es el bash, y ste es el shell que cubre este captulo.  Antes de empezar a explicar cmo
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 debera ser el primer
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
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 ficheros de procesamiento por lotes del MS-DOS _los archivos que


                                                       91
_______________________________________________________________________________________________________________92      *
 *                                 @


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
fciles de escribir. Dependiendo del tipo de shell, se usarn distintos tipos de archivo al arrancarlo:

                   __________________________________________________________________________
                   |_____Tipo_de_Shell_____|____________________Accin___________________  |

                   |__Ingreso_interactivo__|_Se_lee_y_ejecuta_el_archivo_.bash_profile.__|___

                   |__Interactivo__________|_Se_lee_y_ejecuta_el_archivo_.bashrc.________|___

                   |__No_interactivo_______|_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 configuracin
poniendo un comando muy simple en nuestro archivo .bash_profile:  "source  ~/.bashrc"  .  El
comando source ordena al shell que interprete el argumento como una macro de shell.  Lo que
significa 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
ejecute un comando nicamente cuando hemos hecho un ingreso registrado, lo aadiremos a nuestro
.bash_profile.



9.1.3      Creando alias


>Cuales son algunas de las cosas que interesara personalizar?  Esto es algo que creo que el 90% de
los usuarios de Bash han puesto en su .bashrc:


       alias ll="ls -l"


    Este comando define 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 ledo este comando
del fichero .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
sistema, pero el shell automticamente traduce el alias a un programa vlido.

    Hay algunos alias de ejemplo en la figura 9.1.3.  Puede ponerlos en su propio .bashrc.  Uno
especialmente interesante es el primero. Con l, cada vez que alguien teclea "ls" , automaticamente
tiene una opcin "-F"   aadida.  (El alias no intenta expandirse a s mismo otra vez).  Este es un
modo muy comn de aadir opciones que se usan constantemente al llamar a un programa.

    Ntese los comentarios con el caracter "#"  en la figura 9.1.3.  Cada vez que aparece un "#" , el
shell ignora el resto de la lnea.

    Quiz haya notado unas cuantas cosas sueltas sobre los ejemplos.  Primero, me he dejado las
comillas en algunos de los alias_como pu.  Estrictamente hablando, las comillas no son necesarias
cuando slo se tiene una palabra a la derecha del signo igual.
_______________________________________________________________________________________________________________9.1.   P*
 *ersonalizacin del b@

_______________________________________________________________________________________________________________
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
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 ltimo alias tiene algn entrecomillado gracioso:


       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
que anteponerles una contrabarra para que bash no crea que ya ha llegado al final del alias.

    Finalmente, he creado dos alias de dos errores de escritura comunes, "mroe" y "moer", apuntando
al comando que pretenda escribir, more.  Los alias no interfieren con el paso de argumentos a un
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
que teclea frecuentemente, y cree alias para ellos.  De esta manera, le resultar ms confortable
trabajar con el prompt del shell.



9.1.4      Variables de entorno


Otra cosa que uno hace frecuentemente en .bashrc es definir variables de entorno.  Y >qu son
las variables de entorno?  Vamos a mirarlo desde otra direccin:  Supongamos que est leyendo la
_______________________________________________________________________________________________________________94      *
 *                                 @


documentacin del programa fruggle, y se encuentra con una de estas expresiones:



       Fruggle normalmente busca su fichero de configuracin, .frugglerc, en el directorio raz
       del usuario.  Sin embargo si la variable de entorno FRUGGLEPATH indica un nombre de
       archivo diferente, mirar ah en su lugar.



    Cada programa se ejecuta en un entorno, y ese entorno es definido por el shell que llam al
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 definida, sencillamente usar el
archivo .frugglerc del directorio raz. Si est definida, usar el valor de esa variable (que debe ser
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 significado:  "Por favor exporta esta variable
fuera del entorno donde estar llamando programas, de modo que su valor sea visible para ellos."
Realmente hay razones para llamarlo export, como se ver despus.

    Esta variable en particular es usada por el infame programa de encriptacin mediante clave
pblica de Phil Zimmerman, pgp. Por defecto, pgp usa el directorio raz como lugar para encontrar
determinados archivos que necesita (que contienen claves de encriptacin), y tambin un lugar para
guardar archivos temporales que crea mientras est en marcha.  Al darle este valor a la variable
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 sufijo "PATH".

    Tambin es til saber como preguntar al entorno:


       /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
la variable.  Si lo hubiera escrito sin el signo de dlar, echo simplemente habra mostrado su(s)
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_sea,_cuando_el_shell_est_interpretando._ >Cuando est el shell interpretando?  Bueno, cuando se
   1Ahora se puede comprobar porqu los shells son tan importantes. <No hay que andar pasando un entorno completo
a mano cada vez que se llame a un programa!
_______________________________________________________________________________________________________________9.1.   P*
 *ersonalizacin del b@

_______________________________________________________________________________________________________________
Figura_9.2_Algunas_variables_de_entorno_importantes.____________________________________________________________

 |__Nombre__|______________Contenido______________|__________________________Ejemplo_________________________|_

 |__HOME_____|_Directorio_principal_del_usuario___|___/home/larry_________________________________________|____

 |__TERM_____|_Tipo_de_terminal_del_usuario______|____xterm,_vt100,_o_console_____________________________|____

 |__SHELL____|_Path_del_shell_del_usuario__________|__/bin/bash____________________________________________|___

 |__USER_____|_Nombre_de_ingreso_________________|____larry__________________________________________________|_

 |__PATH_____|_Lista_de_bsqueda_de_programas__|__/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,
se puede decir que est "interpretando" los comandos.

    Hay otro comando muy til para preguntar al entorno: env". env ensear un listado de todas
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"  .

    Unas  cuantas  de  estas  variables  pueden  ser  muy  tiles,  as  que  las  comentaremos.   Mire  la
Figura 9.1.4. Estas cuatro variables estn definidas automticamente cuando se ingresa en el sistema:
no se definen en .bashrc o .bash_login.

    Vamos a echar un vistazo ms de cerca a la variable TERM. Para comprenderla, vamos a mirar
hacia atrs en la historia del Unix:  El sistema operativo necesita conocer ciertos datos sobre su
consola para poder realizar funciones bsicas, como escribir un carcter en la pantalla, mover el
cursor a la lnea siguiente, etc.  En los primeros das de los ordenadores, los fabricantes estaban
continuamente aadiendo nuevas caractersticas a sus terminales:  primero el vdeo inverso, luego
quizs juegos de carcteres europeos, eventualmente incluso primitivas funciones de dibujo (hay que
recordar que stos eran los tiempos anteriores a los sistemas de ventanas y el ratn).  Pero todas
estas funciones representaban un problema para los programadores: >Cmo iban a saber lo que un
terminal poda soportar y lo que no?  Y >como podan emplear nuevas caractersticas 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
terminal en /etc/termcap en lugar de recompilar todo el Unix. A veces es incluso ms simple. Al
pasar el tiempo, el vt100 de Digital Equipment Corporation se convirti en un pseudo-estndar, y
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 caractersticas
aadidas.

    Otra variable, PATH, es tambien crucial para el funcionamiento correcto del shell.  Aqu est la
ma:


       /home/larry$ env _ grep ^PATH
       PATH=/home/larry/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/TeX/bin
       /home/larry$
_______________________________________________________________________________________________________________96      *
 *                                 @


    El PATH es una lista, separada por el carcter dos puntos ":", de los directorios_donde el shell
buscar el nombre del programa a ejecutar.  Cuando yo tecleo "ls"   y pulso |_Intro_|, por ejemplo,
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
no lo encuentra en /home/larry/bin, Bash mira despus en /bin_<y ah hay una coincidencia!
/bin/ls existe y es ejecutable, de modo que Bash deja de buscar un programa llamado ls y lo
arranca.  Podra haber habido perfectamente otro ls esperando en el directorio /usr/bin, pero
bash nunca lo ejecutar si no lo pido especificando una ruta de directorios explcita:


       /home/larry$ /usr/bin/ls


    La variable PATH existe para no tener que teclear rutas de directorio completas para cada co-
mando. 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:


       /home/larry$ clubly
       clubly: command not found


    Notar que en mi PATH no existe el directorio actual, ".". Si estuviera, tendra este aspecto:


       /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 crculos 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
directorio actual, ".", viene primero en nuestro PATH, el shell encontrar esta versin de ls y la
ejecutar. Sea cual sea el dao que hayan puesto en ese programa, lo acabamos de activar (y puede
ser un montn de dao).  Quien fuera no necesita permisos de root para hacerlo; slo hace falta
permisos de escritura en el directorio donde se encuentra el "falso" ls. Incluso podra ser su propio
directorio home, si sabe que vamos a estar husmeando por ah en algn momento.

    En su propio sistema, es muy improbable que las personas se estn dejando trampas unas a otras.
Pero en un gran sistema multiusuario (como muchos ordenadores de universidades), hay un montn
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
quiero informar de los riesgos implcitos2.  Los sistemas multiusuario son verdaderas comunidades,
donde la gente puede hacerles cosas a los dems en todo tipo de maneras nunca vistas.

    El modo en que he dejado mi PATH incluye la mayora de lo que se ha aprendido hasta ahora
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 que siempre se puede ejecutar un programa en el directorio actual siendo explcito, p.ej.: "./fo*
 *o" " .
_______________________________________________________________________________________________________________9.1.   P*
 *ersonalizacin del b@


    Me aprovecho de que la variable HOME se activa antes de que Bash lea el fichero .bashrc, usando
su valor en la construccin del PATH. Las llaves ("{...}") son un nivel aadido de cita; delimitan
el tamao de lo que va a evaluar "$", de modo que el shell no se confunda por culpa del texto
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 connseguira nada, porque no hay ninguna variable de entorno llamada HOMEfoo.


       /home/larry$ echo $HOMEfoo


       /home/larry$


    Quisiera aclarar una cosa en este path: el significado de "$PATH". Lo que hace es incluir el valor
de cualquier variable PATH previamente  activada en mi nuevo PATH. >Dnde se habr activado la
variable anterior? El archivo /etc/profile sirve como una especie de .bash_profile global, comn a
todos los usuarios. Tener un archivo centralizado como este hace ms sencillo para el administrador
del sistema aadir un directorio nuevo al PATH de todo el mundo, sin que cada uno tenga que hacerlo
individualmente. Si se incluye el path antiguo en el nuevo, no se perdern ninguno de los directorios
que el sistema ya haya preparado.

    Tambin se puede controlar como aparece el prompt.  Esto se consigue mediante la variable de
entorno PS1.  Personalmente, quiero un prompt que me indique el path del directorio actual_as
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
lugar entre apstrofos agudos.  Estos apstrofos sirven para evaluar la expresin en su interior, la
cual a su vez evala la variable PWD. Si slo hubieramos hecho "export  PS1=$PWD"     , nuestro prompt
nos habra mostrado constantemente el path del directorio de trabajo en el momento en que PS1 fu
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
clase de apstrofos si se quiere mostrar el directorio actual en el prompt.

    Quiz se prefiera "export  PS1='$PWD>'"      , o incluso el nombre del sistema:


       export PS1=`hostname`'>'


    Diseccionemos este ejemplo un poco ms. Aqu se usa un nuevo tipo de literal, el apstrofo grave.
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
apstrofos graves, y el resultado se guarda en lugar del nombre del comando entrecomillado.
_______________________________________________________________________________________________________________98      *
 *                                 @


    Probemos con "echo  `ls`"    o "wc  `ls`"  .  A medida que se consiga ms experiencia usando el
shell, esta tcnica se hace ms y ms potente.


    Hay mucho ms por comentar de como se configura el fichero .bashrc, y aqu no hay bastante
espacio para hacerlo.  Se puede aprender ms leyendo la pgina man de bash,  o preguntando a
usuarios experimentados. Aqu hay un .bashrc completo para poder estudiarlo; es razonablemente
estndar, aunque el path es un poco largo.



       # 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
       # delimitadores vlidos; pero las llaves son una buena costumbre,
       # y no hacen dao.


       # 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.   L*
 *os ficheros de inicio de@


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


       function gco
       -
         gcc -o $1 $1.c -g
       "



9.2       Los  ficheros  de  inicio  de  X  Window



Mucha gente prefiere trabajar dentro de un entorno grfico, y para las mquinas bajo Unix eso suele
significar usar X. Si se est acostumbrado al Macintosh o al Microsoft Windows, puede costar un
poco acostumbrarse al sistema X Window, especialmente al modo en que se configura.

    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 grfico especial
de configuracin. En X, las opciones por defecto del sistema se controlan mediante ficheros de texto,
que se editan directamente_en otras palabras, se escribe el nombre del color en un fichero para
cambiar el color del fondo.

    No se puede negar que este mtodo no es tan llano como el de algunos sistemas de ventanas
comerciales. Creo que esta tendencia a permanecer basado en texto, incluso en un entorno grfico,
tiene mucho que ver con el hecho de que X fu creado por un puado de programadores que simple-
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 ficheros de texto ms. Por lo menos nos da un control
muy flexible y preciso de nuestra configuracin.

    Aqu estn los ficheros ms importantes para configurar X:

      .xinitrc     Un script arrancado por X cuando se inicia.
      .twmrc       Leido por el gestor de X Window, twm.
      .fvwmrc      Leido por el gestor de X Window, fvwm.

    Todos estos ficheros deberan estar en el directorio $HOME, si es que existen.

    .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  ltimo
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  gustara  poner  en  .xinitrc?   Quiz  algunas  llamadas  al  programa
xsetroot, para hacer que la ventana de fondo (escritorio) y el ratn tengan el aspecto que de-
seamos. Llamadas a xmodmap, que informa al servidor4 de como interpretar las seales del teclado.
_____________________________________________3
    N. del T.: Yo tambin ;-)
   4El "servidor" slo se refiere al proceso principal en la mquina, con el que todos los dems programas *
 *de X tienen
que comunicar para usar la pantalla. Estos otros programas se conocen como "clientes", y todo el paquete se llama
_______________________________________________________________________________________________________________100     *
 *                                 @


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
slo como ejemplo:



       #!/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
       # seales del teclado. Es *definitivamente* aconsejable aprender como
       # 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:
       xset m 3 2 &         # parmetros del ratn
       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".


       # Ordena al servidor X que sobreponga fish.cursor sobre fish.mask, y use
       # el patrn resultante como cursor del ratn:
       xsetroot -cursor /home/lab/larry/x/fish.cursor /home/lab/larry/x/fish.mask &


       # Un placentero patrn y color de fondo:
       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
       # informacin sobre el programa usado arriba.


       # 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?
       /usr/bin/X11/xclock -digital &


_____________________________________________
"sistema cliente-servidor".
_______________________________________________________________________________________________________________9.2.   L*
 *os ficheros de inicio de@


       # Permite a programas cliente de X ejecutndose en occs.cs.oberlin.edu
       # 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,
       # 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 contrasea, o algo as!
       # 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.   Yo uso twm, pero fvwm se
       # distribuye tambin muchas veces con Linux:
       # /usr/bin/X11/fvwm


    Ntese que algunos comandos son iniciados en segundo plano (p.ej.:  los que van seguidos de
"&"), mientras que otros no lo son. La distincin est en que algunos programas se iniciarn cuando
arranquemos X y seguirn en marcha hasta que salgamos. Los otros se ejecutan una vez y se cierran
inmediatamente.  xsetroot es uno de stos; slo establece la ventana principal o el cursor a lo que
sea, y luego se cierra.

    Una vez que el gestor de ventanas ha arrancado, leer su propio fichero de inicio, que controla
cosas como la composicin de los mens, en qu posiciones se presentan las ventanas cuando se
abren, control de iconos, y otros asuntos terriblemente importantes.  Si se usa twm, el fichero es
.twmrc en nuestro directorio home.  Si se usa fvwm, el fichero es .fvwmrc, etc.  Explicaremos slo
estos dos, ya que son los gestores de ventanas que ms frecuentemente se encontrarn con Linux.



9.2.1      Configuracin de twm


.twmrc no es una macro de shell_est escrito en un lenguaje especialmente hecho para twm, <cralo
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:


       # Indica colores para varias partes de una ventanas. Tiene un gran impacto
       # en la "sensacin" que transmite el entorno.
       Color
       -
_____________________________________________
   5ste es uno de los problemas de los ficheros de configuracin: normalmente usan su propio lenguaje de coman*
 *dos.
Esto significa que los usuarios se vuelven muy buenos a la hora de aprender lenguajes nuevos rpidamente. Supongo
que habra estado bien que los primeros programadores de Unix se hubieran puesto de acuerdo en algn estnd*
 *ar de
fichero de inicio, pero para ser justo es difcil de predecir que tipo de informaciones necesitarn los program*
 *as.
_______________________________________________________________________________________________________________102     *
 *                                 @


           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
       # ttulo de las ventanas:
       Pixmaps
       -
           TitleHighlight "/home/larry/x/beifang.bmp"
       "


       # No os preocupis por estas cosas, son slo para usuarios avanzados :-)
       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
       NoTitle
       -
         "stamp"
_______________________________________________________________________________________________________________9.2.   L*
 *os ficheros de inicio de@


         "xload"
         "xclock"
         "xlogo"
         "xbiff"
         "xeyes"
         "oclock"
         "xoid"
       "


       # "AutoRaise" significa que una ventana aparece al frente cuando el ratn
       # 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.
       # Ntese el patrn: Un botn del ratn pulsado en la ventana
       # principal, si no se est pulsando ninguna tecla modificadora, siempre
       # hace aparecer un men.   Otras posiciones usualmente producen
       # modificaciones de la ventana en algn modo, y las teclas modificadoras
       # se usan junto con los botones del ratn para acceder a las funciones
       # ms avanzadas de manipulacin de ventanas.
       #
       # No hay porqu seguir este patrn en .twmrc -- el cmo
       # 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 =       : root     : f.menu "stuff"
       Button2 =       : icon     : f.move
       Button2 = m     : window   : f.move
       Button2 =       : title    : f.move
       Button2 =       : frame    : f.move
       Button2 = s     : frame    : f.zoom
       Button2 = s     : window   : f.zoom


       Button3 =       : root     : f.menu "x"
       Button3 =       : title    : f.lower
       Button3 =       : frame    : f.lower
_______________________________________________________________________________________________________________104     *
 *                                 @


       Button3 =       : icon     : f.raiselower


       # Puedes escribir tus propias funciones; esta se usa en el men
       # "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
       # seccin de los botones del ratn.   Ntese que muchas de estas
       # entradas de men llaman a submens a su vez.   Se pueden tener tantos
       # niveles como se quiera, pero no se pueden tener mens recursivos.   Ya
       # lo he probado.


       menu "main"
       -
       "Vanilla"         f.title
       "Emacs"           f.menu "emacs"
       "Logins"          f.menu "logins"
       "Xlock"           f.menu "xlock"
       "Misc"            f.menu "misc"
       "


       # Esto me permite llamar a emacs desde varias mquinas diferentes.   Ver
       # la seccin sobre ficheros .rhosts para ms informacin sobre
       # 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.   Ver
       # la seccin sobre ficheros .rhosts para ms informacin sobre
       # como funciona:
       menu "logins"
       -
       "Logins"      f.title
_______________________________________________________________________________________________________________9.2.   L*
 *os ficheros de inicio de@


       "here"         !"/usr/bin/X11/xterm -ls -T `hostname` -n `hostname` &"
       "phylo"       !"rsh phylo ""xterm -ls -display floss:0 -T phylo"" &"
       "geta"         !"rsh geta ""xterm -ls -display floss:0 -T geta"" &"
       "darwin"      !"rsh darwin ""xterm -ls -display floss:0 -T darwin"" &"
       "ninja"       !"rsh ninja ""xterm -ls -display floss:0 -T ninja"" &"
       "indy"         !"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 lo que uso el botn central del ratn:
       menu "stuff"
       -
       "Chores"         f.title
       "Sync"           !"/bin/sync"
       "Who"            !"who _ xmessage -file - -columns 80 -lines 24 &"
       "Xhost +"       !"/usr/bin/X11/xhost + &"
       "Rootclear"     !"/home/larry/bin/rootclear &"
       "


       # Funciones de X que a veces conviene usar:
_______________________________________________________________________________________________________________106     *
 *                                 @


       menu "x"
       -
       "X Stuff"                  f.title
       "Xhost +"                  !"xhost + &"
       "Refresh"                  f.refresh
       "Source .twmrc"           f.twmrc
       "(De)Iconify"              f.iconify
       "Move Window"              f.move
       "Resize Window"           f.resize
       "Destroy Window"          f.destroy
       "Window Ops"               f.menu "windowops"
       ""                           f.nop
       "Kill twm"                 f.quit
       "


       # Este es un submen del de arriba:
       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
vuestra versin de X vinieran algunos ejemplos de archivos .twmrc bastante decentes.  Se pueden
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 ficheros .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
_______________________________________________________________________________________________________________9.3.   O*
 *tros ficheros de inicio @

                                                                                   ______   _____   _____________
comandos, lo ms probable es que sta sea la causa. Hay que salir de X con |_Ctrl_|-|_Alt_|-|_Retroceso__|,
editar .twmrc, y probar otra vez.



9.2.2      Configuracin de fvwm


Si se usa fvwm, el directorio /usr/lib/X11/fvwm/ (o /usr/X11/lib/X11/fvwm/) tiene algunos
ejemplos de ficheros de configuracin.

    [Companeros: No s nada sobre fvwm, aunque supongo que sacar algo en claro de los ficheros
de ejemplo, igual que el lector :-).  Adems, dado el pequeo pero decente system.twmrc en el
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]



9.3       Otros  ficheros  de  inicio



Otros ficheros de inicio dignos de mencin son:

      .emacs        Leido por el editor de texto Emacs cuando arranca.
      .netrc        Da los nombres y contraseas por defecto para ftp.
      .rhosts       Hace una cuenta accesible remotamente.
      .forward      Para redireccin automtica del correo.



9.3.1      El fichero de configuracin de Emacs


Si se usa emacs como editor principal, entonces el fichero .emacs es muy importante.  Se discute
con extensin en el Captulo 8.



9.3.2      Configuracin por defecto del FTP


El fichero .netrc permite tener ciertas configuraciones por defecto cada vez que se arranca ftp.
Aqu hay un pequeo .netrc de ejemplo:


       machine floss.life.uiuc.edu login larry password fishSticks
       machine darwin.life.uiuc.edu login larry password fishSticks
       machine geta.life.uiuc.edu login larry password fishSticks
       machine phylo.life.uiuc.edu login larry password fishSticks
       machine ninja.life.uiuc.edu login larry password fishSticks
       machine indy.life.uiuc.edu login larry password fishSticks


       machine clone.mcs.anl.gov login fogel password doorm@
       machine osprey.mcs.anl.gov login fogel password doorm@
       machine tern.mcs.anl.gov login fogel password doorm@
       machine altair.mcs.anl.gov login fogel password doorm@
       machine dalek.mcs.anl.gov login fogel password doorm@
       machine juju.mcs.anl.gov login fogel password doorm@
_______________________________________________________________________________________________________________108     *
 *                                 @




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



    Cada lnea de .netrc especifica un nombre de mquina, un nombre de cuenta de acceso a usar
por defecto con esa mquina, y una contrasea.  Esto es muy til si se usa ftp continuamente y se
est harto de teclear el nombre de acceso y la contrasea en cada uno. El programa de ftp intentar
acceder automticamente usando los datos del fichero .netrc, si se hace ftp a una de las mquinas
listadas all.

    Se puede obligar a ftp a ignorar el fichero .netrc y no intentar acceder de manera automtica,
arrancndolo con la opcin "-n" : "ftp  -n"  .

    Hay que asegurarse de que el fichero .netrc slo  es legible por el usuario.  Se puede usar el
programa chmod para establecer los permisos de lectura.  Si otra gente puede leerlo, significa que
pueden encontrar su contrasea de acceso a varios otros ordenadores.  Esto es un agujero en la
seguridad tan grande como uno pueda tenerlo.  Como recomendacin para ser cuidadoso, ftp y
otros programas que miran el fichero .netrc no funcionarn si los permisos de lectura del fichero
son incorrectos.

    Hay mucho ms sobre el fichero .netrc de lo que se ha explicado aqu.  Cuando se tenga una
oportunidad, hay que probar "man  .netrc"    o "man  ftp"  .



9.3.3      Permitiendo un acceso remoto sencillo a su cuenta


Si tiene un fichero .rhosts en su directorio $HOME, le permitir usar programas en esta mquina
de forma remota. Por ejemplo, se puede estar registrado en la mquina cs.oberlin.edu, pero con
un .rhosts correctamente configurado 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
floss.

    El archivo .rhosts se ve ms o menos as:


       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. Supong-
amos que este ejemplo es en realidad mi archivo .rhosts en floss.life.uiuc.edu. Esto significara
que puedo usar programas en floss, y ver el resultado en cualquiera de las mquinas listadas, siem-
pre y cuando yo est tambin registrado como el usuario correspondiente a cada mquina cuando
intento ejecutar el programa.

    El mecanismo exacto con el que uno usa un programa remoto es normalmente el programa rsh.
Significa "remote shell"(shell remoto), y lo que hace es iniciar un shell en la mquina remota y
ejecutar el comando especificado. Por ejemplo:
_______________________________________________________________________________________________________________9.3.   O*
 *tros ficheros de inicio @


       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 tena el fichero .rhosts de ejemplo mostra-
do 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
funcione.  Se puede usar la opcin "-l"  con rsh para especificar a la mquina remota cual nombre
de usuario se quiere usar para registrarse.  Si ese nombre existe en la mquina remota, y tiene un
fichero .rhosts con el nombre de la mquina local y el nombre de usuario correspondiente, entonces
la orden includa con rsh se ejecutar.


       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 fichero .rhosts que
permite a "trixie" de "frobbo.hoopla.com" usar programas en su cuenta.  Si son o no la misma
persona es irrelevante:  la nica cosa importante son los nombres de usuario, los nombres de las
mquinas y la fila referente a "floss" en el .rhosts de Larry.  Ntese que el fichero .rhosts de
Trixie en frobbo no importa, slo cuenta el de la mquina remota.

    Hay otras combinaciones que se pueden poner en un fichero .rhosts _por ejemplo, se puede
dejar en blanco el nombre de usuario detrs del nombre de una mquina remota, para permitir a
cualquier usuario de esa mquina que ejecute programas en la mquina local. Esto es, por supuesto,
un riesgo en la seguridad: alguien podra ejecutar remotamente un programa que borre mis archivos,
por el simple hecho de tener una cuenta en cierta mquina. Si se va a hacer cosas como esta, entonces
hay que asegurarse de que el fichero .rhosts es legible slo por el usuario implicado, y por nadie
ms.



9.3.4      Redireccin de correo


Tambin se puede tener un fichero .forward, el cual no es un fichero de configuracin estrictamente
hablando. Si contiene direcciones de e-mail, entonces todo el correo que llegue al usuario se redirigir
a esas direcciones.  Esto es til cuando se tienen cuentas en varios sistemas, pero se quiere leer el
correo desde un solo sitio.

    Hay una gran cantidad de otros ficheros de configuracin posibles. La cantidad exacta variar de
sistema a sistema, y depende de los programas instalados. Una manera de saber ms es mirar todos
los archivos en el directorio $HOME que empiecen por ".".  No es seguro que todos sean ficheros
de configuracin, pero seguro que la mayora s lo es.
_______________________________________________________________________________________________________________110     *
 *                                 @


9.4       Veamos  algunos  ejemplos



El ejemplo definitivo 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
"guest", contrasea "explorer", y husmead por dentro. Muchos de los archivos de ejemplo se pueden
encontrar en /home/kfogel, pero tambin hay otros directorios de usuarios.  Sois libres de copiar
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 suficiente. Prefiero creer en
la confianza, ms que en la vigilancia constante, para mantener la seguridad.




Captulo  10



Hablando   con   los   dems



       "Una nocin fundamental de Usenet es que es una cooperativa."

            Cuando ya van para diez los aos que llevo en Usenet, discrepo con lo anterior. La
                            nocin fundamental de Usenet es el insulto airado.
                                                                                   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
muchas, muchas maneras distintas. Este captulo va a intentar contar cmo se puede sacar provecho
de esta gran facilidad para la comunicacin.

    Trataremos de cubrir el correo electrnico, las noticias de Usenet, y diversas utilidades bsicas
de comunicaciones de Unix.



10.1        Correo  electrnico



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



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


       /home/larry$
       /home/larry$


    El programa mail es muy simple. Como cat, acepta texto de la entrada estndar, lnea_a_lnea,_
hasta que recibe un caracter de fin-de-texto_como_nico carcter_en_una lnea:  |_Ctrl-d_|.  As, para

enviar nuestro mensaje, tuvimos que pulsar |_Intro_|y despus |_Ctrl-d_|.

    Usar mail es la manera ms rpida de mandar correo, y es bastante til cuando se usa con redi-
reccin de entrada y/o salida. Por ejemplo, si quisiramos enviar por correo electrnico el fichero re-
port1 a "Sam", podramos escribir "mail  sam  <  report1"    , o incluso "sort  report1  _  mail  sam"    .

    Sin embargo, la desventaja de usar mail para enviar_correo_es su primitivsimo editor.  <No se
puede cambiar ni una lnea 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.



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:


       /home/larry$ mail
       No mail for larry
       /home/larry$


    "No mail for larry" significa: 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   10/211    "Sapos!"
        N   2 larry                     Tue Aug 30 18:12    9/191
       &


El smbolo peticin de rdenes del programa mail es un "et a la inglesa" ("&"_).__Acepta_un par de
rdenes sencillas, y muestra una breve pantalla de ayuda si se pulsa "?"  seguido de |_Intro_|.

    Las rdenes bsicas de mail son:
_______________________________________________________________________________________________________________10.2.   *
 *Noticias ms que de @


t lista-de-mensajes     Mostrar los mensajes en la pantalla.


d lista-de-mensajes     Borrar los mensajes.


s lista-de-mensajes fichero     Guardar los mensajes en fichero.


r lista-de-mensajes     Responder a los mensajes_esto es, comenzar a escribir un nuevo mensaje di-
                   rigido a quien fuera que envi los mensajes referidos.


q                  Salir y guardar los mensajes que no hayan sido borrados en un fichero llamado
                   mbox en el directorio raz del usuario.



    >Qu es una lista-de-mensajes? Consiste en una lista de nmeros separados por espacios, o incluso
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
Sam. Si se omite la lista-de-mensajes, se supone que la orden se refiere al ltimo 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
mensaje en un fichero y usar more sobre l despus. El segundo es que no ofrece una buena interfaz
para manejar el correo antiguo _cuando se quiere guardar el correo para leerlo ms tarde.

    Emacs tambin permite leer el correo con rmail, pero este libro no lo cubre.  Adicionalmente
la mayora de los sistemas Linux vienen con algunos lectores de correo adicionales adems de mail,
como elm, o pine.



10.2        Noticias  ms  que  de  sobra



10.3        Localizar  a  la  gente



El programa finger permite obtener informacin de otros usuarios del sistema y de todo el mundo.
Sin duda el programa finger recibi este nombre por los anuncios de la AT&T que exhortaban a la
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
difcil.  Se puede solicitar informacin de un usuario local ("sam"), informacin de otra mquina
("@lionsden"), informacin sobre un usuario remoto ("sam@lionsden"), o simplemente informacin
sobre la mquina local (nada).

    Otra caracteristica es que si se pide informacin sobre un usuario y no hay ningn nombre de
cuenta que coincida exactamente con el dado, tratar de emparejar el nombre real con lo que se
_______________________________________________________________________________________________________________114     *
 *                                 @


haya especificado. Eso significa que si ejecutamos "finger  Greenfield"     , nos contestar que existe
la cuenta sam de Sam Greenfield.


       /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      Office Phone
       larry     Larry Greenfield       1    3:51   Dec 25 12:50
       larry     Larry Greenfield       p0          Dec 25 12:51
       /home/larry$


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



10.3.1       Planes y proyectos


Pero, >qu es eso de .plan y .project? Son ficheros que existen en el directorio raz de un usuario
y que se muestran cuando se le hace finger.  Cada uno puede crear sus propios ficheros .plan y
.project _la nica restriccin es que slo se muestra la primera lnea del fichero .project.

    Adems, todo el mundo debe tener permisos de bsqueda (la "x" de ejecucin) del directorio raz
del usuario en cuestin ("chmod  a+x  ~/") y debe ser posible para todo el mundo leer los ficheros
.plan y .project ("chmod  a+r  ~/.plan  ~/.project" ).



10.4        Uso  remoto  de  sistemas



_______________________________________________________________________________________________________________

telnet sistema-remoto
_______________________________________________________________________________________________________________
_______________________________________________________________________________________________________________10.5.   *
 *Intercambio de ficheros @


    La forma ms habitual de usar un sistema Unix remoto es con telnet. telnet es normalmente
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!)
y despus usar el sistema remoto casi como si estuviramos sentados all.

    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 smbolo del peticin de rdenes:  telnet>.  Entonces podemos teclear
"quit"   y |_Intro_|y la conexin con el otro_sistema_ser cerrada y el programa telnet finalizar. (Si

cambiramos de idea, simplemente pulsando |_Intro_|volveramos al sistema remoto).

    Si se estn usando las X, se puede crear un nuevo xterm para el otro sistema al que estamos
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
ser deseable crear un alias o un programa de shell que lo haga automticamente.)



10.5        Intercambio  de  ficheros



_______________________________________________________________________________________________________________

ftp sistema-remoto
_______________________________________________________________________________________________________________

    La manera usual de intercambiar ficheros entre sistemas Unix es ftp, acrnimo que proviene de
file transfer protocol (protocolo de transferencia de ficheros).  Tras ejecutar la orden ftp, se nos
pedir que nos identifiquemos, de forma muy parecida a con telnet.  Despus de hacerlo aparece
un smbolo de peticin de rdenes especial: el smbolo 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 ficheros en el sistema remoto.

    Las dos rdenes ms importantes son "get"   y "put"  .   get transfiere un fichero del sistema
remoto al local, y put lleva un fichero del sistema local al remoto. Ambas rdenes 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
momento (que se puede haber cambiado con la orden "cd" ).

    Un problema habitual con ftp es la distincin entre ficheros de texto y binarios.  ftp es un
protocolo muy antiguo, y antes tena ventajas suponer que los ficheros que se transferan eran de
texto.  El comportamiento por omisin de algunas versiones de ftp es se, lo que significa que los
_______________________________________________________________________________________________________________116     *
 *                                 @


programas que se enven o reciban se corrompern. Por seguridad conviene usar la orden "binary"
antes de empezar a transferir ficheros.

    Para salir de ftp se usa la orden "bye"  .



10.6        Viajando  por  la  telaraa



La Telaraa Mundial (World Wide Web), o WWW, es un uso muy popular de la Internet. Consiste en
un conjunto de pginas, cada una con su propia URL_Localizador Uniforme de Recursos asociado.
Los URLs son simpticas secuencias de caracteres de la forma <http://www.rutgers.edu/>.  Las
pginas estn por lo general escritas en HTML (Lenguaje de Composicin de Hipertexto).

    El HTML permite al autor de un documento enlazar ciertas palabras, frases, o imgenes, con otros
documentos que se hallen en cualquier lugar de la telaraa.  Cuando un usuario lee un documento,
puede moverse rpidamente a otro picando en una palabra clave o en un botn y se le mostrar el
otro documento en cuestin_que posiblemente est a miles de kilmetros del primero.


_______________________________________________________________________________________________________________

netscape [url]
_______________________________________________________________________________________________________________

    El navegador ms popular de Linux es netscape; se trata de un navegador comercial que vende
(y regala) Netscape Communications Corporation. netscape slo funciona con las X.

    netscape trata de ser tan fcil de usar como sea posible y utiliza el conjunto de widgets Motif
para lograr una apariencia muy a lo Microsoft Windows.  El conocimiento bsico para poder usar
netscape es que las palabras azules subrayadas son enlaces, as como muchas de las imgenes. (Se
puede averiguar cuales imgenes son enlaces picando en ellas.) Picando en esas palabras con el botn
izquierdo del ratn, aparece una nueva pgina.

    Linux soporta muchos navegadores ms,  incluyendo el navegador original lynx.  lynx es un
navegador orientado a texto_no muestra ninguna imagen que es con lo que actualmente se relaciona
al Web_pero funciona sin las X.


_______________________________________________________________________________________________________________

lynx [url]
_______________________________________________________________________________________________________________

    Es un poco ms complicado aprender a usar lynx, pero normalmente se le coge el truco despus
de jugar un rato con las flechas del cursor. Las flechas hacia arriba y hacia abajo nos mueven entre
los enlaces de una pgina.  La flecha hacia la derecha sigue el enlace seleccionado (resaltado)._ La
flecha hacia la izquierda vuelve a la pgina anterior.  Para salir de lynx, se debe pulsar |_q_|.  lynx
tiene muchas rdenes ms_consltese la pgina del manual.




Captulo  11



Comandos   divertidos



Bueno,  la mayora de la gente que tiene que ver con los comandos de UNIX expuestos en este
captulo no estarn de acuerdo con este ttulo.  "<Que diablos!  Se me ha enseado que el interfaz
del Linux es muy estndar, y ahora tenemos un grupo de comandos, cada uno trabajando de una
manera completamente diferente. Nunca recordar todas esas opciones, >y dice que son divertidos?"
S, Vd.  ha visto un ejemplo del humor de los hackers1.  Adems, mrelo desde el lado positivo:  no
hay comandos del MS-DOS equivalentes a stos. Si los necesita, tiene que adquirirlos por separado,
y nunca sabr como ser su interfaz.  Aqu hay un til _y econmico_ valor aadido, <<as q*
 *ue
disfrtelo!!.

    El conjunto de comandos explicados en este captulo cubre find, que permite al usuario buscar
grupos de ficheros especificados dentro del rbol de directorios; tar, til para empaquetar algn
archivo para ser enviado o slo salvado; dd, el multicopista de bajo nivel; y sort, el cual . . . s, clasifica
ficheros. Una ltima condicin: estos comandos no estn bajo ningn concepto estandarizados, y si
bien podramos encontrar un ncleo de opciones comunes en todos los sistemas *IX, las versiones (de
GNU) que se explican ms abajo, y Vd. puede encontrar en su sistema Linux, usualmente poseen
muchas ms capacidades. Por tanto, si Vd. planea usar otros sistemas operativos UNIX, por favor,
no olvide comprobar la pgina del manual del sistema en cuestin para aprender las quizs no tan
pequeas diferencias.



11.1        find,  el  buscador  de  ficheros



11.1.1       Generalidades


Entre los diversos comandos vistos hasta aqu, haba algunos que permitan al usuario bajar recursi-
vamente el rbol del directorio para llevar a cabo alguna accin: los ejemplos cannicos son "ls  -R"
y "rm  -R"  .  Bien.  find es el  comando recursivo.  Cada vez que piense "Bueno, tengo que hacer
tal cosa con todos esos ficheros en mi propia particin", hara mejor en pensar en usar find.  En
_____________________________________________1
    N.T.: La palabra Hacker en este contexto se refiere a una persona con profundos conocimientos de informtica.


                                                      117
_______________________________________________________________________________________________________________118     *
 *                                 @


cierto sentido el hecho que find encuentre ficheros es solo un efecto secundario:  su ocupacin real
es evaluar.

    La estructura bsica del comando es como sigue:


_______________________________________________________________________________________________________________

find ruta [. . . ]  expresin [. . . ]
_______________________________________________________________________________________________________________

    Esto es al menos en la versin de GNU; otras versiones no permiten especificar ms que una ruta,
y adems es muy infrecuente la necesidad de hacer tal cosa. La explicacin burda de la sintaxis del
comando es bastante simple:  Vd. indica desde dnde quiere empezar la bsqueda (la parte de la
ruta; con el find de GNU puede omitir esto y ser tomado por defecto el directorio en uso .), y que
clase de bsqueda quiere realizar (la parte de la expresin).

    El comportamiento estndar del comando es un poco engaoso, por lo que ms vale tenerlo en
cuenta. Supongamos que en su directorio principal de usuario existe un directorio llamado basura,
el cual contiene un fichero foobar.  Vd. felizmente escribe "find  .  -name  foobar"    (lo que como
puede adivinar busca ficheros llamados foobar), y obtiene . . . nada ms que otra vez el prompt. El
problema reside en el hecho de que find es por defecto un comando silencioso; slo devuelve 0 si la
bsqueda fue completada (con o sin haber encontrado algo) o un valor distinto de cero si hubiera
habido algn problema.  Esto no ocurre con la versin que Vd.  puede encontrar en el Linux, pero
de todas maneras es til recordarlo.



11.1.2       Expresiones


La parte de la expresin puede ser dividida en cuatro grupos diferentes de palabras clave: opciones,
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.



opciones    afecta a la funcin general de find, ms que al procesamiento de un solo fichero.  Un
       ejemplo es "-follow"   , el cual instruye a find para seguir enlaces simblicos en vez de slo
       presentar el nodo-i. Siempre devuelven verdadero.


tests  son verdaderos tests (por ejemplo,  "-empty"   comprueba si el fichero est vaco),  y puede
       devolver verdadero o falso.


acciones    tienen tambin un efecto secundario sobre el nombre del fichero considerado.  Pueden
       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
       la OR lgica de las dos subexpresiones a su lado. Note que cuando se yuxtaponen expresiones,
       est involucrada una "-and"  .



    Debe advertir que find depende del intrprete de comandos para tener la lnea de comandos
analizada sintcticamente:  esto significa que todas las palabras clave deben ser introducidas entre
_______________________________________________________________________________________________________________11.1.   *
 *find, el buscador de fic@


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



11.1.3       Opciones


Aqu est la lista de todas las opciones conocidas de la versin GNU de find. Recuerde que siempre
devuelven verdadero.



  -daystart mide el tiempo transcurrido no desde hace 24 horas si no desde la ltima medianoche.
       Un autntico hacker probablemente no entender la utilidad de tal opcin, pero un trabajador
       que programa de ocho a cinco si lo apreciar.


  -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
       Vd. no puede borrar un directorio antes de que todos sus ficheros sean borrados tambin . . .


  -follow respeta (es decir, sigue) los enlaces simblicos. Implica la opcin "-noleaf"   ; ver abajo.


  -noleaf desactiva una optimizacin que dice "Un directorio contiene dos subdirectorios menos que
       su cuenta de enlaces rgidos2".  Si el mundo fuera perfecto, todos los directorios seran refer-
       enciados por cada uno de sus subdirectorios (a causa de la opcin ..), como .  dentro de s
       mismo, y por su nombre "real" desde su directorio padre.

       Esto significa 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 fichero distribuidos3  pueden
       alterar esto. Esta opcin hace que find funcione ligeramente ms despacio, pero debe dar los
       resultados esperados.


  -maxdepth niveles, -mindepth niveles, donde niveles es un entero no negativo.  Indican respectiva-
       mente que a lo sumo o que al menos niveles  de directorios deberan explorarse.  Un par de
       ejemplos son obligados:  "-maxdepth  0"    indica que el comando debera realizarse slo sobre
       los argumentos de la lnea de comandos, es decir, sin bajar recursivamente el rbol de directo-
       rios; "-mindepth  1"    inhibe el procesamiento del comando para los argumentos en la lnea de
       comandos, pero se consideran todos los otros ficheros debajo.


  -version imprime la versin en uso del programa.


  -xdev, el cual es un nombre engaoso, instruye a find para no cruzarse de dispositivo4, es decir,
       no  cambiarse  de  sistema  de  ficheros.   Es  muy  til  cuando  se  tiene  que  buscar  algo  en  el
_____________________________________________2
    N.T. hard link count
   3Los sistemas de fichero distribuidos permiten a los ficheros mostrarse como si fueran locales a una mquina cua*
 *ndo
realmente estn situados en algn otro lugar.
   4N.T.: to cross device
_______________________________________________________________________________________________________________120     *
 *                                 @


       sistema de ficheros raz; en muchas mquinas es una particin algo pequea, pero, sino, <un
       "find  /"  buscara en la estructura entera! Podemos as evitar los sistemas de archivo que no
       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 especificacin de un valor
son "-empty"   , el cual devuelve verdadero si el fichero est vaco, y el par "-nouser"   /"-nogroup"    , los
cuales devuelven verdadero en el caso que ninguna entrada en /etc/passwd o /etc/group cuadre
con el identificador de usuario/grupo del propietario del fichero. Veamos un problema comn en los
sistemas multiusuario:  se borra un usuario, pero los ficheros pertenecientes a l permanecen en la
parte ms extraa de los sistemas de ficheros, y debido a las leyes de Murphy ocupan mucho espacio.
El par de test que hemos visto en ltimo lugar nos permitir encontrar esos archivos.

    Por  supuesto,  es  posible  buscar  un  usuario  o  grupo  especfico.   Los  test  son  "-uid  nn"   y
"-gid  nn"  .  Desafortunadamente no es posible dar directamente el nombre del usuario, sino que
es necesario usar el identificador numrico, nn.

    Adems est permitido usar las formas "+nn"  , que significa "un valor estrictamente ms grande
que nn", y "-nn"  , que significa "un valor estrictamente ms pequeo que nn".  Esto es bastante
estpido en el caso de identificadores de usuario5, pero se volver prctico con otros test.

    Otra opcin til es "-type  c"  , la cual devuelve verdadero si el fichero es del tipo especial de
carcter. Los mnemnicos para las posibles selecciones son las mismas letras que se encuentran en ls;
entonces, tenemos bloque cuando el fichero es uno especial de bloque; directorio; pipes para tuberas
designadas6; link para enlaces simblicos, y socketssockets7. Los ficheros regulares se indican con file.
Un test relacionado es "-xtype"   , que es similar a "-type"   excepto en el caso de enlaces simblicos.
Si se ha proporcionado la opcin "-follow"   , se examina el enlace, en lugar del fichero al que se
apunta.  El test "-fstype  type "    no tiene nada que ver; en este caso, lo que se examina es el tipo
del sistema de ficheros.  Creo que la informacin se consigue del fichero /etc/mtab, el nico que
presenta los sistemas de ficheros montados; estoy seguro que los tipos nfs, tmp, msdos y ext2 estn
entre los reconocidos.

    Los test "-inum  nn "   y "-links  nn "   examinan si el fichero tiene nmero de nodo-i nn, o nn
enlaces, mientras que "-sizenn "   es verdadero si el fichero tiene nn bloques de 512 bytes asignados.
(Bueno, no precisamente; para ficheros disgregados los bloques no asignados tambin se cuentan).
Como hoy en da el resultado de "ls  -s"   no siempre se mide en trozos de 512 bytes (Linux, por
ejemplo, usa 1 kbyte como la unidad), es posible adicionar a nn el caracter "b" , el cual significa
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 ante-
cedido por un signo, entonces los bits de permiso del fichero deben cuadrar exactamente con ellos.
Un "-"  al principio significa que todos los bits de permiso deben ser puestos a uno, pero no hace
_____________________________________________5
    N.T.: UIDs
   6N.T.: named pipes
   7N.T.: enchufe
_______________________________________________________________________________________________________________11.1.   *
 *find, el buscador de fic@


suposiciones sobre los otros; un "+"  al principio se satisface slo si cualquiera de los bits est a uno.
<Ups! Olvid decir que el modo se escribe en octal o simblicamente, como se usa en chmod.

    El prximo grupo de test est relacionado con el tiempo que hace que se ha utilizado un fichero
por ltima vez.  Esto viene bien cuando un usuario ha llenado su espacio, ya que usualmente hay
muchos ficheros que no usaba desde hace aos, y cuyo significado ha olvidado.  El problema es
localizarlos, y find es la nica esperanza a la vista.  "-atime  nn "   es verdadero si la ltima vez
que se accedi al fichero fue hace nn das; "-ctime  nn "   si el estado del fichero fue cambiado por
 ltima vez hace nn das _por ejemplo, con un chmod_ y "-mtime  nn "   si el fichero fue modificado
por ltima vez hace nn das.  Algunas veces Vd. necesita una marca de tiempo 8 ms precisa; el
test "-newer  archivo "     se satisface si el fichero considerado ha sido modificado ms tarde que el
archivo.  Por lo tanto, Vd. slo tiene que usar touch con la fecha deseada, y ya est.  El find de
GNU aade los test "-anewer"    y "-cnewer"    los cuales se comportan de una manera similar; y los
test "-amin"  , "-cmin"   y "-mmin"   que cuentan el tiempo en minutos en vez de perodos de 24 horas.

    Por  ltimo pero no menos importante,  el test que yo uso ms a menudo.  "-name  patrn "
es verdadero si el nombre del fichero concuerda exactamente con patrn, el cual es ms o menos
el nico que se usara en un ls estndar.  (>Por qu `ms o menos' ?  Porque, por supuesto, Vd.
tiene que recordar que todos los parmetros son procesados por el intrprete de comandos, y esos
encantadores metacaracteres sufren una expansin. As, un test como "-name  foo*"    no devolver lo
que Vd. desea, y Vd. debera escribir cualquiera de los dos "-name  foo"   o "-name  "foo*""    . Este es
probablemente uno de los ms comunes errores cometidos por usuarios descuidados, as que escrbalo
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 "
el cual no se preocupa acerca de los puntos y barras inclinadas cuando compara la ruta del fichero
considerado con patrn.



11.1.5       Acciones


Hemos dicho que las acciones son aquellas que realmente hacen algo. Bueno, "-prune"   ms bien no
hace nada, es decir, al descender el rbol de directorios (a menos que se le agregue "-depth"   ). Se la
encuentra usualmente junto con "-fstype"   , para elegir entre varios sistemas de ficheros a aquellos
que deberan examinarse.

    Las otras acciones pueden ser divididas en dos amplias categoras;



  Acciones que imprimen  algo.  La ms obvia de estas _y en realidad, la accin por defecto de
       find- es "-print"    que imprime el nombre del(os) fichero(s) que concuerde(n) con las otras
       condiciones en la lnea 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"
       lista el fichero 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 especificar que formato
       debera tener la salida, y "-fprintf  archivo  formato "       hace lo mismo, pero escribindolo en
       archivo. Estas acciones tambin devuelven verdadero.
_____________________________________________8
    N.T.: timestamp
_______________________________________________________________________________________________________________122     *
 *                                 @


  Acciones que ejecutan algo.  Su sintaxis es un poco extraa y su uso est muy extendido, por lo
       que, por favor, considrelas.

       "-exec  comando  ";"     ejecuta el comando, y la accin devuelve verdadero si el estado retornado
       por el comando es 0, lo que significa que la ejecucin fue correcta.  La razn para el "";"
       es bastante lgica:  find no sabe donde termina el comando, y el truco de poner la accin
       ejecutable al final del comando no es aplicable.  Bueno, la mejor manera para sealar el final
       del comando es usar el caracter que usa el intrprete de comandos para este fin, que es ";" , pero,
       por supuesto, un punto y coma solo en la lnea de comandos sera "comido"por el intrprete
       de comandos y nunca llegara a find, as que tienen que ser precedidos de escape. La segunda
       cosa a recordar es como especificar el nombre del fichero en uso dentro del comando, ya que
       probablemente Vd. hizo todo el esfuerzo al construir la expresin para hacer algo, y no slo
       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
       si Vd. necesita, por ejemplo, la ruta entera y no slo el nombre del fichero_ pero con el find
       de GNU podra ser cualquier lugar de la cadena de caracteres que compone el comando. (>Y
       no debera estar precedido de escape o entrecomillado?, seguramente se estar preguntando.
       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
       los intrpretes de comandos "saben" que -" no es una opcin que tenga sentido, por tanto no
       intentan expandirlas, afortunadamente para find que puede obtenerla intacta.

       "-ok  comando  ";"    se comporta como "-exec"  , con la diferencia que para cada fichero selec-
       cionado se pregunta al usuario que confirme el comando; si la respuesta empieza por y o Y, se
       ejecuta, de otra manera no, y la accin devuelve falso.



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
       tambin son muy significativos para el intrprete de comandos.


! expr
-not expr
   Cambia el verdadero valor de la expresin, esto es, si expr es verdadera, se vuelve falsa. El signo
       de exclamacin no tiene que ser precedido de escape, porque est seguido por un espacio en
       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
       est implcita. expr2 no se evalua, si expr1 es falsa.


expr1 -o expr2
_______________________________________________________________________________________________________________11.1.   *
 *find, el buscador de fic@


expr1 -or expr2
   corresponden a la operacin lgica OR. expr2 no es evaluada, si expr1 es verdadera.


expr1 , expr2
   es la declaracin de lista; ambas expr1 y expr2 se evaluan (junto con todos los efectos secundarios,
       <por supuesto!), y el valor final de la expresin es el de expr2 .



11.1.7       Ejemplos


S, find tiene demasiadas opciones, lo se.  Pero, hay un montn de casos preparados que valen la
pena recordar, porque son usados muy a menudo. Veamos algunos de ellos.



$  find  .  -name  foo"*  -print



    encuentra todos los nombres de fichero que empiezan con foo.  Si la cadena de caracteres est
incluida en el nombre, probablemente tiene ms sentido escribir algo como ""*foo*""   , en vez de
"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 ficheros regulares como en enlaces simblicos que apuntan a ficheros
regulares, por tanto el test "-xtype"   . Muchas veces es ms simple evitar especificarlo, especialmente
si estamos bastante seguros cuales ficheros 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 fichero del
nombre donde se ha encontrado un emparejamiento. El comando grep se aplica a cada fichero con
una invocacin diferente, y, por tanto no cree que sea necesario mostrar a la salida el nombre del
fichero.  Pero ahora hay dos ficheros, esto es:  <el activo y /dev/null!  Otra posibilidad podra ser
redirigir la salida9 del comando a xargs y dejarle llevar a cabo el grep. Yo lo intent, e hice pedazos
completamente mi sistema de ficheros (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 ficheros llamados core
en el sistema de ficheros del tipo ext2 al cual no se ha accedido en las ltimas 24 horas. Es posible
que alguien quiera usar los ficheros de imagen de memoria10 para realizar un volcado post mortem,
pero nadie podra recordar lo que estuvo haciendo despus de 24 horas. . .



$__find__/home__-xdev__-size__+500k__-ls__>__piggies
   9N.T.: to pipe
  10N.T.: core file
_______________________________________________________________________________________________________________124     *
 *                                 @


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



11.1.8       Una ltima 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
cuantas operaciones sean posibles en una nica invocacin de find, especialmente en las tareas de
`mantenimiento interno' que usualmente se administran mediante un trabajo de la tabla de tareas
planificadas.  Un ejemplo informativo es el siguiente: supongamos que queremos borrar los ficheros
que acaban en .BAK y cambiar la proteccin de todos los directorios a 771 y todos los ficheros
que acaban en .sh a 755.  Y quizs temgamos montado el sistema de ficheros NFS en un enlace
telefnico, y no querramos examinar los ficheros ah.  (>Por qu escribir tres comandos diferentes?
La manera ms efectiva para realizar la tarea es sta:



$  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 fijamente revela que la lgica
subyacente es bastante sencilla.  Recuerde:  lo que se hace es una evaluacin verdadero/falso;  el
comando introducido es slo un efecto secundario.  Pero esto significa que se ejecuta slo si find
puede evaluar la parte ejecutable de la expresin, esto es slo si la parte izquierda de la subexpresin
se evala como verdadera. As, si por ejemplo el fichero considerado en el momento es un directorio
entonces el primer ejecutable se evala y el permiso del nodo-i se cambia a 771; de otra manera
olvida todo y pasa a la siguiente subexpresin. Probablemente, es ms fcil verlo en la prctica que
escribirlo; pero despus de un momento, llegar a ser una cosa natural para Vd.
_______________________________________________________________________________________________________________11.2.   *
 *tar, el archivador en ci@


11.2        tar,  el  archivador  en  cinta



11.2.1       Introduccin



11.2.2       Opciones principales



11.2.3       Modificadores



11.2.4       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
desarrolladores necesitaron un comando de bajo nivel para copiar datos entre dispositivos.  Como
tenan prisa, decidieron tomar prestada la sintaxis usada en las mquinas IBM-360, y desarrollar ms
tarde un interfaz consistente con la de los otros comandos. El tiempo pas, y todos se acostumbraron
tanto con la manera extraa de usar dd que ya ha quedado as.  No se si es verdad, pero es una
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
filtro, esto es, lee por defecto de la entrada estndar y escribe en la salida_estndar._ Por tanto, si
Vd. escribe slo dd, la terminal se queda quieta, esperando una entrada, y un |_Ctrl-C_|es la nica
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
despus del signo de igual; esto sola ser molesto, porque el intrprete de comandos no expanda un
nombre de fichero en esta situacin, pero la versin de bash presente en Linux es bastante inteligente,
as que Vd. no tiene que preocuparse por eso. Es tambin importante recordar que todos los valores
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     *
 *                                 @


    El significado de las opciones se explica a continuacin.



  if=archivo_entrada y of=archivo_salida instruye a dd a respectivamente leer de archivo_entrada  y
       escribir a archivo_salida.  En el ltimo caso, el fichero 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
       operacin. Mire tambin la opcin "notrunc"   .


  ibs=nn y obs=nn especifican cuantos bytes deben ser ledos 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 ficheros planos11.  Estos parmetros son muy importantes cuando se usa
       dispositivos especiales como entrada o salida; por ejemplo, leer de la red debera establecer
       "ibs"  a 10 kbyte, mientras que una disquetera 12 de 3.5"de alta densidad tiene como tamao
       natural de bloque 18 kbyte. Fallar al establecer estos valores podra repercutir no slo a largo
       plazo al llevar a cabo el comando, sino inclusive en errores de expiracin de plazo, as que
       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 buffer de conversin a nn bytes. Este buffer se usa cuando se traduce de ASCII
       a EBCDIC, o desde un dispositivo no ablocado a uno ablocado13.  Por ejemplo, los ficheros
       creados bajo VMS tienen a menudo un tamao de bloque de 512, as que se tiene que poner
       "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 final de la
       entrada y al principio de la salida.  Por supuesto,  el  ltimo caso tiene sentido si se da la
       conversin "notrunc"     (ver abajo).  Cada tamao de bloque es el valor de "ibs"   ("obs"  ).
       Cuidado: si no establece el "ibs"  y escribe "skip=1b"    Vd. est realmente omitiendo 512x512
       bytes, esto es 256KB. No es precisamente lo que Vd. quera, >no?


  count=nbl  pretende copiar slo nbl  bloques de la entrada, cada uno de los tamaos dados por
       "ibs" .  Esta opcin, junto con la previa, se vuelve til si, por ejemplo, Vd. tiene un fichero
       corrupto y quiere recuperar cuanto sea posible de l. Vd. debe omitir la parte ilegible y copiar
       lo que resta.


  conv=conversin,[conversin. . . ] transforma el fichero de la manera que se especifica en sus argumen-
       tos.  Transformaciones posibles son "ascii"   , que convierte de EBCDIC a ASCII; "ebcdic"
       y "ibm"  ,  las cuales realizan una conversin inversa (<s,  no existe una nica conversin de
       EBCDIC a ASCII!  La primera es la estndar, pero la segunda funciona mejor cuando se im-
       primen ficheros en una impresora IBM); "block"  , la cual rellena registros terminados en nueva
       lnea del tamao de "cbs"  , reemplazando los cambios de lnea con espacios finales; "unblock"   ,
       que realiza lo contrario (elimina espacios finales, y los reemplaza con cambios de lnea); "lcase"
       y "ucase"  , para convertir a minsculas y maysculas, respectivamente; "swab"  , que intercam-
       bia cada par de bytes de entrada (por ejemplo, para usar un fichero que contiene enteros de
_____________________________________________11
    N.T.: plain files
  12N.T.: floppy
  13N. del T.: ablocado se refiere a la caracterstica de agrupamiento en bloques de los datos en el dispositivo.
_______________________________________________________________________________________________________________11.4.   *
 *sort, el clasificador de@


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



11.3.2       Ejemplos


El ejemplo cannico es con el nico que Vd. probablemente ha chocado hasta ahora, cuando intent
crear el primer disco de Linux:  como escribir a un disco sin un sistema de ficheros MS-DOS. La
solucin es simple:



$  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
este caso no habra hecho ningn perjuicio si en vez de "obs"  usara sencillamente el "bs"  _inclusive
podra haber sido un poquito ms rpido. Observe la explicacin del nmero de sectores a escribir
(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 til de dd est relacionada con la copia de seguridad de la red. Supongamos que
estamos en una mquina alfa y que en la mquina beta est la unidad de cinta /dev/rst0 con un
fichero tar que estamos interesados en obtener. Tenemos los mismos privilegios en ambas mquinas,
pero no hay espacio en beta para volcar 14 el fichero tar. En este caso, podramos 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
para realizar la lectura de la cinta. Los tamaos de entrada y salida estn establecidos a los valores
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 flujo de bytes el
cual podra ser obtenido de la cinta, excepto el hecho de que llega de una manera bastante errtica,
y la opcin B es necesaria.

    <Ah! Casi lo olvidaba: No creo para nada que dd sea un acrnimo de "data duplicator", pero al
menos es una manera divertida de recordar su significado. . .



11.4        sort,  el  clasificador  de  datos



11.4.1       Introduccin



11.4.2       Opciones



11.4.3       Ejemplos

_____________________________________________14
    N.T.: dump
_______________________________________________________________________________________________________________128     *
 *                                 @






Captulo  12



Errores,   equivocaciones,   bugs,   y



otras   molestias



          Unix nunca fue diseado para evitar que la gente hiciera cosas estpidas, porque esa
                       poltica les habra evitado tambin hacer cosas inteligentes.
                                                                                           Doug Gwyn



12.1        Evitando  errores



Muchos usuarios hablan de su frustracin con el sistema operativo Unix en alguna ocasin, a menudo
a  causa  de  lo  que  ellos  mismos  han  hecho.   Una  caracterstica  del  sistema  operativo  Unix  que
muchos usuarios adoran cuando estn trabajando bien, y odian despus de una sesin hasta bien
avanzada la noche, es que muy pocas rdenes piden confirmacin. Cuando un usuario est despierto
y funcionando, raramente piensa sobre ello, y esto es una ventaja, ya que le permite trabajar ms
eficientemente.

    De todos modos, hay algunas desventajas. rm y mv no piden nunca confirmacin, y esto conduce
frecuentemente a problemas.  Por eso, veamos una pequea lista que puede ayudarle a evitar el
desastre total:



    o  <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 regular-
       mente!  Una vez a la semana es suficiente para salvar muchos ficheros.  Para ms informacin
       consulte The Linux System Administrator's Guide.


    o  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 ficheros
       en cada una de las mquinas.  Si tiene acceso a una unidad de disquetes, puede hacer copias
       de seguridad en disquetes de su material crtico.  En el peor de los casos, mantenga copias
       adicionales del material ms importante que haya en su cuenta en un directorio separado.


                                                      129
_______________________________________________________________________________________________________________130     *
 *                       Captu@


    o  Piense sobre las rdenes, especialmente las "destructivas" como mv, rm, y cp antes de actuar.
       Debe ser tambin cuidadoso con las redirecciones (>) _sobreescribirn sus ficheros cuando
       no est prestando atencin.  Incluso el ms inofensivo de los comandos puede convertirse en
       siniestro:


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


       puede convertirse fcilmente en desastre:


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


    o  El autor tambin recomienda, a partir de su propia experiencia personal, no hacer limpieza
       de ficheros 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.


    o  Sgale la pista a su directorio actual.  A veces,  el prompt que est usando no muestra en
       que  directorio  est  usted  trabajando,  y  el  peligro  acecha.   <Es  triste  leer  un  mensaje  en
       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 podra hacer muy infeliz al usuario, al ver como eliminaron el
       fichero de contraseas de su sistema. <Sin l la gente no puede acceder!



12.2        Qu  hacer  cuando  algo  va  mal



12.3        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 difciles de encontrar y slo aparecen bajo
ciertas circunstancias.

    Ante todo, >qu es un error?  Un ejemplo de error es si le pide al ordenador que calcule "5+3"
y contesta "7".  Aunque este es un ejemplo trivial de que puede ir mal, la mayora de los errores
en programas de computadoras se relacionan con la aritmtica en alguna forma extremadamente
extraa.
_____________________________________________1
    Un foro de discusin internacional en Usenet, que trata sobre la administracin de computadoras Unix.
   2Bug: (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
trataba de resolver un error en el Mark II de Harvard detect que la causa era una polilla de verdad que se hab***'*
 *ia
colado entre las vlvulas y provocaba pequeos cortocircuitos al revolotear de un lado a otro.
_______________________________________________________________________________________________________________12.3.   *
 *No es fallo tuyo        @


12.3.1       Cuando hay un error


Si la computadora da una respuesta errnea (<compruebe que la respuesta es errnea!) o se bloquea,
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 finaliza nunca su ejecucin, puede ser un error, pero debe asegurarse de que no
le ha pedido que est durante mucho tiempo haciendo lo que usted quera que hiciera.  Pida ayuda
si no sabe lo que haca el comando.

    Algunos mensajes le alertarn de la existencia de errores.  Algunos mensajes no son errores.
Revise la seccin 3.4 y el resto de la documentacin para estar seguro de que no son mensajes
informativos normales.  Por ejemplo, mensajes como "disk full" (disco lleno) o "lp0 on fire" (lp0
ardiendo) no son problemas de software, sino algo incorrecto en su hardware_no hay suficiente
espacio libre en el disco, o la impresora est mal.

    Si no puede encontrar informacin sobre un programa, es un error en la documentacin, y debera
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
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
usted usa, pero no necesariamente un error en su cerebro.



12.3.2       Notificando un error


Cuando est seguro de haber encontrado un error, es importante asegurarse de que su informacin
llega al lugar adecuado. Intente encontrar que programa causa el error_si 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.

    El mtodo preferido para enviar notificaciones de errores en el mundo Linux es va correo elec-
trnico.  Si no tiene acceso al correo electrnico puede ponerse en contacto con la persona que le
suministr Linux _eventualmente, encontrar alguien que o bien tiene correo electrnico, o vende
Linux comercialmente y por tanto quiere eliminar el mayor nmero de errores posibles.  Recuerde,
en todo caso que nadie est obligado a corregir ningn error a menos que tenga un contrato.

    Cuando enve una notificacin de error, incluya toda la informacin que se le ocurra. Esto incluye:


    o  Una descripcin de lo que usted piensa que es incorrecto.  Por ejemplo, "Obtengo 5 cuando
       calculo 2+2" o "Dice segmentation  violation  --  core  dumped".  Es importante decir ex-
       actamente que est sucediendo para que el responsable del mantenimiento pueda corregir su
       error.


    o  Incluya cualquier variable de entorno relevante.


    o  La versin de su ncleo (mire en el fichero /proc/version) y sus bibliotecas de sistema (mire
_______en_el_directorio_/lib_si_no_puede_descifrarlo,_enve un listado de /lib).
   3<Especialmente en sta!
_______________________________________________________________________________________________________________132     *
 *                       Captu@


    o  >Cmo ejecut el programa en cuestin?, o, si era un error del ncleo, >qu estaba haciendo
       en ese momento?.


    o  Toda la informacin complementaria. Por ejemplo, el comando w puede no mostrar el proceso
       actual para ciertos usuarios.  No diga simplemente, "w no funciona para cierto usuario".  El
       error podra ocurrir debido a que el nombre del usuario tiene ocho caracteres de longitud, o
       cuando est accediendo a travs de la red. En su lugar diga, "w no muestra el proceso actual
       para el usuario greenfie cuando accede a travs de la red".


    o  Y recuerde, sea amable. La mayora de la gente trabaja en el software libre por el gusto de hac-
       erlo, y porque tienen un gran corazn. No los amargue_la comunidad Linux ha desilusionado
       ya a demasiados desarrolladores, y an es pronto en la vida del Linux.




Apndice  A



Introduccin   a   vi



vi (pronunciado "vi ai" en ingls, o "uve i") es en realidad el nico editor que se puede encontrar en
prcticamente cualquier instalacin de Unix. Este editor fue escrito originalmente en la Universidad
de California en Berkeley y se puede encontrar versiones en casi cualquier edicin de Unix, includo
Linux.   Al principio cuesta un poco acostumbrarse a l,  pero tiene muchas caractersticas 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
gusta Emacs, puede estar interesada en aprender vi.
                                                                                            ___
    Es necesaria una breve resea histrica de vi para comprender cmo la tecla |_k_|puede significar
mover el cursor arriba una lnea y porqu hay tres diferentes modos de uso. Si no le apetece aprender
a usar el editor, los dos tutoriales le llevarn de ser un crudo principiante hasta tener el suficiente
conocimiento del grupo de comandos que usted puede llegar a usar. El captulo tambin incluye una
gua de comandos, que sirve de til referencia para tenerla cerca del terminal.

    Incluso si vi no se convierte en su editor de texto normal, el conocimiento de su uso no ser
desperdiciado.  Es casi seguro que el sistema de Unix que use tendr alguna variante del editor vi.
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



Los editores de texto en la antig"uedad funcionaban en modo de una lnea y se usaban tpicamente
desde terminales no inteligentes de impresin. Un editor tpico que operaba en este modo es Ed. El
editor es potente y eficiente, y usa una cantidad muy pequea de recursos del sistema, y funcionaba
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 lnea 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
puede ser iniciado desde la lnea de comando usando el comando vi, o desde dentro de ex.


                                                      133
_______________________________________________________________________________________________________________134     *
 *                                 @


    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 oficial en la dis-
tribucin del Unix AT&T System V. Se ha ido haciendo cada vez ms popular,  incluso con la
competencia de los modernos editores de pantalla completa.

    Debido a la popularidad de vi existen muchas variantes clnicas y se pueden encontrar varias
versiones para la mayora de los sistemas operativos.  No es el propsito de este captulo el incluir
todos los comandos disponibles bajo vi o sus variantes. Muchos clones han aumentado y modificado
el comportamiento original de vi. La mayora de los clones no soportan todos los comandos originales
de vi.

    Si tiene un buen conocimiento de trabajo con ed entonces vi presenta una curva de aprendiza-
je ms suave.  Aunque usted no tenga ninguna intencin de usar vi como su editor regular,  el
conocimiento bsico de vi solamente puede serle una ventaja.



A.2        Rpido  tutorial  de  Ed



El propsito de esta gua es que usted empiece a usar ed. ed est diseado para ser fcil de usar, y
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.2.1       Crear un fichero


ed slo puede editar un fichero a la vez.  Siga el siguiente ejemplo para crear su primer fichero de
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 verificar el contenido del fichero usando la utilidad de concatenacin de Unix.



/home/larry$  cat  primero.txt



    El ejemplo anterior ha mostrado un nmero de puntos_importantes. Cuando invoca ed como en
el ejemplo tendr un fichero vaco.  La tecla |_a_|se usa para aadir texto al fichero.  Para finalizar
la sesin de entrada de texto,_se usa un punto ___|_.|en la primera columna del texto.  Para salvar el
texto_a un fichero, la tecla |_w_ |se usa en combinacin con el nombre del fichero y finalmente la tecla

|_q_|se usa para salir del editor.
_______________________________________________________________________________________________________________A.2.   R*
 *pido tutorial de Ed@


    La observacin ms importante es que hay dos modos de operacin.  Al principio el editor est
en modo de comandos.  Un comando se define 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 fichero existente


Para aadir una lnea de texto a un fichero existente siga el siguiente ejemplo:



/home/larry$  ed  primero.txt
a
Esta  es  una  nueva  linea  de  texto.
.
w
q



    Si comprueba el fichero con cat ver que hay una nueva lnea insertada entre las dos lneas
originales. >Cmo supo ed dnde poner la nueva lnea de texto?.
                                                                                    ___
    Cuando ed lee el fichero, se acuerda de cual es la lnea actual. El comando |_a_|aadir el texto ___
despus de la lnea actual. ed tambin puede poner el texto antes de la lnea actual con la tecla |_i|_
. El efecto ser la insercin del texto antes de la lnea actual.

    Ahora es fcil ver que ed opera en el texto lnea por lnea. Todos los comandos se pueden aplicar
a una lnea elegida.

    Para aadir una lnea de texto al final de un fichero.



/home/larry$  ed  primero.txt
           $a
           La  ultima  linea  de  texto.
           .
           w
           q

                               ____
    El modificador de comandos ||$_||le dice a ed que aada la lnea despus_de la ltima lnea. Pa*
 *ra

aadir la lnea despues de la primera lnea el modificador sera |_1_|. Ahora tenemos la posibilidad de
seleccionar la lnea para aadir una lnea de texto despus del nmero de lnea o insertar una *
 *lnea
antes del nmero de lnea.
                                                                    ____
    >Cmo sabemos lo que hay en la lnea actual? El comando |_p_|muestra el contenido de la lnea
actual.  Si quiere hacer que la lnea actual sea la lnea 2, y a la vez quiere ver el contenido de esa
lnea entonces haga lo siguiente.



/home/larry$  ed  primero.txt
           2p
           q
_______________________________________________________________________________________________________________136     *
 *                                 @


A.2.3       Nmeros de lnea en detalle

                                                                                 ____
Ha visto cmo mostrar el contenido de la lnea actual, usando el comando |_p_|.  Tambin sabemos
que hay modificadores del nmero de lnea para los comandos. Para ver el texto de la segunda lnea,



           2p



    Hay algunos modificadores especiales_que se refieren a posiciones que pueden cambiar durante el
tiempo que edita un fichero. El ||$_||es la ltima lnea del texto. Para ver la ltima lnea,



           $p



    El nmero de lnea actual usa un simbolo de modificador especial ___|_.|.  Para mostrar la lnea
actual usando un modificador,



           .p



    Esto puede parecer innecesario, aunque es muy til en el contexto de los grupos de nmeros de
lnea.

    Para mostrar el contenido del texto desde la lnea 1 a la lnea 2, se le debe pasar el alcance.



           1,2p



    El primer nmero se refiere a la lnea de comienzo y el segundo se refiere a la ltima lnea.  La
lnea actual ser por consiguiente el segundo nmero del grupo de lneas.

    Si quiere mostrar el contenido del fichero desde el comienzo hasta la lnea actual,



           1,.p



    Para mostrar el contenido desde la lnea actual hasta el final del fichero,



           .,$p



    Todo lo que queda es mostrar el contenido de todo el fichero, y esto queda como un ejercicio
para usted.

    >Cmo puede borrar las dos primeras lneas del fichero?



           1,2d

               ____
    El comando |_d_|borra el texto lnea por lnea. Si usted quisiera borrar el contenido completo, lo
hara con:



           1,$d
_______________________________________________________________________________________________________________A.3.   R*
 *pido tutorial de Vi@


    Si usted ha hecho muchos cambios y no quiere salvar los contenidos del fichero, lo mejor es salir
del editor sin escribir el fichero antes.


    La mayora de los usuarios no usan ed como el principal editor.  Los editores ms modernos
ofrecen una pantalla completa de edicin y grupos de comandos ms flexibles. ed ofrece una buena
introduccin a vi y ayuda a explicar cmo se originaron los comandos de vi.



A.3        Rpido  tutorial  de  Vi



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



A.3.1       Ejecutar vi



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

      i   insertar texto a la izquierda del cursor.
      a   aadir texto a la derecha del cursor.

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



       Las  pulgas  grandes  tienen  pequeas  pulgas<Intro>
          sobre  sus  espaldas  para  que  les  muerdan.<Intro>
       Y  las  pulgas  pequeas  tienen  pulgas  mas  pequeas<Intro>
          y  as'i  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>


                                             ______
    Fjese que tiene que pulsar la tecla |_Esc_|para finalizar la insercin y volver al modo de comando.
_______________________________________________________________________________________________________________138     *
 *                                 @


A.3.2       Comandos de movimiento del cursor


  h   mueve el cursor un espacio a la izquierda.
  j   mueve el cursor un espacio abajo.
  k   mueve el cursor un espacio arriba.
  l   mueve el cursor un espacio a la derecha.

    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 lnea superior, la pantalla parpadear momentaneamente o el terminal sonar.  No se
preocupe, no muerde, y su fichero no saldr daado.



A.3.3       Borrar texto


  x     borra el carcter que hay en el cursor.
  dd    borra la lnea donde est el cursor.
                                                                                                        ___
    Mueva el cursor a la primera lnea_y_pngalo de modo que est bajo la n. Pulse la letra |_x_|, y la
n desaparecer._ Ahora pulse la letra |_i|_para cambiarse al modo de insercin y vuelva a teclear la

n. Pulse |_Esc_|cuando haya terminado.



A.3.4       Salvar un fichero


  :w    salvar (escribir al disco).
  :q    salir.
                                                                       ______
    Asegrese de que est en modo de comando pulsando la tecla |_Esc_|.  Ahora pulse :w.  Esto
salvar su trabajo escribindolo a un fichero de disco.
                                   ____
    El comando para salir de vi es |_q_|.  Si quiere combinar el salvar y salir, escriba :wq.  Tambin
hay una abreviacin para :wq _ ZZ. Dado que gran parte del trabajo de programacin consiste en
ejecutar un programa, encontrar algn problema y llamar el programa en el editor para hacer algn
pequeo cambio, y luego volver a salir del editor para ejecutar el programa otra vez, ZZ ser un
comando que usar a menudo. (En realidad, ZZ no es un sinnimo exacto de :wq _ si no ha hecho
ningn cambio al fichero que est editando desde la ultima vez que lo salvo, ZZ simplemente saldr
del editor mientras que :wq salvar (redundantemente) el fichero antes de salir.)

    Si usted se lo ha cargado todo sin esperanzas_y simplemente quiere volver a empezarlo todo,
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?


Los diez comandos que acaba de aprender deberan ser suficientes para su trabajo.  Sin embargo,
solamente ha rozado la superficie del editor vi. Hay comandos para copiar material de un lugar del
fichero a otro, para mover material de un lugar a otro, para mover material de un fichero a otro,
para ajustar el editor a sus gustos personales, etc. Con todo, hay unos 150 comandos.
_______________________________________________________________________________________________________________A.4.   T*
 *utorial avanzado de Vi  @


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
comandos. La mayora de los usuarios de vi se sienten un poco incmodos al principio, sin embargo
despus de algn tiempo se encuentran vidos de mayor conocimiento de los comandos disponibles.

    El siguiente tutorial asume que el usuario ha completado el tutorial rpido (arriba) y por lo tanto
se siente a gusto con vi. Este tutorial expone algunas de las caractersticas ms poderosas de ex/vi
desde copiar texto hasta la definicin de macros.  Hay una seccin sobre ex y los parmetros para
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
ejemplo, que se pueda permitir destruir.

    Este tutorial no expone todos los comandos de vi, aunque se cubren los ms comnmente usados
y an otros adicionales.  Aunque usted elija usar otro editor de texto, se espera que apreciar vi y
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
de movimiento.

      h   mueve el cursor un espacio a la izquierda.
      j   mueve el cursor una lnea hacia abajo.
      k   mueve el cursor una lnea hacia arriba.
      l   mueve el cursor un espacio a la derecha.

Algunas implementaciones tambin permiten el uso de las teclas de cursor para mover el cursor.

           w        mueve al principio de la siguiente palabra.
           e        mueve al final de la siguiente palabra.
           E        mueve al final de la siguiente palabra antes de un espacio.
           b        mueve al principio de la palabra anterior.
           0        mueve al principio de la lnea actual.
           ^        mueve a la primera palabra de la lnea actual.
           $        mueve al final de la lnea.
         <CR>       mueve al principio de la siguiente lnea.
           -        mueve al principio de la lnea anterior.
           G        mueve al final del fichero.
          1G        mueve al principio del fichero.
          nG        mueve a la lnea n.
      <Cntl>  G     muestra el nmero de lnea actual.
           %        va al parntesis correspondiente.
           H        mueve a la lnea superior en pantalla.
           M        mueve a la lnea de en medio de la pantalla.
           L        mueve al final de la pantalla.
          n_        mueve el cursor a la columna n.
_______________________________________________________________________________________________________________140     *
 *                                 @


    El texto se desplaza automticamente cuando el cursor alcanza la parte superior o inferior de la
pantalla. Tambin hay comandos que permiten controlar el desplazamiento del texto.

      <Cntl>  f    desplaza una pantalla hacia delante.
      <Cntl>  b    desplaza una pantalla hacia atrs.
      <Cntl>  d    desplaza media pantalla hacia abajo.
      <Cntl>  u    desplaza media pantalla hacia arriba

    Los comandos anteriores controlan el movimiento del cursor. Algunos de los comandos usan un
modificador de comandos en la forma de un nmero que precede al comando.  Esta caracterstica
normalmente repite el comando ese nmero de veces.

    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, podra usar el modificador_de
comandos con el comando insertar. Introduzca_el nmero de repeticiones (n) y despus |_i|_seguido

por el espacio y luego pulse la tecla |_Esc_|.

      ni   inserta algn texto y lo repite n veces.
                                                                                                             ____
    Los comandos que tratan con lneas usan el modificador para referirse al nmero de lnea. El |_G_|
es un buen ejemplo.

      1G   mueve el cursor a la primera lnea.

    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 lnea desde la lnea de comandos.



           vi  +10  mi_fichero.tex



    Este comando abre el fichero llamado mi_fichero.tex y pone el cursor 10 lneas ms abajo del
comienzo del fichero.

    Pruebe los comandos de esta seccin. Muy poca gente los recuerda todos en una sola sesin. La
mayor parte de los usuarios solamente utiliza una parte de estos comandos.

    Ahora se puede mover, pero >cmo modificar el texto?



A.4.2       Modificacin del texto


El propsito es cambiar el contenido del fichero y vi ofrece un amplio conjunto de comandos para
ayudarnos en este proceso.

    Esta seccin se concentra en aadir texto, cambiar el texto existente y borrar texto.  Al final
de esta seccin usted tendr el conocimiento para crear cualquier fichero de texto que desee.  Las
secciones restantes se concentran en comandos ms especializados y convenientes.
                                                                                       _______
    Cuando usted teclea nuevo texto puede introducir varias lneas usando la_tecla_|_Intro_|._Si hay que

corregir un error tipogrfico mientras introduce texto, puede usar la tecla |_Retroceso__|para mover el
cursor sobre el texto. Las varias implementaciones de vi se comportan de manera diferente. Algunas
_______________________________________________________________________________________________________________A.4.   T*
 *utorial avanzado de Vi  @


simplemenente mueven el cursor hacia atrs y el texto sigue vindose y es aceptado. Otras borran el
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
no es el normal_de_vi.__Si_el texto es visible y usa la tecla |_Esc_|mientras est en la lnea en la

que puls |_Retroceso__|, entonces el texto que hay despus del cursor se borrar.  Use el editor para
acostumbrarse a este comportamiento.

      a   Aadir texto a partir de la posicin actual del cursor.
      A   Aadir al final de la lnea.
      i   Insertar texto a la izquierda del cursor.
      I   Insertar texto a la izquierda del primer caracter que no sea espacio en la lnea actual.
      o   Abrir una nueva lnea y aade texto debajo de la lnea actual.
      O   Abrir una nueva lnea y aade texto encima de la lnea actual.

    vi tiene un pequeo grupo de comandos para borrar texto que se pueden mejorar con el uso de
modificadores.

       x    Borrar el caracter que est debajo del cursor.
      dw    Borrar desde la posicin actual al final de la palabra.
      dd    Borrar la lnea actual.
       D    Borrar desde la posicin actual al final de la lnea.

    Los modificadores se pueden usar para aumentar la potencia de los comandos.  Los siguientes
ejemplos son un subgrupo de las posibilidades.

       nx    Borrar n caracteres desde el que est bajo el cursor.
      ndd    Borrar n lneas.
      dnw    Borrar n palabras (igual que ndw).
       dG    Borrar desde la posicin actual hasta el final del fichero.
      d1G    Borrar desde la posicin actual hasta el principio del fichero.
       d$    Borrar desde la posicin actual al final de la lnea. (Esto es igual que D).
      dn$    Borrar desde la lnea actual al final de la ensima lnea.

    La lista de comandos anterior muestra que la operacin de borrado puede ser muy til. Esto se
hace patente cuando se aplica_en_combinacin con los comandos de movimiento de cursor. Hay que
hacer notar que el comando |_D_ |ignora los modificadores que se le apliquen.


    En ocasiones usted puede necesitar deshacer los cambios al texto.   Los siguientes comandos
recuperan el texto que haba antes de hacer cambios.

       u     Deshacer el ltimo comando.
       U     Deshacer todos los cambios ocurridos en la lnea actual.
      :e!    Editar otra vez. Recupera el estado del fichero desde la ltima vez que se salv.

    vi no slo le permite deshacer_cambios, tambin puede dar la vuelta al comando "deshacer". Por
ejemplo,_si usamos el_comando_|_5dd_ |para borrar 5 lneas, se pueden recuperar usando el comando

|_u_|. Si usted usa |_u_|una vez ms, las 5 lneas desaparecern de nuevo.

    vi ofrece comandos que permiten que se hagan cambios al texto sin tener que borrar y volver a
escribir:
_______________________________________________________________________________________________________________142     *
 *                                 @



      rc     Reemplazadelecaracterrbajoeelccursorhconalasletrai"c".seMueveuelscursoraaelal modificador de repetici*
 *n, por ejemplo: 2rc.

       R     Sobreescribe el texto con el nuevo texto..
      cw     Cambia el texto de la palabra actual.
      c$     Cambia el texto desde la posicin actual al final de la lnea.
      cnw    Cambia las siguientes n palabras. (Igual que ncw).
      cn$    Hacer cambios hasta el final de la ensima lnea.
       C     Hacer cambios hasta el final de la lnea actual.
      cc     Hacer cambios en la lnea actual.
       s     Sustituye el texto que escriba por el caracter actual.
      ns     Sustituye el texto que escriba por los siguientes n caracteres.

    Las series de comandos_de_cambio que permiten que se introduzca un grupo de carcteres se
terminan con la tecla |_Esc_|.
               _____
    El comando |_cw_ |empieza en la posicin actual en la palabra y termina al final de la palabra.
Cuando use un comando de cambio que especifica la distancia sobre la que se aplicar el cambio,
vi pondr un $ en la ltima posicin de carcter. El nuevo texto puede sobrepasar o no llegar a la
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
final. Esta seccin introduce los buffers1 con y sin nombre junto a los comandos que cortan y pegan
el texto.

    La copia de texto se realiza en tres pasos principales:


   1.  Copia del texto a un buffer.


   2.  Movimiento del cursor al lugar de destino.


   3.  Pegar (poner) el texto en el buffer de edicin.


    El buffer de edicin no es sino el propio fichero en el que usted est trabajando.
                                                          ___
    Para Copiar texto al buffer sin nombre use el comando |_y_|.


      yy     Mueve una copia de la lnea actual al buffer sin nombre.
       Y     Mueve una copia de la lnea actual al buffer sin nombre.
      nyy    Mueve las siguientes n lineas al buffer sin nombre.
      nY     Mueve las siguientes n lneas al buffer sin nombre.
      yw     Mueve una palabra al buffer sin nombre.
      ynw    Mueve n palabras al buffer sin nombre.
      nyw    Mueve n palabras al buffer sin nombre.
______y$_____Mueve_el_texto_desde_la_posicin_actual al final de la lnea al buffer sin nombre.
   1N. del T.: "buffer"es una palabra inglesa que se refiere a un espacio reservado en memoria para guardar alguna
informacin temporalmente.  En este caso se usan buffers para almacenar una copia temporal del texto que usted
desea copiar o mover.
_______________________________________________________________________________________________________________A.4.   T*
 *utorial avanzado de Vi  @


    El buffer sin nombre es un buffer temporal que puede ser fcilmente afectado por otros comandos
comunes.  Hay ocasiones en las cuales necesitamos mantener el contenido de un buffer durante un
perodo ms extenso de tiempo. En este caso se usara un buffer con nombre. vi tiene 26 buffers con
nombre.  Los buffers usan las letras del alfabeto como el_nombre_de identificacin.  Para distinguir
un comando de un buffer con nombre, vi usa el caracter |_"_|. Cuando use un buffer con nombre de
letra minscula los contenidos se sobre escriben, mientras que el uso del nombre en letra mayscula
aade el nuevo texto al contenido actual.

       "ayy     Mueve la lnea actual al buffer con nombre a.
       "aY      Mueve la lnea actual al buffer con nombre a.
       "byw     Mueve la palabra actual al buffer con nombre b.
       "Byw     Aade la palabra actual al contenido del buffer b.
      "by3w     Mueve las siguientes 3 palabras al buffer b.
                   ____
    Use el comando |_p_|para pegar el contenido del buffer al buffer de edicin.


        p     Pegar del buffer sin nombre a la DERECHA del cursor.
        P     Pegar del buffer sin nombre a la IZQUIERDA del cursor.
       nP     Pegar n copias del buffer sin nombre a la IZQUIERDA del cursor.
       "aP    Pegar del buffer con nombre "a" a la DERECHA del cursor.
      "b3P    Pegar 3 copias del buffer 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
texto que desea copiar arrastrando el cursor del ratn sobre el texto. Si mantiene pulsado el botn
izquierdo del ratn y arrastra el ratn desde el comienzo al final, invertir el vdeo del texto.  Esta
operacin automticamente coloca el texto en un buffer reservado para el servidor de X Window.
Para pegar el texto, pulse el botn de enmedio. Acurdese de poner vi en modo de insercin dado
que la entrada de texto se podra interpretar como comandos y el resultado sera cuando menos
desagradable.  Usando la misma tcnica se puede copiar una sola palabra haciendo doble click con
el botn izquierdo del ratn sobre la palabra. Solamente se copiar esa nica palabra. Para pegarla
se usa el mismo procedimiento que ateriormente. Los contenidos del buffer slo cambian cuando se
marca otro bloque de texto.

    Para mover un bloque de texto son necesarios tres pasos.


    1. Borrar el texto para ponerlo en un buffer con o sin nombre.


    2. Mover el cursor a la posicin de destino.


    3. Pegar el buffer.


    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 lnea se borra y se coloca en el buffer sin nombre. Luego puede poner el
contenido del mismo modo que lo hizo cuando copi el texto en la posicin deseada.

       "add     Borrar la lnea y ponerla en el buffer con nombre a.
      "a4dd     Borrar cuatro lneas y ponerlas en el buffer con nombre a.
        dw      Borrar una palabra y ponerla en el buffer sin nombre.

    Vea la seccin sobre el modificado de texto para ver ms ejemplos de borrado de texto.
_______________________________________________________________________________________________________________144     *
 *                                 @


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



A.4.4       Bsqueda y cambio de texto



vi dispone de varios comandos para bsqueda.  Usted puede buscar desde un solo carcter hasta
una expressin completa.
                                                                           ___    ___
    Los dos comandos principales de bsqueda basados en caracteres son |_f_|y |_t_|.


      fc   Encuentra el siguiente caracter c. Se mueve a la derecha del siguiente.
      Fc   Encuentra el siguiente caracter c. Se mueve a la izquierda del anterior.
      tc   Se mueve a la DERECHA al caracter anterior al siguiente c.

      Tc   SevmueveearlasIZQUIERDAialocaracternqueesiguesaldceanterior.vi(Enealgunassto es lo mismo que Fc).

      ;    Repite el ltimo comando f,F,t,T.
      ,    Igual que (;) pero cambiando la direccin del comando original.

    Si el caracter que usted buscaba no se encuentra, vi emitir un pitido o le dar otro tipo de
seal (tal vez un parpadeo de toda la pantalla).


    vi le permite buscar una cadena de texto en el buffer de edicin.


      /tira    Busca hacia la derecha y abajo la siguiente instancia de "tira".
      ?tira    Busca hacia la izquierda y arriba la siguiente instancia de "tira".
        n      Repite el ltimo comando / o ?.
        N      Repite el ltimo comando / o ? en la direccin opuesta.

                            ____     ___
    Cuando use los comandos ||/_||or |_?_|, la ltima lnea en la parte baja de la pantalla se vaciar.
                                                                           _______
Introduzca en esa lnea 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
ser una descripcin de un conjunto de tiras. La descripcin se construye usando texto entremezclado
con caracteres especiales. Los caracteres especiales de una expresin regular son .  * [  ]  ^ $.


       .     Vale por cualquier carcter excepto el carcter de nueva lnea.
      "      Tecla de "escape" para cualquier caracter especial.
       *     Vale por 0 o ms instancias del caracter anterior.
      [ ]    Busca exactamente uno de los caracteres includos entre los corchetes.
       ^     El caracter que sigue a ^ debe estar al principio de la lnea.
       $     El caracter que precede a $ se busca al final de la lnea.
      [^]    Busca cualquier cosa que no se encuentre despues de ^ dentro de los corchetes.
      [-]    Busca un rango de caracteres.

    El nico modo de acostumbrarse a usar las expresiones regulares es usndolas.  A continuacin
mostramos varios ejemplos de uso:
_______________________________________________________________________________________________________________A.4.   T*
 *utorial avanzado de Vi  @


               c.ch             Coincide con coche, cacho, cochera, etc.
              c".pe             Coincide con c.pe, c.per, etc.
              sto*p             Coincide con stp, stop, stoop, etc.
             car.*n             Coincide con cartn, carrilln, carmen, etc.
              xyz.*             Coincide con xyz al final de la lnea.
               ^Los             Encuentra cualquier lnea que empiece con Los.
             abcdef$            Encuentra cualquier lnea que termine con abcdef.
             ^Solo$             Coincide con cualquier lnea que slo tenga la palabra "Solo".
           p[aiue]so            Coincide con paso, piso, puso, peso.
            Ver[D-F]            Coincide con VerD, VerE, VerF.
           Ver[^1-9]            Coincide con Ver siempre que a continuacin NO haya un nmero.
          the[ir][re]           Coincide con their, therr, there, theie.
      [A-Za-z][A-Za-z]*         Coincide con cualquier palabra.

    vi usa el modo de comandos de ex para llevar a cabo bsquedas y sustituciones.  Todos los
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
rango de lneas y sustituir la tira de caracteres que se busca.  El usuario puede pedir confirmacin
antes de que se realice la sustitucin. Merece la pena hacer una revisin de la representacin de los
nmeros de lnea en el tutorial de ed.

      :<prim>,<ult>s/<busca>/<sust>/g             Comando general.
      :1,$s/los/Los/g                             Buscar el fichero entero y sustituir los por Los.
      :%s/the/The/g                               % siginifica el fichero entero (igual que arriba).
      :.,5s/^.*//g                                Borra el contenido de la lnea actual hasta la quinta.
      :%s/los/Los/gc                              Sustituye "los" con "Los" preguntando antes de
                                                  hacer la operacin.
      :%s/^....//g                                Borra los primeros cuatro carcteres de cada lnea.

    El comando de bsqueda_es muy potente cuando se combina con las expresiones regulares. Si no
se incluye la directiva |_g_|entonces el cambio slo se aplica a la primera instancia que se encuentre
en cada lnea.

    En ocasiones usted quiere usar los caracteres de bsqueda en los caracteres de sustitucin.  Se
puede reescribir todo el comando en la lnea pero vi permite que los caracteres de sustitucin
incluyan algunos caracteres especiales.

      :1,5s/ayuda/&ndo/g         Sustituye ayuda por ayudando en las cinco primeras lneas.
           :%s/  */&&/g          Duplica el nmero de espacios entre palabras.

    El uso de la tira de caracteres completa_para bsqueda_tiene sus lmites y por lo tanto vi usa
los parntesis en secuencia de escape ||(_||y ||)_||para seleccionar el rango de la sustitucin. El uso de
                                     ____
un dgito en secuencia de escape |_1_|identifica el rango en el orden de la definicin y la sustitucin
se puede hacer.

         :s/"^"(.*"):.*/"1/g             Borra todo despues de e incluyendo los dos puntos.
      :s/"(.*"):"(.*")/"2:"1/g           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     *
 *                                 @


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



Apndice  B



The   GNU   General   Public   License



                                GNU GENERAL PUBLIC LICENSE
                                            Version 2, June 1991

Copyright Oc 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 software_to make sure the software is free for all its users. This General Public License applies
to most of the Free Software Foundation's 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) offer you this license


                                                      147
_______________________________________________________________________________________________________________148     *
 *                                 @


which gives you legal permission to copy, distribute and/or modify the software.

    Also, for each author's protection and ours, we want to make certain that everyone understands
that there is no warranty for this free software.  If the software is modified 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 reflect 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 effect making
the program proprietary.  To prevent this, we have made it clear that any patent must be licensed
for everyone's free use or not licensed at all.

    The precise terms and conditions for copying, distribution and modification 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 modifications and/or
       translated into another language.  (Hereinafter, translation is included without limitation in
       the term "modification".) Each licensee is addressed as "you".

       Activities other than copying, distribution and modification 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 Program's 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
       offer 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 modifications or work under the terms of
       Section 1 above, provided that you also meet all of these conditions:


         a. You must cause the modified files to carry prominent notices stating that you changed
            the files 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 modified 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 modified work as a whole.  If identifiable 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 offer, 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 offer 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 offer, in accord
            with Subsection b above.)


       The source code for a work means the preferred form of the work for making modifications to
       it.  For an executable work, complete source code means all the source code for all modules
       it contains, plus any associated interface definition files, plus the scripts used to control com-
       pilation 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     *
 *                                 @


       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 offering access to copy from a designated
       place, then offering 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 provid-
       ed 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 differ in detail to address new problems or concerns.

       Each version is given a distinguishing version number.  If the Program specifies 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 different,  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 WARRAN-
       TY 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 WARRAN-
       TY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIM-
       ITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
       A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PER-
       FORMANCE 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 WRIT-
       ING 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 CON-
       SEQUENTIAL 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     *
 *                                 @


       OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
       EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSI-
       BILITY 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 file to most effectively convey the exclusion of warranty; and each file should have at
least the "copyright" line and a pointer to where the full notice is found.



       one line to give the program's name and an idea of what it does.
       Copyright Oc  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 FIT-
       NESS 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 Oc  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 items_whatever 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 pro-
grams.  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  C



The   GNU   Library   General   Public



License



                            GNU LIBRARY GENERAL PUBLIC LICENSE
                                            Version 2, June 1991

Copyright Oc  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 first 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 software-to make sure the software is free for all its users.

    This license, the Library General Public License, applies to some specially designated Free Soft-
ware 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     *
 *                              Ap*@


    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 files 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) offer you
this license which gives you legal permission to copy, distribute and/or modify the library.

    Also, for each distributor's protection, we want to make certain that everyone understands that
there is no warranty for this free library.  If the library is modified 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 reflect 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
effect transforming the program into proprietary software.  To prevent this, we have made it clear
that any patent must be licensed for everyone's 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 different from the ordinary one;
be sure to read it in full, and don't 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 effectively 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 benefit 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 files, 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 modification follow.  Pay close
attention to the difference 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  Modifi-

cation



    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 conve-
       niently 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 modifications and/or translated straightforwardly into another language.
       (Hereinafter, translation is included without limitation in the term "modification".)

       "Source code" for a work means the preferred form of the work for making modifications to
       it.  For a library, complete source code means all the source code for all modules it contains,
       plus any associated interface definition files, plus the scripts used to control compilation and
       installation of the library.

       Activities other than copying, distribution and modification 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 Library's 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
       offer 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 modifications or work under the terms of
       Section 1 above, provided that you also meet all of these conditions:


         a. The modified work must itself be a software library.

         b. You must cause the files modified to carry prominent notices stating that you changed
            the files 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     *
 *                              Ap*@


         d. If a facility in the modified 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 effort 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-defined 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 modified work as a whole. If identifiable 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 offering access to copy from a designated place, then
       offering equivalent access to copy the source code from the same place satisfies 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 file 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 significant 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 defined by law.

       If such an object file 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 file 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 modification of the work
       for the customer's own use and reverse engineering for debugging such modifications.

       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 modified
            executable containing the modified Library. (It is understood that the user who changes
            the contents of definitions files in the Library will not necessarily be able to recompile the
            application to use the modified definitions.)

         b. Accompany the work with a written offer, valid for at least three years, to give the same
            user the materials specified in Subsection 6a, above, for a charge no more than the cost
_______________________________________________________________________________________________________________160     *
 *                              Ap*@


            of performing this distribution.

         c. If distribution of the work is made by offering access to copy from a designated place,
            offer equivalent access to copy the above specified 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 Library"must 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 find 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 differ in detail to address new problems or concerns.

       Each version is given a distinguishing version number. If the Library specifies a version number
       of this License which applies to it and a_ny 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     *
 *                              Ap*@


       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  WAR-
       RANTY 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 IS"WITHOUT WARRANTY
       OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMIT-
       ED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
       A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PER-
       FORMANCE OF THE LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DE-
       FECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
       CORRECTION.


  12.  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRIT-
       ING 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 CON-
       SEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
       LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING REN-
       DERED 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 file to most effectively convey the exclusion of warranty; and each file should
have at least the "copyright" line and a pointer to where the full notice is found.



       one line to give the library's 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;
_______________________________________________________________________________________________________________163


       either version 2 of the License, or (at your option) any later version.

       This library is distributed in the hope that it will be useful, but WITHOUT ANY WAR-
       RANTY; 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



    That's all there is to it!
_______________________________________________________________________________________________________________164     *
 *                              Ap*@






Apndice  D



>Qu   es   LuCAS?



El proyecto LuCAS (Linux en CAStellano) comenz, como tantas otras cosas ligadas a Linux, en un
bar tomando cervezas (reales, no virtuales). Era all por marzo de 1995 y ya se haba comentado en
las reas de FidoNet la necesidad de disponer de textos en castellano sobre Linux. Fue en aquel bar,
el bar Ekin de Algorta (Bizkaia), donde nos reunamos los usuarios de FidoNet todos los domingos,
donde surgi la idea de pasar a la accin. Tras discutirlo un poco, decidimos comenzar por traducir
algo que fuese  til para aquellos que comenzaban a dar sus primeros pasos en linux,  y cremos
que el "Installation & Getting Started" de Matt Welsh era el documento ms adecuado.  Como
era mucho trabajo para una sola persona, y haba mucha gente que se haba mostrado dispuesta a
colaborar, haba que hacerlo bien, y el trabajo de traducir un libro como ste requera una labor
de coordinacin que inmediatamente asumimos Ramn Gutirrez y yo, Alfonso Belloso. Yo me hice
cargo de coordinar a los traductores para que no hiciesen trabajo repetido, y Ramn se encargaba
de juntar los trabajos y generar el documento final.  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
consigui.  Fundamentalmente, el hecho de que era una experiencia nueva, y la diversidad de gente
que colabor, hizo que este primer paso durase casi un ao, pero mereci la pena esperar. Hay que
decir que a pesar de que todo este movimiento surgi de FidoNet, y que desde all se sigue muy de
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
comunicaciones se hacan demasiado largas en el tiempo y no siempre eran seguras (para contactar
con algn colaborador a veces se poda tardar 2 semanas, o no saber nada de l jams). Y con ello
comenzamos a disponer de ms herramientas: primero un servidor de ftp, luego una lista de correo,
un servidor de Web, y as hasta hoy. Bueno, pues una vez terminado este primer libro nos qued el
gusanillo de hacer ms, y visto que yo acab un poco cansado, vino Juan Jos Amor, me tom el
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.

    Y despus de ste ya se estn haciendo ms. Ya esta terminada la traduccion de la "Linux User
Guide" (en su fase alfa), y hay algn proyecto ms en marcha. No quiero dejar de mencionar otros
proyectos que trabajan en paralelo a ste. LuCAS en s se ha ido dedicando ms a la labor de traduc-


                                                      165
_______________________________________________________________________________________________________________166     *
 *                                 @


cin de textos tipo libro, ms concretamente a los del LDP, y creaciones propias, si bien en su origen
se ide para traducir cualquier tipo de documento e incluso para crear documentos directamente
en castellano.  El SLUG (Spanish Linux User Group) ya exista cuando surgi LuCAS, o acababa
de aparecer.  Al amparo de LuCAS surgi el INSFLUG, que se centra en la traduccin/creacin
de FAQs, HOWTOs y documentos ms pequeos.  Y probablemente existan ms grupos haciendo
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 Mar-
tinez <mailto:alfon@bipv02.bi.ehu.es> o en <mailto:alfon@iies.es>; y con Juan Jose Amor Iglesias
<jjamor@ls.fi.upm.es>.




Apndice  E



>Qu   es   INSFLUG?



El INSFLUG naci all por marzo del '96, siendo su seno materno el rea echomail de FidoNet
R34.LINUX. Surge ante el entusiasmo de los que empezbamos por aquel entonces a adentrarnos en
el mundo del Linux, maravillados por como un SO tan potente, de distribucin libre, poda haberse
hecho realidad gracias al buen hacer, generosidad e increble colaboracin entre tantas personas
"dispersas"por el globo. . .

    Nos sentimos an ms maravillados al observar la increble participacin de la gente que fre-
cuentaba el rea, modlica en FidoNet, y por la inestimable ayuda que all se prestaba; eso fue,
_haciendo un poco de psiclogo_ lo que produjo la formacin del INSFLUG, un inmenso y sincero
agradecimiento, adems de enormes ganas de corresponder por nuestra parte, aportando nuestro
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
o no tan nvel, profundiza en el tema del que trate el Howto a medida que lo traduce, redundando
en beneficio para l mismo. . . ;-)

    El INSFLUG se centra en la traduccin de Howtos y FAQs (Frecuently Asked Questions, algo
as como Preguntas de Uso Frecuente, PUFs).

    Para la traduccin no necesitas ms que un editor de texto (En Linux hay muchos) normal, y
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,
*.txt, *.lyx, *.rtf, *.info, *.html, etc..

    Cuentas adems con una gua traducida del uso del linuxdoc-sgml en la que se aaden detalles
de configuracin para el castellano, adems de la facilidad que supone el traducir editando el fuente
original en ingls, ya que los codigos, etc., ya estn; no obstante, es un lenguaje sencillsimo, adems
de ser el formato oficial de todos los Howtos.

    El INSFLUG colabora estrechamente con LuCAS, es ms, hay varias personas que colaboran
con ambos grupos.  El grupo LuCAS se dedica mayormente a las guas ("guides"), los libros ms
extensos del LDP o (Linux Documentation Project).

    El coordinador de INSFLUG es Francisco J. Montilla (email:  <mailto:pacopepe@iname.com>;


                                                      167
_______________________________________________________________________________________________________________168     *
 *                                 @


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



Bibliografa



[1] Almesberger,  Werner.  LILO:  Generic  Boot  Loader  for  Linux.  Disponible  electrnicamente:
    tsx-11.mit.edu. 3 de Julio de 1993.


[2] Bach, Maurice J. The Design of the UNIX Operating System. Englewood Cliffs, New Jersey:
    Prentice-Hall, Inc. 1986.


[3] Lamport, Leslie. LATEX:  A Document Preparation System. Reading, Massachusetts:  Addison-
    Wesley Publishing Company. 1986.


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



                                                      169
