Comando ln di Linux: come creare collegamenti con Linux

Tramite la riga di comando di Linux è possibile creare collegamenti rapidamente. Il comando ln utilizzato per fare questo è relativamente facile da utilizzare e richiede solo un po’ di codice. Chi desidera creare collegamenti specifici e in maniera efficace dovrebbe però conoscere la differenza tra hard e soft link, ovvero collegamenti fisici e simbolici. Qui vi spieghiamo quali sono le varie tipologie di link e a quali scopi ciascuna di esse si adatta maggiormente. Inoltre, vi mostriamo con degli esempi applicativi quale codice è necessario per creare collegamenti in ambiente Linux.

Cos’è il comando ln di Linux?

Il comando Linux ln (dove ln è l’abbreviazione del termine inglese link) è usato per creare un collegamento a un file o a una directory attraverso 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ù importanti e utilizzati.

Cosa sono gli hard e i soft link?

Per essere in grado di usare il comando ln in modo sensato e specifico con Linux, è necessario conoscere la differenza tra soft e hard link: i soft link sono riferimenti incrociati che rimandano a un file originale tramite un percorso di riferimento. Se il file originale viene cancellato o spostato, l’oggetto di destinazione non esiste più e il rimando non porta a niente. Cancellando solo il soft link, invece, il file originale viene mantenuto e viene rimosso solo il riferimento a esso. I soft link sono anche chiamati link simbolici o (abbreviato) symlink. I soft link possono essere creati non solo con il comando ln nel terminale di Linux, ma anche con funzioni dell’interfaccia grafica, per esempio nel file manager di Linux. Nell’interfaccia grafica di Linux, i soft link sono riconoscibili grazie al simbolo della freccia in aggiunta all’icona del file.

Gli hard link sono collegamenti 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 rispettivo file system. Un hard link è una voce di directory aggiuntiva per un file originale, anche se diversi hard link possono indirizzare allo stesso file. In sostanza, Linux non distingue tecnicamente e operativamente tra il link originale o originario (link primario) e un hard link generato successivamente (link successivo e secondario). Di conseguenza, tutte le voci dell’elenco hanno gli stessi diritti e funzionano in modo indipendente l’una dall’altra. Un hard link può consentire l’accesso a un file in diverse posizioni, operazione spesso utilizzata per i backup.

È possibile spiegare meglio le caratteristiche speciali e la modalità di funzionamento degli hard link facendo un esempio concreto. Un file video che inizialmente è accessibile solo nella directory “I miei video” può anche essere accessibile tramite la directory “I miei video - Backup” dopo avere creato un hard link. Cancellando il file originale in “I miei video” (ovvero cancellando solo il collegamento primario al file video), si può ancora accedere senza problemi al file tramite l’accesso parallelo equivalente (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’archiviazione non occupa il doppio dello spazio di archiviazione. Si tratta semplicemente di opzioni di accesso alternative (tramite il percorso del file) che non rappresentano una seconda copia fisica completa di un file.

Gli hard link in ambiente Linux sono strettamente legati a una speciale gestione interna. Ogni hard link si riferisce a un cosiddetto inode ed è assegnato a un numero di inode distintivo e unico, assegnato anche al file originale. Un file viene definitivamente cancellato nella gestione degli inode, e quindi anche nel sistema, solo quando tutte le voci (cioè tutti i riferimenti a esso) sono stati dichiarate non valide dalle operazioni di cancellazione e dopo l’azzeramento di un contatore di collegamenti interni. Ma se le voci di indirizzo sono molte e ne viene cancellata solo una o se il file originale viene spostato in un’altra directory, non avverrà alcun cambiamento. Le restanti opzioni memorizzate nell’inode per accedere al file originale dell’applicazione rimangono valide.

Fatto

Gli inode sono strutture di dati definite che descrivono in modo univoco un file, contengono informazioni sui metadati (gruppo di appartenenza, proprietario, permessi di accesso, ecc.) e documentano la sua posizione di archiviazione (sotto forma di indirizzo di archiviazione).

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

I soft link permettono agli utenti standard di realizzare la maggior parte dei collegamenti più comuni. È possibile anche collegare file e directory attraverso limiti del file system anche in presenza di dischi rigidi o partizioni diverse. Tuttavia, i soft link non sono così flessibili come gli hard link quando si fanno dei cambiamenti all’oggetto di riferimento (spostamento o cancellazione).

Gli hard link possono normalmente collegare solo file, non directory o cartelle. Poiché gli inode associati agli hard link possono essere gestiti solo all’interno delle partizioni, è possibile collegare a esse solo i link interni. I moderni sistemi Linux però contengono spesso diversi file system situati su dischi rigidi e partizioni distinte. Chiunque lavori specificamente con gli hard link per creare collegamenti in ambiente Linux dovrebbe quindi conoscerne il sistema e avere una certa conoscenza di base (per esempio per quanto riguarda il partizionamento e la formattazione).

Tuttavia, esistono alcuni vantaggi, soprattutto per quanto riguarda i backup: si ottengono accessi alternativi all’originale, che fanno risparmiare spazio e allo stesso tempo aumentano la sicurezza dei dati. Il software HardlinkBackup, per esempio, si basa proprio sui vantaggi di questa tecnica di collegamento.

Poiché gli hard link rappresentano direttamente il file sorgente, non devono essere dereferenziati dai processi di calcolo, a differenza dei soft link. Questo significa, tra le altre cose, che possono essere elaborati più rapidamente e risultano completamente trasparenti per le applicazioni. Gli hard link possono anche essere usati per risolvere problemi specifici. Se, per esempio, un programma richiede urgentemente una libreria che in realtà non è più aggiornata, un hard link può mantenere attiva la funzione prendendo il nome della libreria obsoleta (e nel frattempo cancellata) e reindirizzare a una versione più attuale.

Come viene usato nella pratica il comando ln?

Di seguito, vi presentiamo alcuni semplici esempi di applicazione per la creazione di collegamenti in ambiente Linux. La sintassi del comando è indicata per importanti compiti di routine che si verificano regolarmente. Naturalmente, il comando ln può anche eseguire azioni di collegamento più complesse, anche se questo richiede un po’ di pratica nell’uso della riga di comando, oltre che la formulazione di un codice più complesso.

Creare un hard link nella stessa directory

Per impostazione predefinita, senza opzioni ulteriori, il comando ln serve a creare collegamenti fisici sotto forma di hard link. È necessario 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 necessario, 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 collegamento al file video sul desktop di Linux, è necessario 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 aggiungere 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 collegamento più complessa può essere realizzata con l’opzione “-t” (t = target directory) e ulteriore codice:

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

La sintassi del comando crea collegamenti 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 desiderate avere un migliore controllo sulle azioni di collegamento e visualizzare informazioni aggiuntive, l’opzione “-v” (v = verbose) può esservi di grande aiuto. Con questa viene mostrato un elenco di ogni file collegato, il che è particolarmente utile per azioni di collegamento più estese:

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

I soft link possono essere cancellati con lo speciale comando Linux “rm” (rm = remove). Con il seguente codice è possibile cancellare 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 cancellare tutti i file soft link all’interno di una cartella soft link. Se ci sono ancora delle sottocartelle, anche queste saranno cancellate:

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 necessario usare le specifiche del percorso completo (percorsi assoluti) quando si creano collegamenti in ambiente Linux. La shell di Linux e il comando ln accettano anche specifiche di percorsi relativi e scorciatoie. Per esempio, una tilde (~) rappresenta 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 collegamento tramite il comando ln di Linux, non viene creata automaticamente alcuna struttura di directory. I livelli di directory indirizzati devono quindi esistere già tutti (eventualmente anche le sottocartelle se diversi livelli di directory sono rilevanti), altrimenti il comando ln non verrà eseguito con successo e senza errori.

Creare più soft link simultaneamente in una directory di destinazione

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

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

Nel nostro esempio, l’oggetto di collegamento 1 è di nuovo il file video nella cartella video di Peter. L’oggetto di collegamento 2 è una cartella chiamata “Test”, che è una sottocartella contenuta nella directory video di Peter. Nella directory di destinazione “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 destinazione “Cartella softlink” deve già esistere sul desktop, altrimenti il collegamento non funzionerà.

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 destinazione (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 destinazione può essere riconosciuto da una tilde alla fine del nome (ad esempio softlink_al_file_video~). Se non avete bisogno di un backup e volete sovrascrivere 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 collegamenti in ambiente Linux è l’opzione “--help”, che elenca tutti i parametri e le opzioni disponibili per il comando ln. Aggiungendo “-i” (i = interactive), compare un messaggio di conferma che chiede se la destinazione deve essere rimossa.


Abbiamo una proposta per te:
Web hosting a partire da 1 €/mese!

Dominio gratis
Certificato SSL Wildcard incluso
Assistenza clienti 24/7
A partire da 1 €/mese IVA escl. per un anno,
poi 8 €/ mese IVA escl.