Išvestis į Linux failą. Kaip išsaugoti konsolės išvestį į failą

Jei išvestis į (grafinę) konsolę nėra labai didelė, galite tiesiog pasirinkti gabalą pele ir įklijuoti jį į pranešimą spustelėdami vidurinį mygtuką. Kitu atveju galite nukreipti išvestį į failą per „piltuvą“, pavyzdžiui:

Kai kurie_komandos parametrai > logfile.txt

Norėdami pamatyti vykdymo rezultatą ekrane ir tuo pat metu įrašyti į failą, galite naudoti komandą tee:

Kai kurie_komandos parametrai | tee - žurnalo failas.txt

Komanda setterm -dump sukuria dabartinės virtualios konsolės buferio momentinį vaizdą kaip paprasto teksto failą, kurio numatytasis pavadinimas yra screen.dump. Kaip argumentą galite naudoti konsolės, kurią norite iškelti, numerį. Ir pridėjus parinktį -failo failo pavadinimas, šis iškrovimas bus nukreiptas į failą nurodytu pavadinimu. Parinktis -append pridės naują išrašymą prie esamo failo - "numatytosios" screen.dump arba failo, pavadinto -file parinktimi.

Tie. panaudojus komandą like

Setterm -dump -failas /root/screenlog

atitinkamai byloje /root/screenlog bus vieno konsolės puslapio turinys.

Rastas kitas sprendimas, kaip nukopijuoti/įklijuoti tekstą į teksto konsolę be pelės. Taip pat galite nukopijuoti tekstą iš slinkties buferio (t. y. viską, kas yra ekrane ir virš ekrano). Norėdami geriau suprasti, skaitykite apie konsolės langų tvarkyklės ekraną . Taip pat gali būti naudinga padidinti slinkties buferio dydį.

1) Paleisti ekraną

2) Paspauskite Enter. Visi. Mes esame nuliniame konsolės lange.

3) Vykdome reikiamas komandas, kurių išvestį reikia nukopijuoti.

4) Ctrl+A, Ctrl+[ – esame kopijavimo režime. Pastatome žymeklį į pasirinkimo pradžią, spaudžiame tarpo klavišą, tada dedame žymeklį į pasirinkimo pabaigą, spaudžiame tarpo klavišą. Tekstas nukopijuotas į mainų sritį.

5) Ctrl+A, c – sukūrėme naują 1-ąjį langą.

6) Ctrl+A, 1 – perėjome į 1 langą.

7) Atidarykite bet kurį (?) teksto rengyklę (bandžiau mc) ir paspauskite Ctrl + A, Ctrl +] - tekstas įterpiamas. Mes taupome.

8) Ctrl+A, Ctrl+0 – grįžti į nulinį langą.

Kaip padidinti slinkties atgal buferį?

Pirmasis sprendimas yra padidinti numatytąjį (numatytąjį) buferio dydį branduolio šaltiniuose ir jį sukompiliuoti iš naujo. Leiskite manyti, kad jūs taip pat nenorite to daryti, kaip ir aš, ir ieškote lankstesnės terpės.

Ir yra toks įrankis, bet jis vadinamas framebuffer console , sutrumpintai fbcon. Šiame įrenginyje yra dokumentacijos failas fbcon.txt; Jei įdiegėte branduolio dokumentaciją, tada ją turite. Ieškokite jo kažkur aplinkui /usr/sharešakos (tikslaus kelio negaliu nurodyti dėl paskirstymo skirtumų).

Šiuo metu atsiprašau: turime šiek tiek nukrypti ir šiek tiek pakalbėti apie vaizdo buferį ( kadrų buferis ).

Vaizdo buferis yra buferis tarp ekrano ir vaizdo adapterio. Jo grožis yra tas, kad juo galima manipuliuoti: leidžia atlikti triukus, kurie neveiktų, jei adapteris būtų prijungtas tiesiai prie ekrano.

Vienas iš tokių triukų yra susijęs su slinkties buferiu; Pasirodo, galite "paprašyti" vaizdo buferio skirti daugiau atminties slinkties buferiui. Tai pasiekiama naudojant branduolio įkrovos parametrus. Pirmiausia jums reikia kadrų buferis(vaizdo buferis); Tada tu klausi didesnis buferis slinkti.

Šis pavyzdys skirtas GRUB, tačiau jį galima lengvai pritaikyti LILO. GRUB konfigūracijos faile - meniu.lst- raskite eilutę, atitinkančią branduolį, ir tada: Pašalinkite vga=xxx parinktį, jei yra. Pridėkite parinktį video=vesabf arba bet kurią kitą, atitinkančią jūsų aparatinę įrangą. Pridėkite parinktį fbcon=scrollback:128 . Po šios procedūros branduolio parametrų eilutė turėtų atrodyti maždaug taip:

Branduolys /vmlinuz root=/dev/sdb5 video=radeonfb fbcon=scrollback:128

Kyla klausimas, kodėl pašalinti vga=xxx parinktį? Dėl galimų konfliktų su vaizdo įrašo parinktimi. Savo ATI adapteryje negaliu pakeisti slinkties buferio, jei sąraše yra vga=xxx. Galbūt jūsų atveju taip nėra. Jei minėti variantai veikia – gerai; bet ką daryti, jei norite padidinti eilučių skaičių arba nustatyti mažesnį šriftą ekrane? Visada tai darėte su vga=xxx parinktimi, ir tai dingo. Nesijaudinkite – tą patį galima pasiekti pakeitus fbcon parametrus, kaip aprašyta faile fbcon.txt(bet neaprašyta šiame straipsnyje).

Naudojant fbcon=scrollback:128 parinktį, mano slinkties buferis padidėjo iki 17 ekranų (35 kartus Shift+PgUp per pusę ekrano). Beje, 128 yra kilobaitas. Straipsnio autorius teigia, kad daugiau neįmanoma nustatyti. Aš nebandžiau.

Galite naudoti scenarijų.

Scenarijaus failo pavadinimas.log

kai įvykdomos visos reikalingos komandos -

Viskas parašyta į filename.log

„FreeBSD“ turi nuostabią laikrodžio programą, leidžiančią stebėti terminalus, tačiau, kaip paaiškėjo, „Linux“ jis atlieka visiškai skirtingas funkcijas =\ Verta pagooglinti šia tema, yra kažkas ...

Kai dirbate terminale, jūs natūraliai matote visas komandų išvestis realiu laiku tiesiai terminalo lange. Tačiau kartais reikia išsaugoti išvestį, kad vėliau būtų galima su ja dirbti (analizuoti, palyginti ir pan.). Taigi, dirbdami Bash, turite galimybę nukreipti rodomą informaciją iš terminalo lango į tekstinis failas. Pažiūrėkime, kaip tai daroma.

1 parinktis: tik peradresuokite terminalo išvestį į failą

Tokiu atveju visas bet kurios komandos darbo rezultatas bus įrašytas į tekstinį failą, jo nerodant ekrane. Tai yra, mes tiesiogine prasme peradresuosime informaciją iš ekrano į failą. Norėdami tai padaryti, turite naudoti operatorius > Ir >> ir kelias į failą, į kurį reikia rašyti, vykdomos komandos pabaigoje.

operatorius > išsaugo komandos rezultatą nurodytame faile ir, jei jame jau yra informacijos, perrašo.

operatorius >> peradresuos komandos išvestį į failą, o jei jame taip pat yra informacijos, nauji duomenys bus įtraukti į failo pabaigą.

Pažvelkime į komandos pavyzdį ls , kuriame rodomas failų ir aplankų sąrašas nurodytame kataloge. Surašykime jos darbo rezultatą į tekstinį failą. Turime parašyti komandą, įdėti operatorių ir nurodyti kelią į failą:

Ls > /home/ruslan/example

Dabar pažiūrėkime, ar viskas pavyko. Norėdami tai padaryti, galite naudoti bet kurį turimą teksto rengyklę. Taip pat galite tai padaryti tiesiogiai terminale naudodami cat komandą:

Katė /namai/ruslanas/pavyzdys

Viskas veikia.

Prisiminti, kad " > " perrašys visus duomenis, kurie anksčiau buvo faile, todėl jei norite ką nors pridėti prie failo, naudokite operatorių " >> «

Tarkime, kad peradresavome komandos išvestį ls į failą " pavyzdys » nusprendėme išsiaiškinti sistemos branduolio versiją ir išsaugoti išvestį tame pačiame faile. Norėdami sužinoti branduolio versiją, naudokite komandą uname ir parametras -a , tada pasakome Bash, kaip ir kur išsaugoti jo vykdymo rezultatą:

Uname -a >> /home/ruslan/example

Dar kartą patikrinkime rezultatą:

Katė /namai/ruslanas/pavyzdys

Kaip matote, mes išsaugojome darbo rezultatus ir ls , Ir uname .

2 parinktis: nukreipkite išvestį į failą ir parodykite ją ekrane

Ne visiems ir ne visada patogu naudotis operatoriais > Ir >> , nes vis tiek geriau, kai komandų srautą galima stebėti realiu laiku terminalo lange. Tokiu atveju galime naudoti komandą tee , kuri ekrane parodys komandų vykdymą ir išsaugos faile. Jo sintaksė yra tokia:

Komanda | tee /kelias/į/failą

Ši parinktis yra panaši į operatorių > iš ankstesnės pastraipos, tai yra, rašant į failą, visi seni duomenys bus ištrinti. Jei reikia pridėti prie failo, turite pridėti parametrą prie konstrukcijos -a :

Komanda | tee -a /kelias/į/failą

Viena įdomiausių ir naudingiausių temų sistemų administratoriams ir naujiems vartotojams, kurie tik pradeda suprasti darbą su terminalu, yra Linux I/O peradresavimas. Ši terminalo funkcija leidžia nukreipti komandų išvestį į failą arba failo turinį į komandos įvestį, sujungti komandas ir sudaryti komandų konvejerius.

Šiame straipsnyje apžvelgsime, kaip veikia Linux I/O peradresavimas, kokie operatoriai tam naudojami ir kur visa tai galima pritaikyti.

Visos mūsų vykdomos komandos grąžina mums trijų rūšių duomenis:

  • Komandos vykdymo rezultatas, dažniausiai vartotojo prašomi tekstiniai duomenys;
  • Klaidų pranešimai – informuoja apie komandos vykdymo eigą ir iškilusias nenumatytas aplinkybes;
  • Grąžinimo kodas yra skaičius, leidžiantis įvertinti, ar programa veikė tinkamai.

Linux sistemoje visos medžiagos laikomos failais, įskaitant linux I/O srautus – failus. Kiekvienas platinimas turi tris pagrindinius srauto failus, kuriuos programos gali naudoti, juos apibrėžia apvalkalas ir identifikuoja failo deskriptoriaus numeris:

  • STDIN arba 0- šis failas yra susietas su klaviatūra ir dauguma komandų gauna duomenis, kad veiktų iš čia;
  • STDOUT arba 1- tai yra standartinė išvestis, čia programa siunčia visus savo darbo rezultatus. Jis susietas su ekranu arba, tiksliau, su terminalu, kuriame vykdoma programa;
  • STDERR arba 2- visi klaidų pranešimai išvedami į šį failą.

Įvesties / išvesties peradresavimas leidžia pakeisti vieną iš šių failų savo. Pavyzdžiui, galite padaryti, kad programa skaitytų duomenis iš failo failų sistemoje, o ne klaviatūroje, taip pat galite įrašyti klaidas į failą, o ne ekrane ir tt Visa tai daroma naudojant simbolius "<" Ir ">" .

Peradresuoti išvestį į failą

Viskas labai paprasta. Galite peradresuoti išvestį į failą naudodami simbolį >. Pavyzdžiui, išsaugokime viršutinės komandos išvestį:

top -bn 5 > top.log

Parinktis -b leidžia programai veikti neinteraktyviu paketiniu režimu, o parinktis n pakartoja operaciją penkis kartus, kad gautų informaciją apie visus procesus. Dabar pažiūrėkime, kas atsitiks su kate:

Simbolis ">" perrašo informaciją iš failo, jei ten jau kažkas yra. Norėdami pridėti duomenis iki galo, naudokite ">>" . Pavyzdžiui, peradresuokite išvestį į „Linux“ failą viršuje:

top -bn 5 >> top.log

Numatytasis peradresavimas yra standartinio išvesties failo aprašo naudojimas. Bet jūs galite tai aiškiai nurodyti. Ši komanda duos tą patį rezultatą:

top -bn 5 1>top.log

Peradresuoti klaidas į failą

Norėdami peradresuoti klaidos išvestį į failą, turite aiškiai nurodyti failo aprašą, kurį norite peradresuoti. Klaidoms tai yra numeris 2. Pavyzdžiui, bandant pasiekti šakninį katalogą, ls išmes klaidą:

Standartinę klaidą galite peradresuoti į tokį failą:

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

Norėdami pridėti duomenų prie failo pabaigos, naudokite tą patį simbolį:

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

Peradresuokite standartinę išvestį ir klaidas į failą

Taip pat galite nukreipti visą išvestį, klaidas ir standartinę išvestį į vieną failą. Yra du būdai tai padaryti. Pirmasis, senesnis, turi išlaikyti abu aprašus:

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

Pirma, ls komandos išvestis bus išsiųsta į ls-error.log failą naudojant pirmąjį peradresavimo simbolį. Toliau visos klaidos bus siunčiamos į tą patį failą. Antrasis metodas yra paprastesnis:

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

Be to, vietoj perrašymo galite naudoti pridėti:

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

standartinė įvestis iš failo

Dauguma programų, išskyrus paslaugas, gauna duomenis už savo darbą per standartinę įvestį. Pagal numatytuosius nustatymus standartinė įvestis tikisi įvesties iš klaviatūros. Bet jūs galite priversti programą nuskaityti duomenis iš failo su pareiškimu "<" :

katė

Taip pat galite iš karto nukreipti išvestį į failą. Pavyzdžiui, pertvarkykime sąrašą:

rūšiuoti rūšiuoti išvestį

Taigi mes peradresuojame „Linux“ įvesties išvestį viena komanda.

Tunelių naudojimas

Galite dirbti ne tik su failais, bet ir nukreipti vienos komandos išvestį kaip įvestį į kitą. Tai labai naudinga atliekant sudėtingas operacijas. Pavyzdžiui, išspausdinkime penkis neseniai pakeistus failus:

ls -lt | galva -n 5

Naudodami xargs įrankį galite sujungti komandas taip, kad standartinė įvestis būtų perduodama kaip parametrai. Pavyzdžiui, nukopijuokime vieną failą į kelis aplankus:

echo testas/tmp/ | xargs -n 1 cp -v testfile.sh

Čia parinktis -n 1 nurodo, kad viena komanda turi būti pakeista tik vienu parametru, o parinktis -v cp leidžia spausdinti išsamią informaciją apie judesius. Kita tokiais atvejais naudinga komanda yra tee. Jis nuskaito duomenis iš standartinės įvesties ir rašo į standartinę išvestį arba failus. Pavyzdžiui:

aidas "Tee testas" | tee failas1

Kartu su kitomis komandomis visa tai galima naudoti kuriant sudėtingas komandas iš kelių komandų.

išvadas

Šiame straipsnyje apžvelgėme Linux I/O srauto peradresavimo pagrindus. Dabar žinote, kaip nukreipti išvestį į „Linux“ failą arba išvestį iš failo. Tai labai paprasta ir patogu. Jei turite klausimų, klauskite komentaruose!

Nors paprastai, kaip minėta, programos įvestis / išvestis yra susieta su standartiniais srautais, apvalkale yra specialios priemonės įvesties / išvesties peradresavimui.

5.5.1 Operatoriai >,< и >>

Simboliai " naudojami peradresavimui nurodyti. > ", "< "Ir" >> ". Dažniausiai naudojamas komandos išvesties peradresavimas į failą. Štai tinkamas pavyzdys:

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

Ši komanda faile /home/jim/dir.txt išsaugos katalogo failų ir pakatalogių sąrašą, kuris buvo galiojantis tuo metu, kai komanda buvo vykdoma. ls; tuo pačiu metu, jei nurodyto failo nebuvo, jis bus sukurtas; jei jis egzistavo, jis bus perrašytas; jei norite, kad komandos išvestis būtų pridėta prie esamo failo pabaigos, tada vietoj simbolio > naudoti >> . Šiuo atveju tarpai prieš arba po simbolių > arba >> yra nereikšmingas ir skirtas tik vartotojo patogumui.

Išvestį galite nukreipti ne tik į failą, bet ir į kitos komandos įvestį arba į įrenginį (pvz., spausdintuvą). Pavyzdžiui, norėdami suskaičiuoti žodžių skaičių /home/jim/report.txt faile, galite naudoti šią komandą:

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

ir spausdinti failą - komanda:

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

Kaip matote, operatorius > skirtas išvesties srautui nukreipti. Kalbant apie įvesties srautą, panašią funkciją atlieka operatorius < . Aukščiau pateiktą pavyzdinę komandą žodžių skaičiui konkrečiame faile suskaičiuoti galima perrašyti taip (atkreipkite dėmesį, kad komandos nėra katė):

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

Šis peradresavimo tipas dažnai naudojamas įvairiuose scenarijuose komandoms, kurios paprastai priima (arba tikisi įvesties iš) klaviatūros. Scenarijuje, kuris automatizuoja kai kurias įprastas operacijas, komandai galite duoti reikiamą informaciją iš failo, kuriame yra tai, ką reikia įvesti norint vykdyti šią komandą.

Nes simboliai < , > Ir >> veikia standartiniais srautais, juos galima naudoti ne tik įprastu būdu, kaip paprastai daroma, bet ir kiek kitaip. Taigi šios komandos yra lygiavertės:

$ katė > failas

$cat>failas

$ >failas

$ > failas kat

Tačiau pats savaime (be jokios komandos, kuriai nustatyti standartiniai srautai) peradresavimo simbolio naudoti negalima, todėl negalite, pavyzdžiui, įvesdami komandų eilutėje

$ failas1 > failas2

gauti kokio nors failo kopiją. Tačiau tai nesumažina šio mechanizmo vertės, nes bet kuriai komandai nustatomi standartiniai srautai. Tokiu atveju galite nukreipti ne tik standartinę įvestį ir išvestį, bet ir kitus srautus. Norėdami tai padaryti, prieš peradresavimo simbolį turite nurodyti srauto, kuris bus peradresuojamas, numerį. Standartinės įvesties stdin skaičius yra 0, standartinės išvesties stdout skaičius yra 1, standartinio klaidos pranešimų srauto stderr skaičius yra 2. Tai yra, visas peradresavimo komandos formatas yra (atminkite, kad tarpai šalia > nereikalingi):

komanda N > M

Kur N Ir M— standartinių srautų skaičius (0,1,2) arba failų pavadinimai. Simbolių naudojimas kai kuriais atvejais < , > Ir >> nenurodžius kanalo numerio ar failo pavadinimo galima tik todėl, kad vietoj trūkstamo skaičiaus pagal nutylėjimą pakeičiamas 1, t.y. standartinė išvestis. Taip, operatorius > be skaičiaus interpretuojamas kaip 1 > .

Be paprasto standartinių srautų peradresavimo, taip pat yra galimybė ne tik nukreipti srautą į vieną ar kitą kanalą, bet ir pasidaryti standartinio srauto turinio kopiją. Tam yra specialus simbolis. & , kuris yra prieš kanalo, į kurį nukreipiamas srautas, numerį:

komandą N > &M

Ši komanda reiškia, kad kanalo išvestis su numeriu N siunčiamas ir į standartinę išvestį, ir dubliuojamas vamzdyje su numeriu M. Pavyzdžiui, norint, kad klaidų pranešimai būtų dubliuojami standartinėje išvestyje, turite išduoti komandą 2>&1, kol 1>&2 pasikartoja stdout į stderr. Ši funkcija ypač naudinga nukreipiant išvestį į failą, nes tada mes matome pranešimus ekrane ir išsaugome juos faile.

5.5.2 Operatorius |

Ypatingas išvesties peradresavimo variantas yra programos kanalo (kartais vadinamo konvejeriu arba konvejeriu) organizavimas. Norėdami tai padaryti, dvi ar daugiau komandų, kad ankstesnės išvestis būtų kitos įvestis, yra sujungtos (arba atskiriamos, jei norite geriau) su vamzdžio simboliu - "|". Šiuo atveju standartinis komandos išvesties srautas, esantis simbolio kairėje | , yra nukreiptas į standartinę programos įvestį, esančią simbolio dešinėje | . Pavyzdžiui:

$ cat myfile | grep Linux | wc -l

Ši eilutė reiškia, kad komandos išvestis katė, ty tekstas iš failo myfile, bus nukreiptas į komandos įvestį grep, kuri pasirinks tik eilutes, kuriose yra žodis „Linux“. komandos išvestis grep savo ruožtu bus nukreiptas į komandos įvestį wc -l, kuris suskaičiuos tokių eilučių skaičių.

Programų vamzdžiai naudojami sujungti kelias mažas programas, kurių kiekviena atlieka tik tam tikras transformacijas savo įvesties sraute, kad būtų sukurta apibendrinta komanda, dėl kurios bus atlikta sudėtingesnė transformacija.

Reikėtų pažymėti, kad apvalkalas vienu metu iškviečia visas komandas, įtrauktas į konvejerį, paleidžiant atskirą apvalkalo egzempliorių kiekvienai komandai, todėl kai tik pirmoji programa pradeda ką nors išduoti savo išvesties srautui, kita komanda pradeda jį apdoroti. Taip pat kiekviena sekanti komanda atlieka savo operaciją, laukdama duomenų iš ankstesnės komandos ir pateikdama savo rezultatus kaip įvestį kitai komandai. Jei norite, kad viena komanda būtų visiškai įvykdyta prieš pradedant vykdyti kitą, galite naudoti ją toje pačioje eilutėje kaip vamzdžio simbolį | , ir kabliataškis ; . Prieš kiekvieną kabliataškį apvalkalas sustos ir lauks, kol visos ankstesnės į konvejerį įtrauktos komandos baigs vykdyti.

Išėjimo būsena (loginė vertė, grąžinama, kai programa baigiasi) iš vamzdžio yra tokia pati kaip išėjimo būsena, grąžinta paskutine konvejerio komanda. Prieš pirmąją konvejerio komandą galite įdėti simbolį "!", tada išėjimo iš konvejerio būsena bus logiškas paskutinės komandos išėjimo būsenos neigimas. Prieš nustatydamas grąžinamąją reikšmę, apvalkalas laukia, kol bus baigtos visos konvejerio komandos.

5.5.3 Filtrai

Paskutinis iš aukščiau pateiktų pavyzdžių (su komanda grep) gali būti naudojamas iliustruoti kitą svarbią sąvoką, būtent filtrų programą. Filtrai yra komandos (arba programos), kurios priima įvesties duomenų srautą, atlieka tam tikras transformacijas ir išveda rezultatą į standartinę išvestį (iš kur jį galima nukreipti kur nors kitur vartotojo pageidavimu). Filtro komandos apima jau minėtas komandas. katė, daugiau, mažiau, wc, cmp, dif, taip pat šias komandas.

5.1 lentelė. Filtravimo komandos

Komanda

Trumpas aprašymas

grep, fgrep, egrep

Įvesties faile arba standartinėje įvestyje ieškokite eilučių su nurodytu šablonu ir įrašykite jas į standartinę išvestį

Pakeičia įvesties sraute visus simbolių, išvardytų nurodytame sąraše, atvejus atitinkamais simboliais iš antrojo nurodyto sąrašo

comm

Lygina du failus eilutę po eilutės ir spausdina 3 stulpelius su stdout: viename yra eilutės, esančios tik 1 faile, antrame yra eilutės, kurios atsiranda tik 2 faile: o trečioje yra eilutės, kurios yra abiejuose failuose

Suformatuoja tekstinį failą arba standartinės įvesties turinį spausdinimui.

sed

Eilučių rengyklė, naudojama kai kurioms įvesties duomenų srauto transformacijoms atlikti (paimta iš failo arba standartinės įvesties)

Specialus filtras yra komanda tee, kuris „padvigubina“ įvesties srautą, viena vertus, nukreipdamas jį į standartinę išvestį, o iš kitos – į failą (kurio pavadinimą turite nurodyti). Nesunku pastebėti, kad savo veikloje komanda tee panašus į peradresavimo operatorių 1>&failas.

Filtrų galimybės gali būti žymiai išplėstos naudojant reguliariąsias išraiškas, kurios leidžia organizuoti, pavyzdžiui, paiešką naudojant įvairius, dažnai labai sudėtingus šablonus.

Daug būtų galima pasakyti apie peradresavimą ir filtrus. Tačiau ši medžiaga yra daugumoje UNIX ir Linux knygų, tokių kaip Petersen [A1.4] ir Kelly-Bootle [A1.8]. Todėl apsiribojame tuo, kas buvo pasakyta, ir pradedame svarstyti vadinamąją aplinką arba aplinką, kurią sukuria apvalkalas.

V. Kostrominas (kos at rus-linux dot net) - 5,5. I/O peradresavimas, kanalai ir filtrai

Įvesties / išvesties sistema LINUX.

Įvesties/išvesties sistemoje visi išoriniai įrenginiai traktuojami kaip failai, kuriuose leidžiamos įprastos failų operacijos. Žinoma, yra ir įrenginių tvarkyklių, tačiau sąsaja su jais skirta vartotojui kaip iškvietimas į specialų failą. Specialūs failai yra priemonė suvienodinti I/O sistemą.

Kiekvienas prijungtas įrenginys (terminalas, diskai, spausdintuvas ir kt.) turi bent vieną specialų failą, susietą su juo. Dauguma šių specialių failų yra saugomi /dev kataloge:
$ CD / dev
$ ls -l
vidinės sistemos valdymo pultas
dsk gabalai diske
fd0 diskelis 1
atminties atmintis
lp spausdintuvas
lp0 lygiagretusis prievadas 0
. . .
šakninė dalis diske, skirta šakninei failų sistemai
apsikeisti maino dalimi
syscon konsolės alternatyvus pavadinimas
systty yra kitas sistemos konsolės pavadinimas
terminų katalogas terminalams
ttyS0 nuoseklusis prievadas 0 (COM1)
. . .

Kai programa įrašo į tokį specialų failą, OS sistema juos perima ir siunčia į įrenginį, pavyzdžiui, spausdintuvą). Skaitant duomenis iš šio tipo failų, jie iš tikrųjų gaunami iš įrenginio, pvz., disko. Programa neturėtų atsižvelgti į įvesties / išvesties įrenginio ypatumus. Tam naudojami specialūs failai (tvarkyklės), kurie veikia kaip sąsaja tarp OS branduolio komponentų ir bendrosios paskirties taikomųjų programų.

Sistema aptinka skirtumą tarp įprasto ir specialaus failo tik po to, kai išanalizuoja atitinkamą įvestį, nurodytą katalogo įraše.
Specialaus failo įvesties lange yra informacija apie įrenginio klasę, tipą ir numerį. Įrenginių klasė apibrėžia įrenginius po simbolius ir blokus. Įrenginio, kuriame keičiamas simbolis po simbolio, pavyzdys yra klaviatūra. Specialūs failai, užtikrinantys ryšį su tokio tipo įrenginiais, vadinami orientuotais į baitus. Blokiniams įrenginiams būdingas apsikeitimas dideliais informacijos blokais, o tai pagreitina apsikeitimą ir daro jį efektyvesnį. Visi diskiniai įrenginiai palaiko blokų mainus, o juos aptarnaujantys specialūs failai vadinami blokiniais. Specialiuose failuose nėra jokios simbolių informacijos, todėl jų ilgis nėra nurodytas katalogų sąraše.

Įrenginio tipas ir numeris taip pat yra pagrindinės specialių failų charakteristikos (ilgio laukelyje pateikiami pagrindiniai ir smulkūs atitinkamo įrenginio numeriai). Pirmasis iš jų apibrėžia įrenginio tipą, antrasis - identifikuoja jį tarp panašių įrenginių. OS vienu metu gali aptarnauti kelias dešimtis ir net šimtus terminalų. Kiekvienas iš jų turi turėti savo specialų failą, todėl turint pagrindinį ir papildomi numeriai leidžia nustatyti reikiamą korespondenciją tarp įrenginio ir tokio failo.

Viename diske galite sukurti kelias failų sistemas. Kai kurios sistemos naudoja vieną failų sistemą viename diske, o kitos – kelias. Naują failų sistemą galima sukurti naudojant komandą mkfs (make file system). Pavyzdžiui, išraiška # /sbin/mkfs /dev/dsk/fl1 512 reiškia: sukurti diskelyje b: 512 blokų dydžio.

Pasirinktinai galite nustatyti failų sistemos dydį blokais ir i-mazgų skaičių (ty didžiausią failų, kuriuos galima saugoti failų sistemoje, skaičių). Pagal numatytuosius nustatymus i-mazgų skaičius yra lygus blokų skaičiui, padalytam iš keturių. Didžiausias i-mazgų skaičius vienoje failų sistemoje yra 65 000. Jei dėl kokios nors priežasties jums reikia daugiau nei 65 000 i-mazgų diske, turite sukurti du ar daugiau failų sistemosšiame diske.

Bet kurią failų sistemą galima prijungti (prijungti) prie bendro katalogų medžio bet kurioje jo vietoje. Pavyzdžiui, katalogas / yra sistemos šakninis katalogas, be to, jis yra failų sistemos pagrindas, kuris visada yra prijungtas. Katalogas /usr1 yra / kataloge, tačiau šiuo atveju tai yra atskira failų sistema nuo šakninės failų sistemos, nes visi jame esantys failai yra atskiroje disko dalyje arba net atskirame diske. Failų sistema /usr1 yra prijungta failų sistema – įsišaknijusi toje vietoje, kur bendroje hierarchijoje yra /usr1 katalogas (1 ir 2 pav.).

Ryžiai. 1. Failų sistema prieš
montavimas /dev/dsk/os1

Ryžiai. 2. Failų sistema po
prijungti /dev/dsk/os1 kaip /usr/

Komanda /sbin/mount naudojama failų sistemai prijungti. Ši komanda leidžia duotą failų sistemą patalpinti bet kurioje esamos katalogo struktūros vietoje:
#/sbin/mount/dev/dsk/osl/usr1 sujungia /dev/dsk/osl ant /usr1
#/sbin/mount/dev/dsk/flt/a sujungia /dev/dsk/flt ant /a

Jei norite prijungti failų sistemą diskuose, kurie turi būti apsaugoti nuo rašymo, kad sistema būtų tik skaitymo, prie komandos /sbin/mount turite pridėti parinktį -r.
Katalogas, prie kurio prijungta prijungta failų sistema, šiuo metu turi būti tuščias, nes jo turinys nebus pasiekiamas, kol bus prijungta failų sistema.

Norėdami gauti informacijos apie failų sistemas, sumontuotas, pavyzdžiui, LINUX sistemoje, galite naudoti komandą /sbin/mount be argumentų (3 pav.).

Ryžiai. 3.

Ši komanda išspausdina katalogą, kuriame buvo prijungta failų sistema (pvz., usrl), /dev įrenginį, kuriame ji yra, ir prijungimo valandą bei datą. Komanda /sbin/umount naudojama failų sistemai atjungti, o tai yra priešinga komandai mount. Tai išlaisvina failų sistemą ir tarsi pašalina ją iš visos jos katalogų struktūros, kad visi jos failai ir katalogai būtų nepasiekiami:
# /sbin/umount /b
# /sbin/umount /dev/dsk/0s2

Negalima atjungti šakninės failų sistemos. Be to, komanda umount nepavyks, jei kas nors naudos failą iš atjungiamos failų sistemos (tai gali būti net taip paprasta, kai vartotojas yra viename iš failų sistemos katalogų, yra atjungiamas).

Komandose mount ir umount vartotojas naudoja fizinio disko įrenginio santrumpą.
LINUX diskų įrenginiai turi savotiškus pavadinimus. LINUX vartotojas niekada nesusiduria su problema, kaip tiksliai nurodyti fizinį įrenginį, kuriame yra informacija. LINUX sistemoje savavališkas skaičius išorinių įrenginių gali būti labai didelis, todėl vartotojui tereikia susidoroti su katalogo, kuriame yra jam reikalingi failai, pavadinimu. Visos failų sistemos sujungiamos vieną kartą, dažniausiai sistemos įkrovos metu. Failų sistemas taip pat galima montuoti kai kuriuose kataloguose iš nuotolinių kompiuterių.

Fiziniams įrenginiams LINUX turi dsk ir rdsk katalogus, kuriuose yra diskų įrenginius atitinkantys failai. Paprastai failų pavadinimai šiuose kataloguose yra vienodi ir vienintelis skirtumas tarp jų yra tas, kad rdsk kataloge yra diskų įrenginiai su specialia prieiga (raw), kuriuos kai kurie sistemos įrenginiai naudoja greitesnei prieigai prie disko. Viename tipiškame dsk kataloge yra šie įrenginiai:
$ 1s /dev/dsk
0s0 1s0 c0t0d0s0 c0tld0s0 f0 f05q f13dt fld8d
0sl 1sl c0t0d0sl c0tld0sl f03d f05qt f13h fld8dt
0s2 1s2 c0t0d0s2 c0tld0s2 f03dt f0d8d f13ht fld8t
. . .
$

LINUX sistemoje disko įrenginiai yra logiškai suskirstyti į skaidinius, panašius į skirsnius, apibrėžtus MasterBoot MS DOS skirsnių lentelėje. Failai 0s1, 0s2, 0s3 ir tt atitinka pirmos, antros, trečios ir tt disko numerio 0 dalis. Failai 1s0, 1sl, 1s2 ir tt atitinka pirmos, antros, trečios ir kt. disko numerio 1 skyrius. Jei sistema turi daugiau diskų, kiekvienam disko numeriui n skirsniai bus sunumeruoti ns0, nsl ir kt.

Sistemose su daugybe diskų įrenginių naudojama tokia numeravimo sistema:
su valdiklio d disko skyriumi

kur valdiklis - disko valdiklio numeris; diskas - disko numeris; skyrius - disko sekcijos numeris.
Taigi, 0s0 paprastai atitinka c0t0d0s0, o 0sl yra c0t0d0sl, o trijų simbolių skaidinių pavadinimai yra tik disko valdiklio numerio 0 trumpinys.

Failai, kurių pavadinimai prasideda raide f, apibrėžia skirtingus diskelių tipus. rmt kataloge yra failai juostiniuose įrenginiuose:
1 USD /dev/rmt
c0s0 cls0 c3s0 ntape ntapel juostos juosta

Failai c0s0, cls0, c2s0 ir c3s0 apibrėžia keturis kasečių saugojimo įrenginius. Failų juosta ir juostelė apibrėžia dviejų ritinių magnetinius saugojimo įrenginius. Failai, kurių pavadinimai prasideda raide n, nurodo tuos pačius įrenginius, tik juosta po panaudojimo nevyniojama, o naudojant kitus failus, juosta atsukama ją naudojanti programai pasibaigus.

Kai kuriose sistemose šie failai turi skirtingus pavadinimus, tačiau jie visada yra /dev, o žodyne, kuris paprastai pateikiamas su sistema, yra išsamus įrenginių ir su jais susijusių failų aprašymas.

ExtX failų sistema įvesties / išvesties operacijoms naudoja duomenų buferį. Skaitydamas informacijos bloką, branduolys pateikia I/O operacijos užklausą keliems gretiems blokams. Tokios operacijos labai pagreitina duomenų gavimą nuosekliai nuskaitant failus. Rašant duomenis į failą, extX failų sistema, rašydama naują bloką, iš anksto deda iki 8 gretimų blokų vienas šalia kito. Šis metodas leidžia sudėti failus į gretimus blokus, o tai pagreitina jų skaitymą ir leidžia pasiekti aukštą sistemos našumą.

mob_info