Che cos'è Soft Link e Hard Link in Linux?
Un simbolico o collegamento software è un collegamento effettivo al file originale, mentre un collegamento fisico è una copia speculare del file originale. Se elimini il file originale, il collegamento software non ha valore, perché punta a un file inesistente.
Ma nel caso di hard link, è del tutto opposto. Anche se elimini il file originale, l'hard link conterrà ancora i dati del file originale. Perché il collegamento fisico agisce come una copia speculare del file originale.
In poche parole, un soft link
- può attraversare il file system,
- ti consente di collegare tra directory,
- ha un numero di inode e autorizzazioni di file diversi rispetto al file originale,
- Le autorizzazioni non verranno aggiornate
- ha solo il percorso del file originale, non il contenuto.
Un collegamento fisso
- non può oltrepassare i limiti del file system (ad es. un hardlink può funzionare solo sullo stesso filesystem),
- Impossibile collegare le directory,
- ha lo stesso numero di inode e le stesse autorizzazioni del file originale,
- Le autorizzazioni verranno aggiornate se cambiamo le autorizzazioni del file sorgente,
- ha il contenuto effettivo del file originale, in modo che tu possa comunque visualizzare il contenuto, anche se il file originale è stato spostato o rimosso.
Ancora non capisci? Bene, permettetemi di mostrarvi alcuni esempi pratici.
Come creare un collegamento soft o un collegamento simbolico
Creiamo una directory vuota chiamata "test"
.
$ mkdir test
Passa al "test"
directory:
$ cd test
Ora, crea un nuovo file chiamato source.file
con alcuni dati come mostrato di seguito.
$ echo "Welcome to OSTechNix" >source.file
Vediamo i dati del source.file.
$ cat source.file Welcome to OSTechNix
Bene, il source.file
è stato creato.
Ora, crea un collegamento simbolico o software al source.file
.
Per farlo, esegui:
$ ln -s source.file softlink.file
Confrontiamo i dati di entrambi source.file
e softlink.file
.
$ cat source.file Welcome to OSTechNix
$ cat softlink.file Welcome to OSTechNix
Come puoi vedere nell'output sopra, softlink.file
visualizza gli stessi dati di source.file
.
Controlliamo gli inode e i permessi di softlink.file
e source.file
.
$ ls -lia
Risultato di esempio:
total 12 11665675 drwxrwxr-x 2 sk sk 4096 Oct 17 11:39 . 4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 .. 11665731 lrwxrwxrwx 1 sk sk 11 Oct 17 11:39 softlink.file -> source.file 11665692 -rw-rw-r-- 1 sk sk 21 Oct 17 11:39 source.file
Come vediamo nello screenshot sopra, il numero inode (11665731
vs 11665692
) e autorizzazioni file (lrwxrwxrwx
vs -rw-r--r--
) sono diversi , anche se il softlink.file
ha gli stessi contenuti di source.file
. Quindi, è dimostrato che il collegamento software non condivide lo stesso numero di inode e le stesse autorizzazioni del file originale.
Ora rimuovi il file originale (cioè source.file
) e guarda cosa succede.
$ rm source.file
Controlla il contenuto del softlink.file
usando il comando:
$ cat softlink.file
Risultato di esempio:
cat: softlink.file: No such file or directory
Come vedi sopra, non esiste un file o una directory chiamata softlink.file
dopo aver rimosso il file originale (cioè source.file
).
Quindi, ora capiamo che il collegamento software è solo un collegamento che punta al file originale. Il softlink è come un collegamento a un file. Se rimuovi il file, il collegamento è inutile.
Come già sai, se rimuovi il soft link, il file originale sarà ancora disponibile.
Lettura consigliata:
- Come elencare i collegamenti simbolici su Linux
- Come trovare collegamenti simbolici interrotti ed eliminarli su Linux
Come creare Hard Link
Crea un file chiamato source.file
con alcuni contenuti come mostrato di seguito.
$ echo "Welcome to OSTechNix" >source.file
Verifichiamo il contenuto del file.
$ cat source.file Welcome to OSTechNix
Il source.file
è stato creato ora.
Ora creiamo il collegamento reale al source.file
come mostrato di seguito.
$ ln source.file hardlink.file
Controlla i contenuti di hardlink.file
:
$ cat hardlink.file Welcome to OSTechNix
Viene visualizzato il hardlink.file
visualizza gli stessi dati di source.file.
Controlliamo l'inode e le autorizzazioni di hardlink.file
e source.file
.
$ ls -lia
Risultato di esempio:
total 16 11665675 drwxrwxr-x 2 sk sk 4096 Oct 17 11:58 . 4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 .. 11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 hardlink.file 11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 source.file
Ora vediamo che entrambi hardlink.file
e source.file
hanno lo stesso numero di inode (11665692
) e autorizzazioni per i file (-rw-r--r--
) . Quindi, è dimostrato che il file hard link condivide lo stesso numero di inode e le stesse autorizzazioni del file originale.
Avviso: Se cambiamo i permessi su source.file
, la stessa autorizzazione verrà applicata a hardlink.file
anche.
Ora rimuovi il file originale (cioè source.file
) e guarda cosa succede.
$ rm source.file
Controlla il contenuto di hardlink.file
usando il comando:
$ cat hardlink.file
Risultato di esempio:
Come vedi sopra, anche se ho eliminato il file sorgente, posso visualizzare il contenuto di hardlink.file
. Quindi, è dimostrato che Hard link condivide lo stesso numero di inode, i permessi e i dati del file originale.
Quindi, qual è la differenza tra Hard link e il normale file copiato?
Ti starai chiedendo perché dovremmo creare un collegamento fisico mentre possiamo facilmente copiare/incollare il file originale? Creare un collegamento fisico a un file è diverso dalla copiarlo.
Se copi un file, questo duplicherà semplicemente il contenuto. Quindi, se modifichi il contenuto di un file (originale o hard link), non ha alcun effetto sull'altro.
Tuttavia, se crei un collegamento reale a un file e modifichi il contenuto di uno dei file, la modifica verrà visualizzata su entrambi.
Diamo un'occhiata al source.file.
$ cat source.file Welcome to OSTechNix
Il file sorgente ha una singola riga che dice:Benvenuto in OSTechNix.
Aggiungi una nuova riga, ad esempio "Welcome to Linux" in source.file
o hardlink.file
.
$ echo "Welcome to Linux" >>source.file
Ora controlla il contenuto di entrambi i file.
$ cat hardlink.file Welcome to OSTechNix Welcome to Linux
$ cat source.file Welcome to OSTechNix Welcome to Linux
Vedere? Le modifiche che abbiamo appena apportato a source.file
vengono aggiornati in entrambi i file. Significato:entrambi i file (sorgente e collegamento fisico) vengono sincronizzati.
Qualsiasi modifica apportata a qualsiasi file si rifletterà sull'altro. Se normalmente copi/incolli il file, non vedrai nessuna nuova modifica in altri file.
Per maggiori dettagli, controlla le pagine man.
$ man ln
Conclusione
In questa guida, abbiamo discusso cosa sono soft link e hard link in Linux, come creare softlink e hardlink con comandi di esempio e infine abbiamo spiegato la differenza tra hardlink e normale file copiato.
Spero che tu abbia un'idea di base su come utilizzare collegamenti simbolici o soft e hard link in Linux.