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ų.
- Apvalkalas yra programa, kuri priima komandas ir suteikia jas operacinei sistemai vykdyti.
- 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:
- [ -failas ] → failas egzistuoja.
- [ -d failas ] → failas egzistuoja ir yra katalogas.
- [ -f failas ] →failas egzistuoja ir yra įprastas failas.
- [ -u failas ] →failas egzistuoja ir nustatytas jo SUID (nustatyti vartotojo ID) bitas.
- [ -g failas ] →failas egzistuoja ir jo SGID bitas nustatytas.
- [ -k failas ] →failas egzistuoja ir nustatytas jo lipnus bitas.
- [ -r failas ] →failas egzistuoja ir yra skaitomas.
- [ -s failas ]→ failas egzistuoja ir nėra tuščias.
- [ -w failas ]→failas egzistuoja ir jį galima įrašyti.
- [ -x failas ] yra teisingas, jei failas egzistuoja ir yra vykdomas.
- [ string1=string2 ] → eilutės yra lygios.
- [ 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ų.
- -eq –> yra teisinga, jei int1 yra lygus int2.
- -ne –> tiesa, jei int1 nėra lygus int2.
- -lt –> tiesa, jei int1 yra mažesnis už int2.
- -le –> tiesa, jei int1 yra mažesnis arba lygus int2.
- -gt –> tiesa, jei int1 yra didesnis nei int2.
- -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:
- Sužinokite „Shell Scripting“: vadovas nuo naujokų iki sistemos administratorių
- 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ą!