Каждый процесс имеет три потока данных: stdin, stdout и stderr. Рассмотрим, как различить вывод потоков stdout и stderr, и как перенаправить их в файл.
Перенаправление STDOUT
Для демонстрации используем команды ls и mkdir. Сначала перенаправим вывод потока stdout команды ls в файл.
- Выполним команду ls > stdout.txt. Символ > означает перенаправление stdout в указанный файл.
- Вывод на терминале отсутствует, так как он перенаправлен в файл stdout.txt.
- Проверим содержимое файла командой cat stdout.txt. В файле содержится список файлов и папок – тот же вывод, что и при выполнении ls в терминале, но без цветового оформления.
- Для удаления файла stdout.txt используем команду rm stdout.txt.
Перенаправление STDERR
Рассмотрим команду mkdir без аргументов, которая генерирует сообщение об ошибке.
- Выполним команду mkdir без аргументов. На терминале отобразится сообщение об ошибке.
- Попробуем перенаправить вывод с помощью той же команды, что и для ls: mkdir > stdout.txt.
- Проверим содержимое stdout.txt. Файл пуст. Ошибка не перенаправлена в stdout.txt.
- Для перенаправления stderr используем команду mkdir 2> stderr.txt. 2> перенаправляет stderr в файл stderr.txt.
- Проверим содержимое папки. Появился файл stderr.txt.
- Прочитаем содержимое файла stderr.txt командой cat stderr.txt. В файле содержится сообщение об ошибке, которое ранее отображалось на терминале.
Мы рассмотрели перенаправление потоков stdout и stderr в файлы с помощью операторов > (перенаправление stdout) и 2> (перенаправление stderr). Это позволяет управлять выводом программ и сохранять его для дальнейшего анализа.