Speciale La shell di linux

Un rapido sguardo ai comandi e alle funzionalità più importanti della shell

INFORMAZIONI SCHEDA
Articolo a cura di

La shell

“Una shell testuale è un programma con interfaccia a linea di comando, che viene eseguito all'interno di un terminale testuale. L'utente digita un comando, ovvero richiede l'esecuzione di un programma, e il programma eseguito può interagire con l'utente e/o stampare dati sul terminale.”
Questa è la definizione di shell data da Wikipedia, l'enciclopedia libera, definizione essenziale e precisa. La shell è lo strumento più potente nelle mani dell'utente, il mezzo attraverso il quale gestire il sistema a proprio piacimento.
Esistono numerosi tipi di shell, i più utilizzati sono: Bourne shell (sh), Korn shell (ksh), C shell (csh), TC Shell (tcsh), Public Domain Korn Shell (pdksh) e Bourne Again Shell (bash).
La shell più utilizzata in assoluto è la bash, ormai standard nelle maggiori distribuzioni linux e argomento principale di questo articolo essendo quella con la quale la maggior parte degli utenti linux avranno a che fare.

I comandi più importanti

La shell, come già detto, è lo strumento di gestione più potente a nostra disposizione. Imparare ad utilizzarla è la chiave per gestire al meglio il proprio computer. Attraverso la shell si possono creare o cancellare file, installare programmi (utilizzando il package manager della propria distribuzione, ovviamente) e fare qualsiasi operazione pensiamo di poter fare, persino navigare sul web (esistono browser testuali che permettono di navigare su internet da linea di comando).
Fondamentale è imparare a conoscere comandi su comandi, per essere in grado di fare tutto (perchè si può fare devvero qualunque cosa, persino creare piccoli programmi, e di questo parleremo in altri momenti).
Partiamo ora ad elencare qualche funzione e comando utile partendo dall'ABC della shell. Tratteremo per ora di comandi eseguibili da utente normale, senza la necessità di avere permessi di root.
Il comando fondamentale che tutti devono conoscere è sicuramente “man”: digitando infatti “man [nome_programma]”(dove a nome_programma va sostituito il nome di un programma) è possibile leggere il file man del programma scelto. Tale man è una guida che spiega la funzione del programa, la sintassi del comando, le opzioni d'avvio disponibili e via dicendo.
La funzione di questo comando è quindi quella di offrire all'utente la possibilità di conoscere ogni aspetto del sistema. Consigliamo caldamente la lettura del man di bash (“man bash”) che, anche se decisamente impegnativa, è quanto di più “educativo” ci possa essere.

Passiamo ora ad una vera e propria rassegna di alcuni dei comandi disponibili.
Possiamo spostarci da una cartella all'altra con il comando “cd [nome_cartella]”, tornare indietro con “cd ..” (fondamentale lo spazio tra cd e i ..), fare una lista dei file contenuti in una cartella semplicemente digitando “ls” (acronimo per List).
Altri due comandi di vitale importanza sono “mv [nome_file] [destinazione]” che serve a spostare (Move) file da una directory ad un'altra e “cp [nome_file] [destinazione]”, per copiare file.
Tramite il comando “top” possiamo vedere una lista dei programmi in esecuzione e relative informazioni su di essi, come statistiche sul consumo delle risorse della cpu, della memoria, dello swap (se attivo). Il comando “top” una volta lanciato rimane in esecuzione fino a quando il programma non riceve un segnale di uscita (che si da premendo contemporaneamente “ctrl” e “c”), se vogliamo non è altro che l'equivalente testuale del task manager di windows.
Comandi altrettanto fondamentali sono “mkdir [nome_cartella]” per creare cartelle, “touch [nome_file]” per creare file, “rm [nome_file]” per rimuovere un file (è caldamente consigliato leggere l'help di rm, visualizzabile con rm --help).
Exit” permette di uscire dal terminare, “eject” di aprire il carrello del lettore cd.
È importantissimo conoscere anche dei comandi fondamentali, ma che possono essere eseguiti solo dall'amministratore di sistema (root) o da un'utente che ha i permessi necessari (e in genere l'utente di default non li ha e non li dovrebbe avere): “reboot” per riavviare il sistema, “poweroff" per spegnere la vostra linux box, “dmesg” per informazioni fondamentali sul sistema.

Alcuni accorgimenti sulla shell

È importante prestare particolare attenzione a ciò che si digita da shell, in particolare quando si è loggati come root (l'utente amministratore di sistema che gode dei massimi privilegi). Per poter controllare al meglio il sistema utilizzando la shell è necessario prendere coscienza di quello che si sta facendo: non ci sono più schermate grafiche a chiederci mille volte se siamo sicuri di una operazione, e da alcune scelte spesso non si torna indietro.
Dare un “rm -rf *” (dove * è il carattere jolly che sta ad indicare tutti i file) nella propria home equivale a cancellare tutti i file sui quali avete diritto di scrittura presenti nella directory. E non ci sarà nessuno a chiedervi conferma delle vostre operazioni.
Le operazioni di gestione del sistema possono essere facilitate inserendo degli “alias” nel file .bashrc (il punto all'inizio del nome del file sta ad indicare che è un file nascosto) presente nella home di ogni utente, che permettono di eseguire comandi alternativi quando vengono dati altri determinati comandi. Inserire nel file supracitato la riga “ alias cd..="cd .." ” fa sì che quando viene digitato “cd..” la bash lo interpreti come “cd ..”.
Tornando a quanto accennato in precedenza, è possibile creare degli alias che rendano più prudente l'uso di comandi irreversibili. Inserendo "alias rm='rm -i'" il calcolatore chiederà conferma dell'eliminazione dopo ogni richiesta di Remove.

Caratteri speciali, le pipe, la redirezione del'output

Questa parte dell'articolo, dopo una prima parte puramente introduttiva e semplice, si va ad interessare di argomenti leggermente più complessi, ma importantissimi. Certamente la lettura di queste righe non si può affrontare nella pausa pranzo o in un momento di massimo relax, o quantomeno lo sconsigliamo.
Iniziamo parlando dei caratteri speciali utilizzabili nella shell:

# indica una riga commentata.

; separa i comandi, permette di inserire più comandi su una sola riga come se fossero su più righe.

. prima del nome di un file indica quelli nascosti.

* carattere jolly, può indicare tutti i caratteri inserito in una espressione regolare.

>> serve per la redirezione dell'output da un file ad un altro. L'output rediretto viene accodato a ciò che è già presente nell'altro file.

| pipe. Da come input di un comando l'output del comando che lo precede.


Ora ci occuperemo di descrivere i caratteri menzionati nella lista sopra. Sono stati volutamente omessi numerosi caratteri che servono principalmente per la creazione di script bash.
Il carattere “#” serve per comentare le righe. Indica perciò una riga che non verrà considerata dall'interprete bash.
Ma passiamo subito alla descrizione del carattere jolly “*”. È un carattere che permette di indicare tutti i file presenti in una cartella o altre applicazioni interessanti. Per esempio un “ls * | more” ci mostrerà la lista di tutti i file e sottodirectory presenti nella cartella in cui si è digitato il comando. Nell'espressione precedente abbiamo introdotto un altro carattere speciale: il carattere che indica una pipe “|” è utilissimo perchè ci consente di “unire” le funzionalità di un comando con un'altro. Nel comando di cui sopra, la pipe non fa altro che inviare l'output di “ls *” (estremamente lungo se sono presenti molti file e cartelle) al comando “more” che mostra poco output per volta per renderlo leggibile interamente (senza questo espediente potremmo vedere solo le ultime righe di output).
La redirezione dell'output è fondamentale nella creazione di script, ma non solo. Si può rivelare molto utile anche nelle situazioni di tutti i giorni. Per fare un esempio, mettiamo il caso che dovessimo inserire la riga “Techeye_hw_e_tecnologia_per_pc” nel file “Lista_siti.txt”: potremmo inserirla semplicemente digitando echo “Techeye_hw_e_tecnologia_per_pc” >> Lista_siti.txt. E questo senza aprire alcun editor di testo.

Linux Le potenzialità offerte dalla shell sono immense. Esiste, come già accennato in apertura di articolo, un linguaggio di scripting (bash scripting) che, sfruttando i vari comandi di sistema e algoritmi simili ad altri linguaggi, consente di creare script davvero utili (script di backup, per esempio). Ora sta a voi imparare a conoscere la shell, divertirvi con essa e imparare tutti i suoi segreti...