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

Récemment, on m'a demandé cela lors d'un entretien d'embauche. J'ai été honnête et dit que je savais comment un lien symbolique se comporte et comment en créer un, mais je ne comprends pas l'utilisation d'un lien dur et en quoi il diffère d'un lien symbolique.

640
demandé sur Tanktalus 2008-10-09 08:05:41

22 réponses

Sous les fichiers du système de fichiers sont représentés par des inodes (ou est-ce que plusieurs inodes ne sont pas sûrs)

Un fichier dans le système de fichiers est essentiellement un lien vers un inode.
Un lien dur crée alors simplement un autre fichier avec un lien vers le même inode sous-jacent.

Lorsque vous supprimez un fichier, il supprime un lien vers l'inode sous-jacent. L'inode n'est supprimé (ou deletable/over-writable) que lorsque tous les liens vers l'inode ont été supprimés.

Un lien symbolique est un lien vers un autre nom dans le système de fichiers.

Une fois qu'un lien dur a été créé, le lien est vers l'inode. supprimer renommer ou déplacer le fichier d'origine n'affectera pas le lien dur car il est lié à l'inode sous-jacent. Toute modification des données sur l'inode est reflétée dans tous les fichiers qui se réfèrent à cet inode.

Remarque: les liens durs ne sont valides que dans le même système de fichiers. Les liens symboliques peuvent s'étendre sur les systèmes de fichiers car ils sont simplement le nom d'un autre fichier.

673
répondu Martin York 2008-10-25 20:04:28

Une bonne intuition qui pourrait aider, en utilisant N'importe quelle console Linux(ish).

Créez deux fichiers:

$ touch blah1; touch blah2

Entrez des données dans les:

$ echo "Cat" > blah1
$ echo "Dog" > blah2

(en Fait, j'aurais pu utiliser echo en premier lieu, qu'il crée les fichiers s'ils n'existent pas... mais jamais l'esprit que.)

Et comme prévu:

$cat blah1; cat blah2
Cat
Dog

Créons des liens durs et souples:

$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft

Voyons ce qui vient de se passer:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

Changer le nom de blah1 ne matière:

$ mv blah1 blah1-new
$ cat blah1-hard
Cat

Blah1-hard pointe vers l'inode, le contenu, du fichier - qui n'a pas été modifié.

$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory

Le contenu du fichier n'a pas pu être trouvé car le lien logiciel pointe vers le nom, qui a été modifié, et non vers le contenu. De même, Si blah1 est supprimé, blah1-dur détient toujours le contenu; si blah2 est supprimé, blah2-soft est juste un lien vers un fichier non-existant.

382
répondu Adam Matan 2014-03-13 21:32:03

Comme dit le proverbe, une image vaut mille mots. Voici comment je le visualise:

entrez la description de l'image ici

Voici comment nous arrivons à cette image:

  1. Créez un nom myfile.txt dans le système de fichiers qui pointe vers un nouvel inode (qui contient les métadonnées du fichier et pointe vers les blocs de données qui contiennent son contenu, c'est-à-dire le texte " Hello, World!":

    $ echo 'Hello, World!' > myfile.txt
    
  2. Créer un lien en dur my-hard-link dans le fichier myfile.txt, ce qui signifie "créer un fichier devrait pointer vers le même inode que myfile.txt pointe vers":

    $ ln myfile.txt my-hard-link
    
  3. Créer un doux lien my-soft-link dans le fichier myfile.txt, ce qui signifie "créer un fichier qui doit pointer vers le fichier myfile.txt":

    $ ln -s myfile.txt my-soft-link
    

Regardez ce qui se passera maintenant si myfile.txt est supprimé (ou déplacé): my-hard-link pointe toujours vers le même contenu, et n'est donc pas affecté, alors que my-soft-link pointe maintenant vers rien. D'autres réponses discutent des avantages/inconvénients de chacune.

341
répondu akivajgordon 2015-04-22 01:45:24

Les liens durs sont utiles lorsque le fichier d'origine est déplacé. Par exemple, déplacer un fichier de / bin vers / usr / bin ou vers / usr / local / bin. Tout lien symbolique vers le fichier dans / bin serait brisé par cela, mais un lien dur, étant un lien directement vers l'inode pour le fichier, ne s'en soucierait pas.

Les liens durs peuvent prendre moins d'espace disque car ils ne prennent qu'une entrée de répertoire, alors qu'un lien symbolique a besoin de son propre inode pour stocker le nom vers lequel il pointe.

Les liens durs prennent également moins de temps à résoudre - les liens symboliques peuvent pointer vers d'autres liens symboliques qui se trouvent dans des répertoires avec liens symboliques. Et certains d'entre eux pourraient être sur NFS ou d'autres systèmes de fichiers à latence élevée, et pourraient donc entraîner un trafic réseau à résoudre. Les liens durs, étant toujours sur le même système de fichiers, sont toujours résolus en une seule recherche, et n'impliquent jamais de latence réseau (s'il s'agit d'un lien dur sur un système de fichiers NFS, le serveur NFS ferait la résolution, et il serait invisible pour le système client). Parfois, c'est important. Pas pour moi, mais Je peux imaginer des systèmes à haute performance où cela pourrait être important.

Je pense aussi que des choses comme mmap(2) et même open(2) utilisent la même fonctionnalité que hardlinks pour garder l'inode d'un fichier actif de sorte que même si le fichier est unlink (2)ed, l'inode reste pour permettre au processus de continuer l'accès, et seulement une fois que le processus se ferme, le fichier disparaît vraiment. Cela permet des fichiers temporaires beaucoup plus sûrs (si vous pouvez obtenir l'ouverture et le déliement de se produire de manière atomique, ce qui peut être un POSIX API pour cela je ne me souviens pas, alors vous avez vraiment un fichier temporaire sûr) où vous pouvez lire/écrire vos données sans que personne ne puisse y accéder. Eh bien, c'était vrai avant que /proc donne à tout le monde la possibilité de regarder vos descripteurs de fichiers, mais c'est une autre histoire.

En parlant de cela, récupérer un fichier ouvert dans le processus A, mais non lié sur le système de fichiers tourne autour de l'utilisation de liens durs pour recréer les liens d'inode afin que le fichier ne disparaisse pas lorsque le processus qui l'a ouvert il se ferme ou s'en va.

63
répondu Tanktalus 2008-10-09 05:22:59

Un moyen simple de voir la différence entre un lien dur et un lien symbolique est à travers un exemple simple. Un lien dur vers un fichier pointera vers l'endroit où le fichier est stocké, ou l'inode de ce fichier. Un lien symbolique pointera vers le fichier lui-même.

Donc, si nous avons un fichier appelé " a "et que nous créons un lien dur" b "et un lien symbolique" c "qui font tous référence au fichier "a":

echo "111" > a
ln a b
ln -s a c

La sortie de "a", "b" et "c" sera :

cat a --> 111
cat b --> 111
cat c --> 111

Maintenant, supprimons le fichier " a " et voir ce qui arrive à la sortie de "a", " b " et "c":

rm a
cat a --> No such file or directory
cat b --> 111
cat c --> No such file or directory

, Donc ce qui s'est passé?

Parce que le fichier " c " pointe vers le fichier "a" lui-même, si le fichier "a" est supprimé, le fichier "c" n'aura rien à pointer, en fait il est également supprimé.

Cependant, le fichier " b "pointe vers le lieu de stockage, ou l'inode, du fichier "a". Donc, si le fichier "a" est supprimé, il ne pointera plus vers l'inode, mais parce que le fichier "b" le fait, l'inode continuera à stocker tout contenu appartenant à" a " jusqu'à ce que plus de liens durs pointent vers elle plus.

32
répondu Bolboa 2016-12-01 00:05:42

Doux Lien:

Soft ou symbolique est plus un raccourci vers le fichier d'origine....si vous supprimez l'original le raccourci échoue et si vous ne pouvez supprimer le raccourci ne se passe rien à l'original.

Syntaxe de lien souple: ln -s Pathof_Target_file link

Sortie : link -> ./Target_file

La Preuve: readlink link Aussi dans ls -l link sortie, vous verrez la première lettre dans lrwxrwxrwx comme L qui est une indication que le fichier est un logiciel lien.

La Suppression du lien: unlink link

Remarque: Si vous le souhaitez, votre softlink peut fonctionner même après l'avoir déplacé ailleurs dans le répertoire actuel. Assurez-vous de donner un chemin absolu et non un chemin relatif lors de la création d'un lien logiciel. c'est à dire(à partir de /root/utilisateur/Target_file et pas ./Target_file)

Lien En Dur:

Le lien dur est plus une copie miroir ou plusieurs chemins vers le même fichier. Faites quelque chose à file1 et il apparaît dans dossier 2. La suppression de l'un maintient toujours l'autre ok.

L'inode (ou le fichier) n'est supprimé que lorsque tous les liens (durs)ou tous les chemins d'accès à l'inode (même fichier) ont été supprimés.

Une fois qu'un lien dur a été créé, le lien a l'inode du fichier d'origine. Supprimer renommer ou déplacer le fichier d'origine n'affectera pas le lien dur car il est lié à l'inode sous-jacent. Toute modification des données sur l'inode est reflétée dans tous les fichiers qui se réfèrent à cet inode.

Lien Dur la syntaxe: ln Target_file link

Sortie: un fichier avec name link sera créé avec le même numéro d'inode que Targetfile.

La Preuve: ls -i link Target_file (vérifier leur inodes)

La Suppression du lien: rm -f link (Supprimer le lien juste comme un fichier normal)

Note : les liens symboliques peuvent s'étendre sur les systèmes de fichiers car ils sont simplement le nom d'un autre fichier. Alors que les liens durs ne sont valides que dans le même système de fichiers.

Les liens Symboliques ont certaines fonctionnalités des liens durs sont manquants:

  • point de lien dur vers le contenu du fichier. tout Doux lien pointe vers le nom de fichier.
  • bien que la taille de lien en dur est la taille du contenu, tout doux lien est avoir la taille du nom de fichier.
  • les liens durs partagent le même inode. Les liens souples ne le font pas.
  • les liens durs ne peuvent pas traverser les systèmes de fichiers. Les liens souples font.
  • , vous savez immédiatement où un lien symbolique pointe tout dur des liens, vous avez besoin d'explorer l'ensemble de la système de fichiers pour trouver des fichiers partager le même inode.
  • les liens durs ne peuvent pas pointer vers des répertoires.

Raison pour laquelle les liens durs ne peuvent pas croiser les systèmes de fichiers ou les partitions:

Sur un disque dur il y a beaucoup de secteurs.

Disons qu'un fichier commence à inode (secteur) 4001 et se termine à 5000. Le fichier est " / export / home / john / mail.doc"

Alors: 1. Un lien dur vers " mail.doc "qui s'appelle "hardLinkToMail" contient la valeur: "4001". 2. Un doux lien "mail.doc" qui est nommé "softLinkToMail" contient la valeur: "/ export / home / john / mail.doc".

En 1) le lien dur ne peut pointer que vers le même disque. Il ne peut pas pointer vers un autre lecteur. Tous les lecteurs a un inode de valeur "4001", comment le lien dur peut distinguer entre tous les disques? Quel lecteur est "4001" est-ce?

Dans 2) le lien Logiciel contient une chaîne. La chaîne peut pointer vers un autre système de fichiers sur un autre lecteur, car le chemin d'accès complet est spécifié.

29
répondu Prabhat Kumar Singh 2018-04-04 10:19:59

Liens symboliques lien vers un nom de chemin. Cela peut être n'importe où dans l'arborescence de fichiers d'un système, et n'a même pas besoin d'exister lorsque le lien est créé. Le chemin cible peut être relatif ou absolu.

Les liens durs sont des pointeurs supplémentaires vers un inode, ce qui signifie qu'ils ne peuvent exister que sur le même volume que la cible. Les liens supplémentaires vers un fichier sont indiscernables du nom "original" utilisé pour référencer un fichier.

27
répondu Andrew Medico 2014-04-07 03:25:52

Je vous indiquerais Wikipedia:

Quelques points:

  • les liens symboliques, contrairement aux liens durs, peuvent traverser les systèmes de fichiers (la plupart du temps).
  • les liens symboliques peuvent pointer vers des répertoires.
  • les liens durs pointent vers un fichier et vous permettent de faire référence au même fichier avec plus d'un nom.
  • , tant Qu'il existe au moins un lien, les données sont toujours disponibles.
18
répondu Jauder Ho 2016-02-21 21:39:27

Les liens durs sont très utiles lorsque vous effectuez des sauvegardes incrémentielles. Voir rsnapshot, par exemple. L'idée est de faire de la copie en utilisant des liens durs:

  • copier le numéro de sauvegarde n À n + 1
  • copier la sauvegarde n-1 vers n
  • ...
  • copier la sauvegarde 0 vers la sauvegarde 1
  • mettre à jour la sauvegarde 0 avec les fichiers modifiés.

La nouvelle sauvegarde ne prendra pas d'espace supplémentaire en dehors des modifications que vous avez apportées, car toutes les sauvegardes incrémentielles pointeront vers le même ensemble d'inodes pour les fichiers qui n'ont pas changé.

8
répondu JesperE 2008-10-09 06:54:24

Les liens durs peuvent être utiles, parce qu'il vous permet d'accéder au fichier à partir de plusieurs emplacements différents. accès inode directement. Quelque les restrictions sont:

  1. les liens durs doivent tous exister sur le même appareil.
  2. Nous ne pouvons pas créer liens durs vers des répertoires.
  3. , Le nombre d'alias du fichier d'origine avoir. Lorsque le nom de famille est supprimé, le contenu est également supprimé.

La bonne chose à propos des liens durs est qu'aucune différence n'existe entre le premier disque le lien et le deuxième lien en dur. Ils sont à la fois juste des liens durs, et si le premier lien dur cela n'a jamais existé pour un fichier est supprimé, cela n'a pas d'impact sur les autres liens durs qui existent encore. le système D'exploitation Linux utilise des liens sur de nombreux emplacements pour rendre les fichiers plus accessibles.

Où en tant que lien symbolique (également appelé Lien logiciel) ne lie pas directement à l'inode mais au nom du fichier.Le principal inconvénient est que lorsque l' fichier original est supprimé, le lien symbolique devient invalide et ne fonctionne plus.

Quelques informations sur l'Inode:

Linux stocke les données administratives sur les fichiers dans les inodes. Chaque fichier sur Linux a un inode, et dans l'inode, des informations importantes sur le fichier sont stockées:

  1. le bloc de données où le contenu du fichier est stocké
  2. la date de création, d'accès et de modification
  3. Autorisations
  4. Fichier propriétaires

Une seule information importante n'est pas stockée dans l'inode: le nom. Nom sont stockés dans le répertoire, et chaque nom de fichier sait à quel inode il doit s'adresser de plus amples informations sur le fichier. Il est intéressant de savoir qu'un inode ne sais pas quel nom il a; il sait juste combien de noms sont associés à l'inode. Ces noms sont mentionnés comme des liens en dur. Lorsque vous créez un fichier, vous lui donnez un nom. Fondamentalement, ce nom est un lien dur.

5
répondu Pinaki Mukherjee 2017-06-19 20:19:34

J'ajoute la question de Nick: quand les liens durs sont-ils utiles ou nécessaires? La seule application qui me vient à l'esprit, dans laquelle les liens symboliques ne feraient pas le travail, est de fournir une copie d'un fichier système dans un environnement chrooté.

4
répondu Federico A. Ramponi 2008-10-09 05:11:50

Aussi:

  1. les performances de lecture des liens durs sont meilleures que les liens symboliques (micro-performance)
  2. les liens symboliques peuvent être copiés, contrôlés par la version,..etc. En d'autres termes, ils sont un fichier réel. À l'autre extrémité, un lien dur est quelque chose à un niveau légèrement inférieur et vous constaterez que par rapport aux liens symboliques, il y a moins d'outils qui fournissent des moyens pour travailler avec les liens durs comme des liens durs et non comme des fichiers normaux
3
répondu Amr Mostafa 2009-11-04 08:55:20

Ce que vous considérez comme un simple "fichier" est en fait deux choses distinctes: Les données d'un fichier, et une entrée de répertoire. Lorsque vous créez un lien dur pour un fichier, vous créez en fait une deuxième entrée de répertoire qui fait référence aux mêmes données. Les deux entrées de répertoire ont exactement la même fonctionnalité; chacun peut être utilisé pour ouvrir le fichier pour le lire. Donc, vous n'avez pas vraiment "un fichier plus un lien dur", vous avez "des données de fichier avec deux entrées de répertoire". Ce que vous pensez que la suppression d'un fichier supprime une entrée de répertoire, et lorsque la dernière entrée de répertoire pour les données est supprimé, les données lui-même est supprimé. Pour les fichiers ordinaires qui n'ont qu'une seule entrée de répertoire, la suppression de l'entrée de répertoire supprimera les données comme toujours. (Alors qu'un fichier est ouvert, le système d'exploitation crée un lien temporaire vers le fichier, de sorte que même lorsque vous supprimez toutes les entrées de l'annuaire, les données restent, mais disparaît dès que vous fermez le fichier).

Par exemple, créez un fichier A.txt, un lien dur B.txt, et supprimer A.txt. Lorsque vous avez créé A.txt, certaines données ont été créées, et une entrée de répertoire A.txt. Lorsque vous avez créé le lien dur, une autre entrée de répertoire B.txt a été créé, pointant vers les mêmes données exactes. Lorsque vous supprimez A.txt, vous avez toujours toutes les données et une seule entrée de répertoire B.txt, exactement comme si vous aviez créé un fichier B.txt en premier lieu.

Un lien Logiciel est juste un fichier (presque) ordinaire, sauf qu'il ne contient pas de données, mais le chemin d'une autre entrée de répertoire. Si vous supprimez le fichier auquel le lien logiciel fait référence, alors le lien logiciel contiendra un chemin qui ne pointe plus vers une entrée de répertoire; il est cassé. Si vous supprimez le lien logiciel, c'est comme supprimer tout autre fichier, le fichier vers lequel il pointe n'est pas affecté.

3
répondu gnasher729 2014-11-28 15:32:19

Lien dur vs lien souple

Lien dur Vs lien souple peut être facilement expliqué par cette image.

3
répondu PBA 2017-12-13 06:29:18

Simplement, lien dur: est juste ajouter un nouveau nom à un fichier, c'est dire, un fichier peut avoir beaucoup de nom en même temps, tous les noms sont égaux les uns aux autres, personne ne préfère, lien dur n'est pas moyen de copier tout le contenu du fichier et de faire un nouveau fichier n'est pas cela, il.

Lien Symbolique (symlink) : est un pointeur de fichier vers un autre fichier, si le lien symbolique pointe vers un fichier existant qui est supprimé plus tard, le lien symbolique continue de pointer vers le même nom de fichier même si le nom ne nomme plus aucun fichier.

2
répondu Yassine Abdul-Rahman 2013-08-05 05:11:19

À Partir de MSDN,

Lien Symbolique

Un lien symbolique est un objet système de fichiers qui pointe vers un autre objet système de fichiers. L'objet pointé est appelée la cible.

Les liens symboliques sont transparents pour les utilisateurs; les liens apparaissent comme normaux fichiers ou répertoires, et peut être agi par l'utilisateur ou l'application exactement de la même manière.

Les liens symboliques sont conçus pour faciliter la migration et l'application la compatibilité avec les systèmes d'exploitation UNIX. Microsoft a mis en œuvre ses liens symboliques fonctionnent comme des liens UNIX.

Les liens symboliques peuvent être des liens absolus ou relatifs. Absolu les liens sont des liens qui spécifient chaque partie du nom du chemin; les liens sont déterminés par rapport à l'emplacement des spécificateurs de lien relatif un chemin spécifié

Un exemple de lien symbolique absolu

X: "C:\alpha\beta\absLink\gamma\file"
Link: "absLink" maps to "\\machineB\share"
Modified Path: "\\machineB\share\gamma\file"

Un exemple de symbolique Relative Liens

X: C:\alpha\beta\link\gamma\file
Link: "link" maps to "..\..\theta"
Modified Path: "C:\alpha\beta\..\..\theta\gamma\file"
Final Path: "C:\theta\gamma\file"

Lien en Dur

Un lien en dur est la représentation du système de fichiers d'un fichier par qui plus d'un chemin fait référence à un seul fichier dans le même volume.

Pour créer un lien dur dans windows, accédez à l'endroit où le lien doit être créé et entrez cette commande:

mklink /H Link_name target_path

Notez que vous pouvez supprimer les liens durs n'importe quel ordre, quel que soit l'ordre dans lequel ils ont été créés. En outre, les liens durs ne peuvent pas être créé quand

  • les références sont dans différents lecteurs locaux
  • les références incluent le lecteur réseau. En d'autres termes, l'une des références est un lecteur réseau
  • le lien dur à créer est dans le même chemin que la cible

Jonction

NTFS prend en charge un autre type de lien appelé junction. MSDN le définit comme suit:

Une jonction (également appelée lien souple) diffère d'un lien dur en ce que le stockage l'objecte les références sont des répertoires séparés, et une jonction peut relier des répertoires situés sur différents volumes locaux sur le même ordinateur . Sinon, les jonctions fonctionnent de manière identique aux liaisons dures.

Les parties en gras dans la section de liaison dure et la section de jonction montrent la différence de base entre les deux.

Commande pour créer une jonction dans windows, accédez à l'emplacement où le lien doit être créé, puis entrez:

mklink /J link_name target_path
2
répondu Sнаđошƒаӽ 2015-12-24 15:24:05

Une entrée de répertoire est un lien structrue:

struct dentry{
    ino_t ino;
    char  name[256];
}

L'ino est le nombre d'inode, le nom est le nom du fichier, la structure d'inode peut-être comme:

struct inode{
      link_t nlink; 
      ...
}

Par exemple vous créez un fichier /1, l'entrée de répertoire peut-être comme:

struct dentry{
     ino_t ino; /* such as 15 */
     char  name[256]; /* "1" */
} 

La structure d'inode peut-être comme:

   struct inode{ /* inode number 15 */
         link_t nlink; /* nlink = 1 */
         ...
    }

Ensuite, vous créez un lien dur (peut être /100) , l'entrée de répertoire peut-être comme:

  struct dentry{
     ino_t ino; /* 15 */
     char  name[256]; /* 100 */
  }

La structure d'inode peut-être comme:

   struct inode{ /* inode numebr 15 */
         link_t nlink; /* nlink = 2 */
         ...
    }

Ensuite, vous créez un lien symbolique (peut être /200) vers le fichier 1, Le entrée de répertoire peut-être comme:

  struct dentry{
        ino_t ino; /* such as 16 */
        char  name[256]; /* "200" */
  }

La structure d'inode peut-être comme:

   struct inode{ /* inode number 15 */ 
         link_t nlink; /* nlink = 2 */
         ...
    }

   struct inode{ /* inode number 16 */
         link_t nlink; /* nlink = 1 */
         ...
    } /* the data of inode 16 maybe /1 or 1 */
2
répondu mc.robin 2016-07-18 06:59:01

En ajoutant à toutes les réponses ci-dessus, la différence dans la recherche du fichier hardlink et softlink peut être comprise comme ci-dessous:

J'ai un fichier f6 dans mon répertoire en cours, ainsi qu'un répertoire nommé t2.

Fichier nommé f1 et ./t2/f2 sont des liens symboliques vers f6.

Les fichiers nommés f7 et ./t2/f8 sont des liens durs de f6.

Pour trouver le lien doux aussi bien que dur, nous pouvons utiliser:

$ find -L . -samefile f6 

> ./f1
> ./f6
> ./f7
> ./t2/f2
> ./t2/f8

Pour trouver seulement hardlink nous pouvons utiliser:

$ find . -xdev -samefile f6

> ./f6
> ./f7
> ./t2/f8

Depuis les liens durs peuvent être créés sur le même système de fichiers, nous pouvons rechercher tous les liens durs sans l'option -L utilisée (avec l'option -xdev) dans le même système de fichiers/point de montage. Il enregistre la recherche inutile dans différents points de montage.

Donc, la recherche du hardlink est un peu plus rapide que la recherche des softlinks(veuillez rectifier si je me trompe ou pas clair).

2
répondu ChandanK 2017-04-25 12:09:02

Les liens symboliques donnent un autre nom à un fichier, d'une manière similaire aux liens durs. Mais un fichier peut être supprimé même s'il reste des liens symboliques.

1
répondu lmmorris1 2014-11-25 06:26:13

Je viens de trouver un moyen facile de comprendre les liens durs dans un scénario commun, l'installation de logiciels.

Un jour, j'ai téléchargé un logiciel de dossier Downloads pour l'installer. Après avoir fait sudo make install, certains exécutables ont été cped dans le dossier bin local. Ici, cp crée lien en dur. J'étais content du logiciel mais j'ai vite réalisé que Downloads n'est pas un bon endroit à long terme. J'ai donc mved le dossier du logiciel dans le répertoire source. Eh bien, je peux toujours exécuter le Logiciel comme avant sans se soucier de toutes les choses de lien cible, comme dans Windows. Cela signifie lien en dur trouve inode directement et d'autres fichiers.

0
répondu themefield 2017-11-06 19:50:19

Dans cette réponse Quand je dis un fichier, je veux dire l'emplacement en mémoire

Toutes les données enregistrées sont stockées en mémoire à l'aide d'une structure de données appelée inodes chaque inode a un inodenumber.Le numéro d'inode est utilisé pour accéder à l'inode.Tous les liens durs vers un fichier peuvent avoir des noms différents mais partager le même numéro d'inode.Puisque tous les liens durs ont le même inodenumber(qui accède au même inode), tous pointent vers la même mémoire physique.

Un lien symbolique est un type spécial de fichier.Comme c'est aussi un fichier il aura un nom de fichier et un inode number.As dit ci - dessus, le nombre d'inodes accède à un inode qui pointe vers des données.Maintenant, ce qui rend un lien symbolique spécial, c'est que les inodenumbers dans les liens symboliques accèdent aux inodes qui pointent vers "un chemin" vers un autre fichier.Plus précisément, le nombre d'inodes dans le lien symbolique accède aux inodes qui pointent vers un autre lien dur.

Lorsque nous déplaçons, copions, supprimons un fichier dans L'interface graphique, nous jouons avec le liens durs du fichier pas la mémoire physique.lorsque nous supprimons un fichier, nous supprimons le lien dur du fichier. nous n'effacons pas la mémoire physique.Si tous les liens vers le fichier sont supprimés, il ne sera pas possible d'accéder aux données stockées bien qu'elles puissent toujours être présentes en mémoire

0
répondu s. srinath 2018-02-19 16:47:24

Mes deux cents sur l'utilisation:

Les liens Soft peuvent être utilisés pour raccourcir les noms de chemins longs, c'est-à-dire:

ln -s /long/folder/name/on/long/path/file.txt /short/file.txt

Les modifications apportées à /short/file.txt seront appliquées au fichier d'origine.

Les liens durs peuvent être utilisés pour déplacer des fichiers volumineux:

$ ls -lh /myapp/dev/
total 10G
-rw-r--r-- 2 root root 10G May 22 12:09 application.bin

ln /myapp/dev/application.bin /myapp/prd/application.bin

Copie instantanée dans un autre dossier, et le fichier original (sur /myapp/dev) peut être déplacé ou supprimé, sans toucher le fichier sur /myapp/prd

0
répondu Matheus Santoro 2018-05-22 12:17:32