Înțelegerea și învățarea scripturilor de bază Shell și depanarea sistemului de fișiere Linux
Fundația Linux a lansat LFCS certificare (Linux Foundation Certified Sysadmin), o inițiativă nouă, al cărei scop este de a permite persoanelor de pretutindeni (și oriunde) să obțină certificarea în suport operațional de bază până la intermediar pentru sistemele Linux, care include sprijinirea sistemelor și serviciilor funcționale, împreună cu monitorizarea și analiza generală, plus luarea de decizii inteligente atunci când vine vorba de ridicarea problemelor la un sprijin superior echipe.
Linux Foundation Certified Sysadmin - Partea 10
Consultați următorul videoclip care vă ghidează o introducere în Programul de certificare Linux Foundation.
Acesta este ultimul articol (partea 10) din seria lungă de 10 tutoriale. În acest articol ne vom concentra pe scripturile shell de bază și pe depanarea sistemelor de fișiere Linux. Ambele subiecte sunt necesare pentru examenul de certificare LFCS.
Înțelegerea terminalelor și a carcaselor
Să clarificăm mai întâi câteva concepte.
Un shell este un program care preia comenzi și le dă sistemului de operare pentru a fi executat.
Un terminal este un program care ne permite ca utilizatori finali să interacționăm cu shell-ul. Un exemplu de terminal este terminalul GNOME, așa cum se arată în imaginea de mai jos.
Gnome Terminal
Când pornim pentru prima dată un shell, acesta prezintă un prompt de comandă (cunoscut și sub numele de linie de comandă), care ne spune că shell-ul este gata să înceapă să accepte comenzi de pe dispozitivul său standard de intrare, care este de obicei tastatură.
Poate doriți să consultați un alt articol din această serie (Utilizați Comanda pentru a crea, edita și manipula fișiere - Partea 1) pentru a revizui câteva comenzi utile.
Linux oferă o serie de opțiuni pentru shell-uri, următoarele fiind cele mai frecvente:
bash Shell
Bash înseamnă Bourne Again SHell și este shell-ul implicit al proiectului GNU. Incorporează caracteristici utile de la shell-ul Korn (ksh) și shell C (csh), oferind mai multe îmbunătățiri în același timp. Aceasta este shell-ul implicit utilizat de distribuțiile acoperite în certificarea LFCS și este shell-ul pe care îl vom folosi în acest tutorial.
Sh Shell
Bourne SHell este cel mai vechi shell și, prin urmare, a fost shell implicit al multor sisteme de operare de tip UNIX de mulți ani.
ksh Shell
Korn SHell este un shell Unix care a fost dezvoltat de David Korn la Bell Labs la începutul anilor 1980. Este compatibil înapoi cu shell-ul Bourne și include multe caracteristici ale shell-ului C.
Un script shell este nimic mai mult și nimic mai puțin decât un fișier text transformat într-un program executabil care combină comenzile care sunt executate de către shell unul după altul.
Script de bază Shell
După cum sa menționat mai devreme, un script shell se naște ca fișier text simplu. Astfel, pot fi create și editate folosind editorul de text preferat. Poate doriți să luați în considerare utilizarea vi / m (consultați Utilizarea Editorului vi - Partea 2 din această serie), care oferă evidențierea sintaxei pentru confortul dvs.
Tastați următoarea comandă pentru a crea un fișier numit myscript.sh și apăsați Enter.
# vim myscript.sh.
Prima linie a unui script shell trebuie să fie după cum urmează (cunoscută și sub numele de shebang).
#! / bin / bash.
Aceasta "spune”Sistemul de operare numele interpretului care ar trebui folosit pentru a rula textul care urmează.
Acum este timpul să adăugăm comenzile noastre. Putem clarifica scopul fiecărei comenzi sau întregul script, adăugând și comentarii. Rețineți că shell-ul ignoră acele linii care încep cu un semn de lire sterline # (comentarii explicative).
#! / bin / bash. ecou Aceasta este partea 10 din seria de 10 articole despre certificarea LFCS. ecou Astăzi este $ (dată +% Y-% m-% d)
Odată ce scriptul a fost scris și salvat, trebuie să-l executăm.
# chmod 755 myscript.sh.
Înainte de a rula scriptul nostru, trebuie să spunem câteva cuvinte despre $ PATH variabilă de mediu. Dacă alergăm,
ecou $ PATH.
din linia de comandă, vom vedea conținutul $ PATH: o listă separată de două puncte a directoarelor care sunt căutate când introducem numele unui program executabil. Se numește o variabilă de mediu, deoarece face parte din mediul shell - un set de informații care devine disponibil pentru shell și pentru procesele sale secundare atunci când shell-ul este pornit pentru prima dată.
Când tastăm o comandă și apăsăm Enter, shell-ul caută în toate directoarele listate în $ PATH variabilă și execută prima instanță găsită. Să vedem un exemplu,
variabile de mediu
Dacă există două fișiere executabile cu același nume, unul în /usr/local/bin și altul în /usr/bin, cel din primul director va fi executat mai întâi, în timp ce celălalt va fi ignorat.
Dacă nu am salvat scriptul într-unul din directoarele listate în $ PATH variabilă, trebuie să adăugăm ./ la numele fișierului pentru a-l executa. În caz contrar, îl putem rula exact așa cum am face cu o comandă obișnuită.
Ori de câte ori trebuie să specificați diferite direcții de acțiune care trebuie întreprinse într-un script shell, ca urmare a succesului sau eșecului unei comenzi, veți utiliza dacă construiți pentru a defini astfel de condiții. Sintaxa sa de bază este:
dacă CONDITION; apoi COMANDĂ; altfel ALTE-COMANDE fi.
Unde CONDIȚIE poate fi una dintre următoarele (doar cele mai frecvente condiții sunt citate aici) și se evaluează la adevărat atunci când:
[ -un fișier ] → fișierul există.
[fișier -d] → fișierul există și este un director.
[-f fișier] → fișierul există și este un fișier obișnuit.
[fișier -u] → fișierul există și bitul său SUID (set user ID) este setat.
[-g fișier] → fișierul există și bitul său SGID este setat.
[-k fișier] → fișierul există și bitul său lipicios este setat.
[-r fișier] → fișierul există și este lizibil.
[-s fișier]→ fișierul există și nu este gol.
[-w fișier]→ fișierul există și se poate scrie.
[-x fișier] este adevărat dacă fișierul există și este executabil.
[șir1 = șir2] → corzile sunt egale.
[șir1! = șir2] → șirurile nu sunt egale.
[int1 op int2] ar trebui să facă parte din lista precedentă, în timp ce elementele care urmează (de exemplu, -eq -> este adevărat dacă int1 este egal cu int2.) ar trebui să fie un „copii" lista de [ int1 op int2 ] unde op este unul dintre următorii operatori de comparație.
-eq -> este adevărat dacă int1 este egal cu int2.
-ne -> adevărat dacă int1 nu este egal cu int2.
-lt -> adevărat dacă int1 este mai mic decât int2.
-le -> adevărat dacă int1 este mai mic sau egal cu int2.
-gt -> adevărat dacă int1 este mai mare decât int2.
-ge -> adevărat dacă int1 este mai mare sau egal cu int2.
Pentru bucle
Această buclă permite executarea uneia sau mai multor comenzi pentru fiecare valoare dintr-o listă de valori. Sintaxa sa de bază este:
pentru articolul din SECVENȚĂ; faceți COMANDĂ; Terminat.
Unde articol este o variabilă generică care reprezintă fiecare valoare în SECVENŢĂ în timpul fiecărei iterații.
În timp ce Bucle
Această buclă permite executarea unei serii de comenzi repetitive atâta timp cât comanda de control se execută cu o stare de ieșire egală cu zero (cu succes). Sintaxa sa de bază este:
în timp ce EVALUATION_COMMAND; faceți EXECUTE_COMMANDS; Terminat.
Unde COMANDĂ_EVALUARE pot fi orice comenzi care pot ieși cu succes (0) sau eșec (altul decât 0) status, iar EXECUTE_COMMANDS pot fi orice construcție de program, script sau shell, inclusiv alte bucle imbricate.
Punând totul împreună
Vom demonstra utilizarea construcției if și a buclei for cu următorul exemplu.
Determinarea dacă un serviciu rulează într-o distribuție bazată pe systemd
Să creăm un fișier cu o listă de servicii pe care dorim să le monitorizăm dintr-o privire.
#! / bin / bash # Acest script repetă o listă de servicii și. # este utilizat pentru a determina dacă rulează sau nu. pentru service în $ (cat myservices.txt); face systemctl status $ service | grep --quiet "rulează" dacă [$? -eq 0]; atunci echo $ service "este [ACTIV]" altfel echo $ service "este [INACTIV sau NU ESTE INSTALAT]" fi. Terminat.
Script de monitorizare a serviciului Linux
Să explicăm cum funcționează scenariul.
1). Bucla for citește fișierul myservices.txt înregistrați câte un element din LIST odată. Acest element unic este notat de variabila generică numită serviciu. LISTA este populată cu ieșirea de,
# pisică myservices.txt.
2). Comanda de mai sus este inclusă între paranteze și precedată de un semn dolar pentru a indica faptul că ar trebui evaluată pentru a completa LISTA pe care o vom itera.
3). Pentru fiecare element din LIST (adică fiecare instanță a variabilei de serviciu), va fi executată următoarea comandă.
# systemctl status $ service | grep - "alergare" liniștită.
De data aceasta trebuie să precedem variabila noastră generică (care reprezintă fiecare element din LISTĂ) cu un semn dolar pentru a indica că este o variabilă și, prin urmare, ar trebui utilizată valoarea sa în fiecare iterație. Ieșirea este apoi conectată la grep.
-Liniște pavilion este folosit pentru a preveni grep de la afișarea pe ecran a liniilor în care apare cuvântul care rulează. Când se întâmplă acest lucru, comanda de mai sus returnează starea de ieșire a 0 (reprezentată de $? în construcția if), verificând astfel că serviciul rulează.
O stare de ieșire diferită de 0 (adică cuvânt rularea nu a fost găsită în rezultatul systemctl status $ service) indică faptul că serviciul nu rulează.
Script de monitorizare a serviciilor
Am putea face un pas mai departe și să verificăm existența myservices.txt înainte chiar de a încerca să introduceți bucla for.
#! / bin / bash # Acest script repetă o listă de servicii și. # este utilizat pentru a determina dacă rulează sau nu. if [-f myservices.txt]; apoi pentru service în $ (cat myservices.txt); face systemctl status $ service | grep --quiet "rulează" dacă [$? -eq 0]; atunci echo $ service "este [ACTIV]" altfel echo $ service "este [INACTIV sau NU ESTE INSTALAT]" fi făcut. else echo "lipsește myservices.txt" fi.
Ping o serie de gazde de rețea sau de internet pentru statistici de răspuns
Poate doriți să mențineți o listă de gazde într-un fișier text și să utilizați un script pentru a determina din când în când dacă sunt pingabile sau nu (nu ezitați să înlocuiți conținutul myhosts și încearcă singur).
Comanda încorporată a shell-ului de citire spune buclei while pentru a citi myhosts linie cu linie și atribuie conținutul fiecărei linii gazdei variabile, care este apoi trecut la ping comanda.
#! / bin / bash # Acest script este folosit pentru a demonstra utilizarea unei bucle while în timp ce gazda de citire; faceți ping -c 2 $ gazdă. gata Script pentru serverele Ping
Citește și:
Aflați Shell Scripting: un ghid de la începători la administratorul de sistem
5 scripturi Shell pentru a învăța programarea Shell
Depanarea sistemului de fișiere
Deși Linux este un sistem de operare foarte stabil, dacă se blochează din anumite motive (de exemplu, din cauza unei întreruperi de curent), unul (sau mai multe) din sistemele dvs. de fișiere nu vor fi demontate corect și astfel vor fi verificate automat dacă există erori când Linux este repornit.
În plus, de fiecare dată când sistemul pornește în timpul unei porniri normale, verifică întotdeauna integritatea sistemelor de fișiere înainte de a le monta. În ambele cazuri, acest lucru se realizează folosind un instrument numit fsck (“verificarea sistemului de fișiere”).
fsck nu numai că va verifica integritatea sistemelor de fișiere, ci va încerca, de asemenea, să repare sistemele de fișiere corupte dacă li se solicită acest lucru. În funcție de gravitatea daunelor, fsck poate avea succes sau nu; când o face, porțiuni recuperate de fișiere sunt plasate în pierdut + găsit director, situat în rădăcina fiecărui sistem de fișiere.
Nu în ultimul rând, trebuie să menționăm că pot apărea neconcordanțe dacă încercăm să scoatem o unitate USB atunci când sistemul de operare încă îi scrie, și poate duce chiar la deteriorarea hardware-ului.
Sintaxa de bază a fsck este după cum urmează:
# fsck [opțiuni] sistem de fișiere.
Verificarea unui sistem de fișiere pentru erori și încercarea de a repara automat
Pentru a verifica un sistem de fișiere cu fsck, trebuie mai întâi să îl demontăm.
Pe lângă - da steag, putem folosi -A opțiune pentru a repara automat sistemele de fișiere fără a pune întrebări și a forța verificarea chiar și atunci când sistemul de fișiere pare curat.
# fsck -af / dev / sdg1.
Dacă suntem interesați doar să aflăm ce nu este în regulă (fără a încerca să remediem nimic pentru moment) putem rula fsck cu -n opțiune, care va afișa problemele sistemului de fișiere la ieșirea standard.
# fsck -n / dev / sdg1.
În funcție de mesajele de eroare din ieșirea fsck, vom ști dacă putem încerca să rezolvăm noi înșine problema sau să o trimitem echipelor de ingineri pentru a efectua verificări suplimentare asupra hardware-ului.
rezumat
Am ajuns la sfârșitul acestui lucru 10-articol serii în care au încercat să acopere competențele de bază de domeniu necesare pentru promovarea LFCS examen.
Din motive evidente, nu este posibil să acoperiți fiecare aspect al acestor subiecte într-un singur tutorial și de aceea, sperăm că aceste articole te-au pus pe drumul cel bun pentru a încerca singur lucruri noi și a continua învăţare.
Dacă aveți întrebări sau comentarii, acestea sunt întotdeauna binevenite - așa că nu ezitați să ne trimiteți o linie prin formularul de mai jos!