Natrag na blog

Kako čitati i postaviti varijable okruženja i ljuske na Linux VPS-u

Kako čitati i postaviti varijable okruženja i ljuske na Linux VPS-u

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:

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:

environment variables Environmental and Shell Variables

Korištenje printenv:

printenv

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

printenv shell

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:

printenv multiple commands

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

echo variable

Naredba env omogućuje vam izmjenu okruženja u kojem se programi izvode prosljeđivanjem definicija varijabli u sintaksi kao što je:

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:

set command Environmental and Shell Variables

Varijabli bi moglo biti previše. Ako je potrebno, možete ih podijeliti na stranice pomoću naredbe:

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:

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:

Primjer izlaza iz gornje naredbe je:

lists all environmental and shell commands Environmental and Shell Variables

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:

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:

print variable

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

echo variable

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

printenv variable

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:

Sada, ako testirate pomoću naredbe printenv, trebali biste vidjeti varijablu i vrijednost:

printenv variable value

Također možete stvoriti varijablu okruženja u jednom koraku koristeći sintaksu:

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:

Ako testirate s printenv, neće biti izlaza. Međutim, naredba echo će je prikazati jer je to još uvijek shell naredba:

echo vs prinenv command

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:

unset variable Environmental and Shell Variables

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:

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:

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:

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!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev je kreativni dizajner u CloudSigma, usredotočen na dosljedan poslovni identitet korištenjem tradicionalnih i inovativnih marketinških kanala. Vješt je u spajanju umjetničke vizije sa strateškim marketingom kako bi stvorio dojmljive brendirane priče.

Komentari

Još nema komentara. Budite prvi.