Suunake väljundvoog ümber. Suuna standardne sisend/väljund ja vead ümber. Vood, programmikanalid ja ümbersuunamised

Üks huvitavamaid ja kasulikud teemad Sest süsteemiadministraatorid ja uued kasutajad, kes alles hakkavad aru saama, kuidas terminaliga töötada – see on Linuxi sisend-/väljundvoogude ümbersuunamine. See terminali funktsioon võimaldab teil suunata käskude väljundi faili või faili sisu käsusisendisse, kombineerida käske ja moodustada käsukonveierid.

Käesolevas artiklis vaatleme, kuidas toimub I/O voo ümbersuunamine Linuxis, milliseid operaatoreid selleks kasutatakse ja kus seda kõike kasutada saab.

Kõik meie käivitatavad käsud annavad meile kolme tüüpi andmeid:

  • Käsu tulemus, tavaliselt kasutaja küsitud tekstiandmed;
  • Veateated - teavitavad käsu täitmise protsessist ja ilmnenud ootamatutest asjaoludest;
  • Tagastuskood on number, mis võimaldab hinnata, kas programm töötas õigesti.

Linuxis käsitletakse kõiki aineid failidena, sealhulgas sisendvoogusid linuxi väljund- failid. Igal distributsioonil on kolm peamist voofaili, mida programmid saavad kasutada. Need on määratletud kestaga ja identifitseeritud nende failikirjelduse numbriga:

  • STDIN või 0- see fail on seotud klaviatuuriga ja enamik käske saab siit töötamiseks andmeid;
  • STDOUT või 1- see on standardväljund, mis saadab programm kõik oma töö tulemused siia. See on seotud ekraaniga või täpsemalt terminaliga, milles programm töötab;
  • STDERR või 2- kõik veateated väljastatakse sellesse faili.

I/O ümbersuunamine võimaldab teil ühe neist failidest oma failiga asendada. Näiteks saate sundida programmi failist andmeid sisse lugema failisüsteem Klaviatuuri asemel saate vead väljastada pigem faili kui ekraanile jne. Seda kõike tehakse sümbolite abil "<" Ja ">" .

Suuna väljund faili ümber

Kõik on väga lihtne. Saate väljundi faili ümber suunata sümboli > abil. Näiteks salvestame top käsu väljundi:

top -bn 5 > top.log

Valik -b käivitab programmi mitteinteraktiivses vormis partiirežiim, ja n - kordab toimingut viis korda, et saada teavet kõigi protsesside kohta. Vaatame nüüd, mis kassiga juhtus:

Sümbol ">" kirjutab failist info üle, kui seal juba midagi on. Andmete lisamiseks lõppkasutusele ">>" . Näiteks suunake väljund ümber linuxi fail ka tipuks:

top -bn 5 >> top.log

Vaikimisi kasutatakse ümbersuunamiseks standardset väljundfaili deskriptorit. Kuid saate selle selgelt täpsustada. See käsk annab sama tulemuse:

top -bn 5 1>top.log

Suuna vead faili ümber

Veaväljundi faili ümbersuunamiseks peate selgelt määrama faili deskriptori, mida kavatsete ümber suunata. Vigade puhul on see number 2. Näiteks kui proovite pääseda ligi superkasutaja kataloogile, annab ls tõrketeate:

Standardvea saate ümber suunata järgmiselt failile:

ls -l /root/ 2> ls-error.log
$ cat ls-error.log

Andmete lisamiseks faili lõppu kasutage sama sümbolit:

ls -l /root/ 2>>ls-error.log

Suuna standardväljund ja vead faili ümber

Samuti saate kogu väljundi, vead ja standardväljundi ümber suunata ühte faili. Selleks on kaks võimalust. Esimene, vanem, on mõlema käepideme läbimine:

ls -l /root/ >ls-error.log 2>&1

Esiteks saadetakse käsu ls väljund esimest ümbersuunamismärki kasutades faili ls-error.log. Seejärel saadetakse kõik vead samasse faili. Teine meetod on lihtsam:

ls -l /root/ &> ls-error.log

Ümberkirjutamise asemel võite kasutada ka lisamist:

ls -l /root/ &>> ls-error.log

Standardne sisend failist

Enamik programme, välja arvatud teenused, saavad oma töö jaoks andmeid standardsisendi kaudu. Vaikimisi eeldab standardsisend sisendit klaviatuurilt. Kuid saate sundida programmi failist andmeid lugema operaatori abil "<" :

kass

Samuti saate väljundi kohe faili ümber suunata. Näiteks sorteerime loendit ümber:

sorteerida sort.väljund

Seega suuname sisendi/väljundi ühe käsuga linuxisse.

Tunnelite kasutamine

Saate töötada mitte ainult failidega, vaid suunata ka ühe käsu väljundi teise käsu sisendiks. See on väga kasulik keerukate toimingute tegemiseks. Näiteks kuvame viis hiljuti muudetud faili:

ls -lt | pea -n 5

Utiliidiga xargs saate käske kombineerida nii, et standardsisend edastatakse parameetritena. Näiteks kopeerime ühe faili mitmesse kausta:

kaja test/tmp/ | xargs -n 1 cp -v testfile.sh

Siin määrab suvand -n 1, et käsu kohta tuleb anda ainult üks parameeter, ja suvand -v cp võimaldab trükkida üksikasjalikku teavet liikumiste kohta. Teine kasulik käsk sellistel juhtudel on tee. See loeb andmeid standardne sisend ja kirjutab standardväljundisse või failidesse. Näiteks:

kaja "Tee töökatse" | tee fail1

Koos teiste käskudega saab neid kasutada keerukate mitme käsuga käskude loomiseks.

järeldused

Selles artiklis käsitlesime Linuxi I/O voo ümbersuunamise põhitõdesid. Nüüd teate, kuidas suunata väljund linuxi faili või väljund failist. See on väga lihtne ja mugav. Kui teil on küsimusi, küsige kommentaarides!

Ümbersuunamine toimub tavaliselt erimärgi ">" sisestamisega käskude vahele. Tavaliselt näeb süntaks välja selline:

Käsk1 > fail1

käivitab käsu1, kirjutades standardväljundi faili1.

Meeskond 1< файл1

käivitab käsu1, kasutades sisendallikana faili1 (klaviatuuri asemel).

Meeskond 1< файл1 >fail2

ühendab kaks varasemad versioonid. Käivitab käsu1 koos sisendiga failist1 ja väljundiga failist2

Konveierid

Torujuhtmed on mitme programmi võime koos töötada, kui ühe programmi väljund läheb otse teise programmi sisendisse ilma vahepealset ajutised failid. Süntaks:

meeskond1 | meeskond 2

Käivitab käsu1, kasutades selle väljundvoogu sisendvoona käsu2 täitmisel, mis võrdub kahe ümbersuunamise ja ajutise faili kasutamisega:

Command1 > TemporaryFile käsk2< ВременныйФайл rm ВременныйФайл

Hea näide käsukonveieritest on kaja kombineerimine teise käsuga, et saavutada interaktiivsus mitteinteraktiivsetes keskkondades, näiteks:

echo -e "Kasutajanimi\nParool" | ftp localhost

See käivitab kliendi, mis loob ühenduse kohaliku hostiga kasutajanimena, vajutab sisestusklahvi ja seejärel sisestab parooli Parool.

Ümbersuunamine standardsetesse failideskriptoritesse/-test

IN käsu kest UNIX, mis arenes välja Bourne'i kestast, saab kahte eelmist sammu täiustada, määrates numbri (failikirjelduse) vahetult enne ümbersuunamismärki. See number näitab, millist voogu ümbersuunamiseks kasutatakse. UNIX-il on järgmised standardsed sisend-/väljundvood:

Nt:

Käsk1 2 > fail1

C Shellist tuletatud käsukestides tuleb vastavalt süntaksireeglitele, et näidata voogu, kuhu ümbersuunamine tehakse, ümbersuunamismärgi järele lisada & märk.

Sageli kombineeritakse standardne veavoog standardse väljundvooga, nii et vigu ja tavalist programmiväljundit saab käsitleda koos. Nt:

Otsi / -nimi .profiil> tulemused.txt 2>&1

proovib leida kõik failid nimega .profile. Kui käivitate selle käsu ilma ümbersuunamisteta, suunab see otsingutulemused aadressile ja veateated (nt ebapiisavate juurdepääsuõiguste kohta kaitstud kataloogides otsimisel) aadressile. Vaikimisi täidab neid rolle konsool. Kui standardväljund suunatakse tulemuste faili, saadetakse vead ikkagi konsooli. Tagamaks, et nii vead kui ka otsingutulemused saadetakse faili results.txt, kombineeritakse standardsed vea- ja väljundvood kasutades 2>&1 .

Kirjutamine 2>&1 enne > ei tööta, sest kui tõlk loeb 2>&1 , ei tea see veel, kuhu standardväljundvoog ümber suunatakse, seega vea- ja väljundvooge ei liideta.

Kui kombineeritud tulemus tuleb teise programmi sisendisse suunata, siis jada 2>&1 peab olema konveieri märgi ees. Nt:

Otsi / -nimi .profile 2>&1 | vähem

Lihtsustatud käsuvorm:

Käsk>fail2>&1

näeb välja selline:

Käsk &> fail

Command>&fail

Konveieri kett

Ümbersuunamis- ja torustikukäsklusi saab aheldada, et luua keerukamaid käske, näiteks:

ls | grep ".sh" | sort>shlist

Hangib aktiivse kataloogi sisu loendi, mis filtreeritakse, jättes alles ainult sisaldavad read ".sh", siis see filtreeritud loend sorteeritakse leksikaalselt ja lõpptulemus pannakse faili shlist. Seda tüüpi konstruktsioone leidub sageli UNIXi shelliskriptides.

Ümbersuunamine mitmele tihvtile

Tavaline käsk võib käsu väljundi korraga mitmesse kohta ümber suunata. Näide:

Ls -lrt | tee fail1

juhib käsu standardväljundit ls -lrt(failide loend) nii konsoolis kui ka sees fail1.

Ümbersuunamine koos lisamisega

Käsukestas saate failile ümber suunata ja selle lõppu lisada. Sel juhul ei kustutata faili salvestatud teavet, vaid kõik uut teavet lisatakse selle faili lõppu. Süntaks:

Käsk1>> fail1

Manustatud dokument

Mõned kestad ja isegi rakendatud keeled (PHP), Perl, võimaldavad sisseehitatud dokumentide süntaksit (vt Heredoci süntaks), mis võimaldab teil suunata sisendvoo programmifailist endast, näiteks: kass « EOF Any tekst on siia paigutatud, sealhulgas Erisümbolid EOF

Manustatud dokumendi EOF lõpu lõplik signatuur (võib kasutada suvalist väärtust, kuid sageli kasutatakse EOF-i – vastavalt tähendusele) peab algama rea ​​algusest.

Kuigi programmid tegelevad tavaliselt standardsete I/O voogudega, nagu öeldud, on kestal sisend-/väljundi ümbersuunamiseks spetsiaalsed vahendid.

5.5.1 Operaatorid >,< и >>

Ümbersuunamise tähistamiseks kasutatakse sümboleid " > ", "< "Ja" >> ". Kõige sagedamini kasutatakse käsu väljundi ümbersuunamiseks faili. Siin on näide:

$ ls -l > /home/jim/dir.txt

See käsk salvestab faili /home/jim/dir.txt kataloogi failide ja alamkataloogide loendi, mis oli käsu täitmise ajal kehtiv ls; ja kui määratud fail ei eksisteerinud, siis see luuakse; kui see oli olemas, kirjutatakse see üle; kui soovid, et käsu väljund lisataks olemasoleva faili lõppu, siis vajaliku sümboli asemel > kasutada >> . Sel juhul tühikute olemasolu enne või pärast märke > või >> on ebaoluline ja teenib ainult kasutaja mugavust.

Väljundit saate saata mitte ainult faili, vaid ka mõne teise käsu sisendisse või seadmesse (näiteks printerisse). Seega saate failis /home/jim/report.txt olevate sõnade loendamiseks kasutada järgmist käsku:

$ cat /home/jim/report.txt > wc -w

ja faili printimiseks kasutage käsku:

$ cat /home/jim/report.txt > lpr

Nagu näete, operaator > kasutatakse väljundvoo ümbersuunamiseks. Seoses sisendvooga täidab sarnast funktsiooni operaator < . Ülaltoodud näidiskäsku konkreetse faili sõnade arvu loendamiseks saab ümber kirjutada järgmiselt (pange tähele käsu puudumist kass):

$wc -w< /home/jim/report.txt

Seda ümbersuunamissuvandit kasutatakse sageli mitmesugustes skriptides käskude jaoks, mis tavaliselt aktsepteerivad (või eeldavad) klaviatuurisisendit. Skriptis, mis mõnda automatiseerib rutiinsed toimingud, saate käsule anda vajaliku teabe failist, kuhu on eelsalvestatud see, mida selle käsu täitmiseks on vaja sisestada.

Tulenevalt asjaolust, et sümbolid < , > Ja >> toimige standardsete voogudega, saab neid kasutada mitte ainult tavapärasel viisil, nagu tavaliselt tehakse, vaid ka veidi erineval viisil. Seega on järgmised käsud samaväärsed:

$ kass > fail

$cat>fail

$ > faili kass

$ > faili kass

Kuid iseenesest (ilma ühegi käsuta, mille jaoks on määratletud standardsed vood) ümbersuunamissümbolit kasutada ei saa, seega ei saa seda näiteks sisestades

$fail1 > fail2

hankige failist koopia. Kuid see ei muuda seda vähem oluliseks see mehhanism, sest standardvood on määratletud iga käsu jaoks. Sel juhul saate ümber suunata mitte ainult standardse sisendi ja väljundi, vaid ka muid vooge. Selleks määrake enne ümbersuunamissümbolit ümbersuunatud voo number. Standardsisendi stdin on number 0, standardväljundi stdout on number 1, standardvea voo stderr on number 2. See on täisformaadisÜmbersuunamiskäsk näeb välja selline (pidage meeles, et tühikud > lähedal on valikulised):

käsk N>M

Kus N Ja M— standardsete voogude arv (0,1,2) või failinimed. Mõnel juhul sümbolite kasutamine < , > Ja >> kanali numbrit või failinime määramata on võimalik ainult seetõttu, et vaikimisi asendatakse puuduv number 1, st standardväljund. Jah, operaator > ilma arvu määramata tõlgendatakse kui 1 > .

Välja arvatud lihtne ümbersuunamine standardsete voogude puhul on võimalik ka mitte ainult voogu ühele või teisele kanalile suunata, vaid teha standardse voo sisust koopia. Selle jaoks on spetsiaalne sümbol & , mis asetatakse kanali numbri ette, kuhu voog suunatakse:

käsk N > &M

See käsk tähendab kanali numbri väljundit N saadetakse nii standardväljundisse kui ka dubleeritakse kanali numbrisse M. Näiteks selleks, et standardväljundis veateated dubleeritaks, tuleb anda käsk 2>&1, samal ajal 1>&2 dubleerib stdout faili stderr. See funktsioon on eriti kasulik väljundi faili suunamisel, kuna me näeme siis sõnumeid ekraanil ja salvestame need faili.

5.5.2 Operaator |

Väljundi ümbersuunamise erivõimalus on tarkvarakanal (mõnikord nimetatakse seda toruks või konveieriks). Selleks ühendatakse kaks või enam käsku, nii et eelmise väljund on järgmise sisendiks, ühendatud (või soovi korral eraldatud) vertikaalse riba märgiga - "|". Sel juhul sümbolist vasakul asuva käsu standardne väljundvoog | , saadetakse sümbolist paremal asuvasse programmi standardsisendisse | . Näiteks:

$ kassi minu fail | grep Linux | wc -l

See rida tähendab, et käsu väljund on kass, st tekst failist myfile, saadetakse käsusisendisse grep, mis tõstab esile ainult read, mis sisaldavad sõna "Linux". Käsu väljund grep suunatakse omakorda käsusisendisse wc -l, mis loendab selliste ridade arvu.

Programmitorusid kasutatakse mitme väikese programmi kombineerimiseks, millest igaüks teostab oma sisendvoos ainult spetsiifilisi teisendusi, et luua üldistatud käsk, mille tulemuseks on mõni keerulisem teisendus.

Tuleb märkida, et kest kutsub samaaegselt täitma kõiki konveierisse kuuluvaid käske, käivitades iga käsu jaoks eraldi kesta eksemplari, nii et niipea kui esimene programm hakkab oma väljundvoos midagi tootma, järgmine käsk hakkab seda töötlema. Samamoodi teeb iga järgnev käsk oma operatsiooni, oodates eelmise käsu andmeid ja andes oma tulemused järgmise käsu sisendiks. Kui soovite, et käsk lõppeks täielikult enne järgmise algust, saate seda kasutada ühel real konveieri sümbolina | , ja semikoolon ; . Enne iga semikoolonit kest peatub ja ootab, kuni kõik eelnevad konveierisse lisatud käsud täitmise lõpetavad.

Torust väljumise olek (pärast programmi lõpetamist tagastatud tõeväärtus) on sama, mis konveieri viimase käsuga tagastatud väljumisolek. Konveieri esimese käsu ette saab panna sümboli "!", siis on konveierist väljumise olek viimase käsu väljumisoleku loogiline eitus. Enne tagastamisväärtuse määramist ootab kest, kuni kõik konveierikäsud on lõpule viidud.

5.5.3 Filtrid

Viimane ülaltoodud näide (käsuga grep) saab kasutada teise olulise mõiste, nimelt filtriprogrammi illustreerimiseks. Filtrid on käsud (või programmid), mis võtavad vastu sisendandmevoo, sooritavad sellel mõningaid teisendusi ja väljastavad tulemuse standardväljundisse (kust saab selle kasutaja äranägemise järgi mujale suunata). Filtrikäsud sisaldavad juba eespool mainitud käske kass, rohkem, vähem, wc, cmp, diff, samuti järgmised käsud.

Tabel 5.1. Filtreerimiskäsud

Meeskond

Lühike kirjeldus

grep, fgrep, egrep

Otsin sisendfail või andmed standardist sisendrida, mis sisaldavad määratud mustrit, ja väljastavad need standardväljundisse

Asendab kõik antud loendis loetletud sisendvoos esinevad märgid teise määratud loendi vastavate tähemärkidega

komm

Võrdleb kahte faili ridade kaupa ja väljastab 3 veergu standardväljundiks: üks - read, mis esinevad ainult ühes failis, teine ​​- read, mis esinevad ainult 2. failis: ja kolmas - read, mis esinevad mõlemas failis

Vormid printimiseks tekstifail või standardsisendi sisu

sed

Stringiredaktor, mida kasutatakse sisendandmevoo (failist või standardsisendist võetud) teisenduste tegemiseks

Spetsiaalne filter on käsk tee, mis "tükeldab" sisendvoo, suunates selle ühelt poolt standardväljundisse ja teiselt poolt faili (mille nime peate täpsustama). On lihtne näha, et oma tegevusega käsk tee sarnane ümbersuunamisoperaatoriga 1>&fail.

Kasutades saab filtrite võimalusi oluliselt laiendada regulaaravaldised, mis võimaldab korraldada näiteks otsingut erinevate, sageli väga keeruliste mallide abil.

Ümbersuunamise ja filtrite kohta võiks palju rääkida. Kuid see materjal on saadaval enamikes UNIXi ja Linuxi raamatutes, näiteks Petersen [P1.4] ja Kelly-Bootle [P1.8]. Seetõttu piirdume öelduga ja liigume edasi nn kesta loodud keskkonna ehk keskkonna käsitlemise juurde.

V. Kostromin (kos at rus-linux dot net) - 5,5. I/O ümbersuunamine, kanalid ja filtrid

Kolm I/O suunda on pühendatud – standardsisend, väljund ja veavoog ( stdin, stdout, stderr ). Vaikimisi on kõik kolm lõime terminaliga seotud. Sel juhul kuvab programm terminalile kõik oma teated, sealhulgas vead. Kest võimaldab teil neid standardseid vooge ümber suunata, määrata I/O ja lõimede ühendamine.

I/O voogude ümbersuunamine.

> fail Standardväljundi ümbersuunamine faili faili

>> fail - Suuna standardväljund faili ümber faili lisamisega faili lõppu.

- failist standardsisendi saamine faili.

prog1 | prog2 -Programmi prog1 väljundvoo ülekandmine programmi sisendvoogu prog2.

n> faili faili.

n>> faili - Suunake standardvoog deskriptoriga n faili ümber faili lisamisega faili lõppu.

n>&m -Keermete kombineerimine käepidemetega n Ja m .

$ prog1 >/dev/null 2>&1

/dev/null on pseudoseade, mis hävitab sellesse suunatud voolu.

Sageli kasutatakse ühe programmi väljundvoo edastamist teise programmi sisendvoogu. Näiteks:

$ gzip -d archive.tar.gz | tar –xf

See on koht, kus fail lahti pakitakse arhiiv.tar.gz , pakitud kahe arhiveerija poolt. Väljundvoog utiliidist gzip edastatakse utiliidi sisendvoogu tõrva . Sama toimingut saab teha ka muul viisil:

$ gzip -d arhiiv.tar.gz

$ tar -xf arhiiv.tar

Sest keel Bourne Shell on protseduuriline programmeerimiskeel, nagu ka teistel sarnastel keeltel, on sellel operaatorid, mis võimaldavad juhtida käsu täitmise järjekorda. Vajalik operaator on teatud tingimuse kontrollimine, mille täitmisest lähtuvalt määratakse programmi edasine käik. Selline operaator on käsk katsetada. See käsk kontrollib, kas mõni tingimus on täidetud. Meeskond test Kõnevõimalusi on kaks:

testi seisukord

[tingimus]

Tuleb märkida, et klambri ja tingimuse vahel peavad olema tühikud, vastasel juhul Kest ei tunne "[" käsuna ära test . Eduka lõpetamise korral test naaseb "0" .

Failide kontrollimise tingimused:

-f fail Fail "fail" on tavaline fail.

-d fail Fail " fail" on kataloog.
-c fail Fail "fail" on spetsiaalne fail.
-r fail Fail "fail" on lugemisluba.

-w fail Fail "fail" on kirjutamisluba.

-x fail Fail "fail" on luba esineda.

-s fail Fail "fail" mitte tühi.

Stringide kontrollimise tingimused:

string1=string2 Stringid string1 Ja string2 kokku sobima.

string1!=string2 Stringid string1 Ja string2 ei sobi.

-n string1 Liin string1 on olemas.

-z string1 Liin string1 ei eksisteeri.

Täisarvudega tehte tingimused:

x -eq y x võrdub y-ga

x -ne y x ei ole võrdne y-ga

x -gt y x on suurem kui y

x -ge y x on suurem kui y või sellega võrdne

x -lt y x on väiksem kui y

x -le y x on väiksem kui y või sellega võrdne

Sel juhul käsk test kohtleb stringe täpselt täisarvudena. Null väärtus sobib ka tühi string.

Loogilised operatsioonid kontekstis test

! (mitte) Loogiline "EI"

-o (või) Loogiline "VÕI"

-a (ja) Loogiline "JA"

Tingimuslik operaator "kui"

Üldine vorm kasutada tingimuslik operaator kui on esitatud järgmiselt:

kui<условие>

siis<список команд>

[elif<условие>

siis<список> ]

Avaldised nurksulgudes on valikulised. Need. võime ette kujutada tingimusliku operaatori kõige tavalisemat "tükeldatud" modifikatsiooni:

kui<условие>

siis<список команд>

Sel juhul, kui <условие> lõpetatud (lõpetamiskood 0), seejärel käivitatud <список команд>. Muidu <список команд> vahele jäetud.

Valiku operaator juhtum

Üldiselt on operaatori süntaks juhtum järgnevalt:

juhtum<строка>sisse

Mall 1)

........

Mall2)

........

........

Tähendus <строка> võrreldes mallidega, järjekorras. Kui leitakse sobivus, täidetakse vastavas jaotises olevad käsud. Tuleb märkida, et mallid võimaldavad kasutada maske. Kui vastet ei leitud, siis käivitatakse käsud jaotisest mustriga "*" (sarnaselt vaikimisi valija lüliti V KOOS ).

Näiteks siin on osa initsialiseerimisskriptist BSD UNIX . Siin on muutujad (inetd_enable ja inetd_flags) saadi teisest failist ( rc.conf).

. /etc/rc.conf

suurtäht ($inetd_enable) sisse

)

if [ -x /usr/sbin/inetd]; siis

/usr/sbin/inetd $inetd_flags

fi

;;

esac

Loopoperaator koos loendusega jaoks

Operaatori süntaks jaoks

jaoks<имя>

<список команд>

Nurksulgudes esile tõstetud fragment võib puududa. Operaator jaoks tagab, et tsüklit täidetakse nii mitu korda, kui väärtuste loendis on sõnu. Sel juhul muutuja <имя> võtab loendist sõnade tähendused järjestikku. Loendi ise saab moodustada teiste käskude väljundist. Kui nimekiri puudub, siis <имя> aktsepteerib skriptile asukohaparameetritena edastatud väärtusi.

Silmuslause tõese tingimusega samal ajal

Operaatori süntaks samal ajal üldiselt on järgmine struktuur:

samal ajal<условие>

<список команд>

Operaator samal ajal on eelistatav, kui parameetrite väärtuste loend pole eelnevalt teada. Käskude loendit täidetakse tsüklina seni, kuni tingimus jääb tõeseks. Esmakordsel tsüklisse sisenemisel peab tingimus olema tõene.

Väärtingimusega silmuslause kuni

Operaatori süntaks kuni üldiselt on sellel järgmine struktuur:

kuni<условие>

<список команд>

Käskude loendit täidetakse tsüklina seni, kuni tingimus jääb vääraks. Esmakordsel tsüklisse sisenemisel ei tohiks tingimus tõene olla. Tuleb märkida, et silmuse tingimust kontrollitakse valede suhtes pärast iga, sh. ja esimene käivitatud käsk tsüklis.

Põhikäsud UNIX OS failidega töötamiseks

1. Meeskond pwd.

Süntaks: pwd .

Kirjeldus: käsk kuvab töötava kesta praeguse kataloogi nime.

1. harjutus.

Kasutage oma kodukataloogi määramiseks käsku pwd.

Kajasta raportis meeskonda ja selle töö tulemust.

2. Meeskond mees.

Süntaks: mees Nimi.

Nimi on meid huvitava käsu või utiliidi nimi, süsteemikõne, raamatukogu funktsioon, fail.

Kirjeldus : UNIX-I JUHEND - operatsioonisüsteemi käsiraamat UNIX. Sealt pärit teave on saadaval aadressil interaktiivne režiim utiliidi kasutades mees .

2. ülesanne.

Kasutage utiliiti man, et otsida teavet käsu pwd kohta.

Kirjutage raportisse lühiinfo meeskonna kohta (vene keeles).

3. Meeskond CD.

Süntaks: CD kataloogi_nimi.

Kirjeldus: see on käsk praeguse kataloogi muutmiseks. Katalooginimi on kataloogi täis- või suhteline nimi, mida soovite ajakohastada.

CD ilma parameetriteta muudab praegune teie kodukataloogiks.

3. ülesanne.

Muutke praegune kataloog ühe taseme võrra kõrgemaks. Kontrollige seda ja naaske seejärel oma kodukataloogi. Kontrollige kataloogi muudatust.

Täidetud käskude täitmine kajastub aruandes.

4. Meeskond ls.

Süntaks: ls kataloogi_nimi

Kirjeldus: käsk määratud kataloogi sisu vaatamiseks.

ls ilma parameetriteta, prindib aktiivse kataloogi failide loendi.

Saadud loend ei sisalda faile, mille nimed algavad sümboliga " . ” - erinevate loodud failid süsteemiprogrammid oma eesmärkidel. Vaata täielik nimekiri failid saab määrata käsus ls klahv "-a",

need. ls -kataloogi_nimi

Faili õigused

Iga failiga UNIX OS mis on seotud faili 12-bitise sõnaga "load".

Selle sõna alumised 9 bitti on ühendatud kolme kolmebitisesse rühma; Iga rühm määrab juurdepääsuõigused faili omanikule, tema rühmale ja kõigile teistele kasutajatele. Igas rühmas on kolm bitti, mis vastutavad faili lugemise, päringu ja kasutamise õiguse eest.

Konkreetse faili juurdepääsuõiguste väljaselgitamiseks võite kasutada käsku

, Näiteks:

> ls -l /bin/kat

Märkide rühm, mis asub rea alguses -rwxr-xr-x näitab failitüüpi (esimene märk; miinusmärk tähendab, et tegemist on tavalise failiga, tähega d tähendaks omanikule vastavalt kataloogi jne) ja juurdepääsuõigusi (in sel juhul rwx , st. lugeda, kirjutada ja käivitada), rühmitada ja kõiki teisi (antud juhul r-x , st. kirjutamisõigusi pole). Nii et fail /bin/kass saab lugeda ja käivitada iga kasutaja, kuid ainult kasutaja saab seda muuta juur (st administraator).

Saate failiõiguste sõna kirjutada kui kaheksandnumber(3 tähemärki - kaheksandnumber), kolmekohaline (omanik, rühm, teised kasutajad) selle kolmekohalise kaheksakohalise numbri iga märk moodustatakse õiguste summana: 4 - lugemisõigus, 2 - kirjutamisõigus, 1 - kasutusõigus ( binaarsest triaadist): (111) 2 =2 0 +2 1 +2 2 =(1+2+4) 10 .

Näiteks, 7 = 1 + 2 + 4 Þ parem rwx

4 2 1

6 = 0 + 2+ 4 Þ parem rw- -

4 2 0

Kolmekohalises numbris määrake õigused: 744 Kõik õigused on määratud omanikule, kirjutuskaitstud grupile ja kirjutuskaitstud teistele kasutajatele.

Failiõiguste kasutamiseks kasutage käsku chmod , mis võimaldab määrata uusi õigusi kaheksandarvuna, näiteks:

$ chmod 744 filel.c.

4. ülesanne.

a) saada täielik teave käsu ls kohta kasutage utiliiti man. Suunake käsu väljund mõnda tekstifaili.

b) Vaadake praeguse kataloogi täielikku sisu ja suunake see väljund ka tekstifaili.

c) käsu kasutamine ls -l<имя_файла> printige teave juurdepääsuõiguste kohta tekstifailile, millega töötasite sammus 4b, ja suunake see teave samasse tekstifaili. Selgitage oma järeldust.

5. Meeskond kass.

I/O ümbersuunamine.

Väikese tekstifaili sisu kuvamiseks ekraanil saate kasutada käsku:

kass faili nimi

Tähelepanu!Ärge püüdke sel viisil vaadata kataloogide ja binaarfailide sisu.

Suurt testfaili saab meeskond hõlpsasti vaadata rohkem (kasutamise kirjeldust vt UNIX JUHEND ). Miks on käsk siin ebamugav? kass ?

Meeskonnas kass Saate määrata mitu failinime:

kassi fail1 fail 2 ... fail N

sel juhul kuvatakse ekraanil kõigi reas olevate failide sisu.

Saate väljundi faili ümber suunata:

kassifail 1 fail 2 > tulemuste_fail

Väljundi suunamine standardväljundist (ekraanilt) faili on kõigi käskude standardne. Saate standardsisendi (klaviatuurilt) ümber suunata, näiteks võtta failist programmi andmeid, kasutades märki “<”.

kass > uus_fail – loob klaviatuurilt sisestatud sisuga uue tekstifaili.

Katkesta andmesisestusprotsess -

5. ülesanne.

Looge Cat abil uus tekstifail ja vaadake selle sisu. Suunake standardvoo väljund ümber teise faili, mille nime sisestate klaviatuurilt, ja kontrollige, kas toiming tehti õigesti.

6. Lihtsamad käsud failidega töötamiseks : cp, rm, mkdir, mv

Uue kataloogi loomiseks kasutage käsku:

mkdir kataloogi_nimi

Ühe faili sisu kopeerimiseks teise kasutage käsku:

cp faili_allika_faili_sihtkoht.

Meeskond

cp-fail 1 fail 2…. fail N sihtkataloog

kasutatakse faili või failide kopeerimiseks juba olemasolevasse kataloogi nimega sihtkoha_kataloog nende enda nimede all. Kopeeritud failide nimede asemel võite kasutada nende malle. Mustrid määratakse metamärkide abil:

* – sobib kõikidele märgijadadele, ka tühjadele.

Kõik üksikud tähemärgid

[...] – sobib iga sulgudes oleva tähega. Miinusmärgiga eraldatud märgipaar määrab märkide vahemiku.

Meeskond

cp-r dir_source dir_destination

teenindab ühe kataloogi (source_dir) rekursiivset kopeerimist uude kataloogi (sihtkataloog).

Kopeerimiskäskude nimede asemel saab kasutada nende malle.

Meeskond

rm fail 1 fail 2…. fail N

võimaldab kustutada praegusest kataloogist 1 või enam tavalist faili.

Nimede asemel saab kasutada metamärke. Kui soovite kustutada ühe või mitu kataloogi koos nende sisuga (rekursiivne kustutamine). rm kasuta võtit -r

Rm-r dir 1 dir 2

Nimeta käsk ümber:

mv allika_nimi sihtkoha_nimi

Fail nimega allika_nimi nimetatakse ümber failiks nimega sihtkoha_nimi. Sel juhul ei tohi enne käsu täitmist faili nimega sihtkoha_nimi eksisteerida.

6. ülesanne.

Looge oma kodukataloogis uus kataloog. Korraldage seal väike testfail kahe sisureaga:

„Õpin UNIX OS-is töötamist

Ma korraldan stsenaariumi."

Kopeerige selle faili sisu teise sama nimega faili, mis asub kataloogis /home. Kui kopeerimine õnnestub, eemaldage algselt loodud fail oma kataloogist. Kontrollige kasutatud kataloogide ja failide sisu.

Ülesanne 7.

1). Kui olete õppinud interaktiivselt töötama kõige lihtsamate UNIX OS-i käskudega, kasutage Kwriteri redaktorit skripti loomiseks skriptiga, mis vastab järjestikusele täitmisele:

Ülesanne 3,

Ülesanne 4B, 4B,

Ülesanne 5,

6. ülesanne.

Ülesandes 6 ärge unustage programmiliselt kontrollida, kas faili kopeerimine õnnestus, kuvades tekstisõnumid ja vastavate kataloogide sisu.

On vajalik, et sisse partiifail klaviatuurilt andmete sisestamise taotluste pädev väljastamine korraldati käsuga $ echo - n “request text”.

2). Salvestage skript nimega Myscript1, käivitage see käsuga

sh Myscript1

Sisestage nõutud andmed ja kontrollige tulemusi.

3). Koostage tehtud laboritööde kohta aruanne, mis peaks kajastama nii teie tööd interaktiivses režiimis kui ka koos skriptiga, sisaldades skripti teksti (koos kommentaaridega) ja saadud tulemusi ekraanil ja failides.

Süsteemikõned getuid ja getpid

Uurige programmi täitmiseks käivitanud kasutaja identifikaatorit - UID ja selle rühma ID, kuhu see kuulub ,-GID võimalik süsteemikõnede abil getuid() ja getpid() rakendades neid selles programmis.

Süsteemikõnede prototüübid:

#kaasa

#kaasa

uid_t getuid(void);

gid_t getgid(void);

Ülesanne 8.

Kirjutage, kompileerige ja käivitage programm, mis prindib programmi käitava kasutaja kasutajatunnuse ja rühma ID.

Kaasake programm koos tulemustega aruandesse.

Kontrollküsimused

1. Faili mõiste UNIX OS . Mis on juhtunud kodukataloog?

2. Millised vahendid käskude rühmitamiseks on olemas? Kest - tõlk? tuua näiteid kasutamise kohta.

3. Kuidas I/O ümber suunatakse?

4. Mis on käsukonveier? too näide.

5. Vahenditega Kest teha aritmeetilisi tehteid Kest -muutuv?

6. Millised on failinimede genereerimise reeglid?

7. Kuidas toimub käsu asendamine?

8. Kuidas stringi tõlgendada cmd1&cmd2& ?

9. Kuidas stringi tõlgendada cmd1 && cmd2 & ?

10. Kuidas stringi tõlgendada cmd1 || cmd2& ?

11. Nagu UNIX Kas failiõigused on määratletud? Millist käsku saab kasutada nende vaatamiseks konkreetse faili puhul?

12. Kuidas määrata programmi käivitanud kasutaja identifikaatorit ja tema grupi tunnust?

Laboratoorsed tööd № 3.

Protsessid operatsioonisüsteemis UNIX.

Töö eesmärk

Õppige looma protsesse ja valdama protsesside kasutajakonteksti muutmist, kasutades selles keeles programmides kasutatavaid süsteemikutseid KOOS, V UNIX OS.

1. Uurige protsesside korraldust sisse UNIX : protsessi mõiste, protsessi kontekst, eluring protsess, protsessi tuvastamine, hierarhiline struktuur protsessid. Kirjuta KOOS ja siluda programmi vastavalt ülesandele 1.

2. Viige end kurssi protsessi loomisega UNIX , protsessi lõpuleviimise korraldamisega. Programmi kirjutamine ja silumine (keel KOOS ) vastavalt ülesandele 2 lisada see aruandesse.

3. Uurige funktsiooni parameetreid peamine () keeles KOOS , Keskkonnamuutujad ja argumendid käsurida. Kirjutage programm mõnes keeles KOOS siluge vastavalt ülesandele 3 ja lisage see koos tulemustega aruandesse.

4. Uurige süsteemikõne korraldamise funktsioonide perekonda exec().

5. Kirjutage programm selles keeles KOOS vastavalt õpetaja antud ülesande 4 versioonile siluda programmi ja demonstreerida saadud tulemusi õpetajale. Kaasake programm koos tulemustega aruandesse.

6. Kaitske tööd õpetaja ees, vastates testi küsimustele.

Olete juba tuttav kahe käsureaskriptide väljundiga töötamise meetodiga.

  • Väljundandmete kuvamine ekraanil.
  • Suuna väljund faili ümber.
Mõnikord peate midagi ekraanil näitama ja midagi faili kirjutama, nii et peate mõistma, kuidas Linux sisendit ja väljundit käsitleb, mis tähendab, et peate õppima, kuidas skriptide tulemusi soovitud kohta saata. Alustuseks räägime standardsetest failideskriptoritest.

Tavalised failikirjeldused

Linuxis on kõik failid, sealhulgas sisend ja väljund. operatsioonisüsteem tuvastab failid deskriptorite abil.

Igal protsessil võib olla kuni üheksa avatud failikäepidet. bash kest reserveerib kolm esimest käepidet ID-dega 0, 1 ja 2. Nende tähendus on järgmine.

  • 0 , STDIN - standardne sisendvoog.
  • 1, STDOUT – standardne väljundvoog.
  • 2, STDERR – standardne veavoog.
Need kolm spetsiaalset käepidet käsitlevad skripti sisendit ja väljundit.
Peate standardsetest voogudest tõeliselt aru saama. Neid saab võrrelda vundamendiga, millel skriptide koostoime välismaailm. Vaatame nende üksikasju.

STDIN

STDIN on kesta standardne sisendvoog. Terminali jaoks on standardsisend klaviatuur. Kui skriptid kasutavad sisendi ümbersuunamise märki -< , Linux заменяет дескриптор файла стандартного ввода на тот, который указан в команде. Система читает файл и обрабатывает данные так, будто они введены с клавиатуры.

Palju bash käsud aktsepteerida STDIN-i sisendit, kui käsureal ei ole määratud faili, millest andmed tuleks võtta. Näiteks kehtib see käsu kassi kohta.

Kui sisenete kassi käsk käsureal, ilma parameetreid määramata, aktsepteerib see STDIN-i sisendit. Pärast järgmise rea sisestamist kuvab kass selle lihtsalt ekraanil.

STDOUT

STDOUT on kesta standardne väljundvoog. Vaikimisi on see ekraan. Enamik bash-käske väljastab andmed STDOUT-i, mis põhjustab nende kuvamise konsoolis. Andmeid saab faili ümber suunata, lisades need käsu >> abil selle sisusse.

Nii et meil on andmefail, kuhu saame selle käsu abil rohkem andmeid lisada:

Pwd >> minu fail
Mis pwd väljundid lisatakse myfile faili, aga seal juba olevad andmed ei kao kuhugi.

Käsu väljundi ümbersuunamine faili

Siiani on kõik hästi, aga mis siis, kui proovite teha midagi sellist, pääsedes juurde olematule x-failile, mis kõik on loodud minu failile veateate saatmiseks.

Ls –l xfile > minu fail
Pärast selle käsu täitmist näeme ekraanil veateateid.


Püütakse pääseda juurde olematule failile

Olematule failile juurde pääsemisel tekib tõrge, kuid kest ei suunanud veateateid failile ümber, printides neid ekraanile. Kuid me tahtsime, et veateated läheksid faili. Mida teha? Vastus on lihtne – kasutage kolmandat standardkirjeldust.

STDERR

STDERR on kesta standardne veavoog. Vaikimisi osutab see käepide samale asjale, millele osutab STDOUT, mistõttu näeme vea ilmnemisel ekraanil teadet.

Oletame, et tahame veateated näiteks logifaili või kuhugi mujale suunata, selle asemel et neid ekraanile printida.

▍Tõrkevoo ümbersuunamine

Nagu te juba teate, on failikäepide STDERR 2. Saame vead ümber suunata, asetades selle käepideme ümbersuunamiskäsu ette:

Ls -l xfile 2>myfile cat ./myfile
Veateade läheb nüüd minu faili.


Veateate ümbersuunamine faili

▍Vigade ja väljundvoogude ümbersuunamine

Käsurea skripte kirjutades võib ette tulla olukordi, kus tuleb ümber suunata nii veateated kui ka standardväljund. Selle saavutamiseks peate kasutama sobivate deskriptorite jaoks ümbersuunamiskäske, määrates failid, kuhu vead ja standardväljund peaksid minema:

Ls –l myfile xfile otherfile 2> errorcontent 1> correctcontent

Vigade ümbersuunamine ja standardväljund

Shell suunab selle, mida ls-käsk tavaliselt STDOUT-ile saadab, õigesse sisufaili tänu konstruktsioonile 1>. Veateated, mis läheksid STDERR-ile, satuvad ümbersuunamiskäsu 2> tõttu errorcontent faili.

Vajadusel saab nii STDERRi kui ka STDOUTi suunata samasse faili, kasutades käsku &>:


STDERR ja STDOUT ümbersuunamine samasse faili

Pärast käsu täitmist jõuab STDERR-i ja STDOUT-i jaoks mõeldud sisu sisufaili.

Väljundi ümbersuunamine skriptides

Käsurea skriptides on väljundi ümbersuunamiseks kaks meetodit:
  • Ajutine ümbersuunamine või üherealine väljundi ümbersuunamine.
  • Püsiv ümbersuunamine või skripti väljundi või selle osa ümbersuunamine.

▍Ajutine väljundi ümbersuunamine

Skriptis saate ühe rea väljundi STDERR-i ümber suunata. Selleks kasutage lihtsalt ümbersuunamiskäsku, määrates STDERR-i deskriptori, ja sisestage deskriptori numbri ette ampersand (&):

#!/bin/bash echo "See on viga" >&2 echo "See on tavaline väljund"
Kui käivitate skripti, ilmuvad ekraanile mõlemad read, kuna nagu te juba teate, väljastatakse vead vaikimisi samasse kohta, kus tavalised andmed.


Ajutine ümbersuunamine

Käivitame skripti nii, et STDERR-i väljund läheks faili.

./myscript 2> myfile
Nagu näete, saadetakse nüüd tavaline väljund konsooli ja veateated lähevad faili.


Veateated kirjutatakse faili

▍Püsiv väljundi ümbersuunamine

Kui teie skript peab palju väljundit ekraanile suunama, on ebamugav igale kajakutsele vastavat käsku lisada. Selle asemel saate käsu exec abil määrata väljundi skripti kestuse ajaks konkreetsele käepidemele ümbersuunamiseks:

#!/bin/bash exec 1>outfile echo "See on test kogu väljundi ümbersuunamiseks" echo "shelli skriptist teise faili." kaja "ilma, et peaks iga rida ümber suunama"
Käivitame skripti.


Suunake kogu väljund faili

Kui vaatate väljundi ümbersuunamise käsus määratud faili, leiate, et kõik, mis kajakäskude abil väljastati, jõudis sellesse faili.

Käsku exec saab kasutada mitte ainult skripti alguses, vaid ka muudes kohtades:

#!/bin/bash exec 2>myerror echo "See on algust skriptist" echo "nüüd suunab kogu väljundi teise asukohta" exec 1>myfile echo "See peaks minema minu faili faili" echo "ja see peaks minema myerror faili" >&2
See on see, mida saate pärast skripti käivitamist ja failide vaatamist, kuhu me väljundi ümber suunasime.


Väljundi ümbersuunamine erinevatesse failidesse

Käsk exec suunab esmalt STDERR-i väljundi faili myerror-i. Seejärel saadetakse mitme kajakäsu väljund STDOUT-i ja prinditakse ekraanile. Käsk exec paneb seejärel failile myfile saatma kõik, mis jõuab STDOUT-i, ja lõpuks kasutame käskluses echo käsku STDERR-i ümbersuunamine, mis põhjustab vastava rea ​​kirjutamise faili myror-i.

Kui olete selle selgeks saanud, saate väljundi ümber suunata sinna, kuhu soovite. Nüüd räägime sisendi ümbersuunamisest.

Sisendi ümbersuunamine skriptides

Sisestuse ümbersuunamiseks võite kasutada sama tehnikat, mida kasutasime väljundi ümbersuunamiseks. Näiteks võimaldab käsk exec teha faili STDIN-i andmeallikaks:

Täitja 0< myfile
See käsk ütleb kestale, et sisendallikaks peaks olema pigem myfile kui tavaline STDIN. Vaatame sisendi ümbersuunamist tegevuses:

#!/bin/bash exec 0< testfile count=1 while read line do echo "Line #$count: $line" count=$(($count + 1)) done
See ilmub ekraanile pärast skripti käivitamist.


Sisestuse ümbersuunamine

Ühes varasemas artiklis õppisite, kuidas kasutada lugemiskäsku, et lugeda klaviatuurilt kasutaja sisendit. Kui suunate sisendi ümber, muutes andmeallika failiks, loeb lugemiskäsk STDIN-ist andmete lugemisel seda failist, mitte klaviatuurilt.

Mõned Linuxi administraatorid kasutavad seda lähenemisviisi logifailide lugemiseks ja seejärel töötlemiseks.

Oma väljundi ümbersuunamise loomine

Skriptides sisendi ja väljundi ümbersuunamisel ei piirdu te kolme standardse failikirjeldusega. Nagu juba mainitud, võib teil olla kuni üheksa avatud käepidet. Ülejäänud kuut numbritega 3 kuni 8 saab kasutada sisendi või väljundi ümbersuunamiseks. Igaüks neist saab määrata failile ja kasutada skriptikoodis.

Saate määrata väljundandmetele käepideme, kasutades käsku exec:

#!/bin/bash exec 3>myfile echo "See peaks ilmuma ekraanile" echo "ja see tuleks faili salvestada" >&3 echo "Ja see peaks olema ekraanil tagasi"
Pärast skripti käivitamist ilmub osa väljundist ekraanile, osa - failis deskriptoriga 3.


Väljundi ümbersuunamine oma käepideme abil

Andmesisestuse failideskriptorite loomine

Saate skriptis oleva sisendi ümber suunata samamoodi nagu väljundit. Enne sisendi ümbersuunamist salvestage STDIN teise käepidemesse.

Pärast faili lugemist saate STDIN-i taastada ja kasutada seda nagu tavaliselt:

#!/bin/bash exec 6<&0 exec 0< myfile count=1 while read line do echo "Line #$count: $line" count=$(($count + 1)) done exec 0<&6 read -p "Are you done now? " answer case $answer in y) echo "Goodbye";; n) echo "Sorry, this is the end.";; esac
Proovime stsenaariumi järgi.


Sisestuse ümbersuunamine

Selles näites kasutati failideskriptorit 6 STDIN-i viite salvestamiseks. Seejärel tehti sisendi ümbersuunamine, failist sai STDIN-i andmeallikas. Seejärel tuli lugemiskäskluse sisend ümbersuunatud STDIN-ist, st failist.

Pärast faili lugemist lähtestasime STDIN-i, suunates selle ümber käepidemele 6. Nüüd, et kontrollida, kas kõik töötab õigesti, esitab skript kasutajale küsimuse, ootab klaviatuuri sisestust ja töötleb sisestatut.

Failikäepidemete sulgemine

Kest sulgeb failikäepidemed automaatselt pärast skripti valmimist. Kuid mõnel juhul on vaja käepidemed käsitsi sulgeda enne skripti käitamise lõpetamist. Käepideme sulgemiseks tuleb see ümber suunata &- . See näeb välja selline:

#!/bin/bash exec 3> myfile echo "See on andmete testrida" >&3 exec 3>&- echo "See ei tööta" >&3
Pärast skripti täitmist saame veateate.


Katse pääseda suletud failikirjeldusele

Asi on selles, et proovisime ligipääsu olematule deskriptorile.

Olge skriptides failikäepidemete sulgemisel ettevaatlik. Kui saatsite faili andmed, sulgesite käepideme ja avasite selle uuesti, asendatakse kest olemasolevat faili uus. See tähendab, et kõik, mis sellesse faili varem kirjutati, läheb kaotsi.

Teabe hankimine avatud käepidemete kohta

Kõigi Linuxis avatud käepidemete loendi kuvamiseks võite kasutada käsku lsof. Paljudel distributsioonidel, nagu Fedora, asub lsof-utiliit kaustas /usr/sbin. See käsk on üsna kasulik, kuna see kuvab teavet iga süsteemis avatud käepideme kohta. See hõlmab seda, mida avavad taustal töötavad protsessid ja mida avavad sisselogitud kasutajad.

Sellel käsul on palju võtmeid, vaatame kõige olulisemat.

  • -p Võimaldab määrata protsessi ID.
  • -d Võimaldab määrata deskriptori numbri, mille kohta soovite teavet saada.
Praeguse protsessi PID-i väljaselgitamiseks võite kasutada spetsiaalset keskkonna muutuja$$, millesse kest kirjutab praeguse PID-i.

Lülitit -a kasutatakse loogilise JA-operatsiooni tegemiseks kahe teise lüliti abil tagastatud tulemustega:

Lsof -a -p $$ -d 0,1,2

Avatud käepidemete teabe kuvamine

STDIN-i, STDOUT-i ja STDERR-iga seotud failide tüüp on CHR (tähemärgirežiim). Kuna need kõik viitavad terminalile, ühtib failinimi terminalile määratud seadme nimega. Kõik kolm standardfail saadaval nii lugemiseks kui kirjutamiseks.

Vaatame lsof-käsu kutsumist skriptist, milles lisaks tavalistele on avatud ka teised deskriptorid:

#!/bin/bash exec 3> myfile1 exec 6> myfile2 exec 7< myfile3 lsof -a -p $$ -d 0,1,2,3,6,7
See juhtub, kui käivitate selle skripti.


Skripti poolt avatud failikäepidemete kuvamine

Skript avas kaks väljundi (3 ja 6) ja ühe sisendi (7) käepidet. Kuvatakse ka deskriptorite konfigureerimiseks kasutatud failide teed.

Väljundi summutamine

Mõnikord peate veenduma, et skripti käsud, mida saab näiteks täita nagu taustaprotsess, ei kuvata ekraanil midagi. Selleks saate väljundi ümber suunata /dev/null . See on midagi "musta augu" sarnast.

Siin on näide tõrketeadete väljalülitamiseks.

Ls -al badfile otherfile 2> /dev/null
Sama lähenemisviisi kasutatakse näiteks siis, kui peate faili kustutama seda kustutamata:

Cat /dev/null > minu fail

Tulemused

Täna õppisite, kuidas sisend ja väljund käsureaskriptides töötavad. Nüüd teate, kuidas käsitleda failideskriptoreid, neid luua, vaadata ja sulgeda ning sisend-, väljund- ja veavoogude ümbersuunamise kohta. Kõik see on bash-skriptide arendamisel väga oluline.

Järgmine kord räägime Linuxi signaalid, kuidas neid käsitseda skriptides, ajastatud töödes ja taustaülesannetes.

Head lugejad! See materjal annab sisend-, väljund- ja veavoogudega töötamise põhitõed. Oleme kindlad, et teie seas on professionaale, kes oskavad teile kõigest sellest rääkida, mis tuleb vaid kogemustega. Kui jah, anname sõna teile.