Capitolo 3. File e file system
3.2. Orientarsi nel file system
3.2.3. I file e le directory più importanti
3.2.2. Percorsi assoluti e relativi
Un percorso (path), cioè la strada da seguire nella struttura ad albero per raggiungere un certo file,
può essere descritto partendo dal tronco dell'albero (la “/” o directory radice). In tal caso, il
percorso inizia con una sbarra e viene chiamato percorso assoluto, dal momento che non possono
esserci errori: nel sistema solo un file potrà corrispondervi.
Nell'altro caso, il percorso non inizia con una sbarra ed è possibile confondere tra ~/bin/wc
(nella directory home dell'utente) e bin/wc in /usr come nell'esempio precedente. I percorsi che
non iniziano con una sbarra sono sempre relativi.
Nei percorsi relativi usiamo anche . e .. per indicare la directory corrente e quella genitrice. Una
coppia di esempi pratici:
●
Quando volete compilare del codice sorgente, spesso la documentazione di
installazione vi dice di avviare il comando ./configure, che lancia il programma
configure collocato nella directory corrente (creata con il nuovo codice) invece di
eseguire un altro programma configure presente altrove nel sistema.
●
Nei file HTML i percorsi relativi sono spesso utilizzati per creare un insieme di
pagine facilmente trasferibili in altri posti:
<img alt=”Garden with trees” src=”../images/garden.jpg”>
●
Notate la differenza ancora una volta:
theo:~> ls /mp3
ls: /mp3: No such file or directory theo:~> ls mp3/
oriental/ pop/ sixties/
3.2.3. I file e le directory più importanti
3.2.3.1. Il kernel
Il kernel è il cuore del sistema: gestisce le comunicazioni tra l'hardware sottostante e le periferiche.
Il kernel assicura inoltre che processi e daemon (demoni o processi server) vengano avviati e
fermati al momento giusto. Ha una quantità così grande di altri compiti importanti che esiste una
speciale mailing list, dedicata allo suo sviluppo, che si occupa solo di questo argomento e dove
vengono condivise montagne di informazioni. Dibattere in dettaglio sul kernel ci porterebbe troppo
lontano: per ora è sufficiente sapere che il kernel è il file più importante del sistema.
3.2.3.2. La shell
3.2.3.2.1. Cos'è una shell?
Cercare una spiegazione appropriata del concetto di shell mi ha creato più problemi di quanti mi
attendessi. Sono disponibili tutti i generi di spiegazioni, che vanno dal semplice paragone come “la
shell è lo sterzo di un'auto”, alla vaga definizione del manuale di Bash che afferma che “bash è un
interprete del linguaggio a comandi compatibile sh” o ad altre ancora più oscure espressioni come
“una shell gestisce l'interazione tra il sistema e i suoi utenti”. Una shell è molto più di questo.
Una shell può essere meglio paragonata ad un mezzo per parlare con il computer, un linguaggio.
Molti utenti conoscono quell'altro linguaggio, il linguaggio “puntaeclicca” del desktop, ma con
esso il computer guida la conversazione, mentre l'utente assume il ruolo passivo di selezionare le
funzioni che questo gli presenta. E' molto difficile per un programmatore includere tutte le opzioni
e gli usi possibili di un comando in un formato GUI. Così le GUI sono quasi sempre meno potenti
del comando o dei comandi che formano il backend [cioè su cui queste si appoggiano per svolgere
le varie funzioni].
La shell, d'altro canto, è una maniera evoluta di dialogare con il sistema poiché consente la
conversazione nei due sensi e di assumere l'iniziativa. Entrambe le parti della comunicazione sono
uguali, così si possono sperimentare nuove idee. La shell permette all'utente di gestire un sistema
in modo piuttosto flessibile e, come ulteriore vantaggio, di automatizzare i compiti.
3.2.3.2.2. Tipi di shell
Come la gente conosce linguaggi e dialetti differenti, così il computer conosce tipi diversi di shell:
●sh o Bourne Shell: la shell originale ancora utilizzata su sistemi UNIX e in ambienti
collegati a UNIX. E' la comune shell, un piccolo programma con poche funzioni.
Quando è in modalità POSIXcompatibile bash emula questa shell.
●
bash o Bourne Again SHell: la shell GNU standard, intuitiva e flessibile.
Probabilmente molto consigliabile sia ai principianti sia, contemporaneamente, agli
esperti e professionisti essendo uno strumento molto potente. In Linux bash è la shell
standard per i comuni utenti. Tale shell viene anche detta superinsieme della shell
Bourne, un insieme di aggiunte e plugin. Ciò significa che la shell Bourne Again è
compatibile con quella Bourne: i comandi che funzionano con sh, funzionano pure
con bash. Comunque non è sempre vero il contrario. Tutti gli esempi e gli esercizi di
questo libro usano bash.
●
csh o C Shell: la sintassi di questa shell assomiglia a quella del linguaggio di
programmazione C. Qualche volta viene richiesta dai programmatori.
●
tcsh o Turbo C Shell: un superinsieme della comune C shell, che aumenta la
semplicità e la velocità.
●
ksh o Korn shell: apprezzata qualche volta da persone con esperienze di UNIX. E' un
superinsieme della Bourne shell: in configurazione base è un incubo per i
principianti.
Il file /etc/shells offre una panoramica delle shell conosciute da un sistema Linux:
mia:~> cat /etc/shells /bin/bash
/bin/sh /bin/tcsh /bin/csh
Bourne shell falsa
Notate che normalmente /bin/sh è un collegamento a Bash, che, se chiamata in
questo modo, verrà eseguita in modalità Bourne shell.
La vostra shell di base è impostata nel file /etc/passwd, come in questa linea che riguarda
l'utente mia:
mia:L2NOfqdlPrHwE:504:504:Mia Maya:/home/mia:/bin/bash
Per passare da una shell all'altra, basta solo inserire il nome della nuova shell nel terminale attivo. Il
sistema trova la directory dove ricorre il nome usando le impostazioni di PATH e, dal momento che
una shell è un file eseguibile (programma), la shell corrente la attiva e la manda in esecuzione.
Abitualmente appare un nuovo prompt perché ogni shell ha il proprio aspetto tipico:
mia:~> tcsh [mia@post21 ~]$
3.2.3.2.3. Quale shell sto usando?
Se non sapete quale shell state utilizzando, potete sia controllare la linea del vostro account in
/etc/passwd, sia dare echo $SHELL come comando.
3.2.3.3. La vostra home directory
Quando vi connettete al sistema, la vostra home directory [directory personale] è la destinazione
iniziale. In molti casi si tratta di una sottodirectory di /home, sebbene possa variare. La vostra
home directory può essere collocata nel disco rigido di un file server remoto: in questo caso essa si
può trovare in /nethome/vostronomeutente. In caso diverso l'amministratore di sistema
può aver optato per una struttura meno comprensibile e la vostra directory, ad esempio, potrebbe
essere su /disk6/HU/07/jgillard.
Non dovete preoccuparvi eccessivamente di quale sia il percorso della vostra home directory: infatti
il percorso corretto è conservato nella variabile d'ambiente HOME, nel caso alcuni programmi ne
abbiano bisogno. Con il comando echo potete vedere il contenuto di questa variabile:
orlando:~> echo $HOME /net/home/orlando
directory quanti ne volete, sebbene lo spazio totale per dati e i file sia naturalmente limitato a causa
dell'hardware, delle dimensioni delle partizioni e, alle volte, dall'applicazione di un sistema di quota
da parte dell'amministratore. Era infatti pratica comune limitare l'uso del disco quando i dischi
rigidi erano ancora costosi. Al giorno d'oggi i limiti vengono applicati quasi esclusivamente in
grossi ambienti. Potete verificare da voi stessi l'esistenza di un limite utilizzando il comando quota:
pierre@lamaison:/> quota -vDisquotas for user pierre (uid 501): none
Nel caso siano state stabilite delle quote, otterrete una lista delle partizioni limitate e delle loro
specifiche limitazioni. L'eccedere i limiti può essere comunque tollerato per un breve periodo con
alcune minime o nulle restrizioni. Informazioni dettagliate si possono trovare usando i comandi info
quota o man quota.
Nessuna Quota?
Se il vostro sistema non riesce a trovare quota, allora significa che non sono state
applicate limitazioni all'uso del file system.
La vostra directory personale viene indicata con una tilde (~), abbreviazione di
/path_to_home/nome_utente. Lo stesso percorso è conservato nella variabile HOME,
cosicché non dovete fare nulla per attivarlo. Una semplice applicazione: passare da
/var/music/albums/arno/2001 a images contenuta nella vostra directory personale
utilizzando un comando elegante:
rom:/var/music/albums/arno/2001> cd ~/images rom:~/images> pwd /home/rom/imagesPiù avanti in questo capitolo discuteremo dei comandi per la gestione dei file e delle directory allo
scopo di mantenere ordinata la vostra directory personale.
Nel documento
Introduzione a Linux
(pagine 57-60)