Qu'est-ce qu'un lien dur sous Linux?

9

J'ai cherché autour et j'essaie de comprendre la différence entre un lien physique et un lien symbolique (lien symbolique).

j'ai trouvé ce lien est très utile. Mais je ne suis toujours pas très clair. Je comprends que le lien symbolique n’est pas une copie du fichier original, mais un lien physique est-il une copie ou non?

icn
la source

Réponses:

15

Pour utiliser une analogie avec la distribution du courrier, un lien symbolique est en quelque sorte une adresse de transfert ... quand quelque chose essaie d'ouvrir un lien symbolique, il ouvre le "fichier" (pas littéralement un fichier) qui y est stocké et le voit devrait plutôt regarder un fichier avec un nom différent, de sorte qu'il ouvre l'autre fichier à la place.

Un lien physique revient plutôt à avoir deux adresses pour le même endroit. (Bien sûr, ce n'est pas vraiment possible dans le monde physique). Lorsque quelque chose essaie de lire un nom de fichier (adresse), ils obtiennent le même fichier physique (emplacement).

Ainsi, un lien physique n’est pas une copie, car le fichier n’est stocké qu’une fois (mais avec plusieurs noms). Mais cela se comporte très bien comme une copie, car vous pouvez accéder aux mêmes informations à partir de deux noms de fichier.

Flimzy
la source
+1 pour une très belle analogie, ce qui aurait simplifié les choses pour moi lorsque j'essayais de comprendre cela.
John Gardeniers
1
+1, mais deux détails mineurs: 1) Il est possible d'avoir plusieurs adresses pour le même endroit dans le monde réel, mais pas commun. 2) Peut-être la différence la plus importante entre un lien en dur et une copie est que, si vous avez /foo et /bar, en changeant /foo va aussi changer /bar si ce sont des liens durs (parce que ce sont deux noms pour le même fichier), mais pas si ce sont des copies (car ce sont deux fichiers complètement indépendants).
Dave Sherohman
3

Un lien (deuxième et tous les suivants) vers un fichier est un pointeur sur les mêmes inodes sur le disque.

Ignacio Vazquez-Abrams
la source
3

Lorsque vous faites un lien physique, cela signifie que le même fichier apparaît à deux endroits différents. Un fichier n'est en réalité qu'une référence à un ensemble de blocs de données sur des disques. Un lien physique en ajoute une autre. Les fichiers sont rarement vraiment supprimés; les références sont simplement supprimées, il est donc impossible d'accéder aux données. C'est pourquoi, lorsque vous supprimez un fichier créé sous forme de lien physique, l'autre fichier d'origine reste en place, et inversement.

D'autre part, un lien symbolique est une direction permettant d'accéder à un fichier portant un certain nom. Il dit à tous les programmes: "Si vous voulez utiliser ce fichier, c'est par là". C'est pourquoi, si vous supprimez la cible du lien symbolique, le lien symbolique se rompt. Et si vous supprimez le lien, la cible n'est pas affectée.

Michael Lowman
la source
2

Un fichier dans le système * nix comprend deux parties. l'une des données et l'autre est inode. inode stocke des méta (informations pertinentes pour les données comme l'emplacement où elles sont stockées sur le disque dur). Le lien physique crée une copie exacte de cet inode. While sym link crée un inode qui pointe sur l'inode de l'inode réel. Ainsi, les données inode dans le lien physique sont identiques à la cible mais les données différentes dans le lien sym. Donc, pour résumer, les liens sym et les liens durs diffèrent par leur contenu de données inode et non de données de fichier. Ceci est ma compréhension de la différence entre lien sym et lien dur. Au début, j’ai eu du mal à comprendre cela car c’est quelque chose de plus développeur et je ne suis pas un développeur. Oh les connaisseurs, corrigez-moi s'il vous plaît si je me trompe.

Naai Sekar
la source
3
Un "répertoire" dans * nix est une liste de noms de fichiers et de numéros d'inodes. Les liens physiques sont deux entrées de répertoire qui ont le même numéro d'inode et se réfèrent donc exactement au même inode et non à des copies de l'inode. Un lien symbolique est une entrée de répertoire qui pointe vers une autre entrée de répertoire (par nom), et non vers un inode particulier. (Ok, il a en fait un inode, mais cet inode fait référence à l’entrée du répertoire et non au fichier.)
Randy Orrison