Fahimta & Koyo Babban Rubutun Shell da Matsalar Tsarin Fayil na Linux - Kashi na 10


Gidauniyar Linux ta ƙaddamar da LFCS takaddun shaida (Linux Foundation Certified Sysadmin), sabon yunƙuri wanda manufarsa ita ce ba da damar mutane a ko'ina (da kuma ko'ina) don samun takaddun shaida na asali zuwa matsakaici. goyon bayan aiki don tsarin Linux, wanda ya haɗa da tallafawa tsarin aiki da ayyuka, tare da saka idanu gabaɗaya da nazari, da yanke shawara mai wayo idan aka zo batun tayar da batutuwa zuwa manyan ƙungiyoyin tallafi.

Duba bidiyon da ke gaba wanda ke jagorantar ku gabatarwa ga Shirin Takaddar Gidauniyar Linux.

Wannan ita ce labarin ƙarshe (Sashe na 10) na jerin dogayen koyarwa 10 na yanzu. A cikin wannan labarin za mu mai da hankali kan ainihin rubutun harsashi da kuma magance tsarin fayilolin Linux. Ana buƙatar duka batutuwa biyu don gwajin takaddun shaida na LFCS.

Fahimtar Terminals da Shells

Bari mu fayyace ƴan ra'ayoyi da farko.

    Harsashi shine shirin da ke ɗaukar umarni da ba da su ga tsarin aiki don aiwatar da su.
  1. Terminal shiri ne da ke ba mu a matsayin masu amfani da ƙarshen mu'amala da harsashi. Misali ɗaya na tasha shine tashar GNOME, kamar yadda aka nuna a hoton da ke ƙasa.

Lokacin da muka fara fara harsashi, yana gabatar da umarni da sauri (wanda kuma aka sani da layin umarni), wanda ke nuna mana cewa harsashi a shirye yake ya fara karɓar umarni daga na'urar shigar da daidaitattun bayanai, wanda galibi shine maballin.

Kuna iya komawa zuwa wani labarin a cikin wannan jerin (Yi amfani da Umurni don Ƙirƙiri, Shirya, da Sarrafa fayiloli - Sashe na 1) don duba wasu umarni masu amfani.

Linux yana ba da kewayon zaɓuɓɓuka don harsashi, waɗannan sune mafi yawanci:

Bash yana nufin Bourne Again SHell kuma shine tsohuwar harsashi na GNU Project. Ya ƙunshi fasali masu amfani daga Korn harsashi (ksh) da C harsashi (csh), yana ba da haɓaka da yawa a lokaci guda. Wannan ita ce tsohuwar harsashi da aka yi amfani da ita ta rarrabawar da aka rufe a cikin takaddun shaida na LFCS, kuma ita ce harsashi da za mu yi amfani da ita a cikin wannan koyawa.

Bourne SHell shine mafi tsufa harsashi don haka ya kasance tsohuwar harsashi na yawancin tsarin aiki na UNIX na shekaru masu yawa.

Korn SHell wani harsashi ne na Unix wanda David Korn ya kirkira a Bell Labs a farkon 1980s. Yana dacewa da baya-mai jituwa tare da harsashi na Bourne kuma ya haɗa da fasali da yawa na harsashi C.

Rubutun harsashi ba komai bane illa fayil ɗin rubutu da aka juya zuwa shirin aiwatarwa wanda ke haɗa umarni waɗanda harsashi ke aiwatarwa ɗaya bayan ɗaya.

Rubutun Shell na asali

Kamar yadda aka ambata a baya, an haifi rubutun harsashi azaman fayil ɗin rubutu bayyananne. Don haka, ana iya ƙirƙira da gyara ta ta amfani da editan rubutu da muka fi so. Kuna iya yin la'akari da yin amfani da vi/m (koma zuwa Amfani da Vi Edita - Sashe na 2 na wannan silsilar), wanda ke nuna ma'anar syntax don dacewa.

Buga umarni mai zuwa don ƙirƙirar fayil mai suna myscript.sh kuma danna Shigar.

# vim myscript.sh

Layin farko na rubutun harsashi dole ne ya kasance kamar haka (wanda kuma aka sani da shebang).

#!/bin/bash

Yana faɗar tsarin aiki sunan mai fassarar da ya kamata a yi amfani da shi don tafiyar da rubutun da ke biyo baya.

Yanzu lokaci ya yi da za mu ƙara umarnin mu. Za mu iya fayyace manufar kowane umarni, ko kuma gabaɗayan rubutun, ta ƙara sharhi kuma. Lura cewa harsashi ya yi watsi da waɗancan layin da suka fara da alamar fam # ( sharhin bayani).

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

Da zarar an rubuta rubutun kuma an adana shi, muna buƙatar sanya shi aiwatarwa.

# chmod 755 myscript.sh

Kafin gudanar da rubutun mu, muna buƙatar faɗi wasu kalmomi game da canjin yanayi PATH. Idan muka gudu,

echo $PATH

daga layin umarni, za mu ga abubuwan da ke cikin PATH: jerin kundayen adireshi da aka raba daga hanji da ake nema idan muka shigar da sunan shirin aiwatarwa. Ana kiransa canjin yanayi saboda yana cikin yanayin yanayin harsashi - jerin bayanan da ke samuwa ga harsashi da tafiyar da yara lokacin da aka fara fara harsashi.

Lokacin da muka buga umarni kuma danna Shigar, harsashi yana bincika duk kundayen adireshi da aka jera a cikin maballin PATH kuma yana aiwatar da misalin farko da aka samo. Bari mu ga misali,

Idan akwai fayiloli guda biyu masu aiwatarwa masu suna iri ɗaya, ɗaya a cikin /usr/local/bin da wani a cikin /usr/bin, za a aiwatar da ɗaya a cikin kundin adireshi na farko. na farko, yayin da sauran za a yi watsi da su.

Idan ba mu ajiye rubutun mu ba a cikin ɗaya daga cikin kundayen adireshi da aka jera a cikin m PATH, muna buƙatar saka ./ ga sunan fayil don aiwatar da shi. In ba haka ba, za mu iya gudanar da shi kamar yadda za mu yi tare da umarni na yau da kullum.

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

A duk lokacin da kuke buƙatar fayyace darussa daban-daban da za a ɗauka a cikin rubutun harsashi, sakamakon nasara ko gazawar umarni, za ku yi amfani da idan ginawa don ayyana irin waɗannan yanayi. Asalin tsarinsa shine:

if CONDITION; then 
	COMMANDS;
else
	OTHER-COMMANDS 
fi

Inda CONDITION zai iya zama ɗaya daga cikin waɗannan (kawai mafi yawan sharuɗɗan da aka ambata a nan) kuma ana kimanta gaskiya lokacin:

  1. [-fayil ] → akwai fayil.
  2. [ -d fayil ] → akwai fayil kuma jagora ne.
  3. [ -f fayil ] →fayil ya wanzu kuma fayil ne na yau da kullun.
  4. [ -u fayil ] →fayil ya wanzu kuma SUID (saitin ID na mai amfani) an saita bit.
  5. [ -g fayil ] →fayil ya wanzu kuma an saita bit na SGID.
  6. [ -k fayil ] →fayil yana wanzu kuma an saita ɗan ɗan leƙen sa.
  7. [ -r fayil ] →fayil ya wanzu kuma ana iya karantawa.
  8. [ -s fayil ]→ akwai fayil kuma ba fanko bane.
  9. [ -w fayil ]→fayil ya wanzu kuma ana iya rubutawa.
  10. [ -x fayil ] gaskiya ne idan fayil ya wanzu kuma ana iya aiwatarwa.
  11. [ string1 = string2 ] → igiyoyin suna daidai.
  12. [ string1 != string2 ] → igiyoyin ba daidai suke ba.

[ int1 op int2 ] yakamata su kasance cikin jerin da suka gabata, yayin da abubuwan da suka biyo baya (misali, -eq –> gaskiya ne idan int1 > daidai yake da int2.) yakamata ya zama jerin “yara” na [ int1 op int2] inda op yana ɗaya daga cikin masu yin kwatancen masu zuwa.

  1. -eq –> gaskiya ne idan int1 daidai yake da int2.
  2. -ne –> gaskiya idan int1 bai daidaita da int2 ba.
  3. -lt –> gaskiya idan int1 bai kai int2 ba.
  4. -le –> gaskiya idan int1 bai kai ko daidai da int2 ba.
  5. -gt –> gaskiya idan int1 ya fi int2 girma.
  6. -ge –> gaskiya idan int1 ya fi ko daidai da int2.

Wannan madauki yana ba da damar aiwatar da umarni ɗaya ko fiye don kowace ƙima a cikin jerin ƙima. Asalin tsarinsa shine:

for item in SEQUENCE; do 
		COMMANDS; 
done

Inda abu shine madaidaicin madaidaici wanda ke wakiltar kowace ƙima a cikin SEQUENCE yayin kowace maimaitawa.

Wannan madauki yana ba da damar aiwatar da jerin umarni masu maimaitawa muddin umarnin sarrafawa ya aiwatar tare da matsayin fita daidai da sifili (nasara). Asalin tsarinsa shine:

while EVALUATION_COMMAND; do 
		EXECUTE_COMMANDS; 
done

Inda EVALUATION_COMMAND zai iya zama kowane umarni (s) wanda zai iya fita tare da nasara (0) ko gazawa (ban da 0) matsayi, da EXECUTE_COMMANDS na iya zama kowane shiri, rubutun ko ginin harsashi, gami da sauran madaukai na gida.

Za mu nuna amfani da idan an gina shi da madauki tare da misali mai zuwa.

Bari mu ƙirƙiri fayil tare da jerin ayyukan da muke son saka idanu a kallo.

# cat myservices.txt

sshd
mariadb
httpd
crond
firewalld

Rubutun harsashi ya kamata yayi kama.

#!/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). Madaidaicin madauki yana karanta fayil ɗin myservices.txt kashi ɗaya na LIST a lokaci guda. Wannan kashi guda ɗaya ana nuna shi ta hanyar ma'auni mai ma'ana mai suna sabis. LIST yana cike da abubuwan fitarwa na,

# cat myservices.txt

2). Umurnin da ke sama yana ƙunshe a cikin bakan gizo kuma yana gaba da alamar dala don nuna cewa yakamata a kimanta ta don cika LIST ɗin da za mu sake maimaitawa.

3). Ga kowane kashi na LIST (ma'ana kowane misali na canjin sabis), za a aiwatar da umarni mai zuwa.

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

A wannan karon muna buƙatar gaba da mabambanta na mu (wanda ke wakiltar kowane nau'i a cikin LIST) tare da alamar dala don nuna ma'auni ne kuma don haka ya kamata a yi amfani da ƙimarsa a kowane juzu'i. Ana fitar da fitarwa zuwa grep.

Ana amfani da tutar – shiru don hana grep nunawa akan allon layin da kalmar da ke gudana ta bayyana. Lokacin da hakan ta faru, umarnin da ke sama yana dawo da matsayin fita na 0 (wakiltan $? a cikin idan an gina shi), don haka tabbatar da cewa sabis ɗin yana gudana.

Matsayin fita ya bambanta da 0 (ma'ana kalmar ba a samo shi a cikin fitarwa na systemctl status $service) yana nuna cewa ba sabis ɗin ba ne. gudu.

Za mu iya ci gaba mataki ɗaya don bincika wanzuwar myservices.txt kafin ma yunƙurin shigar da madauki.

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

Kuna so ku kula da jerin runduna a cikin fayil ɗin rubutu kuma kuyi amfani da rubutun don tantance kowane lokaci sannan ko suna iya yin pingable ko a'a (ji daɗin maye gurbin abubuwan da ke cikin myhosts kuma gwada kanku. ).

Umurnin da aka gina harsashi na karantawa yana gaya wa lokacin madauki don karanta layin myhosts ta layi kuma ya sanya abun ciki na kowane layi zuwa mai watsa shiri mai canzawa, wanda aka wuce zuwa umarnin 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

Karanta kuma:

  1. Koyi Rubutun Shell: Jagora daga Sabbi zuwa Mai Gudanar da Tsari
  2. 5 Rubutun Shell don Koyan Shirye-shiryen Shell

Matsalar tsarin fayil

Ko da yake Linux tsarin aiki ne mai tsayin daka, idan ya fadi saboda wasu dalilai (misali, saboda katsewar wutar lantarki), ɗayan (ko fiye) na tsarin fayil ɗinku ba za a buɗe su yadda ya kamata ba don haka za a bincika ta atomatik don kurakurai lokacin Linux. an sake farawa.

Bugu da kari, duk lokacin da tsarin ya yi takalmi a lokacin taya na al'ada, koyaushe yana bincika amincin tsarin fayilolin kafin hawa su. A cikin duka biyun ana yin wannan ta amfani da kayan aiki mai suna fsck (\duba tsarin fayil).

fsck ba wai kawai zai bincika amincin tsarin fayil ba, amma kuma zai yi ƙoƙarin gyara ɓarnar tsarin fayil idan an umarce shi da yin haka. Dangane da tsananin lalacewa, fsck na iya yin nasara ko a'a; idan ta yi, ana sanya sassan fayilolin da aka kwato a cikin kundin adireshi na ɓataccen + samu, wanda ke cikin tushen kowane tsarin fayil.

A ƙarshe amma ba kalla ba, dole ne mu lura cewa rashin daidaituwa kuma na iya faruwa idan muka yi ƙoƙarin cire kebul na USB lokacin da tsarin aiki ke rubuto masa, kuma yana iya haifar da lalacewar hardware.

Mahimmin fassarar fsck shine kamar haka:

# fsck [options] filesystem

Domin duba tsarin fayil tare da fsck, dole ne mu fara cire shi.

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

Bayan alamar -y, za mu iya amfani da zaɓin -a don gyara tsarin fayil ta atomatik ba tare da yin tambayoyi ba, kuma a tilasta rajistan koda lokacin da tsarin fayil ya yi kama da tsabta.

# fsck -af /dev/sdg1

Idan kawai muna da sha'awar gano abin da ba daidai ba (ba tare da ƙoƙarin gyara wani abu ba na lokaci) za mu iya gudanar da fsck tare da zaɓi na -n, wanda zai fitar da batutuwan tsarin fayil zuwa daidaitaccen fitarwa.

# fsck -n /dev/sdg1

Dangane da saƙon kuskure a cikin fitarwa na fsck, za mu san ko za mu iya ƙoƙarin magance matsalar da kanmu ko kuma ƙara shi zuwa ƙungiyoyin injiniya don yin ƙarin bincike kan kayan aikin.

Takaitawa

Mun isa ƙarshen wannan silsilar 10-10 inda muka yi ƙoƙarin rufe ainihin ƙwarewar yanki da ake buƙata don cin jarrabawar LFCS.

Don dalilai masu ma'ana, ba zai yiwu a rufe kowane bangare na waɗannan batutuwa ba a cikin kowane koyawa guda ɗaya, kuma shine dalilin da ya sa muke fatan waɗannan labaran sun sa ku kan hanya madaidaiciya don gwada sabbin abubuwa da kanku kuma ku ci gaba da koyo.

Idan kuna da wasu tambayoyi ko sharhi, koyaushe ana maraba da su - don haka kada ku yi shakka a sauke mu layi ta hanyar da ke ƙasa!