2.2. Shell e filesystem

Quando si effettua il login (solitamente ci si autentica con il proprio nome utente e password al prompt di Login:), ci si confronta con una riga di comando testuale, qualcosa che può ricordare il DOS, ma qui finisce la somiglianza (perciò non si cada in confronti inappropriati). Quello che si sta guardando di fatto è bash uno dei popolari programmi shell. In generale i programmi shell servono da agenti tra l'utente e il sistema (accettano comandi, restituiscono output) e sono tutti, in realtà, linguaggi di programmazione più o meno sofisticati.

Il software del computer è basato su file. I file abitano nelle directory (non cartelle), che sono collocate su partizioni di disco virtuali, fisiche, locali o in rete. In Unix, ogni sistema ha una partizione root che è montata (si pensi ad "associata") nella directory root (indicata da /) e funziona come punto di accesso al filesystem. Per esempio /home/mario/.profile (chiamato pathname o percorso, percorso assoluto o percorso completo) significa che esiste un file chiamato .profile che si trova nella directory /home/mario/. In questo esempio, mario/ è ovviamente una sottodirectory di home/ e home/ è una sottodirectory di /, la directory root.

Nota

I file che iniziano con un punto (come .profile subito sopra), sono chiamati dotfile. Essi solitamente contengono impostazioni di configurazione per vari programmi e sono pertanto considerati di interesse secondario e abitualmente omessi durante la visualizzazione delle directory. È il magico punto (.) all'inizio che li rende "invisibili", ma solo allo scopo di non aggiungere rumore di fondo all'output e decisamente non nella speranza di "nascondere" i file.

Ciascun file in Unix appartiene ad un utente e ad un gruppo di utenti. In aggiunta ci sono modi file (o permessi sui file) che controllano quali operazioni sono permesse al proprietario del file, al gruppo del file e a chiunque altro. Le uniche directory che gli utenti normali possono modificare sono le loro directory home (abitualmente /home/NOMEUTENTE) e le directory temporanee di sistema (/tmp e /var/tmp).

NotaPermessi Unix sul filesystem
 

Seppure, nel concetto tradizionale, un file o directory appartengono ad un utente e ad un gruppo, varie evoluzioni sono state rese disponibili nel tempo. Tra queste due importanti sono le soluzioni ACL (Lista di Controllo di Accesso) e RBAC (Controllo di Accesso Basato sul Ruolo).

Le ACL permettono di avere file (e naturalmente directory) con permessi potenzialmente differenti per ogni utente o gruppo di sistema. I sistemi RBAC permettono di assegnare agli utenti dei "ruoli" e poi garantire loro accessi ai file correlati con il ruolo.

È importante notare, tuttavia, che il tradizionale concetto, seppur banale in principio, offre una straordinaria flessibilità e soddisfa completamente tutte le necessità generali.

Riguardo alla "navigazione" del filesystem, c'è il concetto di directory corrente che fornisce la posizione attiva (di lavoro) nel filesystem. Si può scoprire la directory di lavoro in qualsiasi momento digitando pwd nella propria shell. Quando si effettua il login sul sistema e si avvia la shell, essa porta alla propria directory home, che è così il proprio punto di partenza.

In aggiunta, con Unix, generalmente non si ha la necessità di inventare la posizione delle directory per il software di sistema che si vuole installare. Il software è installato in posizioni predeterminate, seguendo uno schema superiore. Alcune directory che è necessario conoscere sono:

Perché il software sia installato in posizioni predeterminate è facile da spiegare: Unix ed i filesystem Unix permettono a directory e subdirectory apparentemente standard di essere montate in posizioni completamente differenti: partizioni di dischi locali, partizioni di rete o dischi RAM per nominarne alcune.

Quando si ha la necessità di gestire posizioni di file e directory con grande precisione, allora entrano in gioco i collegamenti simbolici e fisici, GNU Stow o dpkg-divert (ma questi sono tutti concetti avanzati sui quali ritorneremo in seguito).

Nota

Nel precedente elenco di directory, si può avere notato un modello. Per esempio c'è la sotto-directory bin in tutte le directory /, /usr/ e /usr/local/.

Directory e file che si trovano nella directory radice (/) sono tutti file ufficiali della distribuzione (quelli di Debian GNU o di altri pacchetti a seconda di quale Unix stiamo parlando) e di fatto quelli che sono essenziali al sistema per avviarsi. Questa è una sorta di reminiscenza storica, dai tempi in cui i sistemi venivano avviati usando il nastro "root" e poi un altro nastro, "user", montato in /usr/. Questa tecnica è per la sua facilità d'uso ancora utilizzata oggi con tutti i sistemi Unix impostati correttamente (beh, eccetto forse the Hurd, se lo si considera essere parte della medesima squadra).

Anche le directory e i file in /usr/ sono file ufficiali della distribuzione, ma non essenziali per l'avvio del sistema. Una larga maggioranza del software appartiene a questo gruppo.

Infine, le directory in /usr/local/ contengono software installato localmente (che non proviene dalla distribuzione ufficiale del sistema operativo), da cui la posizione e il nome separato "local".

C'è anche la directory share che si può incontrare in giro; contiene file che sono indipendenti dalla piattaforma hardware e sono i medesimi su tutte le architetture supportate.