¿Los enlaces duros equivalen a los atajos de Windows?

52

Wikipedia define un enlace duro como:

una entrada de directorio que asocia un nombre con un archivo en un sistema de archivos. (Un directorio es en sí mismo un tipo especial de archivo que contiene una lista de tales entradas). El término se usa en sistemas de archivos que permiten crear múltiples enlaces duros para el mismo archivo.

Me pregunto si el concepto de enlace duro es equivalente al concepto de acceso directo de Windows .

Si los enlaces duros no son equivalentes a los accesos directos, ¿cuál es la característica de Windows más cercana a los enlaces duros?

Computernerd
fuente
1
En realidad, hay algunas referencias excelentes de esa página wiki que compartiste.
excéntricoSam
8
Microsoft NTFS es compatible con hardlink y son muy similares a unix hardlink. Creo que los atajos son objeto especial ob Environnement las ventanas pero no están relacionadas con la organización de sistema de archivos al contrario de los enlaces duros reales
Kiwy
El siguiente enlace ofrece buenas explicaciones: comptb.cects.com/…
3
Creo que el paralelo es engañoso, los atajos son enlaces de "interfaz" solo archivos con información de texto sobre el objetivo que son interpretados por la interfaz y no por el sistema de archivos. Desde una línea de comandos, en realidad no apuntan a algo en el sentido del sistema de archivos. Windows (o mejor dicho NTFS) tiene enlaces simbólicos adecuados en.wikipedia.org/wiki/NTFS_symbolic_link que no son accesos directos ni enlaces duros. De hecho, los uso en Windows para tener carpetas de Dropbox en cualquier lugar, esto no se puede hacer con accesos directos.
alfC
55
Los archivos de acceso directo de Windows son muy parecidos a los archivos .desktop de Linux. Los enlaces simbólicos y los enlaces duros de Linux son algo completamente diferente que a veces tienen el mismo propósito.
mikebabcock

Respuestas:

113

No, un enlace duro es completamente diferente. Un enlace suave está más cerca de un acceso directo de Windows (aunque existen diferencias importantes, los enlaces simbólicos son más similares a los accesos directos de Windows que los enlaces duros). Un enlace duro es algo diferente y uno que casi nunca necesitará.

Brevemente, se crea un enlace suave con este comando:

ln -s foo bar

Si luego corres ls -l, verás:

lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

El ->medio que bares un enlace a foo. Entonces, abrir bar, con un editor de texto, por ejemplo, en realidad abrirá el archivo por separado foo. Sin embargo, la eliminación barsolo eliminará el acceso directo, no afectará el archivo foo.

Los enlaces duros, por otro lado, se crean con este comando:

ln foo bar

Si ahora ejecuta ls -l, no hay indicios de ninguna relación entre los archivos:

-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

Pero, y esto es muy importante, en realidad son el mismo archivo . Los archivos en los sistemas de archivos Unix se almacenan usando inodes ; Un inodo es básicamente la forma en que el sistema de archivos asigna un nombre de archivo a una ubicación particular en el disco duro físico. Entonces, los enlaces duros son archivos que apuntan al mismo inodo que su destino. Otra forma de decir esto es que todos los archivos son en realidad enlaces duros que apuntan a sus inodos. Hacer un enlace duro a un archivo solo crea un nuevo puntero (archivo) en el sistema de archivos que apunta al mismo inodo. Cada inodo puede tener múltiples archivos apuntando a él o uno, o ninguno.

Para entender esto más claramente, use ls -ique muestra el inodo asociado con un archivo. Creemos un enlace suave y un enlace duro y veamos qué sucede:

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo

Ahora, verifique sus inodos:

ingrese la descripción de la imagen aquí

Como se puede ver arriba, tanto fooy HardLinkToFootienen el mismo inodo (16648029), mientras que SoftLinkToFoo tiene una diferente (16648036).

¿Qué sucede si cambiamos el nombre foocon mv foo bar?

ingrese la descripción de la imagen aquí

El color rojo indica un enlace blando roto, uno cuyo objetivo ya no se puede encontrar. Esto se debe a que los enlaces suaves apuntan al nombre de un archivo, no a su inodo. Tenga en cuenta que a pesar de cambiar el nombre, el inodo sigue siendo el mismo, por lo que el enlace duro está bien, aún funciona.

En resumen, los enlaces duros son en realidad dos manifestaciones del mismo archivo; son punteros a la misma sección del disco. Los enlaces blandos son solo atajos. Para tomar una analogía del mundo real, los enlaces duros son como dos números de teléfono diferentes para la misma línea telefónica y los enlaces suaves son como tener dos líneas telefónicas diferentes en la misma casa.

terdon
fuente
66
@Kiwy Es lo contrario: los enlaces simbólicos absolutos fallan de muchas maneras diferentes (tan pronto como mueves los datos, los montas en un lugar diferente, los copias de seguridad, ...) y es mejor evitarlos.
Gilles 'SO- deja de ser malvado'
3
También vale la pena señalar que eliminar (a través de rmo unlink()) un enlace duro solo disminuye el recuento de enlaces hasta que el recuento de enlaces llegue a cero, cuando se liberan los bloques ocupados por el contenido del archivo. No estoy seguro de que decir "los enlaces duros son en realidad dos instancias del mismo archivo" es estrictamente correcto, ya que los dos nombres apuntan al mismo inodo y, por lo tanto, al mismo contenido, en lugar de que haya dos instancias del mismo archivo en cualquier sentido.
Emmet
77
Tenga en cuenta que un acceso directo de Windows es un archivo utilizado por el shell y, por lo tanto, puede hacer cosas que el shell conoce, pero no el sistema de archivos. Por ejemplo, puede crear accesos directos en el espacio de nombres del shell (por ejemplo, Panel de control, Computadora, etc.), o puede hacer accesos directos a aplicaciones que aún no se han instalado (que se instalarán en el primer uso). Esas cosas no tienen un equivalente directo en el mundo del sistema de archivos.
Joey
2
Me encanta esta respuesta, pero en realidad es bastante pobre para entender qué es un acceso directo de Windows. @Shaakunthala a continuación tiene una mejor respuesta ya que el acceso directo de Windows se parece más a un archivo .desktop de Linux que a un enlace simbólico.
mikebabcock
18

Hay una buena explicación de qué son los enlaces blandos y duros, pero hay que aclarar una cosa.

Ventanas atajos son equivalentes o similares a ni enlaces blandos ni enlaces duros . En el nivel del sistema de archivos son solo archivos. Es el shell que entiende su estructura y los interpreta como enlaces. Los accesos directos de Windows también pueden apuntar a objetos en espacios de nombres de shell que no están relacionados con el sistema de archivos (impresoras, elementos del panel de control, carpetas virtuales).

Los accesos directos de Windows, además del nombre del objeto del sistema de archivos, contienen la siguiente información: PIDL ("ruta" binaria opaca dentro del espacio de nombres de shell), descripción, tecla de acceso rápido, icono, directorio de trabajo. Windows también agrega identificadores de objetos NTFS si se utiliza el sistema de archivos NTFS, para corregir atajos rotos.

El equivalente aproximado de un acceso directo de Windows es un archivo .desktop . Vea esta pregunta en SuperUser: ¿Hay un equivalente de .lnk en Linux?

Athari
fuente
6

No. En Linux las cosas funcionan de manera diferente.

Cada archivo está representado por un objeto llamado 'inodo'. Cada inodo tiene un número (ID) asociado.

Como sabemos, los humanos no son buenos para recordar números sino nombres. (Así evolucionaron las guías telefónicas)

Por lo tanto, el nombre de archivo entró en la imagen para dar a cada inodo un nombre legible por humanos. Básicamente, un enlace duro une un nombre de archivo a un inodo. Un inodo puede tener múltiples enlaces duros. Si no hay enlaces duros presentes para un inodo en particular, el espacio en disco utilizado por el inodo puede reasignarse para nuevos archivos. Lo que significa que debe presentarse al menos un enlace duro para cada archivo. El nombre de archivo (visualizado como el nombre de archivo / icono que ve en el explorador de archivos) en sí mismo es un enlace duro.

En Windows, el acceso directo es un archivo separado (archivo * .lnk). Contiene información sobre el archivo original (comprensiblemente, la ruta del archivo). En la percepción de Linux, un acceso directo de Windows sería otro inodo vinculado a un nombre de archivo que termina con '.lnk'.

Shaakunthala
fuente
3
NTFS realmente funciona de esta manera. Un archivo es una entrada en la MFT, y las entradas de directorio simplemente asignan nombres de archivo a ID de archivo. Admite enlaces duros y, desde 2008/7 / Vista (?), Incluso enlaces simbólicos. En este punto, la mayor diferencia es cultural.
cHao
2

En Windows también puede crear enlaces duros si tiene un sistema de archivos NTFS.

fsutil hardlink create target_file source_file

Los archivos deben estar en la misma unidad lógica.

Espectro
fuente
Eso es correcto: NTFS también admite enlaces duros. A menudo, las herramientas requieren que tenga privilegios de administrador para crearlas. Acerca de la "misma unidad lógica": sería más preciso decir que deben estar en el mismo sistema de archivos. Una unidad lógica podría ser cualquier cosa, incluida una letra de unidad creada por el substcomando. Sin embargo, es posible que una herramienta no sepa / no se preocupe por esto y, por lo tanto, se niegue a crear un enlace duro. Una cosa muy útil es la Extensión Link Shell que permite al explorador crearlos.
Tobias
1

Una gran diferencia, el enlace duro no se puede crear para carpetas, sino para archivos.

Se puede crear un acceso directo para carpetas, por lo que no puede decir que son equivalentes.

Su pregunta debe ser la diferencia entre enlace simbólico o enlace suave y acceso directo .

según esto:

Un enlace simbólico es el nivel del sistema de archivos, y todo lo ve como el archivo original. Una aplicación no necesita soporte especial para usar un enlace simbólico.

Un "acceso directo" es solo un archivo normal que tiene una referencia al archivo o directorio de destino.

Entonces, cuando hace clic en un acceso directo, su directorio cambiará al archivo real, mientras que el enlace suave se referirá a su ubicación como si fuera el archivo real, para eso en Linux puede usar terminal y cd para enlaces simbólicos mientras no puede cd a accesos directos .

Un acceso directo de Windows y un iniciador de Linux (apuntando a alguna ubicación) serían idénticos.

nux
fuente
2
¿Qué? Los enlaces suaves son solo archivos, aunque extraños, también ocupan inodos, por ejemplo. NO se tratan como el original (es decir, enlaces duros). Si bien es cierto que los enlaces duros no están permitidos para directorios en la mayoría de los sistemas operativos, esto es solo una característica de seguridad y hay excepciones (por ejemplo, la máquina del tiempo OSX). Y, por supuesto, puede cd a atajos (supongo que se refiere a atajos de Windows ya que, como usted dice, puede cd a soflinks).
terdon
1
¿estás seguro de que puedes usar cmd para cd a un acceso directo?
nux
1
Acabo de encender mi VM de Windows y creé un acceso directo a una carpeta en mi escritorio, los accesos directos de Windows son muy similares (si no idénticos) a los enlaces simbólicos. Si bien no puede cd a ellos usando cmd.exe por alguna razón, puede crear un .lnk en un directorio y usarlo a través del explorador.
terdon
1
los votantes deberían dar una razón para votar a favor
nux
55
Lo siento, aún no es correcto. Los enlaces simbólicos son archivos que contienen su destino como texto sin formato (ver aquí ), los enlaces simbólicos no se tratan como el original, esa es la diferencia entre los enlaces simbólicos y los enlaces duros. Los lanzadores de Linux (supongo que te refieres a los archivos .desktop) no tienen nada que ver con esto, son completamente diferentes. Como usted mismo dice, los atajos de Windows pueden apuntar a archivos (incluidos programas) y carpetas (Mac y Windows tienen carpetas, Linux tiene directorios). Los archivos de escritorio simplemente le permiten iniciar un programa. No enlazan a ninguna parte.
terdon