Pagrindinio apvalkalo scenarijų ir „Linux“ failų sistemos trikčių šalinimo supratimas ir mokymasis – 10 dalis


„Linux Foundation“ pristatė LFCS sertifikavimą (Linux Foundation Certified Sysadmin) – visiškai naują iniciatyvą, kurios tikslas yra leisti asmenims visur (ir bet kur) gauti pagrindinio ir vidutinio lygio sertifikatą. operatyvinis Linux sistemų palaikymas, apimantis veikiančių sistemų ir paslaugų palaikymą, bendrą stebėjimą ir analizę, taip pat protingą sprendimų priėmimą, kai reikia iškelti problemas aukščiausioms palaikymo komandoms.

Peržiūrėkite šį vaizdo įrašą, kuriame supažindinama su „Linux Foundation“ sertifikavimo programa.

Tai paskutinis šios 10 pamokų serijos straipsnis (10 dalis). Šiame straipsnyje mes sutelksime dėmesį į pagrindinius apvalkalo scenarijus ir „Linux“ failų sistemų trikčių šalinimą. Abi temos yra būtinos LFCS sertifikavimo egzaminui.

Terminalų ir apvalkalų supratimas

Pirmiausia išsiaiškinkime keletą sąvokų.

  1. Apvalkalas yra programa, kuri priima komandas ir suteikia jas operacinei sistemai vykdyti.
  2. Terminalas yra programa, leidžianti mums, galutiniams vartotojams, sąveikauti su apvalkalu. Vienas terminalo pavyzdžių yra GNOME terminalas, kaip parodyta toliau pateiktame paveikslėlyje.

Kai pirmą kartą paleidžiame apvalkalą, jis pateikia komandų eilutę (taip pat žinomą kaip komandų eilutę), kuri praneša, kad apvalkalas yra pasirengęs pradėti priimti komandas iš standartinio įvesties įrenginio, kuris paprastai yra klaviatūra.

Galbūt norėsite peržiūrėti kitą šios serijos straipsnį (Naudokite komandą failams kurti, redaguoti ir manipuliuoti – 1 dalis), kad peržiūrėtumėte kai kurias naudingas komandas.

„Linux“ siūlo daugybę apvalkalų parinkčių, kurios yra dažniausiai naudojamos:

bash Shell

Bash reiškia Bourne Again SHell ir yra numatytasis GNU projekto apvalkalas. Jame yra naudingų Korn apvalkalo (ksh) ir C apvalkalo (csh) funkcijų, kurios tuo pačiu metu siūlo keletą patobulinimų. Tai numatytasis apvalkalas, naudojamas paskirstymuose, kuriems taikomas LFCS sertifikatas, ir šį apvalkalą naudosime šioje mokymo programoje.

sh Shell

Bourne SHell yra seniausias apvalkalas, todėl daugelį metų buvo numatytasis daugelio UNIX tipo operacinių sistemų apvalkalas.

ksh Shell

Korn SHell yra Unix apvalkalas, kurį devintojo dešimtmečio pradžioje sukūrė Davidas Kornas iš Bell Labs. Jis yra suderinamas su Bourne apvalkalu ir turi daug C apvalkalo funkcijų.

Apvalkalo scenarijus yra ne daugiau ir ne mažiau kaip tekstinis failas, paverstas vykdomąja programa, kuri sujungia komandas, kurias apvalkalas vykdo vieną po kitos.

Pagrindinis apvalkalo scenarijus

Kaip minėta anksčiau, apvalkalo scenarijus gimsta kaip paprasto teksto failas. Taigi galima sukurti ir redaguoti naudojant pageidaujamą teksto rengyklę. Galbūt norėsite naudoti vi/m (žr. „vi Editor“ naudojimas – 2 šios serijos dalis), kuriame yra sintaksės paryškinimas jūsų patogumui.

Įveskite šią komandą, kad sukurtumėte failą pavadinimu myscript.sh ir paspauskite Enter.

vim myscript.sh

Pati pirmoji apvalkalo scenarijaus eilutė turi būti tokia (taip pat žinoma kaip shebang).

#!/bin/bash

Jis „pasako“ operacinei sistemai vertėjo pavadinimą, kuris turėtų būti naudojamas toliau pateiktam tekstui paleisti.

Dabar laikas pridėti mūsų komandas. Mes galime paaiškinti kiekvienos komandos ar viso scenarijaus tikslą, pridėdami komentarų. Atminkite, kad apvalkalas nepaiso tų eilučių, prasidedančių svaro ženklu # (aiškinamieji komentarai).

#!/bin/bash
echo This is Part 10 of the 10-article series about the LFCS certification
echo Today is $(date +%Y-%m-%d)

Kai scenarijus bus parašytas ir išsaugotas, turime padaryti jį vykdomąjį.

chmod 755 myscript.sh

Prieš paleisdami scenarijų, turime pasakyti keletą žodžių apie aplinkos kintamąjį ` PATH. Jei bėgsime,

echo $PATH

iš komandinės eilutės pamatysime ` PATH: turinį, atskirtą dvitaškiu katalogų, kurių ieškoma, kai įvesime vykdomosios programos pavadinimą, sąrašą. Jis vadinamas aplinkos kintamuoju, nes yra apvalkalo aplinkos dalis – informacijos rinkinys, kuris tampa prieinamas apvalkalui ir jo antriniams procesams, kai apvalkalas pirmą kartą paleidžiamas.

Kai įvedame komandą ir paspaudžiame Enter, apvalkalas ieško visuose kataloguose, išvardytuose ` PATH kintamajame, ir vykdo pirmąjį rastą atvejį. Pažiūrėkime pavyzdį,

Jei yra du vykdomieji failai tuo pačiu pavadinimu, vienas /usr/local/bin, o kitas /usr/bin, bus vykdomas pirmame kataloge esantis failas pirma, o į kitą bus nepaisoma.

Jei neišsaugojome savo scenarijaus viename iš katalogų, nurodytų ` PATH kintamajame, turime pridėti ./ prie failo pavadinimo, kad galėtume vykdyti tai. Priešingu atveju galime jį paleisti taip pat, kaip darytume su įprasta komanda.

pwd
./myscript.sh
cp myscript.sh ../bin
cd ../bin
pwd
myscript.sh

Sąlygos

Kai jums reikia nurodyti skirtingus veiksmus, kurių reikia imtis apvalkalo scenarijuje dėl komandos sėkmės ar nesėkmės, tokioms sąlygoms apibrėžti naudosite konstrukciją if. Jo pagrindinė sintaksė yra tokia:

if CONDITION; then 
	COMMANDS;
else
	OTHER-COMMANDS 
fi

Kur CONDITION gali būti viena iš šių (čia cituojamos tik dažniausiai pasitaikančios sąlygos) ir įvertinama kaip teisinga, kai:

  1. [ -failas ] → failas egzistuoja.
  2. [ -d failas ] → failas egzistuoja ir yra katalogas.
  3. [ -f failas ] →failas egzistuoja ir yra įprastas failas.
  4. [ -u failas ] →failas egzistuoja ir nustatytas jo SUID (nustatyti vartotojo ID) bitas.
  5. [ -g failas ] →failas egzistuoja ir jo SGID bitas nustatytas.
  6. [ -k failas ] →failas egzistuoja ir nustatytas jo lipnus bitas.
  7. [ -r failas ] →failas egzistuoja ir yra skaitomas.
  8. [ -s failas ]→ failas egzistuoja ir nėra tuščias.
  9. [ -w failas ]→failas egzistuoja ir jį galima įrašyti.
  10. [ -x failas ] yra teisingas, jei failas egzistuoja ir yra vykdomas.
  11. [ string1=string2 ] → eilutės yra lygios.
  12. [ string1 != string2 ] →eilutės nėra lygios.

[ int1 op int2 ] turėtų būti ankstesnio sąrašo dalis, o po to sekantys elementai (pvz., -eq –> yra tiesa, jei int1 > yra lygus int2.) turėtų būti „vaikų“ sąrašas [ int1 op int2 ], kur op yra vienas iš šių palyginimo operatorių.

  1. -eq –> yra teisinga, jei int1 yra lygus int2.
  2. -ne –> tiesa, jei int1 nėra lygus int2.
  3. -lt –> tiesa, jei int1 yra mažesnis už int2.
  4. -le –> tiesa, jei int1 yra mažesnis arba lygus int2.
  5. -gt –> tiesa, jei int1 yra didesnis nei int2.
  6. -ge –> tiesa, jei int1 yra didesnis arba lygus int2.

Kilpoms

Ši kilpa leidžia vykdyti vieną ar daugiau komandų kiekvienai verčių sąrašo vertei. Jo pagrindinė sintaksė yra tokia:

for item in SEQUENCE; do 
		COMMANDS; 
done

Kur item yra bendras kintamasis, nurodantis kiekvieną SEQUENCE reikšmę kiekvienos iteracijos metu.

Nors kilpos

Ši kilpa leidžia vykdyti pasikartojančių komandų seriją tol, kol valdymo komanda vykdoma, kai išėjimo būsena lygi nuliui (sėkmingai). Jo pagrindinė sintaksė yra tokia:

while EVALUATION_COMMAND; do 
		EXECUTE_COMMANDS; 
done

Kur EVALUATION_COMMAND gali būti bet kokia (-os) komanda (-os), kuri (-os) gali išeiti sėkmingai (0) arba nesėkmingai (išskyrus 0), ir EXECUTE_COMMANDS gali būti bet kokia programa, scenarijus arba apvalkalo konstrukcija, įskaitant kitas įdėtas kilpas.

Viską sudėjus

Toliau pateiktame pavyzdyje parodysime if konstrukcijos ir ciklo for naudojimą.

Nustatymas, ar paslauga veikia sisteminiu pagrindu veikiančiame platinimo tinkle

Sukurkime failą su paslaugų, kurias norime stebėti iš pirmo žvilgsnio, sąrašu.

cat myservices.txt

sshd
mariadb
httpd
crond
firewalld

Mūsų apvalkalo scenarijus turėtų atrodyti taip.

#!/bin/bash

This script iterates over a list of services and
is used to determine whether they are running or not.

for service in $(cat myservices.txt); do
    	systemctl status $service | grep --quiet "running"
    	if [ $? -eq 0 ]; then
            	echo $service "is [ACTIVE]"
    	else
            	echo $service "is [INACTIVE or NOT INSTALLED]"
    	fi
done

Paaiškinkime, kaip veikia scenarijus.

1). Ciklas for skaito failą myservices.txt po vieną LIST elementą. Tas vienintelis elementas žymimas bendruoju kintamuoju pavadinimu paslauga. SĄRAŠAS užpildomas išvestimi,

cat myservices.txt

2). Aukščiau pateikta komanda yra skliausteliuose ir prieš ją yra dolerio ženklas, nurodantis, kad ji turėtų būti įvertinta, kad būtų užpildytas SĄRAŠAS, kurį kartosime.

3). Kiekvienam LIST elementui (tai reiškia kiekvieną paslaugos kintamojo egzempliorių) bus vykdoma ši komanda.

systemctl status $service | grep --quiet "running"

Šį kartą prieš bendrąjį kintamąjį (kuris žymi kiekvieną LIST elementą) turime pateikti dolerio ženklą, kad parodytume, jog tai kintamasis, todėl kiekvienoje iteracijoje turėtų būti naudojama jo reikšmė. Tada išvestis nukreipiama į grep.

Vėliava –tylus naudojama siekiant neleisti grep rodyti ekrane eilutes, kuriose rodomas žodis veikia. Kai taip nutinka, aukščiau pateikta komanda grąžina išėjimo būseną 0 (jei konstrukcijoje nurodo $?), taip patikrinama, ar paslauga veikia.

Išėjimo būsena, kuri skiriasi nuo 0 (tai reiškia, kad veikiantis žodis nerastas systemctl status $service išvestyje) rodo, kad paslauga nėra bėgimas.

Galėtume žengti dar vieną žingsnį ir patikrinti, ar nėra myservices.txt, net prieš bandydami įeiti į for kilpą.

#!/bin/bash

This script iterates over a list of services and
is used to determine whether they are running or not.

if [ -f myservices.txt ]; then
    	for service in $(cat myservices.txt); do
            	systemctl status $service | grep --quiet "running"
            	if [ $? -eq 0 ]; then
                    	echo $service "is [ACTIVE]"
            	else
                    	echo $service "is [INACTIVE or NOT INSTALLED]"
            	fi
    	done
else
    	echo "myservices.txt is missing"
fi
Tinklo ar interneto prieglobos siuntimas atsakymų statistikai gauti

Galbūt norėsite tvarkyti prieglobų sąrašą tekstiniame faile ir naudoti scenarijų, kad retkarčiais nustatytumėte, ar juos galima pinguoti, ar ne (nesivaržykite pakeisti myhosts turinį ir pabandykite patys ).

Įdiegta skaitymo apvalkalo komanda nurodo, kad ciklas while nuskaito myhosts eilutę po eilutės ir kiekvienos eilutės turinį priskiria kintamajam host, kuris vėliau perduodamas komandai ping.

#!/bin/bash

This script is used to demonstrate the use of a while loop

while read host; do
    	ping -c 2 $host
done < myhosts

Taip pat skaitykite:

  1. Sužinokite „Shell Scripting“: vadovas nuo naujokų iki sistemos administratorių
  2. 5 apvalkalo scenarijai, skirti išmokti programuoti apvalkalą

Failų sistemos trikčių šalinimas

Nors „Linux“ yra labai stabili operacinė sistema, jei ji dėl kokių nors priežasčių sugenda (pavyzdžiui, dėl elektros energijos tiekimo nutraukimo), viena (ar daugiau) failų sistemų nebus tinkamai atjungta ir dėl to bus automatiškai tikrinama, ar nėra klaidų, kai „Linux“ yra paleistas iš naujo.

Be to, kiekvieną kartą, kai sistema paleidžiama įprasto įkrovimo metu, ji visada patikrina failų sistemų vientisumą prieš jas prijungdama. Abiem atvejais tai atliekama naudojant įrankį, pavadintą fsck („failų sistemos patikrinimas “).

fsck ne tik patikrins failų sistemų vientisumą, bet ir bandys pataisyti sugadintas failų sistemas, jei bus nurodyta tai padaryti. Priklausomai nuo žalos sunkumo, fsck gali pasisekti arba ne; kai taip atsitiks, atkurtos failų dalys dedamos į katalogą pamestas+rastas, esantį kiekvienos failų sistemos šaknyje.

Paskutinis, bet ne mažiau svarbus dalykas, turime atkreipti dėmesį į tai, kad gali atsirasti neatitikimų, jei bandome pašalinti USB diską, kai operacinė sistema vis dar į jį rašo, ir netgi gali būti pažeista aparatinė įranga.

Pagrindinė fsck sintaksė yra tokia:

fsck [options] filesystem
Tikrinama, ar failų sistemoje nėra klaidų, ir bandoma taisyti automatiškai

Norėdami patikrinti failų sistemą naudodami fsck, pirmiausia turime ją atjungti.

mount | grep sdg1
umount /mnt
fsck -y /dev/sdg1

Be vėliavėlės -y, galime naudoti parinktį -a, kad automatiškai pataisytume failų sistemas, neužduodami jokių klausimų, ir priverstinai tikrintume net tada, kai failų sistema atrodo švari.

fsck -af /dev/sdg1

Jei norime tik išsiaiškinti, kas negerai (kol kas nieko nebandydami taisyti), galime paleisti fsck su parinktimi -n, kuri failų sistemos problemas išves į standartinę išvestį.

fsck -n /dev/sdg1

Atsižvelgdami į klaidos pranešimus fsck išvestyje, žinosime, ar galime pabandyti išspręsti problemą patys, ar perduoti ją inžinierių komandoms, kurios atliks tolesnius aparatinės įrangos patikrinimus.

Santrauka

Priėjome šios 10 straipsnių serijos pabaigą, kurioje bandėme apžvelgti pagrindines domeno kompetencijas, kurių reikia norint išlaikyti LFCS egzaminą.

Dėl akivaizdžių priežasčių neįmanoma aprėpti visų šių temų aspektų vienoje mokymo programoje, todėl tikimės, kad šie straipsniai padėjo jums išbandyti naujus dalykus ir toliau mokytis.

Jei turite klausimų ar komentarų, jie visada laukiami, todėl nedvejodami parašykite mums naudodami žemiau esančią formą!