Question

Je voulais juste préciser si un lien dur / symbolique est en fait un fichier qui est créé ??

J'ai couru la commande suivante:

ln source hardlink
ln -s source softlink

-. La commande ls montre ce 2 liens sous forme de fichier

Donc, ma requête est, ne ln / ln -s crée en fait un fichier?

Cordialement, darkie15

Était-ce utile?

La solution

Oui et non: -)

Dans UNIX, le contenu d'un fichier sont distincts des entrées de répertoire pour ce fichier. Vous pouvez avoir plusieurs entrées du répertoire pointent vers le même contenu (look up inode pour une description de la façon dont cette fonctionne) et, voici le plus délicat:

Toutes les entrées du répertoire sont égaux. Même si l'on peut avoir été créé d'abord, il n'y a rien de spécial. Si vous le retirez, le contenu ne disparaissent pas, juste l'entrée du répertoire. Le contenu disparaîtra une fois que le inode a zéro les entrées de répertoire pointant vers (et tous les processus fermer le fichier - j'ai été mordu avant en essayant de libérer de l'espace disque suppression de fichiers journaux pour constater que, parce qu'un processus a encore le fichier ouvert, le contenu du fichier ne sont pas récupérés même si aucune entrée de répertoire à les informer).

C'est pour les liens durs.

liens souples sont un peu plus compliqué. Ils créent un « fichier » de toutes sortes (un inode séparé), contenant le chemin d'accès au fichier cible. Et ces liens sont pas égal. Suppression de l'original vous laisse avec un lien pointant vers doux nulle part.

Parce que inodes sont uniques sur un système de fichiers donné, des liens durs ne peuvent pas se référer à des données sur un autre système de fichiers.

liens souples ne sont pas cette limitation car ils stockent le chemin vers le fichier cible, pas son inode.

La transcription suivante peut aider:

$ echo hello >f1
$ ln f1 f2
$ ln -s f1 f3
$ ls -ial f*
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f1
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
    4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
    hello
$ cat f2
    hello
$ cat f3
    hello
$ rm f1
$ ls -ial f*
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
    4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
    cat: f1: No such file or directory
$ cat f2
    hello
$ cat f3
    cat: f3: No such file or directory

Je l'ai utilisé que les quatre derniers chiffres du numéro d'inode pour maintenir l'entrée courte (et non vous frapper avec un nombre d'inodes comme 43910096366994672) mais vous pouvez voir que f1 et f2 ont exactement le même inode alors f3 est différent. Vous pouvez aussi voir que le contenu du fichier créé à l'origine comme f1 survivre à sa suppression, car f2 fait référence encore.

Cependant, parce que f3 fait référence le nom de f1 plutôt que son inode, vous obtenez une erreur d'essayer de l'utiliser.


En plus: Il faut que tu aimes quand les jouets UNIX avec vous comme ceci:

$ ls f*
    f2  f3
$ cat f3 # What the ...?
    cat: f3: No such file or directory

Presque autant de plaisir que la création d'un fichier appelé Espace backspace x et puis regarder quelqu'un essayer de le supprimer: -)

Autres conseils

Ni l'un crée un fichier.

Un fichier sur le disque est identifié par un « inode. » Annuaires carte les noms de fichiers inodes. Un lien signifie « créer un nouveau nom de fichier dans ce répertoire qui pointe vers le même inode que le nom de fichier I ».

Un lien symbolique signifie « créer un nouveau nom de fichier dans ce répertoire qui pointe sur l'inode ce autres points de fichiers. »

Comme mangoman souligne dans un commentaire, un lien symbolique ne crée un fichier avec le nom de la cible du lien, mais vous ne devriez pas y prêter attention. Il est un fichier spécial qui est pas de votre entreprise.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top