Когато пренасочвате всеки изход на команда към файл, ще забележите, че съобщенията за грешки се отпечатват в прозореца на терминала. Всяка команда, изпълнена във всяка Linux обвивка, като bash, използва три обикновени I/O потока. За представяне на всеки поток се използва числов дескриптор на файл.
- Стандартният входен поток (stdin): 0
- Стандартният изходен поток (stdout): 1
- Стандартният поток от грешки (stderr): 2
В тази публикация ще схванем информацията, която попада при пренасочване на stdout и stderr към файл.
Стандартен изход (stdout):
Всяка операционна система, базирана на Linux, има убеждение за място по подразбиране за изпълнената команда. Всички наричат това понятие stdout или стандартен изход, за да звучи по -лесно. Вашата черупка Bash или Zsh непрекъснато търси изходното място по подразбиране. Когато черупката открие нов изход, тя го показва на екрана на терминала, за да го видите. В противен случай той ще изпрати изхода до местоположението му по подразбиране.
Стандартна грешка (stderr):
Стандартна грешка или stderr е подобен на стандартния вход и изход, но се използва за съхраняване на съобщения за грешка. Стандартната грешка може да бъде пренасочена към командния ред или файл с помощта на терминал. Ако искате да записвате или съхранявате съобщения в отделен лог файл или да скриете съобщенията за грешки, пренасочването на stderr ще ви помогне. Сега нека се насочим към практическата страна на пренасочването на stdout и stderr.
Пренасочване на stdout и stderr към файл:
Тъй като пренасочването е метод за улавяне на програмен изход и изпращането му като вход към друга команда или файл. Входно -изходните потоци могат да бъдат пренасочени чрез използване на n> оператора, където n е номерът на файловия дескриптор. За пренасочване на stdout използваме 1>, а за stderr 2> се добавя като оператор.
Създадохме файл с име sample.txt за съхраняване на пренасочения изход в текущата ни директория.
(Команда> файл) се счита за класическия оператор за пренасочване, който пренасочва само стандартния изход със стандартната грешка, показана в терминала. Ще демонстрираме различни опции за пренасочване на stderr.
Пренасочване на stderr и stdout към отделни файлове:
По -долу е синтаксисът на командата за пренасочване на stdout и stderr към отделни файлове.
команда >навън2>грешкаДадената по-долу команда ще пренасочи изхода към изходящия файл и съобщенията за грешки към файла с грешки.
$коткаsample.txt>навън2>грешка
Пренасочване на stderr към stdout:
Обичайна практика е да пренасочвате stderr със стандартния изход на програма, за да съхранявате всичко в един файл. Ето синтаксиса на командата за пренасочване на stderr към stdout:
команда >навън2> &1$ls >samplefile.txt2> &1$коткаsamplefile.txt
> out redirects пренасочва stdout към samplefile.txt, а 2> & 1 ще пренасочи stderr към текущото местоположение на stdout.
Ако stderr е пренасочен първо към stdout, използвайте дадената по-долу команда, за да пренасочите stdout към файл.
команда 2> &1 > файл$ls -към 2> &1 >samplefile.txt$коткаsamplefile.txt
&> се използва също за същата функционалност, която изпълнява2> & 1.
команда &> файл$ls &>samplefile.txt$коткаsamplefile.txt
Пренасочване на stdout и stderr към един файл:
Всички черупки не поддържат това пренасочване на формуляри, но bash и Zsh го поддържат. Stdout и stderr могат да бъдат пренасочени чрез следния синтаксис.
команда &>навън$коткаsample.txt&>навън
В предстоящия раздел на статията ще разгледаме отделния пример за пренасочване на stdout и stderr.
Пренасочване на stdout към файл:
Стандартният изход е представен с 1 в списъка с номера на файлови дескриптори. За команда за пренасочване без номер на дескриптор на файл терминалът задава стойността му на 1. Синтаксисът за пренасочване на stdout към файл е даден, както следва:
команда > файлИзползваме sample.file за съхраняване на стандартния изход на командата ls -al
$ls -към >sample.txt$коткаsample.txt
команда 1> файл$ls 1>sample.txt
$коткаsample.txt
Пренасочване на stderr към файл:
Използвайте оператора 2> за пренасочване на stderr към файл.
команда 2> файл $ls -към 2>sample.txt
Можем да комбинираме изпълнението за stderr и stdout в една команда за пренасочване.
команда 2>error.txt1>output.txtВ дадения по-долу пример съобщенията за грешка ще се съхраняват в error.txt, където output.txt ще има стандартния си изход на команда ls.
$ls 2>error.txt1>output.txt$коткаoutput.txt
Заключение:
Наличието на концепция за пренасочване и файлови дескриптори за I/O потоци е много ценно, докато работите в терминал на Linux. В тази публикация говорихме за обикновените I/O потоци, включително stdout и stderr. Първият раздел на тази публикация ви предоставя подробна информация за пренасочването, I/O потоците и числовия дескриптор на файлове. След това сте видели практическия пример за различни форми на пренасочване на stdout и stderr.