Quelle est la différence entre un lien dur et un fichier copié?

22

Ma compréhension est que les liens matériels incluent une copie du fichier d'origine et que je pourrais supprimer un fichier lié dans un répertoire, et qu'il existerait toujours dans l'autre répertoire.

Si tel est le cas, pourquoi voudrais-je utiliser des liens physiques? Pourquoi ne pas simplement avoir deux fichiers distincts?

Mike B
la source

Réponses:

29

Si vous copiez un fichier, il dupliquera le contenu. Donc, si vous modifiez le contenu d'un seul fichier, cela n'a aucun effet sur l'autre.

Si vous créez un lien physique, cela créera un fichier pointant vers le même contenu. Donc, si vous modifiez le contenu de l'un des fichiers, la modification sera visible sur les deux.

TheMeaningfulEngineer
la source
3
Pour les très gros fichiers, la création d'un lien dur est-elle toujours plus rapide que la copie du fichier d'origine?
Jorge Bucaran
14

Un lien dur est fondamentalement un deuxième nom de fichier pour le même fichier. Donc, si vous liez un fichier en dur, il ne sera qu'une seule fois sur le système de fichiers, et ne prendra donc de l'espace qu'une seule fois. Vous voulez donc l'utiliser si vous souhaitez économiser de l'espace disque

Peter
la source
4
Merci pour la réponse rapide. Alors pourquoi voudrais-je utiliser un lien dur au lieu d'un lien souple?
Mike B
5
Un lien logiciel est essentiellement un pointeur vers un autre fichier. Donc, si vous supprimez le fichier d'origine, le lien logiciel existera toujours mais sera rompu. Un lien physique comporte 2 noms pour le même fichier, ils peuvent donc être supprimés individuellement.
Peter
19
L'explication de Peter est bonne, mais il a omis le "nombre de liens". Dans l'inode du fichier (sur les métadonnées du disque), il y a un nombre de liens. Un lien dur augmente le nombre de liens, pas un lien logiciel. Le noyau est autorisé à supprimer le contenu d'un fichier si le nombre de liens tombe à zéro.
Bruce Ediger
4
Je pense que la réponse d'Alan à cela a un point important: changer un fichier change tous ses liens physiques, avec une copie dont le contenu serait différent.
donothingsuccess
6

Sur les systèmes de fichiers Unix, chaque nom de fichier est en fait un lien dur vers l'emplacement des données sur le disque, appelé un inode. Si vous créez un nouveau lien dur vers un fichier existant, il ne prendra aucun espace supplémentaire sur le disque car il s'agit simplement d'un autre pointeur vers les mêmes données. Si vous modifiez les données par l'un ou l'autre lien (ou modifiez l'inode directement), les deux fichiers seront modifiés.

Le système enregistre le nombre de liens durs que possède chaque inode. Lorsque le nombre de liens est 0, le fichier ne peut plus être atteint et les données sont marquées comme sûres pour être écrasées. Donc, étant donné un fichier avec 2 liens durs, si vous supprimez l'un des liens, les données ne seront pas supprimées. Ce n'est que si vous supprimez les deux que les données disparaîtront.

Vous pouvez voir le nombre d'inode des fichiers en utilisant le -icommutateur de la lscommande.

Un lien logiciel, d'autre part, pointe vers un autre fichier par son nom de fichier. Si vous déplacez ou supprimez le fichier d'origine, le lien sera rompu.

rjmunro
la source
0

En référence à la partie de la question qui demandait, "pourquoi voudrais-je utiliser des liens durs?":

Les fichiers liés en dur (ou d'ailleurs ceux liés par des liens symboliques) offrent un moyen utile d'avoir un seul fichier exécutable qui peut être créé pour se faire passer pour différents objectifs.

C'est-à-dire que le nom par lequel le code est invoqué peut être examiné afin de déterminer quelles options sont disponibles pour l'exécution. Cela permet le développement et le conditionnement d'un gros morceau de code avec toutes les fonctionnalités partagées nécessaires à des fins légèrement différentes. Du point de vue de l'utilisateur, la spécification de «quoi» exécuter (par son nom) limite les choix et la présentation à un sous-ensemble d'options plus gérable.

Un exemple classique est LVM. À un moment donné HP-UX utilisé fichiers ayant un lien pour les différents executables (par exemple vgdisplay, vgcreate, vgextend, etc. Aujourd'hui, comme Linux, ces commandes sont en fait symboliques (soft) des liens vers l' lvmexécutable.

JRFerguson
la source
Cela n'a rien à voir avec la question.
rjmunro
1
@rjmunro Je vous prie de différer. Le PO a demandé: "Pourquoi voudrais-je utiliser des liens durs?"
JRFerguson
Je ne comprends pas le dernier exemple. Autrefois, il y avait des liens durs vers de nombreux exécutables, maintenant il existe des liens logiciels vers un exécutable. Comment ces liens souples se distinguent-ils?
Emanuel Berg
@EmanuelBerg Mon point était qu'indépendamment du fait que des liens physiques ou immatériels soient utilisés, c'est le nom par lequel l'exécutable est appelé qui détermine les options et les arguments valides pour l'exécution.
JRFerguson
1
@EmanuelBerg TMTOWTDI
JRFerguson