Introduzione all'uso della shell

Da Linux@P2P Forum Italia.

Nota: se sai già conosci una shell e cerchi un aiuto sui comandi, puoi consultare la pagina Guida ai comandi base della shell in GNU/Linux.

Indice

Che cos'è una shell

Con il termine shell si intende un programma che permette all'uomo di dialogare con un computer e attraverso la quale vengono impartiti i comandi (maggiori informazioni su Wikipedia).

Contestualmente ai sistemi UNIX, con shell si intende generalmente la shell testuale o riga di comando, attraverso la quale i comandi vengono impartiti come stringhe di testo immesse da tastiera.

L'utilizzo della shell è molto importante nei sistemi UNIX, in quando consente di comunicare con il sistema in modo efficace e veloce, consente di intervenire immediatamente sulla configurazione del sistema ed è uno strumento prezioso per individuare eventuali problemi.

Aprire una shell

All'avvio un sistema GNU/Linux avvia generalmente 7 terminali virtuali, 6 con una shell testuale e 1 con una shell grafica (che è quella più usata). Il passaggio da un terminale in modalità testo può essere effettuato attraverso la pressione contemporanea di:

CTRL+ALT+F1
.
.
CTRL+ALT+F6

per passare da un terminale ad un'altro, mentre per tornare al terminale grafico è sufficiente utilizzare la sequenza:

CTRL+ALT+F7

Per utilizzare la shell testuale (d'ora in poi chiamata semplicemente shell) è necessario passare ad uno dei terminali testuali, oppure utilizzare un emulatore di terminale con l'interfaccia grafica. Ogni ambiente desktop ha un emulatore di terminale, solitamente associato ad un'icona che rappresenta uno schermo nero:

Alcune icone che identificano un emulatore di terminale

Alcuni emulatori di terminale per interfaccia grafica sono:

Avvio con l'emulatore di terminale

Per accedere alla shell utilizzando un emulatore di terminale è sufficiente avviare l'emulatore stesso, che poi avvierà la shell vera e propria al suo interno, con l'identità dell'utente con cui è stato fatto effettuato il login (vedi qui).

Avvio con terminale testuale

Utilizzando un terminale reale è necessario effettuare il login per essere identificati dal sistema. Ogni terminale, quindi, presenterà all'utente la riga:

login:

in cui viene chiesto il nome utente, seguito da <INVIO>. Bisogna poi immettere la password relativa all'utente:

password:

Durante la digitazione della password non viene mostrato assolutamente nulla, nemmeno degli asterischi, il tutto per garantire la massima riservatezza.

Ecco un esempio di accesso alla shell da terminale:

debian login: ramius
Password:
Last login: Mon Sep 25 20:53:39 2006 on tty2
Linux debian 2.6.17-2-k7 #1 SMP Wed Sep 13 17:18:46 UTC 2006 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
ramius@debian:~$

Per chiudere una shell si utilizza il comando exit.

Convenzioni e sintassi

Nota: le indicazioni qui riportate fanno riferimento alla shell bash, che è la più diffusa e dovrebbe essere presente in ogni distribuzione. Tuttavia esistono diverse shell utilizzabili sui sistemi GNU/Linux e che, benché siano sostanzialmente compatibili con bash, possono differire in qualche dettaglio.

Indipendentemente dal terminale sul quale fate girare la vostra shell, vi troverete di fronte una riga che termina con il segno del dollaro ($), ad indicare che siete stati identificati come utenti e la shell è pronta ad eseguire i vostri comandi. La presenza del simbolo del cancelletto (#) indica che si è effettuato il login come root (o Super User): in questo caso bisogna prestare molta attenzione ai comandi impartiti, perché si possono danneggiare il sistema e i dati contenuti.

Ad esempio, il comando su serve all'utente per diventare root, previa l'immissione della password di root:

ramius@debian:~$ su
Password:
debian:/home/ramius#

Nella prima riga l'utente ramius ha richiesto di diventare root, e il sistema ne ha richiesto l'autenticazione (seconda riga), attraverso l'immissione della relativa password.

Nella terza riga vediamo di nuovo il prompt, questa volta con il carattere #, ad indicare la nuova identità di super utente.

Nella configurazione considerata, il prompt ha la seguente forma:

<nome utente>@<nome macchina>:<directory corrente>$

Nell'esempio precedente, il simbolo ~ identifica la directory home dell'utente corrente, che corrisponde a /home/ramius. Quando l'utente diventa root, la directory corrente non cambia, tuttavia non è più la directory home dell'utente corrente (root), quindi bash propone il percorso esplicito.

Nota: l'esempio qui riportato non funziona su distribuzioni che hanno l'utente root disabilitato (ad esempio Ubuntu). In questi casi si guadagnano i diritti di Super User attraverso il comando sudo.

Immissione dei comandi

Quando si vuole riportare l'immissione di un comando (ad esempio nei messaggi del forum), è pratica comune includere il $ o il #, per indicare se il comando deve essere eseguito con i diritti di utente o di amministratore. Se ad esempio si volesse rappresentare l'utilizzo del comando su, si scrive:

$ su

La struttura dei comandi ricalca generalmente lo schema:

comando [argomenti] [oggetto del comando]

Le parentesi graffe indicano convenzionalmente degli oggetti facoltativi. Alcuni comandi, ad esempio, possono essere lanciati senza argomenti ed oggetto, oppure possono ammettere più oggetti. Supponiamo ad esempio di voler elencare il contenuto della propria directory home, attraverso il comando ls:

$ ls ~/

il simbolo ~ indica la propria home directory. In questo caso il comando ha l'oggetto, che dice a ls quale deve essere la directory della quale deve mostrare il contenuto (~/). Se però volessimo qualche ulteriore dettaglio sui files contenuti, possiamo passare a ls l'opzione -l:

$ ls -l ~/

Ora, l'elenco dei files mostra molti altri dettagli, come ad esempio la maschera dei permessi e la dimensione. Se vogliamo che ls utilizzi un formato più leggibile per le dimensioni dei files, aggiungiamo l'opzione -h:

$ ls -l -h ~/

oppure, utilizzando una forma contratta:

 $ ls -lh ~/

Se omettiamo l'oggetto, ls assumerà implicitamente che vorremo conoscere il contenuto della directory corrente; basta dare:

$ ls

oppure:

$ ls -lh

In ogni cartella del sistema (ad eccezione della / ) troveremo sempre due directory apparentemente strane:

ercoppa@gentoo ~/beryl-dir $ ls -a
.  ..  cartella_mia  mio_file

Come possiamo vedere dall'output del comando ls (che dovrà avere l'opzione -a) sono presenti le directory

. ..

Il singolo punto rappresenterà la directory attuale (in cui ci troviamo), invece la directory con due punti rappresentera la directory madre della directory in cui ci troviamo. Facciamo qualche esempio per chiarirci le idee

ercoppa@gentoo ~ $ cd Desktop/
ercoppa@gentoo ~/Desktop $ cd ..
ercoppa@gentoo ~ $ 

Come è possibili notare, con il primo comando sono entrato nella directory Desktop, con il successivo comando invece sono ritornato alla directory madre di Desktop (ossia la home). Un'altra semplice convenzione in cui ci possiamo imbattere sono le directory nascoste, a differenza di altri sistemi operativi, in GNU/Linux una cartella è nascosta se il suo nome è preceduto da un punto (lo stesso discroso è valido anche per i singoli file), ad esempio:

ercoppa@gentoo ~ $ ls -a
.amsn .aMule

In questo caso .amsn e .aMule sono cartelle nascoste. E' utile ricordarsi questa convenzione, in quanto tutte le configurazione dell'utente risiedono in cartelle nascoste sotto la propria home.

Informazioni sui comandi

Ora che avete preso dimestichezza con l'immissione di comandi da shell, vorrete probabilmente sapere quali sono i comandi più utili, e, soprattutto come si usano. Avere queste informazioni è facile: basta infatti usare... due comandi!

In particolare il comando

$ apropos argomento

cercherà fra tutti i comandi disponibili quelli che riguardano la parola chiave "argomento", e ne presenterà una lista con una breve descrizione. Una volta che avrete trovato il comando da voi cercato, potete raccogliere le prime veloci informazioni su come funzioni usando:

$ comando --help

che vi restituirà un breve messaggio di aiuto relativo al comando "comando". Se invece avete bisogno di ulteriori informazioni, potete ricorrere a "man", una vera e propria raccolta di manuali per tutti (o quasi) i comandi presenti in linux. Basterà digitare:

$ man comando

o anche in alcuni casi

$ info comando

per leggere il relativo manuale. Se volete consultare invece i manuali dei comandi in italiano e più comodamente sul web, potete andare su ShellBox.it Documentazione Linux, dove sono raccolti tutti i manuali e gli HowTo disponibili in italiano per Linux.

Strumenti personali
Namespace
Varianti
Azioni
Navigazione
CollectionTricks
Siti amici
Strumenti