% Linux Installation and Getting Started    -*- TeX -*-
% links.tex
% Copyright (c) 1992, 1993 by Matt Welsh <mdw@sunsite.unc.edu>
%
% 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: links.tex,v $
% Revision 0.5.0.1  1996/02/10 23:45:15  rcamus
% Primera beta publica
%
%


\section{Manejando enlaces de ficheros}\label{sec-manage-links}
\index{ficheros!enlaces|(}
\index{enlaces|(}
\index{n\'umero de inodo!defined}
\index{ficheros!n\'umeros de inodo}

Los enlaces le permiten dar a un \'unico fichero m\'ultiples nombres. Los
ficheros son identificados por el sistema por su {\bf n\'umero de inodo}, el
cual es el \'unico identificador del fichero para el sistema de ficheros
\footnote{La orden {\tt ls -i} mostrar\'a los n\'umeros de inodo.}. Un
directorio es una lista de n\'umeros de inodo con sus correspondientes 
nombres
de fichero. Cada nombre de fichero en un directorio es un {\bf enlace} a un
inodo particular.

\subsection{Enlaces duros (Hard links)}
\index{enlaces!duros}
La orden {\tt ln} es usada para crear m\'ultiples enlaces para un fichero. Por
ejemplo, supongamos que tiene un fichero {\tt foo} en un directorio. Usando
{\tt ls -i}, veremos el n\'umero de inodo para el fichero.
\begin{tscreen}
\# {\em ls -i foo} \\
22192 foo \\
\#
\end{tscreen}
Aqui, el fichero {\tt foo} tiene el n\'umero de inodo 22192 en el sistema de
ficheros. Podemos crear otro enlace a {\tt foo}, llamado {\tt bar}:
\begin{tscreen}
\# {\em ln foo bar} 
\end{tscreen}
Con {\tt ls -i} veremos que los dos ficheros tienen el mismo inodo.
\begin{tscreen}
\# {\em ls -i foo bar} \\
22192 bar\ \ \ 22192 foo \\
\#
\end{tscreen}
Ahora, accediendo a {\tt foo} o a {\tt bar} accederemos al mismo fichero. Si
hace cambios en {\tt foo}, estos cambios tambi\'en ser\'an efectuados en 
{\tt bar}. Para todos los efectos, {\tt foo} y {\tt bar} son el mismo
fichero.

Estos enlaces son conocidos como {\em enlaces duros (hard links)\/} porque
directamente crean el enlace al inodo. Notese que solo podemos crear enlaces
duros entre ficheros del mismo sistema de ficheros; enlaces simb\'olicos (ver
m\'as adelante) no tienen esta restricci\'on.

Cuando borra un fichero con {\tt rm}, est\'a solamente borrando un enlace a un
fichero. Si usa el comando
\begin{tscreen}
\# {\em rm foo}
\end{tscreen}
solo el enlace de nombre {\tt foo} es borrado; {\tt bar} todav\'{\i}a 
existir\'a. Un fichero es solo definitivamente borrado del sistema cuando 
no quedan enlaces a \'el. Usualmente, los ficheros tienen un \'unico 
enlace, por lo que el uso de {\tt rm} los borra. Pero si el fichero tiene 
m\'ultiples enlaces, el uso de {\tt rm} solo borrar\'a un \'unico enlace; 
para borrar el fichero, deber\'a borrar todos los enlaces del fichero.

\index{enlaces!mostrar n\'umero de}
La orden {\tt ls -l} muestra el n\'umero de enlaces a un fichero (entre otra
informaci\'on).
\begin{tscreen}
\# {\em ls -l foo bar} \\
\verb!-rw-r--r--   2 root     root          12 Aug  5 16:51 bar! \\
\verb!-rw-r--r--   2 root     root          12 Aug  5 16:50 foo! \\
\#
\end{tscreen}
La segunda columna en el listado, ``{\tt 2}'', especifica el n\'umero de
enlaces al fichero.

As\'{\i} resulta que un directorio no es m\'as que un fichero que 
contiene informaci\'on sobre la translaci\'on enlace a inodo. Tambi\'en, 
cada directorio tiene al menos dos enlaces duros en \'el: ``{\tt .}'' (un 
enlace apuntando a si mismo) y ``{\tt ..}'' (un enlace apuntando al 
directorio padre). En el directorio ra\'{\i}z ({\tt /}), el enlace ``{\tt 
..}'' simplemente apunta a {\tt /}.

\subsection{Enlaces simb\'olicos}
\index{enlaces!simb\'olicos}

Los enlaces simb\'olicos son otro tipo de enlace, que es diferente al enlace
duro. Un enlace simb\'olico permite dar a un fichero el nombre de otro, 
pero no enlaza el fichero con un inodo.

La orden {\tt ln -s} crea un enlace simb\'olico a un fichero. 
Por ejemplo, si usamos la orden
\begin{tscreen}
\# {\em ln -s foo bar}
\end{tscreen} 

crearemos un enlace simb\'olico {\tt bar} apuntando al fichero {\tt foo}. Si
usamos {\tt ls -i}, veremos que los dos ficheros tienen inodos diferentes,
en efecto.
\begin{tscreen}
\# {\em ls -i foo bar} \\
22195 bar\ \ \ 22192 foo \\
\#
\end{tscreen}

De cualquier modo, usando {\tt ls -l} vemos que el fichero {\tt bar} es un
enlace simb\'olico apuntando a {\tt foo}.
\begin{tscreen}
\# {\em ls -l foo bar} \\
\verb!lrwxrwxrwx   1 root     root           3 Aug  5 16:51 bar -> foo! \\
\verb!-rw-r--r--   1 root     root          12 Aug  5 16:50 foo! \\
\#
\end{tscreen}

Los bits de permisos en un enlace simb\'olico no se usan (siempre aparecen
como {\tt rwxrwxrwx}). En su lugar, los permisos del enlace simb\'olico son
determinados por los permisos del fichero ``apuntado'' por el enlace (en
nuestro ejemplo, el fichero {\tt foo}).

Funcionalmente, los enlaces duros y simb\'olicos son similares, pero hay
algunas diferencias. Por una parte, puede crear un enlace simb\'olico a un
fichero que no existe; lo mismo no es cierto para enlaces duros. Los enlaces
simb\'olicos son procesados por el n\'ucleo de forma diferente a los duros, lo
cual es solo una diferencia t\'ecnica, pero a veces importante. Los enlaces
simb\'olicos son de ayuda puesto que identifican al fichero al que apuntan;
con enlaces duros no hay forma f\'acil de saber que fichero est\'a enlazado al
mismo inodo.

Los enlaces se usan en muchas partes del sistema Linux. Los enlaces
simb\'olicos son especialmente importantes para las im\'agenes de las 
librer\'{\i}as compartidas en {\tt /lib}. Ver la 
Secci\'on~\ref{sec-upgrade-libs} para m\'as informaci\'on.
\index{ficheros!enlaces|)}
\index{enlaces|)}
