Linux: riga di comando CLI

La riga di comando è l’interfaccia utente dei sistemi Linux che non usano una interfaccia grafica (GUI) parliamo principalmente dei sistemi server dove la GUI è talvolta considerabile superflua.

Spesso si sceglie di non installare la GUI sui sistemi Linux sia perché gli amministratori di sistema preferiscono la CLI per la sua semplicità ed immediatezza per le funzioni a loro necessarie ma anche perché nei sistemi dotati di risorse minimali l’assenza della GUI risparmia parecchio spazio sia in termini di storage che di RAM e CPU.

La recente forte diffusione dei mini e micro computer destinati principalmente ai sistemi IoT, uno su tutti l’oramai famosissimo Raspberry Pi, ha fatto conoscere la CLI ad un vasto pubblico che non era abituato a questo tipo di interfaccia. Per i meno giovani l’utilizzo della CLI può rappresentare un tuffo nel passato dei primi PC con il glorioso DOS che venivano utilizzati nell’era geologica prima dell’avvento di Windows e MacOS.

Ritornando al presente la più diffusa CLI nei sistemi Linux è chiamata BASH. Il nome è un acronimo di “the Bourne Again SHell” dal nome del creatore della prima shell per sistemi Unix/Linux: Steve Bourne.

La shell BASH non è esclusiva di Linux: viene utilizzata in MacOS X fino alla versione Mojave (poi sostituta con zsh) ed esistono implementazioni per i sistemi Windows come per esempio Gygwin.

Di fatto la shell è un interprete di comandi che permette all’utente di interagire con il sistema operativo tramite l’esecuzione di comandi propri della CLI, di programmi o di script.

Gli script possono essere scritti in linguaggi intepretabili dal sistema come per esempio Perl o PHP ma anche semplicemente essere dei file che elencano i comandi che devono essere eseguiti proprio come se fossero digitati manualmente direttamente dalla CLI.

Il comportamento di BASH di base non è conforme allo standard POSIX, è comunque possibile eseguire la shell BASH in modalità POSIXLY_CORRECT per esempio impostando una variabile di sistema omonima con un qualsiasi valore.

Se avete la possibilità di collegarvi ad un sistema Linux, accedendo alla shell, verrà visualizzato quello che comunemente è chiamato “prompt dei comandi” o anche più semplicemente “prompt”:

utente@nomehost:/cartella$

Il prompt è composto dal nome utente con il quale vi siete autenticati seguito dal simbolo “@” quindi dal nome host del sistema seguito dal simbolo “:” e poi dalla cartella corrente, il simbolo “$” termina il prompt e delimita l’area dove sarà possibile digitare il comando.

Subito dopo il login al sistema tipicamente la cartella corrente è la cartella “home” definita per l’utente autenticato (normalmente /home/utente) spesso viene indicata con il simbolo “~” (tilde).

utente@nomehost:~$

I comandi eseguibili dalla CLI hanno una sintassi standard, vediamo un semplice esempio (i termini tra parentesi [] sono opzionali):

comando [-argomento] [--argomento esteso] [file]

Vediamo ora degli esempi pratici:

utente@nomehost:/cartella$pwd
/cartella

utente@nomehost:/cartella$whoami
utente

Il comando “pwd” mostra la cartella corrente spesso già visualizzata dal prompt stesso, il comando “whoami” mostra il nome utente con il quale siamo autenticati, anche questo già spesso mostrato nel prompt.

utente@nomehost:/cartella$ls
file1   file2  cartella1

Il comando “ls” elenca i file e le cartelle presenti nella cartella corrente:

utente@nomehost:/cartella$ls -h
-rw-rw-r-- 1 utente utente 4859 Oct 10 17:50 file1
-rw-rw-r-- 1 utente utente  652 Oct  7 12:20 file2
drwxrwxr-x 2 utente utente   40 Oct  1 01:40 cartella1

Aggiungendo l’argomento “h” oppure l’equivalente argomento esteso –human-readable si ottene un elenco più completo.

Il comando “man” seguito dal nome di un comando o di un programma eseguibile mostra una sorta di manuale che illustra l’uso del comando e gli argomenti utilizzabili.

Vediamo ora alcuni dei comandi basilari più utilizzati:

  • cd:
    • cambia la cartella corrente (change directory).
  • cat:
    • mostra il contenuto del file indicato.
  • more:
    • mostra il contenuto del file indicato, una schermata alla volta semplificandone la visione.
  • cp:
    • copia un file o una directory.
  • mv:
    • sposta o rinomina un file o una cartella.
  • rm:
    • cancella un file. Attenzione: negli ambienti Linux CLI non c’è cestino se cancellate qualcosa questo è praticamente irrimediabile.
  • du:
    • mostra le dimensioni dei file e delle cartelle.
  • df:
    • mostra lo spazio occupato e libero sul disco e sui vari volumi esistenti.
  • history:
    • mostra un elenco degli ultimi comandi digitati dall’utente.
  • top:
    • mostra i processi in esecuzione e il loro utilizzo di memoria e cpu.
  • grep termine file:
    • cerca “termine” nel “file” indicato.
  • |:
    • | detto “pipe” permette di accodare 2 o più comandi in modo che l’output del primo sia l’input del secondo. Esempio: “ls | more” mostra l’elenco dei file e delle cartelle, se l’elenco supera la dimensione dello schermo la visualizzazione si interrompe fino alla pressione di un tasto che mostra la schermata successiva.
  • >:
    • permette di redirigere l’output di un comando in un file. Esempio: “ls > elenco-file” salva l’elenco dei file e delle cartelle in un file con nome “elenco-file”
  • <:
    • permette di utilizzare il contenuto di un file come input del comando.

Torna in alto