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 ?
Readlink est la commande que vous voulez. Vous devriez consulter la page de manuel de cette commande. Parce que si vous voulez suivre une chaîne de liens symboliques jusqu'au fichier réel, alors 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
Si vous voulez montrer 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’
Il n'est pas bon pour l'analyse syntaxique (utilisez la fonction readlink
pour cela), mais il affiche le nom du lien et la destination, sans l'encombrement de la rubrique ls -l
-c
peut s'écrire --format
y %N
signifie "nom de fichier cité avec déréférencement si lien symbolique".
El readlink
est une bonne chose, mais spécifique à GNU et non multiplateforme. J'avais l'habitude d'écrire des scripts multiplateforme pour /bin/sh
donc 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 plateformes. Je pense qu'ils vont fonctionner, mais je ne suis pas sûr à 100% pour ls
format de sortie.
Le résultat de ls
peut également être analysé dans le cadre de bash
sans dépendre d'une commande externe comme awk
, sed
o perl
.
Ce site bash_realpath
permet de déterminer la destination finale d'un lien (linklinkfinal) :
bash_realpath() {
# print the resolved path
# @params
# 1: the path to resolve
# @return
# >&1: the resolved link path
local path="${1}"
while [[ -L ${path} && "$(ls -l "${path}")" =~ -\>\ (.*) ]]
do
path="${BASH_REMATCH[1]}"
done
echo "${path}"
}
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.