Come vedere il percorso completo del collegamento simbolico


128

Quando uso ls -la symlinkNameostat symlinkName non viene visualizzato tutto il percorso (ad es. ../../../one/two/file.txt)

Qual è il comando linux che rivela il percorso completo?


4
Bisogna fare attenzione qui: quando ls o stat non visualizzano alcun percorso assoluto - il collegamento non ha percorso assoluto! Questo è esp. importante quando il dispositivo è montato, ad esempio in un contesto diverso (ad esempio, se hai qualcosa su un cd o una chiavetta USB o provi a recuperare un disco rigido rotto). Tutte le soluzioni menzionate (realpath, readlink, ....) mostrano solo il percorso assoluto nel contesto montato.
flolo

Risposte:


225

realpathnon è disponibile su tutte le versioni di Linux, ma readlinkdovrebbe esserlo.

readlink -f symlinkName

Quanto sopra dovrebbe fare il trucco.

In alternativa, se non hai installato nessuno dei precedenti, puoi fare quanto segue se hai installato python 2.6 (o successivo)

python -c 'import os.path; print(os.path.realpath("symlinkName"))'

16
Se usi OSX, ometti il -fflag e poi funziona. cioèreadlink symlinkName
Josh Davenport,

6
su OSX l'omissione del flag -f fornisce solo un percorso relativo
timoxley

2
Questa domanda riguardava Linux, voi tutti.
Ian Stapleton Cordasco

27

realpath <path to the symlink file> dovrebbe fare il trucco.


man realpathmostra in fondo che fa parte di "GNU coreutils", che sono abbastanza sicuro che sia sempre disponibile su Ubuntu, quindi anche se @IanStapletonCordasco dice " realpathnon è disponibile su tutte le versioni di Linux", dovrebbe almeno essere disponibile su tutti Ubuntu e versioni derivate di Ubuntu credo.
Gabriel Staples il

10

sapori unix -> ll symLinkName

OSX -> readlink symLinkName

La differenza è che il primo modo visualizzerebbe il percorso del collegamento simbolico in modo lampeggiante e il secondo modo lo farebbe semplicemente eco sulla console.


La domanda chiedeva specificamente il percorso completo / assoluto, non il percorso relativo (../../file.txt). Entrambe queste risposte daranno il percorso relativo.
wisbucky

3

Un altro modo per vedere le informazioni è il statcomando che mostrerà più informazioni. Comando stat ~/.sshsul display della mia macchina

File: ‘/home/sumon/.ssh’ -> ‘/home/sumon/ssh-keys/.ssh.personal’
  Size: 34          Blocks: 0          IO Block: 4096   symbolic link
Device: 801h/2049d  Inode: 25297409    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/   sumon)   Gid: ( 1000/   sumon)
Access: 2017-09-26 16:41:18.985423932 +0600
Modify: 2017-09-25 15:48:07.880104043 +0600
Change: 2017-09-25 15:48:07.880104043 +0600
 Birth: -

Spero che questo possa aiutare qualcuno.


1

È possibile utilizzare awkcon una systemchiamata readlinkper ottenere l'equivalente di un lsoutput con percorsi di collegamento simbolico completi. Per esempio:

ls | awk '{printf("%s ->", $1); system("readlink -f " $1)}'

Verrà visualizzato ad es

thin_repair ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_restore ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_rmap ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_trim ->/home/user/workspace/boot/usr/bin/pdata_tools
touch ->/home/user/workspace/boot/usr/bin/busybox
true ->/home/user/workspace/boot/usr/bin/busybox

Posso farlo senza readlink; basta usare ls -l. Anche questo non funziona affatto, prova a farlo su tutto nella directory (non-link) e se il tuo ls è configurato per usare i colori awk si rompe completamente. basta usarefind . -maxdepth 1 -type l -ls | awk '{print $11 "\t" $12 "\t" $13}'
Hashbrown
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.