Környezeti változók beállítása a Bashban Linuxon

Linuxon egynél több típusú környezeti változó létezik. Ismerje meg, hogyan tekintheti meg őket, hogyan hozhatja létre őket helyi és távoli bejelentkezéshez, és hogyan teheti túl az újraindítást.

Hogyan működnek a környezeti változók

Amikor elindít egy terminál ablakot és a benne lévő héj, a rendszer változók gyűjteményére hivatkozik, hogy biztosítsa a shell helyes beállítását. Ezek a változók azt is biztosítják, hogy minden olyan információ elérhető legyen, amelyre a terminálablaknak és a shellnek hivatkoznia kell. Ezek a változók együttesen olyan beállításokat tartalmaznak, amelyek meghatározzák a terminálablakon belüli környezetet, egészen a parancssor megjelenéséig. Tehát természetesen környezeti változóknak nevezik őket.

Egyes környezeti változók rendszerszintűek vagy globálisak. Mások az egész munkamenetre vonatkoznak, és csak Ön láthatja őket. Mások nem hivatkozhatnak a munkamenet környezeti változóira. A shellben van egy harmadik környezeti változókészlet is. A területi beállítás, az időzóna és a billentyűzet beállításai, a keresett könyvtárak készlete, amikor a shell megpróbál parancsot találni, és az alapértelmezett szerkesztő, mind a shell környezeti változókban vannak tárolva.

Megmutatjuk, hogyan tekintheti meg a rendszerén létező környezeti változókat, és leírjuk, hogyan hozhat létre saját változókat. Megmutatjuk azt is, hogyan teheted elérhetővé őket az alárendelt folyamatok számára, és hogyan lehet tartósan az újraindításkor.

Környezetek és öröklődés

Amikor egy shell elindul, átmegy egy inicializálási fázison. Ezen a ponton olvassa be azokat a környezeti változókat, amelyek meghatározzák a shell környezetét.

Amikor egy program vagy parancs elindul erről a shellről – amelyet gyermekfolyamatként ismerünk – az örökli a szülőfolyamat környezetét – de vigyázz! Amint látni fogjuk, létrehozhat olyan változókat, amelyek nem adódnak hozzá a környezetéhez, így nem öröklik őket egy gyermekfolyamat.

Ha az utódfolyamat egy shell, akkor a shell a saját, friss változókészletéből inicializálódik. Tehát, ha módosítja a parancssort az aktuális shellben, majd elindít egy gyermek shellt, a gyermek shell nem örökli a szülő módosított parancssorát.

Globális környezeti változók

Megállapodás szerint a környezeti változók nagybetűs neveket kapnak. Íme néhány globális környezeti változó, és a bennük lévő értékek:

SHELL: A terminálablak megnyitásakor elinduló shell neve. A legtöbb Linux disztribúción ez bash lesz hacsak nem módosította az alapértelmezettről.
TERM: A terminálablakok valójában egy hardverterminál emulációi. Ez tartalmazza az emulálandó hardverterminál típusát.
FELHASZNÁLÓ: A rendszert jelenleg használó személy felhasználóneve.
PWD: Az aktuális munkakönyvtár elérési útja.
OLDPWD: Az a könyvtár, amelyben az aktuális munkakönyvtárba való áthelyezés előtt volt.
LS_COLORS: Az ls által használt színkódok listája jelölje ki a különböző fájltípusokat.
MAIL: Ha a levelezőrendszer be van állítva a Linux számítógépen (alapértelmezés szerint nincs), akkor ez a az aktuális felhasználó postafiókjának elérési útja.
PATH: Azon könyvtárak listája, amelyekben a shell át fog keresni a parancs végrehajtható fájljainak megtalálásához.
LANG: A nyelv, a lokalizáció és a karakterkódolás beállításai.
HOME: Az aktuális felhasználó saját könyvtára.
_: Az aláhúzás (_) környezeti változó az utoljára beírt parancsot tartalmazza.

  Hogyan szerezhetek Minecoinokat a Minecraftban?

Láthatjuk, mire van beállítva ezek közül néhány semmi kifinomultabb, mint az echo, ami megtörténik írja be az értékeket a terminál ablakba. A környezeti változó értékének megtekintéséhez hozzá kell adni egy dollárjelet ($) a nevének elejéhez.

Egy kellemes érintés az, hogy használhatod lap kitöltése hogy kitöltse a környezeti változó nevét. Írja be a név néhány betűjét, és nyomja meg a Tab gombot. A változó nevét a shell egészíti ki. Ha ez nem történik meg, akkor be kell írnia néhány további betűt, hogy megkülönböztesse a környezeti változót az ugyanazokkal a betűkkel kezdődő nevekkel rendelkező parancsoktól:

echo $SHELL
echo $LANG
echo $HOME
echo $PWD

Saját globális környezeti változók létrehozásához adja hozzá őket az /etc/environon fájlhoz. A fájl szerkesztéséhez a sudo-t kell használnia:

sudo gedit /etc/environment

Környezeti változó hozzáadásához írja be a nevét, egy egyenlőségjelet (=) és azt az értéket, amelyet a környezeti változónak meg kell őriznie. Ne tegyen szóközt az egyenlőségjel (=) előtt vagy után. A környezeti változó neve tartalmazhat betűket, aláhúzásjelet (_) vagy számokat. A név első karaktere azonban nem lehet szám.

Ha az értékben szóköz van, ügyeljen arra, hogy a teljes értéket idézőjelbe (“) tegye.

Mentse el a fájlt, majd jelentkezzen ki, majd ismét be. Használja az echo-t annak tesztelésére, hogy létezik-e új változó, és megtartja-e a beállított értéket:

echo $WEBSITE

Mivel ez egy globális környezeti változó, és mindenki számára elérhető, Mary felhasználó hivatkozhat erre a környezeti változóra, amikor legközelebb bejelentkezik:

echo $WEBSITE

Nak nek lásd az összes környezeti változót egyszerre írja be a printenv. Sok a kimenet, ezért célszerű a rendezésen keresztül átvezetni, majd kisebbbe:

printenv | sort | less

A környezeti változók rendezett listája kevesebbben jelenik meg számunkra.

A kimenetet átvezethetjük grep-en keresztül, hogy környezeti változókat keressünk egy adott témához kapcsolódik.

printenv | grep GNOME

Shell környezeti változók

Ez néhány olyan shell környezeti változó, amelyet a bash a viselkedésének és funkcióinak diktálására vagy rögzítésére használ. A terminál használata során egyes értékek frissülnek. Például a COLUMNS környezeti változó frissítésre kerül, hogy tükrözze a terminálablak szélességében esetlegesen végrehajtott változtatásokat:

BASHOPTS: A bash indításakor használt parancssori opciók.
BASH_VERSION: A bash verziószám szavakból és számokból álló karakterláncként.
BASH_VERSINFO: A bash verzió számjegyként.
OSZLOPOK: A terminálablak aktuális szélessége.
DIRSTACK: Azok a könyvtárak, amelyek már voltak hozzáadva a könyvtárveremhez a pushd paranccsal.
HISTFILESIZE: Maximális szám -ban engedélyezett vonalak történelem fájl.
HISTSIZE: A memóriában engedélyezett előzménysorok száma.
HOSTNAME: A számítógép gazdagépneve.
IFS: Az Belső mezőelválasztó a parancssorban lévő bevitel elkülönítésére szolgál. Alapértelmezés szerint ez egy szóköz.
PS1: A PS1 környezeti változó tartalmazza az elsődleges, az alapértelmezett és a parancssor definícióját. Az escape szekvenciáknak nevezett tokenek készlete szerepelhet a parancssor definíciójában. Olyan dolgokat jelentenek, mint a gazdagép és a felhasználónév, az aktuális munkakönyvtár és az idő.
PS2: Ha egy parancs egynél több sort ölel fel, és több bemenetre van szükség, megjelenik a másodlagos parancssor. A PS2 környezeti változó tartalmazza ennek a másodlagos promptnak a definícióját, amely alapértelmezés szerint a nagyobb, mint jel (>).
SHELLOPTS: Shell opciók, amelyeket a set opcióval állíthat be.
UID: A Felhasználói azonosító az aktuális felhasználótól.

  Törött szimbólumhivatkozások keresése és törlése Linuxon

Nézzünk meg néhányat a shell változók közül:

echo $BASH_VERSION
echo $HOSTNAME
echo $COLUMNS
echo $HISTFILESIZE
echo $UID

A teljesség kedvéért itt vannak a parancssor definícióiban használható tokenek:

t: Az aktuális idő ÓÓ:PP:SS formátumban.
d: Az aktuális dátum, hétköznap, hónap, dátum formájában.
n: Újsoros karakter.
s: A kagylód neve.
W: Az aktuális munkakönyvtár neve.
w: Az aktuális munkakönyvtár elérési útja.
u: A bejelentkezett személy felhasználóneve.
h: A számítógép gazdagépneve.
#: Minden parancshéjon belüli parancs számozott. Így láthatja a parancs számát a parancssorban. Ez nem egyezik meg a parancs számával az előzmények listájában.
$: A prompt utolsó karakterét egy dollárjelre ($) állítja be normál felhasználónál, és egy hash szimbólumot (#) a root felhasználónál. Ez a felhasználó UID-jének ellenőrzésével működik. Ha ez nulla, akkor a felhasználó root.

A PS1 környezeti változó definíciója a .bashrc fájlban található.

Munkamenet-környezeti változók létrehozása

Ha saját használatra szeretne környezeti változókat létrehozni, adja hozzá őket a .bashrc fájl aljához. Ha azt szeretné, hogy a környezeti változók elérhetők legyenek a távoli munkamenetek, például az SSH-kapcsolatok számára, hozzá kell adnia azokat a .bash_profile fájlhoz is.

A környezeti változó meghatározásának formátuma mindkét fájl esetében azonos. Ha definíciót szeretne hozzáadni a .bash_profile fájlhoz, írja be ezt a kezdőkönyvtárába:

gedit .bashrc

Hozzáadtunk egy INHERITED_VAR nevű környezeti változót. Jegyezze meg az „export” szót a sor elején.

Mentse el és zárja be a fájlt a szerkesztés befejezése után. Kijelentkezhet, majd újra bejelentkezhet, vagy előírhatja, hogy a shell újraolvassa a .bash_profile fájlt a pont paranccsal (.), így:

. .bashrc

Most hozzunk létre egy környezeti változót a parancssorban:

LOCAL_VAR="This session only"

LOCAL_VAL=

Ha echo-t használunk, láthatjuk, hogy mindkét környezeti változó elérhető számunkra:

echo $LOCAL_VAR
echo $INHERITED_VAR

Észreveheti, hogy az INHERITED_VAR környezeti változó definíciójában az „export” szó szerepel a sor elején. Ez azt jelenti, hogy a környezeti változót az aktuális shell gyermekfolyamatai öröklik. Ha elindítunk egy másikat a bash paranccsal, akkor a két változót újra ellenőrizhetjük a gyermek shell belsejéből:

bash
echo $LOCAL_VAR
echo $INHERITED_VAR

Amint láthatja, az INHERITED_VAR elérhető a gyermek shellben, de a LOCAL_VAR nem. Egyszerűen kapunk egy üres sort.

Bár az „export” hozzáadja a környezeti változó részét ahhoz a környezethez, amelyet a gyermekfolyamatok örökölnek, az INHERITED_VAR nem globális környezeti változó. Például Mary felhasználó nem hivatkozhat rá:

echo $INHERITED_VAR

A gyermek bash munkamenet lezárásához az exit parancsot használjuk:

exit

Az örökölt környezetek a szkriptekre is hatással vannak. Íme egy egyszerű szkript, amely három környezeti változónk értékét írja a terminálablakba:

#!/bin/bash

echo "WEBSITE" $WEBSITE
echo "LOCAL_VAR" $LOCAL_VAR
echo "INHERITED_VAR" $INHERITED_VAR

Ezt az envtest.sh nevű fájlba mentették, majd végrehajthatóvá tették a következőkkel:

chmod +x envtest.sh

Amikor futtatjuk a szkriptet, a három környezeti változó közül kettőhöz hozzáfér:

./envtest.sh

A szkript láthatja a WEBSITE globális környezeti változót és az INHERITED_VAR exportált környezeti változót. Nem tud hozzáférni a LOCAL_VAR-hoz, bár a szkript ugyanabban a shellben fut, ahol a változót létrehozták.

  A Zoiper telepítése Linuxra

Ha kell, a parancssorból exportálhatunk környezeti változót. Ezt megtesszük a LOCAL_VAR-ral, majd újra futtatjuk a szkriptet:

export LOCAL_VAR
./envtest.sh

A környezeti változó hozzáadásra került az aktuális shell környezetéhez, így megjelenik abban a környezetben, amelyet a parancsfájl örökölt. A szkript hivatkozhat erre a környezeti változóra is.

Távoli kapcsolatok

A globális környezeti változók elérhetők a távoli bejelentkezési munkamenetek számára, de ha azt szeretné, hogy a helyileg meghatározott környezeti változók távolról is elérhetőek legyenek, hozzá kell adnia őket a .bash_profile fájlhoz. Ugyanazt a környezeti változót beállíthatja a .bashrc és a .bash_profile fájlokban, eltérő értékekkel. Ezt felveheti egy parancsfájl, mondjuk, hogy módosítsa a viselkedését a rendszert helyileg vagy távolról használó emberek számára.

(Az összetévesztés kockázatára van egy .profile fájl is. Ez is tartalmazhat környezeti változó definíciókat. A .profile fájl azonban nem kerül beolvasásra, ha a .bash_profile fájl jelen van. Tehát a legbiztonságosabb dolog – és a bash-kompatibilis módszer a .bash_profile fájl használata.)

A .bash_profile fájl szerkesztéséhez ismét a gedit parancsot használjuk:

gedit .bash_profile

Ugyanazt a környezeti változót fogjuk hozzáadni, ugyanazzal az értékkel, amelyet korábban használtunk.

Mentse el a változtatásokat, és zárja be a gedit-et.

Egy másik számítógépen SSH-t készítünk csatlakozik a teszt számítógéphez.

ssh [email protected]

Miután csatlakoztunk, még egyszer lefuttatjuk a szkriptet:

./envtest.sh

A .bash_profile fájl a távoli bejelentkezés inicializálásának részeként beolvasásra került, és az INHERITED_VAR környezeti változó elérhető számunkra és a szkript számára.

Környezeti változó hatástalanítása

Egy környezeti változó hatástalanításához használja a unset parancs. Ha érvénytelenítjük a globális környezeti változó (WEBSITE) és az exportált környezeti változó (INHERITED_VAR) értékét, akkor ezek többé nem lesznek elérhetők a parancssorban és az utódfolyamatokban:

unset WEBSITE
unset INHERITED_VAR
./envtest.sh
echo $WEBSITE

Érdemes megjegyezni, hogy ez csak a globális környezeti változók elérhetőségét változtatja meg ebben a munkamenetben. Egy másik személy, aki egyidejűleg bejelentkezett, továbbra is hozzáférhet a globális környezeti változó saját példányához. Példányát inicializálták és az /etc/environon fájlból olvasták be a bejelentkezési folyamata során, és független a változó bárki más másolatától.

Például mary felhasználó továbbra is hozzáférhet a WEBSITE környezeti változóhoz, és kiolvassa annak értékét, még akkor is, ha Dave felhasználó hatástalanította a munkamenetben:

echo $WEBSITE

Környezetvédelem

A környezeti változók segítségével a szkriptek és az alkalmazások tudhatják, hogyan kell viselkedniük. Használhatók beállítások vagy kis mennyiségű adat tárolására. Például egy szkript feltölthet egy környezetet olyan értékkel, amelyre más szkriptek hivatkozhatnak anélkül, hogy azokat fájlba kellene írniuk.