2.1 Lezione 2
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: |
2 di 2 |
Introduzione
Tutte le shell gestiscono una serie di informazioni di stato durante ogni sessione di shell. Queste informazioni di runtime possono cambiare durante la sessione e influenzano il comportamento della shell stessa. Questi dati vengono utilizzati anche dai programmi per individuare elementi della configurazione del sistema. La maggior parte di questi dati è archiviata nelle così dette variabili, che tratteremo in questa lezione.
Variabili
Le variabili sono contenitori di dati, come testo o numeri. Una volta impostatolo, è possibile accedere al valore di una variabile in un secondo momento. Le variabili hanno un nome che consente di accedere a una specifica variabile anche quando il suo contenuto cambia. Sono uno strumento molto comune nella maggior parte dei linguaggi di programmazione.
Nella maggior parte delle shell Linux esistono due tipi di variabili:
- Variabili locali
-
Queste variabili sono disponibili solamente per il processo shell corrente. Se crei una variabile locale e poi avvii un altro programma da questa shell, quel programma non potrà più accedere alla variabile. Poiché non vengono ereditate dai sottoprocessi, queste variabili sono chiamate variabili locali.
- Variabili ambientali
-
Queste variabili sono disponibili sia in una sessione di shell specifica sia nei sottoprocessi generati da questa sessione di shell. Queste variabili possono essere utilizzate per passare le informazioni di configurazione ai comandi che vengono eseguiti. Poiché i programmi possono accedere a queste variabili, vengono chiamate variabili ambientali. La maggior parte delle variabili ambientali si trova in lettere maiuscole (per esempio
PATH
,DATE
,USER
). Un insieme di variabili d’ambiente standard fornisce, per esempio, informazioni sulla directory home dell’utente o sul tipo di terminale. Talvolta il set completo di tutte le variabili ambientali viene chiamato ambiente.
Note
|
Le variabili non sono permanenti. Quando la shell in cui sono state impostate viene chiusa, tutte le variabili e il loro contenuto vengono persi. La maggior parte delle shell fornisce dei file di configurazione che contengono variabili che vengono impostate ogni volta che viene avviata una nuova shell. Le variabili che devono essere impostate in modo permanente devono essere aggiunte a uno di questi file di configurazione. |
Gestire le Variabili
In qualità di amministratore di sistema dovrai creare, modificare o rimuovere sia le variabili locali sia quelle ambientali.
Lavorare con le Variabili Locali
È possibile impostare una variabile locale utilizzando l’operatore =
(uguale). Un semplice assegnamento creerà una variabile locale:
$ greeting=hello
Note
|
Non lasciare alcuno spazio prima o dopo l’operatore |
Puoi mostrare qualsiasi variabile utilizzando il comando echo
. Il comando di solito visualizza il testo nella sezione degli argomenti:
$ echo greeting greeting
Per accedere al valore della variabile dovrai utilizzare $
(simbolo del dollaro) davanti al nome della variabile.
$ echo $greeting hello
Come si può vedere, la variabile è stata creata. Ora apri un’altra shell e prova a visualizzare il contenuto della variabile creata.
$ echo $greeting
Non viene visualizzato nulla. Ciò dimostra che le variabili esistono sempre solamente in una specifica shell.
Per verificare che la variabile sia effettivamente una variabile locale, prova a generare un nuovo processo e controlla se questo processo può accedere alla variabile. Possiamo farlo avviando un’altra shell e facendo eseguire a questa shell il comando echo
. Poiché la nuova shell viene eseguita in un nuovo processo, non erediterà le variabili locali dal suo processo padre:
$ echo $greeting world hello world $ bash -c 'echo $greeting world' world
Note
|
Assicurati di utilizzare le virgolette singole nell’esempio qui sopra. |
Per rimuovere una variabile, dovrai utilizzare il comando unset
:
$ echo $greeting hey $ unset greeting $ echo $greeting
Note
|
|
Lavorare con le Variabili Globali
Per rendere una variabile disponibile ai sottoprocessi, possiamo trasformarla da variabile locale a variabile ambientale. Questo viene fatto tramite il comando export
. Quando viene invocato con il nome della variabile, questa viene aggiunta all’ambiente della shell:
$ greeting=hello $ export greeting
Note
|
Di nuovo, assicurati di non usare |
Un modo più semplice per creare una variabile ambientale è combinare entrambi i comandi di cui sopra, assegnando il valore della variabile nella sezione del comando dedicata all’argomento.
$ export greeting=hey
Controlliamo di nuovo se la variabile è accessibile ai sottoprocessi:
$ export greeting=hey $ echo $greeting world hey world $ bash -c 'echo $greeting world' hey world
Un altro modo per utilizzare le variabili ambientali consiste nell’inserirle davanti ai comandi. Possiamo testarlo con la variabile ambientale TZ
che contiene il fuso orario. Questa variabile è usata dal comando date
per determinare quale fuso orario visualizzare:
$ TZ=EST date Thu 31 Jan 10:07:35 EST 2019 $ TZ=GMT date Thu 31 Jan 15:07:35 GMT 2019
Puoi visualizzare tutte le variabili ambientali usando il comando env
.
La Variabile PATH
La variabile PATH
è una delle più importanti variabili ambientali in un sistema Linux. Memorizza un elenco di directory, separate da due punti, che contengono programmi eseguibili che possono essere chiamati come comandi dalla shell Linux.
$ echo $PATH /home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Per aggiungere una nuova directory alla variabile, sarà necessario utilizzare il segno di interpunzione dei due punti (:
).
$ PATH=$PATH:new_directory
Ecco un esempio:
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ PATH=$PATH:/home/user/bin $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/bin
Come puoi vedere $PATH
viene utilizzato nel nuovo valore assegnato a PATH
. Questa variabile viene risolta durante l’esecuzione del comando e garantisce che il contenuto originale della variabile venga preservato. Ovviamente puoi usare anche altre variabili nell’operazione di assegnamento:
$ mybin=/opt/bin $ PATH=$PATH:$mybin $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/bin:/opt/bin
La variabile PATH
deve essere gestita con cautela, poiché è fondamentale per lavorare dalla Command Line. Consideriamo la seguente variabile PATH
:
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Per scoprire come la shell invoca uno specifico comando, può essere eseguito which
con il nome del comando come argomento. Possiamo, per esempio, tentare di scoprire dove è memorizzato nano
:
$ which nano /usr/bin/nano
Come si può vedere, l’eseguibile nano
si trova nella directory /usr/bin
. Rimuoviamo tale directory dalla variabile e controlliamo se il comando funziona ancora:
$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games
Cerchiamo nuovamente il comando nano
:
$ which nano which: no nano in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games)
Come si può vedere, il comando non viene trovato e quindi non viene eseguito. Il messaggio di errore spiega anche il motivo per cui il comando non è stato trovato e dove è stato cercato.
Riaggiungiamo le directory e proviamo a eseguire nuovamente il comando.
$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ which nano /usr/bin/nano
Ora il nostro comando funziona di nuovo.
Tip
|
L’ordine degli elementi in |
Esercizi Guidati
-
Crea una variabile locale
number
. -
Crea una variabile ambientale
ORDER
utilizzando uno dei due metodi sopra riportati. -
Visualizza sia i nomi delle variabili sia il loro contenuto.
-
Quali sono gli ambiti delle variabili create in precedenza?
Esercizi Esplorativi
-
Crea una variabile locale
nr_files
e assegnale il numero di righe trovate nel file/etc/passwd
. Suggerimento: controlla il comandowc
e la sostituzione dei comandi senza dimenticare le virgolette. -
Crea una variabile ambientale
ME
. Assegnale il valore della variabileUSER
. -
Aggiungi il valore della variabile
HOME
aME
, utilizzando il delimitatore:
. Visualizza il contenuto della variabileME
. -
Utilizzando l’esempio della data sopra riportato, crea una variabile chiamata
today
e assegnale la data di uno dei fusi orari. -
Crea un’altra variabile chiamata
today1
e assegnale la data del sistema.
Sommario
In questa lezione hai imparato:
-
I tipi di variabili;
-
Come creare le variabili;
-
Come gestire le variabili.
Comandi utilizzati negli esercizi:
env
-
Mostra l’ambiente corrente.
echo
-
Genera del testo come output.
export
-
Rende le variabili locali disponibili ai sottoprocessi.
unset
-
Rimuove una variabile.
Risposte agli Esercizi Guidati
-
Crea una variabile locale
number
.$ number=5
-
Crea una variabile ambientale
ORDER
utilizzando uno dei due metodi sopra riportati.$ export ORDER=desc
-
Visualizza sia i nomi delle variabili sia il loro contenuto.
$ echo number number $ echo ORDER ORDER $ echo $number 5 $ echo $ORDER desc
-
Quali sono gli ambiti delle variabili create in precedenza?
-
L’ambito della variabile locale
number
è solamente la shell corrente. -
L’ambito della variabile d’ambiente
ORDER
è la shell corrente e tutte le sottoshell da essa generate.
-
Risposte agli Esercizi Esplorativi
-
Crea una variabile locale
nr_files
e assegnale il numero di righe trovate nel file/etc/passwd
. Suggerimento: controlla il comandowc
e la sostituzione dei comandi senza dimenticare le virgolette.$ nr_files=`wc -l /etc/passwd`
-
Crea una variabile ambientale
ME
. Assegnale il valore della variabileUSER
.$ export ME=$USER
-
Aggiungi il valore della variabile
HOME
aME
, utilizzando il delimitatore:
. Visualizza il contenuto della variabileME
.$ ME=$ME:$HOME $ echo $ME user:/home/user
-
Utilizzando l’esempio della data sopra riportato, crea una variabile chiamata
today
e assegnale la data di uno dei fusi orari.Nell’esempio seguente vengono utilizzati i fusi orari GMT ed EST, ma qualsiasi fuso orario è valido.
$ today=$(TZ=GMT date) $ echo $today Thu 31 Jan 15:07:35 GMT 2019
o
$ today=$(TZ=EST date) $ echo $today Thu 31 Jan 10:07:35 EST 2019
-
Crea un’altra variabile chiamata
today1
e assegnale la data del sistema.Supponendo di essere nell’orario GMT:
$ today1=$(date) $ echo $today1 Thu 31 Jan 10:07:35 EST 2019