% Linux Installation and Getting Started    -*- TeX -*-
% basic.tex
% Copyright (c) 1992, 1993 by Matt Welsh, Larry Greenfield and Karl Fogel
%
% This file is freely redistributable, but you must preserve this copyright 
% notice on all copies, and it must be distributed only as part of "Linux 
% Installation and Getting Started". This file's use is covered by
% the copyright for the entire document, in the file "copyright.tex".
%
% Traducci\'on al espa\~nol por Eduardo Lluna Gil <elluna@aii.upv.es>
% $Log: basic.tex,v $
% Revision 0.5.0.1  1996/02/10 23:45:14  rcamus
% Primera beta publica
%
%


\section{Primeros pasos en UNIX}

Antes de comenzar es importante destacar que todos los nombres de ficheros y
comandos son ``case-sensitive'' (que hacen diferencia entre may\'usculas 
y min\'usculas, a diferencia de sistemas operativos como MS-DOS). Por 
ejemplo, el comando {\tt make} es diferente a {\tt Make} o {\tt MAKE}. Lo 
mismo ocurre en el caso de nombres de ficheros o directorios.

\subsection{Moviendonos por el entorno}

Ahora que ya podemos presentarnos como usuarios, y sabemos como indicar
ficheros con su camino completo, ?`c\'omo podemos cambiar nuestro directorio de
trabajo?

\index{directorio!estructura!movi\'endonos con cd@movi\'endonos con {\tt cd}}
\index{cd@{\tt cd}|(}
La orden para movernos por la estructura de directorios es {\tt cd},
abreviaci\'on de ``cambio de directorio''. Hay que destacar, que la 
mayor\'{\i}a de las \'ordenes Unix m\'as usadas son de dos o tres letras.
La forma de uso de la orden {\tt cd} es:
\begin{tscreen}
cd \cparam{directorio}
\end{tscreen}
donde \cparam{directorio} es el nombre del directorio al que queremos ir.

Como dijimos, al entrar al sistema comenzamos en el directorio ``home''. Si
Larry quiere ir al subdirectorio {\tt papers}, deber\'{\i}a usar la orden
\begin{tscreen}
/home/larry\# {\em cd papers} \\
/home/larry/papers\#
\end{tscreen}

Como se puede ver, la l\'{\i}nea de comandos de Larry cambia para mostrar su
directorio actual de trabajo. Ahora que ya est\'a en el directorio 
{\tt papers} puede echarle un vistazo a su fichero history-final con el
comando
\begin{tscreen}
/home/larry/papers\# {\em more history-final}
\end{tscreen}
 
\index{directorio!padre!.. para referirnos a@{\tt ..} para referirnos a}
\index{directorio!. para referirnos a @{\tt .} para referirnos a}
\index{directorio padre!.. para referirnos a@{\tt ..} para referirnos a}
Ahora Larry est\'a en el subdirectorio {\tt papers}, para volver al directorio
padre de este, usar\'a la orden
\begin{tscreen}
/home/larry/papers\# {\em cd ..} \\
/home/larry\#
\end{tscreen}

(Dese cuenta del espacio entre ``{\tt cd}'' y ``{\tt ..}''). Cada directorio
tiene una entrada de nombre ``{\tt ..}'' la cual se refiere al directorio
padre. De igual forma, existe en cada directorio la entrada ``{\tt .}'' la
cual se refiere a si mismo. As\'{\i} que el comando
\begin{tscreen}
/home/larry/papers\# {\em cd .} \\
/home/larry\#
\end{tscreen}
nos deja donde estamos.

Tambi\'en pueden usarse nombres con el camino absoluto en la orden {\tt cd}.
Para ir al directorio de Karl con {\tt cd}, introduciremos la siguiente
orden.
\begin{tscreen}
/home/larry/papers\# {\em cd /home/karl} \\
/home/karl\#
\end{tscreen}

Tambi\'en, usando {\tt cd} sin argumentos nos llevar\'a a nuestro directorio
de origen.
\begin{tscreen}
/home/karl\# {\em cd} \\
/home/larry\#
\end{tscreen}
\index{cd@{\tt cd}|)}

\subsection{Mirando el contenido de los directorios}\label{sec-ls}
\index{directorio!listando el contenido de|(}
\index{ls@{\tt ls}|(}
\index{listando el contenido de directorios|(}
\index{ficheros!listado|(}

Ahora que ya sabe como moverse por los directorios probablemente 
pensar\'a: ?`Y bien? El simple movimiento por el \'arbol de directorios 
es poco \'util, necesitamos un nuevo comando, {\tt ls}. {\tt ls} muestra 
por el terminal la lista de ficheros y directorios, por defecto, los del 
directorio activo. Por ejemplo;

\begin{tscreen}
/home/larry\# {\em ls} \\
Mail \\
letters \\
papers \\
/home/larry\#
\end{tscreen}

Aqu\'{\i} podemos ver que Larry tiene tres entradas en su directorio actual: 
{\tt Mail}, {\tt letters} y {\tt papers}. Esto no nos dice demasiado---?`son
ficheros o directorios?. Podemos usar la opci\'on {\tt -F} de la orden 
{\tt ls} para obtener m\'as informaci\'on.

\begin{tscreen}
/home/larry\# {\em ls\ --F} \\
Mail/ \\
letters/ \\
papers/ \\
/home/larry\#
\end{tscreen}

Por el car\'acter {\tt /} a\~nadido a cada nombre sabemos que las tres 
entradas son subdirectorios.

\index{ejecutable!definici\'on}
\index{fichero!ejecutable!definici\'on}
La orden {\tt ls -F} puede tambi\'en a\~nadir al final ``{\tt *}'', esto 
indica que es un fichero {\bf ejecutable}. Si {\tt ls -F} no a\~nade 
nada, entonces es un fichero normal, es decir no es ni un directorio ni 
un ejecutable.

Por lo general cada orden UNIX puede tomar una serie de opciones 
definidas en forma de argumentos. Estos usualmente comienzan con el 
car\'acter ``{\tt -}'', como vimos antes con {\tt ls -F}. La opci\'on 
{\tt -F} le dice a {\tt ls} que de m\'as informaci\'on sobre el tipo de 
ficheros---en este caso a\~nadiendo un {\tt /} detr\'as de cada nombre de 
un directorio.

Si a {\tt ls} le pasamos un nombre de directorio, mostrar\'a el contenido de
ese directorio.
\begin{tscreen}
/home/larry\# {\em ls\ --F papers} \\
english-lit \\
history-final \\
masters-thesis \\
notes/ \\
/home/larry\#
\end{tscreen}

Para ver un listado m\'as interesante, veamos el contenido de directorio del
sistema {\tt /etc}.

\begin{tscreen}
/home/larry\# {\em ls /etc} 
\begin{verbatim}
Images          ftpusers        lpc             rc.new          shells
adm             getty           magic           rc0.d           startcons
bcheckrc        gettydefs       motd            rc1.d           swapoff
brc             group           mount           rc2.d           swapon
brc~            inet            mtab            rc3.d           syslog.conf
csh.cshrc       init            mtools          rc4.d           syslog.pid
csh.login       init.d          pac             rc5.d           syslogd.reload
default         initrunlvl      passwd          rmt             termcap
disktab         inittab         printcap        rpc             umount
fdprm           inittab.old     profile         rpcinfo         update
fstab           issue           psdatabase      securetty       utmp
ftpaccess       lilo            rc              services        wtmp
/home/larry#
\end{verbatim}\end{tscreen}

(Para los usuarios de MS-DOS, n\'otese que los nombres de los ficheros pueden
ser mayores de 8 caracteres y pueden contener puntos en cualquier posici\'on.
Incluso es posible que un fichero contenga m\'as de un punto en su nombre.)

Vayamos al directorio ra\'{\i}z con ``{\tt cd ..}'' y desde all\'{\i} vayamos al
directorio {\tt /usr/bin}.

\begin{tscreen}
/home/larry\# {\em cd ..} \\
/home\# {\em cd ..} \\
/\# {\em cd usr} \\
/usr\# {\em cd bin} \\
/usr/bin\#
\end{tscreen}

Tambi\'en podemos movernos dentro de directorios en m\'ultiples pasos, 
como en {\tt cd /usr/bin}.

Trate de moverse por varios directorios usando {\tt ls} y {\tt cd}. En
algunos casos podr\'a encontrarse el desagradable mensaje de error
``{\tt Permission denied}''. Esto simplemente es debido a cuestiones de
seguridad del UNIX. Para poder moverse o listar un directorio debe de tener
permisos para poder hacerlo. Hablaremos m\'as sobre ello en la 
Secci\'on~\ref{sec-file-perms}.
\index{directorio!listando el contenido de|)}
\index{ls@{\tt ls}|)}
\index{listando el contenido de directorios|)}
\index{ficheros!listado|)}

\subsection{Creando directorios nuevos}

\index{directorio!creaci\'on}
\index{mkdir@{\tt mkdir}}
Es el momento de aprender a crear directorios. Para ello se usa la orden
{\tt mkdir}. Pruebe lo siguiente:

\begin{tscreen}
/home/larry\# {\em mkdir foo} \\
/home/larry\# {\em ls -F} \\
Mail/ \\
foo/ \\
letters/ \\
papers/ \\
/home/larry\# {\em cd foo} \\
/home/larry/foo\# {\em ls} \\
/home/larry/foo\# 
\end{tscreen}

!`Enhorabuena! Acaba de crear un directorio nuevo y moverse a \'el. Como 
no hay ning\'un fichero en el directorio nuevo, veamos como copiar 
ficheros desde un lugar a otro.

\subsection{Copia de ficheros}
\index{ficheros!copia}
\index{copia de ficheros}
\index{cp@{\tt cp}}
La copia de ficheros es efectuada por la orden {\tt cp}:

\begin{tscreen}
/home/larry/foo\# {\em cp /etc/termcap\ \ .} \\
/home/larry/foo\# {\em cp /etc/shells\ \ .} \\
/home/larry/foo\# {\em ls\ --F} \\
shells\ \ \ \ \ termcap  \\
/home/larry/foo\# {\em cp shells bells} \\
/home/larry/foo\# {\em ls\ --F} \\
bells\ \ \ \ \ shells\ \ \ \ \ termcap \\
/home/larry/foo\# 
\end{tscreen}

La orden {\tt cp} copia los ficheros listados en la l\'{\i}nea de 
comandos al fichero o directorio pasado como \'ultimo argumento. 
N\'otese como se usa el directorio ``{\tt .}'' para referirnos al 
directorio actual.

\subsection{Moviendo ficheros}
\index{ficheros!mover}
\index{movimiento de ficheros}
\index{mv@{\tt mv}}

La orden {\tt mv} mueve ficheros en lugar de copiarlos. La sintaxis es muy
sencilla.

\begin{tscreen}
/home/larry/foo\# {\em mv termcap sells} \\
/home/larry/foo\# {\em ls -F} \\
bells\ \ \ \ \ sells\ \ \ \ \ shells \\
/home/larry/foo\# 
\end{tscreen}

N\'otese como {\tt termcap} ya no existe, en su lugar est\'a el fichero 
{\tt sells}. Esta orden puede usarse para renombrar ficheros, como acabamos
de hacer, pero tambi\'en para mover ficheros a directorios diferentes.

\blackdiamond {\bf Nota:} {\tt mv} y {\tt cp} sobreescribir\'an los ficheros
destino (si ya existen) sin consultar. Sea cuidadoso cuando mueva un fichero
a otro directorio: puede haber ya un fichero con el mismo nombre que ser\'a
sobreescrito.


\subsection{Borrando ficheros y directorios}
\index{ficheros!borrar}
\index{borrar!ficheros}
\index{rm@{\tt rm}}

Para borrar un fichero, use la orden {\tt rm}. (``{\tt rm}'' viene de
``remove'').

\begin{tscreen}
/home/larry/foo\# {\em rm bells sells} \\
/home/larry/foo\# {\em ls -F} \\
shells \\
/home/larry/foo\#
\end{tscreen}

Nos hemos quedado solo con el fichero ``shells'', pero no nos quejaremos. 
N\'otese que {\tt rm} por defecto no preguntar\'a antes de borrar un 
fichero---luego, sea cuidadoso.

\index{borrar!directorio}
\index{directorio!borrar}
\index{rmdir@{\tt rmdir}}
Una orden relacionada con {\tt rm} es {\tt rmdir}. Esta orden borra un
directorio, pero solo si est\'a vacio. Si el directorio contiene ficheros o
subdirectorios, {\tt rmdir} se quejar\'a.

\subsection{Mirando los ficheros}
\index{ficheros!viendo el contenido de}
\index{more@{\tt more}}
\index{cat@{\tt cat}!para ver el contenido de ficheros}

Las \'ordenes {\tt more} y {\tt cat} son usadas para ver el contenido de
ficheros. {\tt more} muestra el fichero pantalla a pantalla mientras que
{\tt cat} lo muestra entero de una vez.

Para ver el contenido del fichero {\tt shells} podemos usar la orden
\begin{tscreen}
/home/larry/foo\# {\em more shells}
\end{tscreen}

Por si est\'a interesado en el contenido de {\tt shells}, es una lista de
int\'erpretes de comandos v\'alidos disponibles en el sistema. En la 
mayor\'{\i}a de los sistemas incluye {\tt /bin/sh}, {\tt /bin/bash} y 
{\tt /bin/csh}. Hablaremos sobre los diferentes int\'erpretes de 
comandos m\'as adelante.

Durante la ejecuci\'on de {\tt more} pulse \key{Space} para avanzar a la
p\'agina siguiente y \key{b} para volver a la p\'agina anterior. Hay otros
comandos disponibles, los citados son solo los m\'as b\'asicos. \key{q}
finalizar\'a la ejecuci\'on de {\tt more}.

Salga de {\tt more} y pruebe {\tt cat /etc/termcap}. El texto probablemente
pasar\'a demasiado r\'apido como para poder leerlo. El nombre ``{\tt 
cat}'' viene de ``concatenate'', que es para lo que realmente sirve el 
programa. La orden {\tt cat} puede ser usada para concatenar el contenido 
de varios ficheros y guardar el resultado en otro fichero. 
Esto se discutir\'a m\'as adelante.

\subsection{Obteniendo ayuda en l\'{\i}nea}

\index{UNIX!p\'aginas de manual para}
\index{ayuda!en l\'{\i}nea}
\index{p\'aginas de manual}
Pr\'acticamente cada sistema UNIX, incluido Linux, proporciona una utilidad
conocida como ``p\'aginas de manual''. Estas p\'aginas contienen 
documentaci\'on en l\'{\i}nea para todas las \'ordenes del sistema, 
recursos, ficheros de configuraci\'on, etc.

\index{man@{\tt man}}
La orden usada para acceder a las p\'aginas de manual es {\tt man}. Por
ejemplo, si est\'a interesado en conocer otras opciones de la orden {\tt ls},
puede escribir
\begin{tscreen}
/home/larry\# {\em man ls}
\end{tscreen}
y le ser\'a mostrada la p\'agina de manual para {\tt ls}.

Desafortunadamente la mayor\'{\i}a de las p\'aginas de manual han sido 
escritas por gente que ya conoc\'{\i}a lo que la orden o recurso hac\'{\i}a, 
por esto, las p\'aginas de manual usualmente solo contienen detalles 
t\'ecnicos de la orden sin ning\'un tipo de tutorial de uso. Pese a esto, 
estas p\'aginas son una gran fuente de informaci\'on que permiten 
refrescar la memoria si olvidamos la sintaxis de un comando. Igualmente, 
estas p\'aginas le dar\'an mucha informaci\'on sobre \'ordenes que no 
trataremos en este libro.

Le sugiero que pruebe {\tt man} con los comandos que ya hemos tratado y
con los que vayamos introduciendo. Notar\'a que alguno de los comandos no
tiene p\'agina de manual. Esto puede ser debido a diferentes motivos. En primer
lugar, las p\'aginas no han sido escritas a\'un (el Proyecto de Documentaci\'on 
de Linux es tambi\'en el responsable de las p\'aginas de manual). En segundo
lugar, la \'orden puede ser interna del int\'erprete de comandos, o un alias
(como los tratados en la Secci\'on~\ref{sec-shells-cmds}), en cuyo caso no
tendr\'an una p\'agina propia. Un ejemplo es la orden {\tt cd} la cual es
interna del int\'erprete de comandos. El propio int\'erprete de comandos es 
quien procesa {\tt cd}---no hay un programa separado.

