GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi mon lien symbolique ne fonctionne-t-il pas ?

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 :

  1. Donnez le chemin complet

    ln -s ~/actual/file-1.txt ~/actual/file-2.txt ~/proper
    
  2. 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 .


Linux
  1. Convertir un lien physique en lien symbolique ?

  2. Pourquoi `exit &` ne fonctionne pas ?

  3. Variables d'environnement dans les liens symboliques

  4. lien symbolique :trouver tous les fichiers liés à ce fichier

  5. LD_LIBRARY_PATH ne semble pas fonctionner

erreur ldconfig :n'est pas un lien symbolique

Pourquoi Bash `(())` ne fonctionne-t-il pas dans `[[]]` ?

Pourquoi créer un lien comme celui-ci :ln -nsf ?

Pourquoi hostname --fqdn ne fonctionne-t-il pas sur mon ordinateur Ubuntu ?

pourquoi le pont linux ne fonctionne pas

pourquoi gdb n'aime pas les alias