Tramite la riga di comando di Linux è possibile creare col­le­ga­men­ti ra­pi­da­men­te. Il comando ln uti­liz­za­to per fare questo è re­la­ti­va­men­te facile da uti­liz­za­re e richiede solo un po’ di codice. Chi desidera creare col­le­ga­men­ti specifici e in maniera efficace dovrebbe però conoscere la dif­fe­ren­za tra hard e soft link, ovvero col­le­ga­men­ti fisici e simbolici. Qui vi spie­ghia­mo quali sono le varie tipologie di link e a quali scopi ciascuna di esse si adatta mag­gior­men­te. Inoltre, vi mostriamo con degli esempi ap­pli­ca­ti­vi quale codice è ne­ces­sa­rio per creare col­le­ga­men­ti in ambiente Linux.

Cos’è il comando ln di Linux?

Il comando Linux ln (dove ln è l’ab­bre­via­zio­ne del termine inglese link) è usato per creare un col­le­ga­men­to a un file o a una directory at­tra­ver­so la riga di comando di Linux (chiamata anche shell), che viene aperta e gestita tramite una finestra del terminale. Il comando ln è uno dei comandi di Linux più im­por­tan­ti e uti­liz­za­ti.

Cosa sono gli hard e i soft link?

Per essere in grado di usare il comando ln in modo sensato e specifico con Linux, è ne­ces­sa­rio conoscere la dif­fe­ren­za tra soft e hard link: i soft link sono ri­fe­ri­men­ti in­cro­cia­ti che rimandano a un file originale tramite un percorso di ri­fe­ri­men­to. Se il file originale viene can­cel­la­to o spostato, l’oggetto di de­sti­na­zio­ne non esiste più e il rimando non porta a niente. Can­cel­lan­do solo il soft link, invece, il file originale viene mantenuto e viene rimosso solo il ri­fe­ri­men­to a esso. I soft link sono anche chiamati link simbolici o (ab­bre­via­to) symlink. I soft link possono essere creati non solo con il comando ln nel terminale di Linux, ma anche con funzioni dell’in­ter­fac­cia grafica, per esempio nel file manager di Linux. Nell’in­ter­fac­cia grafica di Linux, i soft link sono ri­co­no­sci­bi­li grazie al simbolo della freccia in aggiunta all’icona del file.

Gli hard link sono col­le­ga­men­ti fisici che possono essere creati solo tramite la riga di comando. Sono integrati in maniera più estesa dei soft link nella gestione della memoria di un sistema operativo e nel ri­spet­ti­vo file system. Un hard link è una voce di directory ag­giun­ti­va per un file originale, anche se diversi hard link possono in­di­riz­za­re allo stesso file. In sostanza, Linux non distingue tec­ni­ca­men­te e ope­ra­ti­va­men­te tra il link originale o ori­gi­na­rio (link primario) e un hard link generato suc­ces­si­va­men­te (link suc­ces­si­vo e se­con­da­rio). Di con­se­guen­za, tutte le voci dell’elenco hanno gli stessi diritti e fun­zio­na­no in modo in­di­pen­den­te l’una dall’altra. Un hard link può con­sen­ti­re l’accesso a un file in diverse posizioni, ope­ra­zio­ne spesso uti­liz­za­ta per i backup.

È possibile spiegare meglio le ca­rat­te­ri­sti­che speciali e la modalità di fun­zio­na­men­to degli hard link facendo un esempio concreto. Un file video che ini­zial­men­te è ac­ces­si­bi­le solo nella directory “I miei video” può anche essere ac­ces­si­bi­le tramite la directory “I miei video - Backup” dopo avere creato un hard link. Can­cel­lan­do il file originale in “I miei video” (ovvero can­cel­lan­do solo il col­le­ga­men­to primario al file video), si può ancora accedere senza problemi al file tramite l’accesso parallelo equi­va­len­te (percorso hard link al file nella directory “I miei video - Backup”). Gli hard link hanno il vantaggio che una voce in più nella gestione dell’ar­chi­via­zio­ne non occupa il doppio dello spazio di ar­chi­via­zio­ne. Si tratta sem­pli­ce­men­te di opzioni di accesso al­ter­na­ti­ve (tramite il percorso del file) che non rap­pre­sen­ta­no una seconda copia fisica completa di un file.

Gli hard link in ambiente Linux sono stret­ta­men­te legati a una speciale gestione interna. Ogni hard link si riferisce a un co­sid­det­to inode ed è assegnato a un numero di inode di­stin­ti­vo e unico, assegnato anche al file originale. Un file viene de­fi­ni­ti­va­men­te can­cel­la­to nella gestione degli inode, e quindi anche nel sistema, solo quando tutte le voci (cioè tutti i ri­fe­ri­men­ti a esso) sono stati di­chia­ra­te non valide dalle ope­ra­zio­ni di can­cel­la­zio­ne e dopo l’az­ze­ra­men­to di un contatore di col­le­ga­men­ti interni. Ma se le voci di indirizzo sono molte e ne viene can­cel­la­ta solo una o se il file originale viene spostato in un’altra directory, non avverrà alcun cam­bia­men­to. Le restanti opzioni me­mo­riz­za­te nell’inode per accedere al file originale dell’ap­pli­ca­zio­ne rimangono valide.

Fatto

Gli inode sono strutture di dati definite che de­scri­vo­no in modo univoco un file, con­ten­go­no in­for­ma­zio­ni sui metadati (gruppo di ap­par­te­nen­za, pro­prie­ta­rio, permessi di accesso, ecc.) e do­cu­men­ta­no la sua posizione di ar­chi­via­zio­ne (sotto forma di indirizzo di ar­chi­via­zio­ne).

Quali sono gli utilizzi degli hard link e dei soft link?

I soft link per­met­to­no agli utenti standard di rea­liz­za­re la maggior parte dei col­le­ga­men­ti più comuni. È possibile anche collegare file e directory at­tra­ver­so limiti del file system anche in presenza di dischi rigidi o par­ti­zio­ni diverse. Tuttavia, i soft link non sono così fles­si­bi­li come gli hard link quando si fanno dei cam­bia­men­ti all’oggetto di ri­fe­ri­men­to (spo­sta­men­to o can­cel­la­zio­ne).

Gli hard link possono nor­mal­men­te collegare solo file, non directory o cartelle. Poiché gli inode associati agli hard link possono essere gestiti solo all’interno delle par­ti­zio­ni, è possibile collegare a esse solo i link interni. I moderni sistemi Linux però con­ten­go­no spesso diversi file system situati su dischi rigidi e par­ti­zio­ni distinte. Chiunque lavori spe­ci­fi­ca­men­te con gli hard link per creare col­le­ga­men­ti in ambiente Linux dovrebbe quindi co­no­scer­ne il sistema e avere una certa co­no­scen­za di base (per esempio per quanto riguarda il par­ti­zio­na­men­to e la for­mat­ta­zio­ne).

Tuttavia, esistono alcuni vantaggi, so­prat­tut­to per quanto riguarda i backup: si ottengono accessi al­ter­na­ti­vi all’originale, che fanno ri­spar­mia­re spazio e allo stesso tempo aumentano la sicurezza dei dati. Il software Hard­lin­k­Bac­kup, per esempio, si basa proprio sui vantaggi di questa tecnica di col­le­ga­men­to.

Poiché gli hard link rap­pre­sen­ta­no di­ret­ta­men­te il file sorgente, non devono essere de­re­fe­ren­zia­ti dai processi di calcolo, a dif­fe­ren­za dei soft link. Questo significa, tra le altre cose, che possono essere elaborati più ra­pi­da­men­te e risultano com­ple­ta­men­te tra­spa­ren­ti per le ap­pli­ca­zio­ni. Gli hard link possono anche essere usati per risolvere problemi specifici. Se, per esempio, un programma richiede ur­gen­te­men­te una libreria che in realtà non è più ag­gior­na­ta, un hard link può mantenere attiva la funzione prendendo il nome della libreria obsoleta (e nel frattempo can­cel­la­ta) e rein­di­riz­za­re a una versione più attuale.

Come viene usato nella pratica il comando ln?

Di seguito, vi pre­sen­tia­mo alcuni semplici esempi di ap­pli­ca­zio­ne per la creazione di col­le­ga­men­ti in ambiente Linux. La sintassi del comando è indicata per im­por­tan­ti compiti di routine che si ve­ri­fi­ca­no re­go­lar­men­te. Na­tu­ral­men­te, il comando ln può anche eseguire azioni di col­le­ga­men­to più complesse, anche se questo richiede un po’ di pratica nell’uso della riga di comando, oltre che la for­mu­la­zio­ne di un codice più complesso.

Creare un hard link nella stessa directory

Per im­po­sta­zio­ne pre­de­fi­ni­ta, senza opzioni ulteriori, il comando ln serve a creare col­le­ga­men­ti fisici sotto forma di hard link. È ne­ces­sa­rio attenersi a questo formato di comando:

ln percorso del file di destinazione riferimento

Il codice seguente crea un hard link a un file video (video.mp4) nel profilo utente Linux corrente “Peter” (/home/peter/). Il file sorgente e l’hard link creato si trovano nella stessa directory per i video. L’hard link può anche essere spostato in seguito senza problemi, se ne­ces­sa­rio, senza che perda la sua validità.

ln /home/peter/videos/video.mp4 hardlink_al_file_video

Creare un hard link in un’altra directory

Se si vuole creare un col­le­ga­men­to al file video sul desktop di Linux, è ne­ces­sa­rio formulare questo comando:

ln /home/peter/videos/video.mp4 /home/peter/Desktop/hardlink_al_file_video

Creare un soft link per i file

Se volete creare un soft link con il comando ln, dovete ag­giun­ge­re l’opzione “-s” (s = symbolic) al comando. Il formato del comando per un soft link è:

ln -s percorso del file di destinazione riferimento

In questo esempio, il soft link viene creato nella stessa cartella:

ln -s /home/peter/video.mp4 softlink_al_file_video

Creare un soft link in un’altra directory

Potete anche creare dei soft link in altre directory, per esempio sul desktop:

ln -s /home/peter/videos/video.mp4 /home/peter/Desktop/softlink_al_file_video

Un’azione di col­le­ga­men­to più complessa può essere rea­liz­za­ta con l’opzione “-t” (t = target directory) e ulteriore codice:

ls Fattura* | xargs ln -s -t /home/peter/Desktop/

La sintassi del comando crea col­le­ga­men­ti a tutti i file Fattura* situati nella directory di origine e li colloca nella directory del desktop. L’asterisco (*) assicura che siano inclusi tutti i file il cui nome inizia con la parola “Fattura” (per esempio Fattura_di_gennaio, Fattura_di_febbraio, ecc.).

Se de­si­de­ra­te avere un migliore controllo sulle azioni di col­le­ga­men­to e vi­sua­liz­za­re in­for­ma­zio­ni ag­giun­ti­ve, l’opzione “-v” (v = verbose) può esservi di grande aiuto. Con questa viene mostrato un elenco di ogni file collegato, il che è par­ti­co­lar­men­te utile per azioni di col­le­ga­men­to più estese:

ln -s -v /home/peter/videos/movie.mp4 /home/peter/Desktop/softlink_al_file_video

I soft link possono essere can­cel­la­ti con lo speciale comando Linux “rm” (rm = remove). Con il seguente codice è possibile can­cel­la­re un soft link al file video nella directory di lavoro corrente:

rm softlink_al_file_video

Per eliminare più file video nella directory di lavoro corrente in un solo passaggio, questi devono essere elencati uno dopo l’altro e separati da uno spazio:

rm softlink_Video1 softlink_Video2 softlink_Video3 softlink_Video4

L’ opzione “-r” (r = recursive) permette di can­cel­la­re tutti i file soft link all’interno di una cartella soft link. Se ci sono ancora delle sot­to­car­tel­le, anche queste saranno can­cel­la­te:

rm -r ~/Desktop/Cartella-Softlink/*

Creare un soft link per le directory

Il codice seguente non collega un file, bensì una directory. Con la seguente sintassi di comando è possibile collocare sul desktop un soft link per la cartella video:

ln -s /home/peter/videos/ /home/peter/Desktop/softlink_per_cartella-video

Non è sempre ne­ces­sa­rio usare le spe­ci­fi­che del percorso completo (percorsi assoluti) quando si creano col­le­ga­men­ti in ambiente Linux. La shell di Linux e il comando ln accettano anche spe­ci­fi­che di percorsi relativi e scor­cia­to­ie. Per esempio, una tilde (~) rap­pre­sen­ta il percorso assoluto della directory home dell’utente corrente (nel nostro esempio: /home/peter/). Il codice di un soft link che conduce alla directory dei video sul desktop (ovvero: /home/peter/videos/) si presenta così:

ln -s ~/videos ~/Desktop/softlink_per_cartella-video
N.B.

Quando si crea un col­le­ga­men­to tramite il comando ln di Linux, non viene creata au­to­ma­ti­ca­men­te alcuna struttura di directory. I livelli di directory in­di­riz­za­ti devono quindi esistere già tutti (even­tual­men­te anche le sot­to­car­tel­le se diversi livelli di directory sono rilevanti), al­tri­men­ti il comando ln non verrà eseguito con successo e senza errori.

Creare più soft link si­mul­ta­nea­men­te in una directory di de­sti­na­zio­ne

È anche possibile collegare una directory e un file allo stesso tempo. In questo caso, la sintassi del comando deve essere strut­tu­ra­ta secondo il seguente modello:

ln <Opzione> <Oggettodicollegamento1> < Oggettodicollegamento2> < Directory di destinazione con soft link per collegare gli oggetti>

Nel nostro esempio, l’oggetto di col­le­ga­men­to 1 è di nuovo il file video nella cartella video di Peter. L’oggetto di col­le­ga­men­to 2 è una cartella chiamata “Test”, che è una sot­to­car­tel­la contenuta nella directory video di Peter. Nella directory di de­sti­na­zio­ne “Cartella softlink”, devono essere generati i soft link al file video e alla directory Test:

ln -s ~/videos/video.mp4 ~/videos/test/ ~/Desktop/Cartella-softlink

La directory di de­sti­na­zio­ne “Cartella softlink” deve già esistere sul desktop, al­tri­men­ti il col­le­ga­men­to non fun­zio­ne­rà.

Creazione di soft link con backup

Se volete che il comando ln crei una copia di backup dei file che già esistono nella directory di de­sti­na­zio­ne (in questo esempio, un vecchio soft link al file video con lo stesso nome), dovrete usare l’opzione della riga di comando “-b” (b = backup):

ln -s -b /home/peter/videos/movie.mp4 /home/peter/Desktop/softlink_al_file_video

Il file di backup creato nella directory di de­sti­na­zio­ne può essere ri­co­no­sciu­to da una tilde alla fine del nome (ad esempio softlink_al_file_video~). Se non avete bisogno di un backup e volete so­vra­scri­ve­re un vecchio file soft link, usate l’opzione “-f” (f = force):

ln -s -f /home/peter/videos/movie.mp4 /home/peter/Desktop/softlink_al_file_video

Un ausilio utile quando si creano col­le­ga­men­ti in ambiente Linux è l’opzione “--help”, che elenca tutti i parametri e le opzioni di­spo­ni­bi­li per il comando ln. Ag­giun­gen­do “-i” (i = in­te­rac­ti­ve), compare un messaggio di conferma che chiede se la de­sti­na­zio­ne deve essere rimossa.

Vai al menu prin­ci­pa­le