Esasy gabyk skriptine we Linux faýl ulgamynyň näsazlyklaryna düşünmek we öwrenmek - 10-njy bölüm


Linux gaznasy, LFCS şahadatnamasyny ( Linux gaznasynyň kepillendirilen Sysadmin ) işe girizdi, maksady hemme ýerde (we islendik ýerde) şahsyýetlere aralyk derejesinde sertifikat almaga rugsat bermek. Linux ulgamlary üçin amaly goldaw, işleýän ulgamlary we hyzmatlary goldamak, umumy gözegçilik we derňew bilen birlikde, ýokary goldaw toparlaryna meseläni gozgamak meselesinde akylly karar bermek.

Linux gaznasynyň sertifikatlaşdyryş programmasy bilen tanyşdyrýan aşakdaky wideo barlaň.

Bu, häzirki 10 sapakly uzyn seriýanyň iň soňky makalasy (10-njy bölüm). Bu makalada esasy gabyk skriptlerine we Linux faýl ulgamlarynyň näsazlyklaryny düzmäge üns bereris. Iki mowzuk hem LFCS kepilnama synagy üçin zerurdyr.

Terminallara we gabyklara düşünmek

Ilki bilen birnäçe düşünjäni aýdyňlaşdyralyň.

  1. Gabyk, buýruklary alýan we ýerine ýetirilmeli operasiýa ulgamyna berýän programma.
  2. Terminal, ahyrky ulanyjylar hökmünde gabyk bilen aragatnaşyk saklamaga mümkinçilik berýän programma. Terminalyň bir mysaly, aşakdaky suratda görkezilişi ýaly GNOME terminalydyr.

Ilki bilen gabygy işe girizenimizde, gabygyň adaty klawiatura bolan adaty giriş enjamyndan buýruklary kabul edip başlamaga taýýardygyny aýdýan buýruk buýrugyny (buýruk setiri hem diýilýär) hödürleýär.

Käbir peýdaly buýruklary gözden geçirmek üçin bu seriýadaky başga bir makala ýüz tutup bilersiňiz (Faýllary döretmek, redaktirlemek we dolandyrmak üçin buýrugy ulanyň - 1-nji bölüm).

Linux gabyklar üçin birnäçe wariant hödürleýär, aşakdakylar iň köp ýaýran:

Baş Bourne Again SHell diýmekdir we GNU Taslamasynyň deslapky gabygydyr. Korn gabygyndan (ksh) we C gabygyndan (csh) peýdaly aýratynlyklary öz içine alýar, şol bir wagtyň özünde birnäçe gowulaşmagy hödürleýär. Bu, LFCS kepilnamasynda görkezilen paýlamalar tarapyndan ulanylýan deslapky gabyk, we bu gollanmada ulanjak gabygymyz.

Bourne SHell iň köne gabyk, şonuň üçin köp ýyl bäri UNIX ýaly köp operasiýa ulgamynyň deslapky gabygy bolup durýar.

Korn SHell 1980-nji ýyllaryň başynda Deýwid Korn tarapyndan Bell Labs-da işlenip düzülen Unix gabygydyr. Bourne gabygy bilen yza gabat gelýär we C gabygynyň köp aýratynlyklaryny öz içine alýar.

Gabyk skripti, gabyk tarapyndan birin-birin ýerine ýetirilýän buýruklary birleşdirýän ýerine ýetirilýän programma öwrülen tekst faýlyndan başga zat däl.

Esasy gabyk skripti

Öň bellenip geçilişi ýaly, gabyk skripti ýönekeý tekst faýly hökmünde dünýä inýär. Şeýlelik bilen, islenýän tekst redaktorymyzy ulanyp döredip we redaktirläp bolýar. Siziň amatlylygyňyz üçin sintaksis aýratynlygyny görkezýän vi/m (vi Redaktoryň ulanylyşyna serediň - bu seriýanyň 2-nji bölümine serediň) ulanmagy göz öňünde tutup bilersiňiz.

Myscript.sh atly faýl döretmek üçin aşakdaky buýrugy ýazyň we Enter basyň.

# vim myscript.sh

Gabyk skriptiniň birinji setiri aşakdaky ýaly bolmaly ( shebang hem diýilýär).

#!/bin/bash

Operasiýa ulgamyna indiki teksti işletmek üçin ulanylmaly terjimeçiniň adyny\ aýdýar .

Indi buýruklarymyzy goşmagyň wagty geldi. Şeýle hem teswir goşmak bilen her buýrugyň ýa-da tutuş skriptiň maksadyny aýdyňlaşdyryp bileris. Gabykda funt belgisi # (düşündirişli düşündirişler) bilen başlanýan setirleri äsgermezlik edýändigine üns beriň.

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

Scriptazgy ýazylyp, ýatda saklanandan soň, ony ýerine ýetirip bileris.

# chmod 755 myscript.sh

Scriptazgylarymyzy işletmezden ozal, PATH daşky gurşaw üýtgeýjisi barada birnäçe söz aýtmalydyrys. Eger ylgasak,

echo $PATH

buýruk setirinden, ýerine ýetirip boljak programmanyň adyny girizenimizde gözlenýän PATH: sütün bilen bölünen kataloglaryň mazmunyny göreris. Gabyk gurşawynyň bir bölegi bolany üçin, daşky gurşaw üýtgeýjisi diýilýär - gabyk ilkinji gezek işe başlanda, gabyk we onuň çagasy üçin elýeterli maglumatlar toplumy.

Buýruk ýazanymyzda we Enter basanymyzda, gabyk PATH üýtgeýjisinde görkezilen ähli kataloglarda gözlenýär we tapylan ilkinji mysaly ýerine ýetirýär. Geliň, bir mysal göreliň,

Birmeňzeş at bilen ýerine ýetirilip bilinýän iki faýl bar bolsa, biri /usr/local/bin , beýlekisi /usr/bin bolsa, birinji katalogdaky biri ýerine ýetiriler. ilki bilen beýlekisi äsgerilmez.

Scriptazgylarymyzy PATH üýtgeýjisinde görkezilen kataloglaryň birinde saklamadyk bolsak, ýerine ýetirmek üçin faýlyň adyna ./ goşmalydyrys. Otherwiseogsam, adaty buýruk bilen edişimiz ýaly işledip bileris.

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

Haçan-da bir buýrugyň şowly bolmagy ýa-da şowsuzlygy sebäpli gabyk skriptinde edilmeli dürli hereketleri görkezmeli bolanyňyzda, şeýle şertleri kesgitlemek üçin if konstruksiýasyny ulanarsyňyz. Esasy sintaksis:

if CONDITION; then 
	COMMANDS;
else
	OTHER-COMMANDS 
fi

Nirede ŞERT aşakdakylardan biri bolup biler (diňe şu ýerde iň ýygy-ýygydan şertler getirilýär) we haçan dogry bolsa baha berilýär:

  1. [-a faýl] → faýl bar.
  2. [-d faýl] → faýl bar we katalogdyr.
  3. [-f faýl] → faýl bar we adaty bir faýl.
  4. [-u faýly] → faýly bar we SUID (ulanyjy şahsyýetini kesgitlemek) biti düzüldi.
  5. [-g faýly] → faýly bar we SGID biti düzüldi.
  6. [-k faýly] → faýly bar we ýelmeşýän biti düzüldi.
  7. [-r faýl] → faýl bar we okalýar.
  8. [-s faýly] → faýl bar we boş däl.
  9. [-w faýly] → faýl bar we ýazyp bolýar.
  10. [-x faýl] faýl bar bolsa we ýerine ýetirip bolýan bolsa dogry.
  11. [string1=string2] → setirler deňdir.
  12. [string1!=string2] → setirler deň däl.

[int1 op int2] öňki sanawyň bir bölegi bolmaly, yzyndaky zatlar (mysal üçin, -eq -> int1 int2 deňdir.) int1 op int2 ] sanawyndaky çagalar sanawy bolmaly aşakdaky deňeşdirme operatorlaryndan biridir.

  1. -eq -> int1 int2 bilen deň bolsa dogry.
  2. -ne -> int1 int2 bilen deň däl bolsa dogry.
  3. -lt -> int1 int2-den az bolsa dogry.
  4. -le -> int1 int2-den az ýa-da deň bolsa dogry.
  5. -gt -> int1 int2-den uly bolsa dogry.
  6. -ge -> int1 int2-den uly ýa-da deň bolsa dogry.

Bu aýlaw, bahalaryň sanawynda her bir baha üçin bir ýa-da birnäçe buýrugy ýerine ýetirmäge mümkinçilik berýär. Esasy sintaksis:

for item in SEQUENCE; do 
		COMMANDS; 
done

Bu ýerde element her gezek gaýtalanylanda SEQUENCE daky her bir bahany görkezýän umumy üýtgeýji.

Bu aýlaw, dolandyryş buýrugy nola deň bolan (üstünlikli) ýerine ýetirýänçä, gaýtalanýan buýruklaryň bir toparyny ýerine ýetirmäge mümkinçilik berýär. Esasy sintaksis:

while EVALUATION_COMMAND; do 
		EXECUTE_COMMANDS; 
done

Nirede BAHALANMAK_COMMAND üstünlik ( 0 ) ýa-da şowsuzlyk ( 0-dan başga) ýagdaýy we EXECUTE_COMMANDS bilen çykyp bilýän islendik buýruk (lar) bolup biler. beýleki öýjükli aýlawlary goşmak bilen islendik programma, skript ýa-da gabyk gurluşy bolup biler.

Aşakdaky mysal bilen if we konstruksiýanyň ulanylyşyny görkezeris.

Geliň, bir göz bilen gözegçilik etmek isleýän hyzmatlarymyzyň sanawy bolan bir faýl döredeliň.

# cat myservices.txt

sshd
mariadb
httpd
crond
firewalld

Gabyk skriptimiz ýaly bolmaly.

#!/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). Aýlaw üçin bir gezekde LIST-iň bir elementi myservices.txt faýly okalýar. Singleeke-täk element hyzmat diýilýän umumy üýtgeýji bilen kesgitlenýär. Sanawda çykyş,

# cat myservices.txt

2). Aboveokardaky buýruk gabygyň içine salynýar we öňünden gaýtalanjak sanawymyzy köpeltmek üçin baha berilmelidigini görkezmek üçin dollar belgisi berilýär.

3). Sanawyň her bir elementi üçin (hyzmat üýtgeýjisiniň her mysalyny aňladýar) aşakdaky buýruk ýerine ýetiriler.

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

Bu gezek üýtgeýjini görkezmek üçin umumy üýtgeýjimizden ( LIST daky her bir elementi aňladýar) dollar belgisi bilen öňe geçmeli, şeýlelik bilen her gaýtalama bahasy ulanylmaly. Soňra çykyş grep üçin turba geçirilýär.

ietuwaş baýdagy, grep işleýän sözüň görünýän setirlerini ekrana görkezmezligi üçin ulanylýar. Şeýle bolanda, ýokardaky buýruk 0 (eger gurlan bolsa $? bilen görkezilýär) çykyş ýagdaýyny yzyna gaýtaryp berýär, şeýlelik bilen hyzmatyň işleýändigini tassyklaýar.

0 dan tapawutly çykyş ýagdaýy ( systemctl statusy $hyzmaty çykyşynda sözi işlemeýär diýmek) hyzmatyň ýokdugyny görkezýär ylgaýar.

Bir ädim öňe gidip, aýlaw üçin girmäge synanyşmazdan ozal myservices.txt barlygyny barlap bileris.

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

Tekst faýlynda ýer eýeleriniň sanawyny ýöretmek we her wagt, soňundan olaryň pinglidigini ýa-da ýokdugyny kesgitlemek üçin skript ulanyp bilersiňiz ( myhosts mazmunyny çalşyp, özüňizi synap görüň) ).

Içerki okalýan gabyk buýrugy, myhosts setirini setir boýunça okamagy we her setiriň mazmunyny üýtgeýän hosta bellär, soň bolsa ping buýrugyna geçiriler.

#!/bin/bash

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

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

Şeýle hem okaň :

  1. Shell skriptini öwreniň: Täze doglan çagalardan ulgam dolandyryjysyna gollanma
  2. Gabyk programmirlemesini öwrenmek üçin 5 sany gabyk skripti

Faýl ulgamynyň näsazlyklaryny düzeltmek

Linux gaty durnukly operasiýa ulgamy bolsa-da, haýsydyr bir sebäbe görä (meselem, elektrik togunyň kesilmegi sebäpli) ýykylsa, faýl ulgamlaryňyzyň bir (ýa-da köpüsi) dogry çykarylmaz we şeýlelik bilen Linux-da ýalňyşlyklar awtomatiki barlanar. gaýtadan açylýar.

Mundan başga-da, ulgam her gezek adaty bir ýükleme wagtynda ýüklenende, faýl ulgamlaryny gurmazdan ozal hemişe barlygyny barlaýar. Iki ýagdaýda-da bu fsck (\ faýl ulgamyny barlamak atly gural bilen ýerine ýetirilýär.

fsck diňe bir faýl ulgamlarynyň bitewiligini barlamaz, şeýle hem buýruk berlen ýagdaýynda bozulan faýl ulgamlaryny bejermäge synanyşar. Zyýanlaryň agyrlygyna baglylykda fsck üstünlik gazanyp biler ýa-da bolmaz; ýerine ýetirilende, faýllaryň dikeldilen bölekleri her faýl ulgamynyň kökünde ýerleşýän ýitirilen + tapylan katalogyna ýerleşdirilýär.

Iň soňkusy, operasiýa ulgamy henizem hat ýazýarka USB diskini aýyrjak bolsak, hatda enjamlaryň zaýalanmagyna sebäp bolup bilse, gapma-garşylyklaryň hem bolup biljekdigini bellemelidiris.

Fsck-iň esasy sintaksisi aşakdakylar:

# fsck [options] filesystem

Fsck bilen faýl ulgamyny barlamak üçin ilki bilen aýyrmaly.

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

-y baýdagyndan başga-da, hiç hili sorag bermezden faýl ulgamlaryny awtomatiki bejermek we faýl ulgamy arassa görünse-de barlamaga mejbur etmek üçin -a opsiýasyny ulanyp bileris.

# fsck -af /dev/sdg1

Diňe nämäniň nämedigini bilmek isleýän bolsak (häzirlikçe hiç zady düzetjek bolman) fsck-i -n opsiýasy bilen işledip bileris, bu faýl ulgamynyň meselelerini adaty çykyşlara çykarar.

# fsck -n /dev/sdg1

Fsck-iň çykyşyndaky säwlik habarlaryna baglylykda, meseläni özümiz çözmäge synanyşyp biljekdigimizi ýa-da enjamda has köp barlag geçirmek üçin in engineeringenerçilik toparlaryna iberip biljekdigimizi bileris.

Gysgaça mazmun

LFCS ekzameninden geçmek üçin zerur bolan esasy domen başarnyklaryny ýapmaga synanyşan bu 10 makalaly seriýanyň soňuna ýetdik.

Belli bir sebäplere görä, bu mowzuklaryň her tarapyny ýekeje sapakda öz içine alyp bolmaýar we şonuň üçin bu makalalaryň sizi täze zatlary synap görmek we öwrenmegi dowam etdirmek üçin dogry ýolda goýandygyna umyt edýäris.

Soraglaryňyz ýa-da teswirleriňiz bar bolsa, olar elmydama hoş geldiňiz - şonuň üçin aşakdaky form arkaly bize bir setir goýmakdan çekinmäň!