CLI: interfaccia e interprete a riga di comando

Ti avviso subito: quando si entra nella selva oscura delle nomenclature informatiche se ne esce con più informazioni, certo, ma anche con uno spirito incline ad adattarsi e interpretare come le persone utilizzano questi termini a modo loro. Insomma, se non sei ingegnera/e/ə rasserenati, l’importante è averne un’idea buona anche se non esaustiva.

CLI è l’acronimo sia di command line interface che di command line interpreter.

Una command line interface è un’interfaccia a riga di comando (testuale) che rende disponibile all’utente un command line interpreter (o command line processor) in grado di interpretare ed eseguire i comandi ricevuti. Quest’ultimo è spesso chiamato shell, soprattutto se riferito alle command shell che interagiscono col sistema operativo.

Le command line interface

Alcuni facili esempi di interfaccia CLI sono la Windows Console di Windows e le console dei client FTP, Telnet o SSH (ad esempio l’emulatore di terminale PuTTY). Recentemente Microsoft ha sviluppato e rilasciato una nuova interfaccia CLI per Windows 10 e Windows 11: Windows Terminal. Quest’ultimo è in grado di gestire nella stessa finestra più tab, ognuna delle quali può eseguire un diverso interprete CLI (Command, PowerShell, Linux shell per un WSL, …).

Le command line interface fanno parte dei cosiddetti emulatori di terminale (Konsole in KDE, Gnome Terminal in Gnome, xterm, Terminal in macOS, PuTTY, TN3270 Plus, …). Cosa emulano? I vecchi terminali, composti solamente da un video e una tastiera, con i quali si interagiva con un computer centrale al quale erano collegati. I terminali non avevano nessuna capacità di calcolo. Parliamo degli inizi dell’informatica, ma non degli albori, là la situazione era ancora più complicata tra schede e nastri perforati e rotoli di carta stampata 🙂

Buffer

Uno degli aspetti più utili di una interfaccia CLI moderna è il buffer che permette di vedere un certo numero di comandi dati in precedenza e il loro output.

I command line interpreter

Un interprete a linea o riga di comando è un programma in grado di interpretare ed eseguire i comandi ricevuti.

Le shell

Un interprete CLI può far parte della famiglia delle shell (interfacce per gestire il sistema operativo ed eseguire programmi), che per inciso possono essere testuali (come la bash shell di molte distribuzioni GNU/Linux o il command.com dell’MS-DOS, il Command Prompt di Windows o la più recente PowerShell) o grafiche (in Windows ad esempio c’è Windows Shell, prevalentemente rappresentata dal programma explorer.exe; in ambiente Linux ci sono X windows manager e Wayland compositor, …) o miste o ai giorni nostri probabilmente potrebbero essercene già di vocali.

Tornando alle shell testuali, queste dispongono di una serie di comandi interni e della capacità di eseguire script scritti nel suo linguaggio, nonché di eseguire programmi adatti ad essa.

Le shell infatti hanno due principali modalità operative: quella interattiva in cui i comandi vengono eseguiti subito dopo l’invio (in foreground o in background) e quella batch che esegue una serie di comandi contenuti in un file di script.

I comandi disponibili in una shell sono detti comandi interni o built-in, inoltre di solito una shell è accompagnata da un corredo standard di programmi esterni di uso comune.

Per conoscere l’elenco dei comandi interni si può di solito utilizzare il comando help di quella shell. Per il Prompt dei comandi di Windows è sufficiente digitare help dalla riga di comando stessa e premere invio. È da notare che con il comando help potrebbero essere elencati anche i comandi esterni standard.

La shell command.com

Il command line interpret di diversi sistemi operativi DOS e Microsoft Windows è stato command.com.

Lo è stato per Microsoft MS-DOS dalla prima all’ultima versione (la 8 distribuita con Windows Me) e per Microsoft Windows da Windows 95 a Windows ME. In queste prime versioni di Windows (client) era un passaggio obbligato nel boot del sistema operativo.

COMMAND.COM è una shell a 16 bit.

La shell cmd.exe

La shell di Windows a partire da Windows 2000 e Windows NT (lato server) è stata la Command shell (cmd.exe) detta anche “Command Prompt” o “Prompt dei comandi” (nelle versioni italiane di Windows) in base al titolo della finestra nella quale viene eseguita. È una shell a 32 bit.

cmd.exe è stato anche l’interprete CLI di OS/2.

In base al sistema operativo in cui viene eseguito l’interprete può godere di diverse funzionalità ed estensioni.

La prima versione di cmd.exe per Windows NT fu sviluppata da una donna, Therese Stowell.

La PowerShell

Microsoft ha introdotto una nuova shell, la PowerShell, in grado di eseguire una nuova serie di comandi detti cmdlets. PowerShell oltre ad eseguire questi nuovi e più complessi comandi, può anche eseguire i comandi della Command shell.

*ix shell

In Unix, Linux, macOS e sistemi analoghi la CLI è detta “terminale” e permette di eseguire molte differenti shell (sh Shell, Bash, Z shell, Korn shell, C shell, …).

La prima shell

La prima shell nota (poiché riportata in una pubblicazione di un lavoro di ricerca) è stata ideata da Glenda Schroeder e da un suo collega, di cui è ignoto il nome, nel 1965 per il sistema operativo Multics presso il MIT.

Origine del termine shell

Il termine shell è stato coniato da Louis Pouzin.

Definizione di Shell nel Jargon file

Definizione di shell nel Jargon file: “

1. [techspeak] The command interpreter used to pass commands to an operating system; so called because it is the part of the operating system that interfaces with the outside world.

2. More generally, any interface program that mediates access to a special resource or server for convenience, efficiency, or security reasons; for this meaning, the usage is usually a shell around whatever. This sort of program is also called a wrapper.

[…] “

Prompt

Infine un accenno al prompt.

Il prompt è l’invito da parte del command line interpreter ad impartire un comando e viene mostrato nella command line interface solo quando il sistema è pronto per ricevere un comando. Durante l’esecuzione di un comando o di un programma (in foreground) il prompt scompare fino al termine dell’esecuzione del comando.

Solitamente è composto da una serie di informazioni (in base al sistema in uso), da un carattere speciale (ad esempio: $, #, >) e da un carattere lampeggiante o un trattino basso messo in evidenza e detto cursore (da non confondere con il puntatore del mouse); il carattere speciale e/o il cursore sono considerati l’invito vero e proprio.

Console

Il termine console arriva anch’esso da prima di tastiere e video, quando i quadri di controllo erano costituiti da levette e spie luminose.

Uno degli utilizzi moderni di questo termine è ad esempio in ambienti Linux per definire la System Console interna al kernel o la shell che viene avviata per i computer che partono in modalità testuale.

In ambiente Linux in questo caso ci sono altre curiosità come il fatto che ci sono 6 console disponibili per default a cui viene fatto corrispondere il nome dispositivo da TTY1 a TTY6 e TTY sta per teletypewriter… cioè una telescrivente. 🙂