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.

Esistono molti tipi di shell; quando si parla semplicemente di “shell”, o anche di “terminale”, si intende di solito una shell testuale con cui l’utente interagisce attraverso un terminale o un emulatore di terminale.

Una shell testuale è un programma dotato di un’interfaccia a riga 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 mostrare dati sul terminale.

Una delle più note shell testuali è il tradizionale “prompt dei comandi”, ben noto a quanti hanno familiarità con i sistemi operativi DOS (MS-DOS, DR-DOS, FreeDOS). Per gli utenti di MS-DOS e di alcuni dei sistemi Microsoft Windows la shell è il programma command.com. Anche i sistemi della famiglia Windows NT dispongono di una shell testuale, il programma cmd.exe.

Nei sistemi operativi Unix e Unix-like esistono diverse shell testuali; tra le più note vi sono sicuramente Bash (Bourne-Again Shell) e la Korn shell, ma ne esistono altre come la C shell, con un insieme di funzionalità e caratteristiche di base in comune.

Sono inoltre presenti potenti strumenti per collegare tra loro diversi programmi per svolgere compiti complessi, come le pipe e la redirezione. I programmi Unix più propensi ad essere collegati in questo modo sono detti filtri.

Le moderne shell testuali posseggono diverse funzionalità ergonomiche, tra le quali:

  • la cronologia dei comandi eseguiti (o command history), che permette di ripetere gli ultimi comandi digitati;

  • il completamento dei comandi (o completion), che permette di completare automaticamente nomi di programmi e di file

  • il job control, che permette di avviare in background più programmi o di sospenderli temporaneamente.

Le shell testuali dei sistemi Unix integrano un linguaggio di scripting con il quale è possibile scrivere veri e propri programmi che possono ad esempio automatizzare le operazioni di amministrazione di sistema, semplificandola. La sintassi di tale linguaggio è un’estensione di quella usata interattivamente, per cui chi è familiare con l’uso interattivo della shell trova facile e naturale creare degli script.

Alcune delle funzionalità delle shell dei sistemi Unix sono state riprese in varia misura anche dalle shell testuali per i sistemi Microsoft Windows… Un utente che passa a Linux ha spesso bisogno di “tradurre” i comandi ms-dos in comandi per la shell bash. Bene… a me è capitato l’inverso, dopo 5 anni di utilizzo della shell Linux mi è capitato di gestire un server Windows 2003, e non conoscevo i comandi!!!

Per questo ho letto un manuale, ed ho scoperto che possiamo trovare comandi simili nei due ambienti; eccoli riportati in tabella:

**Descrizione** **Windows/Dos** **Linux**
Listato dettagliato dei file della directory corrente DIR ls -l
Listato dei file della directory corrente DIR /W ls
Crea una directory Pippo MD Pippo mkdir Pippo
Cambia la directory corrente in ./Pippo CD Pippo cd Pippo
Rimuove la directory Pippo (solo se vuota) RD Pippo rmdir Pippo
Copia tutti i file nella directory Prova COPY *.* \Prova cp * /Prova
Copia ricorsivamente tutti i file nella directory Prova XCOPY *.* \PROVA /E /S cp -dpR * /prova
Rinomina Atricolo in Lettera REN Articolo Lettera mv Articolo Lettera
Muove tutti i file nella directory Prova MOVE *.* \PROVA mv * /prova
Cancella il file Articolo DEL Articolo rm Articolo
Cancella ricorsivamente una directory (non incluso in windows xp e 2003) DELTREE Temp rm -R Temp
Visualizza il contenuto di Lettera TYPE Lettera cat Lettera
Visualizza il contenuto di Lettera dividendolo per schermate TYPE LETTERA | MORE cat lettera | more
Aiuto sui comandi HELP HELP man man
Formatta un floppy FORMAT A: /N:18 /T:80 fdformat /dev/fd0u1440
Copia un floppy in un altro usando due drive DISKCOPY A: B: cp /dev/fd0 /dev/fd1
Copia un floppy in un altro usando un solo drive DISKCOPY A: A: cp /dev/fd0 /tmp/pippo ; cp /tmp/pippo /dev/fd0
Carica le impostazione della tastiera italiana KEYB IT loadkeys it
Pulisce lo schermo CLS clear
Cerca la stringa "saluti" nel file Primo.doc FIND "saluti" Primo.doc grep "saluti" Primo.doc
Partizionare e gestire i dischi DiskPart [c]fdisk
Formattare le partizioni FORMAT mkfs.(tipo-fs)
Cerca la stringa "saluti" in tutti i dile .doc FOR %A IN (*.DOC) DO FIND "saluti" %A grep "saluti" *.doc
Visualizza le variabili di ambiente SET env
Setta una variabile d'ambiente temporanea SET Var=Value export Var=Value
Cancella una variabile d'ambiente temporanea SET Var= unset Var
Elenca i driver caricati nel sistema DRIVERQUERY lsmod (non solo per i driver)
Visualizza il tempo di funzionamento del sistema SYSTEMINFO uptime
Visualizza lo stato della memoria RAM MEM free
Schedulare processi in modo automatico. Notare che questo è un modo per far eseguire a windows processi in background schtasks at cron

La lista non finisce qua, questi sono solo i comandi più importanti :-) , con la quale potete tradurre comandi per DOS in comandi per Linux, e comandi per Linux in comandi per DOS. Se sei un nuovo utente, ti consiglio la shell di Linux, molto più espressiva e personalizzabile!

Se conoscete altri comandi utili alla gestione dei sistemi, commentate pure questo articolo. CIAO!!!