%***********************************************************************
%
%       Spanish Translation by:  David Escorial,
%                                descor@opera.dia.fi.upm.es
%
%       Revised (cballard)       Jun 19, 1997
%
%***********************************************************************
\chapter{Pequeños programas potentes}\label{commands-chapter} 

\begin{screen}\begin{verbatim}
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
}
\end{verbatim}\end{screen}
 
\section{El poder de \unix}
 
El poder de \unix\footnote{N. del T.: El cookie de apertura de este
  capítulo es la traducción a comandos \unix\ de una canción de
  navidad: ``Santa Claus is coming to town'' (escrita por H.
  Gillespie, J. F. Coots)} se esconde en pequeños comandos que no
parecen ser muy útiles cuando se utilizan por separado, pero
combinados con otros (directa o indirectamente) proporcionan un
entorno mucho más potente y flexible que la mayoría de los otros
sistemas operativos.  Los comandos de los que hablaremos en este
capítulo son entre otros: \cmdnm{sort}, \cmdnm{grep}, \cmdnm{more},
\cmdnm{cat}, \cmdnm{wc}, \cmdnm{spell}, \cmdnm{diff}, \cmdnm{head}, y
\cmdnm{tail}.
 
Veremos lo que cada una de las utilidades hace por separado y luego
daremos algunos ejemplos de como utilizarlos
conjuntamente\footnote{Nótese que los resúmenes de los comandos en
  este capítulo no son extensos.  Para conocer cada una de los
  opciones, vea la página del manual correspondiente con el comando
  \cmdnm{man}.}.
 
\section{Trabajando con ficheros} 
 
Junto a comandos como \cmdnm{cd}, \cmdnm{mv}, y \cmdnm{rm} que ya se
vieron en el Capítulo~\ref{shell-chapter}, hay otros comandos que
trabajan con ficheros pero no con los datos contenidos en ellos.
Estos son \cmdnm{touch}, \cmdnm{chmod}, \cmdnm{du}, y \cmdnm{df}.
Ninguno de ellos se preocupa por lo que {\em contiene\/} el
fichero---simplemente modifican algunas de las informaciones que
\unix\ guarda acerca del fichero.
 
Estos comandos manipulan: 
\begin{itemize} 
  
\item Los registros de tiempo\glossary{registros de tiempo}.  Todo
  fichero tiene tres fechas asociadas a él.\footnote{Los antiguos
    sistemas de ficheros de \linux\ sólo almacenaban una fecha, ya que
    derivaban de Minix.  Si se utiliza alguno de estos sistemas de
    ficheros, parte de la información no estará disponible---y las
    operaciones que se realicen sobre ellas serán inútiles.}  Las tres
  fechas son las siguientes: creación del fichero, última modificación
  (cuando se produjo el último cambio en el fichero), y último acceso
  (cuando se produjo la última lectura del fichero).
  
\item El dueño.  Cada fichero en \unix\ pertenece a un único
  propietario.
  
\item El grupo.  Cada fichero tiene también asociados un grupo de
  usuarios.  El grupo más usual para los ficheros de usuario se
  denomina {\tt users}, que es al cual, por lo general, pertenecen
  todos los usuarios con cuenta en el sistema.
  
\item Los permisos\index{permisos}.  Cada fichero tiene ciertos
  permisos (también llamados ``privilegios'') asociados a él, que
  indican a \unix\ quién 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 dueño, el grupo, y el
  resto de usuarios.

\end{itemize} 
 
\begin{command} 
   {\tt touch \impttindex{touch} {\sl fichero1 fichero2 \ldots
ficheroN}}
\end{command} 
 
\cmdnm{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, \cmdnm{touch} lo creará.  También es posible
especificar la fecha y hora a registrar en la información de los
ficheros---consulte la página del manual (comando \cmdnm{man}) para
más información sobre \cmdnm{touch}.
 
\begin{command} 
   {\tt chmod}\impttindex{chmod} [-Rfv] {\sl modo} {\sl fichero1
fichero2 \ldots ficheroN}
\end{command} 
 
\bindex{fichero|permisos} El comando que se utiliza para modificar los
permisos de un fichero es el \cmdnm{chmod}\footnote{N. del T.:
  Abreviatura de {\bf ch}ange {\bf mod}e, cambiar modo.}.  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 continuación, se
explica como puede un usuario hacer estas cosas.  Un programa
ejecutado por un usuario puede hacer las mismas cosas que las que le
estén 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
\cmdnm{chmod} sobre ese fichero).  Segundo, el ``grupo''.  El grupo de
la mayoría de los ficheros normales de un usuario del sistema será
``users''.  (Para ver el grupo de un fichero en particular, utilizar
\cmdln{ls -l {\sl fichero}}.)  Por último, está el ``resto'' que no
son ni propietarios ni pertenecen al grupo, denominados
``otros''\footnote{N. del T.: En ingles: ``owner'' (con ``u'' de
  ``user''), ``group'' and ``others'' respectivamente.}
 
De esta forma, por ejemplo, un fichero puede tener permisos de lectura
y escritura para el propietario, permiso de lectura para el grupo y
ningún tipo de permisos para otros.  O por alguna razón, un fichero
puede tener permisos de lectura/escritura para el grupo y otros, pero
¡{\em ningún\/} privilegio para el propietario!
 
Veamos algunos ejemplos de como cambiar permisos utilizando
\cmdnm{chmod}.  Primero creamos un fichero utilizando \cmdnm{cat},
\cmdnm{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 estén establecidas
las variables del sistema y de la cuenta del usuario).  Podemos
asegurarnos de que tenemos permiso de lectura utilizando el comando
\cmdnm{cat}, a continuación eliminamos el privilegio de lectura para
nosotros mismos utilizando \cmdln{chmod u-r {\sl fichero}}\footnote{N.
  del T.: El parámetro {\tt u-r} indica ``user minus read'', es decir:
  usuario menos lectura.}.  Ahora si intentamos leer el fichero,
obtendremos el mensaje de error {\tt Permission denied}.  Devolvemos
el privilegio de lectura utilizando \cmdln{chmod u+r {\sl fichero}}.
\eindex{fichero!permisos} \index{fichero!privilegios|ver{fichero,
    permisos}} \index{seguridad|ver{fichero, permisos}}
 
Los permisos de directorio\index{directorio!permisos} 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 añadir o borrar ficheros.
El permiso de ejecución permite al usuario acceder a ficheros en el
directorio o a cualquier subdirectorio.  (Si un usuario no tiene
permisos de ejecución para un directorio, entonces no puede siquiera
hacer un \cmdnm{cd} al mismo).
 
Para utilizar \cmdnm{chmod}, reemplazar el {\sl modo} por el {\bf
  u}suario, {\bf g}rupo, {\bf o}tro o todos ({\bf a}ll) y la operación
a realizar.  (Es decir, utilizar un signo más ``$+$'' para añadir
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 ({\bf r}ead), escritura ({\bf
  w}rite) , y ejecución (e{\bf x}ecute).
 
La opción \cmdln{-R} al utilizar \cmdnm{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
opción \cmdln{-f} fuerza a que \cmdnm{chmod} intente cambiar los
permisos incluso si el usuario no es el dueño del fichero.  (Si se
utiliza el parámetro \cmdln{f} al ejecutar \cmdnm{chmod} no se
mostrará un mensaje de error en caso de que no pueda cambiar los
permisos del fichero.), por último la opción \cmdln{v} hace que la
ejecución del \cmdnm{chmod} informe de todo lo que hace.
 
\section{Estadísticas del sistema} 
 
Los comandos de esta sección son de utilidad a la hora de mostrar las
estadísticas del sistema operativo, o de una parte de él.
 
\begin{command} 
  {\tt du} \impttindex{du} [-abs] [{\sl trayectoria1 trayectoria2
\ldots trayectoriaN}]
\end {command} 
 
El comando \cmdnm{du}\footnote{N. del T.: Abreviatura de {\bf d}isk
  {\bf u}sage, utilización del disco.} contabilizará el espacio de
disco ocupado por un subdirectorio {\em y todos sus subdirectorios}.
El uso de este comando sin utilizar parámetros 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 más parámetros, devolverá la
cantidad de espacio utilizado por esos ficheros o directorios en lugar
de la del directorio actual.
 
La opción \cmdln{a} mostrará además del espacio de los directorios, el
de los ficheros.  Utilizando \cmdln{b} como opción presentará el total
en bytes, en lugar de kilobytes (1 kilobyte = 1024
caracteres)\footnote{Un byte es el equivalente de una letra en un
  documento de texto.}.  Finalmente el parámetro \cmdln{s} informará
sólo acerca de los directorios explicítos en la linea de comando y
{\em no\/} de sus subdirectorios.
 
\begin{command} 
        {\tt df}\impttindex{df} 
\end{command} 
 
El comando \cmdnm{df}\footnote{N. del T.: Abreviatura de {\bf d}isk
  {\bf f}illing, espacio disponible en el disco.}  resume la cantidad
de espacio utilizada en el disco.  Para cada sistema de ficheros
(recuerde que sistemas de ficheros diferentes son o bien unidades
físicas o particiones diferentes) muestra el espacio total de disco,
la cantidad utilizada, la cantidad disponible y la capacidad total del
sistema de ficheros que se utiliza.
 
Un caso extraño que puede darse es la posibilidad de tener una
capacidad superior al 100\%, o que la cantidad utilizada más 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 {\tt raíz}.  De esta forma aunque algún usuario
accidentalmente sature el disco, el sistema todavía tendrá un
poco de espacio para seguir operativo.
 
Este comando no ofrece opciones que puedan ser de utilidad al usuario.
 
\begin{command} 
    {\tt uptime}\impttindex{uptime} 
\end{command} 
 
El comando \cmdnm{uptime}\footnote{N. del T.: Tiempo en estado
activo.}  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 también devuelve la hora actual y el promedio de carga
que soporta el sistema\index{promedio de carga}.  El promedio de carga
es el número medio de procesos esperando a ejecutar en un
determinado periodo de tiempo.  \cmdnm{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 ningún momento sobrecargado.  Los promedios de
carga altos son el resultado de la ejecución simultánea de varios
programas.
 
Extraordinariamente, \cmdnm{uptime} es uno de los pocos comandos de
\unix\ que ¡{\em no\/} tienen opciones!
 
\begin{command} 
   {\tt who}\impttindex{who} 
\end{command} 
 
El comando \cmdnm{who} muestra los usuarios activos en ese momento en
el sistema y cuando han iniciado su respectiva sesión.  Si le damos
los parámetros \cmdln{am i} (es decir : \cmdln{who am i}), nos
devuelve la información relativa a nosotros mismos.\footnote{N. del
T.: literalmente es como preguntar al sistema ¿quién soy yo?}
 
\begin{command} 
   {\tt w}\impttindex{w} [-f] [{\sl nombre\_usuario}] 
\end{command} 
 
El programa \cmdnm{w} devuelve los usuarios actuales del sistema y que
están haciendo.  (Básicamente combina la funcionalidad de
\cmdnm{uptime}\ttindex{uptime} y \cmdnm{who}.  La cabecera del informe
que presenta \cmdnm{w} es exactamente la misma que \cmdnm{uptime},
siendo la información de cada una de las líneas la siguiente: el
nombre del usuario, hora de inicio de la sesión (y cuanto tiempo ha
estado ocioso).  {\tt JCPU} es la cantidad total de tiempo de CPU
utilizada por ese usuario, mientras que {\tt PCPU} es la cantidad
total de tiempo utilizada por sus tareas actuales.
 
Si al comando se le pasa la opción \cmdln{f}, mostrará los sistemas
remotos desde los que los usuarios acceden, si los hay.  Puede
indicarse un nombre de usuario como parámetro para mostrar sólo
información relativa a él.
 
\section{¿Qué hay en un fichero?} 
 
Principalmente hay dos comandos en \unix\ para listar ficheros,
\cmdnm{cat} y \cmdnm{more}.  Sobre ambos ya se habló en el
Capítulo~\ref{shell2-chapter}.
 
\begin{command} 
{\tt cat}\impttindex{cat} [-nA] [{\sl fichero1 fichero2 \ldots ficheroN}] 
\end{command} 
 
\cmdnm{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 tuberías.  Aunque pueden utilizarse algunas opciones muy
útiles del comando, por ejemplo, \cmdln{n} numera todas las líneas del
fichero, y \cmdln{A} mostrará los carácteres de control como
carácteres normales en lugar de hacer (posiblemente) cosas extrañas en
la pantalla.  (Recuerde que para ver las opciones más curiosas y quizá
``menos útiles'' utilice el comando \cmdnm{man}: \cmdln{man cat}.)  Si
no se especifican ficheros en la línea de comandos, \cmdnm{cat}
aceptará la entrada desde {\tt stdin}\footnote{N. del T.: {\bf
    st}an{\bf d}ard {\bf in}put, entrada estándar, generalmente
  entrada de datos por teclado.}.
 
\begin{command} 
{\tt more}\impttindex{more} [-l] [+{\sl número\_línea}] [{\sl
fichero1 fichero2 \ldots ficheroN}]
\end{command} 
 
\cmdnm{more} es más útil, y además es el comando recomendado para ver
ficheros de texto ASCII.  La única opción interesante es \cmdln{l},
que indica al comando que no se desea interpretar el carácter
\key{Ctrl-L} como carácter de ``nueva página''.  El comando comenzará
en la línea {\sl número\_línea} especificada.
 
Al ser \cmdnm{more} un comando interactivo, hemos resumido a
continuación las órdenes más comunes:

\begin{description} 
\item [\key{Barra espaciadora}] Pasar a la siguiente pantalla de
  texto.
\item [\key{d}] Pasar 11 líneas de pantalla, o aproximadamente la
  mitad de una pantalla normal: 25 líneas.
\item [\key{/}] Busca una expresión regular.  La construcción de una
  expresión regular puede ser muy complicada por lo que es
  recomendable teclear simplemente el texto a buscar.  Por ejemplo,
  {\tt /sapo} \ret\ buscará la primera ocurrencia de ``sapo'' en el
  fichero a partir de la posición actual.  La misma tecla seguida por
  un \ret\ buscará la siguiente ocurrencia de la última expresión
  buscada.
\item [\key{n}] Buscará la próxima aparición de la expresión regular
  especificada.
\item [\key{:}\key{n}] Pasar al siguiente fichero, en caso de que se
  especifique más de un fichero en la línea de comandos.
\item[\key{:}\key{p}] Pasar al fichero anterior.
\item[\key{q}] Terminar \cmdnm{more}.
\end{description} 

%\vfill
%\pagebreak 
\begin{command} 
   {\tt head}\impttindex{head} [-{\sl líneas}] [{\sl fichero1 fichero2
\ldots ficheroN}]
\end{command} 
 
\cmdnm{head} mostrará las primeras diez líneas de los ficheros
especificados, o las primeras diez líneas de la {\tt stdin} si no se
especifica ningún fichero en la línea de comandos.  Cualquier opción
numérica se tomará como el número de líneas a mostrar, por ejemplo
\cmdln{head -15 rana} mostrará las primeras quince líneas del fichero
\file{rana}.
 
\begin{command} 
   {\tt tail}\impttindex{tail} [-{\sl líneas}] [{\sl fichero1 fichero2
\ldots ficheroN}]
\end{command} 
 
Como \cmdnm{head}, \cmdnm{tail} mostrará solo una parte del fichero,
en este caso el final del fichero, las últimas diez líneas del
fichero, o que provengan de la {\tt stdin}.  \cmdnm{tail} también
acepta la opción de especificar el número de líneas, como en el caso
anterior.
 
\begin{command} 
   {\tt file} [{\sl fichero1 fichero2 \ldots ficheroN}] 
\end{command} 
 
El comando \cmdnm{file} intenta identificar que tipo de formato tiene
un fichero en particular.  Debido a que no todos los ficheros tienen
extensión o otras formas de identificarlos fácilmente, este comando
realiza algunas comprobaciones rudimentarias para intentar comprender
exactamente que contiene el fichero.
 
Hay que tener cuidado ya que es bastante posible que \cmdnm{file}
realice una identificación incorrecta.
 
\section{Comandos de edición} 
 
Esta sección trata de los comandos que alteran un fichero, realizando
sobre el fichero operaciones concretas o mostrando estadísticas del
mismo.
 
\begin{command} 
    {\tt grep} \impttindex{grep} [-nvwx] [-{\sl número\/}] {\sl
          expresión} [{\sl fichero1 fichero2 \ldots ficheroN\/}]
\end{command} 
 
Uno de los comandos más útiles de \unix\ es el
\cmdnm{grep}\footnote{N. del T.: Abreviatura de {\bf g}eneralized {\bf
    r}egular {\bf e}xpression {\bf p}arser, analizador general de
  expresiones regulares.}, utilizado para buscar expresiones en un
fichero de texto. La forma más sencilla de usarlo es:
 
\begin{screen}\begin{verbatim} 
/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$
\end{verbatim}\end{screen} 

% $ para equilibrar el font-lock-mode de emacs
    
Una de los problemas de esta forma de usarlo, es que simplemente
muestra las líneas que contienen la palabra a buscar, no aporta
información acerca de donde buscar en el fichero, es decir el número
de línea.  Pero dependiendo de lo que se pretenda puede ser hasta más
que suficiente, por ejemplo si se buscan los errores de la salida de
un programa, se puede probar \cmdln{a.out | grep error}, donde
\cmdln{a.out} es el nombre del programa.
 
Cuando es necesario conocer donde están las palabras a buscar, es
decir el número de línea, hay que utilizar la opción \cmdln{n}.  Si lo
que se desea es ver todas las líneas donde {\em no\/} se encuentra la
expresión especificada, entonces utilice la opción \cmdln{v}.
 
Otra posibilidad que ofrece el \cmdnm{grep} es la búsqueda de partes
de una palabra, como en el ejemplo anterior que \cmdln{igre} se
equiparó con \cmdln{tigre}.  Para buscar sólo palabras completas hay
que pasarle al \cmdnm{grep} la opción \cmdln{w}, y para líneas
completas la opción es \cmdln{x}.
 
Si no se especifica ningún fichero (por ejemplo: \cmdln{grep igre}),
\cmdnm{grep} examinará la {\tt stdin}.
 
\begin{command} 
    {\tt wc}\impttindex{wc} [-clw] [{\sl fichero1 fichero2 \ldots
ficheroN\/}]
\end{command} 
 
El comando \cmdnm{wc}\footnote{N. del T.: Abreviatura de {\bf w}ord
  {\bf c}ount, contar palabras.} simplemente cuenta el número de
palabras, líneas y carácteres en los ficheros pasados como parámetros.
Si no se especifica ningún fichero, operará sobre la {\tt stdin}.
 
Los tres parámetros, \cmdln{clw}, indican el elemento a contar: {\bf
  c}arácteres, {\bf l}íneas y ``{\bf w}'' para palabras.  Por ejemplo,
\cmdln{wc -cw} contará el número de carácteres y palabras, pero no el
número de líneas.  Si no se indica ningún parámetro {\tt wc} cuenta
todo: palabras, líneas y carácteres.
 
Se puede utilizar \cmdnm{wc} para saber el número de ficheros de un
directorio: \cmdln{ls | wc -w}.  Si se desea saber el número de
ficheros que acaban en \file{.c}, entonces ejecute \cmdln{ls *.c | wc
  -w}.
 
\begin{command} 
   {\tt spell}\impttindex{spell} [{\sl fichero1 fichero2 \ldots ficheroN}] 
\end{command} 
 
\cmdnm{spell} es el corrector ortográfico más sencillo de \unix\,
generalmente para inglés americano\footnote{Aunque hay versiones del
  corrector para diversas lenguas europeas, la copia que puede
  encontrarse en su máquina \linux\ es con toda probabilidad para
  inglés americano.}.  \cmdnm{spell} es un filtro, igual que la
mayoría de los comandos que hemos comentado antes, que toma el fichero
de texto ASCII y devuelve todas las palabras que considera erróneas.
\cmdnm{spell} opera sobre los ficheros especificados, y si no se
incluye ninguno, entonces utiliza la {\tt stdin}.
 
También es posible que esté disponible en su máquina
\cmdnm{ispell}\ttindex{ispell}, que es un corrector ortográfico un
poco más sofisticado.  \cmdnm{ispell} ofrece diversos vocabularios y
un menú más manejable en caso de ejecutarlo con un fichero en la línea
de comandos.  También puede ejecutarse como un filtro si no se
especifica ningún fichero.
 
La forma de trabajar con \cmdnm{ispell} es bastante obvia, pero si
necesita más ayuda consulte la página del manual correspondiente:
\cmdln{man ispell}.
 
\begin{command} 
    {\tt cmp}\impttindex{cmp} {\sl fichero1} [{\sl fichero2\/}]
\end{command} 
 
\cmdnm{cmp} {\bf c}o{\bf mp}ara dos ficheros.  El primero debe ser
obligatoriamente pasado como parámetro, mientras que el segundo puede
ser pasado como un segundo parámetro o leído desde la entrada
estándar.  \cmdnm{cmp} es muy sencillo, y simplemente dice donde se
diferencian los dos ficheros.
 
\begin{command} 
    {\tt diff}\impttindex{diff} {\sl fichero1 fichero2} 
\end{command} 
 
Uno de los comandos estándar más complejos de \unix\ es el
\cmdnm{diff}. La versión GNU\index{Proyecto GNU} de \cmdnm{diff} tiene
hasta ¡veinte opciones! en la línea de comandos.  Es una versión
mucho más potente que \cmdnm{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 \cmdnm{diff} están más alla
del alcance de este manual, simplemente hablaremos del funcionamiento
básico.  Brevemente, \cmdnm{diff} toma dos parámetros y muestra las
diferencias entre ellos línea a línea.  Por ejemplo:
 
\begin{screen}\begin{verbatim} 
/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$ 
\end{verbatim}\end{screen} 
 
    Como puede observarse, \cmdnm{diff} no devuelve nada cuando los
    dos ficheros son iguales.  Pero cuando hemos comparado dos
    ficheros diferentes, se muestra una cabecera de sección,
    \cmdln{1c1,2} indicando que ha comparando la línea 1 del fichero
    de la izquierda, \file{rana}, con las líneas 1--2 de \file{perro}
    y las diferencias que ha encontrado.  Luego ha comparado la línea
    3 de \file{rana} con la línea 4 de \file{perro}.  Aunque pueda
    parecer extraño que compare diferentes números de línea, es
    bastante eficiente ya que es posible que pueda haber algún retorno
    de línea de más en alguno de los ficheros.
 
\begin{command} 
    {\tt gzip}\impttindex{gzip} [-v\#] [{\sl fichero1 fichero2 \ldots ficheroN}]\\ 
    {\tt gunzip}\impttindex{gunzip} [-v] [{\sl fichero1 fichero2 \ldots ficheroN}]\\ 
    {\tt zcat}\impttindex{zcat} [{\sl fichero1 fichero2 \ldots ficheroN}] 
\end{command} 
 
Estos tres programas se utilizan para comprimir\glossary{comprimir} y
descomprimir\glossary{descomprimir} datos.  \cmdnm{gzip}, o GNU Zip,
es un programa que lee de los ficheros originales y devuelve ficheros
más pequeños, borra los ficheros especificados en la línea de comandos
y los reemplaza con ficheros que tienen el mismo nombre pero con
\file{.gz} añadido a su nombre.
 
\begin{command} 
   {\tt tr}\impttindex{tr} {\sl cadena1} {\sl cadena2} 
\end{command} 
 
El comando de ``{\bf tr}aducción de caracteres'' opera sobre la
entrada estándar---no acepta un nombre de fichero como parámetro.
Reemplaza todas las ocurrencias de {\sl cadena1} en la entrada con la
{\sl cadena2}.  En comparación con llamadas tan sencillas como
\cmdln{tr rana sapo}, \cmdnm{tr} puede aceptar comandos más complejos.
Por ejemplo, hay una forma rápida de convertir los carácteres en
minúscula por otros en mayúscula :
 
\begin{screen}\begin{verbatim} 
/home/larry$ tr {:lower:] [:upper:] 
Esta es una frase RARA. 
ESTA ES UNA FRASE RARA. 
\end{verbatim}\end{screen}
% $ para equilibrar el font-lock-mode de emacs
 
    \cmdnm{tr} es relativamente complejo y se usa normalmente en
    pequeños programas shell, como filtro.

% Local Variables:
% mode: latex
% TeX-master: "guide"
% End:
