2.1 Lezione 1
Certificazione: |
Linux Essentials |
---|---|
Versione: |
1.6 |
Argomento: |
2 Trovare il Proprio Modo di Operare su un Sistema Linux |
Obiettivo: |
2.1 Nozioni di Base sulla Command Line |
Lezione: |
1 di 2 |
Introduzione
Le moderne distribuzioni Linux offrono una vasta gamma di interfacce utente grafiche, ma un amministratore avrà sempre bisogno di sapere come lavorare con la Command Line, chiamata anche shell. La shell è un programma che consente la comunicazione di tipo testuale tra il sistema operativo e l’utente. Di solito è un programma testuale che legge l’input dell’utente e lo interpreta sotto forma di comandi per il sistema.
Esistono diverse shell su Linux; questi sono solo alcuni esempi:
-
Bourne-again shell (Bash)
-
C shell (csh o tcsh, la versione migliorata di csh)
-
Korn shell (ksh)
-
Z shell (zsh)
Su Linux la più comune è la Shell Bash. È anche quella che verrà utilizzata nei nostri esempi ed esercizi.
Quando si utilizza una shell interattiva, l’utente immette i comandi nel cosiddetto prompt. Per ogni distribuzione Linux, il prompt predefinito può avere un aspetto leggermente diverso, ma di solito segue la seguente struttura:
username@hostname directory_corrente tipo_di_shell
Su Ubuntu o Debian GNU/Linux, il prompt per un utente ordinario sarà probabilmente simile a questo:
carol@mycomputer:~$
Il prompt del superuser sarà simile a questo:
root@mycomputer:~#
Su CentOS o Red Hat Linux, il prompt per un utente ordinario sarà invece simile a questo:
[dave@mycomputer ~]$
E il prompt del superuser sarà simile a questo:
[root@mycomputer ~]#
Spieghiamo ora ogni componente della struttura:
username
-
Il nome dell’utente che esegue la shell.
hostname
-
Il nome dell’host su cui viene eseguita la shell. Esiste anche un comando
hostname
con il quale puoi visualizzare o impostare il nome host del sistema. directory_corrente
-
La directory in cui si trova attualmente la shell.
~
indica che la shell è nella directory home dell’utente corrente. tipo_di_shell
-
$
indica che la shell è eseguita da un utente ordinario.#
indica che la shell è eseguita dal superutenteroot
.
Poiché non abbiamo bisogno di privilegi speciali, nei successivi esempi utilizzeremo un prompt non privilegiato. Per brevità, useremo semplicemente $
per indicare il prompt.
Struttura della Command Line
La maggior parte dei comandi inseriti sulla Command Line segue la medesima struttura di base:
comando [opzione(i)/parametro(i)...] [argomento(i)...]
Prendi il seguente comando come esempio:
$ ls -l /home
Spieghiamo il senso di ogni componente:
- Comando
-
Il programma che l’utente intende eseguire:
ls
nell’esempio sopra riportato. - Opzione(i)/Parametro(i)
-
Un “modificatore” che cambia in qualche modo il comportamento del comando, come
-l
nell’esempio sopra riportato. È possibile accedere alle opzioni in forma breve e lunga. Per esempio,-l
è identico a--format=long
.È anche possibile combinare più opzioni e, per la forma abbreviata, le lettere di solito possono essere inserite assieme. Per esempio, i seguenti comandi fanno tutti la stessa cosa:
$ ls -al $ ls -a -l $ ls --all --format=long
- Argomento(i)
-
I dati aggiuntivi richiesti dal programma, per esempio un nome di file o un percorso, come
/home
nell’esempio sopra riportato.
L’unica parte obbligatoria di questa struttura è il comando stesso. In generale, tutti gli altri elementi sono opzionali, ma un programma potrebbe richiedere che vengano specificati determinati parametri, opzioni o argomenti.
Note
|
La maggior parte dei comandi mostra una breve panoramica dei comandi disponibili quando vengono eseguiti con il parametro |
Tipi di Comportamento dei Comandi
La shell supporta due tipi di comandi:
- Interni
-
Questi comandi fanno parte della shell stessa e non sono programmi separati. Esistono circa 30 comandi di questo tipo. Il loro scopo principale è eseguire attività all’interno della shell (per esempio
cd
,set
,export
). - Esterni
-
Questi comandi risiedono in singoli file. Questi file sono in genere programmi o script binari. Quando viene eseguito un comando che non è incorporato nella shell (shell bultin), la shell utilizza la variabile
PATH
per cercare un file eseguibile con lo stesso nome del comando. Oltre ai programmi installati con il gestore di pacchetti della distribuzione, gli utenti possono anche creare i propri comandi esterni.
Il comando type
mostra a quale tipologia appartiene uno specifico comando:
$ type echo echo is a shell builtin $ type man man is /usr/bin/man
Quoting
Come utente Linux, dovrai creare o manipolare file o variabili in vari modi. Questo è facile quando si lavora con nomi di file brevi e con semplici valori, ma diventa più complicato quando, per esempio, sono coinvolti spazi, caratteri speciali e variabili. Le shell mettono a disposizione una funzionalità chiamata quoting che incapsula tali dati utilizzando vari tipi di virgolette (" ", ' '). In Bash, esistono tre tipi di virgolette:
-
Virgolette doppie
-
Virgolette singole
-
Caratteri di escape
Per esempio, i seguenti comandi non si comportano allo stesso modo a causa del quoting:
$ TWOWORDS="two words" $ touch $TWOWORDS $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch "$TWOWORDS" $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch '$TWOWORDS' $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 15:00 '$TWOWORDS' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words
Note
|
La riga con |
Virgolette Doppie
Le virgolette doppie indicano alla shell di trattare il testo tra virgolette ("...") come caratteri normali. Tutti i caratteri speciali perdono il loro significato, eccetto $
(dollaro), \
(backslash) e `
(backquote). Ciò significa che è ancora possibile utilizzare variabili, sostituzione di comandi e funzioni aritmetiche.
Per esempio, la sostituzione della variabile $USER
non è influenzata dalle virgolette doppie:
$ echo I am $USER I am tom $ echo "I am $USER" I am tom
Il carattere “spazio”, invece, perde il suo significato di separatore di argomenti:
$ touch new file $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:18 file -rw-rw-r-- 1 tom students 0 Oct 8 15:18 new $ touch "new file" $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:19 new file
Come puoi vedere, nel primo esempio il comando touch
crea due singoli file; il comando interpreta infatti le due stringhe come singoli argomenti. Nel secondo esempio, il comando interpreta entrambe le stringhe come un unico argomento e quindi crea solo un file. Tuttavia è buona norma evitare il carattere spazio nei nomi dei file. Potrebbe essere utilizzato, come alternativa, un trattino basso (_
) o un punto (.
).
Virgolette Singole
Le virgolette singole non hanno le eccezioni delle virgolette doppie. Revocano qualsiasi significato speciale attribuito a ogni carattere. Prendiamo uno dei primi esempi tra i precedenti sopra riportati:
$ echo I am $USER I am tom
Se utilizzi le virgolette singole, vedrai un risultato diverso:
$ echo 'I am $USER' I am $USER
Il comando ora visualizza la stringa esatta senza sostituire la variabile.
Caratteri di Escape
Possiamo utilizzare i caratteri di escape per rimuovere i significati speciali dei caratteri in Bash. Tornando alla variabile d’ambiente $USER
:
$ echo $USER carol
Notiamo che, per impostazione predefinita, il contenuto della variabile viene visualizzato nel terminale. Tuttavia, se dovessimo precedere il segno del dollaro con il carattere backslash (\
), il significato speciale del segno del dollaro verrebbe annullato. Ciò a sua volta non permetterà a Bash di espandere il valore della variabile inserendo il nome utente della persona che esegue il comando, ma invece interpreterà il nome della variabile in modo letterale:
$ echo \$USER $USER
Se ricordi, possiamo ottenere risultati simili a questo utilizzando le virgolette singole, che stampano in modo letterale a video il contenuto di ciò racchiudono. Tuttavia, il carattere di escape funziona in modo diverso, dicendo a Bash di ignorare qualsiasi significato speciale che possa avere il carattere che lo segue.
Esercizi Guidati
-
Suddividi le seguenti righe nelle singole componenti: comando, opzione(i)/parametro(i) ed argomento(i):
-
Esempio:
cat -n /etc/passwd
Comando:
cat
Opzione:
-n
Argomento:
/etc/passwd
-
ls -l /etc
Comando:
Opzione:
Argomento:
-
ls -l -a
Comando
Opzione:
Argomento:
-
cd /home/user
Comando:
Opzione:
Argomento:
-
-
Scopri la tipologia dei seguenti comandi:
Esempio:
pwd
Shell builtin
mv
Comando esterno
cd
cat
exit
-
Risolvi i seguenti comandi che utilizzano le virgolette:
Esempio:
echo "$HOME is my home directory"
echo /home/user is my home directory
touch "$USER"
touch 'touch'
Esercizi Esplorativi
-
Con un unico comando e utilizzando l’espansione delle parentesi graffe in Bash (controlla la pagina di manuale di Bash), crea 5 file numerati da 1 a 5 con il prefisso
game
(game1
,game2
, …). -
Elimina tutti i 5 file che hai appena creato con un solo comando, utilizzando un carattere speciale diverso dal precedente (cerca Pathname Expansion nelle pagine di manuale di Bash).
-
Esistono altri modi per far interagire due comandi tra loro? Quali sono?
Sommario
In questa lezione hai imparato:
-
I principi della shell Linux;
-
Cos’è la shell Bash;
-
La struttura della Command Line;
-
Una introduzione al quoting.
Comandi utilizzati negli esercizi:
bash
-
La shell più popolare sui computer Linux.
echo
-
Scrive del testo sul terminale.
ls
-
Elenca il contenuto di una directory.
type
-
Mostra come viene eseguito uno specifico comando.
touch
-
Crea un file vuoto o aggiorna la data di modifica di un file esistente.
hostname
-
Mostra o modifica il nome host di un sistema.
Risposte agli Esercizi Guidati
-
Suddividi le seguenti righe nelle singole componenti: comando, opzione(i)/parametro(i) ed argomento(i):
-
ls -l /etc
Comando:
ls
Opzione:
-l
Argomento:
/etc
-
ls -l -a
Comando:
ls
Opzione:
-l -a
Argomento:
-
cd /home/user
Comando:
cd
Opzione:
Argomento:
/home/user
-
-
Scopri la tipologia dei seguenti comandi:
cd
Shell builtin
cat
Comando esterno
exit
Shell builtin
-
Risolvi i seguenti comandi che utilizzano le virgolette:
touch "$USER"
tom
touch 'touch'
Crea un file chiamato
touch
Risposte agli Esercizi Esplorativi
-
Con un unico comando e utilizzando l’espansione delle parentesi graffe in Bash (controlla la pagina di manuale di Bash), crea 5 file numerati da 1 a 5 con il prefisso
game
(game1
,game2
, …).È possibile utilizzare gli intervalli per indicare i numeri da 1 a 5 all’interno di un unico comando:
$ touch game{1..5} $ ls game1 game2 game3 game4 game5
-
Elimina tutti i 5 file che hai appena creato con un solo comando, utilizzando un carattere speciale diverso dal precedente (cerca Pathname Expansion nelle pagine di manuale di Bash).
Poiché tutti i file iniziano con
game
e terminano con un singolo carattere (un numero da 1 a 5 in questo caso), può essere utilizzato?
come carattere speciale per indicare l’ultimo carattere nel nome del file:$ rm game?
-
Esistono altri modi per far interagire due comandi tra loro? Quali sono?
Sì, un comando potrebbe, per esempio, scrivere i dati in un file che viene poi elaborato da un altro comando. Linux può anche prendere l’output di un comando e utilizzarlo come input per un altro comando. Questo meccanismo si chiama piping; ne scopriremo di più in una delle prossime lezioni.