Перенаправление потоков — возможность командной оболочки Linux перенаправлять стандартные потоки, например, в файл. Эта операция осуществляется при помощи специальных символов — >
, <
и |
. Существует три стандартных потока ввода / вывода данных:
stdin
— стандартный ввод;stdout
— стандартный вывод;stderr
— стандартный вывод ошибок.
Во время сбора статистики о системе Вам может понадобиться записать ошибки, которые произошли в процессе ее работы. В этой статье мы расскажем, как направить стандартный поток ошибок в файл в Linux.
Содержание:
- Что такое стандартный вывод ошибок
- Как перенаправить поток стандартного вывода ошибок в файл
- Как направить в файл одновременно потоки stdout и stderr
- Выводы
Что такое стандартный вывод ошибок
Стандартный поток ошибок зарезервирован для вывода диагностических и отладочных сообщений в текстовом виде. Он похож на стандартный поток вывода, хотя, по своей сути, отличается от него. Стандартный поток ошибок был создан для того, чтобы полезные данные, которые генерируют команды терминала, не смешивались с сообщениями об ошибках. Такое возможно как раз благодаря раздельному перенаправлению потоков вывода и ошибок.
Как и другие потоки, стандартный вывод ошибок имеет свой дескриптор — 2
. Для перенаправления сообщений об ошибках Вы должны использовать значение дескриптора 2
с оператором перенаправления вывода:
2>
— направляет стандартный поток ошибок в файл (если в нем есть другие данные, они будут перезаписаны новыми);2>>
— направляетstderr
в файл (если в нем есть другие данные, новые будут дописаны к ним).
Как перенаправить поток стандартного вывода ошибок в файл
Перейдем к практической части. Как было сказано ранее, чтобы направить стандартный вывод ошибок в файл, нужно использовать символы 2>
. Для записи ошибок будем использовать следующую команду:
Для примера, выполним команду find
для поиска файлов с расширением *.conf
и прикажем оболочке направить поток ошибок в файл:
Теперь можно открыть созданный файл и посмотреть, какие ошибки были записаны в него. Для этого воспользуемся командой cat
:
Читайте также: Курс LFCS — часть 1: обработка текстовых потоков в Linux.
Попытка обращения команды find
к некоторым файлам приведет к ошибке — Permission denied. Потому что мы не предоставили утилите привилегии суперпользователя (root). Поэтому сообщения об этих ошибках оказались в данном файле.
Как направить в файл одновременно потоки stdout и stderr
Системному администратору иногда требуется работать сразу с несколькими потоками, например со стандартным выводом (stdout
) и стандартным потоком ошибок (stderr
). Допустим, что Вам нужно одновременно записать в файлы сообщения из этих двух потоков. Вы можете это сделать с помощью одной команде:
Таким образом символ >
направляет стандартный вывод в файл file.txt
, а символы 2>
перенаправляют сообщения об ошибках в error.txt
. Теперь давайте повторим выполнение команды find
для поиска файлов с расширением *.conf
:
Вы можете заменить два разных оператора перенаправления (>
и 2>
) одним — &>
. Однако, таким способом Вы сможете направить стандартный поток ошибок и вывода только в один файл:
Для примера все также будем использовать утилиту find
:
Важно: при использовании комбинации символов &>
сообщение об ошибках и стандартный вывод встречаются в файле по мере их поступления вперемешку.
Выводы
Мы выяснили, как использовать перенаправление ввода / вывода для записи сообщений об ошибках в файл в операционной системе Linux. Для этого мы разобрали несколько способов решения поставленной задачи. Полученные навыки повысят Ваш уровень знаний и упростят работу с операционной системой.
Спасибо за время, уделенное прочтению статьи!
Если возникли вопросы — задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet / DevOps (программируемые системы) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).
Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!
- Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
- Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
- Проведем вечерние онлайн-лекции на нашей платформе.
- Согласуем с вами удобное время для практик.
- Если хотите индивидуальный график — обсудим и реализуем.
- Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
- отредактировать или создать с нуля резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.