web-dev-qa-db-fra.com

Quelle est la différence entre les liens symboliques et durs?

Quand utiliseriez-vous un sur l'autre?

55
ripper234

Les différentes sémantiques entre les liens durs et doux les rendent adaptés à différentes choses.

Liens durs:

  • indiscernables d'autres entrées d'annuaire, car chaque Entrée de répertoire est lien dur
  • "Original" peut être déplacé ou supprimé sans casser d'autres liens durs vers la même inode
  • seulement possible dans le même système de fichiers
  • les autorisations doivent être identiques à celles de la "originale" (les autorisations sont stockées dans l'inode, et non la saisie de répertoire)
  • ne peut être effectué qu'à fichiers, non répertoires

Liens symboliques (liens soft)

  • enregistrez simplement que cela pointe sur un autre chemin de fichier. (ls -l montrera quel chemin un lien symbolique pointe)
  • va casser si l'original est déplacé ou supprimé. (Dans certains cas, il est en fait souhaitable qu'un lien indique tout le dossier occupe actuellement un lieu particulier)
  • peut pointer vers un fichier dans un autre système de fichiers
  • peut pointer vers un répertoire
  • sur certains formats de système de fichiers, il est possible que le Slemand ait différentes autorisations que le fichier qu'il pointe (ceci est rare)
42
daxelrod

Le point des deux types de liens est de fournir un moyen de faire apparaître un fichier dans deux endroits en même temps. Cela a beaucoup d'utilisations. 9 fois sur 10, vous souhaitez utiliser des liens symboliques.

Les liens symboliques, ou "symboles de liens" fonctionnent un peu comme des raccourcis de Windows. Le contenu d'un symbole symbolique est un pointeur sur l'emplacement réel du fichier/répertoire. Si vous supprimez le fichier réel, le symbolique deviendra "pendre" et ne fonctionnera pas. La suppression du symbole Symlink ne supprime pas le fichier réel. Vous pouvez avoir autant de liens symboliques à un seul fichier (ou même d'autres symboles) que vous le souhaitez.

Contrairement à Windows, ils travaillent sur le niveau du système de fichiers, pas sur le niveau de la coquille ou de l'application, donc à peu près toute application "suivra" des liens symboliques comme prévu. ls -al Peut être utilisé comme un moyen rapide de voir où lent les liens "point" à.

Les lignes hardlinks travaillent même sur un niveau inférieur. Un HardLink est une entrée réelle du fichier de niveau du système au niveau du système de fichiers. Techniquement, une entrée de répertoire est une liste de répertoire, donc chaque fichier comporte au moins une dure dans un répertoire quelque part. Les lignes hardlinks ne sont pas séparées du fichier qu'ils indiquent; Si un fichier contient plusieurs hardlinks dans différents répertoires, supprimez la liste dure avec des utilitaires tels que rm ne supprimera pas vraiment le fichier, jusqu'à ce que tous les hardlinks soient partis.

Je ne peux pas penser à la situation où l'utilisation des hardliens est courante, voire nécessaire, à moins que vous ne souhaitiez intentionnellement que les dossiers de se soient supprimés ou que vous effectuez un travail étrange de bas niveau avec des partitions ou d'autres éléments liés au système de fichiers. Edit: Il y a de bonnes idées dans les autres réponses à cette question, cependant!

18
LawrenceC

Les liens durs sont très utiles pour les mécanismes de sauvegarde basés sur des disques, car vous pouvez avoir un arborescence complète pour chaque sauvegarde tout en partageant l'espace des fichiers qui n'ont pas changé - et le système de fichiers contient une piste du comptage de référence, donc lorsque la dernière référence à Une version donnée disparaît car la sauvegarde a été expirée/supprimée pour des raisons spatiales, l'espace utilisé est automatiquement récupéré. Certains clients de messagerie l'utilisent également pour les messages classés sur plusieurs dossiers, pour la même raison.

13
geekosaur

Un lien doux pointe vers un autre chemin. Ce chemin peut exister ou non. Le chemin n'est pas recherché jusqu'à ce que vous accédez au symbole symbolique. Si le chemin n'existe pas lorsque vous essayez d'y accéder, vous avez un lien symbolique cassé.

Avec une liaison matérielle, vous avez un fichier avec plusieurs noms. Vous ne pouvez pas dire que l'un de ceux-ci est le fichier "réel" et les autres ne sont qu'un lien avec cela. Ils sont tous égaux. Il n'y a pas une telle chose qu'une liaison dure cassée comme il y a des liens symboliques brisés.

Les liens durs ne fonctionnent que dans un seul système de fichiers. Si vous souhaitez créer un lien vers un fichier sur un système de fichiers différent (par exemple une partition différente ou une part de réseau), vous DOIT Utilisez un lien logiciel.

Une autre grande différence est ce qui se passe lorsque vous supprimez un fichier lié. Si vous supprimez une paire de fichiers hardlinked, créez un nouveau fichier avec le même nom, vous aurez deux fichiers distincts (le lien est parti). Si vous supprimez la cible d'un lien symbolique et créez un nouveau fichier avec le même nom, le lien pointera sur le nouveau fichier.

4
cjm

Les liens durs ne sont que des références sur les mêmes espaces de disques, c'est-à-dire que "pourquoi" ne pouvez pas réduire quelque chose dans un autre système de fichiers.

Les liens symboliques sont des fichiers reliant d'autres fichiers (comme des raccourcis de Windows), peut-être dans le même système de fichiers, peut-être pas.

EDIT: Je vais expliquer quelque chose de plus. Chaque fichier qui existe a un minimum de 1 liaison matérielle. Les liens durs sont la voie pour accéder au contenu d'une inode du système de fichiers. Vous pouvez obtenir le numéro d'inode d'un fichier avec ls -i, et obtenir le nombre de hardlinks avec stat comme suit dans cet exemple:

$ stat plantilla-disenos.odt 
  File: «plantilla-disenos.odt»
  Size: 12367       Blocks: 32         IO Block: 4096   fichero regular
Device: 803h/2051d  Inode: 319875      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   d4rio)   Gid: ( 1000/   d4rio)
Access: 2011-02-11 21:36:19.000000000 -0300
Modify: 2010-03-02 23:27:28.000000000 -0300
Change: 2010-04-10 17:46:27.000000000 -0300

Merci @Geekosaure pour cette référence:

Le noyau doit redémarrer la traduction du piston-to-inode (traverser l'arborescence de répertoire) pour développer des liens symboliques, alors que les liens durs utilisent tous la même inode. (Vous y verrez souvent cela appelé Namei, du nom de la fonction du noyau qui l'a fait dans UNIX traditionnel.)

et ceci (édité):

Les liens durs sont très utiles pour les mécanismes de sauvegarde basés sur disque incrémentalcomme la machine de temps d'Apple, car vous pouvez avoir un arborescence complète pour chaque sauvegarde tout en partageant l'espace des fichiers que ce soit 'T modifié - et le système de fichiers conserve une trace du comptage de référence, alors lorsque la dernière référence à une version donnée disparaît car la sauvegarde a été expirée/supprimée pour des raisons spatiales, l'espace utilisé est automatiquement récupéré. Certains clients de messagerie l'utilisent également pour les messages classés sur plusieurs dossiers, pour la même raison.

À votre santé

3
D4RIO

Les liens "durs" partagent la même inode

$ touch foo
$ ln foo foolink # Creates a hard  link
$ ls -li foo foolink
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foo
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foolink

Si je modifie soit FOO OU POLLINK, il n'y a qu'un seul fichier et il sera mis à jour. Si je ne supprime qu'un seul des noms de fichiers, l'inode et les données persistent, Suttylink survivra.

$ rm foo
$ ls -li foo foolink
ls: cannot access foo: No such file or directory
54996 -rw-r--r-- 1 bsd users 0 2011-12-11 09:06 foolink

Si je devais créer la même chose, mais avec un lien "doux" ou symbolique, il y a un fichier, une inode et un nouveau fichier avec son propre inode pointant vers la première.

$ touch foo
$ ln -s foo foolink # Create symlink
$ ls -li foo foolink
55029 -rw-r--r-- 1 bsd users 0 2011-12-11 09:11 foo
55033 lrwxrwxrwx 1 bsd users 3 2011-12-11 09:11 foolink -> foo

Si je modifie soit FOO OU POLLINK, il n'y a toujours qu'un seul fichier et il sera mis à jour.

Si je supprime seulement le symbole symbolique, l'inode et les données persistent. Si je supprime foo, les données seront parties, le symboliste persistera, mais indiquera un fichier inexistant.

$ rm foo
removed `foo'
$ ls -l foo foolink 
ls: cannot access foo: No such file or directory
lrwxrwxrwx 1 bsd bsd 3 2011-12-11 09:11 foolink -> foo
3
bsd

Link dur (uniquement Fichiers) VS Link Soft (Fichiers ou répertoires) VS Link (Lien durs pour les annuaires)

VIEW THIS IMAGE BEFORE READING POST
(Source: freesoftwareservers.com )

tandis que la réponse de Daxelrod explique bien la question, je pensais que la photo dans cette affaire a fait une grande différence, en particulier pour les débutants qui ne comprennent pas encore les inodes et compliqua Linux Jargon.

Pensez à cela, si vous avez "supprimé" tout de votre lecteur, vous pouvez exécuter un logiciel pour restaurer les données, car les 1 et 0 sont toujours là, vous venez de supprimer tous les liens durs. Le but du logiciel de récupération est de reconstruire les liens durs pour donner un sens aux 0 et 1

J'ai lu une excellente "une doublure" qui a fait tout cela a un sens et je voulais partager!

Tous les fichiers de Linux sont des "liens durs" aux 0 et 1 sur le disque. Lorsque vous créez une donnée (0 & 1's), le système d'exploitation crée une liaison matérielle dans l'arborescence de fichiers afin de référencer la place sur le disque dur.

Créez un lien dur 2 et Supprimer le disque dur 1 fichier d'origine:

Vous pouvez créer un autre lien dur et supprimer le fichier d'origine et vous avez toujours accès au lien dur nouvellement créé.

Supprimer le fichier (lien dur 1) qui est doux lié à:

Si vous avez supprimé le lien dur 1, pensez-vous que le lien mou fonctionnerait? Non, le système d'exploitation rapportera que le lien dur 1 n'existe pas.

Supprimer Soft Link to Dur Link:

En sens inverse, si vous supprimez le lien logiciel, le lien dur sera-t-il fonctionner? Oui. Tant que le système d'exploitation a un lien dur fichier Il signalera que le remplissage n'a pas été supprimé.

- La recherche de la recherche/notation est également liée, une façon de lier deux répertoires comme symbolisant deux répertoires, mais il est transparent pour le système d'exploitation (OS peut indiquer lorsque vous êtes symbolique et certains ont des règles concernant la météo, ils peuvent suivre des conditions météorologiques). Il utilise le montage, pas LS et peut être configuré via FSTAB.

Qu'est-ce qu'un montage de liaison

1
FreeSoftwareServers

C'est une très vieille question, mais j'ai un cas d'utilisation qui m'exige d'utiliser des liens difficiles.

Je suis un musicien et j'ai donc des lots et beaucoup de fichiers audio de différentes sortes sur plusieurs disques durs attachés à mon Mac. Téraoctets valant la peine. Je les ai principalement organisés avec des répertoires Symlink afin que je puisse les trouver par le contenu éditeur, style/son et autres critères basés sur la façon dont je pense à l'époque. Malheureusement, un programme que j'utilise, Ableton Live, est totalement incapable de visualiser des alias ou des liens symboliques à partir de son navigateur de fichiers. La seule solution que j'ai trouvée est de créer des liens difficiles des répertoires, je souhaite que cela puisse voir dans, puis tout fonctionne bien.

Donc, il s'agit d'un autre cas de lorsque vous pourriez avoir besoin d'utiliser des liens difficiles, cela aurait pu survenir aux autres.

0
JVC

Un lien dur conservera un fichier sur disque jusqu'à ce que tous les liens difficiles, même le premier (un "nom de fichier" est techniquement une liaison matérielle), ont été supprimées. Une liaison douce peut être laissée "pendling" jusqu'à ce que le fichier point (S/ED) soit remplacé.

0