2011-01-16

Link in unix/linux - 3 - i link simbolici / symbolic link

Proseguendo l'argomento affrontato nei due post precedenti: Link in unix/linux - 1 e Link in unix/linux - 2 - i link fisici / hard link è arrivato il momento di affrontare i link simbolici.

L'output del comando
ls -l
per un link simbolico riporta una l (lettera L minuscola) nel primo carattere al posto del solito - (segno meno) per i file e d per le directory; il carattere riportato in quella posizione, prima dei 9 caratteri indicanti i permessi, rappresenta il tipo di file e ne esistono alcuni di questi tipi: - come dicevo per i file "normali", d per le directory, l per i link simbolici, p per i "pipe" (in inglese rappresenta un tubo) potrebbe essere argomento di futuri post, c per i device con accesso di tipo "raw" (grezzo, a carattere), b per i device con accesso block (a blocchi) non utilizzati in Linux ma utilizzati in altre piattaforme Unix per accedere in modo posizionale ad alcuni tipi di periferiche, di solito dischi, s per i socket.
Tornando alla l evidenzia un file di tipo link simbolico, tali file hanno di particolare anche la dimensione che non rappresenta la dimensione in byte del contenuto del file al quale punta il collegamento ma in realtà rappresenta la lunghezza del percorso indicato nel link per raggiungere il file destinatario del collegamento. Il percorso può essere un percorso relativo, ovvero indicante il percorso da effettuare dalla directory contenente il link o un percorso assoluto, ovvero indicante il percorso da effettuare dalla directory / root (radice).
Il comando cat eseguito fornendo come parametro un file simbolico presenterà come output il contenuto del file puntato dal link e non il contenuto del link, la maggior parte dei comandi e di funzioni di sistema si comportano in questo modo, riconoscono il tipo di file ed in funzione di questo ricercano il file destinatario del link per trovare la posizione effettiva dei dati sui quali operare.
Un link simbolico può puntare ad un file che può essere a sua volta un altro link simbolico e così via a piacere fino al raggiungimento di un file vero e proprio contenenitore di dati oppure un device, un pipe o altro.
Da evitare il puntamento ricorsivo che potrebbe portare a comportamenti impredicibili e differenti tra i vari comandi, le varie funzioni e nelle varie piattaforme, di solito porta ad una segnalazione di errore o avvertimento, altre volte potrebbe portare anche a loop infiniti.
Un comportamento da conoscere e capire è quello che ha il sistema in caso di puntamento errato ad un file che non esiste; se si crea un link simbolico che punta ad un percorso o file inesistente oppure viene cancellato in seguito il file puntato dal link, ogni accesso ai dati puntati dal link simbolico provocherà un errore di tipo "No such file or directory", questo a volte può sembrare incomprensibile in quanto il percorso fornito al comando è un percorso esistente, il link simbolico esiste, ma va verificato che esista anche il file puntato da link, per questo nei moderni sistemi il comando ls -l riporta con colori evidenti il nome del file e del percorso puntato in modo far risaltare la condizione anomala.
Un link simbolico, a differenza di quello fisico, può puntare ad un file presente in un altro file system (partizione), questo perchè contiene al suo interno il percorso del file e quindi può attraversare anche più file system, per raggiungere i dati il file system contanente il file di destinazione deve essere montato altrimenti si incorre nell'errore precedente "No such file or directory". Un altro caso particolare può essere la situazione in cui al momento della creazione del link nel percorso puntato si trovi un file del file system montato in quel momento ed in seguito, prima dell'utilizzo del link, può essere smontato il file system e nello stesso percorso montarne un altro in cui il file destinatario del link non esiste o, peggio ancora, esista ma con contenuto completamente diverso.
Un link simbolico, a differenza di un link fisico, può puntare ad una directory ed in quel caso il link si comportarà, con la maggior parte dei comandi e funzioni di sistema come se fosse la directory di destinazione.
Molti comandi prevedono opzioni particolari per indicare se l'operazione deve essere effettuata sul link simbolico oppure sul file puntato dal link simbolico in questo caso nelle pagine di manuale si troveranno indicazioni riguardo la possibilità di dereference (dereferenziare) e quindi seguire il link simbolico.
Con questo post termina la descrizione dele caratteristiche e dei comportamenti comuni dei link fisici e simbolici. In seguito sarà dedicato dello spazio per suggerire comodi utilizzi di entrambi i tipi di link.

Segue...

2 commenti:

  1. Dopo aver corretto qualche errore di digitazione del testo, sarebbe utile integrare con qualche esempio pratico, magari uno per opzione

    RispondiElimina
  2. @blindonet
    grazie per i suggerimenti.
    La voglia di pubblicare vince sulla correttezza :-( devo riconoscere che il numero di accessi è scarso e non tanto stimolante, il tuo commento potrebbe spronarmi a curare di più i post.
    Per quanto riguarda gli esempi pratici, se non lo hai ancora fatto, ti consiglio il quarto post:
    http://ant1-antuan.blogspot.com/2011/01/link-in-unixlinux-4-utilizzi.html e se non fosse sufficiente, anzi sicuramente non lo sarà, puoi provare a proporre argomenti specifici.

    RispondiElimina