A technológiai közösség többsége szeret parancssori felületen (CMD) vagy shellen keresztül interakcióba lépni a rendszerekkel. Ez általában megkönnyíti a munkájukat. Például létrehozhat egy olyan shell parancsot, amely automatikusan végrehajt több feladatot, ahelyett, hogy egy GUI több gombjára kellene kattintania.
Amikor elindít egy shell vagy CMD programot, az több információt is összeállít. Ez az információ határozza meg, hogyan éri el a program a mögöttes rendszererőforrásokat, valamint az általános viselkedést. Ezt egy környezetnek nevezett helyen tárolhatja. A környezet kulcs-érték párokat képviselő karakterláncokból áll. Ebben az útmutatóban a következőket fogjuk használni: Ubuntu 20.04 VPS példaként, amely végigvezeti Önt a környezeti vagy shell változók beállításán. Az útmutatónak más Linux disztribúciókra is érvényesnek kell lennie.
Mi a különbség a környezeti változók és a shell változók között?
Amikor elindít egy munkamenetet, az információk a rendszer beállításaiból és konfigurációs fájljaiból gyűlnek össze. Ezután ez elérhetővé válik a shell folyamat és annak gyermekfolyamatai számára. Ez az információ egy kulcs-érték párokból álló készlet ebben a formátumban:
|
1 2 3 |
KEY=value KEY="Some value" KEY=data1:data2 |
A változók nevei, azaz a kulcsok, megkülönböztetik a kis- és nagybetűket. Elfogadott konvenció azonban, hogy NAGYBETŰVEL írjuk őket. Ez segít megkülönböztetni őket más kontextusokban. A kettőspont ‘:’ karakterrel több értéket is hozzárendelhet ugyanahhoz a változóhoz. Fontos továbbá, hogy ne hagyjon szóközt az = jel körül. A kulcsok maguk a változók, és két csoportba sorolhatók: környezeti változók és shell változók. A környezeti változók tartalmazzák az összes rendszerszinten meghatározott változót, amelyek minden gyermek shell vagy folyamat számára elérhetők. Segítenek információt átadni a shell parancsokon keresztül indított folyamatoknak. A shell változók csak az adott shell munkamenetben meghatározott változókat tartalmazzák. Ezenkívül csak azokat a változókat tartalmazzák, amelyek kizárólag a saját shell példányukon belül érhetők el.
Környezeti és shell változók listázása
Alapértelmezés szerint a terminál két parancsot biztosít a környezeti és shell változók listázására: env vagy printenv. Alapértelmezett állapotukban ugyanazt az információt mutatják. Íme egy minta a parancsok kimenetéből:
Az env használata:

A printenv használata:

Mint látható, a kimenet ugyanaz. A különbség akkor jelentkezik, ha egy adott kulcs értékét szeretné megkapni. Ekkor kell használnia a printenv parancsot a változó nevével:

Több érték megtekintéséhez egynél több argumentumot is átadhat a printenv parancsnak. Az értékek az argumentumok megadásának sorrendjében fognak megjelenni:

Az echo parancsot is használhatja a változó nevével egy változó értékének megjelenítéséhez:

Az env parancs lehetővé teszi a programok futtatási környezetének módosítását azáltal, hogy változódefiníciókat ad át az alábbi szintaxis szerint:
|
1 |
env VAR1="var 1 value" command_to_run command_options |
Ez lehetővé teszi az értékek felülírását vagy új értékek beállítását, amelyeket a gyermekfolyamat használhat. A printenv és env parancsok a fent látható módon listázzák a környezeti változókat. Ezek már meg voltak határozva a rendszerfolyamatok számára. Ha a shell változók listáját szeretné látni, használhatja a set parancsot. Ha a set parancsot változók nélkül írja be, az visszaadja az összes környezeti változó, shell változó, helyi változó és shell függvény listáját:

Lehet, hogy túl sok változó van. Ha szükséges, lapozhatja őket a következő paranccsal:
|
1 |
set | less |
Tovább tisztíthatja a kimenetet, ha megadja, hogy a set parancs POSIX módban fusson, így nem írja ki a shell függvényeket. Itt egy al-shellben (a parancsértelmező külön példányában) hajtjuk végre, hogy megakadályozzuk, hogy a parancs megváltoztassa a jelenlegi környezetet:
|
1 |
(set -o posix; set) |
A fenti parancs kilistázza a rendszeren elérhető összes környezeti és shell parancsot. A kimenetet a következő paranccsal szűkítheti le, hogy megpróbálja csak a shell változókat lekérni:
|
1 |
comm -23 <(set -o posix; set | sort) <(env | sort) |
Egy minta kimenet a fenti parancsból:

Bár a parancs tartalmazhat néhány környezeti változót, segít különbséget tenni a shell és a környezeti változók között. Ez azért van, mert a set parancs idézőjelbe teszi a változók értékeit, míg a printenv és az env parancsok nem teszik idézőjelbe azokat. A shell változók hasznosak a munkamenetek állandó értékeinek beállítására, anélkül, hogy a változásokat véglegesen fájlokba írnánk.
Gyakori környezeti változók
USER – A jelenleg bejelentkezett felhasználó.
SHELL – A shell, amely a beírt parancsokat fogja értelmezni. Az alapértelmezett a bash, de ez megváltoztatható.
HOME – A jelenlegi felhasználó saját (home) könyvtára.
TERM – Meghatározza az emulálandó terminál típusát. Megmutatja a jelenleg emulált terminált.
PWD – A jelenlegi munkakönyvtár.
OLDPWD – Az előző munkakönyvtár. Ez segít a shellnek visszaváltani az előző könyvtárra, amikor a cd parancsot használja a könyvtárváltáshoz.
EDITOR – Az alapértelmezett fájlszerkesztő, amikor beírja az edit parancsot a terminálba.
LS_COLORS – Meghatározza a színkódokat, amelyeket a színes kimenet megjelenítéséhez használ az ls parancs beírásakor. Segít megkülönböztetni a fájltípusokat és információt nyújt a felhasználóknak.
LOGNAME – A jelenlegi felhasználó neve.
MAIL – Meghatározza a jelenlegi felhasználó postaládájának elérési útját.
LANG – Meghatározza a jelenlegi területi beállítást (locale).
PATH – Megadja azon könyvtárak listáját, amelyekben a parancsok végrehajtásakor keresni kell. Egy parancs futtatása során a rendszer végigkeresi ezeket a könyvtárakat, és az elsőként megtalált futtatható fájlt használja.
_ – Az utoljára végrehajtott parancs.
Gyakori shell változók:
BASH_VERSION – A bash verziója, ember által olvasható formátumban.
BASH_VERSINFO – A bash verziója, gép által olvasható formátumban.
BASHOPTS – A bash indításakor használt opciók listája. Hasznos annak meghatározására, hogy a shell környezet az elvárásoknak megfelelően fog-e működni.
COLUMNS – A képernyőn a kimenet kirajzolásához használt oszlopok száma.
DIRSTACK – A pushd és popd parancsokkal elérhető könyvtárak verme.
HOSTNAME – A számítógép aktuális gépneve (hostname).
HISTFILESIZE – Egy fájlban tárolt parancselőzmények sorainak száma.
HISTSIZE – A memóriában engedélyezett parancselőzmények sorainak száma.
IFS – A belső mezőelválasztó (internal field separator) a parancssori bemenet elválasztásához. Alapértelmezés szerint szóköz.
SHELLOPTS-A shell opciók beállítására szolgál.
UID-A jelenlegi felhasználó UID-ja.
PS1– Az elsődleges parancssor (command prompt) definíciója. Ez határozza meg, hogyan néz ki a prompt, amikor elindít egy shell munkamenetet.
PS2 – Másodlagos promptok deklarálása arra az esetre, ha egy parancs több sorra terjed ki.
Setting Environmental and Shell Commands
Először is, amint azt korábban kifejtettük, a változóneveket csupa nagybetűvel fogjuk írni. Ezután végigmegyünk a shell változók létrehozásán. Végül környezeti változókat fogunk létrehozni.
Shell változók létrehozása
Kezdjük a szokásos hello world-del. Írja be a következőt a terminálba:
|
1 |
MY_FIRST_VAR=’Hello World!’ |
Az idézőjelet azért használjuk, mert a változó szóközt tartalmaz. Figyelje meg, hogy egyszeres idézőjelet (aposztrófot) használtunk, mert a felkiáltójel egy speciális karakter, és vagy le kell védeni (escape), vagy egyszeres idézőjelek közé kell tenni. Ezzel létrehozta az első shell változóját. Ez csak a jelenlegi shell munkamenetben érhető el. A shell változók nem érhetők el a gyermek shell-ek és folyamatok számára. Kiírathatja a terminálra a set és a grep parancs együttes használatával:

Vagy jelenítse meg az értéket az echo használatával, hivatkozva rá a $ jellel és a változó nevével:

Ha a printenv használatával próbálja kiíratni, nem fog kimenetet mutatni. Ez segít megerősíteni, hogy ez nem egy környezeti változó:

Környezeti változók létrehozása
A korábban létrehozott shell változó környezeti változóvá alakítható az export parancs segítségével. Először létrehoz egy shell változót. Ezután a környezeti változó létrehozásához az export parancsot kell használnia. A parancs végrehajtása után a változó elérhetővé válik a gyermek shell-ek és folyamatok számára:
|
1 |
export MY_FIRST_VAR |
Now, if you test using the printenv command, you should see the variable and value:

You can also create an environmental variable in one step using the syntax:
|
1 |
export MY_SECOND_VAR='Ez a második változóm' |
Environmental variables are only passed to the child shells and not to the parent. This helps prevent child processes from affecting the environment of the program that called them.
Változók visszaminősítése és törlése
Ha idáig követte az útmutatót, akkor a MY_FIRST_VAR még mindig környezeti változóként van definiálva. Visszaalakíthatja shell változóvá az echo parancs beírásával a –n jelzővel:
|
1 |
export -n MY_FIRST_VAR |
Ha a printenv paranccsal teszteli, nem lesz kimenet. Az echo parancs azonban meg fogja jeleníteni, mert ez még mindig egy shell változó:

Az unset paranccsal törölhet mind a shell, mind a környezeti változókat. És az echo használatával ellenőrizheti, hogy már nem létezik. Amint látható, nem mutat kimenetet:

Környezeti változók beállítása bejelentkezéskor
Sok program függ a környezeti változóktól a futtatás során. Mivel nem hatékony a változókat minden alkalommal beállítani, amikor futtatni szeretne egy programot, a Linux lehetőséget biztosít ezek meghatározására és fájlba mentésére. Így automatikusan beállíthatók bejelentkezéskor. A shell a munkamenet indításának módjától függően különböző konfigurációs fájlokat olvas be. Ezeket az alábbiakban tárgyaljuk:
A shell munkamenetek típusai és különbségeik
- Bejelentkezési shell munkamenet (Login Shell Session) – a felhasználó hitelesítésével kezdődik. A munkamenet akkor jön létre, amikor SSH-n vagy terminál munkameneten keresztül jelentkezik be.
- Nem-bejelentkezési shell munkamenet (Non-login Shell Session) – akkor kezdődik, amikor egy új shell-t indít a hitelesített shell-en belülről. Új shell-t a bash paranccsal indíthat. Nincs szükség hitelesítési adatokra.
- Interaktív shell munkamenet (Interactive Shell Session) – egy terminál munkamenethez kapcsolt shell munkamenet.
- Nem interaktív shell munkamenet (Non-interactive Shell Session) – terminál munkamenethez nem kapcsolódó shell munkamenet – a háttérben fut.
Egy munkamenet lehet bejelentkezési (login) vagy nem-bejelentkezési (non-login), valamint interaktív vagy nem interaktív. Amikor bejelentkezik és elindít egy shell munkamenetet SSH-n keresztül, az egy bejelentkezési és interaktív shell munkamenet lesz. Amikor egy szkriptet futtat a terminálon, az általában egy nem-bejelentkezési és nem interaktív munkamenetben fut. Egy shell munkamenet a kettő kombinációja is lehet. Tehát melyik konfigurációs fájl kerül kiválasztásra?
A bejelentkezési munkamenet először az /etc/profile könyvtárból olvassa be a konfigurációs fájlokat. Másodszor, ellenőrzi a felhasználó saját konfigurációs fájljait a felhasználó saját (home) könyvtárában. A ~/.bash_profile, ~/.bash_login és ~/.profile fájlok közül csak az elsőként megtalált fájlt olvassa be, és az összes többi fájlt figyelmen kívül hagyja. A nem-bejelentkezési munkamenet először az /etc/bash.bashrc fájlból olvas, majd ezt követi a ~/.bashrc. A nem interaktív munkamenetek a BASH_ENV nevű környezeti változót olvassák be, hogy megkapják az új környezet meghatározásához használandó fájl nevét.
Környezeti változók alkalmazása
Amikor beállítja a változókat, a fenti megbeszélés alapján mindig vegye figyelembe, hogy melyik fájlba helyezi őket. Ez rugalmasságot biztosít azáltal, hogy biztosítja, hogy bizonyos változók csak bizonyos munkamenetekben legyenek elérhetők. Nem szeretné, ha egy kulcsfontosságú változó hiányozna egy munkamenetből.
Bizonyos esetekben azt szeretnénk, hogy a változó létezzen a bejelentkezési és a nem-bejelentkezési munkamenetekben is. Szerencsére a legtöbb Linux disztribúció alapértelmezés szerint úgy van konfigurálva, hogy a bejelentkezési konfigurációk beolvassák a nem-bejelentkezési konfigurációkat, és elérhetővé tegyék azokat a folyamatok számára. Ezért egyszerűen definiálhatja a változóit a nem-bejelentkezési konfigurációs fájlokban. Általában felhasználóspecifikus környezeti változókat állítunk be, és azt szeretnénk, hogy a beállításaink mind a bejelentkezési, mind a nem-bejelentkezési shell munkamenetekben elérhetők legyenek. Emiatt a ~/.bashrc fájlt fogjuk használni. A fájl szerkesztéséhez a nano-t fogjuk használni. Írja be a következőt a terminálba a fájl megnyitásához:
|
1 |
nano ~/.bashrc |
A megnyitott konfigurációs fájlban már láthat néhány változót. A környezeti változókat ugyanúgy adhatja hozzá, mint a parancssor használatakor. Csak írja be a parancsot:
|
1 |
export KULCSNÉV=érték. |
Bárhová hozzáadhatja őket a fájlban – egy új sorba, és nem egy ciklusfüggvényen belülre. Ezután mentse el és zárja be a fájlt. Minden következő elindított shell munkamenet ebből a fájlból fog olvasni. Ha azt szeretné, hogy az aktuális shell újraindítás nélkül beolvassa a most hozzáadott beállításokat, használhatja a következő parancsot:
|
1 |
source ~/.bashrc |
A rendszerszintű környezeti változókat a következők bármelyikéhez hozzá kell adnia: /etc/profile, /etc/bash.bashrc vagy /etc/environment.
Összegzés
Végezetül, most már beállíthat shell- és környezeti változókat, és élvezheti azt a hatalmas erőt, amelyet ezek az eszközök biztosítanak a VPS-ének! Ennek számos előnye van, mint például egyes folyamatok futtatásának automatizálása, vagy a hitelesítési adatokat igénylő automatikus telepítési konfiguráció, változók átadása a gyermekfolyamatoknak és még sok más. A környezeti változók segítenek elrejteni az érzékeny adatokat, például a hitelesítési információkat a nyilvános repókból, egyéb adatok mellett. Ezzel az alappal olyan összetett szkripteket hozhat létre, amelyeket automatikusan végrehajthat a parancssoron keresztül, anélkül, hogy folyamatos felhasználói beavatkozásra lenne szükség.
Kellemes számítástechnikát!
Hozzászólások
Még nincsenek hozzászólások. Legyen Ön az első.