Vraag Ontdek het symbolische linkdoel via de opdrachtregel


Stel dat ik een symbolische link heb opgezet:

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

is er een manier om te zien wat het doelwit is myothertextfile.txt gebruikt de opdrachtregel?


105
2017-10-19 18:36


oorsprong




antwoorden:


Gebruik de -f vlag om de geanonimiseerde versie af te drukken. Bijvoorbeeld:

readlink -f /root/Public/myothertextfile.txt

Van 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



Zoals voorgesteld in een andere vraag, wil je misschien gebruiken readlink -f. - Denilson Sá Maia
Om dit te laten werken op Mac OS X, brew install coreutils. Dit installeert basis-GNU-versies van opdrachten voorafgegaan door de letter g, i.e. greadlink -f somefile - Mike D
met -f switch, commando geeft niets terug in mijn geval .. - sotn
Het gebruik van -f gaf me de informatie die ik wilde, d.w.z. het oplossen van meerdere symlinks en het tonen van het einddoel. - isapir


readlink is het commando dat u wilt. Je zou naar de man-pagina voor de opdracht moeten kijken. Want als je een reeks symbolische koppelingen naar het eigenlijke bestand wilt volgen, dan heb je de -e of -f switch nodig:

$ 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



Er is niets mis met het eerste antwoord, maar deze is completer en nuttiger. - Mike S


Dit werkt ook:

ls -l /root/Public/myothertextfile.txt

maar readlink zou de voorkeur hebben voor gebruik in een script in plaats van parseren ls.


4
2017-10-19 19:02





Als u de bron en de bestemming van de koppeling wilt weergeven, probeert u het stat -c%N files*. Bijv.

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

Het is niet goed om te ontleden (gebruiken readlink daarvoor), maar het toont linknaam en bestemming, zonder de rommel van ls -l

-c kan worden geschreven --format en %N betekent "geciteerde bestandsnaam met dereference als symbolische link".


4
2017-09-29 17:44





De readlink is een goede zaak, maar GNU-specifiek en niet-cross-platform. Ik schreef altijd cross-platform-scripts voor /bin/sh, daarom zou ik iets gebruiken als:

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

of:

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

maar deze moeten op verschillende platforms worden getest. Ik denk dat ze zullen werken, maar niet 100% zeker voor ls uitvoerformaat.


2
2018-04-17 21:35





Als je niet kunt gebruiken readlink, en vervolgens het resultaat van ls -l zou zo gedaan kunnen worden.

Het normale resultaat zou zijn:

ls -l /root/Public/myothertextfile.txt
lrwxrwxrwx 1 root root 30 Jan  1 12:00 /root/Public/myothertextfile.txt -> /root/Public/mytextfile.txt

Dus we willen alles vervangen vóór "->" en de pijl inbegrepen. We kunnen gebruiken sed voor deze:

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

1
2017-09-02 08:25





ll of ls -l moet de mapitems vermelden, inclusief uw symbolische link en zijn doel

cd -P /root/Public/myothertextfile.txt (in uw geval) moet verwijzen naar het oorspronkelijke pad


0
2018-05-02 13:48