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

445

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

En outre, il serait bien que quelqu'un puisse fournir un paramètre où le lien physique pourrait être préférable à un lien symbolique.

    
posée ste_kwr 29.02.2012 - 10:03
la source

10 réponses

29

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

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

  1. Liens physiques (liens symboliques)

    Vous pouvez créer des liens vers des fichiers et des répertoires, et vous pouvez créer des liens (raccourcis) sur différentes partitions et avec un numéro d’inode différent de l’original.

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

  2. Liens physiques

    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 real est supprimée, le lien fonctionnera , car il accède aux données sous-jacentes auxquelles la copie réelle accédait.

Question Comment créer un lien virtuel?

Réponse: un lien logiciel peut être créé avec ln -s ; Vous devez d'abord définir la source, puis définir la destination. (Gardez à l'esprit que vous devez définir les chemins d'accès 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 )

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?

Réponse: un lien physique peut être établi avec ln ; Vous devez d'abord définir la source, puis définir la destination. (Gardez à l'esprit 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 )

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

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

Votre question: Ce serait bien si quelqu'un pouvait fournir un paramètre où le lien physique serait préférable à un lien symbolique.

Réponse : en fonction de la disposition de la partition de disque, Liens physiques ne peuvent figurer que sur la même partition (-1 point) et ne peut créer que des liens vers les fichiers (-1 point) ), mais +1 point si l’original est supprimé, le lien fonctionnera et agira comme l’original.

D'un autre côté, un lien logiciel 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é le lien ne fonctionnera pas.

    
réponse donnée Qasim 09.05.2013 - 02:42
la source
312

Un lien physique n’est pas un pointeur vers un fichier, c’est une entrée de répertoire (un fichier) pointant vers le même inode. Même si vous modifiez le nom de l'autre fichier, un lien physique pointe toujours sur le fichier. Si vous remplacez l'autre fichier par une nouvelle version (en le copiant), un lien physique ne pointera pas vers 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 de concept des fichiers et des liens d'origine, tous sont égaux (pensez-y comme une référence à un objet). C'est un concept de très bas niveau.

D'un autre côté, un lien symbolique pointe vers 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 pointe vers le nouveau fichier. Les liens symboliques peuvent couvrir des systèmes de fichiers. Avec les liens symboliques, vous faites une distinction très nette entre le fichier réel et le lien symbolique, qui ne stocke aucune information à côté du chemin d'accès au fichier vers lequel il pointe.

    
réponse donnée vartec 18.05.2011 - 11:51
la source
287

"Une image vaut mille mots."

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

Créez deux fichiers:

$ touch blah1   
$ touch blah2

Entrez des données dans ces fichiers:

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

Et comme prévu:

$cat blah1; cat blah2
Cat
Dog

Créons des liens matériels et logiciels:

$ 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 vers l'inode, le contenu du fichier - cela n'a pas été modifié.

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

Le contenu du fichier est introuvable car le lien logiciel pointe vers le nom, qui a été modifié et non vers le contenu.
De même, si blah1 est supprimé, blah1-hard contient toujours le contenu; Si blah2 est supprimé, blah2-soft n'est qu'un lien vers un fichier non existant.

source: le copier de manière flagrante depuis StackOverflow!

    
réponse donnée ABcDexter 21.07.2016 - 09:33
la source
87

Les deux sont des pointeurs vers des fichiers; la différence est le type 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 système de fichiers différent. Si vous remplacez le fichier nommé (modifiez son contenu sans affecter son nom), le lien contient toujours le même nom et pointe maintenant vers le nouveau fichier. Vous pouvez facilement identifier un lien symbolique et voir le nom du fichier vers lequel il pointe.

Un lien physique pointe vers le fichier par numéro d'inode. En tant que tels, les liens matériels ne sont pas différents du prénom d'un fichier. Il n'y a pas de "vrai" nom vs nom de lien dur; Tous les liens physiques sont des noms valides pour le fichier. De ce fait, le fichier auquel vous accédez doit réellement exister et se trouver dans le même système de fichiers que celui dans lequel 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 valides pour le fichier, vous ne pouvez pas en rechercher un et voir les autres noms du fichier; pour trouver cela, vous devez regarder chaque fichier et comparer leur numéro d'inode pour trouver les autres noms qui ont le même numéro d'inode.

Vous pouvez déterminer 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 (s) quelque part, et inversement, un fichier avec un nombre de liens de seulement 1 n'a aucun (autre) lien dur.

    
réponse donnée psusi 18.05.2011 - 17:23
la source
56

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 les inodes). Un fichier ne sera supprimé du disque que lorsque le dernier lien vers son inode aura disparu (vous rm d ou unlink d le dernier lien). Les liens durs ne fonctionnent généralement que pour les fichiers, pas pour les répertoires.

Un lien symbolique (lien symbolique) est un fichier spécial contenant un chemin vers un autre fichier. Ce chemin peut être absolu ou relatif. Les liens symboliques peuvent fonctionner sur tous les systèmes de fichiers et peuvent même pointer vers différents fichiers, si vous débranchez par exemple un disque dur externe et le remplacez par un autre, qui contient un fichier différent sur le même chemin. Un lien symbolique peut pointer vers des fichiers ou des répertoires.

    
réponse donnée knittl 29.02.2012 - 10:20
la source
20

L’une des réponses de l’autre thread (désormais liée au haut de votre message) mentionne cette page ce que je pense est une assez bonne explication à moyen terme. 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 renvoie à 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 physiques 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 séparés) 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.

Sur cette base:

  • Les liens physiques autorisent uniquement la liaison au même système de fichiers. Les liens symboliques peuvent pointer sur n'importe quel chemin.
  • Les liens physiques (essentiellement) pointent vers des données absolues. Les liens symboliques peuvent pointer vers des chemins relatifs (par exemple, ../parent.file )
  • Par extension, si vous déplacez le pointeur cible d'un lien physique (ce qui, rappelez-vous, n'est qu'un simple lien vers un inode), le lien actif 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 incommensurable. Cette partie insignifiante de la vitesse se traduit par un système de fichiers inflexible.

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

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

    
réponse donnée Oli 18.05.2011 - 17:10
la source
15

Quand utiliser Soft Link:

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

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

Quand utiliser Hard Link:

Espace de stockage: les liens durs prennent une quantité d’espace très négligeable, car il n’ya pas de nouveaux inodes créés lors de la création de liens matériels. Dans les liens logiciels, nous créons un fichier qui consomme de l’espace (généralement 4 Ko, selon le système de fichiers)

Performances: les performances seront légèrement meilleures lors de l’accès à un lien physique, car vous accédez directement au pointeur de 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 sur le même système de fichiers, le lien physique fonctionnera toujours, mais le lien logiciel échouera.

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

    
réponse donnée Osama 07.09.2014 - 01:48
la source
7

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 est constitué 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 dur est supprimé, le système d'exploitation sait que les données ne sont plus nécessaires.

À partir de cela, vous pouvez voir que les données réelles ne sont jamais supprimées, seuls les liens physiques 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 difficile de les trouver sans le lien physique.

Les liens symboliques, comme expliqué précédemment, vous indiquent simplement "un fichier nommé <targetname> dans un dossier nommé <targetfolder> ". Ils pointent vers le lien dur. Ils ne savent pas où se trouvent les données. Le lien dur le sait.

    
réponse donnée Gonesoft 01.03.2015 - 12:28
la source
3

Pour une excellente explication noob -et ex-Windoze -user- conviviale , avec des diagrammes sympas et une FAQ pour consulter cette page lien . Les restrictions de leurs droits d'auteur m'empêchent d'extraire leur contenu, alors il suffit que je fournisse le lien ici.

Ceci est ma 2ème ou même 3ème tentative pour saisir l’énigme du soft / hard-link, en jetant toujours la serviette et en reportant ma compréhension à un moment indéterminé dans le futur - dès que les explications et les pages de manuel être profondément enraciné et trop technique avec les inodes et tout le reste ...

Profitez!

    
réponse donnée nutty about natty 10.02.2013 - 17:03
la source
0

C'est très simple. Les fichiers (et les répertoires!) Sont stockés à des adresses sur le périphérique de bloc (disque dur ou autre). Normalement, vous avez un nom unique mappé à une adresse, et c'est ainsi que vous obtenez votre fichier. Un lien physique 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 correspond donc au second nom associé au prénom. En ce qui concerne le noyau, une fois qu'il a lu la cible du lien symbolique, il s'arrête et retourne au début avec la valeur cible comme nom de fichier (plus ou moins), donc les liens symboliques relatifs sont 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.

    
réponse donnée Jim Driscoll 03.07.2016 - 17:39
la source

Lire d'autres questions sur les étiquettes