Unix I/O peradresavimas. Peradresuoti standartinį I/O ir klaidas

Peradresavimas paprastai atliekamas įterpiant specialųjį simbolį ">" tarp komandų. Paprastai sintaksė atrodo taip:

Command1 > file1

Vykdo komandą1, įrašydamas standartinę išvestį į failą1.

Komanda 1< файл1

vykdo komandą1, naudodamas failą1 kaip įvesties šaltinį (vietoj klaviatūros).

Komanda 1< файл1 >failas2

sujungia dvi ankstesnes parinktis. Vykdo komandą1 su įvestimi iš failo1 ir išvesties į failą2

Konvejeriai

Konvejeriai yra kelių programų galimybė dirbti kartu, kai vienos programos išvestis eina tiesiai į kitos programos įvestį, nenaudojant tarpinių laikinųjų failų. Sintaksė:

komanda1 | komanda 2

Vykdo komandą1, naudodamas išvesties srautą kaip įvesties srautą, kai vykdoma komanda2, o tai atitinka dviejų peradresavimų ir laikinojo failo naudojimą:

Command1 > TemporaryFile komanda2< ВременныйФайл rm ВременныйФайл

Geras komandų konvejerių pavyzdys yra echo derinimas su kita komanda, kad būtų pasiektas interaktyvumas neinteraktyvioje aplinkoje, pavyzdžiui:

echo -e "Vartotojo vardas\nSlaptažodis" | ftp localhost

Tai paleidžia klientą, kuris prisijungia prie localhost kaip vartotojo vardas, paspaudžia Enter ir įveda slaptažodį Slaptažodis.

Peradresavimas į standartinius failų aprašus / iš jų

UNIX apvalkale, kuris yra išvestas iš Bourne apvalkalo, ankstesnius du veiksmus galima patobulinti nurodant skaičių (failo deskriptorių) prieš pat peradresavimo simbolį. Šis skaičius nurodo, kuris srautas naudojamas peradresavimui. UNIX turi šiuos standartinius įvesties / išvesties srautus:

Pvz.:

Command1 2 > file1

Komandų apvalkaluose, gautuose iš C Shell, pagal sintaksės taisykles, norėdami nurodyti srautą, į kurį nukreipiama, po peradresavimo simbolio reikia pridėti & simbolį.

Dažnai standartinis klaidų srautas yra derinamas su standartiniu išvesties srautu, kad būtų galima tvarkyti klaidas ir įprastą programos išvestį. Pvz.:

Rasti / -name .profile> results.txt 2>&1

bandys rasti visus failus, pavadintus .profile. Jei paleisite šią komandą be peradresavimų, paieškos rezultatai bus nukreipti į , o klaidų pranešimai (pvz., apie nepakankamas prieigos teises bandant ieškoti apsaugotuose kataloguose) nukreipiami į . Pagal numatytuosius nustatymus šiuos vaidmenis atlieka konsolė. Jei standartinė išvestis nukreipiama į rezultatų failą, klaidos vis tiek bus siunčiamos į konsolę. Siekiant užtikrinti, kad ir klaidos, ir paieškos rezultatai būtų siunčiami į result.txt failą, standartiniai klaidų ir išvesties srautai sujungiami naudojant 2>&1 .

Rašymas 2>&1 prieš > neveiks, nes kai vertėjas skaito 2>&1 , ji dar nežino, kur nukreipiamas standartinis išvesties srautas, todėl klaidų ir išvesties srautai nebus sujungti.

Jei kombinuotas rezultatas turi būti nukreiptas į kitos programos įvestį, tada seka 2>&1 turi būti prieš konvejerio ženklą. Pvz.:

Rasti / -name .profile 2>&1 | mažiau

Supaprastinta komandos forma:

Command>file2>&1

atrodo taip:

Command &> failą

Command>&failas

Konvejerio grandinė

Peradresavimo ir vamzdynų komandos gali būti sujungtos kartu, kad būtų sukurtos sudėtingesnės komandos, pavyzdžiui:

ls | grep ".sh" | rūšiuoti> shlist

Gauna dabartinio katalogo turinio sąrašą, kuris filtruojamas, paliekant tik eilutes, kuriose yra ".sh", tada šis filtruotas sąrašas yra surūšiuojamas pagal leksinę rūšį ir galutinis rezultatas įtraukiamas į failą shlist. Tokio tipo konstrukcijos dažnai randamos UNIX apvalkalo scenarijuose.

Peradresavimas į kelis kaiščius

Standartinė komanda gali nukreipti komandos išvestį į kelias vietas vienu metu. Pavyzdys:

Ls -lrt | tee failas1

nukreipia standartinę komandos išvestį ls -lrt(failų sąrašas) tiek konsolėje, tiek viduje failas1.

Peradresuoti su priedu

Komandų apvalkale galite peradresuoti į failą ir pridėti jį prie pabaigos. Tokiu atveju faile saugoma informacija nebus ištrinta, o visa nauja informacija bus įtraukta į šio failo pabaigą. Sintaksė:

Command1>> file1

Įterptas dokumentas

Kai kurie apvalkalai ir net taikomosios kalbos (PHP), „Perl“, leidžia įtaisytųjų dokumentų sintaksę (žr. Heredoc sintaksę), kuri leidžia nukreipti įvesties srautą iš paties programos failo, pavyzdžiui: cat « EOF Any čia patalpintas tekstas, įskaitant Specialūs simboliai EOF

Galutinis įterpto dokumento EOF pabaigos parašas (galima naudoti savavališką reikšmę, tačiau dažnai naudojamas EOF – pagal reikšmę) turi prasidėti eilutės pradžioje.

Jei išvestis į (grafinę) konsolę nėra labai didelė, galite tiesiog pasirinkti gabalą pele ir įterpti jį į pranešimą spustelėdami vidurinį mygtuką. Kitu atveju galite naudoti išvesties peradresavimą į 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 esamo virtualiosios konsolės buferio momentinį vaizdą kaip paprastą tekstinį failą su numatytuoju pavadinimu screen.dump. Kaip argumentą galite naudoti konsolės, kurią norite iškelti, numerį. Ir pridėjus parinktį -file failo pavadinimas, šis iškrovimas bus nukreiptas į failą nurodytu pavadinimu. Parinktis -append pridės naują išrašymą prie jau esamo failo - "numatytasis" screen.dump arba pavadintas su -file parinktimi.

Tie. panaudojus komandą like

Setterm -dump -failas /root/screenlog

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

Radau kitą sprendimą, kaip nukopijuoti/įklijuoti tekstą teksto konsolėje 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 valdytojas langų ekranas. Taip pat gali būti naudinga padidinti slinkties buferio dydį.

1) Paleidimo ekranas

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

3) Vykdykite reikiamas komandas, kurių išvestis turi būti nukopijuota.

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

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

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

7) Atsidarykite bet kurį (?) teksto rengyklę (bandžiau mc), ir paspauskite Ctrl+A, Ctrl+] – tekstas įterpiamas. Sutaupyti.

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

Kaip padidinti slinkimo atgal buferį?

Pirmasis sprendimas būtų padidinti numatytąjį buferio dydį branduolio šaltiniuose ir jį sukompiliuoti iš naujo. Leiskite manyti, kad jūs taip pat to nemėgstate kaip aš ir ieškote lankstesnio sprendimo.

Ir yra toks įrankis, jis vadinamas kadrų buferio konsole, sutrumpintai fbcon. Šiame įrenginyje yra dokumentacijos failas fbcon.txt; jei įdiegėte branduolio dokumentaciją, vadinasi, ją turite. Ieškokite jo kur nors rajone /usr/sharešakos (tikslaus kelio nurodyti negaliu dėl paskirstymo skirtumų).

Šiuo metu atsiprašau: turime padaryti nedidelį nukrypimą 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ų apima slinkties buferį; Pasirodo, galite "paprašyti" vaizdo buferio skirti daugiau atminties slinkties buferis. Tai pasiekiama naudojant branduolio įkrovos parametrus. Pirmiausia tu reikalauji kadrų buferis(vaizdo buferis); Tada paprašykite didesnio slinkties buferio.

Š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. Jūsų atveju taip gali nebūti. Jei pirmiau pateiktos parinktys veikia, gerai; bet ką daryti, jei norite padidinti eilučių skaičių arba nustatyti mažesnį šriftą ekrane? Visada tai darydavote naudodami parinktį vga=xxx – 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 tvirtina, kad daugiau nustatyti neįmanoma. Aš to nebandžiau.

Galite naudoti scenarijų.

Scenarijaus failo pavadinimas.log

kai baigiamos visos reikalingos komandos -

Viskas įrašoma į failovardas.log

FreeBSD turi nuostabią laikrodžių programą, kuri leidžia stebėti terminalus, bet kaip pasirodo Linux jis atlieka visai kitokias funkcijas =\ Paieškojus google šią temą rasite kažką...

„Linux“ sistemų administravimas ir iš tikrųjų bet kokios į UNIX panašios sistemos administravimas. Neatskiriamai susijęs su darbu komandų apvalkaluose. Patyrusiems sistemos administratoriai Toks sąveikos su sistema būdas yra daug patogesnis ir greitesnis nei naudojant grafinius apvalkalus ir sąsajas. Žinoma, daugeliui tai iškart atrodys perdėta, tačiau tai neginčijamas faktas. Nuolat patvirtinama praktikoje. Ir ši situacija įmanoma dėl kai kurių gudrybių ir įrankių, naudojamų dirbant su komandų konsole. Ir vienas iš šių įrankių yra informacijos kanalų naudojimas ir duomenų srautų nukreipimas procesams.

Šiek tiek teorijos

Pradėti reikėtų nuo to, kad kiekvienam procesui sistema suteikia bent tris informacijos kanalus „naudojimui“:

  • STDIN – standartinis įėjimas;
  • STDOUT – standartinė išvestis;
  • STDERR – standartinė klaida.

Nėra griežto šių kanalų priskyrimo kiekvienam procesui. Patys procesai, iš pradžių atsiradę sistemoje, „nežino“, kam ir kaip priklauso kanalai. Jie (kanalai) yra visos sistemos išteklius. Nors juos proceso vardu įdiegia branduolys. Vamzdžiai gali susieti failus, vamzdžius, jungiančius kitus procesus, tinklo ryšius ir kt.

Į UNIX panašiose sistemose pagal įvesties/išvesties modelį. Kiekvienam informacijos kanalui priskiriama sveikojo skaičiaus reikšmė kaip skaičius. Tačiau dėl saugios prieigos. į aukščiau nurodytus kanalus. Jiems rezervuoti nuolatiniai numeriai – atitinkamai 0, 1 ir 2 STDIN, STDOUT ir STDERR. Vykdant procesus įvesties duomenys nuskaitomi per STDIN. Per klaviatūrą, iš kito proceso išvesties, failo ir tt Ir išvesties duomenis (per STDOUT), taip pat klaidų duomenis (per STDERR). Jie rodomi ekrane, faile, prie įvesties (jau per kito proceso STDIN) į kitą programą.

Norint pakeisti informacijos kanalų kryptį ir sujungti juos su failais, yra Specialios instrukcijos simbolių pavidalu<, >ir >>. Taigi, pavyzdžiui, instrukcijos< можно заставить направить процессу по STDIN содержимое файла. А с помощью инструкции >Procesas siunčia išvesties duomenis į failą per STDOUT, o visas esamo failo turinys pakeičiamas. Jei trūksta, jis bus sukurtas. Instrukcija >> atlieka tą patį, ką ir > instrukcija, bet neperrašo failo, o prideda išvestį prie jo pabaigos. Norėdami sujungti srautus (t. y. nukreipti juos į tą patį tikslą) STDOUT ir STDERR, turite naudoti >& konstrukciją. Norėdami nukreipti vieną iš srautų, pavyzdžiui, STDERR, į atskirą vietą, yra instrukcija 2>.

Norėdami susieti du kanalus. Pavyzdžiui, kai reikia nukreipti vienos komandos išvestį į kitos komandos įvestį. Tam turėtumėte naudoti nurodymą (simbolį) „|“. Tai reiškia loginis veikimas"arba". Tačiau gijų susiejimo kontekste šis aiškinimas neturi reikšmės, o tai dažnai klaidina pradedančiuosius. Dėl tokių galimybių galima sukurti ištisus komandų konvejerus. Dėl to darbas komandų apvalkaluose yra labai efektyvus.

Išvestis į failą

Nukreipkite komandos išvestį ir parašykite šią išvestį į /tmp/somemessage failą:

$ echo „Tai bandomasis pranešimas“ > /tmp/somemessage

Šiuo atveju kaip komanda, iš kurios išvesties (per STDOUT) duomenys peradresuojami teksto forma „ Taiyraabandymasmasažas“ yra echo programa. Dėl to bus sukurtas failas /tmp/somemessage, kuriame bus įrašas „Tai yra bandomasis pranešimas“. Jei failas nebuvo sukurtas, jis bus sukurtas, tada visi jame esantys duomenys bus perrašyti. Jei reikia pridėti išvestį prie failo pabaigos, turite naudoti operatorių „>>“.

$ echo “Tai bandomasis pranešimas” >> /tmp/somemessage $ cat /tmp/somemessage Tai bandomasis pranešimas Tai bandomasis pranešimas

Kaip matome iš pavyzdžio, antroji komanda pridėjo eilutę prie failo pabaigos.

Duomenų gavimas iš failo

Šis pavyzdys rodo prisijungimo peradresavimą:

$ paštas -s "Pašto testas" john< /tmp/somemessage

Dešinėje komandos pusėje (po simbolio<) находится файл-источник /tmp/somemesage, содержимое которого перенаправляется в утилиту mail (через STDIN), которая в свою очередь, имеет в качестве собственных параметров заголовок письма и адресата (john).

Kiti pavyzdžiai

Šis pavyzdys parodo, kodėl kartais labai naudinga atskirti srautus nuo STDIN ir STDERR kanalų:

$ rasti / -name core 2> /dev/null

Faktas yra tas, kad komanda find / -name core „pabarstys“ klaidų pranešimus, pagal numatytuosius nustatymus išsiųsdama juos į tą pačią vietą kaip ir paieškos rezultatai. Tai yra, į terminalą komandų konsolė, o tai gerokai apsunkins vartotojo informacijos suvokimą. Nes jūsų ieškomi rezultatai bus prarasti tarp daugybės klaidų pranešimų, susijusių su prieigos režimu. Konstrukcija 2>/dev/null priverčia Find siųsti klaidos pranešimus (po STDERR kanalo su rezervuotu numeriu 2) į netikrą įrenginį /dev/null, išvestyje paliekant tik paieškos rezultatus.

$ rasti / -name core > /tmp/corefiles 2> /dev/null

Čia konstrukcija > /tmp/corefiles nukreipia paieškos programos išvestį (per STDOUT vamzdį) į failą /tmp/corefiles. Klaidų pranešimai išfiltruojami į /dev/null, o ne rodomi komandų konsolės terminalo išvestyje.

Norėdami susisiekti vienas su kitu skirtingus kanalus skirtingoms komandoms:

$ fsck --help | drep M

M netikrinkite prijungtų failų sistemų

Ši komanda išspausdins eilutę (ar eilutes), kurioje yra simbolis „M“, iš paslaugų programos greito pagalbos puslapio. Tai labai patogu, kai reikia peržiūrėti tik jus dominančią informaciją. Šiuo atveju grep programa gauna išvestį (naudodama | instrukciją) iš komandos fsck --help. Ir tada, pagal „M“ modelį, viskas, kas nereikalinga, yra išmetama.

Jei norite, kad kita konvejerio komanda būtų vykdoma tik visiškai ir sėkmingai įvykdžius ankstesnę komandą, turėtumėte naudoti && instrukcijas, pavyzdžiui:

$ lpr /tmp/t2 && rm /tmp/page1

Ši komanda ištrins /tmp/page1 failą tik tada, kai jo turinys bus išsiųstas iš spausdinimo eilės. Norint pasiekti priešingą efektą, ty kai reikia vykdyti kitą komandą konvejeryje tik po to, kai ankstesnė nepavyksta (neveikia dėl klaidos, kai kodas nėra nulis), naudokite ||

Kai sunku suprasti kodo eilutę, apimančią labai ilgą komandų konvejerį, galite ją suskirstyti į loginius komponentus eilutę po eilutės naudodami pasvirąjį brūkšnį „\“:

$ cf --preserve --recursive /etc/* /spare/backup \ || echo "Padaryti atsarginę klaidą"

Atskiras komandas, kurios turi būti vykdomos viena po kitos, galima sujungti į vieną eilutę, atskirtą dvitaškiu „;“:

Jei radote klaidą, pažymėkite teksto dalį ir spustelėkite Ctrl + Enter.

Kai dirbate terminale, visą komandų išvestį realiuoju laiku matote tiesiog 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 variantas: tiesiog peradresuokite terminalo išvestį į failą

Tokiu atveju visas bet kurios komandos 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šsaugos komandos rezultatą nurodytą failą ir, jei jame jau yra informacijos, ji ją perrašys.

operatorius >> nukreips komandos išvestį į failą, o jei jame taip pat yra informacijos, nauji duomenys bus pridėti prie failo pabaigos.

Pažvelkime į komandos pavyzdį ls , kuriame rodomas failų ir aplankų sąrašas nurodytame kataloge. Įrašykime jo 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. Tam galite naudoti bet kurį teksto redaktorius, nesvarbu, kurį iš jų turite. 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 savo darbo rezultatus ir ls , Ir uname .

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

Ne visada visiems patogu naudotis operatoriais > Ir >> , nes vis tiek geriau, kai komandų jaudulį 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, kaip dirbti su terminalu, yra Linux I/O srauto nukreipimas. Ši terminalo funkcija leidžia nukreipti komandų išvestį į failą arba failo turinį į komandų įvestį, sujungti komandas ir formuoti komandų konvejerius.

Šiame straipsnyje apžvelgsime, kaip Linux sistemoje atliekamas I/O srauto peradresavimas, kokie operatoriai tam naudojami ir kur visa tai galima panaudoti.

Visos mūsų vykdomos komandos pateikia trijų tipų duomenis:

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

Linux sistemoje visos medžiagos laikomos failais, įskaitant Linux įvesties/išvesties 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 galėtų dirbti iš čia;
  • STDOUT arba 1- tai yra standartinė išvestis, programa siunčia visus savo darbo rezultatus. Jis susietas su ekranu, o tiksliau – su terminalu, kuriame veikia 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 priversti programą nuskaityti duomenis iš failo Failų sistema, o ne klaviatūra, klaidas taip pat galite išvesti į failą, o ne į ekraną 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 n - pakartoja operaciją penkis kartus, kad gautų informaciją apie visus procesus. Dabar pažiūrėkime, kas atsitiko su kate:

Simbolis ">" perrašo informaciją iš failo, jei ten jau kažkas yra. Norėdami pridėti duomenis prie galutinio naudojimo ">>" . Pavyzdžiui, peradresuoti išvestį į linux failas taip pat viršuje:

top -bn 5 >> top.log

Pagal numatytuosius nustatymus peradresavimui naudojamas standartinis išvesties failo aprašas. 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į ketinate peradresuoti. Klaidoms tai yra numeris 2. Pavyzdžiui, bandant pasiekti supervartotojo 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 perduoti abi rankenas:

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į. Tada visos klaidos bus siunčiamos į tą patį failą. Antrasis metodas yra paprastesnis:

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

Taip pat galite naudoti pridėjimą, o ne perrašyti:

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 naudodami operatorių "<" :

katė

Taip pat galite iš karto nukreipti išvestį į failą. Pavyzdžiui, iš naujo surūšiuokime sąrašą:

rūšiuoti rūšiuoti.išvestis

Taigi, viena komanda nukreipiame įvestį / išvestį į „Linux“.

Tunelių naudojimas

Galite dirbti ne tik su failais, bet ir nukreipti vienos komandos išvestį į kitos komandos įvestį. Tai labai naudinga atliekant sudėtingas operacijas. Pavyzdžiui, parodykime 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 vienai komandai turi būti pateiktas tik vienas parametras, 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:

echo "Tee veikimo testas" | tee failas1

Kartu su kitomis komandomis jas galima naudoti kuriant sudėtingas kelių komandų komandas.

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!

Dalintis