Gentoo Logo

1.  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.

Proměnná Popis
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í.

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

Výpis kódu 1.1: Ukázkovy 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"

1.  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:

Výpis kódu 1.1: /etc/env.d/05gcc

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:

Výpis kódu 1.1: /etc/env.d/99local

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 proměnných ze souborů z adresáře /etc/env.d; zpracovávány jsou pouze ty soubory, jejichž jména začínají dvěma číslicemi.

Výpis kódu 1.1: Pořadí aktualizací pro env-update

         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:

Výpis kódu 1.1: Aktualizace prostředí

# env-update && source /etc/profile

Poznámka: Výše zmíněný příkaz pouze aktualizuje proměnné v aktuálním terminálu, nově otevřených konzolích a jejich potomcích. Proto pokud pracujete v X11, buď budete muset spustit source /etc/profile v každém terminálu který otevřete nebo restartovat X, aby se změny promítly. Používáte-li login manager (grafického správce přihlašování), spusťte jako root /etc/init.d/xdm restart; pokud jej nepoužíváte, odhlaste se a znovu se nalogujte.

1.  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/uzivatel/bin a aktuální adresář (tj. ten, ve kterém se právě nacházíte) 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:

Výpis kódu 1.1: Rozšíření PATH pro jedonoho uživatele - ~/.bashrc

(dvojtečka na konci použije aktuální adresář)
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í.

Výpis kódu 1.1: Definice proměnné prostředí pro současnou relaci

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

Aktualizace: 28. září 2005

Poslední aktualizace původni verze tohoto dokumentu: 29. červen 2012

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.