Discussion:
Diferencias entre enlaces rigidos y simbolicos
(demasiado antiguo para responder)
Waldin
2004-10-09 14:16:05 UTC
Permalink
Hola

Tal y como he leido en el manual de instalacion y primeros pasos en linux de
es.comp.os.linux, no acabo de ver la diferencia entre estos enlaces.

Un enlace rigido, tiene el mismo numero de inodo que el original. El
simbolico no, pero con este ultimo es mas facil saber a que fichero apunta
realmente...

¿Alguien puede explicarme en que momentos conviene usar uno u otro enlace?
Gracias

- --
Sistema: SuSE GNU/Linux 9.1 Edicion Personal | KDE 3.3.0.
Pentium IV | 1'70 Ghz | 512 DDR RAM |
Iván Sánchez Ortega
2004-10-09 14:40:31 UTC
Permalink
Post by Waldin
Tal y como he leido en el manual de instalacion y primeros pasos en linux
de es.comp.os.linux, no acabo de ver la diferencia entre estos enlaces.
Un enlace rigido, tiene el mismo numero de inodo que el original. El
simbolico no, pero con este ultimo es mas facil saber a que fichero apunta
realmente...
Veamos esto con un par de símiles. Imagínate que tu partición ext2 es un
libro, y que cada clúster de disco (normalmente 512 Bytes) es una página de
tu libro.

Supongamos que tu libro tiene unas 2000 páginas, y las primeras 200 se
dedican al índice y datos sobre el contenido del resto. El "resto" del
libro, unas 1800 páginas, son los i-nodos (texto puro y duro, datos
útiles).

Un enlace duro son dos entradas en el índice que apuntan a una misma página.
Es decir, tú miras en el índice "/etc/X11/XF86Config" y te manda a la
página 576. Si hay un enlace duro en "/root/tmp/XF86Config", y miras en qué
página está, el índice te indicará que en la 576.

En un enlace simbólico hay un grado más de indirección. Por ejemplo, al leer
"/opt/bin/tuxracer", el índice te lleva a la página 1345. Lees la página
1345 y lo único que te pone es "Véase /usr/bin/games/tuxracer". De ahí te
vas de nuevo al índice, que te indicará, por ejemplo, la página 821, y ahí
encontrarás el principio del fichero en cuestión.

(Ojo: tengo el formato de ext2 un poco oxidado, y las cosas pueden no ser
exáctamente como las cuento)
Post by Waldin
¿Alguien puede explicarme en que momentos conviene usar uno u otro enlace?
Se supone que un enlace duro se recomienda cuando estás enlazando cosas
dentro de la misma partición, y siempre quieras mantener al menos una de
esas "copias". Ten en cuenta que si hay varios enlaces duros apuntando al
mismo fichero (siempre hay al menos un enlace duro, por definición), el
fichero en sí no se borrará hasta que no desaparezcan *todos* los enlaces
duros.

Hoy en día, que yo sepa, los enlaces duros no son muy usados.

- --
- ----------------------------------
Iván Sánchez Ortega -ivansanchez-arroba-escomposlinux-punto-org

Un ordenador no es un televisor ni un microondas, es una herramienta
compleja.
Diego Calleja
2004-10-09 14:46:09 UTC
Permalink
Post by Waldin
Un enlace rigido, tiene el mismo numero de inodo que el original. El
simbolico no, pero con este ultimo es mas facil saber a que fichero apunta
realmente...
¿Alguien puede explicarme en que momentos conviene usar uno u otro enlace?
Gracias
el 99% de las veces se utilizan los simbólicos. La diferencia principal
es que los simbólicos apuntan a una ruta del sistema de archivos
(/usr/foo/bar) y los rígidos a un inodo que puede ser cualquier
archivo, precisamente por ello los rígidos no pueden hacer
un enlace a un punto del sistema de archivos que esté en otro disco
(si el sistema de archivos estuviera dividido en varios discos). Aunque
borres el archivo original al que se apunte, el enlace rígido sigue
funcionando y accediendo al archivo de manera que hasta que no borres
el archivo original y todos los enlaces rígidos el archivo no
"desaparecera". El enlace simbólico sin embargo apunta a un archivo
que puede haber sido borrado o no.

En el 99% de los casos se suele utilizar los enlaces simbólicos
por ser mas flexibles y mas "lógicos" y fáciles de administrar
(al menos para mi)
Haplo
2004-10-09 15:12:49 UTC
Permalink
Post by Waldin
Un enlace rigido, tiene el mismo numero de inodo que el original. El
simbolico no, pero con este ultimo es mas facil saber a que fichero apunta
realmente...
¿Alguien puede explicarme en que momentos conviene usar uno u otro enlace?
El enlace rígido en realidad es tener dos ficheros "apuntando" al mismo
contenido. De esta forma, si borras uno de estos ficheros, en realidad no
estás borrando el contenido, porque el contenido sólo se pierde cuando no
quedan ficheros "apuntando" a su contenido. Además, un enlace rígido sólo
puede hacer referencia a un fichero en la misma partición.

Los enlaces simbólicos son más flexibles. Un enlace simbólico no es más que
un fichero especial, que contiene la ruta del fichero al que "apunta" en
texto. Por ejemplo, un enlace simbólico /cdrom que apunte a /mnt/cdrom,
simplemente es un fichero de 10 bytes para almacenar la ruta. Cuando se
ponga "/cdrom" en una ruta, el sistema operativo reconoce que es un enlace
simbólico, y automáticamente sustituye /cdrom por /mnt/cdrom. Los enlaces
simbólicos pueden hacerse entre distintas particiones. Si borras el
"destino" apuntado por un enlace simbólico el enlace sigue existiendo, pero
evidentemente no se puede acceder a lo que apunta.

Ejemplo comentado:

***@elfstar:~$ mkdir prueba
***@elfstar:~$ ln -s prueba p
***@elfstar:~$ ll p
lrwxr-xr-x 1 haplo haplo 6 2004-10-09 17:10 p -> prueba

(borramos el directorio real)
***@elfstar:~$ rmdir prueba

(el enlace simbólico sigue existiendo)
***@elfstar:~$ ll p
lrwxr-xr-x 1 haplo haplo 6 2004-10-09 17:10 p -> prueba
***@elfstar:~$ ls p
p

(pero no se puede acceder a su contenido)
***@elfstar:~$ ls p/
ls: p/: No existe el fichero o el directorio

Fíjate como p es un fichero de 6 bytes, los necesarios para almacenar
"prueba". ^_^

Podrías entender esto aún mejor si entrases en la teoría de i-nodos y de
cómo se estructura la información en un sistema UNIX, pero bueno, espero
que te haya quedado claro.

Haplo
Waldin
2004-10-09 15:36:41 UTC
Permalink
Los enlaces rigidos, son enlaces apuntando al inodo que utiliza un fichero,
por eso no desaparece el fichero hasta que no borras todos los enlaces
duros.

Los enlaces simbolicos, vienen a ser algo parecido a los "accesos directos"
de Windows, es decir, que puedes borrar realmente el fichero real al que
apuntan y queda un acceso directo (enlace simbolico) inservible...

¿Es asi? :-)

- --
Sistema: SuSE GNU/Linux 9.1 Edicion Personal | KDE 3.3.0.
Pentium IV | 1'70 Ghz | 512 DDR RAM |
Haplo
2004-10-09 19:03:42 UTC
Permalink
Post by Waldin
Los enlaces simbolicos, vienen a ser algo parecido a los "accesos
directos" de Windows, es decir, que puedes borrar realmente el fichero
real al que apuntan y queda un acceso directo (enlace simbolico)
inservible...
¿Es asi? :-)
Sí, pero los enlaces simbólicos de UNIX están mucho más "dentro" del sistema
operativo que los accesos directos en Windows, porque los enlaces
simbólicos son un tipo de fichero especial (si haces "ls -l" puedes ver que
el primer carácter es una "l", mientras que los ficheros regulares es "-",
directorios es "d", etc.).

Intenta tener en mente también que un enlace duro no es en realidad un
enlace, sino otro fichero igual que el original, que apunta a los mismos
datos. Las únicas diferencias entre ambos son sus nombres, fechas de
creación, etc.

Pero vamos, que has captado la idea.

Haplo
Gonzalo Pérez de Olaguer Córdoba
2004-10-09 19:54:39 UTC
Permalink
Post by Haplo
Post by Waldin
Los enlaces simbolicos, vienen a ser algo parecido a los "accesos
directos" de Windows, es decir, que puedes borrar realmente el fichero
real al que apuntan y queda un acceso directo (enlace simbolico)
inservible...
¿Es asi? :-)
Sí, pero los enlaces simbólicos de UNIX están mucho más "dentro" del sistema
operativo que los accesos directos en Windows, porque los enlaces
simbólicos son un tipo de fichero especial (si haces "ls -l" puedes ver que
el primer carácter es una "l", mientras que los ficheros regulares es "-",
directorios es "d", etc.).
Intenta tener en mente también que un enlace duro no es en realidad un
enlace, sino otro fichero igual que el original, que apunta a los mismos
datos. Las únicas diferencias entre ambos son sus nombres, fechas de
creación, etc.
prueba esto:

$ touch test1
$ ln test1 test2
$ ls -l test*
$ chmod +x test2
$ ls -l test*

y verás que los permisos han cambiado tanto en test1 como en test2.

Un enlace duro es una entrada en un directorio, que relaciona un nombre con
un inodo.

En el inodo se almacena TODA la info relacionada con un fichero (tipo de
fichero, propietario, grupo, permisos, fechas, tamaño y contenido). Lo único
que no se almacena es el nombre, porque en UNIX el nombre NO es un atributo
del fichero.
--
Gonzalo Pérez de Olaguer Córdoba <***@iies.es>
PGP key 2861C704 --- F206 5671 6789 425D 111C 1302 214F 1934 2861 C704
Haplo
2004-10-09 23:05:34 UTC
Permalink
Post by Gonzalo Pérez de Olaguer Córdoba
Un enlace duro es una entrada en un directorio, que relaciona un nombre
con un inodo.
En el inodo se almacena TODA la info relacionada con un fichero (tipo de
fichero, propietario, grupo, permisos, fechas, tamaño y contenido). Lo
único que no se almacena es el nombre, porque en UNIX el nombre NO es un
atributo del fichero.
Tienes toda la razón, fue un lapsus. En UNIX una entrada de directorio es un
nombre y un inodo, así que lo único que diferiría sería el nombre. Es
lógico, por otra parte, porque si modificas un fichero entonces todos los
demás enlaces duros en realidad son el mismo fichero, por lo que también
han sido modificados, no tendría sentido que las fechas de modificación
fuesen distintas. :-P

Haplo
Iván Sánchez Ortega
2004-10-09 19:11:05 UTC
Permalink
Post by Haplo
Intenta tener en mente también que un enlace duro no es en realidad un
enlace, sino otro fichero igual que el original, que apunta a los mismos
datos. Las únicas diferencias entre ambos son sus nombres, fechas de
creación, etc.
Según alguna definición por ahí, un enlace duro es "otro nombre para el
*mismo* fichero".

(Joer, hace cuánto que no respondía a Haplo)
- --
- ----------------------------------
Iván Sánchez Ortega -ivansanchez-arroba-escomposlinux-punto-org

"If women didn't exist, all the money in the world would have no meaning."
- Aristotle Onassis (1906-1975)
LuismaGo
2004-10-09 23:38:58 UTC
Permalink
Post by Iván Sánchez Ortega
Según alguna definición por ahí, un enlace duro es "otro nombre para
el *mismo* fichero".
Sí, es así como dices, y Gonzalo en un post posterior viene a
corroborarlo. Sin embargo me temo que para entender realmente bien lo que
es un enlace duro no hay más remedio que meterse en la teoría de
i-nodos. Así que me vais a perdonar por el ladrillo que voy a soltar a
continuación. Es muy teórico y el que no esté por la labor ya le
aviso de antemano que, si quiere, no siga leyendo.

Voy a hablar de memoria (hace tiempo ya que estudié el tema) y si meto
algún zarpazo se agradecen las correcciones oportunas. Lo que explico a
continuación sólo vale para sistemas de ficheros como ext2/ext3 y
algunos otros más utilizados sobre todo en Unix (cada sistema de archivos
utiliza sus propias técnicas, como es lógico.

En realidad, en un sistema de ficheros como el ext2 los ficheros se
identifican por un número (llamado número de i-nodo), no por un nombre.
Simplificando, ext2 no sabe nada de nombres de fichero, ni de directorios
ni de subdirectorios. Un i-nodo, en particular, indica varios datos como
propietarios, permisos, tipo de fichero y ubicación física de los datos
del fichero en el disco.

El acceso a un fichero, pasa entonces por conocer su número de i-nodo y
aquí es donde entran en juego los directorios (o subdirectorios). Éstos
son ajenos, estrictamente hablando, a la estructura del sistema de
ficheros. En realidad, un subdirectorio no es más que un fichero más de
texto que relaciona nombres de fichero con el número de i-nodo que le
corresponda. Y como un fichero más, a un subdirectorio también le toca
su correspondiente número de i-nodo.

El sistema operativo sólo conoce un dato: el directorio raíz es el
i-nodo número 2. Con este único dato puede obtener el número de i-nodo
de cualquier fichero que se especifique. Por ejemplo:

¿Cual es el i-nodo del fichero /usr/bin/perl?

1. Leo el i-nodo número 2, que es el directorio raíz. Ahí vendrá una
lista de varios ficheros y directorios, entre ellos 'usr', con su número
de i-nodo correspondiente. Supongamos que a 'usr' le ha tocado el i-nodo
número 11.

2. Leo el i-nodo número 11 y veo que el tipo de fichero es un directorio.
Vendrá otra lista de varios ficheros y directorios. 'bin' estará entre
ellos y leo su número de i-nodo que le corresponde, supongamos que el
137.

3. Leo el i-nodo 137 y veo que es un directorio. Al leerlo veo que a
'perl' le corresponde, supongamos, el i-nodo 1204. Ya tengo el i-nodo del
fichero /usr/bin/perl, que es lo que buscábamos.

Nada impide que se repita la asignación de i-nodo a dos nombres
distintos, del mismo o incluso de distintos directorios [1]. Si en el
ejemplo anterior, en el directorio 'usr' pongo una entrada que asigne al
nombre de fichero 'perlita' el i-nodo 1204, entonces tendré que
/usr/perlita es un enlace duro a /usr/bin/perl. Y, como el sistema de
ficheros identifica a éstos únicamente por el número de i-nodo, como
bien dicen Iván y Gonzalo es el mismo fichero a todos los efectos.

Con los enlaces simbólicos no ocurre nada de esto. Un enlace simbólico
es otro i-nodo diferente al del fichero original al que apunta. Lo que
ocurre es que en este i-nodo se marca que el fichero es de tipo enlace
simbólico. El contenido en sí del fichero es la ruta al fichero original
al que apunta (para el cual habrá que calcular de nuevo su número de
i-nodo) [2]

Notas:
[1] Existe la restricción de que los enlaces duros sólo pueden hacerse
entre ficheros y directorios de una misma partición. Es la consecuencia
de que los números de i-nodo son locales a cada sistema de ficheros
creado sobre cada partición.

[2] Y como son ficheros diferentes (en el sentido de i-nodos diferentes),
con los enlaces simbólicos desaparece la restricción mencionada en la
nota [1].

Lo dicho, perdón por todo este rollo y un saludete.
Javier Sedano
2004-10-14 12:43:44 UTC
Permalink
Post by Waldin
Los enlaces simbolicos, vienen a ser algo parecido a los "accesos directos"
de Windows, es decir, que puedes borrar realmente el fichero real al que
apuntan y queda un acceso directo (enlace simbolico) inservible...
Ejem... los accesos directos son parecidos a los enlaces simbolicos.
--
Javier Sedano Jarillo: ***@agora-2000.com
Agora Systems, S.A.
C/Aravaca 12
E-28040 Madrid (Spain)
Tel.: +34 91 533 58 57
Fax.: +34 91 534 84 77
--------
Imagina que hay una guerra... y no vamos nadie.
Gonzalo Pérez de Olaguer Córdoba
2004-10-14 22:52:23 UTC
Permalink
Post by Javier Sedano
Post by Waldin
Los enlaces simbolicos, vienen a ser algo parecido a los "accesos directos"
de Windows, es decir, que puedes borrar realmente el fichero real al que
apuntan y queda un acceso directo (enlace simbolico) inservible...
Ejem... los accesos directos son parecidos a los enlaces simbolicos.
la propiedad de "parecerse" es conmutativa :-)
--
Gonzalo Pérez de Olaguer Córdoba <***@iies.es>
PGP key 2861C704 --- F206 5671 6789 425D 111C 1302 214F 1934 2861 C704
Lokutus
2004-10-09 16:03:49 UTC
Permalink
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hola
Tal y como he leido en el manual de instalacion y primeros pasos en linux
de es.comp.os.linux, no acabo de ver la diferencia entre estos enlaces.
Imaginate por un momento, que tienes en un DVD tropecientos mil
archivos, guardados con nombres raros, generados aleatoriamente, es
decir, que si haces un ls -l al DVD, no sabes ni que archivos son,
ni su extensión.

E imaginate también, que tienes un MySQL, que guarda en una tabla
los nombres de los ficheros.

La tabla es tal como la siguiente:

------------------------------------------------
Nombre Original | Nombre DVD
................................................

FotoPlaya.jpg | ur529djR35s6xct4
Perrin.exe | iew465snc634sdkl
..........................................
..........................................
..........................................
..........................................
MySQL.tgz | t4dy6fvjd5gfnh4vc
________________________________________________

Cuando quieres recuperar un fichero determinado, por ejemplo
"FotoPlaya.jpg", primero tienes que consultar la base de datos
para saber qué nombre real corresponde, en este caso sería
"ur529djR35s6xct4" y te bajarías ese fichero al que despues
renombrarías con su nombre correcto.

Ahora bién: ¿qué te impediría tener a un mismo fichero del
DVD referenciado dos veces, por ejemplo:

------------------------------------------------
Nombre Original | Nombre DVD
................................................

FotoPlaya.jpg | ur529djR35s6xct4
NenaHermosa.jpg | ur529djR35s6xct4
Perrin.exe | iew465snc634sdkl
..........................................
..........................................
..........................................
..........................................
MySQL.tgz | t4dy6fvjd5gfnh4vc
________________________________________________

En este caso, "FotoPlaya.jpg" y "NenaHermosa.jpg" son el mismo
fichero realmente, es decir, apuntan al mismo fichero. Pero está
dos veces dado de alta en la base de datos.

En este caso, correspondería, a lo que en UNIX se llama un
enlace duro.

Por otro lado, podrías crear un fichero llamado linkNena.txt
con el siguiente contenido:

$ cat linkNena.txt
NenaHermosa.jpg
$ _

Y procederías a insertarlo en la base de datos:

------------------------------------------------
Nombre_Original | Nombre_DVD
................................................

FotoPlaya.jpg | ur529djR35s6xct4
NenaHermosa.jpg | ur529djR35s6xct4
linkNena.txt | kder5438vbfsrgyf
Perrin.exe | iew465snc634sdkl
..........................................
..........................................
..........................................
..........................................
MySQL.tgz | t4dy6fvjd5gfnh4vc
________________________________________________

En este caso, tu hipotético programa cliente, al pedir el fichero
"linkNena.txt", haría los siguientes pasos:

- Busca "linkNena.txt" y encuentra que el fichero en el DVD es
"kder5438vbfsrgyf".
- Se baja el fichero "kder5438vbfsrgyf".
- Mira su contenido, y encuentra que contiene "NenaHermosa.jpg"
- Vuelve a buscar en la base de datos "NenaHermosa.jpg" y encuentra
que es "ur529djR35s6xct4"
- Se baja el fichero "ur529djR35s6xct4"

Este caso, es similar al enlace simbólico del mundo UNIX. El
resultado, al final es el mismo, pero en el caso del enlace simbólico,
tenemos una doble indirección.

Tanto en el mundo UNIX como en nuestro ejemplo basado en una base de
datos, un enlace simbólico, constituye de por sí, un fichero diferente.

El equivalente más cercano en el mundo Windows, son los picheros *.PIF
y los *.LNK.

En el mundo UNIX, el equivalente a la base de datos, sería la tabla de
inodos, que contiene como mínimo un inodo por cada fichero

Por supuesto, el equivalente al campo DVD, no sería el nombre de un
fichero, si no el número de cluster en el que encuentra, en realidad,
tiene varios punteros a sectores.

Aunque en realidad la estructura de un inodo, es algo más compleja que la
de una tabla de una base de datos. Cuando el fichero crece demasiado, es
posible que se necesiten más inodos auxiliares, (sin que eso constituya un
enlace duro).

--
Lokutus, Asimilando la red
Continúe leyendo en narkive:
Loading...