GNU/Linux >> Linux Esercitazione >  >> Linux

readlink -f e -e descrizione delle opzioni non chiara

Il primo componente qui indica un elemento del percorso.Esempio :

/home/user/.ssh => <component1>/<component2>/<component3>

1- Supponiamo di avere una struttura di directory come questa :

lols
├── lol
├── lol1 -> lol
└── lol2 -> lol1

E anche la directory inesistente qui sarà lols/lol3Quindi puoi confrontare l'output di ciascun comando:

readlink -f lols/lol1 : /lols/lol
readlink -e lols/lol1 : /lols/lol

L'output qui sarà lo stesso perché tutti i componenti del percorso esistono.

readlink -f lols/lol8 : lols/lol8
readlink -e lols/lol8 : <empty outpyt>

L'output qui è diverso perché con -f mostrerà il risultato perché c'è un componente che esiste almeno nel percorso che è lols e con -e l'output sarà vuoto perché tutti i componenti del percorso devono esistere .

E l'ultimo è avere più directory inesistenti :

readlink -f lols/lol8/lol10 : <empty output>
readlink -e lols/lol8/lol10 : <empty output>

Qui l'output sarà vuoto perché come descritto nella pagina della mappa :-f :tutti tranne l'ultimo componente devono esistere => Non rispettato-o :tutti i componenti devono esistere => Non rispettato

2- Perché non usare solo ls -l :

Supponiamo di creare un file denominato file1 e creare un collegamento simbolico a questo file denominato collegamento1 e da collegamento1 creare un altro collegamento simbolico collegamento2 :

touch file1 : file1 
ln -s file1 link1 : link1 -> file1
ln -s link1 link2 : link2 -> link1

Poi con ls -l link2 l'output sarà:link2 -> link1E se usiamo readlink link2 l'output sarà:link1; come ls -lMa se usiamo readlink -f|-e link2 l'output sarà:file1; quindi punterà alla fonte file.

Quindi quando usare readlink invece di ls ?Quando c'è un link simbolico nidificato (Lettura ricorsiva). Quando i file/directory si trovano in posizioni diverse.

Quindi è meglio usare readlink invece di ls per evitare errori.


Ciò è significativo per i collegamenti che seguono un percorso su più di un salto fino al loro obiettivo finale. Ad esempio:

touch test_file

ln -s test_file test_link
ln -s non_existing_target dead_link

ln -s test_link link1
ln -s dead_link link2

In quanto sopra, link1 si sta finalmente collegando a un file, tramite test_link , quindi -f e -e darebbe lo stesso risultato. link2 sta puntando a un link non funzionante e vedi che:

> readlink -e link2
> readlink -f link2
/home/thanasis/temp/non_existing_target

dead_link è l'"ultimo componente" nell'espressione "tutti tranne l'ultimo componente devono esistere". -f si sta risolvendo al target che non esiste, mentre -e non fornisce output.

Nota che man readlink lo consiglia

realpath è il comando preferito da utilizzare per la funzionalità di canonicalizzazione

Per questo esempio, realpath -m , (--missing ) darebbe lo stesso risultato a readlink -f . In generale realpath -e è il modo per verificare se un collegamento può essere risolto in un file di destinazione esistente finale, che restituisce l'errore previsto qui:

> realpath -e link2
realpath: link2: No such file or directory

Mentre ls -l restituisce tutti i risultati e probabilmente ha un output di colore rosso per eventuali link non funzionanti. Anche l'opzione -L esiste, per dereferenziare i collegamenti e mostrare il loro obiettivo, questo è per gli umani da leggere, non usare mai ls per decidere qualsiasi cosa su un collegamento all'interno di uno script.


Linux
  1. Linux – Perché usiamo Su – e non solo Su?

  2. Cosa si intende per collegamento di Stdout e Stdin?

  3. Linux – Le cuffie non funzionano Linux Mint 18?

  4. Perché è Rm -rf e non Rmdir -rf?

  5. tmux:si blocca e non si carica e non risponde a nessun comando di opzione

Perché "cancella" non cancella l'intero schermo?

Come cancellare la cronologia di Bash in Linux e Mac

Colore diverso per comando e output

rsync e collegamenti simbolici

come fare in modo che meno cercapersone risponda alla rotella di scorrimento e non cancellare lo schermo

Perché usiamo su - e non solo su?