Disons que je crée un lien symbolique :
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
existe-t-il un moyen de voir quelle est la cible de myothertextfile.txt
utilise la ligne de commande ?
Disons que je crée un lien symbolique :
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
existe-t-il un moyen de voir quelle est la cible de myothertextfile.txt
utilise la ligne de commande ?
Si vous ne pouvez pas utiliser readlink
puis analyse le résultat de ls -l
pourrait être fait comme ceci.
Le résultat normal serait :
ls -l /root/Public/myothertextfile.txt
lrwxrwxrwx 1 root root 30 Jan 1 12:00 /root/Public/myothertextfile.txt -> /root/Public/mytextfile.txt
Nous voulons donc remplacer tout ce qui se trouve avant " -> " et la flèche incluse. Nous pourrions utiliser sed
pour ça :
ls -l /root/Public/myothertextfile.txt | sed 's/^.* -> //'
/root/Public/mytextfile.txt
La question n'est pas assez précise pour donner une réponse simple comme celle de brian-brazil :
readlink -f some_path
déréférencera en effet tous les liens symboliques impliqués dans la construction du chemin vers le objectif final derrière some_path
.
Mais un niveau de liens symboliques en cascade est juste un cas particulier parmi d'autres dans un système, le cas général étant N niveaux de liens symboliques en cascade. Regardez ce qui suit sur mon système :
$ rwhich emacs
/usr/bin/emacs
/etc/alternatives/emacs
/usr/bin/emacs24-x
rwhich
est ma propre implémentation récursive de which
qui imprime tous les liens symboliques intermédiaires en cascade (vers stderr) jusqu'à la cible finale (vers stdout).
Alors si je veux savoir ce qui est :
la cible du lien symbolique /usr/bin/emacs**, la réponse évidente pour moi est /etc/alternatives/emacs
tel que retourné par :
readlink $(which emacs)
readlink /usr/bin/emacs
le site final cible derrière les liens symboliques en cascade /usr/bin/emacs, la réponse sera /usr/bin/emacs24-x
tel que retourné par :
readlink -f $(which emacs)
readlink -f /usr/bin/emacs
rwhich emacs 2>/dev/null
Si vous trouvez la cible de tous les liens dans un dossier et son sous-dossier, utilisez la fonction find . -type l -ls
avec le type de lien comme suit :
me@local.localdomain:~/test$ find . -type l -ls
8601855888 0 lrwxr-xr-x 1 me staff 6 Jan 24 19:53 ./link -> target
Si vous voulez la cible d'un seul, alors ls -l
devrait fonctionner :
me@local.localdomain:~/test$ ls -l
total 0
lrwxr-xr-x 1 me staff 6 Jan 24 19:53 link -> target
-rw-r--r-- 1 me staff 0 Jan 24 19:53 target
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.