Linux. Как перенаправить вывод и ошибки в файл?

Главная  >>  Администрирование  >>  centOS  >>  Linux. Как перенаправить вывод и ошибки в файл?

Сегодня речь пойдет о том, как перенаправить вывод команды в файл. К примеру, нам надо логировать вывод команды, которая, к примеру работает в Кроне.

На самом деле именно Крон — это то место, где команды работают в фоне и можно впервые столкнуться с проблемой непонимание результатов выполнения таска.

Итак. У программ есть три потока:
STDIN или 0 — поток ввода.
STDOUT или 1 — поток вывода. Это всё, что выводит программа.
STDERR или 1 — поток ошибок. Это, скажем, системные ошибки при выполнении.

Сейчас речь пойдет о потоках вывода и ошибок.

Итак, для того, чтобы перенаправить вывод нужно использовать символ >. Да, просто знак больше и путь к файлу, куда мы хотим направить вывод.

Например:

Этот просто пример демонстрирует, как можно вызвать команду и перенаправить вывод. В результате её выполнения на экране ничего не окажется — но по указанному пути появится файл с содержимым того самого вывода.
Попробуйте выполнить whoami без перенаправления, а затем с ним. И вы точно поймете о чем речь.

Также Вы можете указать номер потока при выводе. Строки ниже — идентичны:

Просто мы указываем, КАКОЙ именно поток хотим обработать.

Это актуально, когда Вам нужно перенаправить не только вывод, но и потом ошибок. К примеру, если Вы в Кроне укажите программу, которой нет в глобальном пространстве — ошибка будет не видна. В зависимости от настроек системы она может быть в общем логе Крона — но мы говорим о другом случае.

Буквально недавно был случай, когда задача крутилась в кроне, направление вывода давало просто пустой файл. А копипаст команды с таска в консоль — отлично отрабатывал. Решение крылось в том, что нужно было указать абсолютный путь к выполняемому файлу, но т.к. поток вывода был пустым — узнать об этом удалось только после перенаправления также потока ошибок.

Для перенаправления обеих потоков:

Ну и в конце добавлю, что символ > всегда переписывает файл. Для того, чтобы вывод был «накопительным» — т.е. происходила дозапись в файл, а не ег оперепись — используйте два знака больше >>.

Вот такая история с перенаправлением вывода и ошибок в файл в Linux. Если статья была полезной, или остались вопросы или, наоборот, я в чем-то ошибся — добро пожаловать в комментарии.