1.9 2005-05-05
Proměnné prostředí? Co to je

Proměnná prostředí je pojmenovaný objekt, který uchovává nějakou informaci používanou jedno nebo více aplikacemi. Mnoho uživatelů (hlavně ti, kdo s Linuxem nepracují déle) tato nastavení považují za divné nebo nesnadno udržovatelné, není to však pravda: použití proměnných prostředí se dá ve skutečnosti snadno ovlivnit nastavení celé řady aplikací jedinou změnou.

Důležité příklady

V následující tabulce naleznete několik důležitých proměnných prostředí, které jsou použity na linuxových systémech, včetně jejich popisu. Ukázkové hodnoty jsou popsány níže.

PATH Tato proměnná obsahuje dvojtečkou oddělený seznam adresářů, ve kterých systém vyhledává spustitelné soubory. Zadáte-li jméno příkazu (jako například ls, rc-update nebo emerge), avšak tento není nalezen v žádném z těchto adresářů, systém jej nebude moci spustit a budete muset použít plnou cestu (například /bin/ls). ROOTPATH Slouží ke stejné funkci jako PATH, avšak obsahuje seznam procházených adresářů pro uživatele root. LDPATH Tato proměnná obsahuje dvojtečkou oddělený seznam adresářů procházených dynamickým linkerem při hledání knihovny. MANPATH Dvojtečkou oddělený seznam adresářů, ve kterých příkaz man vyhledává manuálové stránky. INFODIR Dvojtečkou oddělený seznam adresářů, ve kterých příkaz info vyhledává informační stránky. PAGER Cesta k programu, který se používá pro výpis obsahu souborů (například less nebo more). EDITOR Tato proměnná určuje cestu k programu, který se používá pro editaci obsahu souborů (například nano nebo vi). KDEDIRS Obsahuje dvojtečkou oddělený seznam adresářů obsahujících data specifická pro KDE. CLASSPATH Dvojtečkou oddělený seznam adresářů obsahujících Javové třídy (class). CONFIG_PROTECT Tato proměnná obsahuje mezerou oddělený seznam adresářů, které by Portage mělo při aktualizacích chránit. CONFIG_PROTECT_MASK Tato proměnná obsahuje mezerou oddělený seznam adresářů, které by Portage nemělo chránit během aktualizací.
Proměnná Popis

Následují ukázky definic všech výše zmíněných proměnných:

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"
CLASSPATH="/opt/blackdown-jre-1.4.1/lib/rt.jar:."
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
Globální definice proměnných Adresář /etc/env.d

Adresář /etc/env.d v Gentoo slouží k centralizaci správy proměnných prostředí; naleznete v něm mnoho souborů, jako například 00basic, 05gcc atd., které obsahují definice proměnných pro aplikace, po kterých jsou pojmenovány.

Například při instalaci gcc byl ebuildem vytvořen soubor 05gcc, který obsahuje definice těchto proměnných:

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"

Jiné distribuce Vás žádají o změnu nebo přidávání proměnných prostředí do souboru /etc/profile nebo podobných, avšak Gentoo Vám (a systému Portage) jejich správu usnadní, neboť vše potřebné naleznete v jednom adresáři.

Například během aktualizace gcc dojde ke změně souboru /etc/env.d/05gcc bez nutnosti ručního zásahu uživatele.

Toto není výhoda jenom pro Portage, ale i pro Vás jakožto uživatele. Občas můžete potřebovat nastavit nějakou proměnnou pro celý systém, například proměnnou http_proxy. Nemusíte se probírat obrovským souborem /etc/profile, ale stačí, abyste vytvořili nový soubor (/etc/env.d/99local) a do něj zadali potřebné definice:

http_proxy="proxy.server.com:8080"

Použitím jednoho souboru pro všechny Vaše proměnné navíc získáte přehled o těch proměnných, které jste zadali sami.

Skript env-update

Proměnnou PATH definuje v adresáři /etc/env.d více souborů. Není to však omyl - spuštění env-update spojí tyto definice dohromady před samotnou aktualizací proměnných. Proto je snadné, aby jednotlivé balíčky (a nebo uživatelé) přidávaly vlastní nastavení bez vzájemné interference.

Skript env-update spojí definice ze všech souborů z adresáře /etc/env.d podle abecedního pořadí; proto jména souborů v /etc/env.d začínají číslem.

         00basic        99kde-env       99local
     +-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"

Toto spojování obsahu proměnných však neproběhne vždy, avšak pouze pro tyto proměnné: KDEDIRS, PATH, CLASSPATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH a PRELINK_PATH_MASK. Pro všechny ostatní proměnné platí, že se použije naposledy definovaná hodnota (abecední pořadí souborů uvnitř /etc/env.d).

Spuštění skriptu env-update vytvoří proměnné prostředí a uloží je do /etc/profile.env, který je dále používán souborem /etc/profile. Zároveň použije informace z proměnné LDPATH a použije je k vytvoření souboru /etc/ld.so.cache sloužícího dynamickému linkeru.

Chcete-li ihned použít výsledky env-update ihned po jeho spuštění, spusťte následující příkaz. Uživatelé, kteří Gentoo instalovali sami, si jej pravděpodobně pamatují z instalace:

# env-update && source /etc/profile
Lokální definice proměnných Pro jednoho uživatele

Ne vždy chcete definovat proměnnou prostředí globálně pro celý systém. Můžete například chtít přidat /home/my_user/bin do proměnné PATH, avšak ne pro všechny uživatele. V takovém případě byste měli použít ~/.bashrc nebo ~/.bash_profile:

PATH="${PATH}:/home/my_user/bin"

Až se znovu přihlásíte, proměnná PATH bude změněna.

Pro aktuální relaci

Někdy můžete chtít použít programy z dočasnéhop adresáře bez jakéhokoli editování souborů nebo zadávání plné cesty před každým příkazem, protože o změnu stojíte pouze na krátkou dobu.

V takovém případě stačí definovat proměnnou PATH pouze pro současnou relaci příkazem export. Tyto dočasné změny proměnné budou funkční až do odhlášení.

# export PATH="${PATH}:/home/my_user/tmp/usr/bin"