Comme le titre l'indique, j'aimerais connaître la différence entre un lien physique et un lien virtuel 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 dans lequel un lien physique peut être préférable à un lien symbolique.
symbolic-link
ste_kwr
la source
la source
Réponses:
Sous Linux / Unix, les raccourcis sont appelés liens.
Les liens sont de deux types: les liens symboliques (liens symboliques) ou les liens physiques.
Soft Links (liens symboliques)
Vous pouvez créer des liens vers des fichiers et des répertoires et créer des liens (raccourcis) sur différentes partitions et avec un numéro d'inode différent de celui d'origine.
Si la copie réelle est supprimée, le lien ne fonctionnera pas .
Liens durs
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 réelle est supprimée, le lien fonctionnera , car il accédera aux données sous-jacentes auxquelles la copie réelle accédait.
Question: Comment créer un lien symbolique?
Réponse: Un lien symbolique peut être créé avec
ln -s
; Vous devez d’abord définir la source, puis la destination. (N'oubliez pas que vous devez définir les chemins complets de la source et de la destination, sinon cela ne fonctionnera pas.)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 dur peut être fait avec
ln
; Vous devez d’abord définir la source, puis la destination. (N'oubliez pas 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
/script
répertoire nomméfirefox
.Comme vous pouvez le voir, il a 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ù un lien physique pourrait être préférable à un lien symbolique.
Réponse : En fonction de la disposition de la partition, les liens physiques ont la limitation d'être sur la même partition (-1 point) et ne peuvent être liés que par des fichiers (-1 point) ), mais +1 point si l'original est supprimé du lien. va travailler et il agit comme l'original.
D'autre part, un lien symbolique peut pointer sur 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ée, le lien ne fonctionnera pas.
la source
Un lien physique n'est pas un pointeur sur un fichier, c'est une entrée de répertoire (un fichier) pointant sur le même inode. Même si vous modifiez le nom de l'autre fichier, un lien dur pointe toujours vers le fichier. Si vous remplacez l'autre fichier par une nouvelle version (en le copiant), un lien matériel ne pointera pas sur 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 la notion des fichiers et des liens d'origine, ils sont tous égaux (pensez-y comme une référence à un objet). C'est un concept de très bas niveau.
D'autre part, un lien symbolique pointe en fait sur 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 désignera le nouveau fichier. Les liens symboliques peuvent s'étendre sur des systèmes de fichiers. Avec les liens symboliques, vous faites une distinction très claire entre le fichier réel et le lien symbolique, qui ne stocke aucune information à côté du chemin d'accès au fichier sur lequel il pointe.
la source
"Une image vaut mieux que mille mots."
Et, "Un exemple vaut cent paragraphes ..."
Créez deux fichiers:
Entrez quelques données dans eux:
Et comme prévu:
Créons des liens durs et souples:
Voyons ce qui vient de se passer:
Changer le nom de blah1 n'a pas d'importance:
blah1-hard pointe sur l'inode, le contenu du fichier - cela n'a pas changé.
Impossible de trouver le contenu du fichier car le lien virtuel pointe vers le nom, qui a été modifié, et non vers le contenu.
De même, si blah1 est supprimé, blah1-hard en conserve le contenu; si blah2 est supprimé, blah2-soft est simplement un lien vers un fichier non existant.
source: copie flagrante de StackOverflow!
la source
git
est une mauvaise idée , juste au cas où quelqu'un (frustré par les liens souples) se demanderait ... pourrait également s'appliquer à d'autres systèmes de gestion de versions.Les deux sont des pointeurs vers des fichiers; la différence est le genre de pointeur. Un lien symbolique pointe vers un autre fichier par son 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 donc maintenant vers le nouveau fichier. Vous pouvez facilement identifier un lien symbolique et voir le nom du fichier sur lequel il pointe.
Un lien physique pointe vers le fichier par numéro d'inode. En tant que tels, les liens physiques ne sont pas différents du prénom d'un fichier. Il n'y a pas de "vrai" nom par rapport au nom du lien physique; tous les liens physiques sont des noms également valides pour le fichier. Pour cette raison, le fichier auquel vous vous associez doit exister et se trouver dans le même système de fichiers que celui où vous essayez de créer le lien. Si vous supprimez le nom d'origine, le lien physique pointe toujours vers le même fichier. Tous les liens physiques étant des noms valables pour le fichier, vous ne pouvez pas en regarder un et voir les autres noms du fichier; pour le trouver, vous devez examiner chaque fichier et comparer son numéro d'inode afin de trouver le ou les autres noms qui portent 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 quelque part, et inversement, un fichier avec un nombre de liens égal à 1 seulement n'a pas (d'autres) liens physiques.la source
If you replace the named file, then the link still contains the same name, and so now it points to the new file
- Je pense que ce n'est pas bien expliqué. Voulez-vous dire que si je remplace le fichier dans lequel j'ai un lien symbolique, les liens contenant le nom restent intacts. Mais il ne pointerait que sur le fichier remplacé lorsque son nom de fichier (c'est-à-dire un nouveau fichier remplaçant l'ancien) est identique à celui remplacé (c'est-à-dire l'ancien fichier qui a été remplacé par le nouveau), n'est-ce pas?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 des inodes). Un fichier ne sera supprimé à partir du disque lorsque le dernier lien vers son inode est parti (vous
rm
d ouunlink
d la dernière liaison). Les liens physiques ne fonctionnent généralement que pour des fichiers, pas des répertoires.Un lien symbolique (lien symbolique) est un fichier spécial contenant un chemin d'accès à un autre fichier. Ce chemin peut être absolu ou relatif. Les liens symboliques peuvent fonctionner sur plusieurs systèmes de fichiers et peuvent même pointer vers différents fichiers, par exemple si vous débranchez un disque dur externe et le remplacez par un autre, dont le fichier est différent du même chemin. Un lien symbolique peut désigner des fichiers ou des répertoires.
la source
-d, -F, --directory
interrupteurs. Et oui, je l' ai vu la note de laln(1)
page :)ln
ne peut pas être utilisé pour créer des liens en dur vers des répertoires. Il existe cependant des liens durs vers des répertoires, l'exemple le plus important étant.
et..
. Je ne voulais pas inclure cela dans ma réponse initiale, car cela ne ferait que compliquer les choses.Une des réponses de l’autre fil (maintenant liée au début de votre message) mentionne cette page qui, à mon avis, est une assez bonne explication de niveau moyen. Si vous vous perdez dans l'art ascii, voici la version tl; dr:
Le noyau et les systèmes de fichiers impliqués traduisent tout de manière transparente.
Donc basé sur ça:
../parent.file
)Je me suis peut-être un peu confondu, mais en lisant diverses choses, j'ai du mal à faire la différence entre un fichier standard et un lien physique. La façon dont je le lis est que chaque fichier est constitué d'un lien dur (stockant le nom du fichier), qui relie à un inode qui pointe sur des données physiques.
L'ajout d'un lien physique fournit simplement un inode avec un pointeur supplémentaire basé sur un système de fichiers. Est-ce correct?
la source
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 / souples.
Liens vers répertoire: Si vous souhaitez lier des répertoires, vous devez utiliser des liens souples, car vous ne pouvez pas créer de lien physique vers un répertoire.
Quand utiliser Hard Link:
Espace de stockage: les liens physiques occupent très peu d'espace, car aucun nouvel inode n'a été créé lors de la création de liens physiques. Dans les liens symboliques, nous créons un fichier qui consomme de l’espace (habituellement 4 Ko, selon le système de fichiers).
Performance: les performances seront légèrement meilleures lors de l'accès à un lien physique, car vous accédez directement au pointeur du 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 du même système de fichiers, le lien fixe fonctionnera toujours, mais le lien souple échouera.
Redondance: si vous voulez vous assurer de la sécurité de vos données, vous devez utiliser un lien physique, comme dans le lien physique, les données sont en sécurité, jusqu'à ce que tous les liens vers les fichiers soient supprimés, au lieu de cela dans le lien virtuel, vous perdrez les données si l'instance principale du fichier est supprimée.
la source
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 se compose 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 physique est supprimé, le système d'exploitation sait que les données ne sont plus nécessaires.
À partir de là, vous pouvez voir que les données réelles ne sont jamais supprimées, mais uniquement les liens durs. 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 un peu difficile à trouver sans lien dur.
Comme indiqué précédemment, les liens symboliques vous indiquent simplement "qu'il existe un fichier nommé
<targetname>
dans un dossier nommé<targetfolder>
". Ils indiquent le lien dur. Ils ne savent pas où sont les données. Le lien dur le sait.la source
C'est très simple. Les fichiers (et les répertoires!) Sont stockés à des adresses sur le périphérique bloc (disque dur ou autre). Normalement, vous avez un seul nom 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. Au lieu de cela, un lien symbolique fait référence au symbole - le nom - et ainsi à un deuxième nom mappé au prénom. En ce qui concerne le noyau, une fois qu'il a lu le lien symbolique cible, il s'arrête et revient au début avec la valeur cible comme nom de fichier (plus ou moins), de sorte que les liens symboliques relatifs sont possibles mais extrêmement 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.
la source