2011-01-01 11 views
25

Quando si eseguec'è un modo per vedere il contenuto reale di un collegamento simbolico?

cat some-symlink-to-some-real-file 

mostra i contenuti del file vero e proprio, non ciò che è all'interno del collegamento stesso. C'è un modo per vedere cosa c'è in esso?

+1

Da quale linguaggio di programmazione si desidera eseguire questa operazione? –

+4

La chiamata di sistema sottostante è 'readlink (2)'. Come notato in una delle risposte, il comando diretto da usare è 'readlink (1)' su alcuni sistemi (GNU e parenti). Su altri sistemi - HP-UX, Solaris, AIX - l'approccio più vicino è probabilmente 'ls -l', ma sii consapevole dei problemi se il nome del percorso nel collegamento contiene newline o altri caratteri strani. –

risposta

31

Il comando ls -l vi mostrerà che:

$ ls -l foo 
lrwxrwxrwx 1 user group 11 2010-12-31 19:49 foo -> /etc/passwd 

O il readlink command:

$ readlink foo 
/etc/passwd 

Quindi, il collegamento simbolico foo punti al percorso /etc/passwd.

+15

Giusto per rendere questo più chiaro, i "contenuti" del link simbolico non sono altro che il nome che indica anche. – wnoise

+1

@ Ben: meh, la shell è un linguaggio di programmazione nelle mani giuste, quindi la distinzione non è del tutto chiara. – ijw

+1

@ijw: è vero. Tuttavia non dobbiamo appuntare esattamente quella linea per capire che questo non è sul lato del programmatore. Inoltre, questi non sono nemmeno comandi di shell, 'ls' e' readlink' sono entrambe applicazioni separate. –

1

Prova

find . -type l -exec ls -la {} \; 
+0

Questo comando troverà tutti i collegamenti che iniziano nella directory corrente. Essenzialmente ls -l, è incaricato di mostrare il contenuto di ciascuno. –

5

È possibile chiamare la funzione readlink(2), che inserirà il nome collegato in un buffer.

Si noti che il risultato ha una lunghezza (memorizzata nel valore restituito) anziché essere terminata NUL. Quindi se vuoi usarlo come una stringa, aggiungi un NUL tu stesso.

La maggior parte dei linguaggi di script/di livello superiore, come perl o python, fornirà un wrapper readlink che converte nel solito tipo di stringa appropriato per la lingua, in modo tale da non essere infastidito da dettagli come la terminazione NUL.

1

Riguardo alla pagina man http://man7.org/linux/man-pages/man7/symlink.7.html symlink è un file regolare (con flag speciale) con il percorso verso il target nel suo contenuto. Quindi potresti copiare il link simbolico alla partizione FAT e leggerlo lì.

Problemi correlati