Con questo articolo, inizia una specie di guida a puntate sulla shell Bash, ovvero la famosa, o famigerata, linea di comando, autentica croce e delizia di ogni utente Linux.
Iniziamo citando da Wikipedia la definizione di shell:
In un sistema operativo, una shell (o terminale) è un programma che permette agli utenti di comunicare con il sistema e di avviare altri programmi. è una delle componenti principali di un sistema operativo, insieme al kernel.
La shell è l'ambiente di lavoro attraverso il quale è possibile impartire al computer comandi, richiedendo l'esecuzione di programmi. Una classe specifica di tali programmi sono gli Shell script.
Appare chiaro, già con queste poche righe, che un uso consapevole di tale strumento può rivelarsi oltremodo soddisfacente, dando la possibilità di manipolare al meglio il sistema.
Ecco il perchè di questa guida, spesso un utente usa per mesi Linux senza avere la minima idea del fatto che molte operazioni possono essere portate a termine in pochi semplicissimi passi. Ovviamente non pretendo di essere esaustivo (un manuale completo comprende centinaia di pagine), ma spero di fornire qualche dritta che permetta di iniziare ad usare il sistema operativo in maniera più interattiva.
La shell presente in Ubuntu è Bash (Bourne Again SHell), non è l'unica esistente, ma è tra le più usate, per cui ci concentreremo su questa. Allora, andiamo ad aprire il nostro terminale (o console), per farlo basta andare a cercare la relativa voce nel menu di sistema, oppure aprire una delle 6 console virtuali presenti in ogni distribuzione Linux (denominate tty, da 1 a 6). Per accedervi si usa la combinazione di tasti CTRL+ALT+Fn
, dove la n
finale va sostituita con uno dei numeri da 1 a 6 appunto (per capirci, si entra nell tty1 con la combinazione CTRL+ALT+F1
). In questo caso sarà richiesto il login, ovvero l'inserimento di nome utente e password (li stessi che usate all'avvio). Si ritorna alla modalità grafica poi con la combinazione ALT+F7
.
In un modo o nell'altro, a questo punto ci troveremo di fronte al prompt:
nomeutente@nomecomputer ~ $
Conoscete il significato di questa espressione?
La shell è a tutti gli effetti un ambiente di scripting, e come tale possiede alcune variabili di ambiente la cui conoscenza può tornare utile, ad esempio, la scrittura echo $USER
(dove USER
è la variabile di ambiente) restituisce il nome utente con il quale si è al momento connessi.
I comandi che possono essere eseguiti in Bash sono file eseguibili (un esempio, il conosciutissimo ls), oppure script, ovvero sequenze di comandi che vengono interpretate ed eseguite sequenzialmente. Per una panoramica sui comandi di base, vi rimando alla documentazione della comunità italiana di Ubuntu, qui. I comandi possono essere eseguiti semplicemente digitando il loro nome (a patto che la directory in cui sono contenuti faccia parte della variabile d'ambiente PATH), oppure invocati digitando il loro percorso all'interno del OS (es. /usr/bin/nomecomando), sia in senso assoluto che relativo.
Prima di proseguire, occorre chiarire quanto appena detto: il nostro sistema ha una directory radice, indicata da /
, che rappresenta appunto la "base" dell'intero albero di directory presente sul nostro disco fisso. Allora, per percorso assoluto si intende partendo da /
, per percorso relativo invece intendiamo a partire dalla directory corrente.
Un semplice esempio: il comando cd serve a cambiare directory, supponendo di trovarsi in ~ (ovvero /home/utente/
), il comando
cd Immagini
farà si che ci si sposti in /home/utente/Immagini
, ma il comando
cd /Immagini
farà si che ci si sposti in /Immagini
, e se questa directory non esiste, restituirà un errore. Occhio quindi a digitare correttamente il percorso!!
Inoltre, sono presenti due particolari directory, .
e ..
, rispettivamente indicanti la directory corrente e la directory superiore (parent directory), quindi
cd ./Documenti/docs
farà in modo di spostasi in /home/utente/Documenti/docs
(a partire dalla directory corrente, si sposta in quella richiesta); il comando
cd ../Immagini
invece si sposterà prima nella directory superiore, poi in Immagini
. Ovviamente, tenete d'occhio anche le maiuscole, in quanto Bash è case sensitive, quindi Immagini e immagini sono due directory distinte!!
A questo punto, prima di chiudere questa lunga introduzione, è d'obbligo mettervi in guardia sull'uso della shell. Questa è uno strumento potentissimo, che usata correttamente è in grado di automatizzare completamente un'operazione anche complessa (vedremo che in uno script è possibile inserire test condizionali e cicli), ma usata in modo scorretto, o distrattamente, può causare disastri.
Un esempio classico che troverete descritto in tantissimi casi?? Il comando rm serve a rimuovere files, e l'opzione -fR rimuove tali files ricorsivamente (entrando nelle sottodirectory) e forzatamente. Bene, il comando
sudo rm -fR /home/utente/dir1
cancella la directory dir1
, ed è quello che si intendeva fare, ma attenzione, il comando
sudo rm -fR / home/utente/dir1
in cui sbadatamente si è introdotto uno spazio, cancella prima la /
e poi la directory indicata.. In altre parole, avreste cancellato l'intero contenuto del disco fisso!!
Ci si può aiutare con l'autocompletamento, ovvero, provate a scrivere semplicemente cd e poi a premere il tasto TAB due volte, vedrete che la shell vi suggerirà i percorsi disponibili. Questo comportamento vale per gran parte delle situazioni.
Nel prossimo articolo cominceremo a parlare di script veri e propri..
Alla prossima..