Dobbiamo adesso affrontare un errore molto comune, anche fra gli utenti Unix, dovuto al fatto che i collegamenti come li abbiamo visti fino a questo momento (chiamati erroneamente "hard link") sono associati soltanto a file di tipo normale (e abbiamo visto che le cose non stanno così - soprattutto se si considera che anche i collegamenti simbolici sono "collegati"). Ma per fare questo dovremo prima spiegare cosa sono i collegamenti simbolici ("soft link" o, anche più spesso, "symlink").
I collegamenti simbolici sono file di un tipo particolare, il cui unico contenuto è una stringa qualsiasi, che può riferirsi a un nome di file esistente o meno. Quando utilizzate un collegamento simbolico dalla riga di comando o in un programma, di fatto accedete al file al quale esso si riferisce, se esiste. Ad esempio:
$ echo Ciao >ilmiofile $ ln -s ilmiofile ilmiolink $ ls -il total 4 169 -rw-rw-r-- 1 maria maria 6 dic 10 21:30 ilmiofile 416 lrwxrwxrwx 1 maria maria 6 dic 10 21:30 ilmiolink -> ilmiofile $ cat ilmiofile Ciao $ cat ilmiolink Ciao |
Come potete vedere il tipo di file per ilmiolink è 'l', che sta per Link (collegamento) di tipo simbolico. I permessi di accesso per un collegamento simbolico non sono significativi: sono sempre impostati su rwxrwxrwx. Noterete anche che è un file differente rispetto a ilmiofile, poiché il suo numero di inodo è diverso, ma si riferisce a quest'ultimo in maniera simbolica, per cui quando digitate cat ilmiolink in realtà ottenete come risultato la visualizzazione del contenuto di ilmiofile. Per dimostrare che un collegamento simbolico contiene una stringa arbitraria possiamo fare quanto segue:
$ ln -s "Io non esisto" unaltrolink $ ls -il unaltrolink 418 lrwxrwxrwx 1 maria maria 20 dic 10 21:43 unaltrolink -> Io non esisto $ cat unaltrolink cat: unaltrolink: No such file or directory $ |
Ma i collegamenti simbolici esistono perché permettono di superare molte limitazioni dei collegamenti normali ("hard"):
non è possibile creare un collegamento a un inodo che si trova su di un filesystem diverso rispetto a tale inodo, per un semplice motivo: il contatore di link è conservato all'interno dell'inodo stesso, e gli inodi non possono essere condivisi fra filesystem. I collegamenti simbolici, invece, permettono questa operazione;
non è possibile collegare delle directory, poiché abbiamo visto che il contatore di link per una directory ha uno scopo particolare. Potete invece creare un collegamento simbolico a una directory e usarlo come se fosse effettivamente una directory.
I collegamenti simbolici, dunque, si rivelano utili in molte situazioni e, molto spesso, vengono usati per collegare file anche quando potrebbe essere usato un collegamento normale. Un vantaggio dei collegamenti normali, comunque, è dato dal fatto che, se cancellate il file "originale", il file non viene perso, ma rimane accessibile tramite il link.
Se ci avete seguito con attenzione, infine, sapete già quali sono le dimensioni di un collegamento simbolico: si tratta semplicemente delle dimensioni della stringa.
Indietro | Partenza | Avanti |
File "speciali": file in modalità a caratteri e file in modalità a blocchi | Risali | Attributi dei file |