Question Connaître la cible du lien symbolique via la ligne de commande


Dites que je crée un lien symbolique:

ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt

y at-il un moyen de voir ce que la cible de myothertextfile.txt utilise la ligne de commande?


105
2017-10-19 18:36


origine




Réponses:


Utilisez le -f flag pour imprimer la version canonisée. Par exemple:

readlink -f /root/Public/myothertextfile.txt

De man readlink:

-f, --canonicalize
      canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist

142
2017-10-19 18:42



Comme suggéré dans une autre question, vous voudrez peut-être utiliser readlink -f. - Denilson Sá Maia
Pour que cela fonctionne sur Mac OS X, brew install coreutils. Ceci installe les versions de base des commandes GNU avec le préfixe lettre. g, c'est à dire. greadlink -f somefile - Mike D
avec l'option -f, la commande ne renvoie rien dans mon cas .. - sotn
L’utilisation de -f m’a donné les informations voulues, c’est-à-dire la résolution de plusieurs liens symboliques et l’affichage de la cible finale. - isapir


readlink est la commande que vous voulez. Vous devriez regarder la page de manuel pour la commande. Parce que si vous voulez suivre une chaîne de liens symboliques vers le fichier réel, vous avez besoin du commutateur -e ou -f:

$ ln -s foooooo zipzip   # fooooo doesn't actually exist
$ ln -s zipzip zapzap

$ # Follows it, but doesn't let you know the file doesn't actually exist
$ readlink -f zapzap
/home/kbrandt/scrap/foooooo

$ # Follows it, but file not there
$ readlink -e zapzap

$ # Follows it, but just to the next symlink
$ readlink zapzap
zipzip

18
2017-10-19 19:03



Rien de mal avec la première réponse, mais celle-ci est plus complète et utile. - Mike S


Cela fonctionnera également:

ls -l /root/Public/myothertextfile.txt

mais readlink serait préféré pour une utilisation dans un script plutôt que l'analyse ls.


4
2017-10-19 19:02





Si vous souhaitez afficher la source et la destination du lien, essayez stat -c%N files*. Par exemple.

$ stat -c%N /dev/fd/*
‘/dev/fd/0’ -> ‘/dev/pts/4’
‘/dev/fd/1’ -> ‘/dev/pts/4’

Ce n’est pas bon pour l’analyse (utiliser readlink pour cela), mais il montre le nom du lien et la destination, sans le fouillis de ls -l

-c peut être écrit --format et %N signifie "nom de fichier cité avec déréférence si lien symbolique".


4
2017-09-29 17:44





le readlink C'est une bonne chose, mais spécifique à GNU et non multi-plateforme. J'avais l'habitude d'écrire des scripts multi-plateformes pour /bin/shPar conséquent, j'utiliserais quelque chose comme:

 ls -l /root/Public/myothertextfile.txt | awk '{print $NF}'

ou:

 ls -l /root/Public/myothertextfile.txt | awk -F"-> " '{print $2}'

mais ceux-ci doivent être testés sur différentes plates-formes. Je pense qu'ils vont travailler, mais je ne suis pas sûr à 100% ls format de sortie.


2
2018-04-17 21:35





Si vous ne pouvez pas utiliser readlink, puis en analysant le résultat de ls -l pourrait être fait comme ça.

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 tout remplacer avant "->" et la flèche incluse. Nous pourrions utiliser sed pour ça:

ls -l /root/Public/myothertextfile.txt | sed 's/^.* -> //'
/root/Public/mytextfile.txt

1
2017-09-02 08:25





ll ou ls -l devrait lister les éléments du répertoire, y compris votre lien symbolique et sa cible

cd -P /root/Public/myothertextfile.txt (dans votre cas) devrait pointer sur le chemin d'origine


0
2018-05-02 13:48