Перенаправление потоков в Linux – база оболочки: stdout, stderr и stdin можно слать в файл, в другую команду или «в никуда». Это нужно для логов, пайплайнов и автоматизации. Ниже операторы, которые реально используют каждый день, и короткие примеры.
Три стандартных потока
- 0 – stdin – ввод (клавиатура или файл).
- 1 – stdout – обычный вывод.
- 2 – stderr – ошибки и диагностика.
По умолчанию 1 и 2 идут в терминал. Разделение удобно: результат – в один файл, ошибки – в другой, или всё вместе.
Основные операторы
>– stdout в файл (файл перезаписывается).>>– stdout в конец файла (append).<– содержимое файла на stdin команды.2>/2>>– stderr в файл (overwrite / append).2>&1– stderr туда же, куда сейчас смотрит stdout.|– pipe: stdout левой команды на stdin правой.
Примеры
Запись и дополнение файла
echo "Привет, мир!" > hello.txt echo "До свидания, мир!" >> hello.txt
Первая команда создаст или перезапишет hello.txt. Вторая добавит строку в конец.
Ввод из файла
cat < hello.txt # то же по смыслу для многих утилит: sort < data.csv
У cat есть аргумент-файл, но < показывает именно redirect stdin – удобно в скриптах и с командами, которые читают только stdin.
Только ошибки
ls -l /несуществующий_каталог 2> error.log
Сообщение об ошибке уйдёт в error.log, а не на экран. stdout при успехе по-прежнему в терминал (здесь его почти нет).
Stdout и stderr в один лог
./deploy.sh > deploy.log 2>&1 # в bash часто пишут короче: ./deploy.sh &> deploy.log
Порядок важен: сначала направляете stdout, потом 2>&1. Иначе stderr может уйти не туда.
Pipe
cat hello.txt | grep "Привет" # типичный пайплайн: ps aux | grep nginx | grep -v grep
Вывод одной команды – вход следующей. Цепочки grep | sort | uniq – обычный способ разобрать логи без тяжёлых GUI.
Чуть глубже
/dev/null– «чёрная дыра»:cmd > /dev/null 2>&1глушит весь вывод.- Here-doc:
cat <<EOF ... EOF– многострочный stdin прямо в скрипте. - Process substitution (bash):
diff <(cmd1) <(cmd2)– сравнение выводов без временных файлов. - set -o pipefail в bash-скриптах: пайп падает, если упала любая команда, а не только последняя.
Краткий вывод
Освоив >, >>, 2>, 2>&1 и |, вы контролируете логи, отчёты и обработку данных из shell. Это фундамент админки и CI: меньше ручного копирования из терминала, больше воспроизводимых команд.