\section{Comandos básicos}

%%%%%%%%%%%%%%%%
% Introducción %
%%%%%%%%%%%%%%%%
\subsection{Introducción}
Existe un conjunto de comandos que todo usuario debe conocer para
poder manejarse en un sistema GNU/Linux. La mayoría de estos comandos
están relacionados con el manejo de archivos y
directorios\footnote{Que en realidad son un tipo especial de
  archivos}. 

Como se ha dicho anteriormente, estas herramientas tienen
un tiempo de desarrollo y prueba mucho mayores que sus símiles en
interfaz gráfica, y aunque no lo parezca, una vez familiarizado con el
entorno de texto, resulta más ágil y cómodo para las tareas diarias.

Este grupo de comandos, llamados muchas veces <<Caja de herramientas
UNIX>>, posee detrás de cada <<herramienta>>, una filosofía de
desarrollo. Cada uno de los comandos, fue creado con dos ideas en
mente:

\begin{itemize}
\item Debe realizar una sola función.
\item Dicha función debe realizarse correctamente.
\end{itemize}

Con estos objetivos, la simpleza de las herramientas permite que puedan
combinarse para solucionar diferentes problemas que individualmente no
podrían. La forma de combinar estas herramientas se verá más adelante
en la sección \ref{sec:redireccion}.

Es importante hacer notar, que muchas de las tareas que se pueden
hacer con los comandos que se explican en esta sección pueden
realizarse con el administrador de archivos \comando{mc}, un clon del
\emph{Norton Commander} muy bueno por cierto, pero igualmente no se
puede obtener toda la flexibilidad que se tiene con los comandos, como
ya se verá más adelante.

%%%%%%%%%%%%%%%%%%%%%%%
% Listado de comandos %
%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Listado de comandos}
A continuación se describirán los comandos más esenciales y necesarios
para el resto del curso. Aquellos argumentos que se muestren entre
corchetes, se deberán tomar como opcionales.

%%%%%%
% cp %
%%%%%%
\subsubsection{El comando \comando{cp}}
Se utiliza para copiar archivos, su sintaxis es la siguiente:

\begin{verbatim}
cp [opciones] archivo-origen camino-destino
cp [opciones] archivos-origen... directorio-destino
\end{verbatim}

Entre las opciones más relevantes, se tienen:

\begin{description}
\item[-f] Borrar los archivos de destino ya existentes.
\item[-p] Preservar los permisos, el usuario y el grupo del archivo a
  copiar.
\item[-R] Copia directorios recursivamente.
\item[-a] Equivalente a utilizar las opciones \comando{-dpR} (la opción \comando{-d} es de propósito muy especifico y no entra en los contenidos de este curso)
\item[-u] No copia un archivo (no directorio) si en el destino ya
  existe tal archivo, que tiene igual tiempo de modificación o más
  reciente.
\item[-v] Da información en pantalla sobre los archivos que se van
  copiando.
\end{description}

%%%%%%
% mv %
%%%%%%
\subsubsection{El comando \comando{mv}}
Este comando se usa tanto para mover archivos, como para renombrarlos
(que, al fin de cuentas, es una manera de mover archivos); su sintaxis
es la siguiente:

\begin{verbatim}
mv [opción...] origen destino
mv [opción...] origen... destino
\end{verbatim}

Si el último argumento, \comando{destino}, es un directorio existente,
\comando{mv} mueve cada uno de los otros archivos a \comando{destino}.
Algunas opciones de este comando son:

\begin{description}
\item[-f] Borrar los archivos de destino existentes sin preguntar al
  usuario.
\item[-i] Lo contrario de \comando{-f}; pregunta por cada archivo a
  sobreescribir antes de hacerlo.
\item[-v] Muestra el nombre de cada archivo a ser movido.
\end{description}

%%%%%%
% ls %
%%%%%%
\subsubsection{El comando \comando{ls}}
Quizás uno de los comandos de mayor utilización, sirve para listar archivos.
Su sintaxis es:

\begin{verbatim}
ls [opciones] [archivo...]
\end{verbatim}

Si se ejecuta \comando{ls} sin argumentos, dará como resultado un
listado de todos los archivos (incluyendo directorios) del directorio
donde el usuario está posicionado. Sus opciones son:

\begin{description}
\item[-a] Lista todos los archivos, incluyendo aquellos que comienzan
  con un <<.>>.
\item[-d] Lista el nombre del directorio en vez de los archivos
  contenidos en él.
\item[-l] Lista los archivos con mucho mas detalle, especificando para
  cada archivo sus permisos, el número de enlaces rígidos, el nombre
  del propietario, el grupo al que pertenece, el tamaño en bytes, y la
  fecha de la últimamodificación.
\item[-r] Invierte el orden de listado de los archivos.
\item[-s] Muestra el tamaño de cada archivo en bloques de 1024 bytes a
  la izquierda del nombre.
\item[-t] Lista los archivos ordenados por el tiempo de modificación
  en vez de ordenarlos alfabéticamente.
\item[-A] Lista todos los archivos excepto el <<.>> y el <<..>>.
\item[-R] Lista los contenidos de todos los directorios
  recursivamente.
\item[-S] Ordena el listado por el tamaño de los archivos.
\item[--color=[cuándo] Especifica si emplear color para distinguir
  los diferentes tipos de archivos. El argumento \comando{cuándo}
  puede tener varios valores:
  \begin{description}
  \item[none] No usar colores. Esta opción es la predeterminada.
  \item[auto] Usar colores solamente cuando la salida estándar es una
    terminal.
  \item[always] Usar siempre colores. Si \comando{ls} se usa con la
    opción \comando{--color} sin especificar la opción de color, el
    resultado es el mismo que cuando se usa \comando{--color=always}.
  \end{description}
\end{description}

%%%%%%
% cd %
%%%%%%
\subsubsection{El comando \comando{cd}}
Este comando se usa para cambiar de directorio. Generalmente cuando el
usuario inicia una sesión en GNU/Linux, el directorio donde comienza
es su directorio personal. Desde ahí uno puede moverse a los diferentes
directorios donde se tenga acceso usando este comando. Su sintaxis es
la siguiente:

\begin{verbatim}
cd directorio
\end{verbatim}

Éste es un comando interno del intérprete (por ejemplo,
\comando{bash}), y no lleva opciones que sean de relevancia como para
nombrarlas.

%%%%%%%%%
% touch %
%%%%%%%%%
\subsubsection{El comando \comando{touch}}
Este comando se utiliza para cambiar la fecha de acceso y/o
modificación a un archivo. Su sintaxis es la que sigue:

\begin{verbatim}
touch [opción...] archivo...
\end{verbatim}

Si el argumento \comando{archivo} corresponde al nombre de un archivo
que no existe, a menos que se le diga, \comando{touch} creará el
archivo con dicho nombre y sin ningún contenido. Sus opciones de mayor
importancia son:

\begin{description}
\item[-a] Cambia solamente el tiempo de acceso.
\item[-c] No crear archivos que no existían antes.
\item[-d fecha] Usar \comando{fecha} en lugar de la fecha actual. El
  formato de \comando{fecha} es el siguiente: \comando{MMDDHHMMAAAA},
  por ejemplo para representar el 7 de abril de 2001 a la 1:00 a.m.,
  se escribirá: 040701002001. Si el año a usar es el año actual, se
  puede obviar, entonces el ejemplo anterior quedaría así: 04070100.
\end{description}

Este comando es muy útil cuando se necesita recompilar cierta parte de
un programa evitando compilar todo el programa completo, sólo aquellos
sectores modificados\footnote{De hecho, en la compilación del núcleo
  se utiliza}.

%%%%%%%%
% sort %
%%%%%%%%
\subsubsection{El comando \comando{sort}}
Este comando se utiliza para ordenar líneas de texto a partir de
varios criterios, su sintaxis es similar a la de todos los comandos:

\begin{verbatim}
sort [opción...] [archivo...]
\end{verbatim}

Si no se le provee al menos un argumento \comando{archivo}, este
comando tomará su entrada de la entrada estándar, ya veremos esto en
la sección \ref{sec:redireccion}.

El criterio de orden que utiliza \comando{sort} por defecto es
alfabético, esto se debe tener en cuenta siempre que se necesite
ordenar listas de números, si no se le especifica a \comando{sort} que
debe ordenar numéricamente, tomará a los números como una lista de
palabras y el resultado no será el deseado. Por ejemplo,
alfabéticamente el número 10 está antes que el número 2.

La lista de opciones de \comando{sort} es la siguiente:

\begin{description}
\item[-c] Comprobar si el/los archivos están ordenados, pero no ordenar.
\item[-d] Considerar únicamente los caracteres alfanuméricos.
\item[-n] Utilizar criterio numérico de ordenamiento.
\item[-o ARCHIVO] Escribir el resultado en \comando{ARCHIVO} en lugar
  de enviarlo a la salida estándar.
\item[-r] Devolver el resultado inverso del ordenamiento.
\item[-t SEP] Utilizar \comando{SEP} como separador en lugar de un
  espacio en blanco.
\item[-T DIR] Usar \comando{DIR} como directorio temporal en lugar de
  \archivo{/tmp}.
\end{description}

%%%%%%%%
% less %
%%%%%%%%
\subsubsection{El comando \comando{less}}
Este comando es de mucha utilidad; su función es paginar texto en
pantalla. Muchas veces ocurre que cuando se ejecuta algún comando, la
salida del mismo aporta demasiada información como para que se pueda leer
en la pantalla del monitor. Entonces se puede redireccionar esta
salida a \comando{less} para que permita al usuario leer sin mayores
problemas, pudiendo avanzar o retroceder en el texto con las flechas
de cursor del teclado. También se utiliza para visualizar archivos de
texto almacenados en disco.

La idea de \comando{less} proviene de un paginador llamado
\comando{more}, un clásico en los UNIX. El \comando{more} no era lo
suficientemente amigable,  por eso  hicieron \comando{less}. Su
sintaxis es la siguiente:

\begin{verbatim}
less [archivo...]
\end{verbatim}

El comando \comando{less} es un programa interactivo, es por lo que no
se hablará de argumentos sino de comandos:

\begin{description}
\item[\boton{ESPACIO}] Si se oprime la barra espaciadora, less avanzará un
  número de líneas igual al número de líneas por pantalla que posea la
  terminal que se esté usando.
\item[\boton{ENTER}] Pulsando la tecla \boton{ENTER} se va avanzando
  de línea en línea.
\item[\boton{G}] Ir al final del texto.
\item[\boton{g}] Ir al inicio del texto.
\item[\boton{/}] Ingresar una palabra a ser buscada avanzando dentro
  del texto.
\item[\boton{?}] Ingresar una palabra a ser buscada retrocediendo
  dentro del texto.
\item[\boton{n}] Buscar la siguiente ocurrencia de la búsqueda.
\item[\boton{AvPág}] Avanzar una pantalla de texto.
\item[\boton{RePág}] Retroceder una pantalla de texto.
\item[\boton{v}] Cargar el editor de texto en el lugar donde se
  encuentre el usuario dentro del archivo. El editor que normalmente
  se utiliza es el \comando{vi}, el cual se dará en la sección
  \ref{sec:vi}.
\item[\boton{q}] Salir del programa.
\item[\boton{R}] Repintar la pantalla. Útil cuando se está
  visualizando un archivo que ha sido modificado por otro programa.
\end{description}

%%%%%%%%
% head %
%%%%%%%%
\subsubsection{El comando \comando{head}}
Escribe por salida estándar la primera parte de un archivo. Su sintaxis
es como sigue:

\begin{verbatim}
head [opción...] [archivo...]
\end{verbatim}

Si no se especifica el argumento \comando{archivo}, este comando
tomará su entrada de la entrada estándar. La lista de opciones más
importantes sigue a continuación:

\begin{description}
\item[-c N] Escribe los primeros \comando{N} bytes.
\item[-n N] Escribe las primeras \comando{N} líneas en vez de las
  primeras 10 (que es el valor predeterminado).
\end{description}


%%%%%%%%
% tail %
%%%%%%%%
\subsubsection{El comando \comando{tail}}
El comando \comando{tail} es al \comando{head} como el \comando{less} es al
\comando{more}\footnote{Perdonen al autor, aunque a veces es
  interesante mezclar conceptos matemáticos con informáticos, éste no
  es el caso.}. El comando \comando{tail} escribe a la salida estándar
la última parte de un archivo. Su sintaxis es:

\begin{verbatim}
tail [opción...] [archivo...]
\end{verbatim}

Al igual que \comando{head}, si no se le proporciona un argumento
\comando{archivo}, este comando tomará su entrada desde la entrada
estándar. Alguna de sus opciones son las siguientes:

\begin{description}
\item[-c N] Escribe los últimos \comando{N} bytes.
\item[-n N] Escribe las últimas \comando{N} líneas.
\item[-f] Escribir la última parte del archivo a medida que va
  creciendo. Esta opción es muy útil para monitorear archivos de
  registro que van creciendo con el tiempo.
\end{description}

%%%%%%%%
% grep %
%%%%%%%%
\subsubsection{El comando \comando{grep}}
Escribir en salida estándar aquellas líneas que concuerden con un
patrón. Su sintaxis es como sigue:

\begin{verbatim}
grep [opciones] PATRÓN [ARCHIVO...]
grep [opciones] [-e PATRÓN | -f ARCHIVO] [ARCHIVO...]
\end{verbatim}

Este comando realiza una búsqueda en los \comando{ARCHIVOs} (o en la
entrada estándar, si no se especifica ninguno) para encontrar líneas
que concuerden con \comando{PATRÓN}. Por defecto \comando{grep}
imprime en pantalla dichas líneas. Sus opciones más interesantes son:

\begin{description}
\item[-c] Modifica la salida normal del programa, en lugar de imprimir
  por salida estándar las líneas coincidentes, imprime la cantidad de
  líneas que coincidieron en cada archivo.
\item[-e PATRÓN] Usar \comando{PATRÓN} como el patrón de búsqueda, muy
  útil para proteger aquellos patrones de búsqueda que comienzan con
  el signo <<->>.
\item[-f ARCHIVO] Obtiene los patrones del archivo \comando{ARCHIVO}.
\item[-H] Imprimir el nombre del archivo con cada coincidencia.
\item[-r] Buscar recursivamente dentro de todos los subdirectorios del
  directorio actual.
\end{description}

El patrón de búsqueda normalmente es una palabra o una parte de una
palabra. También se pueden utilizar \emph{expresiones regulares}, para
realizar búsquedas más flexibles, por ejemplo, si se quisiera buscar
la ocurrencia de todas las palabras que comiencen con <<a>> minúscula,
la ejecución del comando sería algo así:

\begin{verbatim}
usuario@maquina:~/$ grep a* archivo
\end{verbatim}

El tema de manejo de expresiones regulares es bastante largo y
complejo, más adelante se dará con mayor detalle.

%$ <- Esto es para que el XEmacs no me joda la colorificación por culpa
% del símbolo $ de mas arriba. (Lucas - 7/4/2001)

%%%%%%%%
% find %
%%%%%%%%
\subsubsection{El comando \comando{find}}
Se utiliza este comando para buscar archivos dentro de una jerarquía
de directorios. La búsqueda, como veremos más adelante, se puede
realizar mediante varios criterios. La sintaxis de este comando es:

\begin{verbatim}
find [camino...] [expresión]
\end{verbatim}

La \comando{expresión} se conforma de opciones, pruebas y acciones. En
este manual no enumeraremos todas las opciones, pruebas y acciones de
este comando, sino las expresiones que son más cotidianas. Dejamos al
alumno que investigue todo el potencial de este comando mediante
la lectura de la página de manual por medio de la ejecución del
siguiente comando:

\begin{verbatim}
man find
\end{verbatim}

Algunos de los criterios de búsqueda que se pueden utilizar son:
\begin{verbatim}
find CAMINO -name ARCHIVO
find CAMINO -name ARCHIVO -perm MODO
\end{verbatim}

\comando{ARCHIVO} corresponde al nombre entero o en parte del archivo
que se está buscando, \comando{MODO} son los permisos del archivo a
buscar representados en octal, como manejarse con permisos de usuario
se verá en la sección \ref{sec:permisos}.


%%%%%%
% rm %
%%%%%%
\subsubsection{El comando \comando{rm}}
He aquí un comando peligroso, \comando{rm} se utiliza para borrar
archivos o directorios, su sintaxis es:

\begin{verbatim}
rm [opciones] archivo...
\end{verbatim}

Se debe \emph{siempre} pensar dos veces lo que se está haciendo antes
de ejecutar este comando. Quizás esto parezca una advertencia para
tontos, pero más aún cuando se está administrando un equipo que da
servicios a varios usuarios, un <<teclazo>> en falso, y fácilmente se
pierden datos importantes. Sus opciones más utilizadas son:

\begin{description}
\item[-f] No imprimir mensajes de error, ni pedir al usuario
 una confirmación por cada archivo que se vaya a borrar.
\item[-r] Borrar los contenidos de directorios recursivamente.
\item[-v] Muestra el nombre de cada archivo eliminado.
\end{description}

el argumento \comando{archivo} puede ser tanto un nombre de archivo,
como una expresión regular.

%%%%%%%%%
% mkdir %
%%%%%%%%%
\subsubsection{El comando \comando{mkdir}}
Este comando es bastante simple; su finalidad es la creación de
directorios, y su sintaxis es así:

\begin{verbatim}
mkdir [opciones] directorio...
\end{verbatim}

Sus opciones son las que siguen:

\begin{description}
\item[-m modo] Establece los permisos de los directorios creados.
\item[-p] Crea los directorios padre que falten para cada argumento
  \comando{directorio}.
\end{description}

%%%%%%
% ln %
%%%%%%
\subsubsection{El comando \comando{ln}}
Este comando sirve para establecer enlaces entre archivos. Un enlace
puede ser rígido o simbólico. El primer tipo es simplemente una forma
de dar otro nombre a un archivo. Por ejemplo teniendo el archivo
\archivo{/etc/passwd}, se puede hacer un enlace y tener el nuevo
nombre en \archivo{/home/usuario/claves}, y ambos nombres de archivos
refiriéndose al mismo archivo. El segundo tipo es parecido al primero,
pero se pueden enlazar directorios, y además de diferentes sistemas de
archivos. Este tipo de enlace es el que más se utiliza. La sintaxis
del comando \comando{ln} es:

\begin{verbatim}
ln [opciones] origen [destino]
ln [opciones] origen... directorio
\end{verbatim}

Sus opciones más importantes son las siguientes:

\begin{description}
\item[-d] Permite al \emph{super-usuario} hacer enlaces rígidos a
  directorios.
\item[-s] Crear enlace simbólico.
\item[-f] Borrar los archivos de destino que ya existen.
\end{description}

Para el caso del ejemplo anterior, se debería ejecutar:

\begin{verbatim}
ln -s /etc/passwd /home/usuario/claves
\end{verbatim}

Cuando se ejecuta \comando{ls -l} en un directorio donde hay un enlace
simbólico, éste se muestra de la siguiente manera:

\begin{verbatim}
usuario@maquina:~/$ ls -l claves
lrwxrwxrwx    1 usuario usuario 11 Apr  8 13:33 claves -> /etc/passwd
\end{verbatim}
%$

La <<l>> al comienzo de la línea especifica el tipo de archivo
listado, en este caso, un \emph{link}.

%%%%%%%
% pwd %
%%%%%%%
\subsubsection{El comando \comando{pwd}}
Este es un comando muy simple y a la vez útil. Su función es la de
imprimir en pantalla el directorio donde el usuario está trabajando.

%%%%%%
% df %
%%%%%%
\subsubsection{El comando \comando{df}}
Provee información sobre la utilización del espacio en disco en los
diferentes sistemas de archivos montados en el sistema. Para un
sistema GNU/Linux, quedarse sin espacio libre es algo bastante grave,
ya que muchos \emph{demonios} y programas en general utilizan el
directorio \archivo{/tmp} para guardar información mientras se
ejecutan. La sintaxis de \comando{df} es la siguiente:

\begin{verbatim}
df [opciones] [sistema-de-archivo...]
\end{verbatim}

Si no se provee del argumento \comando{sistema-de-archivo},
\comando{df} informará acerca de todos los sistemas de archivos
montados y en funcionamiento. Las opciones de \comando{df} mas
relevantes son:

\begin{description}
\item[-h] Imprimir los tamaños de forma más legible para humanos.
\item[-i] Informar sobre la utilización de los
  nodos-í\footnote{Abreviación de \emph{nodos índice}, en inglés
    i-nodes}. Los nodos-í son estructuras internas del sistema de
  archivos. Cuando éste se queda sin nodos-í libres, por más que haya
  espacio libre en disco, no se podrán crear nuevos archivos hasta que
  se liberen nodos-í, generalmente esto no pasa a menos que se haya generado
  una enorme cantidad de archivos muy pequeños.
\item[-k] Mostrar los tamaños en bloques de 1024 bytes.
\item[-m] Mostrar los tamaños en bloques de mega-bytes.
\end{description}

Un ejemplo de ejecución del \comando{df} es:

\begin{verbatim}
usuario@maquina:~/$ df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hda2              2949060   2102856    696400  75% /
/dev/hda1                23302      2593     19506  12% /boot
/dev/hda4             10144728   5506796   4637932  54% /home
/dev/hdb2              3678764   3175268    503496  86% /u
\end{verbatim}
%$

%%%%%%%
% man %
%%%%%%%
\subsubsection{El comando \comando{man}}
Quizás uno de los comandos más importantes para cualquier aprendiz (y
a veces no tan aprendiz); el comando \comando{man} sirve para
desplegar en pantalla las \emph{páginas de manual}, que proporcionan
ayuda en línea acerca de cualquier comando, función de programación,
archivo de configuración, etc.

Hay diferentes tipos de páginas de manual, cada tipo se diferencia por
un número, que se detallan a continuación:
\begin{enumerate}
\item Programas ejecutables y guiones\footnote{En inglés, scripts, son
    programas creados en el lenguaje del intérprete de comandos}del
  intérprete de comandos.
\item Llamadas del sistema (funciones servidas por el núcleo).
\item Llamadas de la biblioteca (funciones contenidas en las
  bibliotecas del sistema).
\item Archivos especiales (se encuentran generalmente en \archivo{/dev}).
\item Formato de archivos y convenios, por ejemplo \archivo{/etc/passwd}.
\item Juegos.
\item Paquetes de macros y convenios, por ejemplo \comando{man(7)},
  \comando{groff(7)}
\item Comandos de administración del sistema (generalmente sólo son para
  root).
\item Rutinas del núcleo.
\end{enumerate}

%%%%%%%%%%
% passwd %
%%%%%%%%%%
\subsubsection{El comando \comando{passwd}}
\comando{passwd} se utiliza para cambiar la contraseña de usuario, su
sintaxis es:

\begin{verbatim}
passwd [nombre-usuario]
\end{verbatim}

Si se especifica \comando{nombre-usuario}, se cambiará la contraseña
de dicho usuario, si no, la del usuario que ejecuta el comando. La
mecánica de cambio de contraseña tiene 3 pasos:

\begin{enumerate}
\item Ingresar la contraseña antigua.
\item Ingresar la contraseña nueva.
\item Repetir la contraseña nueva para confirmar.
\end{enumerate}

%%%%%%%%%%
% whoami %
%%%%%%%%%%
\subsubsection{El comando \comando{whoami}}
\'{E}ste es otro comando muy simple como \comando{pwd}. Su función
consiste en presentar en pantalla el nombre de usuario del usuario que
lo ejecuta. Ejemplo:

\begin{verbatim}
usuario@maquina:~/$ whoami
usuario
\end{verbatim}
%$

%%%%%%%%%%%
% whereis %
%%%%%%%%%%%
\subsubsection{El comando \comando{whereis}}
Este comando se utiliza para localizar el archivo binario, el código
fuente y la página de manual de un determinado comando. Su sintaxis es
como sigue:

\begin{verbatim}
whereis [opciones] archivo...
\end{verbatim}

La lista de opciones mas utilizadas es:

\begin{description}
\item[-b] Buscar solamente el archivo binario.
\item[-m] Buscar solamente la página manual.
\item[-s] Buscar solamente el código fuente.
\end{description}

Como ejemplos, se ve lo siguiente:
\begin{verbatim}
usuario@maquina:~/$ whereis -m whereis
whereis: /usr/share/man/man1/whereis.1.gz

usuario@maquina:~/$ whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz
\end{verbatim}

En el primer ejemplo se ha pedido la página de manual del mismo
comando \comando{whereis}\footnote{El lector ya está advertido que al
  autor le gustan las <<recursividades>>, por favor perdónenlo.},
mientras que en el segundo se han pedido todos los archivos que tengan
que ver con el comando \comando{passwd}.

%%%%%%%%%%
% locate %
%%%%%%%%%%
\subsubsection{El comando \comando{locate}}
\comando{locate} es un comando de búsqueda de archivos, bastante
parecido al comando anteriormente visto, el \comando{find}. La
diferencia de \comando{locate} es que la búsqueda la hace en una base
de datos indexada para aumentar significativamente la velocidad de
respuesta. Esto quiere decir, que \comando{locate} realmente no busca
en el disco del sistema, sino que en un archivo con la lista de todos
los archivos que existen en el GNU/Linux. Generalmente todas las
distribuciones de GNU/Linux ejecutan a una hora determinada
(generalmente cerca de las 4:00am, ya que tarda algún tiempo realizar
esta tarea) un comando para actualizar la base de datos que utiliza
\comando{locate}, dicho comando se llama \comando{updatedb}. Su
sintaxis es:

\begin{verbatim}
locate PATRÓN
\end{verbatim}

Donde \comando{PATRÓN} corresponde al mismo tipo de patrón que en el
comando \comando{find}. Ejemplo de ejecución:

\begin{verbatim}
usuario@maquina:~/$ locate locate
/usr/bin/locate
/usr/lib/locate
/usr/lib/locate/bigram
/usr/lib/locate/code
/usr/lib/locate/frcode
/usr/share/doc/kde/HTML/en/kcontrol/kcmlocate.docbook.gz
/usr/share/doc/xlibs-dev/XdbeAllocateBackBufferName.3.html
/usr/share/doc/xlibs-dev/XdbeDeallocateBackBufferName.3.html
/usr/share/doc/xlibs-dev/XtAllocateGC.3.html
/usr/share/emacs/20.7/lisp/locate.elc
/usr/share/gnome/help/gsearchtool/C/locate.png
/usr/share/man/man1/locate.1.gz
/usr/share/man/man5/locatedb.5.gz
/usr/X11R6/man/man3/XdbeAllocateBackBufferName.3x.gz
/usr/X11R6/man/man3/XdbeDeallocateBackBufferName.3x.gz
/usr/X11R6/man/man3/XtAllocateGC.3x.gz
/var/lib/locate
/var/lib/locate/locatedb
/var/lib/locate/locatedb.n
\end{verbatim}
%$

Como se puede observar en el ejemplo, \comando{locate} ha listado
todos aquellos archivos que posean la palabra <<locate>> en su nombre
(los directorios están incluidos).

%%%%%%%
% cal %
%%%%%%%
\subsubsection{El comando \comando{cal}}
Este es un comando bastante útil, que aunque no tenga mucha relación
con los anteriormente dados; sirve para demostrar que las herramientas
basadas en texto no son inútiles para tareas domésticas. \comando{cal}
es una herramienta que sirve para mostrar en pantalla el calendario.
Su sintaxis es la siguiente:

\begin{verbatim}
cal [-jy] [[mes] año]
\end{verbatim}

Si \comando{cal} se ejecuta sin argumentos, mostrará en pantalla el
calendario del mes y año actuales, por ejemplo:

\begin{verbatim}
usuario@maquina:~/$ cal
     April 2001
 S  M Tu  W Th  F  S
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
\end{verbatim}
%$

Las opciones de este comando son:

\begin{description}
\item[-j] Muestra la fecha en formato Juliano.
\item[-y] Muestra el calendario completo del año actual.
\end{description}

%%%%%%
% wc %
%%%%%%
\subsubsection{El comando \comando{wc}}
El nombre del comando \comando{wc} proviene de \emph{word count}, y
como es de suponer, sirve para contar palabras. Pero no sólo palabras
como veremos a continuación. Su sintaxis es como sigue:

\begin{verbatim}
wc [opción...] [archivo...]
\end{verbatim}

Si se omite el argumento \comando{archivo}, \comando{wc} tomará los
datos (naturalmente) de la entrada estándar.

La lista de opciones mas importantes es la siguiente:

\begin{description}
\item[-c] Contar bytes.
\item[-l] Contar líneas.
\item[-w] Contar palabras.
\end{description}

Como ejemplo, se pueden contar las líneas del archivo
\comando{/etc/passwd} y de esta manera se sabrá rápidamente cuantos
usuarios tiene definidos el sistema:

\begin{verbatim}
usuario@maquina:~/$ wc -l /etc/passwd
     32 /etc/passwd
\end{verbatim}
%$

Se pueden combinar varios argumentos a la vez.

\subsubsection{El comando \comando{date}}
Este comando tiene dos funciones: una es la de mostrar en pantalla la
fecha del sistema (en varios formatos, como veremos a continuación),
la otra es la función de configurar la hora del sistema, pero para que
esta funcionalidad se cumpla, se debe ejecutar el comando desde una
sesión de \emph{root}. La sintaxis de este comando es:

\begin{verbatim}
date [opción...] [+FORMAT]
date [opción] [MMDDhhmm[[CC]AA][.ss]]
\end{verbatim}

\comando{FORMAT} controla el formato con que se mostrará la fecha,
alguna de las opciones de este argumento son:

\begin{description}
\item[\%a] Día de la semana abreviado.
\item[\%A] Día de la semana completo.
\item[\%b] Nombre del mes abreviado.
\item[\%B] Nombre del mes completo.
\item[\%d] Día del mes.
\item[\%m] Número de mes.
\item[\%H] Hora, en formato 24h.
\item[\%M] Minuto.
\item[\%S] Segundos.
\end{description}

Existen muchísimas más opciones de formato que alentamos al lector a
verlas en la página de manual del comando \comando{date}.

Ejemplo de ejecución:

\begin{verbatim}
usuario@maquina:~/$ date
Sun Apr  8 15:09:32 ART 2001
usuario@maquina:~/$ date +"%A %d %B"
Sunday 08 April
\end{verbatim}
