Kai bet kurią komandų išvestį nukreipiate į failą, pastebėsite, kad klaidos pranešimai spausdinami terminalo lange. Bet kuri komanda, vykdoma bet kuriame „Linux“ apvalkale, pvz., „Bash“, naudoja tris įprastus įvesties/išvesties srautus. Kiekvienam srautui pavaizduoti naudojamas skaitinis failo aprašas.
- Standartinis įvesties srautas (stdin): 0
- Standartinis išvesties srautas (stdout): 1
- Standartinis klaidų srautas (stderr): 2
Šiame įraše mes suprasime informaciją, kuri patenka į stdout ir stderr peradresavimą į failą.
Standartinė išvestis (stdout):
Kiekviena operacinė sistema, pagrįsta „Linux“, yra įsitikinusi, kad vykdoma komanda yra numatytoji vieta. Visi šią sąvoką vadina „stdout“ arba standartine išvestimi, kad būtų lengviau skambėti. „Bash“ arba „Zsh“ apvalkalas nuolat ieško numatytosios išvesties vietos. Kai apvalkalas aptinka naują išvestį, jis parodo jį terminalo ekrane, kad galėtumėte jį pamatyti. Priešingu atveju jis nusiųs išvestį į numatytąją vietą.
Standartinė klaida (stderr):
Standartinė klaida arba stderr yra panaši į standartinę įvestį ir išvestį, tačiau ji naudojama klaidų pranešimams saugoti. Standartinė klaida gali būti nukreipta į komandų eilutę arba failą naudojant terminalą. Jei norite įrašyti ar išsaugoti pranešimus atskirame žurnalo faile arba paslėpti klaidų pranešimus, jums padės peradresavimas stderr. Dabar pereikime prie praktinės stdout ir stderr peradresavimo pusės.
Stdout ir stderr peradresavimas į failą:
Kadangi peradresavimas yra būdas išgauti programos išvestį ir siųsti ją kaip įvestį į kitą komandą ar failą. Įvesties/išvesties srautus galima nukreipti įjungus operatorių n>, kur n yra failo aprašymo numeris. Norėdami peradresuoti stdout, naudojame 1>, o stderr atveju 2> pridedamas kaip operatorius.
Mes sukūrėme failą pavadinimu sample.txt, kad išsaugotume nukreiptą išvestį dabartiniame kataloge.
(Komanda> failas) laikomas klasikiniu peradresavimo operatoriumi, kuris tik nukreipia standartinę išvestį su standartine klaida, rodoma terminale. Mes parodysime įvairias galimybes taip pat nukreipti stderr.
Stderr ir stdout peradresavimas į atskirus failus:
Žemiau yra komandų sintaksė, skirta nukreipti stdout ir stderr į atskirus failus.
komandą >išeiti2>klaidaŽemiau pateikta komanda nukreipia išvestį į išvesties failą, o klaidų pranešimus-į klaidos failą.
$katėsample.txt>išeiti2>klaida
Stderr nukreipimas į stdout:
Įprasta praktika nukreipti stderr su standartine programos išvestimi, kad viskas būtų saugoma viename faile. Čia yra komandos sintaksė, skirta peradresuoti stderr į stdout:
komandą >išeiti2> &1$ls >samplefile.txt2> &1$katėsamplefile.txt
> out redirects peradresuoja stdout į samplefile.txt, o 2> & 1 nukreipia stderr į dabartinę stdout vietą.
Jei stderr pirmiausia nukreipiamas į stdout, naudokite žemiau pateiktą komandą, kad nukreiptumėte stdout į failą.
komandą 2> &1 > failą$ls -į 2> &1 >samplefile.txt$katėsamplefile.txt
&> taip pat naudojamas toms pačioms funkcijoms, kurias atlieka 2> & 1.
komandą &> failą$ls &>samplefile.txt$katėsamplefile.txt
Stdout ir stderr peradresavimas į vieną failą:
Visi apvalkalai nepalaiko šios formos peradresavimo, tačiau bash ir Zsh palaiko. „Stdout“ ir „stderr“ galima peradresuoti naudojant šią sintaksę.
komandą &>išeiti$katėsample.txt&>išeiti
Būsimame straipsnio skyriuje apžvelgsime atskirą stdout ir stderr peradresavimo pavyzdį.
Stdout nukreipimas į failą:
Standartinė išvestis failų aprašų skaičių sąraše žymima 1. Peradresavimo komandai be jokio failo deskriptoriaus numerio terminalas nustatė reikšmę į 1. Sintaksė, skirta stdout nukreipti į failą, pateikiama taip:
komandą > failąMes naudojame pavyzdį.file, kad išsaugotume standartinę komandos ls -al išvestį
$ls -į >sample.txt$katėsample.txt
komandą 1> failą$ls 1>sample.txt
$katėsample.txt
Stderr nukreipimas į failą:
Norėdami nukreipti stderr į failą, naudokite 2> operatorių.
komandą 2> failą $ls -į 2>sample.txt
„Stderr“ ir „stdout“ vykdymą galime sujungti vienoje peradresavimo komandoje.
komandą 2>error.txt1>output.txtŽemiau pateiktame pavyzdyje klaidų pranešimai bus saugomi faile error.txt, kur output.txt turės standartinę ls komandos išvestį.
$ls 2>error.txt1>output.txt$katėoutput.txt
Išvada:
Dirbant „Linux“ terminale labai naudinga turėti peradresavimo koncepciją ir failų aprašus I/O srautams. Šiame įraše mes kalbėjome apie įprastus įvesties/išvesties srautus, įskaitant stdout ir stderr. Pirmajame šio įrašo skyriuje pateikiama išsami informacija apie peradresavimą, įvesties/išvesties srautus ir skaitinio failo aprašą. Be to, jūs matėte praktinį įvairių stdout ir stderr peradresavimo formų pavyzdį.