Si të vendosni variablat e mjedisit në Bash në Linux
Ka më shumë se një lloj ndryshoreje mjedisi në Linux. Mësoni se si t'i shihni ato, t'i krijoni ato për hyrje lokale dhe në distancë dhe t'i bëni ato t'i mbijetojnë rindezjes.
Si funksionojnë variablat e mjedisit
Kur hapni një dritare terminali dhe guaskën brenda saj, referohet një koleksion variablash për të siguruar që guaska është konfiguruar saktë. Këto variabla sigurojnë gjithashtu që çdo informacion të cilit mund t'i referohet dritarja dhe guaska e terminalit është i disponueshëm. Së bashku, këto variabla mbajnë cilësime që përcaktojnë mjedisin që gjeni brenda dritares së terminalit tuaj, deri në pamjen e vijës së komandës. Pra, natyrisht, ato quhen si variabla të mjedisit.
Disa variabla të mjedisit janë në të gjithë sistemin ose global. Të tjerat janë në të gjithë sesionin dhe mund të shihen vetëm nga ju. Të tjerët nuk mund t'i referojnë variablat e mjedisit tuaj të sesionit. Ekziston një grup i tretë i ndryshoreve mjedisore të përcaktuara brenda guaskës. Cilësimet e vendndodhjes, zonës kohore dhe të tastierës, grupi i drejtorive të kërkuara kur shell përpiqet të gjejë një komandë dhe redaktori juaj i paracaktuar, ruhen të gjitha në variablat e mjedisit të guaskës.
Ne do t'ju tregojmë se si të shihni variablat e mjedisit që ekzistojnë në sistemin tuaj dhe do të përshkruajmë se si të krijoni tuajin. Ne do t'ju tregojmë gjithashtu se si t'i bëni ato të disponueshme për proceset e fëmijëve dhe të jeni të qëndrueshëm gjatë rindezjeve.
Mjediset dhe Trashëgimia
Kur një predhë fillon, ajo kalon në një fazë inicializimi. Është në këtë pikë që lexon variablat e mjedisit që përcaktojnë mjedisin e guaskës.
Kur një program ose komandë lëshohet nga ajo guaskë - e njohur si një proces fëmijë - ai trashëgon mjedisin e procesit prind - por kini kujdes! Siç do ta shohim, ju mund të krijoni variabla që nuk shtohen në mjedisin tuaj, kështu që ato nuk do të trashëgohen nga një proces fëmijësh.
Nëse procesi fëmijë është një guaskë, ajo guaskë do të inicializohet nga grupi i vet, i freskët, i variablave. Pra, nëse ndryshoni vijën e komandës në guaskën aktuale dhe më pas hapni një guaskë fëmijë, guaska e fëmijës nuk do të trashëgojë vijën e modifikuar të komandës së prindit.
Variablat e Mjedisit Global
Sipas konventës, variablave të mjedisit u jepen emra me shkronja të mëdha. Këtu janë disa nga variablat globale të mjedisit dhe çfarë përfaqësojnë vlerat që ato përmbajnë:
- SHELL: Emri i guaskës që do të hapet kur hapni një dritare terminali. Në shumicën e shpërndarjeve Linux, kjo do të jetë bash nëse nuk e ndryshoni atë nga parazgjedhja.
- AFAT: Dritaret e terminalit janë në fakt emulime të një terminali harduer. Kjo përmban llojin e terminalit të harduerit që do të imitohet.
- USER: Emri i përdoruesit të personit aktual që përdor sistemin.
- PWD: Rruga drejt drejtorisë aktuale të punës.
- OLDPWD: Drejtoria në të cilën ndodheshit përpara se të kalonit në drejtorinë aktuale të punës.
- LS_COLORS: Lista e kodeve të ngjyrave të përdorura nga
ls
theksojnë lloje të ndryshme skedarësh. - MAIL: Nëse sistemi
mail
është konfiguruar në kompjuterin tuaj Linux (si parazgjedhje, nuk është), kjo do të mbajë shtegun për tek përdoruesi aktual kuti postare. - SHTEGU: Një listë e drejtorive që shell do të kërkojë për të gjetur ekzekutues të komandave.
- LANG: Cilësimet e gjuhës, lokalizimit dhe kodimit të karaktereve.
- HOME: Drejtoria kryesore e përdoruesit aktual.
- _: Ndryshorja e mjedisit nënvizon (
_
) mban komandën e fundit që është shtypur.
Ne mund të shohim se për çfarë janë vendosur disa prej tyre duke përdorur asgjë më të sofistikuar se echo
, e cila do të shkruajë vlerat në dritaren e terminalit. Për të parë vlerën që mbahet nga një ndryshore mjedisore, duhet të shtoni një shenjë dollari ($
) në fillim të emrit të saj.
Një prekje e bukur është se mund të përdorni plotësimin e skedës për të plotësuar emrin e ndryshores së mjedisit për ju. Shkruani disa shkronja të emrit dhe shtypni Tab. Emri i ndryshores plotësohet nga shell. Nëse kjo nuk ndodh, do t'ju duhet të shkruani disa shkronja të tjera për të dalluar variablin e mjedisit nga komandat e tjera me emra që fillojnë me të njëjtat shkronja:
echo $SHELL
echo $LANG
echo $HOME
echo $PWD
Për të krijuar variablat tuaja të mjedisit global, shtoni ato në skedarin /etc/environment
. Ju do të duhet të përdorni sudo
për të modifikuar këtë skedar:
sudo gedit /etc/environment
Për të shtuar një variabël mjedisi, shkruani emrin e saj, një shenjë të barabartë (=
) dhe vlerën që dëshironi të mbajë ndryshorja e mjedisit. Mos vendosni hapësirë para ose pas shenjës së barazimit (=
). Emri i ndryshores së mjedisit mund të përmbajë shkronja, një nënvizim (_
) ose numra. Megjithatë, karakteri i parë i një emri nuk mund të jetë një numër.
Nëse ka hapësira në vlerë, sigurohuni që të vendosni të gjithë vlerën në thonjëza (\
).
Ruani skedarin dhe më pas dilni dhe hyni përsëri. Përdorni echo
për të testuar nëse një variabël i ri ekziston dhe mban vlerën që keni vendosur:
echo $WEBSITE
Për shkak se është një variabël mjedisor global dhe i disponueshëm për të gjithë, përdoruesi mary
mund t'i referohet variablit mjedisor kur ajo të regjistrohet më pas:
echo $WEBSITE
Për të parë të gjitha variablat e mjedisit menjëherë, shkruani printenv
. Ka shumë rezultate, kështu që ka kuptim ta dërgoni atë përmes sort
dhe më pas në less
:
printenv | sort | less
Lista e renditur e variablave të mjedisit shfaqet për ne në pak
.
Ne mund ta përcjellim daljen përmes grep
për të kërkuar variabla mjedisore që lidhen me një temë të caktuar.
printenv | grep GNOME
Variablat e mjedisit të guaskës
Këto janë disa nga variablat e mjedisit të guaskës që përdoren në bash
për të diktuar ose regjistruar sjelljen dhe funksionalitetin e tij. Disa nga vlerat përditësohen ndërsa përdorni terminalin. Për shembull, ndryshorja e mjedisit COLUMNS
do të përditësohet për të pasqyruar ndryshimet që mund të bëni në gjerësinë e dritares së terminalit:
- BASHOPTS: Opsionet e linjës së komandës që u përdorën kur u hap
bash
. - BASH_VERSION: Numri i versionit
bash
si një varg fjalësh dhe numrash. - BASH_VERSINFO: Versioni
bash
si shifër. - KOLONA: Gjerësia aktuale e dritares së terminalit.
- DIRSTACK: Drejtoritë që janë shtuar në pirgun e drejtorive me anë të komandës
pushd
. - HISTFILESIZE: Numri maksimal i rreshtave të lejuar në skedarin
histori
. - HISTSIZE: Numri i rreshtave të
historisë
të lejuara në memorie. - HOSTNAME: Emri i hostit të kompjuterit.
- IFS: Ndarësi i brendshëm i fushës përdoret për të ndarë hyrjen në vijën e komandës. Si parazgjedhje, kjo është një hapësirë.
- PS1: Ndryshorja e mjedisit
PS1
mban përkufizimin për vijën kryesore, të paracaktuar dhe të komandës. Një grup shenjash të quajtura sekuenca ikjeje mund të përfshihen në përkufizimin e linjës suaj të komandës. Ato përfaqësojnë gjëra të tilla si host- dhe emri i përdoruesit, drejtoria aktuale e punës dhe koha. - PS2: Kur një komandë përfshin më shumë se një rresht dhe pritet më shumë hyrje, shfaqet linja e komandës dytësore. Ndryshorja e mjedisit
PS2
mban përkufizimin e kësaj prompte dytësore, e cila, si parazgjedhje, është shenja më e madhe se (>
). - SHELLOPTS: Opsionet e guaskës mund t'i vendosni duke përdorur opsionin
set
. - UID: Identifikuesi i përdoruesit të përdoruesit aktual.
Le të kontrollojmë disa nga këto variabla të guaskës:
echo $BASH_VERSION
echo $HOSTNAME
echo $COLUMNS
echo $HISTFILESIZE
echo $UID
Për hir të plotësisë, këtu janë shenjat që mund të përdorni në përkufizimet e vijës së komandës:
- : Ora aktuale, e formatuar si HH:MM:SS.
- \d: Data aktuale, e shprehur si ditë jave, muaj, datë.
- : Një karakter me linjë të re.
- \s: Emri i guaskës suaj.
- \W: Emri i drejtorisë tuaj aktuale të punës.
- \w: Rruga për në drejtorinë tuaj aktuale të punës.
- \u: Emri i përdoruesit të personit që është identifikuar.
- \h: Emri i hostit të kompjuterit.
- \#: Çdo komandë brenda një shell është e numëruar. Kjo ju lejon të shihni numrin e komandës në vijën tuaj të komandës. Ky nuk është i njëjtë me numrin që komanda do të ketë në listën
histori
. - \$: Vendos karakterin përfundimtar të kërkesës në një shenjë dollari (
$
) për një përdorues të rregullt dhe një simbol hash (#) për përdoruesin rrënjë. Kjo funksionon duke kontrolluar UID-në e përdoruesit. Nëse është zero, përdoruesi është root.
Do të gjeni përkufizimin e ndryshores tuaj të mjedisit PS1
në skedarin tuaj .bashrc
.
Krijimi i variablave të mjedisit të sesionit
Për të krijuar variabla mjedisi për përdorimin tuaj, shtoni ato në fund të skedarit tuaj .bashrc
. Nëse dëshironi t'i keni të disponueshme variablat e mjedisit për seancat në distancë, si p.sh. lidhjet SSH, do t'ju duhet t'i shtoni ato edhe në skedarin tuaj .bash_profile
.
Formati i përkufizimit të ndryshores së mjedisit është i njëjtë për të dy skedarët. Për të shtuar një përkufizim në skedarin tuaj .bash_profile
, shkruani këtë në drejtorinë tuaj home:
gedit .bashrc
Ne kemi shtuar një variabël mjedisi të quajtur INHERITED_VAR
. Vini re fjalën eksport në fillim të rreshtit.
Ruani dhe mbyllni skedarin tuaj pasi të keni përfunduar redaktimi. Mund të dilni dhe të hyni përsëri, ose mund të bëni që guaska të rilexojë skedarin .bash_profile
duke përdorur komandën dot (.
) si kjo:
. .bashrc
Tani, le të krijojmë një variabël mjedisi në vijën e komandës:
LOCAL_VAR="This session only"
Nëse përdorim echo
, mund të shohim se të dy variablat e mjedisit janë të aksesueshme për ne:
echo $LOCAL_VAR
echo $INHERITED_VAR
Do të vini re se përkufizimi i ndryshores së mjedisit INHERITED_VAR
kishte fjalën eksport në fillim të rreshtit. Kjo do të thotë se variabla e mjedisit do të trashëgohet nga proceset fëmijë të guaskës aktuale. Nëse nisim një tjetër duke përdorur komandën bash
, mund t'i kontrollojmë përsëri dy variablat, nga brenda guaskës së fëmijës:
bash
echo $LOCAL_VAR
echo $INHERITED_VAR
Siç mund ta shihni, INHERITED_VAR
është i aksesueshëm në guaskën e fëmijëve, por LOCAL_VAR
jo. Ne thjesht marrim një vijë të zbrazët.
Megjithëse eksporti shton pjesën e ndryshores mjedisore në mjedisin që trashëgon fëmija, INHERITED_VAR
nuk është një variabël mjedisor global. Për shembull, përdoruesi mary
nuk mund ta referojë atë:
echo $INHERITED_VAR
Për të mbyllur sesionin bash
të fëmijës tonë, ne përdorim dalje
:
exit
Mjediset e trashëguara ndikojnë gjithashtu në skriptet. Këtu është një skript i thjeshtë që shkruan vlerat e tre variablave tanë të mjedisit në dritaren e terminalit:
#!/bin/bash
echo "WEBSITE" $WEBSITE
echo "LOCAL_VAR" $LOCAL_VAR
echo "INHERITED_VAR" $INHERITED_VAR
Kjo u ruajt në një skedar të quajtur envtest.sh
dhe më pas u bë i ekzekutueshëm me sa vijon:
chmod +x envtest.sh
Kur ekzekutojmë skriptin, ai mund të ketë akses në dy nga tre variablat e mjedisit:
./envtest.sh
Skripti mund të shohë ndryshoren globale të mjedisit WEBSITE
dhe ndryshoren e mjedisit të eksportuar INHERITED_VAR
. Ai nuk mund të hyjë në LOCAL_VAR
, edhe pse skripti po ekzekutohet në të njëjtën guaskë ku është krijuar ndryshorja.
Nëse kemi nevojë, mund të eksportojmë një variabël mjedisi nga linja e komandës. Ne do ta bëjmë këtë në LOCAL_VAR
tonë dhe më pas do ta ekzekutojmë sërish skriptin:
export LOCAL_VAR
./envtest.sh
Variabla e mjedisit është shtuar në mjedisin e guaskës aktuale, dhe kështu shfaqet në mjedisin që trashëgohet nga skripti. Skripti mund t'i referohet edhe asaj ndryshoreje mjedisore.
Lidhjet në distancë
Variablat globale të mjedisit janë të aksesueshme për seancat e hyrjes në distancë, por nëse dëshironi që variablat e mjedisit tuaj të përcaktuar lokalisht të disponohen nga distanca, duhet t'i shtoni ato në skedarin tuaj .bash_profile
. Mund të vendosni të njëjtën variabël mjedisi në skedarët .bashrc
dhe .bash_profile
, me vlera të ndryshme. Kjo mund të merret nga një skenar, të themi, për të modifikuar sjelljen e tij për njerëzit që përdorin sistemin në nivel lokal ose në distancë.
(Në rrezikun e ngatërrimit të çështjeve, ekziston gjithashtu një skedar .profile
. Ai gjithashtu mund të mbajë përkufizime të ndryshoreve të mjedisit. Megjithatë, skedari .profile
nuk lexohet nëse < Skedari.bash_profile është i pranishëm. Pra, gjëja më e sigurt për të bërë—dhe mënyra në përputhje me bash
—është përdorimi i skedarit .bash_profile
.)
Për të modifikuar skedarin .bash_profile
, do të përdorim përsëri gedit
:
gedit .bash_profile
Ne do të shtojmë të njëjtën ndryshore mjedisore me të njëjtën vlerë që kemi përdorur më parë.
Ruani ndryshimet tuaja dhe mbyllni gedit
.
Në një kompjuter tjetër, ne do të bëjmë një lidhje SSH
me kompjuterin testues.
ssh dave@howtogeek.local
Pasi të jemi lidhur, do ta ekzekutojmë skriptin edhe një herë:
./envtest.sh
Skedari .bash_profile
është lexuar si pjesë e inicializimit të hyrjes në distancë dhe ndryshorja e mjedisit INHERITED_VAR
është e aksesueshme për ne dhe skriptin.
Çrregullimi i një variabli të mjedisit
Për të çaktivizuar një variabël mjedisi, përdorni komandën unset
. Nëse çaktivizojmë variablin global të mjedisit, WEBSITE
dhe variablin e eksportuar të mjedisit, INHERITED_VAR
, ato nuk do të jenë më të disponueshme në vijën e komandës, as në proceset e fëmijëve:
unset WEBSITE
unset INHERITED_VAR
./envtest.sh
echo $WEBSITE
Një pikë për t'u theksuar është se kjo vetëm ndryshon disponueshmërinë e variablave globale të mjedisit për ju në këtë sesion. Një person tjetër që është identifikuar njëkohësisht do të jetë ende në gjendje të hyjë në shembullin e tij të asaj ndryshoreje mjedisore globale. Shembulli i tij u inicializua dhe u lexua nga skedari /etc/environment
gjatë procesit të tij të identifikimit dhe është i pavarur nga kopja e ndryshores nga kushdo tjetër.
Si shembull, përdoruesi mary
mund të hyjë ende në variablin e mjedisit WEBSITE
dhe të lexojë vlerën e tij, edhe pse përdoruesi dave
e ka çaktivizuar atë në seancën e tij:
echo $WEBSITE
Kontrolli i Mjedisit
Variablat e mjedisit mund të përdoren për t'i lënë skriptet dhe aplikacionet të dinë se si duhet të sillen. Ato mund të përdoren për të ruajtur cilësimet ose sasi të vogla të dhënash. Për shembull, një skript mund të plotësojë një mjedis me një vlerë që mund të referohet nga skriptet e tjera pa pasur nevojë t'i shkruajë ato në një skedar.
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts