Pagsabot ug Pagkat-on Basic Shell Scripting ug Linux Filesystem Troubleshooting - Bahin 10


Gilusad sa Linux Foundation ang LFCS nga sertipikasyon (Linux Foundation Certified Sysadmin), usa ka bag-ong inisyatibo kansang katuyoan mao ang pagtugot sa mga indibidwal bisan asa (ug bisan asa) nga makakuha og sertipikasyon sa sukaranan ngadto sa tungatunga. suporta sa operasyon para sa mga sistema sa Linux, nga naglakip sa pagsuporta sa pagpadagan sa mga sistema ug serbisyo, uban sa kinatibuk-ang pagmonitor ug pagtuki, lakip na ang maalamong paghimog desisyon kon bahin sa pagpasaka sa mga isyu ngadto sa mga top support teams.

Tan-awa ang mosunod nga video nga naggiya kanimo sa usa ka pasiuna sa Linux Foundation Certification Program.

Kini ang katapusan nga artikulo (Bahin 10) sa karon nga 10-tutorial taas nga serye. Niini nga artikulo mag-focus kami sa batakang shell scripting ug pag-troubleshoot sa Linux file system. Ang duha ka mga hilisgutan gikinahanglan alang sa LFCS certification exam.

Pagsabot sa mga Terminal ug Shell

Klarohon una nato ang pipila ka mga konsepto.

  1. Ang shell maoy usa ka programa nga nagkuha ug mga sugo ug naghatag niini ngadto sa operating system nga ipatuman.
  2. Ang terminal kay usa ka programa nga nagtugot kanato isip mga end user nga makig-interact sa shell. Usa ka pananglitan sa terminal mao ang GNOME terminal, sama sa gipakita sa ubos nga hulagway.

Sa una natong pagsugod sa usa ka kabhang, nagpresentar kini og command prompt (nailhan usab nga command line), nga nagsulti kanato nga ang kabhang andam na nga magsugod sa pagdawat sa mga sugo gikan sa iyang standard input device, nga kasagaran ang keyboard.

Mahimo nimong hisgotan ang laing artikulo niini nga serye (Gamita ang Sugo sa Paghimo, Pag-edit, ug Pagmaniobra sa mga file - Bahin 1) aron marepaso ang pipila ka mapuslanong mga sugo.

Naghatag ang Linux og lainlaing mga kapilian alang sa mga kabhang, ang mosunod mao ang labing kasagaran:

Ang Bash nagpasabot sa Bourne Again SHell ug mao ang default shell sa GNU Project. Naglakip kini sa mapuslanon nga mga bahin gikan sa Korn shell (ksh) ug C shell (csh), nga nagtanyag daghang mga pagpaayo sa parehas nga oras. Kini ang default shell nga gigamit sa mga distribusyon nga nasakup sa LFCS certification, ug kini ang shell nga among gamiton sa kini nga panudlo.

Ang Bourne SHell mao ang labing karaan nga kabhang ug busa nahimong default nga kabhang sa daghang mga operating system nga sama sa UNIX sulod sa daghang katuigan.

Ang Korn SHell usa ka Unix shell nga gimugna ni David Korn sa Bell Labs sa sayong bahin sa 1980s. Nahiuyon kini sa kabhang sa Bourne ug adunay daghang bahin sa kabhang C.

Ang usa ka script sa shell wala’y lain ug wala’y kulang sa usa ka text file nga nahimo nga usa ka executable nga programa nga naghiusa sa mga mando nga gipatuman sa kabhang sa sunod-sunod.

Basic Shell Scripting

Sama sa gihisgutan sa sayo pa, ang usa ka shell script natawo isip usa ka yano nga text file. Sa ingon, mahimo ug ma-edit gamit ang among gusto nga editor sa teksto. Mahimo nimong hunahunaon ang paggamit sa vi/m (tan-awa ang Paggamit sa vi Editor - Bahin 2 niini nga serye), nga adunay pagpasiugda sa syntax alang sa imong kasayon.

Isulat ang mosunud nga mando aron makahimo usa ka file nga ginganlag myscript.sh ug pindota ang Enter.

# vim myscript.sh

Ang pinakaunang linya sa script sa shell kinahanglan nga ingon sa mosunod (nailhan usab nga shebang).

#!/bin/bash

Kini \gisulti sa operating system ang ngalan sa tighubad nga kinahanglan gamiton sa pagpadagan sa teksto nga nagsunod.

Karon na ang panahon aron idugang ang among mga mando. Atong maklaro ang katuyoan sa matag sugo, o ang tibuok script, pinaagi sa pagdugang usab sa mga komento. Timan-i nga ang kabhang wala magtagad sa mga linya nga nagsugod sa usa ka pound sign # (pagpatin-aw nga mga komentaryo).

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

Kung ang script gisulat ug na-save, kinahanglan naton kini himuon nga ma-executable.

# chmod 755 myscript.sh

Sa dili pa ipadagan ang atong script, kinahanglan natong isulti ang pipila ka pulong mahitungod sa PATH environment variable. Kon kita modagan,

echo $PATH

gikan sa command line, atong makita ang mga sulod sa PATH: usa ka colon-separated list sa mga direktoryo nga pangitaon kon atong isulod ang ngalan sa usa ka executable program. Gitawag kini nga environment variable tungod kay kabahin kini sa shell environment – usa ka set sa impormasyon nga mahimong magamit alang sa shell ug sa iyang anak nga proseso sa dihang ang shell unang gisugdan.

Kung mag-type kita ug command ug mopindot sa Enter, pangitaon sa shell ang tanang direktoryo nga nalista sa PATH variable ug ipatuman ang unang higayon nga makita. Atong tan-awon ang usa ka pananglitan,

Kung adunay duha ka executable file nga adunay parehas nga ngalan, usa sa /usr/local/bin ug lain sa /usr/bin, ang usa sa una nga direktoryo ipatuman. una, samtang ang usa dili tagdon.

Kung wala pa namo ma-save ang among script sa sulod sa usa sa mga direktoryo nga nalista sa PATH variable, kinahanglan namon nga idugang ang ./ sa ngalan sa file aron mahimo kini. Kung dili, mahimo naton kini dagan sama sa atong buhaton sa usa ka regular nga mando.

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

Bisan kanus-a kinahanglan nimo nga ipiho ang lainlaing mga kurso sa aksyon nga himuon sa usa ka script sa kabhang, ingon resulta sa kalampusan o kapakyasan sa usa ka mando, imong gamiton ang kon pagtukod aron mahibal-an ang ingon nga mga kondisyon. Ang sukaranan nga syntax niini mao ang:

if CONDITION; then 
	COMMANDS;
else
	OTHER-COMMANDS 
fi

Diin ang KONDISYON mahimong usa sa mosunod (ang kasagarang mga kondisyon lang ang gikutlo dinhi) ug motimbang-timbang sa tinuod kung:

  1. [ -usa ka payl ] → file anaa.
  2. [ -d file ] → file anaa ug usa ka direktoryo.
  3. [ -f file ] →file anaa ug usa ka regular nga file.
  4. [ -u file ] →file anaa ug ang SUID (set user ID) bit kay gitakda.
  5. [ -g file ] →file anaa ug ang SGID bit niini gitakda.
  6. [ -k file ] →file anaa ug ang sticky bit niini gibutang.
  7. [ -r file ] →ang file anaa ug mabasa.
  8. [ -s file ]→ file anaa ug walay sulod.
  9. [ -w file ]→file anaa ug masulat.
  10. [ -x file ] tinuod kung adunay file ug ma-executable.
  11. [ string1 = string2 ] → managsama ang mga kuwerdas.
  12. [ string1 != string2 ] →dili managsama ang mga kuwerdas.

[ int1 op int2 ] kinahanglang kabahin sa nag-unang listahan, samtang ang mga butang nga mosunod (pananglitan, -eq –> tinuod kon int1 katumbas sa int2.) kinahanglan usa ka “bata” nga lista sa [ int1 op int2 ] diin op mao ang usa sa mosunod nga mga operator sa pagtandi.

  1. -eq –> tinuod kon ang int1 katumbas sa int2.
  2. -ne –> tinuod kung ang int1 dili katumbas sa int2.
  3. -lt –> tinuod kon int1 mas ubos kay sa int2.
  4. -le –> tinuod kon ang int1 mas ubos o katumbas sa int2.
  5. -gt –> tinuod kon int1 mas dako kay sa int2.
  6. -ge –> tinuod kon ang int1 mas dako o katumbas sa int2.

Kini nga loop nagtugot sa pagpatuman sa usa o daghan pa nga mga sugo alang sa matag bili sa usa ka listahan sa mga bili. Ang sukaranan nga syntax niini mao ang:

for item in SEQUENCE; do 
		COMMANDS; 
done

Diin ang item kay generic nga variable nga nagrepresentar sa matag bili sa SEQUENCE atol sa matag pag-uli.

Kini nga loop nagtugot sa pagpatuman sa usa ka serye sa mga nagbalik-balik nga mga sugo basta ang kontrol nga sugo mopatuman nga adunay exit status nga katumbas sa zero (malampuson). Ang sukaranan nga syntax niini mao ang:

while EVALUATION_COMMAND; do 
		EXECUTE_COMMANDS; 
done

Diin ang EVALUATION_COMMAND mahimong bisan unsa nga (mga) sugo nga mogawas nga adunay kalampusan (0) o kapakyasan (gawas sa 0) status, ug EXECUTE_COMMANDS mahimong bisan unsa nga programa, script o kabhang nga pagtukod, lakip ang uban pang mga nested loops.

Atong ipakita ang paggamit sa kon construct ug ang for loop sa mosunod nga pananglitan.

Maghimo kita og file nga adunay lista sa mga serbisyo nga gusto namong bantayan sa usa ka pagtan-aw.

# cat myservices.txt

sshd
mariadb
httpd
crond
firewalld

Ang among shell script kinahanglan nga hitsura.

#!/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). Ang for loop nagbasa sa myservices.txt file usa ka elemento sa LIST matag higayon. Kana nga usa ka elemento gipaila sa generic nga variable nga ginganlan og serbisyo. Ang LIST gipuno sa output sa,

# cat myservices.txt

2). Ang sugo sa ibabaw gilakip sa mga parentheses ug giunhan sa usa ka timaan sa dolyar aron ipakita nga kini kinahanglan nga susihon aron mapuno ang LIST nga atong usbon.

3). Alang sa matag elemento sa LIST (nagpasabot sa matag instance sa service variable), ang mosunod nga command ipatuman.

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

Niining higayona kinahanglan namong unahon ang among generic nga variable (nga nagrepresentar sa matag elemento sa LIST) nga adunay usa ka timaan sa dolyar aron ipakita nga kini usa ka variable ug busa ang kantidad niini sa matag pag-uli kinahanglan gamiton. Ang output dayon ipa-pipe sa grep.

Ang –quiet nga bandila gigamit aron mapugngan ang grep nga ipakita sa screen ang mga linya diin makita ang pulong nga running. Kung mahitabo kana, ang sugo sa ibabaw magbalik ug exit status nga 0 (girepresentar sa $? sa if construct), sa ingon nagpamatuod nga ang serbisyo nagdagan.

Ang exit status nga lahi kay sa 0 (nagpasabot nga ang word running wala makita sa output sa systemctl status $service) nagpakita nga ang serbisyo dili nagdagan.

Mahimo namong mopadayon ug usa ka lakang ug susihon kung adunay myservices.txt sa dili pa mosulay sa pagsulod sa for loop.

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

Mahimo nimong ipadayon ang usa ka lista sa mga host sa usa ka text file ug mogamit usa ka script aron mahibal-an matag karon ug unya kung kini pingable o dili (bati nga gawasnon nga ilisan ang mga sulud sa myhosts ug sulayi ang imong kaugalingon ).

Ang read shell built-in command nagsulti sa while loop sa pagbasa sa myhosts linya por linya ug nag-assign sa sulod sa matag linya ngadto sa variable host, nga ipasa ngadto sa ping command.

#!/bin/bash

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

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

Basaha Usab:

  1. Pagkat-on sa Shell Scripting: Usa ka Giya gikan sa Newbies ngadto sa System Administrator
  2. 5 Shell Scripts para Makat-on sa Shell Programming

Pag-troubleshoot sa Filesystem

Bisan kung ang Linux usa ka lig-on kaayo nga operating system, kung kini nahagsa sa usa ka hinungdan (pananglitan, tungod sa pagkawala sa kuryente), usa (o daghan pa) sa imong mga file system dili ma-unmount sa husto ug sa ingon awtomatiko nga susihon kung adunay mga sayup kung ang Linux gi-restart.

Dugang pa, sa matag higayon nga ang sistema mag-boot sa panahon sa usa ka normal nga boot, kanunay nga susihon ang integridad sa mga filesystem sa dili pa kini i-mount. Sa duha ka kaso kini gihimo gamit ang himan nga ginganlag fsck (\file system check”).

Ang fsck dili lang magsusi sa integridad sa mga file system, apan mosulay usab sa pag-ayo sa mga dunot nga file system kung gisugo sa pagbuhat niini. Depende sa kagrabe sa kadaot, ang fsck mahimong molampos o dili; kung mahitabo na, ang nabawi nga mga bahin sa mga file ibutang sa nawala+nakaplagan nga direktoryo, nga nahimutang sa gamut sa matag file system.

Katapusan apan dili labing gamay, kinahanglan natong timan-an nga ang mga panagsumpaki mahimo usab nga mahitabo kung atong sulayan ang pagtangtang sa usa ka USB drive kung ang operating system nagsulat pa niini, ug mahimong moresulta pa sa kadaot sa hardware.

Ang sukaranan nga syntax sa fsck mao ang mosunod:

# fsck [options] filesystem

Aron masusi ang usa ka filesystem nga adunay fsck, kinahanglan una natong i-unmount kini.

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

Gawas sa -y nga bandera, mahimo namong gamiton ang -a nga opsyon para awtomatik nga ayohon ang mga file system nga walay pangutana, ug pugson ang tseke bisan pag limpyo ang filesystem.

# fsck -af /dev/sdg1

Kung interesado lang kami nga mahibal-an kung unsa ang sayup (nga wala’y pagsulay sa pag-ayo sa bisan unsang butang sa pagkakaron) mahimo namon nga ipadagan ang fsck nga adunay kapilian nga -n, nga magpagawas sa mga isyu sa filesystem sa standard nga output.

# fsck -n /dev/sdg1

Depende sa mga mensahe sa sayup sa output sa fsck, mahibal-an namon kung mahimo ba namon nga sulayan nga sulbaron ang isyu sa among kaugalingon o ipataas kini sa mga team sa engineering aron mahimo ang dugang nga pagsusi sa hardware.

Summary

Miabot na kami sa kataposan niining 10-artikulo nga serye diin misulay sa pagtabon sa sukaranang mga kahanas sa natad nga gikinahanglan aron makapasar sa LFCS nga eksaminasyon.

Alang sa klaro nga mga hinungdan, dili posible nga tabonan ang matag usa nga aspeto sa kini nga mga hilisgutan sa bisan unsang usa ka panudlo, ug kana ang hinungdan ngano nga nanghinaut kami nga kini nga mga artikulo nagbutang kanimo sa husto nga dalan aron sulayan ang mga bag-ong butang sa imong kaugalingon ug magpadayon sa pagkat-on.

Kung naa kay pangutana o komento, welcome sila kanunay - busa ayaw pagpanuko sa paghulog kanamo sa usa ka linya pinaagi sa porma sa ubos!