Shell skriptu un Linux failu sistēmas traucējummeklēšanas izpratne un mācīšanās - 10. daļa


Linux fonds uzsāka sertificēšanu LFCS ( Linux Foundation Certified Sysadmin ), pavisam jaunu iniciatīvu, kuras mērķis ir ļaut personām visur (un jebkurā vietā) iegūt sertificētu pamata vai vidēja līmeņa operētājsistēmas atbalsts Linux sistēmām, kas ietver darbojošos sistēmu un pakalpojumu atbalstu, kā arī vispārēju uzraudzību un analīzi, kā arī gudru lēmumu pieņemšanu, kad runa ir par problēmu izvirzīšanu atbalsta atbalsta komandām.

Apskatiet šo videoklipu, kurā sniegts ievads par Linux Foundation sertifikācijas programmu.

Šis ir pēdējais šīs garās 10 apmācību sērijas raksts (10. daļa). Šajā rakstā mēs pievērsīsimies galvenajiem čaulas skriptiem un Linux failu sistēmu problēmu novēršanai. Abas tēmas ir nepieciešamas LFCS sertifikācijas eksāmenam.

Izpratne par termināliem un čaulām

Vispirms noskaidrosim dažus jēdzienus.

  1. Apvalks ir programma, kas ņem komandas un dod tās izpildāmajai operētājsistēmai.
  2. Termināls ir programma, kas ļauj mums kā galalietotājiem mijiedarboties ar čaulu. Viens termināļa piemērs ir GNOME termināls, kā parādīts zemāk esošajā attēlā.

Kad mēs pirmo reizi palaižam čaulu, tā parāda komandu uzvedni (pazīstama arī kā komandrinda), kas mums saka, ka čaula ir gatava sākt pieņemt komandas no savas standarta ievades ierīces, kas parasti ir tastatūra.

Iespējams, vēlēsities atsaukties uz citu šīs sērijas rakstu (Failu izveidei, rediģēšanai un manipulēšanai izmantojiet komandu - 1. daļa), lai pārskatītu dažas noderīgas komandas.

Linux nodrošina virkni čaulu opciju, visbiežāk sastopamās:

Bash nozīmē Bourne Again Shell un ir GNU projekta noklusējuma apvalks. Tas ietver noderīgas funkcijas no Korn apvalka (ksh) un C apvalka (csh), vienlaikus piedāvājot vairākus uzlabojumus. Tas ir noklusējuma apvalks, ko izmanto izplatījumi, uz kuriem attiecas LFCS sertifikāts, un tieši šo čaumalu izmantosim šajā apmācībā.

Bourne SHell ir vecākais apvalks, un tāpēc tas daudzus gadus ir bijis noklusējuma apvalks daudzām UNIX līdzīgām operētājsistēmām.

Korn SHell ir Unix apvalks, kuru 80. gadu sākumā izstrādāja Deivids Korns Bell Labs. Tas ir savietojams ar Bourne apvalku un ietver daudzas C apvalka funkcijas.

Apvalka skripts ir nekas vairāk un mazāk kā teksta fails, kas pārvērsts par izpildāmo programmu, kurā apvienotas komandas, kuras čaula izpilda viena pēc otras.

Pamata čaulas skripti

Kā minēts iepriekš, čaulas skripts ir dzimis kā vienkārša teksta fails. Tādējādi to var izveidot un rediģēt, izmantojot mūsu vēlamo teksta redaktoru. Iespējams, vēlēsities apsvērt iespēju izmantot vi/m (skatiet sadaļu Vi redaktora izmantošana - šīs sērijas 2. daļa), kurā ērtības labad tiek parādīts sintakses izcelšana.

Ierakstiet šo komandu, lai izveidotu failu ar nosaukumu myscript.sh, un nospiediet Enter.

# vim myscript.sh

Pašai čaulas skripta pirmajai rindai jābūt šādai (to sauc arī par šebangu ).

#!/bin/bash

Tas operētājsistēmai stāsta tulka vārdu, kas jāizmanto, lai palaistu sekojošo tekstu.

Tagad ir pienācis laiks pievienot mūsu komandas. Mēs varam precizēt katras komandas vai visa skripta mērķi, pievienojot arī komentārus. Ņemiet vērā, ka čaula ignorē šīs rindas, kas sākas ar mārciņas zīmi # (paskaidrojošie komentāri).

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

Kad skripts ir uzrakstīts un saglabāts, mums tas jādara izpildāms.

# chmod 755 myscript.sh

Pirms skripta palaišanas mums jāsaka daži vārdi par vides mainīgo $PATH . Ja mēs skrienam,

echo $PATH

no komandrindas mēs redzēsim $PATH: saturu ar kolu atdalītu direktoriju sarakstu, kas tiek meklēti, ievadot izpildāmās programmas nosaukumu. To sauc par vides mainīgo, jo tas ir daļa no čaulas vides - informācijas kopums, kas kļūst pieejams čaulai un tās pakārtotajiem procesiem, kad čaula tiek startēta pirmo reizi.

Kad mēs ierakstām komandu un nospiežam Enter, čaula meklē visus direktorijus, kas uzskaitīti mainīgajā $PATH , un izpilda pirmo atrasto instanci. Apskatīsim piemēru,

Ja ir divi izpildāmi faili ar tādu pašu nosaukumu, viens mapē /usr/local/bin un otrs /usr/bin , tiks izpildīts pirmais direktorijā esošais pirmkārt, bet otrs tiks ignorēts.

Ja skripts nav saglabāts vienā no mainīgajā $PATH norādītajiem direktorijiem, faila nosaukumam jāpievieno ./ , lai to izpildītu. Pretējā gadījumā mēs to varam izpildīt tāpat kā mēs darītu ar parasto komandu.

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

Ikreiz, kad komandas veiksmes vai neveiksmes gadījumā jums ir jānorāda dažādi darbības veidi, kas jāveic čaulas skriptā, šādu nosacījumu definēšanai izmantosiet konstrukciju ja . Tās pamata sintakse ir:

if CONDITION; then 
	COMMANDS;
else
	OTHER-COMMANDS 
fi

Kur NOSACĪJUMS var būt viens no šiem (šeit tiek minēti tikai visbiežāk sastopamie apstākļi), un tas tiek vērtēts kā patiess, ja:

  1. [-a fails] → fails pastāv.
  2. [-d fails] → fails pastāv un ir direktorijs.
  3. [-f fails] → fails pastāv un ir parasts fails.
  4. [-u fails] → fails pastāv un ir iestatīts tā SUID (iestatīts lietotāja ID) bits.
  5. [-g fails] → fails pastāv, un tā SGID bits ir iestatīts.
  6. [-k fails] → fails pastāv un tā lipīgais bits ir iestatīts.
  7. [-r fails] → fails pastāv un ir lasāms.
  8. [-s fails] → fails pastāv un nav tukšs.
  9. [-w fails] → fails pastāv un ir rakstāms.
  10. [-x fails] ir taisnība, ja fails pastāv un ir izpildāms.
  11. [string1 = string2] → virknes ir vienādas.
  12. [string1! = string2] → virknes nav vienādas.

[int1 op int2] jābūt daļai no iepriekšējā saraksta, savukārt sekojošie vienumi (piemēram, -eq -> ir patiesi, ja int1 ir vienāds ar int2 .) jābūt “ bērnu ” sarakstam ar [ int1 op int2 ], kur op ir viens no šiem salīdzināšanas operatoriem.

  1. -eq -> ir taisnība, ja int1 ir vienāds ar int2.
  2. -ne -> taisnība, ja int1 nav vienāds ar int2.
  3. -lt -> taisnība, ja int1 ir mazāks par int2.
  4. -le -> taisnība, ja int1 ir mazāks vai vienāds ar int2.
  5. -gt -> taisnība, ja int1 ir lielāks par int2.
  6. -ge -> taisnība, ja int1 ir lielāks vai vienāds ar int2.

Šī cilpa ļauj izpildīt vienu vai vairākas komandas katrai vērtībai vērtību sarakstā. Tās pamata sintakse ir:

for item in SEQUENCE; do 
		COMMANDS; 
done

Kur vienums ir vispārējs mainīgais, kas katras iterācijas laikā atspoguļo katru vērtību SEQUENCE .

Šī cilpa ļauj izpildīt atkārtotu komandu sēriju, kamēr vadības komanda izpilda izejas statusu, kas vienāds ar nulli (veiksmīgi). Tās pamata sintakse ir:

while EVALUATION_COMMAND; do 
		EXECUTE_COMMANDS; 
done

Kur EVALUATION_COMMAND var būt jebkura (-as) komanda (-as), kas var iziet ar statusu veiksmīgi ( 0 ) vai neveiksmi (izņemot 0) , un EXECUTE_COMMANDS var būt jebkura programma, skripts vai čaulas konstrukcija, ieskaitot citas ligzdotas cilpas.

Mēs parādīsim if konstrukcijas un for loop izmantošanu ar šādu piemēru.

Izveidosim failu ar to pakalpojumu sarakstu, kurus vēlamies pārraudzīt īsumā.

# cat myservices.txt

sshd
mariadb
httpd
crond
firewalld

Mūsu čaulas skriptam vajadzētu izskatīties.

#!/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 cikls myservices.txt failu vienlaikus nolasa vienu no LIST elementiem. Šo atsevišķo elementu apzīmē ar vispārīgo mainīgo ar nosaukumu service. LIST tiek aizpildīts ar

# cat myservices.txt

2). Iepriekš minētā komanda ir iekavās un pirms tās ir dolāra zīme, kas norāda, ka tā jānovērtē, lai aizpildītu LIST, kuru mēs atkārtosim.

3). Katram LIST elementam (tas nozīmē katru pakalpojuma mainīgā gadījumu) tiks izpildīta šāda komanda.

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

Šoreiz mums pirms mūsu vispārējā mainīgā (kas apzīmē katru LIST elementu) ir dolāra zīme, lai norādītu, ka tas ir mainīgais, un tāpēc jāizmanto tā vērtība katrā atkārtojumā. Pēc tam izvade tiek novirzīta uz grep.

Karogs –quiet tiek izmantots, lai neļautu grep ekrānā parādīt līnijas, kurās parādās vārds run. Kad tas notiks, iepriekš minētā komanda atgriež izejas statusu 0 (ja if konstrukcijā ir $? ), tādējādi pārbaudot, vai pakalpojums darbojas.

Izejas statuss, kas atšķiras no 0 (tas nozīmē, ka vārds , kas darbojas, netika atrasts systemctl status $service izvadē), norāda, ka pakalpojums nav skriešana.

Mēs varētu doties vēl vienu soli tālāk un pārbaudīt, vai myservices.txt pastāv, pirms pat mēģināt ievadīt for for.

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

Varat saglabāt teksta failā esošo saimniekdatoru sarakstu un izmantot skriptu, lai šad un tad noteiktu, vai tie ir pingable vai nē (nekautrējieties nomainīt myhosts saturu un izmēģiniet pats ).

Iebūvētā komanda “shell” iebūvētā komanda liek cilpa while lasīt rindas pa rindām myhosts un piešķir katras rindas saturu mainīgajam resursdatoram, kas pēc tam tiek nodots 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

Lasīt arī :

  1. Uzziniet čaulas skriptu: ceļvedis no iesācējiem līdz sistēmas administratoram
  2. 5 čaulas skripti, lai uzzinātu čaulas programmēšanu

Failu sistēmas problēmu novēršana

Lai gan Linux ir ļoti stabila operētājsistēma, ja tā kāda iemesla dēļ (piemēram, strāvas padeves pārtraukuma dēļ) avarē, viena (vai vairākas) jūsu failu sistēmas netiks pareizi atvienotas un tādējādi automātiski tiks pārbaudītas kļūdas, kad Linux tiek restartēts.

Turklāt katru reizi, kad sistēma sāk darboties normālas sāknēšanas laikā, tā pirms to uzstādīšanas vienmēr pārbauda failu sistēmu integritāti. Abos gadījumos to veic, izmantojot rīku ar nosaukumu fsck (“ failu sistēmas pārbaude ”).

fsck pārbaudīs ne tikai failu sistēmu integritāti, bet arī mēģinās labot korumpētas failu sistēmas, ja to saņems norādījums. Atkarībā no bojājuma smaguma fsck var gūt panākumus vai nē; kad tas notiek, atgūtās failu daļas tiek ievietotas direktorijā zaudētie + atrasti , kas atrodas katras failu sistēmas saknē.

Visbeidzot, jāatzīmē, ka pretrunas var rasties arī tad, ja mēģinām noņemt USB disku, kad operētājsistēma joprojām tajā raksta, un pat var izraisīt aparatūras bojājumus.

Fsck pamata sintakse ir šāda:

# fsck [options] filesystem

Lai pārbaudītu failu sistēmu ar fsck, vispirms tā ir jānoņem.

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

Bez karoga -y mēs varam izmantot opciju -a , lai automātiski salabotu failu sistēmas, neuzdodot nekādus jautājumus, un piespiedu kārtā pārbaudīt pat tad, ja failu sistēma izskatās tīra.

# fsck -af /dev/sdg1

Ja mūs interesē tikai kļūda (pagaidām neko nemēģinot novērst), mēs varam palaist fsck ar opciju -n , kas failu sistēmas problēmas izvadīs standarta izvadē.

# fsck -n /dev/sdg1

Atkarībā no kļūdu ziņojumiem fsck izvadē, mēs zināsim, vai mēs varam mēģināt paši atrisināt problēmu vai arī sazināties ar inženieru komandām, lai veiktu papildu aparatūras pārbaudes.

Kopsavilkums

Esam nonākuši šīs 10 rakstu sērijas beigās, kur esam mēģinājuši aptvert pamata domēna kompetences, kas nepieciešamas, lai nokārtotu LFCS eksāmenu.

Acīmredzamu iemeslu dēļ nav iespējams aplūkot katru atsevišķu šo tēmu aspektu vienā apmācībā, un tāpēc mēs ceram, ka šie raksti ir novirzījuši jūs uz pareizā ceļa, lai pats izmēģinātu jaunas lietas un turpinātu mācīties.

Ja jums ir kādi jautājumi vai komentāri, tie vienmēr tiek laipni gaidīti - tāpēc nevilcinieties nomest mums līniju, izmantojot zemāk esošo veidlapu!