Il terminale di Linux Mint: introduzione alla shell

Il terminale di Linux Mint consente di scatenare la potenza nascosta sotto il suo desktop Cinnamon, Mate, Xfce.
Puoi farne a meno per compiere quasi tutte le operazioni più comuni senza mai bisogno di ricorrere al lato "difficile". Ma a prenderci un po' di dimestichezza si scopre quanto talvolta sia conveniente usarlo per fare meglio e prima tante cose.

Perché usare il terminale

Grazie alla disponibilità in Linux Mint di strumenti dotati di interfaccia grafica per configurarne ogni aspetto e programmi per soddisfare qualunque esigenza, viene da chiedersi perché uno dovrebbe imparare ad eseguire comandi da terminale. E ad accedere alla c.d. shell di Linux.

Se adoperi il computer per un utilizzo di base come navigare, usare email, elaborare documenti, stampare, ascoltare musica e guardare video, non ne hai motivo. Tutte queste caratteristiche possono benissimo venire sfruttate al meglio interagendo graficamente con Linux Mint.
Il valore del terminale di Linux si presenta con l'amministrazione avanzata del sistema. Diverse attività sono più facilmente compiute usando "comandi shell" che usando un'interfaccia grafica.

Solo per cominciare, se vuoi installare un pacchetto software di cui conosci il nome, è molto più rapido aprire un terminale con la combinazione di tasti CTRL+Alt+T e digitare

sudo apt-get install nomeprogramma

che aprire il Gestore Applicazioni, attendere l'aggiornamento degli indici, cercare il programma, cliccarne la scheda e premere Installa malgrado già questa semplicità sia una cosa fantastica.

Altro valore aggiunto della shell di Linux sono le possibilità di scripting. Con uno script puoi creare un file di testo contenente una lista di comandi ed istruzioni ed eseguirle con una singola esecuzione. Puoi ad esempio creare una lista di tutti i programmi che ti piace avere e non sono preinstallati in Linux Mint, scriverla in un file di testo e, ogni volta che reinstalli Mint, installarli tutti insieme con un singolo comando!

Accesso alla shell

Linux Mint viene fornito con l'emulatore di terminale di GNOME. GNOME è un differente ambiente grafico cui ad esempio anche Ubuntu si appoggia per le versioni più recenti. Ma il suo emulatore di terminale funziona anche su Linux Mint in tutte le edizioni e svolge egregiamente il suo lavoro. Nulla toglie però che si possa preferirne uno differente, adottando ad esempio alternative come guake, terminator, konsole...

Si parla di emulatore di terminale perché si tratta comunque di un programma grafico, dotato di una sua propria finestra, che simula il comportamento di un sistema privo di ambiente grafico. E spesso sentirai parlare di Bash quando si cita la shell di Linux. Bash è un interprete dei comandi ma non è l'unico.

Ma c'è anche un altro modo per accedere alla shell di Linux senza necessità di un emulatore di terminale. Perché si può usare il terminale teletype (TTY). Un terminale a tutto schermo che disattiva temporaneamente la modalità grafica di Linux per darti accesso diretto al suo interprete di comandi. In Linux Mint puoi aprirne fino a 6 diversi passando dall'uno all'altro con la combinazione di tasti CTRL+Alt insieme ai tasti da F1 a F6. E ritorni all'ambiente grafico con CTRL+Alt+F7.

Linux Mint installa un'icona per l'avvio del terminale nel pannello ed un'altra tra i preferiti del menu. Lo trovi anche nel menu sotto la categoria Amministrazione. Ma un modo rapido per avviarlo, come citato, è la combinazione di tasti CTRL+Alt+T. Tanto che, per questo, io elimino le icone dal pannello e dai preferiti del menu.

finestra di terminale in Linux Mint

All'avvio del c.d. prompt, oltre all'indicazione utente@sistema che identifica quale account utente sta operando su quale sistema, dopo i due punti, vi è l'indicazione della localizzazione attuale del terminale all'interno della struttura di file di Linux. All'avvio il terminale è localizzato nella cartella home dell'utente che lo ha lanciato, indicata dal simbolo tilde ˜ (abbreviazione di /home/utenteconnesso). Segue poi quello del dollaro $ che indica che i comandi che i comandi stanno per essere impartiti con privilegi di utente normale e non di amministratore.
Ed il c.d. prompt è in attesa di istruzioni da eseguire in questo percorso, come indicato dal lampeggiare del cursore rettangolare.

Per chiuderla, ovviamente puoi premere la x localizzata nel lato superiore destro della finestra stessa oppure impartire al prompt il comando

exit

e confermare con Invio.

Esecuzione di comandi

Nel terminale di Linux Mint, di solito, quando impartisci un comando, attendi una conferma del successo dell'operazione e poi vieni riportato al prompt in attesa di ulteriori istruzioni. Altre volte invece ritorni semplicemente al prompt senza alcun avviso. Questo significa che l'operazione è stata eseguita.
Se sbagli a digitare qualcosa verrai avvisato di un errore oppure attenderti un risultato imprevisto.

Navigazione nel filesystem

È anzitutto opportuno chiarire il significato di filesystem perché può assumere significati diversi a seconda del contesto. Può infatti significare il tipo di struttura di partizioni di hard-disk. In questo cotesto NTFS è il filesystem tipico di Windows ed ext4 quello più recente di linux.

Ma nel contesto di questo paragrafo, per filesystem intendo il sistema di directory (cartelle) tipico di una installazione Linux ed il modo per navigare da una ad un'altra in assenza di un ambiente grafico. Ciascuna ha uno scopo ben preciso. Puoi dargli un'occhiata aprendo Nemo e cliccando nel riquadro laterale la voce denominata appunto File system. Oppure digitare nel terminale

ls -l /

Questo comando, ls (list storage) viene passato con l'opzione -l che richiede di mostrare il risultato in formato "lungo", con tanti dettagli invece che solo il nome delle cartelle in una sola riga.
Lo slash finale indica al comando ls che non vuoi una rappresentazione del contenuto alla posizione corrente del terminale ma ad un percorso preciso all'intero del dispositivo. E lo slash indica la directory root o radice dell'intera struttura. Slash è l'inizio della partizione, il percorso base. In linux qualunque contenuto è una sottocartella di /.
Ecco perchè la cartella home è sempre indicata in formato /home e quella di ciascun utente abilitato nel sistema come /home/utente1 o home/utente2 etc.

il comando ls di linux

La prima cosa da notare è che, a differenza di windows, non ci sono lettere per le unità di partizioni. Non c'è C: per il sistema operativo e D: per il lettore DVD.

Ed è anche necessario metabolizzare il concetto per cui il terminale si trova sempre in una particolare posizione all'interno di questa struttura, pronto ad eseguire comandi su file e cartelle nel percorso corrente. O a spostarsi prima su altro percorso. Oppure ad invocare programmi installati senza necessità di dirgli dove sono localizzati.

Per sapere dove è attualmente localizzato il terminale nel filesystem di Linux puoi digitare il comando pwd (print working directory) e, intuitivamente vedrai stampato a schermo, come risultato, /home/tuoutente.
E alla riga successiva che il prompt è di nuovo in attesa di fare qualcosa per te.

Se pare complicare la situazione, è invece un vantaggio che i percorsi possano venire indicati sia come relativi che come assoluti. Cioè sia rispetto alla posizione attuale del terminale, sia rispetto alla radice.

Prendiamo il comando cd che come in dos serve a cambiare directory. Per entrare nella tua cartella Musica saresti tentato di istruire il terminale così

cd /home/Nomeutente/Musica

Ed è giusto. Il prompt ti apparirebbe subito nella forma

utente@sistema ˜/Musica $

Ma se sei nella directory home puoi dire al terminale anche solo

cd Musica

Senza precedere la cartella con lo slash stai dicendo al terminale di accedere ad una sottocartella con tale nome presente nel percorso attuale. E se digiti semplicemente

ls

puoi vedere un elenco rapido del contenuto nel percorso in cui ti trovi.

Con il comando cd, puoi indicare percorsi sia relativi che assoluti. Il percorso assoluto è quello indicato a partire dall'inizio della partizione (con lo slash iniziale fino a quello desiderato). Nell'esempio appena citato non è necessario perché sei già nella tua cartella home sotto /home/utente e puoi indicare il percorso a partire da essa.

Se vuoi spostare il terminale su di un livello rispetto al percorso attuale puoi digitare

cd ..

E anche sul termine root bisogna fare chiarezza perché vi sono differenti accezioni: quella relativa alla radice del filesystem di linux come indicata dallo slash, quella relativa alla directory che si trova nel percorso /root e sia per riferirsi all'utente "onnipotente" nel sistema Linux.

La cartella /root è la home dell'utente omonimo che in Linux non è mai localizzata all'interno di /home come per gli utenti standard. Questo perché l'accesso a tale cartella è negato a tali utenti. Se provi infatti a digitare nel terminale

ls /root

il terminale ti spiegherai che non ti è consento entrarci, vederne il contenuto né operarci in alcun modo.

Di solito il ricorso all'utente root è scoraggiato per motivi di sicurezza e per evitare danni accidentali al sistema. In Linux Mint è disabilitato per impostazione predefinita dell'installazione. Ma sebbene si possano impartire alla shell comandi "come si fosse" root (con il comando sudo), non ci si può connettere al sistema come root.
Dall'introduzione nel 2019 dei Rapporti di sistema, Linux Mint però ti consiglia di attivare tale account subito dopo l'installazione e indicare una password. Questo al fine di poter intervenire in modalità di urgenza se c'è qualche problema serio nel computer.

impostare la password di root in Linux Mint

La struttura delle directory di Linux

Vediamo brevemente come sono organizzate le cose in Linux Mint come in tutte le altre distribuzioni basate su kernel come raspbian, gli smartphone android e ovunque questo sia installabile.

  • /bin: qui sono salvati i comandi accessibili da tutti gli utenti. Gli eseguibili del comando ls, ad esempio, si trovano qui
  • /boot: qui ci sono le informazioni per il caricamento del sistema
  • /dev: qui ci sono i device, le periferiche ahrdware come hard-disk, schede audio, etc.
  • /etc: vi vengono salvati i file di configurazione usati nel sistema come Samba che si occupa delle funzionalità di rete multipiattaforma o il file fstab su cui sono salvate le informazioni sulle partizioni e il relativo "montaggio" nel sistema
  • /home: come detto, ospita le singole cartelle degli utenti per documenti, file scaricati, multimedia e impostazioni specifiche di ogni account
  • /lib: percorso delle librerie necessarie ad altri programmi
  • /media: questo è il luogo in cui trovare le periferiche di archiviazione esterne come hard-disk e chiavette USB quando sono collegate al sistema. Come detto Linux non usa lettere. Tutto si trova all'interno del percorso radice /.
  • /mnt: indica i percorsi di montaggio manuale. È un residuo del passato ormai sostituito da /media
  • /opt: programmi installati successivamente da pacchetti .deb al di fuori dei repository ufficiali, si posizioneranno qui (ad esempio Google Chrome, Skype, teamviewer,..)
  • /proc: nella cartella ci sono file virtuali che rappresentano processi e dati del kernel linux
  • /root: la home dell'utente root
  • /sbin: il percorso per i file binari dei programmi cui solo un utente con privilegi di root ha accesso
  • /tmp: il luogo dove sono memorizzati i file temporanei per i processi in esecuzione
  • /usr: vi risiedono applicazioni e utilità fruibili da tutti gli utenti
  • /var: la directory in cui trovare log, spool di stampa e tanti altri file modificati continuamente

Gestione di file e cartelle da terminale

Compreso il modo di spostarsi nel filesystem, vediamo un po' come gestire file e cartelle da terminale: creare, eliminare, muovere, rinominare. In Linux ogni file è testo e non serve l'estensione .txt come in windows. Nulla di più semplice che creare un file da terminale se con il comando touch.

touch miofile

Tanto basta per trovare (anche con Nemo) un file vuoto nel percorso in cui il terminale si trova al momento dell'istruzione. Se vuoi creare il file in una cartella da quella in cui si trova il terminale, puoi indicargli il percorso di destinazione. In modo assoluto

touch /home/utente/Documenti/nuovofile

o relativo. Se ad esempio il terminale si trova nella tua cartella home

touch Documenti/nuovofile

Se esegui touch su un file o una cartella già esistenti, pur non alterandone il contenuto, la data di ultima modifica sarà aggiornata. Questo può tornare utile quando eventuali utilità di backup la analizzeranno.

Per rimuovere il file precedentemente creato puoi invocare il comando di rimozione seguito dal nome (preceduto da eventuale percorso se differente da quello in cui si trova il terminale)

rm miofile

Per creare una cartella esiste il comando mkdir

mkdir nuovacartella

Se vuoi successivamente rimuoverla usi ancora il comando rm ma devi usare anche l'opzione -r per la cancellazione ricorsiva di ulteriori file e cartelle in essa contenuti. E ovviamente devi indicare a linux quale cartella vuoi eliminare

rm -r nuovacartella

Per rinominare un file si usando il comando mv che sta per move. Infatti ciò che realmente avviene è che il suo contenuto viene spostato dal file originario a quello con nuovo nome. A mv devi indicare poi il file da rinominare ed il nuovo nome. Se il file si trova nel percorso attuale del terminale puoi digitare

mv miofile miofile2

Ma puoi anche rinominare e spostare in un solo comando il file digitando un percorso diverso per il file rinominato.

mv miofile Documenti/mionuovofile

sposterà il file dalla cartella home a quella documenti assegnandogli un nuovo nome. Insomma non è necessario che il terminale si trovi nella posizione del file che vuoi spostare, rinominare o eliminare purché tu ne indichi il percorso. E puoi usare mv anche con le cartelle allo stesso modo che con i file.

Nano, l'editor di testo della shell

Ha poco senso creare, rinominare, spostare file vuoti! E la shell di Linux non consente solo di impartire comandi. Ma contiene anche programmi belli che completi. Un esempio di questi è nano, il "blocco note" open-source integrato ad oggi nella shell di Linux Mint (infatti ne esistono altri come vi e emacs).

Se hai ancora il file miofile nella tua directory /home prova a digitare nel prompt

nano miofile

e ti apparirà questo completo programma di videoscrittura in tutto il suo splendore!

nano editor di testo linux mint

Sto scherzando ovviamente. Perché rinunciare a LibreOffice Writer per questa povertà?! Ma c'è!

Il comando man

Se usando Linux ti trovi di fronte ad un errore o un problema, una rapida ricerca su Google o DuckDuckGo possono confortarti nello scoprire che qualcun altro ha già avuto lo stesso problema e che è risolvibile.

Se disgraziatamente non hai accesso ad internet e hai bisogno di informazioni su un comando shell, ask the man! Cioè al manuale. Non hai idea di quante informazioni siano integrate in ogni distribuzione Linux semplicemente digitando nel terminale man seguito dal nome del comando passato come "argomento".

man ls

il comando man di linux

Scoprirai tutte le opzioni e gli argomenti che possono venire passati al comando ls per ottenere dal sistema informazioni di ogni genere. Però è in inglese.

Alcuni dei miei comandi preferiti

Non c'è infatti nulla di più semplice per me che ottenere un file di testo in cui trovare all'istante l'intero contenuto della mia collezione di musica se non digitando nel terminale

ls -a -R -U -X > lista-file.txt

Oppure solo delle cartelle e non anche dei file con

ls -d */>lista-cartelle.txt

Oppure ottenere la compressione immediata di un PDF con una scansione decisamente troppo "pesante" per essere inviata via mail invocando il comando gs come segue:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.6 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=file-elaborato.pdf file-da-elaborare.pdf

o

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.6 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=file-elaborato.pdf file-da-elaborare.pdf

per un una riduzione ulteriore della qualità delle immagini contenute. Oppure estrarre una immagine iso dal contenuto di un dvd, bluray o cd è cosa facile con

dd if=/dev/cdrom of=file.iso

Introduzione allo scripting

Come accennato, la potenza della shell di Linux aumenta con le sue capacità di scripting. Ovvero con la possibilità di inserire sequenze anche complesse di comandi in un unico file di testo che possono venire eseguite sequenzialmente all'istante invocando un solo comando.
Ecco perché ho accennato a Bash e ai suoi script. Uno script bash può venire redatto con qualunque editor di testo. Basta avviare il file con

#! /bin/bash

Il c.d. hashbang serve a dichiarare l'interprete di comandi che vuoi usare per eseguire i comandi successivi. Nella maggior parte delle distribuzioni Linux, Bash è l'unica opzione disponibile.
Come detto, puoi digitare tutti i comandi che vuoi nelle linee seguenti. Ad esempio puoi aggiungere il comando per l'estrazione di una immagine iso da un cd o dvd con

dd if=/dev/cdrom of=immagine.iso

Puoi anche già salvare il file, ad esempio con il nome mioscript-isodvd ed uscire dall'editor. Ma per poterlo eseguire devi prima contrassegnarlo come eseguibile e non come semplice file di testo quale ancora è. Per fare questo esegui nel terminale il seguente comando:

chmod +x mioscript-isodvd

A questo punto, per eseguirlo sarà sufficiente digitare nel terminale

./mioscript-isodvd

Per eseguire lo script lo precediamo con il punto e con lo slash. In questo modo diciamo al terminale che vogliamo eseguire uno script che si trova nel suo percorso corrente (di solito l'interprete li cerca nelle cartelle /bin, /usr/bin, /usr/local/bin ed altre.
Ogni volta che invocherai da terminale ./mioscript sai che il letore ottico sarà avviato e ne verrà estratta una immagine iso che troverai nella tua cartella /home.

Conclusioni

Questo è un blog dedicato a Linux per i principianti e oltre a non essere il luogo adatto per approfondire argomenti avanzati legati alla shell e allo scripting, non sono neppure abbastanza qualificato per poterlo fare in modo approfondito. Ma là fuori ci sono validi testi e siti web rintracciabili anche su google con "lista comandi terminale", "shell scripting linux" e simili per lanciarsi oltre le immense possibilità di un desktop in Linux.

Questa voleva davvero essere solo una breve introduzione all'uso del terminale di Linux Mint che non può comunque mancare in un manuale d'uso di Linux Mint. Il tempo e le statistiche mi diranno casomai se e come sia il caso di approfondire comunque ulteriori aspetti della enorme potenza di Linux pronta per essere scatenata sotto il cofano di Mint.

Diffondi la conoscenza!

Lascia un commento