Cos’è Soft Link e Hard Link in Linux?
Un link simbolico o soft link è un link effettivo al file originale, mentre un hard link è una copia speculare del file originale. Se si elimina il file originale, il soft link non ha alcun valore, perché punta a un file inesistente. Ma nel caso dell’hard link, è completamente opposto. Anche se cancellate il file originale, il collegamento rigido avrà ancora i dati del file originale. Perché l’hard link agisce come una copia speculare del file originale.
In poche parole, un soft link
- può attraversare il file system,
- permette di collegare tra directory,
- ha un numero di inode e permessi di file diversi dal file originale,
- i permessi non saranno aggiornati,
- ha solo il percorso del file originale, non il contenuto.
Un hard Link
- non può attraversare i confini del file system (es.Un hardlink può funzionare solo sullo stesso filesystem),
- non può collegare directory,
- ha lo stesso numero di inode e permessi del file originale,
- i permessi saranno aggiornati se cambiamo i permessi del file sorgente,
- ha il contenuto effettivo del file originale, in modo che tu possa ancora visualizzare il contenuto, anche se il file originale è stato spostato o rimosso.
Non avete ancora capito? Bene, permettetemi di mostrarvi alcuni esempi pratici.
Creazione di un collegamento morbido o simbolico
Creiamo una directory vuota chiamata “test”.
$ mkdir test
Passiamo alla directory “test”:
$ cd test
Ora, creiamo un nuovo file chiamato source.file con alcuni dati come mostrato qui sotto.
$ echo "Welcome to OSTechNix" >source.file
Vediamo i dati del source.file.
$ cat source.fileWelcome to OSTechNix
Bene, il source.è stato creato.
Ora, creiamo un collegamento simbolico o softlink al file.source.
Per farlo, eseguire:
$ ln -s source.file softlink.file
Confrontiamo i dati di entrambi i file.source e softlink.file.
$ cat source.file Welcome to OSTechNix
$ cat softlink.file Welcome to OSTechNix
Come vedete nell’output precedente, softlink.file mostra gli stessi dati di source.file.
Controlliamo gli inode e i permessi di softlink.file e source.file.
$ ls -lia
Sample output:
total 1211665675 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.file11665692 -rw-rw-r-- 1 sk sk 21 Oct 17 11:39 source.file
Come vediamo nello screenshot sopra, il numero di inode (11665731 vs 11665692) e i permessi del file (lrwxrwxrwx vs -rw-r–r–) sono diversi, anche se il softlink.ha lo stesso contenuto di source.file, quindi è dimostrato che il softlink non condivide lo stesso numero di inode e i permessi del file originale.
Ora, rimuovi il file originale (cioè source.file) e vedi cosa succede.
$ rm source.file
Controlla il contenuto del file softlink.file usando il comando:
$ cat softlink.file
Sample output:
cat: softlink.file: No such file or directory
Come vedi sopra, non c’è nessun file o directory chiamata softlink.file dopo aver rimosso il file originale (cioè source.file). Quindi, ora abbiamo capito che il softlink è solo un collegamento che punta al file originale. Il softlink è come una scorciatoia per un file. Se rimuovi il file, la scorciatoia è inutile.
Come già sai, se rimuovi il soft link, il file originale sarà ancora disponibile.
Suggerito leggere:
- Come elencare i collegamenti simbolici su Linux
- Come trovare i collegamenti simbolici rotti e cancellarli su Linux
Creare un collegamento rigido
Creare un file chiamato source.con alcuni contenuti come mostrato di seguito.
$ echo "Welcome to OSTechNix" >source.file
Verifichiamo il contenuto del file.
$ cat source.fileWelcome to OSTechNix
il file source.file è stato creato ora.
Ora, creiamo l’hardlink al file source.file come mostrato qui sotto.
$ ln source.file hardlink.file
Controlliamo il contenuto del file hardlink.file.
$ cat hardlink.fileWelcome to OSTechNix
Vedete che il file hardlink.file mostra gli stessi dati del file source.file.
Controlliamo l’inode e i permessi di hardlink.file e source.file.
$ ls -lia
Sample output:
total 1611665675 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.file11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 source.file
Ora, vediamo che sia hardlink.file che source.file hanno gli stessi inode (11665692) e permessi di file (-rw-r–r–). Quindi, è provato che il file hardlink condivide lo stesso numero di inode e gli stessi permessi del file originale.
Nota: Se cambiamo i permessi sul file source.file, lo stesso permesso sarà applicato anche al file hardlink.file.
Ora, rimuoviamo il file originale (i.
$ rm source.file
Verificate il contenuto del file hardlink.file usando il comando:
$ cat hardlink.file
Sample output:
Come vedete sopra, anche se ho cancellato il file sorgente, posso visualizzare il contenuto del file hardlink.file. Quindi, è dimostrato che l’hard link condivide lo stesso numero di inode, i permessi e i dati del file originale.
Quindi, qual è la differenza tra l’hard link e il normale file copiato?
Potreste chiedervi perché dovremmo creare un hard link mentre possiamo facilmente copiare/incollare il file originale? Creare un hard link a un file è diverso dal copiarlo.
Se si copia un file, si duplica semplicemente il contenuto. Quindi, se si modifica il contenuto di un file (sia originale che hard link), non ha effetto sull’altro. Tuttavia, se crei un hard link a un file e cambi il contenuto di uno dei due file, il cambiamento sarà visto su entrambi.
Diamo un’occhiata al file sorgente.
$ cat source.file Welcome to OSTechNix
Il file sorgente ha una singola linea che dice – Welcome to OSTechNix.
Applica una nuova linea, per 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 OSTechNixWelcome to Linux
$ cat source.file Welcome to OSTechNixWelcome to Linux
Vedi? Le modifiche che abbiamo appena fatto su source.file sono aggiornate in entrambi i file. Cioè – entrambi i file (sorgente e hard link) si sincronizzano. Qualunque modifica tu faccia in qualsiasi file si rifletterà sull’altro. Se normalmente fai un copia/incolla del file, non vedrai nessuna nuova modifica nell’altro file.
Per maggiori dettagli, controlla le pagine man.
$ man ln
Questo è tutto per ora. Spero che tu abbia un’idea di base sui link simbolici o soft link e hard link.
Grazie per essere passato!
Aiutateci ad aiutarvi:
- Sottoscrivi la nostra Email Newsletter: Iscriviti Ora
- Supporta OSTechNix: Dona via PayPal
- Scarica E-Books e Video gratuiti: OSTechNix su TradePub
- Connettiti con noi: Reddit | Facebook | Twitter | LinkedIn | RSS feeds
Buona giornata!!!