M. Garrels. Bash Guide. Premenné. Ako nastaviť a zakázať lokálne, užívateľské a systémové premenné prostredia v Linuxe Ako zistiť, kde je zapísaná premenná shellu

Variabilné typy

Ako môžete vidieť z vyššie uvedených príkladov, premenné shellu sa zvyčajne píšu veľkými písmenami. Bash ukladá zoznamy premenných dvoch typov:

Globálne premenné

Globálne alebo premenné prostredia sú dostupné vo všetkých shelloch. Na zobrazenie premenných prostredia môžete použiť príkazy env alebo printenv. Tieto príkazy sú súčasťou balenia sh-utils.

Nižšie je uvedený typický výstup:

Franky ~> printenv CC=gcc CDPATH=.:~:/usr/local:/usr:/ CFLAGS=-O2 -fomit-frame-pointer COLORTERM=gnome-terminal CXXFLAGS=-O2 -fomit-frame-pointer DISPLAY=: 0 DOMAIN=hq.garrels.be e= TOR=vi FCEDIT=vi FIGNORE=.o:~ G_BROKEN_FILENAMES=1 GDK_USE_XFT=1 GDMSESSION=Predvolené GNOME_DESKTOP_SESSION_ID=Predvolené GTK_RC_FILES=/etkgrc/gnet/gtk. -1.2-gnome2 GWMCOLOR=tmavozelená GWMTERM=xterm HISTFILESIZE=5000 history_control=ignoredups HISTSIZE=2000 HOME=/nethome/franky HOSTNAME=octarine.hq.garrels.be INPUTRC=/etc/inputrc/JAVArHNAME=javky/JAVArHNAME=franky j2sdk1.4.0 LANG=sk LDFLAGS=-s LD_LIBRARY_PATH=/usr/lib/mozilla:/usr/lib/mozilla/plugins LESSCHARSET=latin1 LESS=-edfMQ LESSOPEN=|/usr/bin/lesspipe.sh %s LEX=flex LOCAL_MACHINE=octarine LOGNAME=franky LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd= 40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*. com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz= 01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01; 31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31: *.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*. tif=01;35: MACHINES=oktarína MAILCHECK=60 MAIL=/var/mail/franky MANPATH=/usr/man:/usr/share/man/:/usr/local/man:/usr/X11R6/man MEAN_MACHINES= octarine MOZ_DIST_BIN=/usr/lib/mozilla MOZILLA_FIVE_HOME=/usr/lib/mozilla MOZ_PROGRAM=/usr/lib/mozilla/mozilla-bin MTOOLS_FAT_COMPATIBILITY=1 MYMALLOC=0 NNTPPORT=119 NNTPIN/SERVER_THPAIN=Novych/NNGTPinSERNS / usr/lib/netscape/plugins OLDPWD=/nethome/franky OS=Linux PAGER=less PATH=/nethome/franky/bin.Linux:/nethome/franky/bin:/usr/local/bin:/usr/local/ sbin :/usr/X11R6/bin:/usr/bin:/usr/sbin:/bin:/sbin:. PS1=\[\033franky je v \w\[\033 PS2=Viac vstupov> PWD=/nethome/franky SESSION_MANAGER=local/octarine.hq.garrels.be:/tmp/.ICE-unix/22106 SHELL=/bin /bash SHELL_LOGIN=--login SHLVL=2 SSH_AGENT_PID=22161 SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass SSH_AUTH_SOCK=/tmp/ssh-XXmhQ4fC/agent.22106 USERWTERNAME=TYPEM=typem USERWTERNAME franky USER=franky _=/usr/bin/printenv VISUAL=vi WINDOWID=20971661 XAPPLRESDIR=/nethome/franky/app-defaults XAUTHORITY=/nethome/franky/.Xauthority XENVIRONMENT=/nethome/franky/.Xdefaults XFILESEARCHPATH /X11R6/lib/X11/%L/%T/%N%C%S:/usr/X11R6/lib/X11/%l/%T/%N%C%S:/usr/X11R6/lib/X11 /%T/%N%C%S:/usr/X11R6/lib/X11/%L/%T/%N%S:/usr/X11R6/lib/X11/%l/%T/%N%S :/usr/X11R6/lib/X11/%T/%N%S XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB XMODIFIERS=@im=none XTERMID= XWINHOME=/usr/X11R6 X=X11R6 - YACC=bison r

Lokálne premenné

Lokálne premenné sú dostupné iba v aktuálnom príkazovom prostredí. Ak je vstavaný príkaz nastaviť sa používa bez akýchkoľvek parametrov, vráti zoznam všetkých premenných (vrátane runtime premenných) a funkcií. Použime formátovanie a vytvorme zoradený výsledok, ktorý zohľadňuje lokalitu premenných.

Nižšie je uvedený súbor rozdielov vytvorený porovnaním výsledkov príkazov printenv A nastaviť, po odstránení zo zoznamu funkcií, ktoré sú tiež zobrazené príkazom nastaviť:

Franky ~> diff set.sorted printenv.sorted | grep"<" | awk "{ print $2 }" BASE=/nethome/franky/.Shell/hq.garrels.be/octarine.aliases BASH=/bin/bash BASH_VERSINFO=(="2" BASH_VERSION="2.05b.0(1)-release" COLUMNS=80 DIRSTACK=() DO_FORTUNE= EUID=504 GROUPS=() HERE=/home/franky HISTFILE=/nethome/franky/.bash_history HOSTTYPE=i686 IFS=$" LINES=24 MACHTYPE=i686-pc-linux-gnu OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PIPESTATUS=(="0") PPID=10099 PS4="+ PWD_REAL="pwd SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor THERE=/home/franky UID=504

Delenie premenných podľa ich obsahu

Okrem delenia premenných na lokálne a globálne ich môžeme rozdeliť aj do kategórií podľa toho, aký obsah je v premennej uložený. V tomto ohľade sú premenné rozdelené do štyroch typov:

  • Reťazcové premenné
  • Celočíselné premenné
  • Premenné – konštanty
  • Premenné - polia

O týchto typoch premenných budeme diskutovať v kapitole 10. Teraz v našich premenných použijeme celočíselné a reťazcové hodnoty.

Vytváranie premenných

V premenných sa rozlišujú veľké a malé písmená a štandardne sa používajú veľké písmená. Niekedy je zvykom používať malé písmená na zápis lokálnych premenných. Pre názvy premenných však môžete použiť ľubovoľné znaky a dokonca kombinovať veľké a malé písmená. V názvoch premenných môžete použiť aj čísla, ale názvy začínajúce číslicami nie sú povolené:

Prompt> export 1number=1 bash: export: `1number=1": neplatný identifikátor

Ak chcete nastaviť premennú v príkazovom prostredí, použite nasledujúci príkaz

VARNAME="value"

Okolo znamienka rovnosti nevkladajte medzery, spôsobí to chyby. Keď priraďujete hodnoty premenným, je dobrým zvykom uzavrieť obsah reťazca do úvodzoviek; tým sa znižuje šanca, že urobíte chybu.

Niekoľko príkladov použitia veľkých a malých písmen, čísel a medzier (správa príkaz nenájdený označuje problém - približne.):

Franky ~> MYVAR1="2" franky ~> echo $MYVAR1 2 franky ~> first_name="Franky" franky ~> echo $first_name Franky franky ~> full_name="Franky M. Singh" franky ~> echo $full_name Franky M. Singh franky ~> MYVAR-2="2" bash: MYVAR-2=2: príkaz nenájdený franky ~> MYVAR1 ="2" bash: MYVAR1: príkaz nenájdený franky ~> MYVAR1= "2" bash: 2: príkaz nenájdené franky ~> unset MYVAR1 first_name full_name franky ~> echo $MYVAR1 $first_name $full_name<--no output-->úprimný ~>

Exportujte premenné

Premenná vytvorená podľa vyššie uvedeného príkladu je dostupná iba v aktuálnom príkazovom prostredí. Toto je lokálna premenná: podriadené procesy aktuálneho shellu nebudú o tejto premennej vedieť. Aby sme mohli odovzdať premenné do subshell, potrebujeme export pomocou vstavaného príkazu export. Premenné, ktoré sa exportujú, sa nazývajú premenné prostredia. Priradenie hodnoty a export sa zvyčajne vykonáva v jednom kroku:

Exportovať VARNAME="value"

Podshell môže zmeniť premenné, ktoré sú zdedené z nadradeného procesu, ale zmeny vykonané podriadeným procesom neovplyvnia nadradený proces. Toto je demonštrované na nasledujúcom príklade:

Franky ~> full_name="Franky M. Singh" franky ~> bash franky ~> echo $full_name franky ~> exit franky ~> export full_name franky ~> bash franky ~> echo $full_name Franky M. Singh franky ~> export full_name= "Charles the Great" franky ~> echo $full_name Charles the Great franky ~> exit franky ~> echo $full_name Franky M. Singh franky ~>

Keď sa podshell prvýkrát pokúsi prečítať hodnotu full_name , hodnota nie je nastavená (príkaz ozvena zobrazuje prázdny riadok). Po opustení subshell sa premenná full_name exportuje do nadradeného shellu - premennú je možné exportovať po priradení hodnoty. Potom sa spustí nový podshell zobrazujúci premennú exportovanú z nadradeného prostredia. Premenná je upravená a bude v nej uložená iná hodnota, ale v nadradenom shelle zostáva hodnota tejto premennej rovnaká.

Rezervované premenné

Bourne Reserved Shell Variables

Bash používa určité premenné shellu rovnako ako Bourne shell. V niektorých prípadoch Bash priradí premennej jej predvolenú hodnotu. Nižšie uvedená tabuľka ukazuje Stručný opis tieto jednoduché premenné shellu:

Tabuľka 3.1. Bourne Reserved Shell Variables

Názov premennej Definícia

Zoznam adresárov oddelených dvojbodkami, ktoré sa používajú pri hľadaní cesty pomocou vstavaného príkazu CD.

Domovský adresár súčasný užívateľ; používa sa štandardne v zabudovanom príkaze CD. Hodnota tejto premennej sa používa aj namiesto znaku vlnovky.

Zoznam znakov používaných na oddelenie polí; používa sa, keď shell po vykonaní všetkých zámen rozdelí výsledok na jednotlivé slová.

Ak je tento parameter nastavený na názov súboru a nie je nastavená MAILPATH, Bash bude informovať používateľa, že pošta bola prijatá v zadanom súbore.

Dvojbodkou oddelený zoznam názvov súborov, v ktorých príkazový shell pravidelne kontroluje novú poštu.

Hodnota posledného argumentu v parametri spracovanom vstavaným príkazom getopts.

Index posledného argumentu parametra spracovaného vstavaným príkazom getopts.

Dvojbodkou oddelený zoznam adresárov, v ktorých shell hľadá príkazy.

Primárna riadka výzvy. Predvolená hodnota je ""\s-\v\$ "".

Sekundárny riadok výzvy. Predvolená hodnota je ""> "".

Bash Reserved Variables

Hodnoty týchto premenných sú nastavené alebo používané v Bash, ale vo všeobecnosti sa v iných shelloch nepovažujú za špeciálne.

Tabuľka 3.2. Bash Reserved Variables

Názov premennej Definícia

Táto premenná riadi, ako shell interaguje s používateľom a vykonáva úlohy.

Úplná cesta použitá na spustenie aktuálnej inštancie Bash.

Ak je táto premenná nastavená v čase, keď je Bash vyvolaný na spustenie skriptu, jej hodnota sa použije ako názov spúšťacieho súboru, ktorý sa musí prečítať pred spustením skriptu.

Číslo verzie aktuálnej inštancie Bash.

Premenná je pole len na čítanie, ktorého prvky poľa ukladajú informácie o verzii tohto prípadu Bash.

Pri tlači vybraných zoznamov sa používa vstavaný príkaz vyberte na určenie šírky terminálu. Automaticky nastavené pri príjme signálu SIGWINCH.

Ukazovateľ v $(COMP_WORDS) na slovo, ktoré ukladá aktuálnu pozíciu kurzora.

Aktuálny príkazový riadok.

Ukazovateľ na aktuálnu pozíciu kurzora vzhľadom na začiatok aktuálneho príkazu.

Premenná je pole pozostávajúce z jednotlivých slov použitých v aktuálnom príkazovom riadku.

Premenná je pole, z ktorého Bash číta možné možnosti dokončovania reťazcov generované funkciou shell volanou službou určenou na programovanie dokončenia

Premenná je pole, ktoré uchováva aktuálny stav zásobníka adresárov.

Číselné efektívne ID používateľa ID aktuálneho používateľa.

Predvolený editor, ktorý sa používa v zabudovanom príkaze fc je zadaný parameter -e

Dvojbodkou oddelený zoznam prípon, ktoré by sa mali ignorovať pri automatickom dopĺňaní názvu súboru.

Názov aktuálne spustenej funkcie shellu.

Dvojbodkou oddelený zoznam vzorov, ktoré definujú množinu názvov súborov, ktoré sa majú ignorovať pri nahrádzaní názvov súborov.

Premenná je pole obsahujúce zoznam skupín, do ktorých patrí aktuálny používateľ.

Až tri postavy, ktoré riadia nahradenie histórie príkazov, rýchle nahradenie a rozdelenie dokončených suplovaní na žetóny.

Číslo aktuálneho príkazu v histórii príkazov alebo jeho index v zozname histórie príkazov.

Určuje, či sa príkaz pridá do súboru histórie príkazov.

Názov súboru, v ktorom je uložená história príkazov. Predvolená hodnota: ~/.bash_history.

Predvolený maximálny počet riadkov v súbore histórie príkazov je 500.

Dvojbodkou oddelený zoznam vzorov, ktoré určujú, či sa má príkaz uložiť do zoznamov histórie príkazov.

Predvolený maximálny počet príkazov, ktoré možno uložiť do zoznamu histórie príkazov, je 500.

Obsahuje názov súboru v rovnakom formáte ako súbor /etc/hosts, ktorý je možné prečítať, keď príkazový shell potrebuje doplniť názov hostiteľa.

Aktuálny názov hostiteľa.

Reťazec popisujúci stroj, na ktorom beží Bash.

Riadi, čo urobí shell, keď prijme znak ako ukončovací znak vstupného toku EOF(symbol konca súboru).

Názov inicializačného súboru programu Readline, ktorý nahrádza predvolený súbor /etc/inputrc.

Používa sa na definovanie kategórie miestnych nastavení pre všetky kategórie, ktoré nie sú explicitne špecifikované premennými, ktorých názvy začínajú znakmi LC_ .

Táto premenná prepíše hodnotu premennej LANG a všetky ostatné premenné, ktoré začínajú znakmi LC_, ktoré určujú kategóriu lokalizácie.

Táto premenná určuje poradie triedenia používané pri triedení názvov súborov so zhodou so vzorom a určuje interpretáciu rozsahov, tried zhody a pravidiel porovnávania znakov pre nahrádzanie názvu súboru a zhodu so vzorom.

Táto premenná určuje, ako sa znaky interpretujú a či patria do konkrétnej triedy pre rozšírenie názvu súboru a zhodu so vzorom.

Táto premenná určuje kategóriu lokalizácie, ktorá sa používa na spracovanie reťazcov dvojité úvodzovky, pred ktorým je symbol $.

Táto premenná určuje kategóriu lokalizácie pre formát čísla.

Číslo riadku v skripte alebo funkcii shellu, ktorá sa práve vykonáva.

Používa sa vstavaným príkazom vyberte na určenie dĺžky stĺpca, v ktorom sa zobrazujú vybrané zoznamy.

Reťazec, ktorý plne popisuje typ systému, na ktorom beží Bash, pomocou štandardného formátu GNU CPU-COMPANY-SYSTEM.

Určuje v sekundách, ako často má shell kontrolovať poštu v súboroch špecifikovaných v premenných MAILPATH alebo MAIL.

Predchádzajúci pracovný adresár nastavený pomocou vstavaného príkazu CD.

Ak je nastavená na 1, Bash zobrazuje chybové správy generované vstavaným príkazom getopts.

Popis reťazca operačný systém, ktorá prevádzkuje Bash.

Premenná je pole obsahujúce zoznam hodnôt stavu ukončenia procesu v poslednom potrubí (ktoré môže pozostávať z jedného príkazu).

Ak je táto premenná pridaná do prostredia pri spustení bash, shell prejde do režimu POSIX.

Ak je táto premenná nastavená, hodnota sa interpretuje ako príkaz, ktorý sa vykoná pred každým primárnym riadkom výzvy (PS1).

Hodnota tejto premennej sa používa pre príkaz vyberte ako promptný reťazec. Predvolené - ""#? ""

Hodnota reťazca výzvy, ktorý je zadaný pred príkazovým riadkom, keď je voľba -x nastavená na povolenie ozveny príkazový riadok; predvolená hodnota je ""+ "".

Aktuálny pracovný adresár nastavený vstavaným príkazom CD.

Pri každom prístupe k tomuto parametru sa vygeneruje náhodné celé číslo v rozsahu od 0 do 32767. Hodnota tejto premennej sa používa v generátoroch náhodných čísel.

Predvolená premenná v zabudovanom príkaze čítať.

Táto premenná udáva počet sekúnd, ktoré uplynuli od spustenia príkazového shellu.

Zoznam parametrov nastavených v príkazovom prostredí; oddelené dvojbodkami.

Zvyšuje sa o jednu pri každom spustení novej inštancie Bash.

Hodnota tohto parametra sa používa ako reťazec, ktorý určuje formát na vydávanie informácií o čase spustenia pre kanály, pred ktorými je rezervované slovo čas.

Ak je premenná TMOUT nastavená na hodnotu väčšiu ako nula, potom sa s ňou v zabudovanom príkaze zaobchádza ako s predvoleným časovým limitom čítať. Keď sa príkazový shell spustí v interaktívnom režime, táto hodnota sa interpretuje ako počet sekúnd, počas ktorých bude shell čakať na vstup po vydaní úvodného riadku. Ak nie je prijatý žiadny vstup, po tomto čase sa Bash ukončí.

Číselná hodnota, skutočné ID používateľa pre aktuálneho používateľa.

Viac informácií nájdete na manuálových stránkach alebo dokumentácii Bash. Niektoré premenné sú len na čítanie, niektoré sú nastavené automaticky a niektoré strácajú zmysel, keď sú nastavené na niečo iné, ako je ich predvolená hodnota.

Špeciálne parametre

Príkazový shell zaobchádza s niektorými parametrami špeciálnym spôsobom. Tieto parametre možno použiť iba na získanie hodnôt z nich, nemožno im priradiť hodnoty.

Tabuľka 3.3. Bash špeciálne premenné

Symbol Definícia

Vráti pozičné parametre začínajúce od prvého. Keď je parameter uvedený v úvodzovkách, je nahradený jedným slovom obsahujúcim hodnoty každého parametra oddelené prvým znakom špeciálnej premennej IFS.

Vráti pozičné parametre začínajúce od prvého. Keď je parameter zadaný v úvodzovkách, každý parameter sa vráti ako samostatné slovo.

Vráti počet pozičných parametrov zadaných ako desatinnú hodnotu.

Vráti návratový kód posledného potrubia spusteného v režime popredia.

Parameter spojovník vracia príznaky aktuálneho parametra tak, ako boli nastavené pri volaní vstavaného príkazu nastaviť, alebo ako ich nastavil samotný shell (napríklad -i).

Vráti ID procesu shellu.

Vráti ID procesu posledného príkazu vykonaného v režime na pozadí (asynchrónne).

Vráti názov shellu alebo skriptu.

Hodnota parametra "podčiarknutie" sa nastaví pri spustení príkazového shellu a obsahuje celé meno shell alebo skript, ktorý sa vykoná tak, ako bol odovzdaný v zozname argumentov. Hodnota bude potom nahradená posledným argumentom predchádzajúceho príkazu. Tento parameter tiež určuje úplnú cestu ku každému príkazu vykonanému a umiestnenému v prostredí, ktoré bolo exportované do tohto príkazu. Pri kontrole pošty tento parameter obsahuje názov súboru pošty.

Pozičné parametre sú slová nasledujúce za názvom skriptu shellu. Sú uložené v premenných $1, $2, $3 atď. Premenné sa pridávajú do interného poľa podľa potreby. Premenná $# určuje celkový počet parametrov, ako je znázornené v nasledujúcom jednoduchom skripte:

# positional.sh # Tento skript načíta 3 pozičné parametre a vytlačí ich. POSPAR1="$1" POSPAR2="$2" POSPAR3="$3" echo "$1 je prvý pozičný parameter, \$1." echo "$2 je druhý pozičný parameter, \$2." echo "$3 je tretí pozičný parameter, \$3." echo echo "Celkový počet pozičných parametrov je $#."

Pri spustení skriptu môžete zadať ľubovoľný počet argumentov:

Franky ~> positional.sh jeden dva tri štyri päť jeden je prvý pozičný parameter, $1. dva je druhý pozičný parameter, $2. tri je tretí pozičný parameter, $3. Celkový počet pozičných parametrov je 5. franky ~> positional.sh jeden dva jeden je prvý pozičný parameter, $1. dva je druhý pozičný parameter, $2. je tretí pozičný parameter, $3. Celkový počet pozičných parametrov je 2.

Ďalšie informácie o používaní týchto parametrov nájdete v kapitole 7, Podmienené príkazy a v časti o vstavanom príkaze shift.

Niekoľko príkladov ďalších špeciálnych parametrov:

Franky ~> slovník grep /usr/share/dict/words slovník franky ~> echo $_ /usr/share/dict/words franky ~> echo $$ 10662 franky ~> mozilla & 11064 franky ~> echo $! 11064 franky ~> echo $0 bash franky ~> echo $? 0 franky ~> ls doesnotexist ls: doesnotexist: Žiadny takýto súbor alebo adresár franky ~> echo $? 1 úprimný ~>

Používateľ úprimný začína zadaním príkazu grep, ktorý priradí hodnotu premennej _ . ID procesu tohto shellu je 10662. Ak je vykonanie nejakej úlohy prenesené na režim na pozadí, v premennej! bude tam identifikátor procesu práca na pozadí. Funkčný príkazový shell je bash. Ak sa vyskytla chyba v premennej? bude návratový kód odlišný od 0 (nula).

Rozšírenie rozsahu použitia skriptov, ktoré majú premenné

Okrem toho, že váš skript bude čitateľnejší, premenné vám tiež pomôžu rýchlo použiť váš skript v iných kontextoch alebo na iné účely. Zvážte nasledujúci príklad - veľmi jednoduchý skript, ktorý funguje na vzdialenom serveri záložná kópia domovský adresár používateľa úprimný:

#!/bin/bash # Tento skript vytvára zálohu môjho domovského adresára. cd /home # Toto vytvorí archív tar cf /var/tmp/home_franky.tar franky > /dev/null 2>&1 # Najprv odstráňte starý súbor bzip2. Chyby presmerovania, pretože to generuje nejaké, ak archív # neexistuje. Potom vytvorte nový komprimovaný súbor. rm /var/tmp/home_franky.tar.bz2 2> /dev/null bzip2 /var/tmp/home_franky.tar # Skopírujte súbor na iný počítač - máme ssh kľúče, aby to fungovalo bez zásahu. scp /var/tmp/home_franky.tar.bz2 bordeaux:/opt/backup/franky > /dev/null 2>&1 # Vytvorte časovú pečiatku v protokolovom súbore. dátum >> /home/franky/log/home_backup.log záloha echa bola úspešná >> /home/franky/log/home_backup.log

V prvom rade je väčšia pravdepodobnosť, že sa dopustíte chýb, ak budete manuálne špecifikovať súbory a adresáre vždy, keď ich potrebujete. Po druhé, predpokladajme, že používateľ úprimný chce tento skript odovzdať používateľovi Carol, potom predtým Carol bude môcť použiť skript pre Rezervovať kópiu svoj domovský adresár, bude musieť dosť upraviť. To isté sa stane, ak používateľ úprimný bude chcieť použiť tento skript na zálohovanie iných adresárov. Ak chcete rozšíriť rozsah, použite premenné pre všetky súbory, adresáre, používateľské mená, názvy serverov atď. Potom stačí zmeniť hodnotu iba raz a nemusíte prechádzať celým skriptom, aby ste našli všetky miesta, kde sa konkrétny parameter vyskytuje. Príklad:

#!/bin/bash # Tento skript vytvára zálohu môjho domovského adresára. # Zmeňte hodnoty premenných, aby skript fungoval za vás: BACKUPDIR=/home BACKUPFILES=franky TARFILE=/var/tmp/home_franky.tar BZIPFILE=/var/tmp/home_franky.tar.bz2 SERVER=bordeaux REMOTEDIR =/ opt/backup/franky LOGFILE=/home/franky/log/home_backup.log cd $BACKUPDIR # Toto vytvorí archív tar cf $TARFILE $BACKUPFILES > /dev/null 2>&1 # Najprv odstráňte starý súbor bzip2. Chyby presmerovania, pretože to generuje nejaké, ak archív # neexistuje. Potom vytvorte nový komprimovaný súbor. rm $BZIPFILE 2> /dev/null bzip2 $TARFILE # Skopírujte súbor na iný hostiteľ - máme ssh kľúče, aby to fungovalo bez zásahu. scp $BZIPFILE $SERVER:$REMOTEDIR > /dev/null 2>&1 # Vytvorte časovú pečiatku v protokolovom súbore. dátum >> $LOGFILE záloha echa bola úspešná >> $LOGFILE

Počas práce so serverom shell kompiluje veľké množstvo informácií, ktoré určujú jeho správanie a prístup k zdrojom. Niektoré z týchto možností nájdete v nastaveniach shellu, iné sú určené vstupom používateľa.

Jedným zo spôsobov, ako môže shell sledovať tieto informácie, je prostredníctvom prostredia. Prostredie je oblasť obsahujúca premenné definujúce systém, ktoré shell vytvára pri každom spustení relácie.

Tento tutoriál vysvetľuje, ako interagovať s prostredím a čítať alebo nastavovať premenné prostredia a shellu interaktívne a pomocou konfiguračné súbory. Všetky akcie sa vykonávajú na Ubuntu 12.04 VPS, ale na akomkoľvek modernom Linuxová distribúcia by mal fungovať rovnakým spôsobom.

Ako funguje prostredie a jeho premenné

Zakaždým, keď je aktivovaná relácia shellu, spustí sa proces zhromažďovania a kompilácie informácií, ktoré by mali byť dostupné pre shell a jeho podriadené procesy. Shell získava tieto údaje z mnohých rôznych súborov a nastavení v systéme.

Vo všeobecnosti prostredie poskytuje prenosové zariadenie, ktoré zhromažďuje a nastavuje potrebné nastavenia pre proces shell, ktorý ich následne odovzdáva svojim podriadeným procesom.

Prostredie má formu reťazca obsahujúceho páry kľúč – hodnota. Viaceré hodnoty sú zvyčajne oddelené dvojbodkou (:). Každý pár vo všeobecnosti vyzerá takto:

KĽÚČ=hodnota1:hodnota2:...

Ak hodnota obsahuje medzery, musíte použiť dvojité úvodzovky:

KEY="hodnota s medzerami"

V tomto prípade kľúč znamená premenné jednej z dvoch existujúce druhy: premenné prostredia alebo shellu.

Premenné prostredia sú premenné, ktoré boli definované pre aktuálny shell a dedia ich všetky dcérske shelly alebo procesy. Premenné prostredia sa používajú na odovzdávanie informácií procesom spúšťaným z shellu.

Premenné škrupiny sú premenné, ktoré sú obsiahnuté výlučne v shelli, v ktorom boli nastavené alebo definované. Často sa používajú na sledovanie aktuálnych údajov (napríklad aktuálny pracovný adresár).

Zvyčajne sa takéto premenné označujú veľkými písmenami. To pomáha používateľom rozlišovať medzi premennými prostredia v iných kontextoch.

Tlačový shell a premenné prostredia

Každá relácia sleduje svoj vlastný shell a premenné prostredia. Existuje niekoľko spôsobov, ako ich dostať von.

Ak chcete zobraziť zoznam všetkých premenných prostredia, použite príkazy env alebo printenv. V predvolenom nastavení vydajú presne rovnaký výsledok:

printenv
SHELL=/bin/bash
TERM=xterm
USER=demouser
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd= 40;33;01:or=40;31;01:su=37;41:sg=30;43:ca:...
MAIL=/var/mail/demouser
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PWD=/home/demouser
LANG=en_US.UTF-8
SHLVL=1
HOME=/domov/demouser
LOGNAME=demouser
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/printenv

Toto je typický príklad výstupu príkazov printenv a env. Tieto príkazy sa líšia len v niekoľkých jednotlivých funkciách. Printenv môže napríklad vyhľadávať hodnoty jednotlivých premenných:

printenv SHELL
/bin/bash

Príkaz env vám umožňuje zmeniť prostredie, v ktorom sa programy spúšťajú, odoslaním súboru definícií premenných do príkazu, napríklad takto:

env VAR1="blahblah" command_to_run command_options

Ako je uvedené vyššie, podriadené procesy zvyčajne dedia premenné prostredia nadradeného procesu, čo umožňuje meniť hodnoty alebo zavádzať ďalšie premenné pre podradené procesy.

Ako môžete vidieť vo výstupe príkazu printenv, veľa premenných prostredia sa vytvára pomocou systémové súbory a procesy bez zásahu používateľa.

Ako však vidíte premenné shellu?

Ak to chcete urobiť, použite príkaz set. Pri zadaní bez ďalších parametrov set uvádza všetky premenné shellu, premenné prostredia, lokálne premenné a funkcie shellu:

nastaviť
BASH=/bin/bash
BASHOPTS=veľkosť kontroly:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
. . .

Tento zoznam je spravidla dosť dlhý. Ak ho chcete zobraziť vo vhodnejšom formáte, otvorte ho pomocou programu pager:

Tento zoznam obsahuje obrovské množstvo Ďalšie informácie, ktorý je v tento moment nie sú potrebné (napríklad niektoré bash funkcie).

Na „vyčistenie“ výstupu je potrebné spustiť príkaz set v režime POSIX, ktorý obchádza funkcie shellu. Toto je potrebné vykonať v subshell, aby sa nezmenilo aktuálne prostredie:

(set -o posix; set)

Táto akcia zobrazí všetky premenné prostredia a shellu.

Môžete tiež porovnať tento výstup s výstupom príkazov env/printenv a pokúsiť sa vypísať iba premenné shellu, ale takýto zoznam nebude ideálny, pretože výstup týchto príkazov je odlišný:

komunikácia -23<(set -o posix; set | sort) <(env | sort)

Zoznam bude pravdepodobne obsahovať viacero premenných prostredia, pretože príkaz set tlačí hodnoty v úvodzovkách, ale príkazy printenv a env nie.

Je to však skvelý spôsob, ako zobraziť premenné prostredia a shell nastavené v danej relácii.

Takéto premenné sa používajú na najrôznejšie účely. Poskytujú alternatívny spôsob, ako nastaviť trvalé hodnoty pre reláciu medzi procesmi, čím sa eliminuje potreba vykonávať zmeny v súbore.

Základné premenné prostredia a shellu

Niektoré obzvlášť užitočné premenné prostredia a shellu sa používajú veľmi často.

Nižšie je uvedený zoznam hlavných premenných prostredia:

  • SHELL: Popisuje shell, ktorý interpretuje zadané príkazy. Vo väčšine prípadov je štandardne nainštalovaný bash, ale túto hodnotu je možné v prípade potreby zmeniť.
  • TERMÍN: Určuje typ emulovaného terminálu pri spustení shellu. V závislosti od prevádzkových požiadaviek je možné emulovať rôzne hardvérové ​​terminály. Zvyčajne sa toho nemusíte obávať.
  • USER: súčasný užívateľ.
  • P.W.D.: aktuálny pracovný adresár.
  • OLDPWD: predchádzajúci pracovný adresár. Shell ho uloží v prípade spustenia príkazu cd -.
  • LS_FARBY: Definuje farebné kódy, ktoré sa používajú na zafarbenie výstupu príkazu ls. Tento výstup pomáha používateľovi čítať výsledok príkazu rýchlejšie (napríklad rýchlo rozlišovať medzi typmi súborov).
  • POŠTA: Cesta k aktuálnej poštovej schránke používateľa.
  • PATH: Zoznam adresárov, ku ktorým systém pristupuje pri vykonávaní príkazov. Keď používateľ spustí príkaz, systém skontroluje spustiteľný súbor v týchto adresároch v určenom poradí.
  • JAZYK: Aktuálne nastavenia jazyka a lokalizácie vrátane kódovania znakov.
  • DOMOV: Domovský adresár aktuálneho používateľa.
  • _ : Posledný vykonaný príkaz.

Po prečítaní zoznamu premenných prostredia skontrolujte zoznam premenných prostredia:

  • BASHOPTS: Zoznam možností použitých pri vykonávaní bash. Toto sa dá použiť na kontrolu, či prostredie funguje podľa očakávania.
  • BASH_VERZIA: Bežiaca verzia bash v ľudsky čitateľnej forme.
  • BASH_VERSINFO: Strojovo čitateľná verzia bash.
  • STĹPCE: Určuje šírku výstupu v stĺpcoch.
  • DIRSTACK: Zásobník adresárov prístupných príkazom pushd a popd.
  • HISTFILESIZE: Maximálny počet riadkov obsiahnutých v súbore histórie príkazov.
  • HISTSIZE: Počet príkazov, ktoré sa majú zapamätať v zozname histórie.
  • MENO HOSŤA: Aktuálny názov hostiteľa.
  • IFS: Interný oddeľovač vstupných polí na príkazovom riadku. Predvolená hodnota je priestor.
  • PS1: Definuje úvodný riadok výzvy – typ príkazového riadku pri spustení relácie shellu. Premenná PS2 nastavuje sekundárny riadok výzvy, ak príkaz zahŕňa viacero riadkov.
  • SHELLOPTS: Možnosti prostredia, ktoré je možné nastaviť pomocou set.
  • UID: Jedinečný identifikátor pre aktuálneho používateľa.

Nastavenie premenných prostredia a prostredia

Nižšie je uvedených niekoľko príkladov, ktoré demonštrujú rozdiel medzi premennými shellu a prostredia a vysvetľujú syntax nastavenia týchto premenných.

Vytváranie premenných shellu

Najprv musíte nastaviť premenné shellu pre aktuálnu reláciu. To sa robí veľmi jednoducho, všetko, čo musíte urobiť, je zadať názov a hodnotu. Ako už bolo spomenuté, na písanie názvov takýchto premenných sa používajú veľké písmená.

TEST_VAR="Ahoj svet!"

Tento príklad používa úvodzovky, pretože hodnota obsahuje medzery. Okrem toho tu musíte použiť jednoduché úvodzovky, pretože výkričník je špeciálny znak v shellu bash, ktorý pristupuje k histórii príkazov, pokiaľ nie je zakódovaný alebo uzavretý v jednoduchých úvodzovkách.

Výsledná premenná shellu je teda platná v aktuálnej relácii, ale nie je odovzdaná svojim podriadeným procesom.

Ak to chcete overiť, použite príkaz grep na výsledok príkazu set:

nastaviť | grep TEST_VAR
TEST_VAR="Ahoj svet!"

Môžete sa tiež uistiť, že táto premenná nie je premennou prostredia spustením príkazu grep na výsledok príkazu printenv:

printenv | grep TEST_VAR

Táto akcia neprinesie žiadny výsledok.

Toto možno použiť na odhalenie hodnoty akejkoľvek premennej shellu alebo prostredia.

echo $TEST_VAR
Ahoj svet!

Ako vidíte, na prístup k hodnote premennej musíte použiť symbol $.

Opäť platí, že výsledná premenná by nemala byť odovzdaná žiadnemu podriadenému procesu. Ak to chcete otestovať, vo svojom aktuálnom shelle rozbaľte nový bash shell:

bash
echo $TEST_VAR

Ak rozbalíte dcérsky shell a pokúsite sa otvoriť obsah premennej, nič sa nevytlačí. To znamená, že všetko funguje správne.

Ak sa chcete vrátiť do pôvodného prostredia, napíšte exit:

Vytváranie premenných prostredia

Teraz skúste premennú shell zmeniť na premennú prostredia. To sa vykonáva exportom premennej. Príkaz, ktorý vykoná export, je pomenovaný podľa toho.

Tento príkaz zmení premennú shellu na premennú prostredia. Ak chcete skontrolovať, či bolo všetko vykonané správne, môžete sa znova pozrieť na zoznam premenných prostredia:

printenv | grep TEST_VAR
TEST_VAR=Ahoj Svet!

Teraz je táto premenná zobrazená v tomto zozname. Môžete tiež znova rozbaliť podriadenú schránku:

bash
echo $TEST_VAR
Ahoj svet!

Skvelé! Podradený shell dostal premennú z pôvodného shellu. Skúste exportovať ešte jednu premennú predtým, ako opustíte dcérsky shell.

export NEW_VAR="Testovací export"

Skontrolujte, či bola premenná exportovaná:

printenv | grep NEW_VAR
NEW_VAR=Testovací export

Teraz sa vráťte k svojmu pôvodnému shellu:

Skontrolujte, či je možné túto premennú otvoriť:

Výsledok sa nevráti

Stáva sa to preto, že premenné prostredia sa odovzdávajú iba podriadeným procesom. Neexistuje žiadny vstavaný spôsob, ako nastaviť premenné prostredia nadradeného shellu. Vo väčšine prípadov to zabráni tomu, aby programy zasahovali do operačného prostredia, z ktorého boli spustené.

Premenná NEW_VAR bola nastavená ako premenná prostredia podriadeného prostredia. Táto premenná je platná pre tento shell a jeho dcérske shelly a procesy. Po návrate používateľa do pôvodného prostredia bolo toto prostredie zničené.

Presúvanie a resetovanie premenných

Premenná TEST_VAR je stále premennou prostredia. Ak chcete, aby sa to znova stalo premennou shellu, zadajte:

export -n TEST_VAR

Teraz táto premenná už nie je premennou prostredia:

printenv | grep TEST_VAR

Toto je opäť premenná shellu:

nastaviť | grep TEST_VAR
TEST_VAR="Ahoj svet!"

Ak chcete úplne resetovať premennú, či už je to premenná prostredia alebo prostredia, použite príkaz unset:

Uistite sa, že takáto premenná už neexistuje:

Nebol vytlačený žiadny výsledok, pretože premenná bola resetovaná.

Automatické nastavenie premenných prostredia

Ako už bolo spomenuté, mnohé programy používajú premenné prostredia na určenie toho, ako by mali fungovať. Nastavenie potrebných premenných pri každom vytvorení nového shellu je dosť nepohodlné. Mnohé premenné sa navyše nastavujú hneď po prihlásení. Ako nastaviť premenné automaticky?

Je to trochu komplikovanejšie, ako sa na prvý pohľad zdá, pretože bash shell číta veľa konfiguračných súborov.

Typy relácií Shell

Shell bash číta rôzne konfiguračné súbory v závislosti od toho, ako bola relácia spustená. Prvé dva typy relácií, ktoré definujú shell, sú štart a dieťa.

Štartér alebo počiatočný shell(prihlasovací shell) je relácia shellu, ktorá sa otvorí po autorizácii užívateľa. Ak sa používateľ prihlási do terminálu alebo sa autentifikuje pomocou SSH, otvorí sa spúšťací shell.

Ak sa nová relácia spustí z autorizovanej (začiatočnej) relácie (ako v predchádzajúcich príkladoch bol spustený nový bash shell), táto relácia bude dcérska spoločnosť (niePrihlásiť saškrupina). Na otvorenie tejto relácie nemusíte prejsť postupom autorizácie.

Relácie shellu môžu byť tiež interaktívne alebo neinteraktívne.

Interaktívna relácia shell (interaktívny shell) je relácia viazaná na terminál. Neinteraktívna relácia shellu je relácia, ktorá nie je spojená s terminálom.

Takže shellové relácie sú klasifikované podľa nasledujúcich aspektov: štart-dieťa, interaktívne-neinteraktívne.

Normálna relácia otvorená pomocou SSH je zvyčajne interaktívna štartovacia relácia. Skript spustený cez príkazový riadok sa zvyčajne spúšťa v neinteraktívnej podradenej relácii. Relácia terminálu je iná kombinácia týchto dvoch vlastností.

Klasifikáciou relácie ako počiatočnej relácie alebo podradenej relácie systém pochopí, ktoré súbory je potrebné prečítať, aby sa inicializovala relácia shellu.

Najprv teda relácia pri spustení získa konfigurácie zo súboru /etc/profile. Potom vyhľadá konfiguračný súbor spúšťacieho shellu v domovskom adresári užívateľa, aby získal užívateľom definované konfigurácie.

Táto relácia číta súbory ~/.bash_profile, ~/.bash_login a ~/.profile a nečíta iné súbory.

Podradená relácia zase číta /etc/baash.bashrc a potom užívateľský súbor ~/.bash.rc na nasadenie prostredia.

Neinteraktívne shelly čítajú premennú prostredia BASH_ENV a zadaný súbor, aby vytvorili nové prostredie.

Ako nastaviť premenné prostredia

Ako vidíte, konfigurácie sú rozptýlené v rôznych súboroch.

Vďaka tomu je systém veľmi flexibilný, čo je užitočné v určitých situáciách, keď potrebujete nastaviť rôzne parametre pre štartovaciu a detskú škrupinu. Tieto shelly však vo všeobecnosti používajú rovnaké nastavenia.

Našťastie väčšina distribúcií Linuxu poukazuje na konfiguračný súbor dcérskeho shellu ako zdroj konfigurácií spúšťacieho shellu. To znamená, že môžete definovať premenné prostredia pre obe relácie v konfiguračných súboroch podriadeného shellu.

Obidva shelly zvyčajne používajú užívateľom definované premenné prostredia. To znamená, že tieto premenné môžete nastaviť v súbore ~/.bashrc.

Otvorte tento súbor:

S najväčšou pravdepodobnosťou už obsahuje nejaké údaje. Väčšina tu nastavených hodnôt sú možnosti bash a nemajú nič spoločné s premennými prostredia. Premenné v tomto súbore sa nastavujú presne rovnakým spôsobom ako v príkazovom riadku:

export VARNAME=hodnota

Po zadaní všetkých potrebných premenných zatvorte súbor. Keď nabudúce spustíte reláciu shellu, tu nastavené premenné sa načítajú a odovzdajú do prostredia shellu. Ak chcete povedať aktuálnej relácii, aby prečítala daný súbor, zadajte:

zdroj ~/.bashrc

Ak chcete nastaviť premenné pre celý systém, pridajte ich do /etc/profile, /etc/bash.bashrc alebo /etc/environment.

Výsledky

Premenné prostredia a prostredia sú vždy prítomné vo všetkých reláciách prostredia, takže vedieť, ako s nimi pracovať, je obzvlášť užitočné. Môžu sa použiť na odovzdanie konfigurácií rodičovského procesu podriadeným procesom, ako aj na konfiguráciu nastavení mimo súborov.

To poskytuje v určitých situáciách množstvo výhod. Napríklad niektoré mechanizmy nasadenia sa spoliehajú na premenné prostredia na konfiguráciu autentifikačných informácií. Je to výhodné, pretože také dôležité údaje nebudú uložené v žiadnom súbore, čo znamená, že budú spoľahlivo chránené pred cudzími osobami.

Existuje mnoho ďalších bežnejších situácií, v ktorých možno budete musieť prečítať premenné alebo zmeniť systémové prostredie. Nástroje a techniky opísané v tejto príručke poskytujú vynikajúci základ pre rozvoj vašich zručností pri práci s premennými a ich správnom používaní.

Značky: ,

Premenné prostredia v Linuxe sú špeciálne premenné definované shellom a používané programami za behu. Môžu byť definované systémom a používateľom. Premenné prostredia systému Linux sú definované systémom a používané programami na systémovej úrovni.

Napríklad príkaz PWD používa systémovú premennú na uchovanie predchádzajúceho pracovného adresára. Používateľské premenné prostredia nastavuje používateľ pre aktuálny shell, buď dočasne alebo natrvalo. Celý koncept pridávania a odstraňovania premenných shellu sa točí okolo viacerých súborov, príkazov a rôznych shellov.

Všeobecnejšie povedané, premenná prostredia môže mať tri typy:

1. Lokálne premenné prostredia

Tieto premenné sú definované len pre aktuálnu reláciu. Po ukončení relácie budú natrvalo vymazané, či už ide o vzdialený prístup alebo emulátor terminálu. Nie sú uložené v žiadnych súboroch, ale sú vytvárané a odstraňované pomocou špeciálnych príkazov.

2. Vlastné premenné shellu

Tieto premenné shellu v systéme Linux sú definované pre konkrétneho používateľa a načítajú sa zakaždým, keď sa používateľ prihlási pomocou lokálneho terminálu alebo sa pripojí na diaľku. Takéto premenné sú zvyčajne uložené v konfiguračných súboroch: .bashrc, .bash_profile, .bash_login, .profile alebo iných súboroch umiestnených v užívateľskom adresári.

3. Systémové premenné prostredia

Tieto premenné sú dostupné v celom systéme pre všetkých používateľov. Načítavajú sa pri štarte systému zo systémových konfiguračných súborov: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

Konfiguračné súbory premenných prostredia Linux

Tu sa rýchlo pozrieme na rôzne konfiguračné súbory uvedené vyššie, ktoré sa používajú na konfiguráciu premenných prostredia pre celý systém alebo konkrétneho používateľa.

.bashrc

Toto je súbor premenných špecifických pre používateľa. Načítava sa vždy, keď používateľ vytvorí reláciu terminálu, to znamená, že inými slovami otvorí nový terminál. Všetky premenné prostredia vytvorené v tomto súbore sa prejavia pri každom spustení novej relácie terminálu.

.bash_profile

Tieto premenné sa prejavia vždy, keď sa používateľ pripojí vzdialene cez SSH. Ak tento súbor chýba, systém bude hľadať .bash_login alebo .profile.

/etc/environment

Tento súbor slúži na vytváranie, úpravu a odstraňovanie akýchkoľvek premenných prostredia na systémovej úrovni. Premenné prostredia vytvorené v tomto súbore sú dostupné pre celý systém, pre každého používateľa a dokonca aj pri vzdialenom pripojení.

/etc/bash.bashrc

Systém bashrc. Tento súbor sa spustí pre každého používateľa vždy, keď vytvorí novú reláciu terminálu. Toto funguje len pre lokálnych používateľov, pri pripojení cez internet takéto premenné nebudú viditeľné.

/etc/profile

Profil systémového súboru. Všetky premenné z tohto súboru sú dostupné každému používateľovi v systéme, len ak je prihlásený vzdialene. Nebudú však dostupné pri vytváraní lokálnej terminálovej relácie, teda ak terminál jednoducho otvoríte.

Všetky premenné prostredia Linux vytvorené pomocou týchto súborov možno jednoducho odstrániť ich odstránením. Až po každej zmene sa musíte buď odhlásiť a znova prihlásiť, alebo spustiť tento príkaz:

zdrojový názov súboru

Pridanie premenných používateľského a systémového prostredia v systéme Linux

Teraz, keď poznáte trochu teórie, prejdime k praxi. Lokálne premenné prostredia v systéme Linux je možné vytvoriť pomocou nasledujúcich príkazov:

var=hodnota
$ export var=hodnota

Tieto premenné budú dostupné len pre aktuálnu reláciu terminálu.

Existuje niekoľko príkazov, ktoré môžete použiť na odstránenie premenných prostredia:

1. Pomocou env

V predvolenom nastavení môžete použiť env na zobrazenie všetkých nastavených premenných prostredia. Ale s voľbou -i vám umožňuje dočasne odstrániť všetky premenné shellu a vykonať príkaz bez premenných.

príkaz env –i

Var je akákoľvek premenná, ktorú chcete odovzdať tomuto príkazu.

Tento príkaz spustí shell bez akýchkoľvek premenných prostredia:

Po spustení takéhoto prostredia nebudú dostupné žiadne premenné, no po ukončení sa všetko vráti na svoje miesto.

2. Pomocou deaktivácie

Toto je ďalší spôsob, ako odstrániť premenné prostredia Linuxu. Zrušiť nastavenie odstráni premennú podľa názvu až do konca aktuálnej relácie:

nenastavený názov_premennej

3. Nastavte hodnotu premennej na ""

Toto je najjednoduchší spôsob odstránenia premenných prostredia v Linuxe; nastavením premennej na prázdnu ju odstránite pre zvyšok aktuálnej relácie.

Poznámka: Pomocou týchto metód môžete zmeniť hodnoty systémových alebo používateľských premenných, ale budú relevantné iba pre aktuálnu reláciu.

Vytváranie premenných používateľského a systémového prostredia

V tejto časti sa pozrieme na to, ako nastaviť a odstrániť systémové a používateľské premenné nielen pre aktuálnu reláciu, ale aby efekt pretrvával aj po reštarte.

1. Nastavte a odstráňte lokálne premenné v Linuxe

Vytvorme lokálnu premennú VAR a nastavme ju na ľubovoľnú hodnotu, potom ju zrušme a uistite sa, že je vymazaná:

VAR1="Strata"
$ echo $ VAR1
$nenastavené VAR1
$ echo $ VAR1

Ďalším spôsobom vytvorenia premennej je príkaz export. Odstránime ho priradením prázdnej hodnoty:

export VAR="Strata"
$ echo $VAR
$VAR=
$ echo $VAR

Teraz vytvoríme premennú VAR2 a priradíme jej hodnotu. A potom dočasne odstráňte všetky lokálne premenné spustením env -i. Spustí shell bez akýchkoľvek premenných. Po zadaní exit budú všetky premenné obnovené.

VAR2="Strata"
$ echo $ VAR2
$ env -i bash
$ echo $ VAR2

Nastavenie a odstránenie používateľských premenných

Upravte súbor .bashrc vo svojom domovskom adresári pridaním príkazu export na export požadovanej premennej. Potom spustite príkaz source na použitie zmien. Vytvorme si napríklad premennú CD:

Pridajte tento riadok (o, potom vložte, potom Esc a :wq):

export CD="Toto je stratený domov"

Teraz zostáva aktualizovať konfiguráciu:

zdroj.bashrc
$echo $CD

Ak chcete túto premennú odstrániť, jednoducho ju odstráňte z .bashrc.

Teraz pridajme premennú prostredia pomocou .bash_profile. Táto premenná, ako už viete, bude dostupná iba počas vzdialeného prihlásenia:

vi .bash_profile

Pridajte riadok:

export VAR2="Toto je stratený domov"

A spustením týchto príkazov použite zmeny a skontrolujte, či bola premenná pridaná:

source.bash_profile
$ echo $ VAR2

Premenná nie je k dispozícii, pretože ste vytvorili reláciu lokálneho terminálu, teraz sa pripojte cez ssh:

ssh user@localhost
$ echo $ VAR2

Túto premennú prostredia môžete vymazať rovnakým spôsobom ako v predchádzajúcom prípade vymazaním zo súboru.

komentár: Tieto premenné sú vždy dostupné, ale nie pre všetkých používateľov.

Nastavenie a odstránenie systémových premenných prostredia

Vytvorme premennú dostupnú všetkým používateľom vo všetkých terminálových reláciách okrem vzdialených tak, že ju pridáme do /etc/bash.profile:

vi /etc/bash.profile

export VAR="Toto je premenná pre celý systém"

Potom aktualizujeme:

zdroj /etc/bash.bashrc

Teraz je táto premenná dostupná pre všetkých používateľov vo všetkých termináloch:

echo $VAR
$sudo su
$ echo $VAR
$su -
$ echo $VAR

Ak chcete sprístupniť premennú prostredia všetkým používateľom, ktorí sa k tomuto počítaču pripájajú vzdialene, upravte súbor /etc/profile:

export VAR1="Toto je celosystémová premenná len pre vzdialené relácie"

Aktualizujte konfiguráciu a skontrolujte dostupnosť premennej, bude dostupná iba na diaľku:

zdroj /etc/profile
$ echo $ VAR1

Ak potrebujete v Linuxe pridať premennú prostredia, aby bola prístupná vzdialene aj pre lokálne relácie, exportujte ju do /etc/environment:

vi /etc/environment

export VAR12="Som dostupný všade"

Kontrolujeme:

zdroj /etc/environment
$ echo $ VAR12
$sudo su
$ echo $ VAR12
$ výstup
$ssh localhost
$ echo $ VAR12

2.2. Premenné prostredia

Operačný systém podporuje špeciálny typ prostriedku tzv Premenné prostredia (premenné prostredia). Tieto premenné sú pár NAME – VALUE . Názov môže začínať písmenom a pozostávať z písmen, číslic a podčiarkovníkov.

Ak chcete nahradiť hodnotu premennej na príkazovom riadku, pred názov premennej uveďte znak $:

$ echo $USER hosť

Ak premenná nie je nastavená, vráti sa prázdny reťazec.

Ak chcete nastaviť hodnotu premennej, použite operátor priradenia (v prípade shellov podobných Bourne):

$TEST=test

alebo zabudovaný operátor množiny (v prípade podobných C):

$ set TEST=test

Príkaz set bez argumentov vypíše hodnoty všetkých premenných nastavených v prostredí:

$ set COLUMNS=197 CVS_RSH=ssh DIRSTACK=() EUID=1000 GROUPS=() G_BROKEN_FILENAMES=1 HISTFILE=/domov/hosť/.bash_history HISTFILESIZE=1000 HISTSIZE=1000 HOME=/home8HOSTTYPE6 HOME=/domov/hostiteľ6HOST8 =$" \t\n" INPUTRC=/etc/inputrc KDEDIR=/usr KDEDIRS=/home/guest/.local/ KDE_IS_PRELINKED=1 KDE_NO_IPV6=1 LANG=ru_RU.UTF-8 LESSOPEN="|/usr/bin/ lesspipe.sh %s" LINES=65 LOGNAME=hosť ....

Premenné môžu byť lokálne pre daný proces alebo globálne pre reláciu. Lokálne hodnoty premenných môžete nastaviť tak, že ich predradíte volaním príkazov:

$ TEST=test1 sh -c "echo $TEST" test1

Obsah množiny premenných pre reláciu môžete vyhodnotiť volaním vstavaného príkazu tlmočníka env v prípade interpretov podobných Bourne (sh, ksh, bash, zsh, pdksh...) a printenv v prípade prekladačov klonov C-Shell (csh, tcsh...):

$ env HOSTNAME=myhost TERM=xterm SHELL=/bin/bash HISTSIZE=1000 KDE_NO_IPV6=1 SSH_CLIENT=172.16.0.9 50487 22 QTDIR=/usr/lib/qt-3.3 QTINC=/usr.3SH/qt =/dev/pts/6 USER=hosť MOZILLA_CERTIFICATE_FOLDER=/home/hosť/.evolution/ KDEDIR=/usr MAIL=/var/spool/mail/hosť PATH=/usr/games:/usr/local/bin:/bin :/usr/bin:/home/hosť/bin INPUTRC=/etc/inputrc PWD=/home/hosť KDE_IS_PRELINKED=1 LANG=ru_RU.UTF-8 KDEDIRS=/home/hosť/.local/ SSH_ASKPASS=/usr/libexec /openssh/gnome-ssh-askpass SHLVL=1 HOME=/home/hosť LOGNAME=guest QTLIB=/usr/lib/qt-3.3/lib CVS_RSH=ssh SSH_CONNECTION=172.16.0.9 50487 172.16.2.9 /bin/lesspipe.sh %s G_BROKEN_FILENAMES=1 _=/bin/env

Sady príkazov Shell možno skompilovať do príkazových súborov nazývaných skripty, kde prvý riadok v špeciálnom type komentára určuje interpreter príkazov na vykonanie tejto sady. Vytvorte si napríklad súbor v textovom editore s názvom test s nasledujúcim obsahom:

#!/bin/sh echo TEST premenná: echo $TEST

Tento program vypíše na štandardný výstup textovú správu "TEST premenná: " a hodnotu premennej TEST, ak je špecifikovaná. Môžete ho spustiť z príkazového riadku tak, že ho odošlete ako parameter interpreteru príkazov:

$sh test TEST premenná:

Premennú môžete urobiť globálnou pomocou príkazu export (Bourne) alebo setenv (C-SHell):

$ export TEST=test1 $ sh test TEST premenná: test1

Lokálne hodnoty premenných na spustenie daného programu môžete nastaviť tak, že im predpíšete príkazy:

$ TEST=test2 sh test TEST premenná: test2

Odstránenie premenných prostredia sa vykonáva pomocou príkazu unset.

Koncept parametra v shell bash podobný konceptu premennej v konvenčných programovacích jazykoch. Názov parametra (alebo identifikátor) môže byť slovo pozostávajúce z abecedných znakov, čísel a podčiarkovníkov (iba prvý znak slova nemôže byť číslo), číslo alebo jeden z nasledujúcich špeciálnych znakov: * , @ , # , ? , - (pomlčka), $ , ! , 0 , _ (podčiarknutie).

O parametri sa hovorí, že je nastavený alebo nastavený, ak je mu priradená hodnota. Hodnota môže byť aj prázdny reťazec. Ak chcete zobraziť hodnotu parametra, použite symbol $ pred jeho menom. Áno, tím

$ echo meno

zobrazí slovo na obrazovke názov, a tím

$echo $name

vráti hodnotu premennej názvu (samozrejme, ak je nastavená).

5.6.1 Rôzne parametre

Parametre sú rozdelené do troch tried: polohové parametre, špeciálne parametre(názvy ktorých sú práve uvedené špeciálne znaky) a shell premenné.

mená (identifikátory) polohové parametre pozostávajú z jednej alebo viacerých číslic (nie jednej nuly). Hodnoty pozičných parametrov sú argumenty, ktoré boli zadané pri spustení shellu (prvý argument je hodnota pozičného parametra 1 atď.). Pomocou vstavaného príkazu môžete zmeniť hodnotu pozičného parametra nastaviť. Hodnoty týchto parametrov sa tiež menia, keď shell vykonáva jednu z funkcií (o tom sa bude diskutovať nižšie, v oddiele 5.8).

Špeciálne parametre sú vzory, ktorých nahradenie (substitúcia) sa uskutočňuje nasledovne.

Tabuľka 5.2.Špeciálne parametre.

Parameter

Pravidlá striedania

Nahradené pozičnými parametrami, počnúc prvým. Ak sa nahradenie uskutoční v úvodzovkách, potom sa tento parameter nahradí jedným slovom vytvoreným zo všetkých pozičných parametrov oddelených prvým znakom špeciálnej premennej IFS (diskutované nižšie). To znamená, že ``$*"" je ekvivalentné ``$1c$2c...", kde c je prvý znak v hodnote premennej IFS. Ak je IFS nastavené na prázdne alebo nemá nastavenú žiadnu hodnotu, parametre sú oddelené medzerami

Nahradené pozičnými parametrami, počnúc prvým. Ak sa nahradenie uskutoční v dvojitých úvodzovkách, každý parameter sa nahradí samostatným slovom. Teda `` $@"" je ekvivalentné ""$1"" ""$2"" ... Ak neexistujú žiadne pozičné parametre, potom sa nepriradí žiadna hodnota (parameter @ sa jednoducho odstráni)

Nahradené desatinnou hodnotou počtu pozičných parametrov

Nahradené stavom ukončenia posledného spusteného programového kanála v popredí

(pomlčka)

Nahradené aktuálnou sadou hodnôt príznakov nastavených pomocou vstavaného príkazu nastaviť alebo pri spustení samotnej škrupiny

Nahradené identifikátorom procesu (P ID) shellu

Nahradené identifikátorom procesu (P ID) naposledy vykonaného príkazu na pozadí (asynchrónne vykonaného)

Nahradené názvom shellu alebo skriptu, ktorý sa má spustiť. Ak bash spustí na spustenie dávkového súboru, $0 je názov súboru. V opačnom prípade sa táto hodnota rovná celej ceste k shellu

(zdôrazniť)

Nahradené posledným argumentom predchádzajúceho vykonaného príkazu (ak ide o parameter alebo premennú, nahradí sa jej hodnota)

Špeciálne parametre uvedené v tabuľke vyššie sa líšia v tom, že je možné na ne len odkazovať; Nemôžete im priradiť hodnoty.

Variabilné z pohľadu shellu ide o parameter označovaný menom. Hodnoty sa priraďujú premenným pomocou nasledujúceho operátora:

$name=hodnota

Kde názov je názov premennej a hodnotu— hodnota, ktorá je mu priradená (môže byť prázdny reťazec). Názov premennej môže pozostávať iba z číslic a písmen a nemôže začínať číslom. Hodnota môže byť ľubovoľný text. Ak hodnota obsahuje špeciálne znaky, musí byť uzavretá v úvodzovkách. Priradená hodnota tieto úvodzovky samozrejme neobsahuje. Ak je premenná nastavená, možno ju odstrániť pomocou vstavaného príkazu shellu odstaviť.

Množina všetkých nastavených premenných shellu s ich priradenými hodnotami sa nazýva prostredie alebo prostredie shellu. Môžete ho zobraziť pomocou príkazu nastaviť bez parametrov (možno by ste mali zorganizovať potrubie "nastaviť | menej"). Výstup tohto príkazu uvádza zoznam všetkých premenných prostredia v abecednom poradí. Ak chcete zobraziť hodnotu jednej konkrétnej premennej, môžete namiesto príkazu nastaviť(vo výstupe ktorého môžete stále hľadať a hľadať požadovanú premennú) môžete použiť príkaz

$echo $name

(v tomto prípade však musíte poznať názov premennej, o ktorú máte záujem).

Medzi premenné, ktoré uvidíte vo výstupe príkazu, patria nastaviť, existuje niekoľko veľmi zaujímavých premenných. Venujte pozornosť napríklad premennej RANDOM. Ak príkaz spustíte niekoľkokrát za sebou

$ echo $RANDOM

zakaždým získate novú hodnotu. Faktom je, že táto premenná vracia náhodné celé číslo z intervalu 0 - 32 768.

5.6.2 Výzvy shellu

Jedna z veľmi dôležitých premenných má meno PS1. Táto premenná určuje typ pozvánky bash Výstupy, keď čaká na ďalší príkaz zadaný používateľom. Štandardne je táto premenná nastavená na "\s-\v\$ ". Vlastne v bash Existujú štyri pozvánky, ktoré sa používajú v rôznych situáciách. Variabilné PS1 určuje typ výzvy, ktorá sa zobrazí, keď shell čaká na zadanie príkazu. Sekundárna výzva určená premennou PS2, sa objaví, keď shell čaká, kým používateľ zadá nejaké ďalšie údaje potrebné na pokračovanie spusteného príkazu alebo programu. Predvolená premenná PS2 má význam" >" . Túto výzvu ste už možno videli pri spustení príkazu kat na zadanie údajov z klávesnice do súboru. Ďalším príkladom je príkaz ftp, po spustení ktorého má pozvánka aj túto podobu.

Variabilná výzva PS3, používaný v príkaze vyberte. Variabilná výzva PS4, sa vytlačí pred každým príkazom v danom čase bash sleduje priebeh realizácie. Predvolená hodnota je " + ".

Ak si to želáte, môžete zmeniť typ premenných PS1 A PS2. V tomto prípade môžete použiť ľubovoľné symboly zadané z klávesnice, ako aj určitý počet špeciálnych znakov, ktoré sa pri generovaní reťazca výzvy dekódujú v súlade s tabuľkou. 5.3 (uvádzame napríklad len niektoré z nich; úplný zoznam nájdete na manuálovej stránke pomôcky bash) .

Tabuľka 5.3.Špeciálne znaky na generovanie pozvánky

Symbol

Jeho význam

Pípnutie (ASCII kód ​​07)

Dátum vo formáte „Deň, mesiac, deň“, napríklad stred, október, 17.

Názov hostiteľa po prvú bodku

Celý názov hostiteľa

Aktuálny čas v 24-hodinovom formáte: HH:MM:SS (hodiny:minúty:sekundy)

Aktuálny čas v 12-hodinovom formáte: HH:MM:SS

Aktuálny čas v 12-hodinovom formáte am/pm

Meno používateľa, ktorý spustil shell

Celý názov aktuálneho pracovného adresára (začínajúc od root)

Aktuálny pracovný adresár (nie je zadaná cesta)

Symbol #, ak shell beží ako superužívateľ, a symbol $ , ak shell spúšťa bežný používateľ.

\nnn

Znak s osmičkovým kódom nnn

Nový riadok (riadkový posuv)

Názov škrupiny

Aktuálne číslo tímu

Opačná lomka

Začiatok postupnosti netlačiteľných znakov (tento znak možno použiť na zahrnutie postupnosti riadiacich znakov terminálu do textu popisku)

Koniec sekvencie netlačiteľných znakov

Sériové číslo tohto príkazu v histórii príkazov

Aktuálne číslo príkazu (sériové číslo príkazu vykonávaného v rámci aktuálnej relácie) sa môže líšiť od čísla tohto príkazu v zozname histórie príkazov, pretože zoznam obsahuje príkazy, ktoré boli uložené v súbore histórie príkazov.

Po prečítaní hodnoty premennej definujúcej nápovedu shellom, možno v nej vykonať substitúcie podľa pravidiel pre rozširovanie parametrov, substitúcie v názvoch príkazov a aritmetických výrazoch a delení slov. O týchto pravidlách sa bude diskutovať nižšie v časti. 5.7.

Napríklad po vykonaní príkazu (keďže v reťazci je medzera, úvodzovky sú povinné)

# PS1="[\u@\h \W]\$"

štandardná výzva zobrazí hranatú zátvorku, používateľské meno, symbol @ , názov počítača, medzera, názov aktuálneho adresára (bez cesty), hranatá zátvorka a symbol $ (ak v shelli beží jednoduchý používateľ) resp # (ak shell beží ako root).

5.6.3 Premenná PATH

Ďalšia veľmi dôležitá premenná má názov PATH. Špecifikuje zoznam ciest k adresárom, v ktorých bash vyhľadáva súbory (najmä súbory s príkazmi) v prípadoch, keď nie je na príkazovom riadku zadaná úplná cesta k súboru. Jednotlivé adresáre v tomto zozname sú oddelené dvojbodkami. Predvolená premenná PATH zahŕňa adresáre /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin, t.j. vyzerá to takto:

/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:

Ak chcete pridať adresár do tohto zoznamu, musíte spustiť nasledujúci príkaz:

# PATH=$PATH:nová_cesta.

Pri vyhľadávaní shell prehľadáva adresáre v poradí, v akom sú uvedené v premennej PATH.

Všimnite si, že do tohto zoznamu môžete zahrnúť aktuálny adresár pridaním bodky do premennej PATH. Toto sa však neodporúča z bezpečnostných dôvodov: útočník by mohol vložiť príkaz do verejného adresára, ktorého názov sa zhoduje s jedným z príkazov, ktoré často vykonáva superužívateľ, ale vykoná úplne iné akcie (najmä ak je aktuálny adresár na začiatku zoznam vyhľadávacích ciest).

5.6.4 Premenná IFS

Táto premenná určuje interný oddeľovač polí, ktorý sa používa pri operácii rozdeľovania slov pri konverziách príkazového riadka, ktoré vykonáva shell pred spustením príkazového riadka. Predvolená hodnota tejto premennej je "<Пробел><Символ_ новой_ строки>".

5.6.5 Aktuálny a domovský adresár

Názov aktuálneho adresára je uložený v premennej prostredia (s názvom PWD) a hodnota tejto premennej sa mení pri každom spustení programu CD(a tiež pri zmene aktuálneho adresára iným spôsobom, napríklad cez Midnight Commander).

Podobne je v premennej HOME uložené celé meno (a cesta) domovského adresára používateľa, ktorý proces spustil.

5.6.6 Tím export

Keď shell spustí program alebo príkaz, odovzdá im niektoré premenné prostredia. Aby mohla byť premenná prostredia odovzdaná procesu spúšťanému z shellu, musí byť nastavená pomocou špeciálneho príkazu export, t.j

$name=hodnota

treba si to zapísať

$export name=value

V tomto prípade budú mať všetky programy spustené z shellu (vrátane sekundárnych inštancií samotného shellu) prístup k takto definovaným premenným, t.j. môžu volať svoje hodnoty menom.

V. Kostromin (kos at rus-linux dot net) - 5.6. Parametre a premenné. Prostredie škrupiny