Späť na blog

Ako čítať a nastaviť premenné prostredia a shellu na Linux VPS

Ako čítať a nastaviť premenné prostredia a shellu na Linux VPS

Väčšina technologickej komunity rada komunikuje so systémami prostredníctvom rozhrania príkazového riadka (CMD) alebo shellu. Vo všeobecnosti im to uľahčuje prácu. Môžete napríklad vytvoriť shellový príkaz, ktorý dokáže automaticky vykonať niekoľko úloh, namiesto toho, aby ste museli klikať na niekoľko tlačidiel v GUI.

Keď spustíte shell alebo program CMD, zhromaždí niekoľko informácií. Tieto informácie určujú, ako program pristupuje k základným systémovým zdrojom, ako aj celkové správanie. Môžete ich uložiť na miesto nazývané prostredie. Prostredie pozostáva z reťazcov, ktoré predstavujú páry kľúč-hodnota. V tomto návode budeme používať Ubuntu 20.04 VPS ako príklad, ktorý vás povedie pri nastavovaní premenných prostredia alebo shellu. Tento návod by mal platiť aj pre ostatné distribúcie Linuxu.

Aký je rozdiel medzi premennými prostredia a premennými shellu?

Keď spustíte reláciu, zhromaždia sa informácie z nastavení a konfiguračných súborov systému. Potom sú k dispozícii pre proces shellu a jeho podriadené procesy. Tieto informácie sú sadou párov kľúč-hodnota v tomto formáte:

Názvy premenných, t. j. kľúče, rozlišujú veľké a malé písmená. Je však všeobecne akceptované písať ich VEĽKÝMI PÍSMENAMI. Pomáha vám to odlíšiť ich v iných kontextoch. Pomocou znaku dvojbodky ‘:’ môžete tej istej premennej priradiť viacero hodnôt. Je tiež dôležité zabezpečiť, aby ste okolo znaku = nenechali medzeru. Kľúče sú premenné a delia sa na dve skupiny: premenné prostredia a premenné shellu. Premenné prostredia obsahujú všetky premenné definované v celom systéme a sú k dispozícii pre každý podriadený shell alebo proces. Pomáhajú odovzdávať informácie do procesov, ktoré spúšťate prostredníctvom príkazov shellu. Premenné shellu zahŕňajú iba premenné definované v konkrétnej relácii shellu. Okrem toho zahŕňajú iba premenné dostupné výhradne v rámci ich inštancie shellu.

Zoznam premenných prostredia a shellu

V predvolenom nastavení poskytuje terminál dva príkazy na zobrazenie zoznamu premenných prostredia a shellu: env alebo printenv. Vo svojom predvolenom stave zobrazujú rovnaké informácie. Tu je ukážka výstupu z týchto príkazov:

Použitie env:

environment variables Environmental and Shell Variables

Použitie printenv:

printenv

Ako môžete vidieť, výstup je rovnaký. Rozdiel nastáva vtedy, keď chcete hodnotu špecifikovaného kľúča. Vtedy použijete príkaz printenv s názvom premennej:

printenv shell

Ak chcete zobraziť viacero hodnôt, môžete príkazu printenv odovzdať viac ako jeden argument. Hodnoty sa zobrazia v poradí, v akom ste argumenty zadali:

printenv multiple commands

Na zobrazenie hodnoty premennej môžete použiť aj príkaz echo s názvom premennej:

echo variable

Príkaz env vám umožňuje upraviť prostredie, v ktorom sa programy spúšťajú, odovzdaním definícií premenných v syntaxi, ako napríklad:

To vám umožňuje prepísať hodnoty alebo nastaviť nové hodnoty, ktoré môže použiť podriadený proces. Príkazy printenv and env vypisujú premenné prostredia, ako je uvedené vyššie. Tie už boli definované pre systémové procesy. Ak chcete zobraziť zoznam premenných shellu, môžete použiť príkaz set. Zadanie príkazu set bez akýchkoľvek premenných vráti zoznam všetkých premenných prostredia, premenných shellu, lokálnych premenných a funkcií shellu:

set command Environmental and Shell Variables

Premenných môže byť príliš veľa. V prípade potreby ich môžete stránkovať pomocou príkazu:

Výstup môžete ďalej vyčistiť tak, že určíte, aby sa príkaz set vykonal v režime POSIX, čím sa nevytlačia funkcie shellu. Tu ho spúšťame v subshelli (samostatnej inštancii príkazového procesora), aby sme zabránili príkazu zmeniť aktuálne prostredie:

Vyššie uvedené vypisuje všetky príkazy prostredia a shellu dostupné v systéme. Výstup môžete skrátiť pomocou nasledujúceho príkazu, aby ste sa pokúsili získať iba premenné shellu:

Príklad výstupu z vyššie uvedeného príkazu je:

lists all environmental and shell commands Environmental and Shell Variables

Hoci príkaz môže obsahovať niekoľko premenných prostredia, pomôže vám rozlíšiť medzi premennými shellu a premennými prostredia. Je to preto, že príkaz set dáva hodnoty premenných do úvodzoviek, zatiaľ čo príkazy printenv and env hodnoty do úvodzoviek nedávajú. Premenné shellu sú užitočné na nastavenie trvalých hodnôt pre relácie bez toho, aby sa zmeny natrvalo zapisovali do súborov.

Bežné premenné prostredia

USER – Aktuálne prihlásený používateľ.
SHELL – Shell, ktorý bude interpretovať zadávané príkazy. Predvolený je bash, ale môžete to zmeniť.
HOME – Domovský adresár aktuálneho používateľa.
TERM – Určuje typ terminálu, ktorý sa má emulovať. Zobrazuje aktuálny emulovaný terminál.
PWD – Aktuálny pracovný adresár.
OLDPWD – Predchádzajúci pracovný adresár. To pomáha shellu prepnúť sa do predchádzajúceho adresára, keď zadáte príkaz na zmenu adresára ako cd.

EDITOR – Predvolený editor súborov, keď v termináli zadáte edit.
LS_COLORS – Definuje farebné kódy používané na pridanie farebného výstupu pri zadaní príkazu ls. Pomáha rozlišovať typy súborov a poskytovať informácie používateľom.
LOGNAME – Meno aktuálneho používateľa.
MAIL – Definuje cestu k poštovej schránke aktuálneho používateľa.
LANG – Definuje aktuálne nastavenie národného prostredia.
PATH – Určuje zoznam adresárov, ktoré sa majú prehľadávať pri spúšťaní príkazov. Počas vykonávania príkazu systém prehľadáva tieto adresáre a použije prvý nájdený spustiteľný súbor.
_ – Posledný vykonaný príkaz.

Bežné premenné shellu:

BASH_VERSION – Verzia bashu v ľudsky čitateľnom výstupe.
BASH_VERSINFO – Verzia bashu v strojom čitateľnom výstupe.
BASHOPTS – Zoznam možností, ktoré boli použité pri spustení bashu. Užitočné na zistenie, či bude prostredie shellu fungovať podľa očakávania.

COLUMNS – Počet stĺpcov šírky, ktoré sa používajú na vykreslenie výstupu na obrazovke.
DIRSTACK – Zásobník adresárov, ktoré sú k dispozícii s príkazmi pushd a popd.
HOSTNAME – Názov hostiteľa počítača v tomto čase.
HISTFILESIZE – Počet riadkov histórie príkazov uložených v súbore.
HISTSIZE – Počet riadkov histórie príkazov povolených v pamäti.
IFS – Interný oddeľovač polí na oddelenie vstupu v príkazovom riadku. Predvolene je to medzera.
SHELLOPTS-Používa sa na nastavenie možností shellu.
UID-UID aktuálneho používateľa.
PS1– Definícia primárnej výzvy príkazového riadku. Používa sa na definovanie toho, ako vyzerá vaša výzva pri spustení relácie shellu.
PS2 – Deklaruje sekundárne výzvy pre prípad, keď príkaz presahuje viacero riadkov.

Nastavenie príkazov prostredia a shellu

Najprv, ako sme vysvetlili predtým, budeme názvy premenných písať veľkými písmenami. Ďalej prejdeme k vytváraniu premenných shellu. Nakoniec budeme vytvárať premenné prostredia.

Vytváranie premenných shellu

Začnime s obvyklým hello world. Do terminálu zadajte nasledovné:

Úvodzovky sa používajú preto, že premenná obsahuje medzeru. Všimnite si, že sme použili jednoduché úvodzovky, pretože výkričník je špeciálny znak a mal by byť buď escapovaný, alebo umiestnený v jednoduchých úvodzovkách. Teraz ste vytvorili svoju prvú premennú shellu. Je k dispozícii iba v aktuálnej relácii shellu. Premenné shellu nie sú k dispozícii pre dcérske shelly a procesy. Môžete ju vypísať do terminálu pomocou príkazu set s grep:

print variable

Alebo zobrazte hodnotu pomocou echo, pričom na ňu odkážete pomocou znaku $ a názvu premennej:

echo variable

Ak sa pokúsite o výpis pomocou printenv, nezobrazí sa žiadny výstup. To vám pomôže potvrdiť, že nejde o premennú prostredia:

printenv variable

Vytváranie premenných prostredia

Predtým vytvorenú premennú shellu možno zmeniť na premennú prostredia pomocou príkazu export. Najprv vytvoríte premennú shellu. Potom na vytvorenie premennej prostredia musíte použiť príkaz export. Po vykonaní tohto príkazu bude premenná k dispozícii pre dcérske shelly a procesy:

Teraz, ak to otestujete pomocou príkazu printenv, mali by ste vidieť premennú a hodnotu:

printenv variable value

Premennú prostredia môžete vytvoriť aj v jednom kroku pomocou syntaxe:

Premenné prostredia sa odovzdávajú iba dcérskym shellom a nie rodičovskému. To pomáha zabrániť tomu, aby dcérske procesy ovplyvňovali prostredie programu, ktorý ich vyvolal.

Zrušenie exportu a odstránenie premenných

Ak ste doteraz postupovali podľa tohto návodu, stále máte premennú MY_FIRST_VAR definovanú ako premennú prostredia. Môžete ju zmeniť späť na premennú shellu zadaním príkazu export s príznakom –n:

Ak to otestujete pomocou printenv, nezobrazí sa žiadny výstup. Príkaz echo ju však zobrazí, pretože je to stále premenná shellu:

echo vs prinenv command

Pomocou príkazu unset môžete zrušiť nastavenie premennej shellu alebo premennej prostredia. A pomocou príkazu echo môžete potvrdiť, že už neexistuje. Ako vidíte, nezobrazuje žiadny výstup:

unset variable Environmental and Shell Variables

Nastavenie premenných prostredia pri prihlásení

Mnoho programov závisí pri svojom spúšťaní od premenných prostredia. Keďže nie je efektívne nastavovať premenné pri každom spustení programu, Linux poskytuje spôsob, ako ich definovať a uložiť do súboru. Týmto spôsobom sa môžu automaticky nastaviť pri prihlásení. Shell číta rôzne konfiguračné súbory v závislosti od toho, ako sa relácia spustí. Tie sú popísané nižšie:

Typy relácií shellu a ich rozdiely

  • Prihlasovacia relácia shellu (Login Shell Session) – začína autentifikáciou používateľa. Relácia sa nastaví, keď sa prihlásite cez SSH alebo reláciu terminálu.
  • Neprihlasovacia relácia shellu (Non-login Shell Session) – začína, keď spustíte nový shell z prostredia vášho overeného shellu. Nový shell môžete spustiť pomocou príkazu bash. Nevyžadujú sa žiadne overovacie údaje.
  • Interaktívna relácia shellu (Interactive Shell Session) – relácia shellu pripojená k relácii terminálu.
  • Neinteraktívna relácia shellu (Non-interactive Shell Session) – relácia shellu, ktorá nie je pripojená k relácii terminálu – beží na pozadí.

Relácia sa klasifikuje buď ako prihlasovacia alebo neprihlasovacia, a buď ako interaktívna alebo neinteraktívna. Keď sa prihlásite a spustíte reláciu shellu cez SSH, pôjde o prihlasovaciu a interaktívnu reláciu shellu. Keď spustíte skript v termináli, zvyčajne beží v neprihlasovacej a neinteraktívnej relácii. Relácia shellu môže byť aj kombináciou oboch. Ktorý konfiguračný súbor sa teda vyberie?

Prihlasovacia relácia najprv číta konfiguračné súbory z adresára /etc/profile. Po druhé, skontroluje špecifické konfiguračné súbory používateľa z jeho domovského adresára. Prečíta sa iba prvý nájdený súbor zo súborov ~/.bash_profile, ~/.bash_login a ~/.profile a všetky ostatné súbory sa ignorujú. Neprihlasovacia relácia bude najprv čítať zo súboru /etc/bash.bashrc, po ktorom nasleduje ~/.bashrc. Neinteraktívne relácie čítajú premennú prostredia s názvom BASH_ENV, aby získali názov súboru, ktorý sa má použiť na definovanie nového prostredia.

Implementácia premenných prostredia

Keď nastavujete svoje premenné, na základe našej diskusie vyššie si vždy všimnite, do ktorého súboru ich umiestňujete. To poskytne flexibilitu tým, že zabezpečí, aby boli určité premenné dostupné len v určitých reláciách. Nechcete predsa, aby v jednej relácii chýbala dôležitá premenná.

V niektorých prípadoch chceme, aby premenná existovala v prihlasovacích aj neprihlasovacích reláciách. Našťastie väčšina distribúcií Linuxu má predvolene nakonfigurované prihlasovacie konfigurácie tak, aby načítali neprihlasovacie konfigurácie a sprístupnili ich vašim procesom. Preto môžete svoje premenné jednoducho definovať v neprihlasovacích konfiguračných súboroch. Zvyčajne nastavujeme premenné prostredia špecifické pre používateľa a chceme, aby boli naše nastavenia dostupné v prihlasovacích aj neprihlasovacích reláciách shellu. Z tohto dôvodu použijeme súbor ~/.bashrc. Na úpravu súboru použijeme nano. Ak chcete súbor otvoriť, zadajte do terminálu nasledujúci príkaz:

V otvorenom konfiguračnom súbore už môžete vidieť niekoľko premenných. Premenné prostredia môžete pridať rovnakým spôsobom, ako to robíte pri použití príkazového riadku. Stačí zadať príkaz:

Môžete ich pridať kdekoľvek v súbore – na nový riadok a nie do funkcie cyklu. Potom súbor uložte a zatvorte. Každá ďalšia relácia shellu, ktorú spustíte, bude čítať z tohto súboru. Ak chcete, aby aktuálny shell načítal nastavenia, ktoré ste práve pridali, bez toho, aby ste ho museli reštartovať, môžete použiť príkaz:

Systémové premenné prostredia by ste mali pridať do niektorého z nasledujúcich súborov: /etc/profile, /etc/bash.bashrc alebo /etc/environment.

Zhrnutie

Na záver, teraz už môžete nastavovať premenné shellu a prostredia a užívať si obrovskú silu, ktorú tieto nástroje prinášajú vášmu VPS! Má to mnoho výhod, ako napríklad automatizáciu spúšťania niektorých procesov, konfiguráciu automatického nasadenia, ktorá vyžaduje autentifikačné údaje, odovzdávanie premenných dcérskym procesom a ďalšie. Premenné prostredia vám okrem iných údajov pomáhajú skryť citlivé dáta, ako sú autentifikačné informácie, pred verejnými repozitármi. S týmito základmi môžete vytvárať zložité skripty, ktoré môžete spúšťať automaticky cez príkazový riadok bez potreby neustáleho vstupu od používateľa.

Príjemnú prácu s počítačom!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev je kreatívny dizajnér v spoločnosti CloudSigma, ktorý sa zameriava na konzistentnú firemnú identitu prostredníctvom tradičných a inovatívnych marketingových kanálov. Dokáže brilantne spájať umeleckú víziu so strategickým marketingom, čím vytvára pôsobivé príbehy značky.

Komentáre

Zatiaľ žiadne komentáre. Buďte prvý.