Vissza a bloghoz

Hogyan olvassuk és állítsuk be a környezeti és shell változókat Linux VPS-en

Hogyan olvassuk és állítsuk be a környezeti és shell változókat Linux VPS-en

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:

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:

environment variables Environmental and Shell Variables

A printenv használata:

printenv

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:

printenv shell

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:

printenv multiple commands

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

echo variable

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:

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:

set command Environmental and Shell Variables

Lehet, hogy túl sok változó van. Ha szükséges, lapozhatja őket a következő paranccsal:

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:

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:

Egy minta kimenet a fenti parancsból:

lists all environmental and shell commands Environmental and Shell Variables

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:

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:

print variable

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

echo variable

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ó:

printenv variable

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:

Now, if you test using the printenv command, you should see the variable and value:

printenv variable value

You can also create an environmental variable in one step using the syntax:

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:

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ó:

echo vs prinenv command

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:

unset variable Environmental and Shell Variables

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:

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:

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:

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!

author

Akshay Nagpal

Szerző · CloudSigma

Preslav Dobrev a CloudSigma kreatív tervezője, aki hagyományos és innovatív marketingcsatornák segítségével következetes vállalati identitás kialakítására összpontosít. Kiemelkedően képes ötvözni a művészi látásmódot a stratégiai marketinggel, hogy hatásos márkatörténeteket hozzon létre.

Hozzászólások

Még nincsenek hozzászólások. Legyen Ön az első.