Quand utiliseriez-vous l'un sur l'autre?
Quand utiliseriez-vous l'un sur l'autre?
Réponses:
La sémantique différente entre les liens durs et les liens souples les rend adaptés à différentes choses.
Liens durs:
Liens symboliques (liens symboliques)
ls -l
montrera quel chemin pointe un lien symbolique)unlink(2)
. Les fichiers "normaux" (avec un nombre de liens de 1) ne sont qu'un cas particulier. Si cela vous aide, vous pouvez considérer les inodes en tant qu'objets et les noms en tant que pointeurs comptés en référence (le nombre de liens de l'inode est le nombre de références).
..
et .
.
L’intérêt des deux types de liens est de fournir un moyen de faire apparaître un fichier à deux endroits simultanément. Cela a beaucoup d'utilisations. 9 fois sur 10, vous souhaitez utiliser des liens symboliques.
Les liens symboliques ou "liens symboliques" fonctionnent un peu comme les raccourcis Windows. Le contenu d'un lien symbolique est un pointeur sur l'emplacement réel du fichier / répertoire. Si vous supprimez le fichier réel, le lien symbolique deviendra "suspendu" et ne fonctionnera pas. La suppression du lien symbolique ne supprime pas le fichier réel. Vous pouvez avoir autant de liens symboliques vers un seul fichier (ou même d'autres liens symboliques) que vous le souhaitez.
Contrairement à Windows, ils fonctionnent au niveau du système de fichiers, et non du shell ou de l'application, de sorte que pratiquement toutes les applications "suivront" les liens symboliques comme prévu. ls -al
peut être utilisé comme moyen rapide de voir où les liens symboliques "pointent".
Les liens durs fonctionnent même à un niveau inférieur. Un lien dur est une entrée de répertoire réelle, physique au niveau du système de fichiers, du fichier. Techniquement, une entrée de répertoire est un lien physique. Ainsi, chaque fichier a au moins un lien physique dans un répertoire quelque part. Les liens physiques ne sont pas séparés du fichier vers lequel ils pointent; Si un fichier contient plusieurs liens physiques dans des répertoires différents, la suppression du lien physique à l'aide d'utilitaires tels rm
que ne supprime pas réellement le fichier, jusqu'à ce que tous les liens physiques aient disparu.
Je ne peux pas penser à une situation où l'utilisation de liens durs est courante, voire nécessaire, à moins que vous ne vouliez intentionnellement empêcher la suppression des fichiers ou que vous effectuiez un travail de bas niveau bizarre 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!
ls -l
est suffisant pour voir ce qui est lié par un lien symbolique, le a
sigle --all
, voir page de manuel. Et même si les liens symboliques fonctionnent sur le système de fichiers, il existe des fonctions alternatives pour utiliser des liens symboliques en tant que fichiers au lieu de les suivre.
ln -s /home 1; ls -l 1
indique que le lien symbolique 1 a une longueur de 5 octets, alors ln -s /usr/share/ 2; ls -l 2
que 2 indique une longueur de 11 octets.
Les liens physiques sont très utiles pour les mécanismes de sauvegarde sur disque, car vous pouvez avoir une arborescence de répertoires complète pour chaque sauvegarde tout en partageant l’espace pour les fichiers qui n’ont pas été modifiés - et le système de fichiers garde une trace du décompte des références. une version donnée disparaît parce que la sauvegarde a expiré / été supprimée pour des raisons d'espace, l'espace utilisé est automatiquement récupéré. Certains clients de messagerie l'utilisent également pour les messages classés dans plusieurs dossiers, pour la même raison.
Les liens physiques ne sont que des références aux mêmes espaces disque, c'est pourquoi vous ne pouvez pas créer de lien matériel dans un autre système de fichiers.
Les liens symboliques sont des fichiers reliant d'autres fichiers (tels que des raccourcis Windows), peut-être dans le même système de fichiers, peut-être pas.
EDIT: Je vais expliquer quelque chose de plus. Chaque fichier existant a un minimum de 1 lien dur. Les liens durs permettent d'accéder au contenu d'un 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 liens physiques 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 @geekosaur pour cette référence:
Le noyau doit relancer la traduction nom chemin / inode (en traversant l’arborescence) pour développer les liens symboliques, alors que les liens physiques utilisent tous le même inode. (Vous verrez souvent cela appelé namei, d'après le nom de la fonction du noyau qui l'a fait dans Unix traditionnel.)
et ceci (édité):
Les liens physiques sont très utiles pour les mécanismes de sauvegarde incrémentielle basés sur disque tels que Time Machine d’Apple , car vous pouvez avoir une arborescence de répertoires complète pour chaque sauvegarde tout en partageant l’espace pour les fichiers qui n’ont pas été modifiés. lorsque la dernière référence à une version donnée disparaît parce que la sauvegarde a expiré / a été supprimée pour des raisons d'espace, l'espace utilisé est automatiquement récupéré. Certains clients de messagerie l'utilisent également pour les messages classés dans plusieurs dossiers, pour la même raison.
À votre santé
namei
, du nom de la fonction du noyau qui l'a fait dans Unix traditionnel.)
stat
ci échouent.
Un lien symbolique pointe vers un autre chemin. Ce chemin peut ou peut ne pas exister. Le chemin n'est pas recherché tant que vous n'avez pas accédé au lien symbolique. Si le chemin n'existe pas lorsque vous essayez d'y accéder, vous avez un lien symbolique cassé.
Avec un lien physique, vous avez un fichier avec plusieurs noms. Vous ne pouvez pas dire que l'un d'entre eux est le "vrai" fichier et les autres ne sont qu'un lien vers celui-ci. Ils sont tous égaux. Il n'y a pas de lien dur cassé, il existe des liens symboliques cassés.
Les liens physiques ne fonctionnent que dans un seul système de fichiers. Si vous souhaitez créer un lien vers un fichier sur un autre système de fichiers (par exemple, une partition différente ou un partage réseau), vous devez utiliser un lien souple.
Une autre grande différence est ce qui se produit lorsque vous supprimez un fichier lié. Si vous supprimez un fichier d'une paire de liens durs, puis créez un nouveau fichier portant le même nom, vous obtiendrez deux fichiers distincts (le lien a disparu). Si vous supprimez la cible d'un lien symbolique et créez un nouveau fichier portant le même nom, le lien pointe vers le nouveau fichier.
les liens "durs" partagent le 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 j'édite foo ou foolink, 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 vont persister, le lien imbécile 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 le même, mais avec un lien "symbolique" ou un lien symbolique, il existe alors un fichier, un inode et un nouveau fichier avec son propre inode pointant vers le premier.
$ 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 j'édite foo ou foolink, il ne reste qu'un fichier et il sera mis à jour.
Si je ne supprime que le lien symbolique, l'inode et les données vont persister. Si je supprime foo, les données disparaîtront, le lien symbolique persistera, mais pointera vers 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
Les liens physiques sont des entrées de répertoire supplémentaires pour le même fichier. Cela signifie
De nombreux éditeurs n'écrivent pas le nouveau contenu dans le même fichier lors de l'enregistrement, mais effectuent plutôt la procédure suivante:
Ce schéma signifie que tous les autres liens durs vers le même fichier ne pointeront plus vers le fichier actuel, mais vers la version précédente (ceci est vrai même si l'éditeur supprime l'ancien fichier, car sous Unix, "supprimer" un fichier signifie simplement supprimer son lien; seulement si le lien supprimé est le seul lien, le fichier lui-même est supprimé).
Comme le lien direct va directement au fichier, vous pouvez accéder à ce fichier même si vous n'avez pas accès à l'emplacement d'origine de ce fichier (par exemple, parce que vous ne disposez d'aucune autorisation sur le répertoire dans lequel se trouve l'entrée d'origine). . Les seuls droits déterminant votre accès sont les droits d'accès du fichier lui-même (qui sont associés au fichier, pas au lien; vous ne pouvez pas créer de liens physiques avec des autorisations différentes pour le même fichier) et les droits d'accès pour le chemin d'accès au lien physique. est contenu dans (fondamentalement, les droits d’exécution du répertoire dans lequel se trouve le lien, ainsi que tous les répertoires parents directs et indirects).
Les liens symboliques, quant à eux, stockent le chemin (le nom du fichier - ou plutôt son entrée de répertoire - incluant éventuellement son chemin, comme /bin/sh
ou subdir/foo.bar
) - d’un autre fichier. Si le nom de chemin est relatif, il est toujours interprété par rapport au répertoire dans lequel se trouve le lien. Cela signifie:
Un lien symbolique peut faire référence à des fichiers situés sur un système de fichiers différent (même à un système de fichiers ne prenant pas en charge les liens physiques ou physiques, tels que FAT).
Si le fichier d'origine est supprimé, le lien symbolique ne conserve pas le contenu du fichier. Sauf s'il existe d'autres liens physiques vers le même fichier, le contenu du fichier disparaîtra. Le lien symbolique sera alors laissé en suspens (c’est-à-dire qu’il s’agit d’un nom de chemin qui ne correspond pas à une entrée de répertoire). D'autre part, la suppression du lien symbolique n'affecte pas le fichier d'origine, car il fait uniquement référence à son chemin.
Si le fichier d'origine est déplacé ou renommé, le lien symbolique n'est pas mis à jour mais laissé en suspens. Si vous déplacez le lien symbolique, il ne se rompt que s'il contient un chemin relatif, et le chemin n'est plus valide à partir de la nouvelle position.
Si le fichier d'origine est remplacé par un nouveau fichier portant le même nom (comme dans le scénario de l'éditeur décrit ci-dessus), le lien fait référence au nouveau fichier.
La plupart des utilisations de liens physiques sont essentiellement un moyen d’avoir une copie d’un fichier sans avoir à stocker le contenu du fichier deux fois. Cela fonctionne mieux si les fichiers ne sont jamais modifiés à nouveau, sinon il est facile de casser accidentellement le lien (voir le scénario de l'éditeur ci-dessus). Il existe bien entendu des cas dans lesquels vous souhaitez que le lien soit rompu, comme dans le cas de la conservation de plusieurs sauvegardes: pour les fichiers modifiés dans les sauvegardes les plus récentes, vous ne souhaitez pas que la copie des sauvegardes plus anciennes change également.
Normalement, si vous voulez un lien, vous utiliserez un lien symbolique. Par exemple, lorsque vous déplacez un répertoire vers une autre partition (car celui sur lequel il se trouve est plein), vous pouvez définir un lien symbolique de l’ancienne à la nouvelle. Ainsi, tout programme essayant d’accéder au répertoire à l’ancien y accéder à la nouvelle place à la place. Ce ne serait pas possible avec des liens durs. Sachez toutefois que des liens symboliques dans le répertoire déplacé peuvent être rompus s'ils contiennent des chemins relatifs menant hors du répertoire déplacé.
HARD LINK (fichiers uniquement) vs SOFT LINK (fichiers ou répertoires) vs BIND (HARD LINK pour les répertoires)
(source: freesoftwareservers.com )
Alors que la réponse de daxelrod explique bien la question, j’ai pensé que l’image dans ce cas faisait toute la différence, en particulier pour les débutants qui ne comprennent pas encore les inodes et le jargon compliqué de Linux.
Pensez à cela, si vous avez "supprimé" tout ce qui se trouve sur votre lecteur, vous pouvez exécuter un logiciel pour restaurer les données, car les 1 et les 0 sont toujours présents, vous venez de supprimer tous les liens en dur. Le but du logiciel de récupération est de reconstruire les liens durs pour donner un sens aux 0 et aux 1
J'ai lu un excellent "one liner" qui rendait tout cela logique et que je voulais partager!
Tous les fichiers sous Linux sont des "liens physiques" vers les 0 et les 1 du disque. Lorsque vous créez des données (0 et 1), le système d'exploitation crée un lien dur dans l'arborescence des fichiers pour référencer cet emplacement sur le disque dur.
Vous pouvez créer un autre lien physique et supprimer le fichier d'origine, mais vous avez toujours accès au lien physique nouvellement créé.
Si vous supprimez le HARD LINK 1, pensez-vous que le SOFT LINK fonctionnerait? Non, le système d'exploitation signalera que le HARD LINK 1 n'existe pas.
Inversement, si vous supprimez SOFT LINK, HARD LINK fonctionnera-t-il? Oui. Tant que le système d'exploitation a un fichier HARD LINK, il indiquera que le remplissage n'a pas été supprimé.
- Il est également intéressant de rechercher / noter BIND, un moyen de lier deux répertoires comme la liaison symbolique de deux répertoires, mais il est transparent pour le système d’exploitation (les systèmes d’exploitation peuvent indiquer quand votre lien symbolique et certains ont des règles concernant la météo, qu’ils peuvent suivre). Il utilise Mount, pas LS et peut être configuré via FSTAB.
Un lien physique conservera un fichier sur le disque jusqu'à ce que tous les liens physiques menant au fichier, même le premier (un "nom de fichier" soit techniquement un lien physique), aient été supprimés. Un lien symbolique peut être laissé "en suspens" jusqu'à ce que le fichier qu'il désigne (s / ed) soit remplacé.
C'est une très vieille question, mais j'ai un cas d'utilisation qui m'oblige à utiliser des liens physiques.
Je suis musicien et j'ai donc beaucoup, beaucoup de fichiers audio de différentes sortes sur plusieurs disques durs connectés à mon Mac. Une valeur de téraoctets. Je les ai généralement très bien organisés avec des répertoires de liens symboliques afin que je puisse les trouver par éditeur de contenu, style / son et autres critères en fonction de ma façon de penser à 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 consiste à créer des liens physiques entre les répertoires que je souhaite voir, puis tout fonctionne bien.
C’est donc un autre cas où vous pourriez avoir besoin d’utiliser des liens physiques, ce qui n’aurait peut-être pas été fait pour d’autres.