Crea sito

L’architettura di un filesystem e le proprietà dei file

6 / 100

Come gia accennato Linux (ed ogni sistema unix-like) organizza i dati che tiene su disco attraverso l’uso di un filesystem. Per questo non entreremo nei dettagli di un filesystem specifico, ma daremo una descrizione a grandi linee che si adatta alle caratteristiche comuni di un filesystem generico usato su un sistema unix-like.

La struttura che identifica univocamente un singolo le all’interno di un lesystem e il cosid-detto inode: ciascun le e associato ad un inode in cui sono mantenute tutte le informazioni che lo riguardano, come il tipo, di permessi di accesso utente e gruppo proprietario, le dimensioni, i tempi, ed anche tutti i riferimenti ai settori del disco (i blocchi sici) che contengono i dati; le informazioni che fornisce il comando ls provengono dall’inode . L’unica informazione relativa al le non contenuta nell’inode e il suo nome; infatti il nome di un le non e una proprieta del le, ma semplicemente una etichetta associata ad un inode

Il comando generico che permette di creare dei link e ln che prende come argomenti il le originale ed il nome del nuovo link. La differenza rispetto a Windows o MacOS e che in un sistema unix-like i collegamenti per i file sono di due tipi, oltre agli hard link appena illustrati infatti esistono anche i cosiddetti collegamenti simbolici, o symbolic link, che sono quelli e effettivamente piu simili ai collegamenti di Windows o agli alias del MacOS, come il file link mostrato in precedenza.

Per creare un hard link basta usare direttamente il comando ln, (il cui nome deriva da link le) che di default crea questo tipo di collegamento. Cos possiamo creare un nuovo le hardlink per il le file visto in precedenza usando il comando:

[email protected]:~/filetypes$ ln file hardlink

e se riesaminiamo la lista dei   le otterremo che:

[email protected]:~/filetypes$ ls -l     
total 1        
brw-r–r–1rootroot1,2 Jul814:48 block
crw-r–r–1rootroot1,2 Jul814:48 char
drwxr-xr-x2piccardipiccardi 48Jul814:24 dir
prw-r–r–1piccardipiccardi 0Jul814:24 fifo
-rw-r–r–2piccardipiccardi 0Jul814:24 file
-rw-r–r–2piccardipiccardi 0Jul814:24 hardlink
lrwxrwxrwx1piccardipiccardi 4Jul814:25 link -> file

Si noti come adesso la seconda colonna dell’output del comando mostri sia per file che per hardlink un valore pari a due, come ci si aspetta dato che entrambi fanno riferimento allo stesso inode che pertanto ha due collegamenti. Usando l’opzione -i di ls possiamo anche stampare per ciascun le il rispettivo numero di inode, ottenendo:

[email protected]:~/filetypes$ ls -li

total 1          
2118brw-r–r–1rootroot1,2Jul814:48 block
2120crw-r–r–1rootroot1,2Jul814:48char
15drwxr-xr-x2piccardipiccardi 48Jul814:24dir


1. L’architettura di un sistema GNU/Linux    13
        
2115prw-r–r–1piccardi piccardi0Jul814:24 fifo
2117-rw-r–r–2piccardi piccardi0Jul814:24 file
2117-rw-r–r–2piccardipiccardi0Jul814:24hardlink
2116lrwxrwxrwx1piccardipiccardi4Jul814:25link -> file

e si puo veri care come e ettivamente file e hardlink abbiano lo stesso numero di inode, che nel caso e 2117.

Un limite che si ha con gli hard link e dovuto al fatto che si puo fare riferimento solo ad un inode presente nello stesso lesystem della directory. Questo avviene perch le directory contengono semplicemente l’associazione fra un nome ed un numero di inode ed ogni lesystem numera progressivamente ed in maniera indipendente i propri inode, per cui su un altro lesystem lo stesso numero di inode identi chera un le diverso. Questo limita l’uso degli hard link solo a le residenti sul lesystem corrente, ed infatti il comando ln dar un errore se si cerca di creare un hard link ad un le posto in un altro lesystem.

Per superare questa limitazione sono stati introdotti i cosiddetti collegamenti simbolici o symbolic link, che vengono creati usando l’opzione -s del comando ln; ad esempio si e creato il collegamento simbolico link mostrato nell’esempio precedente con il comando:

[email protected]:~/filetypes$ ln -s file link

In questo caso viene creato un nuovo le, di tipo symbolic link, che avr un suo diverso inode (come risulta nell’output di ls -li appena mostrato) ed il cui contenuto e il percorso (torneremo sulla notazione che esprime i pathname dei le fra poco) da fare per arrivare al le a cui esso fa riferimento, che a questo punto puo essere in qualsiasi altro lesystem. E compito del kernel far s che quando si usa un link simbolico si vada poi ad operare sul le che questo ci indica, ed e questo il motivo per cui per i link simbolici esiste un apposito tipo di file

Oltre a -s il comando ln prevede una serie di altre opzioni, le principali delle quali sono riportate in tab a lista completa delle opzioni, e la relativa documentazione, e disponibile nella pagina di manuale, accessibile attraverso il comando man ln.

OpzioneSigni cato
  
-screa un collegamento simbolico.
-fforza la sovrascrittura del nuovo  le se esso esiste gia.
-irichiede conferma in caso di sovrascrittura.
-dcrea un hard link ad una directory (in Linux questa non e
 usabile).
-besegue un backup della destinazione se questa esiste gia.
 Tabella 1.4: Principali opzioni del comando ln.

Il comando per la cancellazione di un file è rm (il cui nome deriva da remove file), ma la funzione usata dal sistema per e effettuare questo compito si chiama in realtà unlink ed essa, come ci dice il nome, non cancella affatto i dati del file, ma si limita ad eliminare la relativa voce da una directory e decrementare il numero di riferimenti presenti nell’inode. Solo quando il numero di riferimenti ad un inode si annulla, i dati del file vengono e effettivamente rimossi dal disco dal kernel.

Il comando rm prende come argomenti una lista di file da cancellare; se si usa l’opzione -i il comando chiede di confermare la cancellazione, mentre con l’opzione -f si annulla ogniprecedente -i ed inoltre non vengono stampati errori per le non esistenti. In ne l’opzione -R (o -r) permette la cancellazione ricorsiva di una directory e di tutto il suo contenuto, ed e pertantoda usare con estrema attenzione, specie se abbinata con -f.18 La lista completa delle opzioni e riportata nella pagina di manuale, accessibile con il comando man rm.

Il comando mv ha due forme, puo prendere cioe come argomenti o due nomi di file o una lista di file seguita da una directory. Nel primo caso rinomina il primo file nel secondo, cancellando quest’ultimo qualora esista gia, nel secondo caso sposta tutti i file della lista nella directory passata come ultimo argomento, sempre cancellando eventuali file con lo stesso nome in essa presenti.

Le principali opzioni del comando sono riportate in tabella l’elenco completo e riportato nella pagina di manuale, accessibile con il comando man mv.

OpzioneSigni cato
  
-irichiede conferma in caso di sovrascrittura.
-fforza la sovrascrittura del nuovo  le se esso esiste gia.
-uesegue lo spostamento solo se la destinazione e piu vecchia
 della sorgente (o non esiste).
-besegue un backup della destinazione se questa esiste gia.
 Tabella 1.5: Principali opzioni del comando mv.

Dato che il comando si limita a cambiare una voce associata ad un numero di inode all’interno di una directory, ntanto che lo spostamento avviene all’interno dello stesso lesystem, i tempi dei le non vengono modi cati dall’uso di mv. Quando pero lo spostamento avviene fra lesystem diversi viene copiato il contenuto e cancellato il le originario, pertanto in teoria dovrebbero risultare modi cati anche i tempi di ultimo accesso e modi ca. In realt il comando provvede a ripristinare questi tempi (come le altre caratteristiche del le) al valore del le originario, ma non puo fare nulla per ripristinare il tempo di ultimo cambiamento.19 Pertanto in quel caso si potra notare, usando ls -lc, che questo e cambiato e corrisponde al momento dello spostamento.

Qualora invece si voglia duplicare un file il comando da usare e cp, il cui nome deriva da copy file. Come per mv il comando puo prendere come argomenti o due nomi di le o una lista di le seguita da una directory; nel primo caso e ettua una copia del primo le sul secondo, nel secondo copia tutti le della lista nella directory specificata.

Se si vogliono preservare invece le caratteristiche del file originale occorrera usare l’opzione -p.20

OpzioneSigni cato
  
-fforza la sovrascrittura della destinazione se essa esiste gia.
-irichiede conferma in caso di sovrascrittura.
-ppreserva tempi, permessi e proprietari del  file.
-lcrea degli hard link al posto delle copie.
-screa dei collegamenti simbolici al posto delle copie.
-dcopia il link simbolico invece del  file da esso indicato.
-rcopia ricorsivamente tutto il contenuto di una directory.
-Ridentico a -r.
-acombina le opzioni -dpR.
-Lsegue sempre i collegamenti simbolici.
-besegue un backup della destinazione se questa esiste gia.
-uesegue la copia solo se la destinazione e piu vecchia della
 sorgente (o non esiste).

Finora, specificando solo dei nomi semplici, abbiamo sempre fatto l’assunto di operare appun-to nella directory di lavoro corrente. Questa directory e una proprieta specifica di ogni processo, che viene ereditata dal padre alla sua creazione La directory di lavoro puo essere cambiata con il comando cd (il cui nome deriva change directory) seguito dal pathname della directory in cui ci si vuole spostare. Per sapere quale e la si puo stampare a video con il comando pwd, il cui nome deriva da print work directory.

Il comando mkdir crea la o le directory passate come argomento; queste dovranno essere speci cate con quello che sar il loro pathname, sia in forma assoluta o relativa. Perch il comando abbia successo ovviamente la parte di percorso che deve contenere la directory che si vuole creare deve esistere, se non e cos si puo forzare la creazione di tutte le directory indicate nel percorso speci cato con l’opzione -p, se ne possono anche impostare i permessi iniziali (torneremo su questo argomento in sez. 1.4.3) con l’opzione -m.

Come per la creazione, e necessario un apposito comando, rmdir, anche per la rimozione di una directory, dato che rm, a meno di non usare l’opzione -R che pero cancella anche tutto il contenuto, rimuove solo i file. Di nuovo il comando prende il nome di una o piu directory vuote da cancellare. Se le directory non sono vuote, dove vuote signi ca che non ci deve essere niente a parte le due directory \.” e \..” il comando fallisce. Anche in questo caso si puo usare l’opzione -p che cancella tutto un percorso di directory (che comunque devono essere tutte vuote).

Translate »