Il Virtual File System – Caratteristiche dei file

()

Un aspetto fondamentale dell’architettura di GNU/Linux e quello della gestione dei file.


Esso deriva direttamente da uno dei criteri base della progettazione di tutti i sistemi Unix, quello espresso dalla frase “everything is a file” (cioè tutto e un file), per cui l’accesso ai file e alle periferiche e gestito attraverso una interfaccia identica.

Perchè i file diventino accessibili al sistema un filesystem deve essere montato in modo che essi siano resi visibili all’interno di una certa directory.

Questa e una operazione privilegiata che normalmente puo fare solo l’amministratore.

Come accennato nell’introduzione a questa sezione, uno dei criteri fondamentali dell’architettura di un sistema Unix e quello per cui tutto e un file e per cui si puo’ accedere a tutte le periferiche, con la sola eccezione delle interfacce ai dispositivi di rete, che non rientrano bene nell’astrazione e sono gestite in maniera diversa, con una interfaccia identica a quella con cui si accede al contenuto dei file.
Questo comporta pero una serie di differenze nella gestione dei file rispetto ad altri sistemi.

Anzitutto in un sistema Unix tutti i file di dati sono uguali: non esiste cioe la di differenza fra file di testo o binari che c’e in Windows, ne fra le sequenziali e ad accesso diretto che c’era nel VMS.

Inoltre le estensioni sono solo convenzioni, e non significano nulla per il kernel, che legge tutti i file di dati alla stessa maniera, indipendentemente dal nome e dal contenuto.

In realtà il sistema prevede tipi diversi di file, ma in un altro senso; ad esempio il sistema puo accedere alle periferiche, attraverso dei file speciali detti device file o file di dispositivo.

Altri due tipi di file speciali riportati in tabella sono le fifo ed i socket, che altro non sono che dei canali di comunicazione messi a disposizione dal kernel ai processi, perchè questi possano parlarsi fra di loro.

La possibilita di avere tutti questi tipi di file speciali e dovuta al fatto che, in Linux l’accesso ai file viene eseguito attraverso una interfaccia unificata, il Virtual File System, che de definisce una serie di operazioni generiche che sono le stesse per tutti gli oggetti che essa gestisce; e questo che implementa la filosofia progettuale del tutto e un file.

Quando si utilizzano le system call per accedere ad un file sarà compito del kernel chiamare l’operazione relativa ad esso associata (che sarà ovviamente diversa a seconda del tipo di file), o riportare un errore quando quest’ultima non sia definita (ad esempio sul file di dispositivo associato alla seriale non si potra mai utilizzare l’operazione di spostamento llseek).

Un file system virtuale (in inglese Virtual file system o Virtual filesystem switch) è un livello astratto, prendendo il nome di virtualizzazione, che si posiziona al di sopra del file system.

Lo scopo del VFS è quello di permettere alle applicazioni l’accesso a differenti tipologie di file gestiti in differenti file system.

Un VFS, per esempio, può essere usato per permettere un accesso locale o di rete a dispositivi di storage in maniera trasparente cioè senza che le applicazioni, che richiedono l’accesso a tali dispositivi, notino come il VFS risponda alla tipologia di richiesta.

Può essere usato come ponte tra i differenti file system dei diversi sistemi operativi, quali Windows, MacOS, UNIX in modo che le applicazioni posso accedere a file nel file system in questione senza preoccuparsi delle caratteristiche e quindi interfacciarsi esclusivamente con il VFS.

Quindi il VFS può essere specificato come interfaccia (o contratto) tra il kernel e il file system.

Pertanto è facile aggiungere nuovi file system al kernel aggiungendo tali informazioni al kernel permettendo di evitare incompatibilità e problemi collegati.

Ciò supera i tradizionali limiti di un file system fisico, il cui cambiamento richiederebbe la ricompilazione del supporto del file system ed, eventualmente, la modifica prima della ricompilazione, per consentirne il funzionamento con una nuova versione del sistema operativo; oppure il fornitore del sistema operativo potrebbe apportare modifiche retroattive al contratto, in modo che il supporto concreto del file system creato per una data versione del sistema operativo funzioni con le versioni future del sistema operativo.

Il Virtual File System è anche il meccanismo che permette al kernel di gestire tanti filesystem diversi; quando uno di questi viene montato e compito del kernel utilizzare per le varie system call le opportune operazioni in grado di accedere al contenuto di quel particolare filesystem; questa è la ragione principale della grande flessibilita di Linux nel supportare i filesystem piu diversi,

Uno dei programmi fondamentali per la gestione dei file attraverso l’interfaccia a riga di comando e ls (il cui nome, non proprio intuitivo, deriva da list file) che mostra, se invocato senza nessun argomento, l’elenco dei file nella directory corrente.

Usando l’opzione -l e invece possibile ottenere una lista estesa, in cui compaiono varie proprieta dei file.

Ad esempio, avendo creato una directory con i vari tipi di le citati in tab. 1.1,11 si potra andare in detta directory ed ottenere:

piccardi@oppish:~/filetypes$ ls -l
total 1
brw-r–r– 1 root root 1, 2 Jul 8 14:48 block
crw-r–r– 1 root root 1, 2 Jul 8 14:48 char
drwxr-xr-x 2 piccardi piccardi 48 Jul 8 14:24 dir
prw-r–r– 1 piccardi piccardi 0 Jul 8 14:24 fifo
-rw-r–r– 1 piccardi piccardi 0 Jul 8 14:24 file
lrwxrwxrwx 1 piccardi piccardi 4 Jul 8 14:25 link -> file

e si noti come la prima lettera in ciascuna riga indichi il tipo di le, anche questo secondo la notazione riportata nella terza colonna di tab. 1.1.

Il comando ls è dotato di innumerevoli opzioni, che gli consentono di visualizzare le varie caratteristiche dei le, delle quali il tipo e solo una.

Altre caratteristiche sono: i tempi di ultimo accesso, modifica, cambiamento (su cui torneremo fra poco), le informazioni relative a permessi di accesso e proprietari del file

Il comando prende come argomento una lista di file o directory; senza opzioni viene mostrato solo il nome del file (se esiste) o il contenuto della directory specificata. Le opzioni sono moltissime, e le principali sono riportate in tab. 1.3, l’elenco completo e riportato nella pagina di manuale accessibile con il comando man ls.

Opzione Significato

-l scrive la lista in formato esteso.
-a mostra i file invisibili.
-i scrive il numero di inode (vedi sez. 1.2.2).-R esegue la lista ricorsivamente per tutte le sottodirectory.
-c usa il tempo di ultimo cambiamento del le.
-u usa il tempo di ultimo accesso al le.
-d mostra solo il nome e non il contenuto quando riferito ad una
directory, e non segue i link simbolici.

Una convenzione vuole che i le il cui nome inizia con un punto (.”) non vengano riportati nell’output di ls, a meno di non richiederlo esplicitamente con l’uso dell’opzione -a; per questo tali le sono detti invisibili.

Si tenga presente comunque che questa non e una proprietà dei file e non ha nulla a che fare con le modalità con cui il kernel li tratta (che sono sempre le stesse), ma solo una convenzione usata e rispettata dai vari programmi in user space.

L’opzione -l permette di mostrare una lista in formato esteso in cui vengono riportate molte informazioni concernenti il file.


Il comando prende come argomento una lista di file o directory; senza opzioni viene mostrato solo il nome del file (se esiste) o il contenuto della directory specificata. Le opzioni sono moltissime, l’elenco completo e riportato nella pagina di manuale accessibile con il comando man ls.

/ 5
Grazie per aver votato!

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?