sabato 16 ottobre 2010

Linux: il file system

Il passaggio a un nuovo sistema operativo è sempre accompagnato, per la maggior parte degli utenti (nuovi), da una sensazione di disorientamento. Questa è la cosa che molte volte mi capita di riscontrare. Se la soluzione a qualche problema era prima a portata di mano e veniva quindi tentata, adesso con GNU/Linux (è questo il modo corretto per indicare il sistema operativo) ci si sente disorientati. Le domande tipiche sono: "come faccio a fare questo?", "cos'è questo file?", "a cosa serve questo?", "dove trovo questo?", etc...

Bisogna sfruttare, fin dall'inizio, il nostro entusiasmo per apprendere l'uso del nuovo sistema operativo GNU/Linux. Il tempo speso in questa fase di apprendimento sarà ben ricompensato quando di fronte a un problema sapremo come e cosa fare! Prima ancora di iniziare a impartire comandi dal terminale è utile conoscere l'organizzazione del file system usato nei sistemi operativi GNU/Linux. Questo chiarirà alcuni concetti che ritengo necessari e toglierà (lo spero) una buona parte di quella sensazione di disorientamento che dicevo all'inizio.

Ogni sistema operativo realizza sul nostro computer un livello di astrazione per permettere l'uso dell'hardware sottostante. Il nostro hard disk, ad esempio, senza questo livello di astrazione risulterebbe scomodo da utilizzare, quasi impossibile! L'astrazione necessaria al nostro hard disk, lo sappiamo bene, è il concetto di file e cartelle. E' grazie a questi due concetti che possiamo organizzare i nostri documenti!

Un file fa dunque da contenitore per i nostri dati: musica, video, immagini, testo etc... Ogni file ha un nome, lungo al massimo 256 caratteri. Per il nome possiamo usare tutti i caratteri dell'alfabeto, i numeri, i simboli di punteggiatura e sottolineatura. Sono invece vietati alcuni caratteri speciali come il punto interrogativo, lo spazio e l'asterisco. Questa limitazione verrà chiarita negli articoli successivi. Una cartella, invece, fa da contenitore per i file. In Linux i nomi di file e cartelle sono case sensitive. Cosa significa questo? Per il sistema operativo i nomi "nome_file" e "NOME_FILE" individuano due file distinti! Il sistema operativo distingue i caratteri scritti in maiuscolo da quelli scritti in minuscolo contrariamente a quanto avviene invece sotto i sistemi operativi Windows.

Mentre l'organizzazione dei documenti è lasciata all'utente, ogni utente dispone di un propria cartella detta anche home dell'utente (che assume in molti casi proprio il nome dell'utente), la gestione dei file e delle cartelle di sistema è per ovvi motivi lasciata al sistema operativo. Come organizza i file un sistema operativo GNU/Linux?

Il file system di un sistema GNU/Linux definisce una cartella, detta directory principale o radice, per raccogliere in seguito tutti i file e le cartelle. La directory principale è identificata dal seguente simbolo: /.  La struttura di un file system ricorda quella di un albero (capovolto), la directory principale è per questo motivo detta anche directory radice!

La directory principale è dunque un contenitore per altre cartelle e file. Per l'accesso a una cartella o file è indispensabile fornire un indirizzo che indica il percorso all'interno dell'albero. Tale percorso può essere assoluto se l'indirizzo inizia dalla directory principale, oppure relativo se l'indirizzo inizia a partire da una certa cartella (la directory di lavoro corrente, come vedremo in seguito). Per separare i nomi delle directory che compongono un percorso si usa ancora una volta il carattere / (che non può essere confuso con la directory principale, il cui simbolo può solo trovarsi all'inizio di un indirizzo). Pertanto, l'indirizzo /usr/bin/ identifica la cartella bin che si trova nella cartella usr che a sua volta si trova nella cartella principale /.

Nei file system usati dai sistemi operativi GNU/Linux (e in generale nei sistemi operativi Linux-like) troviamo in ogni cartella due cartelle particolare (anche se la cartella è vuota!). Si tratta in realtà dei collegamenti alla directory corrente e alla directory padre (quella che fa da contenitore alla directory corrente). La presenza di queste due cartelle è particolarmente utile per effettuare spostamenti all'interno del file system. Il collegamento alla directory corrente è individuato dal simbolo ./ mentre quello alla directory padre dal simbolo ../. Se ad esempio mi trovo nella cartella /usr/bin/ con l'indirizzo ../ intendo referenziare la directory padre e quindi la directory /usr/. Esiste poi una notazione per indicare in maniera compatta la directory dell'utente (che potrebbe essere ad esempio /home/nome_utente/) attraverso il simbolo ~.

Come dicevo poco fa il sistema operativo realizza sul file system una struttura di cartelle per l'allocazione dei file sul disco. Tale struttura può variare leggermente in ogni sistema operativo GNU/Linux (distribuzioni), in generale essa prevede all'interno della directroy principale le seguenti cartelle: bin, boot, dev, etc, home, lib, lost+found, mnt, proc, opt, root, sbin, tmp, usr e var. Vediamo come...:

  • bin: in questa cartella si trovano i file e i collegamenti ai comandi (non tutti) che solitamente invochiamo dalla riga del terminale;
  • boot: qui troviamo i file usati per l'avvio del sistema operativo, come il file vmlinuz, il kernel compresso (il nome del file è solitamente seguito dal numero di versione del kernel usato). All'interno di questa cartella troviamo anche la cartella usata dal boot loader (come Grub) il programma che avvia il sistema operativo (sotto directory /boot/grub/). Se cercate i file che configurano il boot loader date uno sguardo qui, oppure nel file /etc/grub.conf;
  • dev: in GNU/Linux ogni periferica o dispositivo è visto come su file, qui trovate i file collegati alle periferiche;
  • etc: in questa cartella si trovano i file di configurazione dei programmi (ogni programma potrebbe avere in questa cartella una propia cartella, con il nome del programma, come ad esempio la cartella /etc/firefox/). All'interno troviamo numerose sotto directory! Se il nostro sistema operativo usa il gestore di pacchetti APT (Advanced Packaging Tool) troveremo allora la cartella /etc/apt/ con all'interno i file source.list con gli indirizzi dei server usati per il prelievo dei pacchetti software dalla rete (i famosi repository, ne parleremo in seguito). Il file /etc/fstab contiene la tabella dei file system e indica i dispositivi che devono essere montati (con le eventuali opzioni) all'avvio. La cartella /etc/init.d/ contiene gli script da eseguire all'avvio e nel file /etc/modules sono elencati i moduli (il kernel del sistema operativo è modulare e all'occorrenza possono essere aggiunti pezzi di codice, i moduli, per la gestione di periferiche);
  • home: in questa cartella viene solitamente creata una cartella per ogni utente (detta cartella di home dell'utente) abilitato all'uso del computer. Il nome della cartella coincide con il nome dell'utente. Molte applicazioni salvano qui, in file e cartelle nascoste, la configurazione usata dall'utente! Nella maggior parte dei casi questi file non sono visibili attraverso il gestore grafico dei file, il cosiddetto file manager. Occorre infatti abilitare la visualizzazione di tali file (nascosti) oppure interrogare il sistema operativo attraverso il terminale con un opportuno comando (che vedremo in seguito);
  • lib: raccoglie file di librerie di programmi. In questo modo più programmi possono condividere la stessa libreria;
  • lost+found: se per qualche motivo il disco perde qualche file o cartella (ad esempio perché il sistema operativo non viene spento bene) in questa cartella troviamo i file recuperati, all'avvio, dal sistema operativo;
  • mnt: ogni periferica dotata di un proprio file system, lettori cd-rom e/o dvd, pen-drive usb e schede di memorie vengono attaccate (operazione di mount) al file system del computer in questa cartella (oppure nella cartella /media/);
  • proc: ogni programma in esecuzione su un sistema GNU/Linux è identificato da un codice (PID, Process ID), in questa cartella sono tenute le informazioni sui processi in esecuzione. Ad ogni processo in esecuzione viene assegnata una cartella (il cui nome corrisponde al PID), all'interno di questa ogni file raccoglie informazioni sul processo: l'attuale stato, la memoria utilizzata, la percentuale di processore impegnata etc... Tranquilli, quando siamo a caccia di queste informazioni non è necessario fare una ricerca in questa cartella, esistono dei precisi comandi che svolgono questo lavoro e rendono quindi visibile l'output (sia su terminale che in una interfaccia grafica).  All'interno della cartella /proc/ prendono posto anche alcuni file con le informazioni sul sistema;
  • opt: questa cartella viene usata (non sempre) dal sistema operativo per installare il software aggiunto dall'utente attraverso il gestore di pacchetti;
  • root: è la directory home dell'utente root, l'amministratore del computer;
  • sbin: raccoglie tutti i comandi e gli script eseguibili solo dall'utente root;
  • tmp: raccoglie tutti i file temporanei. Alcune distribuzioni puliscono questa cartella all'avvio del sistema operativo, altre invece effettuano una pulizia solo ciclicamente. Il mio consiglio è quello di lasciare al sistema operativo la gestione di questa cartella;
  • usr: raccoglie i programmi installati e messi a disposizione dell'utente. In /usr/bin/ si trovano i file dei comandi a disposizione dell'utente. Nelle cartelle /usr/man/ e /usr/doc/ vengono allocate rispettivamente le pagine del manuale (comando man) e la documentazione del software. Particolarmente popolata è la cartella /usr/share/, dove ogni software installato ha una propria cartella;
  • var: contiene file il cui contenuto varia durante l'esecuzione del sistema operativo. Raccoglie i pacchetti scaricati e installati attraverso il gestore di pacchetti nella cartella /var/cache (ad esempio nella cartella /var/cache/apt/);

Vi invito a verificare personalmente la struttura del vostro file system attraverso il file manager della vostra distribuzione! Nei prossimi articoli ci occuperemo dei comandi per il terminale, conoscerli e capirli non può che essere un bene.

Nessun commento:

Posta un commento