Spesso per ``file system'' si intende l'organizzazione a basso livello dei file e delle directory sul corrispondente mezzo fisico di memorizzazione, che la maggior parte delle volte è una partizione di un disco rigido (fisso). Una panoramica sull'organizzazione del file systema di UNIX sarebbe estremamente interessante e permetterebbe anche di capire che si tratta di qualcosa di così efficiente da rendere praticamente inutile un'utility di deframmentazione dei file (defrag). Tuttavia, affrontare tale argomento sarebbe al di là degli scopi di quello che sto scrivendo: vi basti sapere che Linux ha un file system di ottima fattura ed estremamente efficiente, che, a parte casi eccezionali, non dà noie se non si fanno cose strane in veste di amministratore del sistema. Nel seguito per file system si intende l'albero delle directory corrispondente a una generica installazione: analizziamone alcune parti.
Non tutte le installazioni di Linux hanno lo stesso albero delle directory, in particolare ogni distribuzione può presentare delle differenze anche significative da una release all'altra; inoltre, da questo punto di vista le varie distribuzioni di Linux possono differire anche notevolmente tra loro. Credo che non ci si debba stupire di ciò, dato che ci stiamo muovendo in un mondo libero, ``free'', in cui senz'altro non si desidera essere omologati...
Quindi, per fare un'esposizione utile e sensata, non vengono riportate tutte le directory, ma solo le più importanti, e non si scende più di un livello dentro l'albero. Nell'illustrazione che sto considerando faccio riferimento a Linux RedHat.
/_____ bin |__ boot |__ dev |__ etc _____ X11 | |__ rc.d | |__ home_____ bosco | |__ chianura | |__ cianca | |__ ciaglia | |__ donati | |__ pratesi |__ lib |__ lost+found |__ mnt _____ cdrom | |__ floppy |__ proc |__ root |__ sbin |__ tmp |__ usr_____ X11R6 | |__ bin | |__ doc | |__ include | |__ info | |__ lib | |__ local | |__ man | |__ sbin | |__ share | |__ src |__ var
Il file system ha origine in /, detta ``root'' o directory radice. Si nota esplicitamente che root è anche la username dell'amministratore di sistema, la cui home directory è /root.
/bin e /usr/bin contengono quasi tutti i comandi per l'utente. Come si può intuire, bin sta per ``binaries'', cioè per file binari eseguibili, mentre usr sta per ``user'', cioè utente. In questo momento, sul computer di casa, nella partizione dedicata all'installazione di Linux RedHat 5.2, contano rispettivamente più di 80 e 700 file. L'utente può avere a disposizione altri comandi in /usr/local/bin; tra quest'ultima directory e /usr/bin c'è fondamentalmente una sola differenza: per convenzione, nella prima vanno file che derivano dai pacchetti della distribuzione, mentre abitualmente l'amministratore di sistema mette nella seconda ciò che viene aggiunto a valle, per esempio compilando i sorgenti di un applicativo che la distribuzione non offre. In definitiva, questa convenzione viene usata solo per questione di ordine e di leggibilità delle scelte fatte dall'amministratore di sistema. Ad esempio, sul computer su cui sto scrivendo uso una versione di gnuplot diversa (più potente) da quella inclusa nella RedHat 5.2; il corrispondente eseguibile si trova in /usr/local/bin. Più precisamente, /usr/local può avere molte directory analoghe a quelle riguardanti l'organizzazione di /usr, dato che /usr/local e /usr differiscono solo per l'essere la prima una directory ``locale'', la seconda una directory consegnata ``chiavi in mano'' con il sistema installato.
Altre directory importanti sono /sbin e /usr/sbin; sono analoghe a /bin e /usr/bin, la ``s'' sta per Superuser ed è riferita al ``root''. Infatti contengono soprattutto comandi usati per l'amministrazione di sistema. In questo momento, su questo computer, /sbin e /usr/sbin contengono 80 - 90 file ciascuna.
Soffermiamoci ancora su /usr. L'albero corrispondente alla sua sottodirectory X11R6 contiene ciò che riguarda l'X Window System, che ci permette di avere a disposizione un'interfaccia grafica comoda, potente e versatile, basata su un paradigma client-server. Dalla sottodirectory doc in giù si può trovare molta documentazione. La directory /usr/man contiene delle sottodirectory in cui si trovano dei file corrispondenti alle pagine di manuale in linea.
/etc è una directory il cui nome ha un'origine curiosa; forse, dopo aver dato un nome a tante directory, si era rimasti a corto: ``etc'' sta per ``etcetera''. Forse, però, il nome della directory deriva dal fatto che che contiene i file di configurazione di quasi tutto ciò che il sistema comprende: se dovessimo elencare i suoi file e il loro significato, prima o poi diremmo ``eccetera''... Normalmente /etc ha una sottodirectory di nome X11 contenente i file di configurazione riguardanti l'X Window System; tuttavia questo non è sempre vero (esempio: Linux Slackware 3.5). /etc/rc.d contiene gli script di avvio del sistema, che senza di essi non potrebbe essere avviato. Non scendo ulteriormente nel dettaglio, dato che sarebbe un argomento complesso, però sottolineo che questa è una delle directory su cui due distinti sistemi UNIX possono differire di più; in particolare, in questo senso System V e BSD sono organizzati in due modi molto diversi. Per ciò che riguarda Linux, si può dire che su questo Slackware somiglia molto a BSD, mentre RedHat fa riferimento a System V.
Da /home in giù si trovano le home directory degli utenti del sistema, di cui si parlerà un po' più avanti.
Ancora: su Linux RedHat la directory /boot contiene ciò che serve all'avvio del sistema, per esempio il kernel. /dev contiene dei file speciali che servono a gestire le device. /lib, come anche, ad esempio, /usr/lib e /usr/X11R6/lib, contiene delle librerie di sistema. /mnt serve a ``montare'' i CD-ROM e i floppy disks. /proc corrisponde a un particolare file system utilizzato per la gestione dei processi. /tmp è una directory di file temporanei. /var contiene diverse cose importanti, come gli ``spool'' (le code) di stampa e della posta elettronica, vari messaggi raccolti dal sistema perché l'amministratore possa osservare l'andamento del sistema, e così via.