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!
Table of Contents
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.
Differenze tra hard e soft link in Linux
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.

Per via delle loro differenze, hard link e soft link si comportano diversamente, come puoi vedere da questa tabella di confronto.
Soft link | Hard link |
---|---|
Sono collegati al percorso di un file | Sono 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 funzionare | Funzionano anche se il file viene modificato, spostato o eliminato |
Si usano per file e cartelle | Si 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.
Creare un link simbolico di un file
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).

Come capire a quale file è associato un link simbolico
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

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:

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.
Creare un link simbolico di una cartella
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.

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/”.
Come sovrascrivere un link simbolico
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:

Creare un hard link di un file
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.

Come identificare un hard link
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).

Come eliminare soft e hard link
Possiamo eliminare i link soft e hard dopo averli creati.
Rimuovere un link simbolico
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.
Funzione | Comando rm | Comando unlink |
---|---|---|
Tipo di file eliminabile | Si usa per eliminare file e cartelle | Si usa solo per i file |
Eliminazione multipla | Si può usare per eliminare più file o cartelle con un singolo comando | Accetta 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.
Rimuovere un hard link
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.

Spiegazione dell’esempio:
- Inizialmente ho il file articolo.txt
- Uso il comando ln per creare un hard link, testo.txt , associato ad articolo.txt.
- Verificando con stat vedo che il conteggio degli hard link è pari a 2.
- Uso il comando rm per eliminare testo.txt.
- 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.
Lascia un commento