web-dev-qa-db-fra.com

Quelle est la différence entre un lien dur et un lien symbolique?

Comme le titre l'indique, j'aimerais connaître la différence entre un lien physique et un lien logiciel créé par la commande lnname__. La commande man ln fournit des informations, mais ne répond pas suffisamment à ma question.

De plus, ce serait bien si quelqu'un pouvait fournir un paramètre dans lequel un lien physique pourrait être préférable à un lien symbolique.

470
ste_kwr

Sous Linux/Unix, les raccourcis sont appelés liens.


Les liens sont de deux types: les liens symboliques (liens symboliques) ou les liens physiques.

  1. Soft Links (liens symboliques)

    Vous pouvez créer des liens vers des fichiers et des répertoires et créer des liens (raccourcis) sur différentes partitions et avec un numéro d'inode différent de celui d'origine.

    Si la copie réelle réelle est supprimée, le lien ne fonctionnera pas.

  2. liens durs

    Les liens physiques ne concernent que les fichiers; vous ne pouvez pas créer de lien vers un fichier sur une partition différente avec un numéro d'inode différent.

    Si la copie réelle est supprimée, le le lien fonctionne, car il accède aux données sous-jacentes auxquelles la copie réelle accédait.


Question: Comment créer un lien symbolique?

Answer: Un lien symbolique peut être créé avec ln -s; Vous devez d’abord définir la source, puis la destination. (N'oubliez pas que vous devez définir les chemins complets de la source et de la destination, sinon cela ne fonctionnera pas.)

 Sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1
             (----------Source-------)             ( Destination )

enter image description here

Comme vous pouvez le voir, il a un inode différent et peut être créé sur une partition différente.


Question: Comment créer un lien dur?

Answer: Un lien physique peut être établi avec ln; Vous devez d’abord définir la source, puis la destination. (N'oubliez pas que vous devez définir le chemin complet de la source et de la destination, sinon cela ne fonctionnera pas.)

Disons que j'ai un script dans le répertoire /script nommé firefox.

 ls -i # Shows you the inode
 5898242 firefox

 ln /scripts/firefox /scripts/on-fire
       ( Source )    ( Destination )

enter image description here

Comme vous pouvez le voir, il a même inode. Si je supprime l'original, le lien fonctionnera et il agira comme l'original.

enter image description here

Ci-dessus, je vérifie que le lien fonctionne, puis supprime le script Firefox d'origine.


You Question: Ce serait bien si quelqu'un pouvait fournir un réglage dans lequel un lien physique pourrait être préférable à un lien symbolique.

Réponse: Selon la disposition de la partition de disque, liens durs ont la limitation d'être sur la même partition (-1 point) et ne peut que lien vers les fichiers (-1 point)), mais + 1 point si l'original est supprimé, le lien fonctionnera et il agira comme l'original.

D'autre part, un lien symbolique peut pointer vers des répertoires ou des fichiers (+1 point) et il n'y a pas de limitation de partition (+1 point), mais (- 1 point) si la source est supprimée le lien ne fonctionnera pas.

46
Qasim

Un lien physique n'est pas un pointeur sur un fichier, c'est une entrée de répertoire (un fichier) pointant sur le même inode. Même si vous modifiez le nom de l'autre fichier, un lien dur pointe toujours vers le fichier. Si vous remplacez l'autre fichier par une nouvelle version (en le copiant), un lien matériel ne pointera pas sur le nouveau fichier. Vous ne pouvez avoir que des liens durs dans le même système de fichiers. Avec les liens durs, vous n'avez pas la notion des fichiers et des liens d'origine, ils sont tous égaux (considérez-le comme une référence à un objet). C'est un concept de très bas niveau.

D'autre part, un lien symbolique pointe en fait sur un autre chemin (un nom de fichier); il résout le nom du fichier chaque fois que vous y accédez via le lien symbolique. Si vous déplacez le fichier, le lien symbolique ne suivra pas. Si vous remplacez le fichier par un autre en conservant le nom, le lien symbolique désignera le nouveau fichier. Les liens symboliques peuvent s'étendre sur des systèmes de fichiers. Avec les liens symboliques, vous faites une distinction très claire entre le fichier réel et le lien symbolique, qui ne stocke aucune information à côté du chemin d'accès au fichier sur lequel il pointe.

320
vartec

"Une image vaut mieux que mille mots." Pictorial representation


Et, "Un exemple vaut cent paragraphes ..."

Créez deux fichiers:

$ touch blah1   
$ touch blah2

Entrez quelques données dans eux:

$ echo "Cat" > blah1
$ echo "Dog" > blah2

Et comme prévu:

$cat blah1; cat blah2
Cat
Dog

Créons des liens durs et souples:

$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft

Voyons ce qui vient de se passer:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

Changer le nom de blah1 n'a pas d'importance:

$ mv blah1 blah1-new
$ cat blah1-hard
Cat

blah1-hard pointe sur l'inode, le contenu du fichier - cela n'a pas changé.

$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory

Le contenu du fichier n'a pas pu être trouvé car le lien virtuel pointe vers le nom, qui a été modifié, et non vers le contenu.
De même, si blah1 est supprimé, blah1-hard en conserve le contenu; si blah2 est supprimé, blah2-soft est simplement un lien vers un fichier non existant.


source: copie flagrante de StackOverflow!

312
ABcDexter

Les deux sont des pointeurs vers des fichiers; la différence est le genre du pointeur. Un lien symbolique pointe vers un autre fichier par nom. Il a un bit de mode spécial qui l'identifie comme un lien symbolique et son contenu est le nom du fichier réel. Comme il ne contient qu'un nom, ce nom ne doit pas nécessairement exister, ou peut exister sur un autre système de fichiers. Si vous remplacez le fichier nommé (changez son contenu sans affecter son nom), le lien contient toujours le même nom et pointe donc maintenant vers le nouveau fichier. Vous pouvez facilement identifier un lien symbolique et voir le nom du fichier sur lequel il pointe.

Un lien physique pointe vers le fichier par numéro d'inode. En tant que tels, les liens physiques ne sont pas différents du prénom d'un fichier. Il n'y a pas de "vrai" nom par rapport au nom du lien physique; tous les liens physiques sont des noms également valides pour le fichier. Pour cette raison, le fichier auquel vous vous associez doit exister et se trouver dans le même système de fichiers que celui où vous essayez de créer le lien. Si vous supprimez le nom d'origine, le lien physique pointe toujours vers le même fichier. Étant donné que tous les liens physiques sont des noms également valides pour le fichier, vous ne pouvez pas en regarder un et voir les autres noms du fichier; pour le trouver, vous devez examiner chaque fichier et comparer son numéro d'inode afin de trouver le ou les autres noms portant le même numéro d'inode.

Vous pouvez connaître le nombre de noms d’un fichier à partir de la sortie de ls -l. Le premier nombre après le mode fichier est le nombre de liens. Un fichier avec plus d'un lien a un autre nom quelque part, et inversement, un fichier avec un nombre de liens égal à 1 seulement n'a pas (d'autres) liens physiques.

89
psusi

Un lien physique ne peut fonctionner que sur le même système de fichiers, il s'agit simplement d'un nom différent pour le même inode (les fichiers sont référencés en interne par des inodes). Un fichier ne sera supprimé du disque que lorsque le dernier lien vers son inode aura disparu (vous rmname__d ou unlinkname__d le dernier lien). Les liens physiques ne fonctionnent généralement que pour des fichiers, pas des répertoires.

Un lien symbolique (lien symbolique) est un fichier spécial contenant un chemin d'accès à un autre fichier. Ce chemin peut être absolu ou relatif. Les liens symboliques peuvent fonctionner sur plusieurs systèmes de fichiers et peuvent même pointer vers différents fichiers, par exemple en débranchant un disque dur externe et en le remplaçant par un autre, dont le fichier est différent du même chemin. Un lien symbolique peut désigner des fichiers ou des répertoires.

58
knittl

Une des réponses de l’autre fil (maintenant lié au haut de votre message) mentionne cette page , ce qui, à mon avis, est une assez bonne explication de niveau moyen. Si vous vous perdez dans l'art ascii, voici la version tl; dr:

  • Les fichiers standard sont un pointeur du système de fichiers vers un inode qui à son tour pointe vers des données physiques. Le composant de fichier stocke son lien vers le système de fichiers (essentiellement son chemin) et un lien vers l'inode.
  • Les liens durs sont comme des fichiers. Ils sont juste un pointeur supplémentaire directement sur un inode.
  • Les liens symboliques sont des fichiers séparés (y compris des inodes et des données distincts) qui stockent un chemin de système de fichiers vers un fichier.

Le noyau et les systèmes de fichiers impliqués traduisent tout de manière transparente.

Donc basé sur ça:

  • Les liens physiques n'autorisent que les liens entre systèmes de fichiers identiques. Les liens symboliques peuvent pointer sur n'importe quel chemin.
  • Les liens durs (essentiellement) pointent vers des données absolues. Les liens symboliques peuvent pointer sur des chemins relatifs (par exemple, ../parent.file)
  • Par extension, si vous déplacez le pointeur cible d'un lien dur (qui, rappelez-vous, est essentiellement un simple lien dur pointant vers un inode), le lien dur fonctionne toujours. Déplacer la cible d'un lien symbolique romprait généralement le lien symbolique.
  • Résoudre un lien dur serait plus rapide mais énormément. Cette partie insignifiante de la vitesse se fait au détriment d’un système de fichiers inflexible.

Je me suis peut-être un peu confondu, mais en lisant diverses choses, j'ai du mal à faire la différence entre un fichier standard et un lien physique. La façon dont je le lis est que chaque fichier est constitué d'un lien dur (stockant le nom du fichier), qui relie à un inode qui pointe sur des données physiques.

L'ajout d'un lien physique fournit simplement un inode avec un pointeur supplémentaire basé sur un système de fichiers. Est-ce correct?

21
Oli

Quand utiliser Soft Link:

Lien entre les systèmes de fichiers: Si vous souhaitez lier des fichiers entre eux, vous ne pouvez utiliser que des liens symboliques/souples.

Liens vers répertoire: Si vous souhaitez lier des répertoires, vous devez utiliser des liens souples, car vous ne pouvez pas créer de lien physique vers un répertoire.

Quand utiliser Hard Link:

Espace de stockage: les liens physiques occupent très peu d'espace, car aucun nouvel inode n'a été créé lors de la création de liens matériels. Dans les liens symboliques, nous créons un fichier qui consomme de l’espace (généralement 4 Ko, selon le système de fichiers).

Performance: les performances seront légèrement meilleures lors de l'accès à un lien physique, car vous accédez directement au pointeur du disque au lieu de passer par un autre fichier. Déplacement de l'emplacement du fichier: si vous déplacez le fichier source vers un autre emplacement du même système de fichiers, le lien fixe fonctionnera toujours, mais le lien souple échouera.

Redondance: si vous voulez vous assurer de la sécurité de vos données, vous devez utiliser un lien physique, comme dans le lien physique, les données sont en sécurité, jusqu'à ce que tous les liens vers les fichiers soient supprimés, au lieu de cela dans le lien virtuel, vous perdrez les données si l'instance principale du fichier est supprimée.

15
Osama

La confusion s'installe lorsque vous essayez de trouver la différence entre "le nom du fichier" et un lien physique, car il n'y en a pas.

Chaque fichier que vous créez se compose de données sur le disque et d'un lien physique - qui est un nom de fichier dans un répertoire et un pointeur sur les données du disque. Fin de l'histoire. Lorsque le dernier (ou le seul) lien physique est supprimé, le système d'exploitation sait que les données ne sont plus nécessaires.

À partir de là, vous pouvez voir que les données réelles ne sont jamais supprimées, seuls les liens durs le sont. Et quand il est suffisamment encombré sur le disque, les données peuvent être écrasées par les données d'un autre fichier. Jusque-là, les données du fichier supprimé pourraient être récupérées, mais il est un peu difficile à trouver sans le lien physique.

Comme indiqué précédemment, les liens symboliques vous indiquent simplement "qu'il existe un fichier nommé <targetname> dans un dossier nommé <targetfolder>". Ils indiquent le lien dur. Ils ne savent pas où sont les données. Le lien dur le sait.

8
Gonesoft

C'est très simple. Les fichiers (et les répertoires!) Sont stockés aux adresses sur le périphérique bloc (disque dur ou autre). Normalement, vous avez un seul nom mappé à une adresse, et c'est ainsi que vous obtenez votre fichier. Un lien dur est un deuxième, troisième, etc. nom mappé à la même adresse. Un lien symbolique fait plutôt référence au symbole - le nom - et il en va de même pour un deuxième nom mappé sur le prénom. En ce qui concerne le noyau, une fois qu'il a lu le lien symbolique cible, il s'arrête et revient au début avec la valeur cible comme nom de fichier (plus ou moins), de sorte que les liens symboliques relatifs sont possibles mais extrêmement inutiles. Le nom de la cible n'est pas utilisé au-dessus du niveau du système de fichiers, sauf s'il est explicitement interrogé dans le code de l'espace utilisateur.

0
Jim Driscoll