fb-pixel

Creare link simbolici e hard con il comando ln su Linux

Pubblicato in:

by:

Hai sentito parlare di soft e hard link su Linux, ma non ti è chiara la differenza? Leggendo questo articolo imparerai a usare il comando ln per creare soft e hard link e ti mostrerò che differenza c’è tra questi due tipi di link e come fare a indentificarli e a rimuoverli.

Iniziamo!

Sintassi del comando ln su Linux

Il comando ln (link) su Linux ci permette di creare dei link collegati ai file.

Su Linux esistono due tipologie di link:

  • hard link
  • soft link (anche detti symlink o link simbolici).

Più avanti in questa guida vedremo che differenze ci sono tra questi due tipi di link.

Per il momento ti basti sapere che con il comando ln puoi creare entrambi: link soft e hard.

La sintassi di base del comando ln è la seguente:

ln [opzioni] file nome-link

Bisogna quindi indicare prima il file a cui il link si riferirà e poi il nome da dare al link.

Nel corso di questo articolo vedremo diversi esempi che ti aiuteranno a capire meglio come funziona il comando.

Nota: per padroneggiare l’utilizzo del comando ln, ti consigliamo di avere prima una base sui comandi Linux principali.

Ogni elemento in Linux viene considerato un file (sì, anche le directory stesse). Ci sono però anche i link che sono una forma particolare di file.

I link, non sono veri file, ma dei collegamenti che puntano al percorso o alla posizione su disco di un file vero e proprio.

Possiamo distinguere due tipi di link: soft e hard.

I soft link sono collegamenti che puntano al percorso di un file. Si tratta di link collegati al file originale: se eliminiamo il file di riferimento, i soft link ad esso collegati non funzioneranno più.

Gli hard link, invece, sono collegati alla posizione fisica dei file (inode). Questo significa che se eliminiamo il file originale, gli hard link continuano a funzionare.

Per conoscenza: in Linux per ogni file e cartella del filesystem viene allocato un inode (con associato un numero univoco). Nell’inode non ci sono i dati del file, ma dei metadati con informazioni tra cui la dimensione del file, il numero di hard link associati e un puntatore che rimanda allo spazio su disco in cui ci sono i dati, vale a dire il vero e proprio contenuto dei file.

Inode Associato File Terminale

Per via delle loro differenze, hard link e soft link si comportano diversamente, come puoi vedere da questa tabella di confronto.

Soft linkHard link
Sono collegati al percorso di un fileSono collegati alla posizione fisica del file sull’hard disk
Funzionano sia in locale che con partizioni diverse e con volumi esterni (ad esempio un altro hard disk)Funzionano solo localmente perché sono legati alla posizione fisica del volume locale
Se il file viene eliminato (o spostato), smettono di funzionareFunzionano anche se il file viene modificato, spostato o eliminato
Si usano per file e cartelleSi usano solo per i file

Casi d’uso del comando ln

Passiamo all’uso pratico del comando ln e andiamo a vedere come si creano i link simbolici e gli hard link e come fare a riconoscere i due tipi di link.

Iniziamo dai link simbolici e vediamo come fare a crearne uno per un file.

Per creare un link simbolico, ci basta usare il comando ln con l’opzione -s.

Vediamo un esempio in cui vogliamo creare il link simbolico nella stessa cartella del file di origine.

Il comando si usa in questo modo:

ln -s file-orgine nome-link

Nel mio caso, voglio creare un link simbolico del file “post.txt” chiamandolo “linkpost.txt”, uso quindi il comando:

ln -s post.txt linkpost.txt

Nell’esempio, grazie al comando ls visualizzo il contenuto della cartella corrente per assicurarmi che il link sia stato creato. Come puoi vedere nel terminale i link simbolici sono caratterizzati da un colore diverso rispetto ai file. (I colori cambiano in base al terminale e alle impostazioni che stai usando).

Creare Link Simbolico File Con Comando Ln

Se vogliamo verificare qual è il file a cui punta un link simbolico, possiamo usare diversi comandi che ci permettono di avere informazioni sul file.

Per esempio se usiamo il comando ls con l’opzione -l possiamo avere informazioni dettagliate su file (e cartelle).

Il comando si usa così:

ls -l nome-link

Nel mio esempio, ho il link simbolico “linkpost.txt” e voglio sapere a quale file è associato, allora uso il comando per avere informazioni su questo link:

ls -l linkpost.txt

L’output che ricevo è questo:

lrwxrwxrwx 1 vbox vbox 8 mar 12 11:08 linkpost.txt -> post.txt
Ottenere Informazioni Su Link Simbolico

Questo output ci dà queste informazioni:

  • l – la prima lettera che precede i permessi di lettura e scrittura, indica che si tratta di un link simbolico (se fosse stato un file avremmo visto un trattino “-“);
  • linkpost.txt -> post.txt – questo ci indica che “linkpost.txt” è il link simbolico associato al file “post.txt”. Nota che se il percorso è diverso (cioè link simbolico e file non si trovano nella stessa cartella) verrà indicato anche il percorso.

Possiamo ottenere informazioni aggiuntive, ad esempio sul numero univoco dell’inode usando il comando stat.

stat nome-link

Nel mio esempio, ho il seguente output:

File: linkpost.txt -> post.txt Dim.: 8 Blocchi: 0 Blocco di IO: 4096 collegamento simbolico Dispositivo: 8,1 Inode: 524926 Collegamenti: 1 Accesso: (0777/lrwxrwxrwx) Uid: ( 1000/ vbox) Gid: ( 1000/ vbox) Accesso : 2025-03-12 11:08:46.137443392 +0100 Modifica : 2025-03-12 11:08:45.419276719 +0100 Cambio : 2025-03-12 11:08:45.419276719 +0100 Creazione: 2025-03-12 11:08:45.419276719 +0100

Come interpretare l’output:

  • In “File” ci viene indicato il nome del link simbolico e il file di riferimento. Nell’esempio: File: linkpost.txt -> post.txt
  • Ci viene indicato che si tratta di un collegamento simbolico.
  • In “Inode” vediamo il numero univoco dell’inode.

Nel mio esempio ho usato il comando stat anche con il file originale:

Ottenere Informazioni Su Link Simbolico E File Collegato

Come si vede dall’output, nel secondo caso viene indicato che si tratta di un file regolare vuoto e non di un collegamento simbolico. Inoltre, link simbolico e file sono associati a due inode differenti. (Come vedremo dopo, nel caso di un hard link, invece, l’inode è uno soltanto).

Suggerimento: il comando stat ci dà anche informazioni sul timestamp dei file, se vuoi saperne di più leggi la nostra guida al comando touch per sapere come fare ad aggiornare la data dei file.

Possiamo usare i link simbolici per creare un collegamento a una cartella. Per farlo si può usare il percorso relativo o assoluto in base ai casi.

Nel mio esempio voglio creare nella cartella home dell’utente un link simbolico chiamato “articoli” che punti verso la cartella “~/Documenti/SupportHost/articoli”.

Il comando si usa così:

ln -s /percorso-cartella-originale /percorso-link-simbolico

Nel mio esempio, uso il comando:

ln -s ~/Documenti/SupportHost/articoli ~/articoli

Nell’esempio, dopo aver creato il link simbolico, ho usato il comando ls -l per assicurarmi che il link simbolico puntasse alla cartella corretta.

Creare Link Simbolico Cartella Con Comando Ln

Nota che:

~/Documenti/SupportHost/articoli

equivale a:

/home/vbox/Documenti/SupportHost/articoli

Nel terminale, infatti, si può usare il simbolo tilde ~ per indicare “/home/user/”, nel mio esempio “/home/vbox/”.

Se esiste già un link simbolico con lo stesso nome e vogliamo rimuovere quello esistente per creare un link simbolico che punti a un collegamento diverso, possiamo farlo sempre usando il comando ln.

In questo caso dovremo usare due opzioni:

  • l’opzione -s per creare un link simbolico (e non un hard link);
  • l’opzione -f per forzare la sovrascrittura del link.

Facciamo un esempio. Nel mio caso ho il link simbolico “link.txt” associato al file “prova.txt”, voglio modificarlo per collegarlo al file “appunti.txt” che si trova in un’altra cartella.

Il comando si usa così:

ln -sf percorso-file nome-link

Nel mio caso:

ln -sf ~/Documenti/SupportHost/appunti.txt link.txt

Questo comando mi permette di associare il link simbolico “link.txt” al file “appunti.txt”.

Se, invece, avessi provato a dare lo stesso comando senza usare l’opzione -f, avrei ricevuto un avviso come questo:

ln: creazione del collegamento simbolico 'link.txt' non riuscita: File già esistente

Nell’esempio mostro come sovrascrivere un link simbolico usando l’opzione -f e l’avviso che mi viene mostrato se non applico l’opzione -f e c’è già un file esistente:

Sovrascrivere Link Simbolico

Finora ci siamo concentrati sui link simbolici o soft, come dicevamo, però, su Linux possiamo anche creare degli hard link.

Per creare un hard link associato al file usiamo il comando ln in questo modo:

ln file-origine nome-link

Facendo un esempio semplice all’interno di una singola cartella, per creare un hard link “hlink.txt” associato al file “nuovo.txt” uso il comando seguente:

ln nuovo.txt hlink.txt

Come si vede nell’esempio, l’hard link creato non è distinguibile da un normale file, vediamo perciò come fare a identificarlo.

Creare Hard Link File Con Comando Ln

Se abbiamo davanti due file che sembrano avere le stesse proprietà, ma vogliamo assicurarci che siano collegati come hard link, possiamo verificare l’inode. Come dicevamo, ogni inode è caratterizzato da un numero univoco, quindi se due file hanno lo stesso inode, vuol dire che sono collegati agli stessi dati.

Per fare questa verifica possiamo usare due metodi.

Con il comando ls -li possiamo verificare qual è il numero inode associato a un file.

In questo esempio puoi vedere che i file hlink.txt e nuovo.txt hanno lo stesso inode (528233) quindi si tratta di hard link verso gli stessi dati.

Inoltre, con il comando stat possiamo conoscere anche il numero di hard link associati a quei dati (vengono indicati in “Collegamenti” e nel nostro esempio sono 2).

Identificare Hard Link

Possiamo eliminare i link soft e hard dopo averli creati.

Per rimuovere un link simbolico che abbiamo creato possiamo utilizzare due comandi:

  • unlink
  • rm.

Questi due comandi sono simili, ma hanno alcune differenze che puoi vedere nella tabella seguente.

FunzioneComando rmComando unlink
Tipo di file eliminabileSi usa per eliminare file e cartelleSi usa solo per i file
Eliminazione multiplaSi può usare per eliminare più file o cartelle con un singolo comandoAccetta un solo argomento alla volta. Quindi ci permette di eliminare un file alla volta.

Se vogliamo eliminare un link possiamo usare uno dei due comandi, in questo modo.

Comando unlink:

unlink nome-link-simbolico

Comando rm:

rm nome-link-simbolico

Puoi approfondire e trovare numerosi esempi, leggendo la guida al comando rm.

Quando creiamo l’hard link di un file, abbiamo due file che puntano agli stessi dati sul disco. Come dicevamo prima, la differenza principale tra soft e hard link è che questi ultimi non dipendono dal file originale.

Questo significa che finché esiste un file collegato (come hard link), i dati continuano ad essere accessibili. Per rimuovere quindi completamente un file, bisogna far sì che non ci siano più hard link ad esso collegati.

Possiamo usare il comando rm per rimuovere un hard link, in questo modo:

rm nome-link

Vediamo un esempio pratico.

Come Rimuovere Hard Link

Spiegazione dell’esempio:

  1. Inizialmente ho il file articolo.txt
  2. Uso il comando ln per creare un hard link, testo.txt , associato ad articolo.txt.
  3. Verificando con stat vedo che il conteggio degli hard link è pari a 2.
  4. Uso il comando rm per eliminare testo.txt.
  5. Con il comando stat vedo che il conteggio degli hard link ora è 1.

Conclusioni

Abbiamo visto che su Linux i collegamenti o link sono un tipo particolare di file che viene trattato in modo diverso in base al tipo a cui appartiene:

  • i soft link o link simbolici
  • gli hard link.

Con il comando ln possiamo creare questi tipi di collegamenti da terminale, ma è importante sapere quali sono le differenze tra i due tipi di link in modo da creare quello giusto in base alle esigenze.

Avevi mai creato link su Linux? Facci sapere con un commento.


Prova gratis e senza impegno uno dei nostri piani hosting per 14 giorni. Non è richiesto nessun dato di pagamento!

Commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *