NAME ln -- make a link
SYNOPSIS ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1.
If name2 is given, the link has that name;
À partir de 1971 Unix First Edition Manuals .
Il existe une seconde forme simple, à syntaxe.
edit: je mets FILE ou FILENAME au lieu de Target --- voir les commentaires , etc. voir aussi très long ajout au fond, adressant l' iceberg, dur et doux de ln
, non seulement la pointe de celui - ci.
Donc, GNU ln
a ceci:
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
où vous n'avez pas besoin du nom du lien. Après avoir ln -s /usr/lib/modules
obtenu un
modules -> /usr/lib/modules
avec le même nom que FILENAME ("cible" ou "source"), là où vous êtes. Pas de choix, pas de confusion.
Maintenant, si vous êtes plus exigeant et souhaitez que le lien soit créé sous un autre nom et / ou ailleurs , vous ajoutez ce souhait sous forme de nom ou de chemin. La vraie cible vient en premier, le nouveau nom de lien extra fantastique en second.
Ou vous dites: "Je connais cette notation en forme ls -l
de flèche pour les liens. Je n’ai pas de flèche dans la coque pour indiquer la direction de mon lien. Je dois donc le retourner."
Vous le créez dans un sens, vous pouvez donc l'utiliser dans l'autre.
(FIN DE LA RÉPONSE DE LA PARTIE QUESTION)
Sur un autre plan, le mot "lien" porte lui-même une double signification cachée. Les liens symboliques sont venus plus tard, alors au début, un lien n'était qu'un lien. Il n'y avait pas de soft et hard, pas d' -s
option. Et maintenant, j'utilise même le symbolisme source-cible:
mv A B --- move the whole file to B (dir or new name)
cp A B --- copy whole file (mv and cp are "the same" here)
ln A B --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping
A ce stade, il y a des liens, mais pas de liens durs ou indirects, et ls -l
ne montre pas de flèches, car il n'y a pas de direction dans un lien (dur). Un "lien" à ce stade d’évolution unix signifie que le nom de fichier "B" (entrée de répertoire "B") dans le système de fichiers pointe sur le même inode que le nom de fichier "A".
Les fichiers A et B sont "liés" ensemble, car ils partagent les mêmes blocs. Alors maintenant, avec chaque rm, le noyau doit vérifier: est-ce que je supprime / libère les blocs de ce fichier sur le disque, ou y a-t-il un autre fichier lié aux mêmes blocs? Pour cela, un compteur de liens est utilisé.
Supposons que vous souhaitiez conserver un gros fichier sur / tmp et que vous le supprimiez ln /tmp/bigfile
. Vous avez maintenant un gros bigfile dans votre répertoire de travail. Après avoir nettoyé / tmp et déplacé l'original, vous continuez à utiliser les mêmes blocs de données. Vous n'obtenez pas un lien mort ou en suspens, vous avez un fichier normal. Pointant sur aucun fichier mais uniquement sur le système de fichiers, comme le fait chaque entrée de répertoire. Seulement maintenant, "nettoyer" / tmp n’est plus aussi efficace qu’il l’était. Cela semble vide, et ça l'est, mais les blocs de la partition ne sont pas libérés.
Même si un lien physique ne coûte pas l’espace lui-même comme cp, indirectement, il le peut.
Ajout ln -s
à la séquence ci-dessus:
ln -s A B --- copy only the file's name to "B"
Maintenant, "B", le lien symbolique, a seulement une chaîne avec un chemin d'accès. C'est info "soft". Techniquement, "A" et "B" ne sont pas liés. Mais toujours B est un "lien" dans le nouveau sens que vous pouvez utiliser ce chemin stocké comme raccourci vers "A". Maintenant c'est "un lien vers A" (point) et pas "lié à l'inode du fichier A"
Les deux types de liens peuvent confondre non seulement les humains mais aussi le noyau / fs. La page de manuel de 1971 disait: "BOGUES: les liens sont sauvegardés deux fois et restaurés sous forme de fichiers séparés avec des inodes distincts."
Les liens durs vers les répertoires (rares / non autorisés) peuvent facilement conduire à un encrassement.
Les liens symboliques vers les répertoires (très fréquents) peuvent conduire à des boucles éternelles - doivent être reconnus par les utilitaires / noyau.
Exemple pratique à bash
Commençant par un fichier régulier "F" ...
ln F Fhard
... donne à Fhard la même taille que F, mais ils apparaissent tous les deux dans un rouge foncé SANS les flèches ls -l --color
. En raison de stat
montrer "Links: 2" en relation avec "Inode: xyz". Liaison dure F transforme F en un lien dur. Les deux sont / restent un type de fichier "fichier normal". Mais les deux ont un inode avec un nombre de liens supérieur à 1.
ln -s F Fsoft
... crée un petit fichier "irrégulier" "Fsoft" avec un type de fichier "lien symbolique" - encore plus d'économie d'espace qu'un répertoire vide. A ls -l
ne montre rien de spécial pour "F". Pour Fsoft, la taille indiquée est de 1 octet puisque la chaîne est 'F' et Fsoft -> F
est affichée comme nom. Pas besoin de coloriser un lien virtuel pour en reconnaître un. Parce que dans la forme courte, ls -F
vous obtenez une chaîne enroulée @
:Fsoft@
Avec ls -l
ça ressemble à ça:
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root 1 Sep 16 16:31 Fsoft -> F
Fhard a la taille et le type de F.
Fsoft a le nom de F et la longueur du nom de F comme taille et un type de fichier différent.
Court ls -sF
:
5932 F 5932 Fhard 0 Fsoft@
l'ajout --block-size=1
ne donne pas les mêmes tailles non plus. Fsoft a la taille "un octet, zéro bloc". F et Fhard dévient en parallèle:
6074368 F 6074368 Fhard 0 Fsoft@
Pour voir si Fsoft est suspendu ou non, ls
permet d'utiliser des couleurs.
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
a
, et appelez-leb
"