Handbook:SPARC/Working/EnvVar/it
Variabili d'ambiente
Introduzione
Una variabile d'ambiente è un oggetto denominato che contiene informazioni utilizzate da una o più applicazioni. Molti utenti (e specialmente quelli nuovi su Linux) lo trovano un po' strano o ingestibile. Tuttavia, questo è un errore: utilizzando le variabili d'ambiente si può facilmente modificare un'impostazione di configurazione per una o più applicazioni.
Esempi importanti
La seguente tabella elenca numerose variabili usate da un sistema Linux descrivendone il loro uso. Dopo la tabella vengono presentati dei valori di esempio.
Variabile | Descrizione |
---|---|
PATH | Questa variabile contiene un elenco di cartelle separate dai due punti in cui il sistema cercherà i file eseguibili. Se viene inserito il nome di un eseguibile (come ls, rc-update o emerge) ma questo eseguibile non si trova in una delle cartelle elencate, allora il sistema non lo eseguirà (a meno che non venga immesso il percorso completo nel comando, come /bin/ls). |
ROOTPATH | Questa variabile ha la stessa funzione di PATH, ma elenca solo le cartelle che andranno controllate quando l'utente root (radice) immette un comando. |
LDPATH | Questa variabile contiene un elenco di cartelle separate dai due punti in cui il linker dinamico cerca per trovare una libreria. |
MANPATH | Questa variabile contiene un elenco di cartelle separate dai due punti in cui il comando man cerca le pagine man (manuale). |
INFODIR | Questa variabile contiene un elenco di cartelle separate dai due punti in cui il comando info cerca le pagine di informazione. |
PAGER | Questa variabile contiene il percorso al programma usato per elencare il contenuto dei file (come less o more). |
EDITOR | Questa variabile contiene il percorso al programma utilizzato per modificare il contenuto dei file (come nano o vi). |
KDEDIRS | Questa variabile contiene un elenco di cartelle separate dai due punti che contengono materiale specifico per KDE. |
CONFIG_PROTECT | Questa variabile contiene un elenco di cartelle delimitate da spazi che saranno protette da Portage durante gli aggiornamenti. |
CONFIG_PROTECT_MASK | Questa variabile contiene un elenco di cartelle delimitate da spazi che non saranno protette da Portage durante gli aggiornamenti. |
Di seguito è riportato un esempio di definizione per tutte queste variabili:
PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin"
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info:/usr/local/share/info"
PAGER="/usr/bin/less"
EDITOR="/usr/bin/vim"
KDEDIRS="/usr"
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \
/usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \
/usr/share/texmf/tex/platex/config/ /usr/share/config"
CONFIG_PROTECT_MASK="/etc/gconf"
Definire le variabili globalmente
La cartella env.d
Per centralizzare le definizioni di queste variabili, Gentoo ha introdotto la cartella /etc/env.d/. All'interno di questa cartella sono disponibili numerosi file, come 00basic, 05gcc, ecc., che contengono le variabili necessarie all'applicazione menzionata nel nome stesso del file.
Per esempio, quando gcc risulta installato, un file chiamato 05gcc è stato creato da ebuild, il quale contiene le definizioni delle seguenti variabili:
PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info"
CC="gcc"
CXX="g++"
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
Altre distribuzioni potrebbero indicare ai loro utenti di modificare o aggiungere queste variabili d'ambiente su /etc/profilo o su altre posizioni. Gentoo, d'altro canto, rende facile per l'utente (e per Portage) mantenere e gestire le variabili d'ambiente senza dover prestare attenzione ai numerosi file che possono contenere queste variabili d'ambiente.
Per esempio, quando gcc viene aggiornato, il file /etc/env.d/05gcc viene anch'esso aggiornato senza chiedere alcuna interazione da parte dell'utente.
Questo non solo avvantaggia Portage, ma anche l'utente. Occasionalmente agli utenti potrebbe venir chiesto di impostare una determinata variabile d'ambiente a livello di sistema. Ad esempio, prendiamo la variabile http_proxy. Anziché mettere in disordine /etc/profile, gli utenti possono ora semplicemente creare un file (per esempio /etc/env.d/99local) ed inserirci le definizioni:
http_proxy="proxy.server.com:8080"
Utilizzando lo stesso file per tutte le variabili autogestite, gli utenti hanno una rapida panoramica sulle variabili che loro stessi hanno definito.
env-update
Svariati file in /etc/env.d/ definiscono la variabile PATH. Questo non è un errore: quando viene eseguito il comando env-update, esso aggiungerà le varie definizioni prima di aggiornare le variabili d'ambiente, rendendo così facile per i pacchetti (o gli utenti) aggiungere la propria impostazione delle variabile d'ambiente senza interferire con i valori preesistenti.
Lo script env-update aggiungerà i valori secondo l'ordine alfabetico dei file /etc/env.d/. I nomi dei file devono iniziare con due cifre decimali.
00basic 99kde-env 99local
+-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"
Non sempre avviene la concatenazione di variabili, solo con le seguenti variabili: ADA_INCLUDE_PATH, ADA_OBJECTS_PATH, CLASSPATH, KDEDIRS, PATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH, PRELINK_PATH_MASK, PKG_CONFIG_PATH, and PYTHONPATH. Per tutte le altre variabili viene usato il valore definito per ultimo (secondo l'ordine alfabetico dei file in /etc/env.d/).
È possibile aggiungere più variabili a questo elenco di variabili concatenate, aggiungendo il nome della variabile nella variabile COLON_SEPARATED o in SPACE_SEPARATED (anche all'interno di un file in /etc/env.d/).
Quando si esegue env-update, lo script creerà tutte le variabili d'ambiente e le posizionerà in /etc/profile.env (usato da /etc/profile). Esso estrae anche le informazioni dalla variabile LDPATH e le usa per creare /etc/ld.so.conf. Dopo ciò, verrà eseguito ldconfig per ricreare il file /etc/ld.so.cache usato dal linker (collegatore) dinamico.
Per vedere l'effetto di env-update immediatamente dopo averlo eseguito, eseguire il seguente comando per aggiornare l'ambiente. Gli utenti che hanno già installato autonomamente Gentoo probabilmente lo ricorderanno dalle istruzioni di installazione:
root #
env-update && source /etc/profile
Il comando precedente aggiorna solo le variabili nel terminale corrente, nei nuovi terminali aperti e nei terminali "figlio". Quindi, se l'utente sta lavorando in X11, deve digitare source /etc/profile su ogni nuovo terminale aperto o riavviare X così che tutti i nuovi terminali generino le nuove variabili. Se viene utilizzato un gestore di login, è necessario diventare root e riavviare il servizio /etc/init.d/xdm.
Non è possibile utilizzare le variabili della shell quando si definiscono altre variabili. Ciò significa che cose come
FOO="$BAR"
(dove $BAR è un'altra variabile) vengono proibite.Definire le variabili localmente
Specifico per l'utente
Potrebbe non essere necessario definire a livello globale una variabile d'ambiente. Per esempio, si potrebbe voler aggiungere la cartella /home/my_user/bin e la cartella di lavoro corrente (quella in cui si trova l'utente) alla variabile PATH, ma senza che gli altri utenti sul sistema abbiano questa impostazione nella loro variabile PATH. Per definire localmente una variabile d'ambiente, usare ~/.bashrc o ~/.bash_profile:
# I due punti non seguiti da alcuna cartella vengono considerati come cartella di lavoro corrente
PATH="${PATH}:/home/my_user/bin:"
Dopo il logout/login (sconnessione e riconnessione), la variabile PATH verrà aggiornata.
Specifico per la sessione
Talvolta vengono richieste definizioni anche più rigide. Per esempio, un utente potrebbe voler essere in grado di utilizzare i binari da una cartella temporanea creata senza utilizzare il percorso dei binari stessi o modificando ~/.bashrc per il breve tempo necessario.
In questo caso, basta definire la variabile PATH nella sessione corrente usando il comando export. Finché l'utente non si disconnette, la variabile PATH utilizzerà le impostazioni temporanee.
root #
export PATH="${PATH}:/home/my_user/tmp/usr/bin"