J'essaie de créer un lien symbolique dans mon répertoire personnel qui pointe vers un répertoire de mon disque dur externe.
Cela fonctionne bien quand je le spécifie comme ceci:
cd ~
ln -s /run/media/name/exhdd/Data/ Data
Cependant, cela crée un lien défectueux lorsque j'essaie ceci:
cd /run/media/name/exhdd
ln -s Data/ ~/Data
Cela crée un lien dans lequel je ne peux pas cd
.
Quand j'essaye, bash se plaint:
bash: cd: Data: Too many levels of symbolic links
Le lien symbolique Données de mon domicile est également coloré en rouge lorsqu'il ls
est configuré pour afficher une sortie en couleur.
Pourquoi cela arrive-t-il? Comment puis-je créer un lien de cette manière? (Je veux créer un lien symbolique vers un répertoire de mon répertoire de travail situé dans un autre répertoire.)
Edit: selon cette réponse de StackOverflow, si le deuxième argument (dans mon cas, ce serait ~ / Data) existe déjà et est un répertoire,
ln
créera un lien symbolique vers la cible à l' intérieur de ce répertoire.
Cependant, je rencontre le même problème avec:
ln -s Data/ ~/
cd ~
est généralement le même quecd
.ls -l ~/Data
vous aurait aidé à voir ce qui n'allait pas avec le lien "rouge".cat
, mais j'ai oublié quel était le résultat ... (Je ne suis pas chez moi à ce moment-là.)/run/media/name/exhdd/Data/
qu'ilData
ln -s /run/media/name/exhdd/Data/* Data
Réponses:
Voici ce qui se passe. Si vous faites un lien symbolique avec un chemin relatif, le lien symbolique sera relatif. Les liens symboliques stockent simplement les chemins que vous leur donnez. Ils ne résolvent jamais les chemins en chemins complets. Fonctionnement
crée un lien symbolique nommé
ls2
dans/usr/bin
lals
( à savoir./usr/bin/ls
) par rapport au répertoire que le lien symbolique est en (/usr/bin
). La commande ci-dessus créerait un lien symbolique fonctionnel à partir de n'importe quel répertoire.Si vous avez déplacé le lien symbolique dans un autre répertoire, il cessera de pointer vers le fichier situé dans
/usr/bin/ls
.Vous faites un lien symbolique qui pointe vers
Data
, et le nommerData
. Il se pointe à lui-même. Vous devez créer un lien symbolique avec le chemin absolu du répertoire.la source
J'avais le même problème. Google a donné cette réponse mais la solution la plus simple n’est pas documentée ici:
-T fait le tour
homme ln:
Il suffit d'ajouter ceci ici pour que quiconque ayant la même question trouve ceci :)
la source
ln
Le comportement des chemins relatifs n'est pas intuitif. Pour rétablir la santé mentale, utilisez le-r
drapeau.Explication:
Cela signifie que cela
ln
fera ce que vous attendez. Il tiendra compte du répertoire dans lequel vous vous trouvez, du répertoire dans lequel se trouve la cible et construira un chemin relatif au répertoire dans lequel le lien se trouvera. Le comportement par défaut (sans-r
) consiste à interpréter le premier paramètre (cible) à la lettre , dans Dans ce cas, vous devez construire le chemin vous-même pour qu'il soit valide dans le répertoire du lien.Sinon, utilisez un chemin absolu, comme mentionné par @SmithJohn
ou
la source
Très simplement, vous pouvez créer un lien pour un dossier. Regarde ma commande
ln -s / home / répertoire / targated / var / www / html / nom_lien
la source