J'essaie de mieux comprendre les liens symboliques ... et je n'ai pas beaucoup de chance. Voici ma sortie shell réelle avec le nom d'utilisateur / hôte modifié:
username@host:~$ mkdir actual
username@host:~$ mkdir proper
username@host:~$ touch actual/file-1.txt
username@host:~$ echo "file 1" > actual/file-1.txt
username@host:~$ touch actual/file-2.txt
username@host:~$ echo "file 2" > actual/file-2.txt
username@host:~$ ln -s actual/file-1.txt actual/file-2.txt proper
username@host:~$ # Now, try to use the files through their links
username@host:~$ cat proper/file-1.txt
cat: proper/file-1.txt: No such file or directory
username@host:~$ cat proper/file-2.txt
cat: proper/file-2.txt: No such file or directory
username@host:~$ # Check that actual files do in fact exist
username@host:~$ cat actual/file-1.txt
file 1
username@host:~$ cat actual/file-2.txt
file 2
username@host:~$ # Remove the links and go home :(
username@host:~$ rm proper/file-1.txt
username@host:~$ rm proper/file-2.txt
Je pensais qu'un lien symbolique était censé fonctionner de manière transparente, dans le sens où vous pourriez opérer sur le fichier vers lequel il pointe comme si vous accédiez directement au fichier (sauf bien sûr dans le cas rm
où bien sûr le lien est simplement supprimé ).
linux
ubuntu
bash
symbolic-link
orokusaki
la source
la source
df -T
) - le résultat ci-dessus vous est-il également étrange?Réponses:
Les liens symboliques ont tendance à aimer les chemins complets ou par rapport au lien, sinon ils peuvent souvent être recherchés
file-1.txt
localement (assez curieusement).Naviguez
proper
et exécutezls -l
et vous pouvez voir que le lien symbolique rechercheactual/file-1.txt
, quand il devrait l'être../actual/file-1.txt
.Vous avez donc deux options:
Donnez le chemin complet
Accédez au dossier dans lequel vous souhaitez que le lien se trouve et créez un lien à partir de là
Modifier : une astuce pour enregistrer la saisie.
Tu pourrais juste faire
ln -s ~/actual/file-{1,2}.txt ~/proper
Les éléments entre les accolades sont remplacés et placés les uns après les autres, créant la commande
la source
rm -rf *
de dossier avec un lien symbolique - vous pouvez effacer le dossier auquel il est lié. Faites juste rm symlinkname. Juste quelques petites choses surLe problème est l'utilisation de chemins relatifs. Si vous spécifiez votre création de lien avec le chemin explicite complet, cela fonctionne.
Votre exemple crée des liens
proper
qui recherchent un sous-répertoire nommé actual sous le répertoire actuel, plutôt que le parent prévu des deux.la source
Les liens symboliques peuvent être délicats. En substance, 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 liens commence par '
/
', il est alors 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 relatif - par rapport au répertoire où se trouve le lien. (Cela est vrai que le nom contienne ou non des barres obliques.) Ainsi, vous avez crééproper/file–1.txt
un lien vers «actual/file–1.txt
», et lorsque vous avez essayé d'y accéder, le système a tenté d'accéderproper/actual/file–1.txt
. Tu aurais dû direAu fait, vous n'aviez pas besoin des
touch
commandes.echo "file 1" > actual/file–1.txt
suffit de créeractual/file–1.txt
.la source
Un problème connexe, et il peut être évident pour beaucoup, mais m'a laissé perplexe pendant quelques minutes: si vous créez un lien symbolique dans un répertoire qui est lui-même lié, ou s'il y a un lien symbolique dans le chemin du répertoire de travail actuel, vous pourriez rencontrer des problèmes avec les liens symboliques qui ne fonctionnent pas.
Utilisez
cd ..
et àls -l
plusieurs reprises pour voir si vos répertoires parents sont eux-mêmes liés par des liens symboliques.Si vous devez créer un lien symbolique
cd
vers le répertoire cible d'origine et y créer de nouveaux liens symboliques, les chemins relatifs sont donc précis.Ou pour le dire autrement: le chemin relatif est de l'origine à la cible. Si l'Origine est par la suite liée par un lien symbolique, c'est OK. Mais vous pourriez rencontrer des problèmes lors de la configuration d'un nouveau nom de lien d'origine dans un répertoire qui est lui-même en quelque sorte lié par un lien symbolique.
la source
cd ..
et àls -l
plusieurs reprises», vous pouvez utilisernamei -mox $PWD
. Un autre moyen utile de savoir s'il y a des liens symboliques le long du chemin est d'utiliserpwd -P
, qui vous donne un chemin vers le répertoire courant qui ne contient aucun lien symbolique (donc sipwd
etpwd -P
donnez une sortie différente, vous savez qu'il y a un lien symbolique quelque part le long du chemin ).Lorsque vous essayez de créer un lien vers un fichier qui n'existe pas (ou si vous avez indiqué le chemin de manière incorrecte), ln -s ne génère pas d'erreur. Il crée un lien mais lorsque vous essayez «chat» sur ce lien, il indique qu'aucun fichier n'a été trouvé. Même lorsque vous pouvez le voir en utilisant ls. Dans de tels cas, vérifiez toujours votre chemin de fichier.
Parce que le fichier etc / ufw / ufw.conf n'existe pas. Le chemin correct est /etc/ufw/ufw.conf
la source
ln -s
"parfois" ne vérifie pas l'existence de la cible est tout simplement fausse.