Að skilja og læra grunn skeljaforskrifta og Linux skráakerfis bilanaleit - Hluti 10


Linux Foundation hleypti af stokkunum LFCS vottuninni (Linux Foundation Certified Sysadmin), glænýtt framtak sem hefur það að markmiði að leyfa einstaklingum alls staðar (og hvar sem er) að fá vottun í grunn til miðlungs rekstrarstuðningur fyrir Linux kerfi, sem felur í sér stuðning við keyrslukerfi og þjónustu, ásamt heildareftirliti og greiningu, auk snjallrar ákvarðanatöku þegar kemur að því að koma málum á framfæri við efri stuðningsteymi.

Skoðaðu eftirfarandi myndband sem leiðbeinir þér kynningu á Linux Foundation Certification Program.

Þetta er síðasta greinin (10. hluti) í þessari 10 kennsluröð. Í þessari grein munum við einbeita okkur að undirstöðu skeljaforskriftum og bilanaleit á Linux skráarkerfum. Bæði efnin eru nauðsynleg fyrir LFCS vottunarprófið.

Skilningur á flugstöðvum og skeljum

Við skulum skýra nokkur hugtök fyrst.

  1. Skel er forrit sem tekur við skipunum og gefur þær til stýrikerfisins sem á að framkvæma.
  2. Útstöð er forrit sem gerir okkur sem endanotendur kleift að hafa samskipti við skelina. Eitt dæmi um flugstöð er GNOME flugstöð, eins og sýnt er á myndinni hér að neðan.

Þegar við byrjum skel fyrst birtir hún skipanalínuna (einnig þekkt sem skipanalínan), sem segir okkur að skelin sé tilbúin til að byrja að samþykkja skipanir frá venjulegu innsláttartækinu sínu, sem er venjulega lyklaborðið.

Þú gætir viljað vísa í aðra grein í þessari röð (Notaðu skipun til að búa til, breyta og vinna með skrár - Part 1) til að fara yfir nokkrar gagnlegar skipanir.

Linux býður upp á úrval af valkostum fyrir skeljar, eftirfarandi er algengast:

Bash stendur fyrir Bourne Again SHell og er sjálfgefin skel GNU verkefnisins. Það inniheldur gagnlega eiginleika frá Korn skelinni (ksh) og C skelinni (csh), sem býður upp á nokkrar endurbætur á sama tíma. Þetta er sjálfgefna skelin sem notuð er af dreifingunum sem fjallað er um í LFCS vottuninni og það er skelin sem við munum nota í þessari kennslu.

Bourne SHell er elsta skelin og hefur því verið sjálfgefin skel margra UNIX-líkra stýrikerfa í mörg ár.

Korn SHell er Unix skel sem var þróuð af David Korn hjá Bell Labs snemma á níunda áratugnum. Það er afturábak-samhæft við Bourne skelina og inniheldur marga eiginleika C skelarinnar.

Skeljaforskrift er hvorki meira né minna en textaskrá sem breytt er í keyranlegt forrit sem sameinar skipanir sem eru framkvæmdar af skelinni hver á eftir annarri.

Basic Shell Scripting

Eins og fyrr segir er skeljahandrit fædd sem látlaus textaskrá. Þannig er hægt að búa til og breyta með því að nota valinn textaritil okkar. Þú gætir viljað íhuga að nota vi/m (sjá Notkun vi ritstjóra – Hluti 2 af þessari röð), sem er með auðkenningu á setningafræði þér til hægðarauka.

Sláðu inn eftirfarandi skipun til að búa til skrá sem heitir myscript.sh og ýttu á Enter.

# vim myscript.sh

Fyrsta línan í skeljahandriti verður að vera sem hér segir (einnig þekkt sem shebang).

#!/bin/bash

Það \segir stýrikerfinu nafn túlksins sem ætti að nota til að keyra textann sem fylgir.

Nú er kominn tími til að bæta við skipunum okkar. Við getum skýrt tilgang hverrar skipunar, eða allt handritið, með því að bæta við athugasemdum líka. Athugaðu að skelin hunsar þessar línur sem byrja á pundsmerki # (skýringar athugasemdir).

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

Þegar handritið hefur verið skrifað og vistað þurfum við að gera það keyranlegt.

# chmod 755 myscript.sh

Áður en handritið okkar er keyrt þurfum við að segja nokkur orð um PATH umhverfisbreytuna. Ef við hlaupum,

echo $PATH

frá skipanalínunni munum við sjá innihald PATH: lista yfir möppur sem eru aðskilin með tvípunkti sem leitað er að þegar við slærð inn nafn keyranlegs forrits. Hún er kölluð umhverfisbreyta vegna þess að hún er hluti af skelumhverfinu – safn upplýsinga sem verða tiltækar fyrir skelina og undirferli hennar þegar skelin er fyrst ræst.

Þegar við sláum inn skipun og ýtum á Enter leitar skelin í öllum möppunum sem eru skráðar í PATH breytunni og keyrir fyrsta tilvikið sem finnst. Við skulum sjá dæmi,

Ef það eru tvær keyranlegar skrár með sama nafni, ein í /usr/local/bin og önnur í /usr/bin, verður sú í fyrstu möppunni keyrð fyrst, en hitt verður virt að vettugi.

Ef við höfum ekki vistað handritið okkar í einni af möppunum sem eru skráðar í PATH breytunni, þurfum við að bæta ./ við skráarnafnið til að keyra það. Annars getum við keyrt það alveg eins og við myndum gera með venjulegri skipun.

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

Alltaf þegar þú þarft að tilgreina mismunandi aðgerðir sem á að grípa til í skeljahandriti, vegna árangurs eða bilunar á skipun, muntu nota ef smíðina til að skilgreina slík skilyrði. Grunnsetningafræði þess er:

if CONDITION; then 
	COMMANDS;
else
	OTHER-COMMANDS 
fi

Þar sem SKILYRÐI getur verið eitt af eftirfarandi (aðeins er vitnað í algengustu aðstæðurnar hér) og metið er satt þegar:

  1. [ -skrá ] → skrá er til.
  2. [ -d skrá ] → skrá er til og er skrá.
  3. [ -f skrá ] →skrá er til og er venjuleg skrá.
  4. [ -u skrá ] →skrá er til og SUID (sett notandakenni) biti hennar er stilltur.
  5. [ -g skrá ] →skrá er til og SGID biti hennar er stilltur.
  6. [ -k skrá ] →skráin er til og límbiti hennar er stilltur.
  7. [ -r skrá ] →skrá er til og er læsileg.
  8. [ -s skrá ]→ skrá er til og er ekki tóm.
  9. [ -w skrá ]→skrá er til og er skrifanleg.
  10. [ -x skrá ] er satt ef skrá er til og er keyranleg.
  11. [ strengur1 = strengur2 ] → strengirnir eru jafnir.
  12. [ string1 != string2 ] →strengirnir eru ekki jafnir.

[ int1 op int2 ] ætti að vera hluti af listanum á undan, en atriðin sem koma á eftir (td -eq –> er satt ef int1 er jafnt og int2.) ætti að vera „börn“ listi yfir [ int1 op int2 ] þar sem op er einn af eftirfarandi samanburðaraðilum.

  1. -eq –> er satt ef int1 er jafnt og int2.
  2. -ne –> satt ef int1 er ekki jafnt og int2.
  3. -lt –> satt ef int1 er minna en int2.
  4. -le –> satt ef int1 er minna en eða jafnt og int2.
  5. -gt –> satt ef int1 er stærra en int2.
  6. -ge –> satt ef int1 er stærra en eða jafnt og int2.

Þessi lykkja gerir kleift að framkvæma eina eða fleiri skipanir fyrir hvert gildi á lista yfir gildi. Grunnsetningafræði þess er:

for item in SEQUENCE; do 
		COMMANDS; 
done

Þar sem atrið er almenn breyta sem táknar hvert gildi í RÖÐ við hverja endurtekningu.

Þessi lykkja gerir kleift að framkvæma röð endurtekinna skipana svo framarlega sem stjórnskipunin keyrir með útgöngustöðu sem er jöfn núll (með góðum árangri). Grunnsetningafræði þess er:

while EVALUATION_COMMAND; do 
		EXECUTE_COMMANDS; 
done

Þar sem EVALUATION_COMMAND getur verið hvaða skipun/skipanir sem geta hætt með árangri (0) eða bilun (annað en 0) stöðu, og EXECUTE_COMMANDS getur verið hvaða forrit, skriftu eða skel sem er, þar með talið aðrar hreiður lykkjur.

Við munum sýna fram á notkun if smíða og for lykkju með eftirfarandi dæmi.

Við skulum búa til skrá með lista yfir þjónustu sem við viljum fylgjast með í fljótu bragði.

# cat myservices.txt

sshd
mariadb
httpd
crond
firewalld

Skeljahandritið okkar ætti að líta út.

#!/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

1). For lykkjan les myservices.txt skrána einn þátt í LIST í einu. Sá eini þáttur er táknaður með almennu breytunni sem heitir þjónusta. LISTINN er fylltur út af,

# cat myservices.txt

2). Ofangreind skipun er innan sviga og á undan er dollaramerki til að gefa til kynna að það ætti að meta hana til að fylla út LISTA sem við munum endurtaka yfir.

3). Fyrir hvern þátt LIST (sem þýðir hvert tilvik þjónustubreytunnar) verður eftirfarandi skipun keyrð.

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

Að þessu sinni þurfum við að koma dollaramerki á undan almennu breytunni okkar (sem táknar hvern þátt í LIST) til að gefa til kynna að hún sé breyta og því ætti að nota gildi hennar í hverri endurtekningu. Úttakið er síðan flutt í grep.

–quiet fáninn er notaður til að koma í veg fyrir að grep birti á skjánum línurnar þar sem orðið í gangi birtist. Þegar það gerist, skilar ofangreind skipun útgangsstöðu 0 (táknað með $? í if smíðanum), þannig að staðfesta að þjónustan sé í gangi.

Önnur útgöngustaða en 0 (sem þýðir að orðið í gangi fannst ekki í úttakinu á systemctl status $service) gefur til kynna að þjónustan sé ekki hlaupandi.

Við gætum farið einu skrefi lengra og athugað hvort myservices.txt sé til áður en við reynum að slá inn for lykkjuna.

#!/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

Þú gætir viljað halda lista yfir gestgjafa í textaskrá og nota skriftu til að ákvarða annað slagið hvort þeir séu pingable eða ekki (vertu frjálst að skipta um innihald myhosts og prófa sjálfur ).

Lesa skel innbyggða skipunin segir while lykkjunni að lesa myhosts línu fyrir línu og úthlutar innihaldi hverrar línu til breytilegs hýsils, sem síðan er send til ping skipunarinnar.

#!/bin/bash

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

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

Lestu líka:

  1. Lærðu Shell Scripting: Leiðbeiningar frá nýliðum til kerfisstjóra
  2. 5 skeljaforskriftir til að læra skeljaforritun

Úrræðaleit í skráakerfi

Þrátt fyrir að Linux sé mjög stöðugt stýrikerfi, ef það hrynur af einhverjum ástæðum (til dæmis vegna rafmagnsleysis), verður eitt (eða fleiri) af skráarkerfum þínum ekki aftengt á réttan hátt og verður því sjálfkrafa athugað fyrir villum þegar Linux er endurræst.

Að auki, í hvert skipti sem kerfið ræsir við venjulega ræsingu, athugar það alltaf heilleika skráakerfanna áður en þau eru sett upp. Í báðum tilfellum er þetta framkvæmt með því að nota tól sem heitir fsck (\skráakerfisskoðun).

fsck mun ekki aðeins athuga heilleika skráarkerfa, heldur einnig reyna að gera við skemmd skráarkerfi ef beðið er um það. Það fer eftir alvarleika tjónsins, fsck getur tekist eða ekki; þegar það gerist eru endurheimtir hlutar skráa settir í týnt+fundið möppuna sem er staðsett í rót hvers skráarkerfis.

Síðast en ekki síst verðum við að hafa í huga að ósamræmi getur líka gerst ef við reynum að fjarlægja USB drif þegar stýrikerfið er enn að skrifa á það og getur jafnvel valdið skemmdum á vélbúnaði.

Grunnsetningafræði fsck er sem hér segir:

# fsck [options] filesystem

Til þess að athuga skráarkerfi með fsck, verðum við fyrst að aftengja það.

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

Fyrir utan -y fánann, getum við notað -a valmöguleikann til að gera sjálfkrafa við skráarkerfin án þess að spyrja spurninga, og þvingað ávísunina jafnvel þegar skráarkerfið lítur út fyrir að vera hreint.

# fsck -af /dev/sdg1

Ef við höfum aðeins áhuga á að komast að því hvað er að (án þess að reyna að laga neitt í bili) getum við keyrt fsck með -n valmöguleikanum, sem mun gefa út skráarkerfisvandamálin í staðlað úttak.

# fsck -n /dev/sdg1

Það fer eftir villuboðunum í úttak fsck, við munum vita hvort við getum reynt að leysa vandamálið sjálf eða stækkað það til verkfræðingateyma til að framkvæma frekari athuganir á vélbúnaðinum.

Samantekt

Við erum komin að lokum þessarar 10 greina seríu þar sem reynt hefur verið að ná yfir helstu lénsfærni sem þarf til að standast LFCS prófið.

Af augljósum ástæðum er ekki hægt að fjalla um hvern einasta þátt þessara viðfangsefna í neinu einni kennsluefni og þess vegna vonum við að þessar greinar hafi komið þér á rétta braut til að prófa nýtt efni sjálfur og halda áfram að læra.

Ef þú hefur einhverjar spurningar eða athugasemdir eru þær alltaf velkomnar - svo ekki hika við að senda okkur línu í gegnum formið hér að neðan!