Les liens symboliques ont tendance à aimer les chemins complets ou relatifs au lien, sinon ils peuvent souvent rechercher file-1.txt
localement (assez curieusement).
Accédez à proper
et exécutez ls -l
et vous pouvez voir que le lien symbolique recherche actual/file-1.txt
, alors qu'il devrait être ../actual/file-1.txt
.
Vous avez donc deux options :
-
Donnez le chemin complet
ln -s ~/actual/file-1.txt ~/actual/file-2.txt ~/proper
-
Accédez au dossier dans lequel vous souhaitez placer le lien et créez un lien à partir de là
cd proper ln -s ../actual/file-1.txt ../actual/file-2.txt ./
Modifier :Un indice pour économiser la frappe.
Vous pouvez simplement faire ln -s ~/actual/file-{1,2}.txt ~/proper
Les éléments entre accolades sont substitués et placés les uns après les autres, créant la commande
ln -s ~/actual/file-1.txt ~/actual/file-2.txt ~/proper
qui relie les deux fichiers au répertoire cible. Économise quelques frappes majeures à mesure que vous avancez dans le shell.
Le problème est l'utilisation de chemins relatifs. Si vous spécifiez votre création de lien avec le chemin explicite complet, cela fonctionne.
$ ln -s ~/réel/fichier1.txt ~/réel/fichier2.txt ~/proper/
$ chat propre/fichier1.txt
fichier 1
$
Votre exemple crée des liens en proper
qui recherchent un sous-répertoire nommé réel sous le répertoire actuel, plutôt que votre parent prévu pour les deux.
Les liens symboliques peuvent être délicats. Essentiellement, un lien symbolique est un fichier qui contient un nom de fichier/chemin d'accès pour un autre fichier (et qui est marqué pour un traitement spécial). Si le chemin d'accès dans le fichier de lien commence par '/
', alors il est traité comme un chemin d'accès absolu, et les choses sont assez simples. S'il ne commence pas par une barre oblique, il est traité comme un chemin d'accès relatif - relatif au répertoire où se trouve le lien. (Ceci est vrai que le nom contienne ou non des barres obliques.) Ainsi, vous avez créé proper/file–1.txt
sous forme de lien vers "actual/file–1.txt
", et lorsque vous avez essayé d'y accéder, le système a essayé d'accéder à proper/actual/file–1.txt
. Tu aurais dû dire
ln –s ../actual/file–1.txt ../actual/file–2.txt proper
Au fait, vous n'aviez pas besoin du touch
commandes. echo "file 1" > actual/file–1.txt
est suffisant pour créer actual/file–1.txt
.