Citirea și setarea mediului și a variabilelor shell pe serverul linux

Plasarea serverelor în centre de date fiabile din Europa. Deschideți serverul VPS / VDS bazat pe cloud pe SSD-uri rapide în 1 minut!

Cel mai bun Gazduire:
- protejează datele de accesul nedorit într-un centru de date european protejat






- va accepta plata cel puțin în taxe.
- vă va permite să vă distribuiți distribuția

- protecția împotriva atacurilor DDos
- copie de rezervă gratuită
- Uptime 99.9999%
- Centrul de date - TIER III
- furnizor - TIER I

Sprijinim în limba rusă 24/7/365 Lucrăm cu persoane juridice și persoane fizice. Acum aveți nevoie de 24 nuclee și 72 GB de memorie RAM. Vă rog!

Tarifele noastre avantajoase vor dovedi că nu ați știut încă ieftinul de găzduire!

Minute: selectați configurația, plătiți și CMS de pe VPS este gata.
Banii înapoi - 30 de zile!

Carduri bancare, e-valută, prin intermediul terminalelor Qiwi, Webmoney, PayPal, Novoplat etc.

Puneți o întrebare la sprijinul 24/7/365

Găsiți răspunsuri în baza noastră de date și cunoașteți recomandările

Ofertă de la 8host.com

Citirea și setarea mediului și a variabilelor shell pe serverul linux

În timp ce lucrează cu serverul, shell-ul compilează o cantitate mare de informații care determină comportamentul și accesul la resurse. Unii dintre acești parametri sunt în setările shell-ului, alții sunt definiți de intrarea utilizatorului.

O modalitate de a urmări aceste informații este de a folosi mediul înconjurător. Mediul este o zonă care conține proprietățile definitorii ale variabilelor sistemului pe care shell-ul le construiește de fiecare dată când începe sesiunea.

Cum funcționează mediul și variabilele sale

De fiecare dată când este activată o sesiune de shell, se începe un proces de colectare și compilare a informațiilor care ar trebui să fie disponibile pentru shell și procesele copilului său. Carcasa primește aceste date din multe fișiere și setări diferite ale sistemului.

În general, mediul oferă un instrument de transfer care colectează și stabilește setările necesare pentru procesul shell, care, la rândul său, le transmite proceselor copilului.

Mediul are forma unui șir care conține perechi de tip cheie-valoare. Mai multe valori sunt de obicei separate printr-un colon (:). Fiecare pereche, în general, arată astfel:

Dacă valoarea conține spații, trebuie să utilizați ghilimele duble:

KEY = "valoare cu spații"

În acest caz, cheia este variabilele unuia dintre cele două tipuri existente: variabilele de mediu sau shell-urile.

Variabilele de mediu sunt variabile care au fost definite pentru shell-ul curent și sunt moștenite de toate coajările sau procesele copilului. Variabilele de mediu sunt folosite pentru a transfera informații proceselor care rulează din shell.

Shell variabilele sunt variabile care sunt conținute exclusiv în shell-ul în care au fost instalate sau definite. Acestea sunt adesea utilizate pentru a monitoriza datele curente (de exemplu, directorul de lucru curent).

În mod tipic, aceste variabile sunt marcate cu majuscule. Acest lucru ajută utilizatorii să facă distincția între variabilele de mediu din alte contexte.

Ieșirea variabilelor shell și a mediului

Fiecare sesiune își urmărește variabilele de coajă și mediu. Puteți să le afișați în mai multe moduri.

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

Acesta este un exemplu tipic al ieșirii comenzilor printenv și env. Aceste comenzi diferă doar în câteva funcții individuale. De exemplu, printenv poate interoga valorile variabilelor individuale:

printenv SHELL
/ bin / bash

Comanda env vă permite să modificați mediul în care rulează programele, trecând un set de definiții variabile unei comenzi, cum ar fi:

env VAR1 = "blahblah" comanda_to_run command_options

Așa cum am menționat mai sus, procesele copilului mostenesc de obicei variabilele de mediu ale procesului părinte, ceea ce face posibilă schimbarea valorilor sau adăugarea de variabile suplimentare proceselor copilului.

După cum puteți vedea în ieșirea comenzii printenv, multe variabile de mediu sunt create utilizând fișiere și procese de sistem fără intervenția utilizatorului.

Pentru aceasta, folosiți comanda setată. Când este introdus fără parametri suplimentari, setul afișează o listă cu toate variabilele shell, variabilele de mediu, variabilele locale și funcțiile shell:

Ca regulă, această listă este destul de lungă. Pentru ao afișa într-un format mai convenabil, deschideți-l cu ajutorul unui pager:

Această listă conține o cantitate imensă de informații suplimentare care nu sunt necesare în acest moment (de exemplu, unele funcții de bash).

Pentru a "curăța" ieșirea, trebuie să executați comanda set în modul POSIX, care sări peste funcțiile shell. Acest lucru ar trebui făcut în sub-shell, pentru a nu schimba mediul actual:

(set -o posix; set)

Această acțiune va afișa toate variabilele și shell-urile de mediu.

Puteți compara, de asemenea, acest rezultat cu rezultatul comenzii / printenv env și să încerce să lista numai variabilele shell, dar această listă nu este perfect, deoarece aceste comenzi afișa informații în diferite moduri:

com-23 <(set -o posix; set | sort) <(env | sort)

Cel mai probabil, lista va conține mai multe variabile de mediu, deoarece comanda set imprimă valorile în ghilimele, iar comenzile printenv și env nu.

Astfel de variabile sunt folosite pentru tot felul de scopuri. Ele oferă o modalitate alternativă de a seta valori persistente pentru o sesiune între procese, eliminând necesitatea modificării fișierului.

Principalele variabile de mediu și shell

Unele variabile de mediu și cochilii deosebit de utile sunt folosite foarte des.

Mai jos este o listă a principalelor variabile de mediu:

  • SHELL. descrie o cochilie care interpretează comenzile introduse. În majoritatea cazurilor, bash este instalat în mod implicit, dar această valoare poate fi modificată dacă este necesar.
  • TERMEN. indică tipul de terminal emulat când începe shell-ul. În funcție de cerințele de funcționare, pot fi emulate diferite terminale hardware. De regulă, acest lucru nu trebuie să vă faceți griji.
  • USER. utilizator actual.
  • PWD. directorul curent de lucru.
  • OLDPWD. directorul de lucru anterior. Cochilia îl stochează în cazul executării comenzii cd -.
  • LS_COLORS. definește codurile de culoare care sunt utilizate pentru a colora ieșirea comenzii ls. Această ieșire ajută utilizatorul să citească rapid rezultatul comenzii (de exemplu, pentru a distinge rapid tipurile de fișiere).
  • MAIL. calea către cutia poștală curentă a utilizatorului.
  • PATH. Lista directoarelor accesate de sistem atunci când execută comenzi. Când utilizatorul pornește comanda, sistemul verifică aceste directoare în ordinea specificată în căutarea fișierului executabil.
  • LANG. limbajul curent și setările de localizare, inclusiv codificarea caracterelor.
  • HOME. director de domiciliu al utilizatorului curent.
  • _. ultima comandă executată.






După citirea listei variabilelor de mediu, examinați lista variabilelor shell:

  • BASHOPTS. lista de opțiuni utilizate în bash. Acest lucru poate fi folosit pentru a verifica dacă mediul funcționează corect.
  • BASH_VERSION. Versiunea de funcționare a bash este în formă ușor de citit de om.
  • BASH_VERSINFO. versiunea bash în format citibil în mașină.
  • Coloane. Specifică lățimea ieșirii în coloane.
  • DIRSTACK. Șirul de directoare disponibile comenzilor pushd și popd.
  • HISTFILESIZE. Numărul maxim de linii conținute în fișierul istoric de comandă.
  • HISTSIZE. Numărul de comenzi de reținut în lista de istoric.
  • HOSTNAME. numele curent al gazdei.
  • IFS: delimiter intern al câmpurilor de intrare pe linia de comandă. Implicit este un spațiu.
  • PS1. Specifică linia de prompt primar - tipul liniei de comandă când începe sesiunea shell. Variabila PS2 stabilește șirul de invitație secundară dacă comanda durează câteva rânduri.
  • SHELLOPTS. care pot fi setate utilizând setul.
  • UID. identificatorul unic al utilizatorului curent.

Setarea variabilelor shell și a mediului

Mai jos sunt câteva exemple care demonstrează diferența dintre variabilele shell și mediul înconjurător și explică sintaxa pentru setarea acestor variabile.

Crearea variabilelor shell

În primul rând, trebuie să setați variabilele shell ale sesiunii curente. Acest lucru se face foarte simplu, pentru aceasta trebuie doar să specificați un nume și o valoare. După cum am menționat deja, majusculele sunt folosite pentru a scrie numele unor astfel de variabile.

Citatele sunt utilizate în acest exemplu, deoarece valoarea conține spații. Mai mult decât atât, există necesitatea de a utiliza ghilimele simple ca un semn de exclamare este un caracter special în bash-shell, care se referă la istoricul comenzilor, în cazul în care nu este evitată sau nu este închisă în ghilimele simple.

Deci, variabila shell rezultată este valabilă în sesiunea curentă, dar nu este trecută proceselor copilului său.

Pentru a vedea acest lucru, folosiți comanda grep pentru rezultatul comenzii set:

set | grep TEST_VAR
TEST_VAR = 'Bună ziua!'

Asigurați-vă că această variabilă nu este o variabilă de mediu, de asemenea puteți rula grep pe rezultatul comenzii printenv:

printenv | grep TEST_VAR

Această acțiune nu va produce niciun rezultat.

Puteți utiliza aceasta pentru a deschide valoarea oricărei variabile de shell sau a mediului.

echo $ TEST_VAR
Bună ziua!

După cum puteți vedea, pentru a utiliza valoarea unei variabile, trebuie să utilizați caracterul $.

Din nou, variabila rezultată nu trebuie transmisă vreunui proces copil. Pentru a testa acest lucru, în cadrul shell-ului curent, extindeți noul bash-shell:

bash
echo $ TEST_VAR

Dacă încercați să deschideți conținutul unei variabile prin extinderea coajății copil, nimic nu va fi afișat. Aceasta înseamnă că totul funcționează corect.

Pentru a reveni la shell-ul sursă, tastați exit:

Crearea de variabile de mediu

Încercați acum să transformați variabila shell într-o variabilă de mediu. Aceasta se face exportând o variabilă. Echipa de export are un nume adecvat.

printenv | grep TEST_VAR
TEST_VAR = Bună ziua!

Acum, această variabilă este listată în această listă. De asemenea, puteți re-implementa shell-ul pentru copii:

bash
echo $ TEST_VAR
Bună ziua!

Excelent! Capacul copil are o variabilă a coajă-sursă. Încercați să exportați altă variabilă înainte de a părăsi shell-ul copilului

export NEW_VAR = "Testarea exportului"

Verificați dacă variabila a fost exportată:

printenv | grep NEW_VAR
NEW_VAR = Testarea exportului

Acum du-te înapoi la shell-ul original:

Verificați dacă această variabilă poate fi deschisă:

Rezultatul nu este returnat

Acest lucru se datorează faptului că variabilele de mediu sunt transferate numai proceselor copilului. Nu există un mod integrat de setare a variabilelor de mediu ale coajă-părinte. În cele mai multe cazuri, acest lucru împiedică programele să afecteze mediul de operare din care au fost lansate.

Variabila NEW_VAR a fost setată ca variabilă de mediu a carcasei copilului. Această variabilă este valabilă pentru această coajă și pentru cojile și procesele sale pentru copii. După ce utilizatorul sa întors la shell-ul sursei, acest mediu a fost distrus.

Deplasați și resetați variabilele

Variabila TEST_VAR este încă o variabilă de mediu. Pentru a face din nou o variabilă shell, tastați:

export -n TEST_VAR

Acum această variabilă nu mai este o variabilă de mediu:

printenv | grep TEST_VAR

Aceasta este din nou variabila shell:

set | grep TEST_VAR
TEST_VAR = 'Bună ziua!'

Pentru a reseta complet o variabilă, fie ea o variabilă de mediu sau o coajă, utilizați comanda unset:

Asigurați-vă că nu există o astfel de variabilă:

Rezultatul nu a fost emis, deoarece variabila a fost resetată.

Setarea automată a variabilelor de mediu

După cum am menționat deja, multe programe folosesc variabile de mediu pentru a determina cum să le gestioneze. Setarea variabilelor necesare ori de câte ori este creată o nouă coajă este suficient de incomodă. În plus, multe variabile sunt setate imediat după conectare. Cum să setați automat variabilele?

Acesta este un pic mai complicat decât pare la început, deoarece shell-ul bash citește o mulțime de fișiere de configurare.

Tipuri de sesiuni de coajă

Cache-ul bash citește diferite fișiere de configurare, în funcție de modul în care a început sesiunea. Primele două tipuri de sesiuni care definesc coajă sunt începutul și copilul.

De asemenea, sesiunile de shell sunt interactive și non-interactive.

O sesiune de shell interactivă este o sesiune legată de un terminal. O sesiune de shell non-interactivă este o sesiune care nu este legată de un terminal.

Deci, sesiunile de coajă sunt clasificate în funcție de astfel de aspecte: începător-copil, interactiv-non-interactiv.

O sesiune tipică deschisă cu SSH este, de obicei, o sesiune de pornire interactivă. Un script care rulează prin linia de comandă lucrează, de obicei, într-o sesiune de tip non-interactivă. Terminalele sunt diferite combinații ale acestor două proprietăți.

Deci, mai întâi sesiunea de pornire primește configurația din fișierul / etc / profile. Apoi caută fișierul de configurare a shell-ului de pornire din directorul de domiciliu al utilizatorului pentru a obține configurațiile definite de utilizator.

Această sesiune citește fișiere

/.profile și nu citesc restul fișierelor.

Sesiunea copil, la rândul său, citește /etc/baash.bashrc, apoi fișierul utilizatorului

/.bash.rc pentru a implementa mediul.

Shell-urile non-interactive au citit variabila de mediu BASH_ENV și fișierul specificat pentru a crea un mediu nou.

Cum să setați variabilele de mediu

După cum puteți vedea, configurațiile sunt împrăștiate între diferite fișiere.

Acest lucru face ca sistemul să fie foarte flexibil, care este util în anumite situații, când trebuie să setați diferiți parametri pentru cochilii de pornire și copil. Cu toate acestea, pentru aceste cochilii, de regulă, sunt utilizate aceleași setări.

Din fericire, majoritatea distribuțiilor Linux specifică fișierul de configurare pentru shell-ul copil ca sursă a configurațiilor shell-ului. Aceasta înseamnă că puteți defini variabilele de mediu ale ambelor sesiuni în fișierele de configurare ale carcasei copilului.

În mod obișnuit, ambele cochilii utilizează variabile de mediu definite de utilizator. Aceasta înseamnă că puteți specifica aceste variabile într-un fișier

Deschideți acest fișier:

Cel mai probabil, acesta conține deja unele date. Cele mai multe dintre valorile stabilite aici sunt parametrii bash care nu sunt corelați cu variabilele de mediu. Variabilele din acest fișier sunt setate exact așa cum se află pe linia de comandă:

Pentru a specifica variabilele la nivel de sistem, introduceți-le în / etc / profile, /etc/bash.bashrc sau / etc / environment.

Shell și variabilele de mediu sunt întotdeauna prezente în toate sesiunile de coajă, astfel încât capacitatea de a lucra cu ele este deosebit de utilă. Cu ajutorul lor, puteți trece la copilul procesează configurația procesului părinte și, de asemenea, configura setările în afara fișierelor.

În anumite situații, acest lucru oferă o serie de avantaje. De exemplu, unele mecanisme de implementare se bazează pe variabilele de mediu pentru a configura datele de autentificare. Acest lucru este convenabil, deoarece astfel de date importante nu vor fi stocate în nici un fișier și, prin urmare, - vor fi protejate în mod fiabil de către străini.

Există multe alte situații mai frecvente în care este posibil să fie nevoie să citiți variabilele sau să modificați mediul de sistem. Instrumentele și metodele descrise în acest manual reprezintă o bază excelentă pentru dezvoltarea abilităților de lucru cu variabilele și utilizarea corectă a acestora.







Articole similare

Trimiteți-le prietenilor: