simplement des enregistrements qui pointent vers un autre chemin de fichier. ( ls -lmontrera quel chemin pointe un lien symbolique)
se cassera si l'original est déplacé ou supprimé. (Dans certains cas, il est souhaitable qu'un lien pointe vers un fichier occupant actuellement un emplacement particulier)
peut pointer sur un fichier d'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 lien symbolique ait des autorisations différentes de celles du fichier vers lequel il pointe (ce qui est rare)
Belle liste. Je voulais juste ajouter que vous pouvez également rompre un lien symbolique de chemin relatif en déplaçant le lien symbolique lui-même.
Jw013
4
"[E] très entrée de répertoire est un lien dur." C'est un excellent point que je n'ai jamais vu exprimer auparavant, mais je crains que quelqu'un qui commence tout juste à envelopper ses liens ou à contourner les liens ne l'obtienne pas. Pour ceux qui se trouvent dans cette situation, voici un indice: La disposition des fichiers et des répertoires que vous voyez lors de l'exécution de la commande ls n'est pas exactement la même chose que le système de stockage qu'elle représente. Les liens physiques sont des références à un fichier individuel sur le système de stockage. Un fichier est stocké une fois. Lisez sur "inodes".
Mario
@ Mario: ouais. Chaque entrée de répertoire lie un nom à un inode. L'appel système pour supprimer un nom de fichier est même appelé 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).
Peter Cordes
1
Vous pourriez penser à un lien symbolique en tant que fichier texte portant un nom. Il est interprété comme un lien symbolique en raison d'un indicateur spécial dans le fichier. Des exemples de liens physiques que vous connaissez sont ..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 -alpeut ê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 rmque 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!
De plus, les liens symboliques ont des autorisations similaires aux fichiers normaux, mais le système d'exploitation ne les consulte pas, il consulte le fichier ciblé pour les autorisations afin de décider du comportement. Et ne faites pas de chaînes circulaires de liens symboliques. Très mauvais.
LawrenceC
3
Est-ce vraiment très mauvais? Qu'est-ce qui va arriver? Le plus excitant que je puisse recréer est le message d'erreur "Trop de niveaux de liens symboliques".
Mattdm
1
ls -lest suffisant pour voir ce qui est lié par un lien symbolique, le asigle --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.
D4RIO
4
Les raccourcis Windows sont en réalité assez différents des liens symboliques: ils suivent leur cible et sont également des fichiers normaux. (Windows a aussi des liens symboliques, mais ils sont peu utilisés.) Les liens symboliques sont purement textuels, le texte cible est lu chaque fois que vous accédez au fichier. L'importance des autorisations des liens symboliques dépend du système d'exploitation et du système de fichiers.
Gilles 'SO- arrête d'être méchant'
D'après les informations dont je dispose, le contenu d'un fichier de liens symboliques est le chemin indiqué par le lien symbolique, ce qui est visible lorsque vous regardez la taille du fichier de liens symboliques: ln -s /home 1; ls -l 1indique que le lien symbolique 1 a une longueur de 5 octets, alors ln -s /usr/share/ 2; ls -l 2que 2 indique une longueur de 11 octets.
daniel kullmann
13
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.
Peut-être que des mécanismes de contrôle de version basés sur disque? Si vous liez quelque chose en dur, alors ce n'est pas une sauvegarde. Si le fichier d'origine est corrompu, tous les liens en dur le sont également.
D4RIO
1
Pensez aux systèmes de sauvegarde incrémentielle tels que Time Machine d'Apple. (Il devrait être évident que ce ne sont pas des sauvegardes de type récupération après sinistre, mais des sauvegardes «oups, j’ai supprimé ce fichier par accident».) Tous les fichiers non modifiés d’une sauvegarde incrémentielle sont liés ensemble; Lorsque le fichier est modifié, l’incrémental suivant le copie au lieu d’être lié à la version précédente.
geekosaur
Merci, les systèmes de sauvegarde incrémentielle sont assez similaires aux systèmes de contrôle de version de cette façon = D
D4RIO
Mais comment le mécanisme de sauvegarde incrémentielle conserve-t-il la "vieille" version d'un fichier? 1) Sauvegarde A créé, il fichier F hardlinked; 2) Fichier F modifié; 3) le lendemain, la sauvegarde B créée ... On dirait que je ne reçois rien
Dmitry Pashkevich
3
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 statcomme suit dans cet exemple:
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.
Les avantages en termes de performances liés à l’utilisation de liens physiques? Ou, pourquoi voudriez-vous jamais utiliser un lien dur au lieu d'un lien symbolique?
ripper234
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, du nom de la fonction du noyau qui l'a fait dans Unix traditionnel.)
geekosaur
@ ripper234: Les liens physiques sont des solutions permettant d'économiser de l'espace disque. Vous n'avez pas besoin de connaître le système de fichiers pour créer un lien symbolique, mais vous devez réfléchir avant de créer des liens symboliques, car vous pouvez créer une boucle ou un chemin de résolution longue pour que les fonctions comme celles- statci échouent.
D4RIO
@geekosaur: J'ajoute votre réponse à la mienne car elle est très utile
D4RIO
Aucun problème. En fait, j'ai commencé à l'écrire sous forme de commentaire, mais les commentaires sont trop courts.
geekosaur
3
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.
$ 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.
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
Mais quel est un cas d'utilisation pratique pour cela?
ewwhite
1
Une utilisation, identique à un "raccourci" Une autre utilisation, avoir plusieurs versions d'une application sur un système, permet de l'installer, de tester une nouvelle version, en spécifiant l'application par chemin complet, tandis que le lien symbolique dans bin indique la production. Une fois le test terminé, remplacez le lien symbolique par la nouvelle version, laissez l'ancienne version en place pour les utilisateurs disposant d'un code dépendant de la version. Pensez à perl, python, etc.
bsd
1
cas d'utilisation pratique pour les liens durs. Actuellement, sur mon système de fichiers, j'ai trouvé un grand nombre de liens durs dans / usr / share / zoneinfo. Pensez à tous les fichiers nommés représentant les fuseaux horaires, qui sont tous identiques à EST. Nous économisons de l’espace dans le système de fichiers en n’ayant pas de copies redondantes et en facilitant la gestion des paquets sans avoir à surcharger la gestion des liens symboliques d’installation / suppression à mesure que les packages sont installés / supprimés. Même si l’on supprime les données originales, elles sont préservées. Désolé, je n'ai pas eu le temps d'une explication plus pédante.
bsd
1
Les liens physiques sont des entrées de répertoire supplémentaires pour le même fichier. Cela signifie
Tous les liens physiques vers un fichier doivent se trouver sur le même système de fichiers (car une entrée de répertoire ne peut pas pointer vers un fichier d'un autre système de fichiers), mais pas nécessairement dans le même répertoire.
Il n'y a pas de différence entre l'entrée de répertoire d'origine et le nouveau lien physique; du point de vue du système d'exploitation, il ne s'agit que de deux entrées de répertoire dans le même fichier. Un fichier n'est supprimé que si tous les liens physiques sont supprimés (et en outre, il ne reste aucun processus pour lequel ce fichier est toujours ouvert).
Si vous déplacez / renommez l'original, tant que vous ne le déplacez pas vers un autre système de fichiers, les autres liens physiques ne sont pas affectés. ils pointent toujours sur le même fichier.
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:
Ecrire le nouveau contenu dans un nouveau fichier.
Renommez l'ancien fichier en un nom de sauvegarde (ou, si vous ne conservez pas les sauvegardes de la version précédente du fichier, supprimez-le simplement).
Renommez le fichier nouvellement écrit avec le nom du fichier précédent.
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/shou 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é.
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.
Créez HARD LINK 2 et supprimez HARD LINK 1 Original File :
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éé.
Supprimez le FILE (HARD LINK 1) auquel SOFT LINKed est associé:
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.
Supprimer SOFT LINK en HARD LINK:
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.
C'est un effort assez ambitieux, surtout pour un premier poste. Malheureusement, je pense que l'ajout de la matière sur "bind" (qui n'a pas été demandée) ne fait que compliquer les choses; d’autant plus que vous ne semblez pas avoir fait beaucoup d’efforts pour expliquer le montage "lié". De plus, je comprends très bien les liens durs et mous / symboliques, et je comprends à peine votre photo. Je serais très surpris qu'un débutant puisse en apprendre quelque chose.
G-Man dit 'Réintégrez Monica'
Même si vous pouvez créer un lien symbolique dans des répertoires, il apparaît dans le système de fichiers sous la forme d'un lien symbolique. Si vous vous liez, il est transparent pour le système d'exploitation. S'affiche comme un fichier.
FreeSoftwareServers
1
(1) En fait, sur au moins certaines versions de Linux, vous pouvez lier un fichier. (2) Bien que les montages liés ressemblent beaucoup aux liens physiques, il est faux de dire "La liaison est simplement identique aux liens physiques (sauf que vous ne pouvez pas lier un répertoire en dur)".
G-Man dit 'Réintégrez Monica'
@ G-Man, accepté et supprimé, avec juste une note mentionnant BIND
FreeSoftwareServers
@ Free, le lien symbolique pointe vers un nom de fichier (lien physique 1); les schémas, devraient rendre ceci évident.
JB.
0
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.
Je voudrais déposer un rapport de bogue pour Ableton Live. Peut-être qu'ils sont capables de résoudre ce problème.
aventurin
Oui, il y a déjà beaucoup d'années de plaintes à propos de ce problème sur les forums d'Abletons… Ils ne semblent pas tenter de résoudre ce problème bien que je ne sois pas en mesure de comprendre pourquoi.
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)la source
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!
la source
ls -l
est suffisant pour voir ce qui est lié par un lien symbolique, lea
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, alorsln -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.
la source
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 avecstat
comme suit dans cet exemple:Merci @geekosaur pour cette référence:
et ceci (édité):
À votre santé
la source
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.
la source
les liens "durs" partagent le même inode
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.
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.
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.
la source
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
ousubdir/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é.
la source
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.
Créez HARD LINK 2 et supprimez HARD LINK 1 Original File :
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éé.
Supprimez le FILE (HARD LINK 1) auquel SOFT LINKed est associé:
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.
Supprimer SOFT LINK en HARD LINK:
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.
Qu'est-ce qu'une monture BIND?
la source
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é.
la source
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.
la source