Handbook:Alpha/Working/EnvVar/hu
Környezeti változók
Bevezetés
A környezeti változó egy elnevezett objektum, amelyet egy vagy több alkalmazás használhat. Környezeti változók használatával könnyedén megváltoztatható egy vagy több alkalmazás beállítása.
Fontos példák
Az alábbi táblázat felsorolja a Linux rendszer által használt változókat, és leírja azok használatát. Példaértékeket a táblázat után mutatunk be.
Változó | Leírás |
---|---|
PATH | Ez a változó egy kettősponttal elválasztott könyvtárlistát tartalmaz, amelyekben a rendszer végrehajtható fájlokat keres. Ha egy végrehajtható fájl neve kerül beírásra (például ls, rc-update vagy emerge), de ez a végrehajtható fájl nincs a listában szereplő könyvtárak egyikében sem, akkor a rendszer nem hajtja végre azt (kivéve, ha a teljes elérési út van megadva parancsként, például /bin/ls). |
ROOTPATH | Ez a változó ugyanazt a funkciót látja el, mint a PATH, de ez csak azokat a könyvtárakat sorolja fel, amelyeket ellenőrizni kell, amikor a root-felhasználó ad parancsot. |
LDPATH | Ez a változó egy kettősponttal elválasztott könyvtárlistát tartalmaz, amelyeket a dinamikus linker keres a könyvtárak megtalálásához. |
MANPATH | Ez a változó egy kettősponttal elválasztott könyvtárlistát tartalmaz, amelyeket a man(1) parancs keres a man oldalak megtalálásához. |
INFODIR | Ez a változó egy kettősponttal elválasztott könyvtárlistát tartalmaz, amelyeket a info(1) parancs keres az információs oldalak megtalálásához. |
PAGER | Ez a változó tartalmazza az elérési útvonalat ahhoz a programhoz, amelyet a fájlok tartalmának listázására használnak (például less vagy more(1)). |
EDITOR | Ez a változó tartalmazza az elérési útvonalat ahhoz a programhoz, amelyet fájlok szerkesztésére használnak (például nano vagy vi). |
KDEDIRS | Ez a változó egy kettősponttal elválasztott könyvtárlistát tartalmaz, amely KDE-specifikus anyagokat tartalmaz. |
CONFIG_PROTECT | Ez a változó egy szóközzel elválasztott könyvtárlistát tartalmaz, amelyet a Portage szoftvercsomag-kezelőnek védenie kell a szotvercsomagok frissítése során. |
CONFIG_PROTECT_MASK | Ez a változó egy szóközzel elválasztott könyvtárlistát tartalmaz, amelyet nem kell védenie a Portage szoftvercsomag-kezelőnek a szoftvercsomagok frissítése során. |
Az alábbiakban bemutatjuk az összes ezen változók példadefinícióját:
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"
# Directories that are protected during package updates.
# Note the use of the \ (backslashes) on the end of the following lines which interprets to a single space-delimited line.
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"
# Directories that are _not_ protected during package updates.
CONFIG_PROTECT_MASK="/etc/gconf"
A változók globális meghatározása
Az env.d könyvtár
A változók meghatározásának központosítása érdekében a Gentoo bevezette az /etc/env.d/ könyvtárat. Ebben a könyvtárban több fájl található, például 50baselayout, gcc/config-x86_64-pc-linux-gnu stb., amelyek tartalmazzák a nevükben említett alkalmazásokhoz szükséges változókat.
Például, amikor a gcc telepítve van, egy gcc/config-x86_64-pc-linux-gnu nevű fájl jön létre az ebuild által, amely tartalmazza a következő változók definícióit:
/etc/env.d/gcc/config-x86_64-pc-linux-gnu
Alapértelmezett gcc engedélyezett környezeti változók a GCC 13-hoz.GCC_PATH="/usr/x86_64-pc-linux-gnu/gcc-bin/13"
LDPATH="/usr/lib/gcc/x86_64-pc-linux-gnu/13:/usr/lib/gcc/x86_64-pc-linux-gnu/13/32"
MANPATH="/usr/share/gcc-data/x86_64-pc-linux-gnu/13/man"
INFOPATH="/usr/share/gcc-data/x86_64-pc-linux-gnu/13/info"
STDCXX_INCDIR="g++-v13"
CTARGET="x86_64-pc-linux-gnu"
GCC_SPECS=""
MULTIOSDIRS="../lib64:../lib"
Más disztribúciók esetén a rendszergazdáknak meg kell változtatniuk vagy hozzá kell adniuk az ilyen környezeti változó definíciókat az /etc/profile fájlban vagy más helyeken. A Gentoo ezzel szemben megkönnyíti a rendszergazdák (és a Portage) számára a környezeti változók karbantartását és kezelését anélkül, hogy figyelniük kellene a számos fájlra, amelyek környezeti változókat tartalmazhatnak.
Például, amikor a gcc frissítve van, a hozzá tartozó fájl(ok) az /etc/env.d/gcc könyvtárban is frissülnek anélkül, hogy bármilyen adminisztratív beavatkozásra lenne szükség.
Még mindig vannak olyan esetek, amikor a rendszergazdát arra kérik, hogy rendszer szinten állítson be egy bizonyos környezeti változót. Példaként vegyük a http_proxy változót. Az /etc/profile könyvtár alatt található fájl szerkesztése helyett hozzon létre egy /etc/env.d/99local nevű fájlt, és írja bele a definíciót:
/etc/env.d/99local
Globális környezeti változó beállításahttp_proxy="proxy.server.com:8080"
Az összes testre szabott környezeti változóhoz ugyanazt a fájlt használva a rendszergazdák gyors áttekintést kapnak az általuk meghatározott változókról.
env-update
Számos fájl az /etc/env.d könyvtárban hozzáad definíciókat a PATH változóhoz. Ez nem hiba: amikor az env-update parancs végrehajtódik, hozzáfűzi a több definíciót, mielőtt atomikusan frissítené az egyes környezeti változókat, ezáltal megkönnyítve a szotvercsomagok (vagy rendszergazdák) számára, hogy hozzáadják saját környezeti változó beállításaikat anélkül, hogy beavatkoznának a már létező értékekbe.
Az env-update script alfabetikus sorrendben fogja hozzáadni az értékeket az /etc/env.d/ fájlok alapján. A fájlneveknek két tizedesjeggyel kell kezdődniük.
09sandbox 50baselayout 51dconf
+------------+----------------+-----------+
CONFIG_PROTECT_MASK="/etc/sandbox.d /etc/gentoo-release /etc/dconf ..."
A változók összefűzése nem mindig történik meg, csak a következő változókkal: 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, és PYTHONPATH. Az összes többi változónál az utoljára meghatározott érték (az /etc/env.d/ fájlok ábécé sorrendje alapján) kerül felhasználásra.
Lehetséges további változókat hozzáadni ehhez az összefűzött változók listájához úgy, hogy a változó nevét hozzáadja a COLON_SEPARATED vagy a SPACE_SEPARATED változókhoz (szintén egy /etc/env.d/ fájlon belül).
Amikor az env-update végrehajtásra kerül, a szkript létrehozza az összes környezeti változót és elhelyezi őket az /etc/profile.env fájlban (amit az /etc/profile használ). Ezen kívül kivonja az információt a LDPATH változóból és ezt felhasználva létrehozza az /etc/ld.so.conf fájlt. Ezután futtatja az ldconfig parancsot, hogy újra létrehozza az /etc/ld.so.cache fájlt, amelyet a dinamikus linker használ.
A env-update hatásainak észleléséhez azonnal hajtsa végre a következő parancsot a környezet frissítéséhez. Azok a felhasználók, akik maguk telepítették a Gentoo rendszert, valószínűleg emlékeznek erre a telepítési utasítások alapján:
root #
env-update && source /etc/profile
A fenti parancs csak az aktuális terminálban, az új konzolokban és azok gyermekeiben frissíti a változókat. Így, ha a felhasználó X11-ben dolgozik, be kell gépelnie a source /etc/profile parancsot minden újonnan megnyitott terminálban, vagy újra kell indítania az X-et, hogy az összes új terminál betöltse az új változókat. Ha egy bejelentkezés kezelőt használnak, root jogosultsággal kell rendelkezni és újra kell indítani az /etc/init.d/xdm szolgáltatást.
Nem lehetséges shell változókat használni más változók meghatározásakor. Ez azt jelenti, hogy olyan dolgok, mint a
FOO="$BAR"
(ahol a $BAR egy másik változó) tilosak.Helyi változók definiálása
Felhasználó specifikus
Nem feltétlenül szükséges egy környezeti változót globálisan meghatározni. Például valaki hozzá szeretné adni a PATH változóhoz a /home/my_user/bin könyvtárat és az aktuális munkakönyvtárat (ahol a felhasználó éppen tartózkodik), de nem akarja, hogy a rendszer többi felhasználója is ezeket a könyvtárakat használja a PATH változóban. Ahhoz, hogy egy környezeti változót helyileg definiáljunk, használhatjuk a ~/.bashrc fájlt (minden interaktív shell munkamenethez) vagy a ~/.bash_profile fájlt (bejelentkezési shell munkamenetekhez):
~/.bashrc
A PATH kiterjesztése helyi használatra# A colon followed by no directory is treated as the current working directory
PATH="${PATH}:/home/my_user/bin:"
Kilépés/bejelentkezés után a PATH változó frissülni fog.
Munkamenet specifikus
Néha még szigorúbb definíciókra van szükség. Például egy felhasználó szeretné használni a binárisokat egy ideiglenes könyvtárból anélkül, hogy a teljes elérési utat kellene használnia a binárisokhoz, és anélkül, hogy ideiglenesen módosítania kellene a ~/.bashrc fájlt.
Ebben az esetben csak a jelenlegi munkamenetben definiálja a PATH változót az export parancs használatával. Amíg a felhasználó nem jelentkezik ki, a PATH változó az ideiglenes beállításokat fogja használni.
root #
export PATH="${PATH}:/home/my_user/tmp/usr/bin"