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?
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
la source
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
-i
commutateur de lals
commande.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.
la source
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'lvm
exécutable.la source