Translation(s): English - Italiano


Informazioni generali

Le variabili d'ambiente sono stringhe con nome disponibili per tutte le applicazioni. Le variabili sono usate per adattare il comportamento di ciascuna applicazione all'ambiente in cui viene eseguita. Si possono definire percorsi per i file, opzioni di lingua e così via. Si può controllare il manuale di ciascuna applicazione per vedere quali variabili vengano usate da essa.

Detto ciò, ci sono diverse variabili standard negli ambienti Linux:

Per vedere le proprie variabili attualmente definite, aprire un terminale e digitare il comando "env".

Le variabili vengono definite con coppie nome-valore: "NOME = stringa qualsiasi come valore". Il nome della variabile solitamente è tutto in lettere maiuscole; tutto ciò che segue il segno di uguaglianza, fino al carattere di fine riga, è considerato come il valore della variabile. Gli spazi bianchi prima o dopo il segno di uguaglianza sono ignorati. Le variabili possono essere definite ad hoc, scrivendo il comando appropriato in un terminale. In Bash questo sarebbe "export MIAVAR=Ciao mondo". In questo caso la variabile rimane definita fino alla fine della sessione di terminale.

Quando si lavora in shell o con script di shell, se non si desidere sovrascrivere il valore precedente della variabile, includere il nome della variabile nella nuova definizione. Ad esempio, in Bash usare: "export PATH=$PATH:~/bin". Questo esempio mostra come aggiungere la directory bin all'interno della directory home dell'utente nella variabile d'ambiente PATH.

Nella maggior parte dei casi è molto comodo memorizzare queste variabili in un file di configurazione che viene letto all'avvio del sistema e quando l'utente fa il login, in modo che siano disponibili automaticamente. Sfortunatamente ciò non è sempre così semplice come sembra. Perché? Per un paio di ragioni.

  1. Le variabili d'ambiente vengono ereditate; il programma genitore cioè imposta l'ambiente dei processi figli. È necessario configurare le impostazioni del genitore in modo che vengano passate a tutti i processi figli.
  2. I programmi genitori in questione sono svariate shell e gestori di finestre, ma ciascuno di essi legge un file di configurazione (file punto) diverso quando viene avviato.

Perciò ora è chiaro che deve essere considerato sia l'ordine di avvio dei processi di sistema, sia i file di configurazione che questi leggono all'avvio. Vedere la pagina sui file di configurazione, oppure continuare a leggere questa pagina ...

Ci sono due modi in cui si può usare la propria macchina Linux: dalla console testuale o con un'interfaccia utente grafica.

Usando la console testuale

Il processo di avvio per ciò che riguarda la definizione di variabili d'ambiente quando viene usata una console testuale (chiamata anche shell di login).

  1. Alla fine dell'avvio viene avviato "init", il genitore di tutti i processi. L'ambiente di init, compresa la variabile PATH, viene definito nel suo codice sorgente e non può essere modificato al momento dell'esecuzione.
  2. init esegue gli script di avvio in /etc/init.d a seconda del runlevel impostato in /etc/inittab. Dato che l'ambiente di init è molto scarno, gli script definiscono le variabili d'ambiente richieste al loro interno.

  3. init avvia il processo di login testuale che rimane in ascolto per i login utente. Quando un utente fa il login, il processo login controlla il file /etc/passwd per vedere quale shell deve avviare per quel particolare utente.

  4. La shell viene avviata e legge i suoi file di configurazione specifici.
    1. Bash legge prima /etc/profile per ottenere i valori definiti per tutti gli utenti; dopo cerca ~/.bash_profile, ~/.bash_login e ~/.profile, in questo ordine, e legge ed esegue i comandi nel primo di questi file che esiste ed è leggibile. b. (informazioni su altre shell sono benvenute)

Ora le variabili d'ambiente sono pronte per essere usate dalle aplicazioni che vengono avviate dal terminale.

Usando l'interfaccia utente grafica

Il processo di avvio per ciò che riguarda la definizione di variabili d'ambiente quando viene usato un login grafico. (Le informazioni in questa sezione sono specifiche per Gnome e GDM.)

  1. Alla fine dell'avvio di sistema, viene avviato "init", il genitore di tutti i processi.
  2. init esegue gli script di avvio in /etc/init.d a seconda del runlevel impostato in /etc/inittab. Dato che l'ambiente di init è molto scarno, gli script definiscono le variabili d'ambiente richieste al loro interno.

  3. init avvia il display manager GDM che, a sua volta, avvia il login grafico.
  4. Quando l'utente fa il login con successo, GDM avvia xsession che legge il file /etc/gdm/Xsession e con esso le variabili d'ambiente per la sessione dell'utente. La versione predefinita del file Xsession legge prima /etc/profile per le impostazioni globali e poi ~/.profile per aggiungere le impostazioni individuali dell'utente.

Ora le variabili d'ambiente sono impostate e vengono usate quando vengono eseguiti programmi all'interno di questa sessione.

Guida rapida

Per coloro che hanno fretta e desiderano semplicemente far funzionare le cose, ecco cosa si può fare.

Note ed eccezioni

Startx da terminale

Se si avvia il sistema X Window (la GUI) da una console testuale, le variabili d'ambiente sono già definite come spiegato precedentemente. Tuttavia, il gestore di finestre può rileggere gli stessi file un'altra volta (vedere in seguito). Ciò non è solitamente un problema, ma può avere risultati inaspettati come la variabile PATH che ha tutte le voci elencate due volte.

Shell a cascata

Se si avvia un'altra shell da quella di login (sì, è possibile farlo), la seconda è una shell "non di login". Non leggera i file di avvio nominati, ma cercherà invece gli script di avvio "non di login" nella directory home dell'utente. In bash è chiamato ~/.bashrc. Per evitare di specificare gli stessi valori in due posti, solitamente lo script di avvio della shell di login, ~/.bash_profile include ~/.bashrc alla fine della sua esecuzione. Per implementare questo sistema includere le righe seguenti nel proprio file ~/.bash_profile:

if [ -f ~/.bashrc ]; then
   . ~/.bashrc;
fi

Finestra di terminale in X

Se si avvia una finestra di terminale/console nell'ambiente desktop grafico, si tratterà di un terminale non di login e leggerà solo lo script di avvio non di login dell'utente. Per Bash questo è ~/.bashrc.

Usando su

Il comando "su" viene usato per diventare un altro utente durante una sessione di login. È usato comunemente per ottenere temporaneamente i permessi di root da una sessione normale. Il comando "su" reimposta il valore della variabile d'ambiente PATH a quello definito in /etc/login.defs dalle variabili ENV_PATH e ENV_SUPATH. Notare che l'uso dello strumento Gnome "gksu" dal pannello di Gnome, usa in modo predefinito "su" internamente (cioè il proprio valore di PATH andrà perso se non lo si configura in login.defs).