Basic shell
La Command Line Interface
Un tool indispensabile di un amministratore di sistema Unix (e ovviamente Linux) è sicuramente la Command Line Interface (CLI), l’interfaccia a riga di comando, chiamata anche Text User Interface per differenziarla dalla Graphical User Interface – la GUI, l’interfaccia utente grafica.
Sostanzialmente si tratta di un programma che interpreta ed esegue comandi letti da file o standard input (quindi generalmente inseriti tramite tastiera) e che comunica con l’utente per mezzo di messaggi mostrati su standard output (il monitor usualmente).
Questo modo di amministrare è molto utilizzato soprattutto in virtù della sua rapidità di esecuzione e della sua versatilità.
La CLI nella sua veste grafica viene chiamata “emulatore di terminale”, questo per differenziarla dall’originale “terminale”, un apparecchio ormai pressoché in disuso. Nell’uso odierno l’accezione “terminale” sta ad indicare l’emulatore di terminale.
Dipendentemente dall’ambiente grafico utilizzato, l’emulatore di terminale di default ha differenti nomi, ma la sostanza è sempre la stessa. Ad esempio, in un ambiente grafico GNOME si chiama gnome-terminal, in KDE invece konsole, in XFCE xfce4-terminal, e cosi via. Esistono comunque anche altri emulatori di terminale che non sono legati al window manager utilizzato, con caratteristiche analoghe, ma generalmente più scarni di funzionalità accessorie e quindi meno esigenti nella richiesta di risorse di sistema, come ad esempio xterm, xvt, aterm, giusto per citare i più rinomati.
La Shell
Sia gli emulatori di terminale che le console una volta avviati lanciano l’esecuzione di una “shell” che è il vero e proprio programma che interpreta i comandi ivi digitati: una “conchiglia” al cui interno esiste un intero ecosistema con variabili d’ambiente e con un set di comandi che permettono di:
- spostarsi nel file system;
- copiare, rinominare, rimuovere file e directory;
- gestire i processi in esecuzione e molto altro, tra cui anche la possibilità di lanciare l’esecuzione di comandi e applicazioni non integrate nella shell stessa, intesa come programma, detti pertanto comandi esterni (si veda il paragrafo 5.4, “Comandi interni e comandi esterni”).
Mentre la scelta dell’emulatore di terminale è una questione quasi estetica, quella della shell può invece rappresentare una scelta funzionale, soprattutto quando si parla di scripting, cioè programmazione della shell. Vi sono molte shell disponibili negli ambienti Unix e citando quelle maggiormente diffuse troviamo:
- bash, la Bourne Again Shell, per differenziarla dall’originale shell (“sh”) di Bourne. È compatibile con gli standard IEEE POSIX e implementa funzionalità più avanzate di derivazione della ksh e csh. Generalmente è la shell di default nelle distribuzioni Linux.
- tcsh, la TENEX C Shell, una versione avanzata dell’originale Berkeley Unix C Shell.
- ksh, la Korn Shell, nata come estensione (superset) dell’originale sh, default in sistemi Unix come IBM AIX e SUN Solaris.
- zsh, una shell moderna con funzionalità molto avanzate
- dash, la Debian Almquist Shell, una shell standard POSIX leggera con poche dipendenze di librerie, più robusta e veloce della bash e pertanto ben adatta per l’esecuzione di script (che vedremo più sotto).
Ogni shell ha dei file di controllo e di configurazione che vengono salvati all’interno della home utente. Tali file hanno lo scopo di definire e personalizzare l’ambiente di lavoro di quell’utente specifico. Prendiamo in analisi la shell di default nella maggior parte degli ambienti Linux, la bash. Nella home dell’utente possiamo trovare almeno tre file nascosti
- il loro nome inizia con un carattere punto
(“.”) – relativi a questa shell:
- .bashrc : contiene comandi e configurazione di variabili d’ambiente che vengono richiamati ogni qual volta viene lanciata una shell bash; praticamente un file di inizializzazione dell’ambiente su cui si andrà a lavorare.
- .bash_history: registra un certo numero degli ultimi comandi inseriti da tastiera. Nella bash il default è 500.
- .bash_logout: contiene i comandi da eseguire nel momento in cui l’utente chiude la shell. Di solito è vuoto o richiama un comando che pulisce la console, ma può essere personalizzato ad esempio per lanciare un backup, per mandare una e- mail o altro.
Per ogni shell esistono file di controllo analoghi a quelli ora mostrati.