104.6 Lezione 1
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
104 Dispositivi, Il Filesystem Linux, Filesystem Hierarchy Standard |
Obiettivo: |
104.6 Creare e modificare gli hard e soft links |
Lezione: |
1 di 1 |
Introduzione
Su Linux alcuni file ricevono un trattamento speciale o per il posto in cui sono memorizzati, come i file temporanei, o per il modo in cui interagiscono con il filesystem, come i collegamenti. In questa lezione imparerai cosa sono i collegamenti e come gestirli.
Comprendere i Link
Come già accennato, su Linux tutto viene trattato come un file. Ma esiste un tipo speciale di file, chiamato link, e ce ne sono di due tipi in un sistema Linux:
Link simbolici: chiamati anche soft link, puntano al percorso di un altro file. Se elimini il file a cui punta il collegamento (chiamato target) il collegamento esisterà ancora, ma “smetterà di funzionare”, poiché ora non punterà più a niente.
- Hard Link
-
Pensa a un collegamento fisico (hard) come a un secondo nome per il file originale. Non sono duplicati, ma sono invece una voce aggiuntiva nel filesystem che punta alla stessa posizione (inode) sul disco.
Tip
|
Un inode è una struttura dati che memorizza gli attributi per un oggetto (come un file o una directory) su un filesystem. Tra questi attributi ci sono i permessi, la proprietà e su quali blocchi del disco sono archiviati i dati per l’oggetto. Pensala come una voce su un indice, da cui il nome, che deriva da “index node”. |
Lavorare con gli Hard Link
Creare Hard Link
Il comando per creare un hard link su Linux è ln
. La sintassi di base è:
$ ln TARGET LINK_NAME
Il TARGET
deve già esistere (questo è il file a cui punterà il collegamento), e se il target non si trova nella directory corrente, o se si desidera creare il collegamento altrove, è necessario specificare il percorso completo a esso. Per esempio, il comando:
$ ln target.txt /home/carol/Documents/hardlink
creerà un file chiamato hardlink
nella directory /home/carol/Documents/
, collegato al file target.txt
nella directory corrente.
Se tralasci l’ultimo parametro (LINK_NAME
), verrà creato un collegamento con lo stesso nome del target nella directory corrente.
Gestire Hard Link
Gli hard link sono voci nel filesystem che hanno nomi diversi ma puntano agli stessi dati sul disco. Tutti questi nomi sono uguali e possono essere utilizzati per fare riferimento a un file. Se modifichi il contenuto di uno dei nomi, il contenuto di tutti gli altri nomi che puntano a quel file cambia poiché tutti questi nomi puntano agli stessi dati. Se elimini uno dei nomi (puntamento), gli altri continueranno a funzionare.
Questo accade perché quando si “cancella” un file i dati non vengono effettivamente cancellati dal disco. Il sistema cancella semplicemente la voce sulla tabella del filesystem che punta all’inode corrispondente ai dati sul disco. Ma se hai una seconda voce che punta allo stesso inode, puoi comunque accedere ai dati. Pensa a due strade che convergono allo stesso punto. Anche se blocchi o reindirizzi una delle strade, puoi comunque raggiungere la destinazione utilizzando l’altra.
Puoi verificarlo usando il parametro -i
di ls
. Considera i seguenti contenuti di una directory:
$ ls -li total 224 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 hardlink 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 target.txt
Il numero prima dei permessi è il numero di inode. Vedi che sia il file hardlink
che il file target.txt
hanno lo stesso numero (3806696
)? Questo perché uno è un hard link dell’altro.
Ma qual è l’originale e qual è il collegamento? Non si può davvero dire, poiché per tutti gli scopi pratici sono la stessa cosa.
Nota che ogni hard link che punta a un file aumenta il contatore dei collegamenti (link count) del file. Questo è il numero subito dopo i permessi sull’output di ls -l
. Per impostazione predefinita, ogni file ha un conteggio dei collegamenti di 1
(le directory hanno un conteggio di 2
) e ogni collegamento fisico a esso aumenta il conteggio di uno. Questo è il motivo per il conteggio dei collegamenti pari a 2
sui file nell’elenco sopra.
A differenza dei collegamenti simbolici, è possibile creare solo collegamenti fisici ai file e sia il collegamento che la destinazione devono risiedere nello stesso file system.
Spostare e Rimuovere Hard Link
Poiché gli hard link sono trattati come file normali, possono essere cancellati con rm
e rinominati o spostati nel filesystem con mv
. E poiché un hard link punta allo stesso inode, può essere spostato liberamente, senza timore di “spezzare” il collegamento.
Link Simbolici
Creare Link Simbolici
Anche il comando usato per creare un collegamento simbolico è ln
, ma con l’aggiunta dell’opzione -s
. Così:
$ ln -s target.txt /home/carol/Documents/softlink
Questo creerà un file chiamato softlink
nella directory /home/carol/Documents/
, che punta al file target.txt
nella directory corrente.
Come con gli hard link, è possibile omettere il nome del collegamento per creare un collegamento con lo stesso nome della destinazione nella directory corrente.
Gestire i Link Simbolici
I link simbolici puntano a un altro percorso nel filesystem. È possibile creare collegamenti simbolici (o soft) a file e directory, anche su partizioni diverse. È abbastanza facile individuare un collegamento simbolico con l’output del comando ls
:
$ ls -lh total 112K -rw-r--r-- 1 carol carol 110K Jun 7 10:13 target.txt lrwxrwxrwx 1 carol carol 12 Jun 7 10:14 softlink -> target.txt
Nell’esempio sopra, il primo carattere sui permessi per il file softlink
è l
, che indica un collegamento simbolico. Inoltre, subito dopo il nome del file si vede il nome della destinazione a cui punta il collegamento, il file target.txt
.
Si noti che negli elenchi di file e directory, i collegamenti simbolici stessi mostrano sempre i permessi rwx
per l’utente, il gruppo e altri, ma in pratica i permessi di accesso per loro sono gli stessi di quelli per la destinazione.
Spostare ed Eliminare Link Simbolici
Come gli hard link, i link simbolici possono essere rimossi usando rm
e spostati o rinominati usando mv
. Tuttavia, è necessario prestare particolare attenzione durante la creazione, per evitare di “interrompere” il collegamento se viene spostato dalla sua posizione originale.
Quando si creano collegamenti simbolici, è necessario essere consapevoli del fatto che, a meno che un percorso non sia completamente specificato, la posizione della destinazione venga interpretata come relativa alla posizione del collegamento. Ciò potrebbe creare problemi se il collegamento o il file a cui punta venisse spostato.
Questo è più facile da capire con un esempio. Supponiamo di avere un file chiamato original.txt
nella directory corrente e di voler creare un collegamento simbolico ad esso chiamato softlink
. Potresti usare:
$ ln -s original.txt softlink
E, a quanto pare, tutto sarebbe andato bene. Controlliamo con ls
:
$ ls -lh total 112K -r--r--r-- 1 carol carol 110K Jun 7 10:13 original.txt lrwxrwxrwx 1 carol carol 12 Jun 7 19:23 softlink -> original.txt
Guarda come è costruito il collegamento: softlink
punta a (→
) original.txt
. Tuttavia, vediamo cosa succede se sposti il collegamento nella directory precedente e provi a visualizzarne il contenuto utilizzando il comando less
:
$ mv softlink ../ $ less ../softlink ../softlink: No such file or directory
Poiché il percorso di original.txt
non è stato specificato, il sistema presume che si trovi nella stessa directory del collegamento. Quando questo non è più vero, il collegamento smette di funzionare.
Il modo per evitarlo è specificare sempre il percorso completo della destinazione durante la creazione del collegamento:
$ ln -s /home/carol/Documents/original.txt softlink
In questo modo, indipendentemente da dove ci si sposta, il collegamento continuerà a funzionare, poiché punta alla posizione assoluta della destinazione. Controlla con ls
:
$ ls -lh total 112K lrwxrwxrwx 1 carol carol 40 Jun 7 19:34 softlink -> /home/carol/Documents/original.txt
Esercizi Guidati
-
Qual è il parametro per
chmod
in modalità simbolica per abilitare lo sticky bit su una directory? -
Immagina che ci sia un file chiamato
document.txt
nella directory/home/carol/Documents
. Qual è il comando per creare un link simbolico chiamatotext.txt
nella directory corrente? -
Spiega la differenza tra un hard link a un file e una copia dello stesso file.
Esercizi Esplorativi
-
Immagina di creare, all’interno di una directory, un file chiamato
recipes.txt
. All’interno di questa directory, creerai anche un hard link a questo file, chiamatoreceitas.txt
, e un link simbolico (o soft) a questo chiamatorezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s recipes.txt rezepte.txt
Il contenuto della directory dovrebbe essere così:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 0K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 17 17:25 rezepte.txt -> receitas.txt
Ricorda che, come hard link,
receitas.txt
punta allo stesso inode assegnato arecipes.txt
. Che cosa succederebbe al collegamento softwarerezepte.txt
se il filereceitas.txt
venisse cancellato? Perché? -
Immagina di avere una chiavetta USB collegata al tuo sistema e montata in
/media/youruser/FlashA
. Si desidera creare un collegamento chiamatoschematics.pdf
nella directory home, che punta al fileesquema.pdf
nella root dell’unità flash. Quindi, digiti il comando:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Che cosa succede? Perché
-
Considera il seguente output di
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Quanti link puntano al file
document.txt
? -
Sono collegamenti hard o soft?
-
Quale parametro dovresti passare a
ls
per vedere quale inode occupa ogni file?
-
-
Immagina di avere nella tua directory
~/Documents
un file chiamatoclients.txt
contenente alcuni nomi di clienti e una directory chiamatasomedir
. All’interno di questa c’è un file differente denominato anch’essoclients.txt
con nomi differenti. Per replicare questa struttura, utilizzare i seguenti comandi.$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Quindi crea un collegamento all’interno di
somedir
denominatopartners.txt
che punta a questo file, con i comandi:$ cd somedir/ $ ln -s clients.txt partners.txt
Quindi, la struttura della directory sarà:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Ora, sposta
partners.txt
dasomedir
a~/Documents
, ed elencane il contenuto.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Il collegamento funzionerà ancora? In tal caso, quale file avrà il suo contenuto elencato? Perché?
-
Considera i seguenti file:
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
Quali sono i permessi di accesso per
partners.txt
? Perché?
Sommario
In questa lezione abbiamo imparato:
-
Cosa sono i collegamenti.
-
La differenza tra i collegamenti (o link) simbolici (o soft) e hard.
-
Come creare collegamenti.
-
Come spostare, rinominare o rimuovere questi collegamenti.
In questa lezione sono stati discussi i seguenti comandi:
-
ln
: Il comando “link”. Di per sé, questo comando crea un hard link. Con l’opzione-s
è possibile creare un collegamento simbolico o soft. Ricorda che i collegamenti hard possono risiedere solo sulla stessa partizione e file system, mentre i collegamenti simbolici possono attraversare partizioni e file system (anche l’archiviazione di rete). -
Il parametro
-i
dils
, consente di visualizzare il numero di inode per un file.
Risposte agli Esercizi Guidati
-
Qual è il parametro per
chmod
in modalità simbolica per abilitare lo sticky bit su una directory?Il simbolo per lo sticky bit in modalità simbolica è
t
. Dato che vogliamo abilitare (aggiungere) questa autorizzazione alla directory, il parametro dovrebbe essere+t
. -
Immagina che ci sia un file chiamato
document.txt
nella directory/home/carol/Documents
. Qual è il comando per creare un link simbolico chiamatotext.txt
nella directory corrente?ln -s
è il comando per creare un collegamento simbolico. Poiché è necessario specificare il percorso completo del file a cui ci si collega, il comando è:$ ln -s /home/carol/Documents/document.txt text.txt
-
Spiega la differenza tra un hard link a un file e una copia dello stesso file
Un collegamento fisico è solo un altro nome per un file. Anche se sembra un duplicato del file originale, a tutti gli effetti sia il collegamento sia l’originale sono uguali, poiché puntano agli stessi dati sul disco. Le modifiche apportate ai contenuti del collegamento si rifletteranno sull’originale e viceversa. Una copia è un’entità completamente indipendente, che occupa un posto diverso sul disco. Le modifiche alla copia non si rifletteranno sull’originale e viceversa.
Risposte agli Esercizi Esplorativi
-
Immagina di creare, all’interno di una directory, un file chiamato
recipes.txt
. All’interno di questa directory, crea anche un hard link a questo file, chiamatoreceitas.txt
, e un link simbolico (o soft) a questo chiamatorezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s receitas.txt rezepte.txt
Il contenuto della directory dovrebbe essere così:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 0K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 17 17:25 rezepte.txt -> receitas.txt
Ricorda che, come hard link,
receitas.txt
punta allo stesso inode assegnato arecipes.txt
. Che cosa succederebbe al collegamento softwarerezepte.txt
se il filereceitas.txt
venisse cancellato? Perché?Il collegamento simbolico
rezepte.txt
smetterebbe di funzionare. Questo perché i collegamenti simbolici (o soft) puntano ai nomi, non agli inode, e il nomereceitas.txt
non esiste più, anche se i dati sono ancora sul disco con il nomerecipes.txt
. -
Immagina di avere una chiavetta USB collegata al tuo sistema e montata in
/media/youruser/FlashA
. Si desidera creare un collegamento chiamatoschematics.pdf
nella directory home, che punta al fileesquema.pdf
nella root dell’unità flash. Quindi, digita il comando:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Che cosa succede? Perché
Il comando fallirebbe. Il messaggio di errore sarebbe
Invalid cross-device link
e chiarisce il motivo: gli hard link non possono puntare a una destinazione in una partizione o dispositivo diverso. L’unico modo per creare un collegamento come questo è usare un collegamento simbolico o soft, aggiungendo il parametro-s
aln
. -
Considera il seguente output di
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Quanti link puntano al file
document.txt
?Ogni file inizia con un conteggio dei collegamenti uguale a
1
. Poiché il conteggio dei collegamenti per il file è4
, ci sono altri tre collegamenti che puntano a quel file. -
Sono collegamenti hard o soft?
Sono collegamenti fisici (hard link), poiché i collegamenti simbolici non aumentano il contatore dei collegamenti di un file.
-
Quale parametro dovresti passare a
ls
per vedere quale inode occupa ogni file?Il parametro è
-i
. L’inode verrà mostrato come la prima colonna nell’output dils
, come di seguito:$ ls -lahi total 3,1M 5388773 drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . 5245554 drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. 5388840 -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt 5388837 -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
-
Immagina di avere nella tua directory
~/Documents
un file chiamatoclients.txt
contenente alcuni nomi di clienti e una directory chiamatasomedir
. All’interno di questa c’è un file differente denominato anch’essoclients.txt
con nomi differenti. Per replicare questa struttura, utilizzare i seguenti comandi.$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Quindi crea un collegamento all’interno di
somedir
denominatopartners.txt
che punta a questo file, con i comandi:$ cd somedir/ $ ln -s clients.txt partners.txt
Quindi, la struttura della directory sarà:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Ora, sposta
partners.txt
dasomedir
a~/Documents
, ed elencane il contenuto.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Il collegamento funzionerà ancora? In tal caso, quale file avrà il suo contenuto elencato? Perché?
Questo è “un po' complicato”, ma il collegamento funzionerà e il file elencato sarà quello in
~/Documents
, contenente i nomiJohn
,Michael
,Bob
.Ricorda che poiché non hai specificato il percorso completo della destinazione
clients.txt
durante la creazione del soft linkpartners.txt
, il percorso di destinazione sarà interpretato come relativo alla posizione del link, che in questo caso è la directory corrente.Quando il collegamento è stato spostato da
~/Documents/somedir
a~/Documents
, dovrebbe smettere di funzionare, poiché la destinazione non era più nella stessa directory del collegamento. Tuttavia, accade che c’è un file chiamatoclients.txt
su~/Documents
, quindi il collegamento punterà a questo file, invece della destinazione originale all’interno di~/somedir
.Per evitare ciò, specificare sempre il percorso completo della destinazione quando si crea un collegamento simbolico.
-
Considera i seguenti file:
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
Quali sono i permessi di accesso per
partners.txt
? Perché?I permessi di accesso per
partners.txt
sonorw-r-r-
, poiché i collegamenti ereditano sempre gli stessi permessi di accesso della destinazione.