Većina tehnološke zajednice uživa u interakciji sa sustavima putem sučelja naredbenog retka (CMD) ili ljuske. Općenito, to im olakšava rad. Na primjer, možete stvoriti naredbu ljuske koja može automatski izvršiti nekoliko zadataka, za razliku od toga da morate klikati kroz nekoliko gumba grafičkog korisničkog sučelja (GUI).
Kada pokrenete program ljuske ili CMD-a, on prikuplja nekoliko informacija. Te informacije određuju kako program pristupa temeljnim resursima sustava, kao i cjelokupno ponašanje. Možete ih pohraniti na mjesto koje se zove okruženje. Okruženje se sastoji od nizova znakova koji predstavljaju parove ključ-vrijednost. U ovom vodiču koristit ćemo Ubuntu 20.04 VPS kao primjer koji će vas voditi prilikom postavljanja varijabli okruženja ili ljuske. Vodič bi se trebao primjenjivati i na druge Linux distribucije.
Koja je razlika između varijabli okruženja i varijabli ljuske?
Kada započnete sesiju, informacije se prikupljaju iz postavki sustava’ i konfiguracijskih datoteka. Zatim su dostupne procesu ljuske i njegovim podprocesima. Ove informacije su skup parova ključ-vrijednost u ovom formatu:
|
1 2 3 |
KEY=vrijednost KEY="Neka vrijednost" KEY=data1:data2 |
Nazivi varijabli, tj. ključevi, osjetljivi su na velika i mala slova. Međutim, uobičajeno je da se pišu VELIKIM SLOVIMA. To vam pomaže da ih razlikujete u drugim kontekstima. Pomoću dvotočke ‘:’ možete dodijeliti više vrijednosti istoj varijabli. Također je važno osigurati da ne ostavljate razmak oko znaka =. Ključevi su varijable i klasificiraju se u dvije skupine: varijable okruženja i varijable ljuske. Varijable okruženja sadrže sve varijable definirane na razini cijelog sustava i dostupne su svakoj podređenoj ljusci ili procesu. One pomažu u prijenosu informacija u procese koje pokrećete putem naredbi ljuske. Varijable ljuske uključuju samo varijable definirane u određenoj sesiji ljuske. Nadalje, one uključuju samo varijable koje su dostupne isključivo unutar njihove instance ljuske.
Popisivanje varijabli okruženja i ljuske
Prema zadanim postavkama, terminal pruža dvije naredbe za popisivanje varijabli okruženja i ljuske: env ili printenv. One prikazuju iste informacije u svom zadanom stanju. Evo primjera izlaza ovih naredbi:
Korištenje env:

Korištenje printenv:

Kao što vidite, izlaz je isti. Razlika se javlja kada želite vrijednost određenog ključa. Tada ćete koristiti printenv s nazivom varijable:

Da biste vidjeli više vrijednosti, možete proslijediti više od jednog argumenta naredbi printenv. Vrijednosti će se pojaviti onim redoslijedom kojim ste unijeli argumente:

Također možete koristiti naredbu echo s nazivom varijable za prikaz vrijednosti varijable:

Naredba env omogućuje vam izmjenu okruženja u kojem se programi izvode prosljeđivanjem definicija varijabli u sintaksi kao što je:
|
1 |
env VAR1="vrijednost var 1" command_to_run command_options |
To vam omogućuje nadjačavanje vrijednosti ili postavljanje novih vrijednosti koje može koristiti podređeni proces. Naredbe printenv i env popisuju varijable okruženja kao što je gore prikazano. One su već bile definirane za procese sustava. Ako želite vidjeti popis varijabli ljuske, možete koristiti naredbu set. Upisivanje set bez ikakvih varijabli vratit će popis svih varijabli okruženja, varijabli ljuske, lokalnih varijabli i funkcija ljuske:

Varijabli bi moglo biti previše. Ako je potrebno, možete ih podijeliti na stranice pomoću naredbe:
|
1 |
set | less |
Izlaz možete dodatno očistiti tako da odredite da se naredba set izvršava u POSIX-u, čime se ne ispisuju funkcije ljuske. Ovdje izvršavamo u podljusci (zasebnoj instanci procesora naredbi) kako bismo spriječili da naredba promijeni trenutno okruženje:
|
1 |
(set -o posix; set) |
Gore navedeno popisuje sve naredbe okruženja i ljuske dostupne na sustavu. Možete smanjiti izlaz pomoću sljedeće naredbe kako biste pokušali dobiti samo varijable ljuske:
|
1 |
comm -23 <(set -o posix; set | sort) <(env | sort) |
Primjer izlaza iz gornje naredbe je:

Iako naredba može uključivati nekoliko varijabli okruženja, pomoći će vam da razlikujete varijable ljuske od varijabli okruženja. To je zato što naredba set stavlja vrijednosti varijabli pod navodnike, dok naredbe printenv i env to ne čine. Varijable ljuske korisne su za postavljanje postojanih vrijednosti za sesije, bez trajnog zapisivanja promjena u datoteke.
Uobičajene varijable okruženja
USER – Trenutačno prijavljeni korisnik.
SHELL – Ljuska koja će interpretirati naredbe koje unesete. Zadana je bash, ali to možete promijeniti.
HOME – Početni direktorij trenutačnog korisnika.
TERM – Određuje vrstu terminala koji se emulira. Prikazuje trenutačni emulirani terminal.
PWD – Trenutačni radni direktorij.
OLDPWD – Prethodni radni direktorij. To pomaže ljusci da se prebaci na prethodni direktorij kada unesete naredbu za promjenu direktorija cd.
EDITOR – Zadani uređivač datoteka kada upišete edit u svoj terminal.
LS_COLORS – Definira kodove boja koji se koriste za dodavanje obojanog izlaza kada unesete naredbu ls. Pomaže u razlikovanju vrsta datoteka i pruža informacije korisnicima.
LOGNAME – Ime trenutačnog korisnika.
MAIL – Definira putanju do poštanskog sandučića trenutačnog korisnika.
LANG – Definira trenutačnu postavku lokalizacije.
PATH – Određuje popis direktorija za pretraživanje prilikom izvršavanja naredbi. Tijekom izvršavanja naredbe, sustav pretražuje ove direktorije i koristi prvu pronađenu izvršnu datoteku.
_ – Posljednja izvršena naredba.
Uobičajene varijable ljuske:
BASH_VERSION – Verzija basha, u obliku čitljivom za ljude.
BASH_VERSINFO – Verzija basha, u obliku čitljivom za strojeve.
BASHOPTS – Popis opcija koje su korištene prilikom pokretanja basha. Korisno za utvrđivanje hoće li okruženje ljuske raditi onako kako očekujete.
COLUMNS – Broj stupaca širine koji se koristi za iscrtavanje izlaza na zaslonu.
DIRSTACK – Stog direktorija koji su dostupni s naredbama pushd i popd.
HOSTNAME – Naziv računala (hostname) u ovom trenutku.
HISTFILESIZE – Broj redaka povijesti naredbi pohranjenih u datoteci.
HISTSIZE – Broj redaka povijesti naredbi dopuštenih u memoriji.
IFS – Interni separator polja za razdvajanje unosa u naredbenom retku. Prema zadanim postavkama to je razmak.
SHELLOPTS-Koristi se za postavljanje opcija ljuske.
UID-UID trenutačnog korisnika.
PS1– Primarna definicija naredbenog retka. Ovo se koristi za definiranje izgleda vašeg prompta kada pokrenete sesiju ljuske.
PS2 – Deklarira sekundarne prompte za slučajeve kada se naredba proteže na više redaka.
Setting Environmental and Shell Commands
Prvo, kao što je prethodno objašnjeno, nazive varijabli zadržat ćemo u potpunosti velikim slovima. Zatim ćemo proći kroz stvaranje varijabli ljuske. Na kraju ćemo stvoriti varijable okruženja.
Stvaranje varijabli ljuske
Započnimo s uobičajenim „hello world”. Unesite sljedeće u svoj terminal:
|
1 |
MY_FIRST_VAR=’Hello World!’ |
Navodnici se koriste jer varijabla sadrži razmak. Primijetite da smo koristili jednostruke navodnike jer je uskličnik poseban znak i treba ga ili izbjeći (escape) ili staviti u jednostruke navodnike. Sada ste stvorili svoju prvu varijablu ljuske. Dostupna je samo u trenutačnoj sesiji ljuske. Varijable ljuske nisu dostupne podređenim ljuskama i procesima. Možete je ispisati na terminalu pomoću naredbe set s grep:

Ili prikažite vrijednost pomoću echo, referencirajući je pomoću znaka $ i naziva varijable:

Ako pokušate ispisati pomoću printenv, neće se prikazati nikakav izlaz. To vam pomaže potvrditi da ovo nije varijabla okruženja:

Stvaranje varijabli okruženja
Prethodno stvorena varijabla ljuske može se pretvoriti u varijablu okruženja pomoću naredbe export. Prvo stvorite varijablu ljuske. Zatim, da biste stvorili varijablu okruženja, trebate upotrijebiti naredbu export. Nakon izvršavanja ove naredbe, varijabla će biti dostupna podređenim ljuskama i procesima:
|
1 |
export MY_FIRST_VAR |
Sada, ako testirate pomoću naredbe printenv, trebali biste vidjeti varijablu i vrijednost:

Također možete stvoriti varijablu okruženja u jednom koraku koristeći sintaksu:
|
1 |
export MY_SECOND_VAR='Ovo je moja druga varijabla' |
Varijable okruženja prenose se samo na podređene ljuske, a ne i na nadređenu. To pomaže spriječiti podređene procese da utječu na okruženje programa koji ih je pozvao.
Demoviranje i uklanjanje varijabli
Ako ste pratili vodič do ovog trenutka, još uvijek imate MY_FIRST_VAR definiranu kao varijablu okruženja. Možete je vratiti natrag u shell naredbu upisivanjem naredbe echo s oznakom –n:
|
1 |
export -n MY_FIRST_VAR |
Ako testirate s printenv, neće biti izlaza. Međutim, naredba echo će je prikazati jer je to još uvijek shell naredba:

Možete ukloniti shell varijablu ili varijablu okruženja pomoću naredbe unset. A možete potvrditi da više ne postoji pomoću naredbe echo. Kao što vidite, ne prikazuje nikakav izlaz:

Postavljanje varijabli okruženja pri prijavi
Mnogi programi ovise o varijablama okruženja za svoje izvršavanje. Budući da nije učinkovito postavljati varijable svaki put kada želite izvršiti program, Linux pruža način da ih definira i spremi u datoteku. Na taj se način mogu automatski postaviti prilikom prijave. Ljuska čita različite konfiguracijske datoteke ovisno o tome kako je sesija pokrenuta. O njima se raspravlja u nastavku:
Vrste shell sesija i njihove razlike
- Prijavna shell sesija – započinje autentifikacijom korisnika. Sesija se postavlja kada se prijavite putem SSH-a ili terminalske sesije.
- Neprijavna shell sesija – započinje kada pokrenete novu ljusku unutar svoje autentificirane ljuske. Novu ljusku možete pokrenuti pomoću naredbe bash. Podaci o autentifikaciji nisu potrebni.
- Interaktivna shell sesija – shell sesija povezana s terminalskom sesijom.
- Neinteraktivna shell sesija – shell sesija koja nije povezana s terminalskom sesijom – izvodi se u pozadini.
Sesija se klasificira kao prijavna ili neprijavna, te kao interaktivna ili neinteraktivna. Kada se prijavite i započnete shell sesiju putem SSH-a, to će biti prijavna i interaktivna shell sesija. Kada pokrenete skriptu u terminalu, ona se obično izvodi u neprijavnoj i neinteraktivnoj sesiji. Shell sesija također može biti kombinacija to dvoje. Dakle, koja se konfiguracijska datoteka odabire?
Prijavna sesija najprije čita konfiguracijske datoteke iz direktorija /etc/profile. Drugo, provjerava specifične konfiguracijske datoteke korisnika iz korisničkog početnog direktorija. Čita se samo prva pronađena datoteka između ~/.bash_profile, ~/.bash_login i ~/.profile, a sve ostale datoteke se zanemaruju. Neprijavna sesija najprije će čitati iz /etc/bash.bashrc, a zatim iz ~/.bashrc. Neinteraktivne sesije čitaju varijablu okruženja pod nazivom BASH_ENV kako bi dobile naziv datoteke koja će se koristiti za definiranje novog okruženja.
Implementacija varijabli okruženja
Kada postavljate svoje varijable, uvijek zabilježite u koju ih datoteku stavljate na temelju naše gornje rasprave. To će pružiti fleksibilnost osiguravanjem da su određene varijable dostupne samo u određenim sesijama. Ne želite da ključna varijabla nedostaje u jednoj sesiji.
U nekim slučajevima želimo da varijabla postoji i u prijavnim i u neprijavnim sesijama. Srećom, većina distribucija Linuxa prema zadanim postavkama ima konfigurirane prijavne konfiguracije tako da čitaju neprijavne konfiguracije i čine ih dostupnima vašim procesima. Stoga možete jednostavno definirati svoje varijable u neprijavnim konfiguracijskim datotekama. Obično postavljamo varijable okruženja specifične za korisnika i želimo da naše postavke budu dostupne i u prijavnim i u neprijavnim shell sesijama. Iz tog razloga koristit ćemo datoteku ~/.bashrc. Koristit ćemo nano za uređivanje datoteke. Unesite sljedeće u svoj terminal kako biste otvorili datoteku:
|
1 |
nano ~/.bashrc |
U otvorenoj konfiguracijskoj datoteci već možete vidjeti nekoliko varijabli. Varijable okruženja možete dodati na isti način kao i kada koristite naredbeni redak. Samo upišite naredbu:
|
1 |
export KEYNAME=vrijednost. |
Možete ih dodati bilo gdje u datoteci – u novi redak, a ne unutar petlje. Zatim spremite i zatvorite datoteku. Svaka sljedeća sesija ljuske koju pokrenete čitat će iz datoteke. Ako želite da trenutna ljuska pročita postavke koje ste upravo dodali bez potrebe za ponovnim pokretanjem, možete koristiti naredbu:
|
1 |
source ~/.bashrc |
Varijable okruženja na razini sustava trebali biste dodati u bilo koje od sljedećeg: /etc/profile, /etc/bash.bashrc ili /etc/environment.
Ukratko
Naposljetku, sada možete postaviti varijable ljuske i okruženja i uživati u velikoj moći koju ovi alati donose vašem VPS-u! To ima mnoge prednosti kao što su automatizacija pokretanja nekih procesa ili konfiguracija automatske implementacije koja zahtijeva podatke za autentifikaciju, prosljeđivanje varijabli podređenim procesima i još mnogo toga. Varijable okruženja pomažu vam sakriti osjetljive podatke poput podataka za autentifikaciju iz javnih repozitorija, između ostalih podataka. S ovim temeljima možete stvoriti složene skripte koje možete automatski izvršavati putem naredbenog retka bez potrebe za stalnim unosom korisnika.
Sretno s radom!
Komentari
Još nema komentara. Budite prvi.