Введение
По умолчанию команды Linux выводят всё на экран. Но что делать, если эти данные нужно сохранить?
Этот процесс называется перенаправлением. Представьте, что вы указали для почтового отправления «адрес переадресации».
Так в целом удобно понимать синтаксис оболочки: перенаправление не меняет основное действие команды, а изменяет место назначения её ввода или вывода.
В этой лабораторной работе вы изучите три способа управлять направлением данных:
- Перенаправление с перезаписью (
>): сохраняет вывод в файл, заменяя его прежнее содержимое. - Перенаправление с добавлением (
>>): добавляет вывод в конец файла. - Перенаправление ошибок (
2>): перехватывает только сообщения об ошибках.
Перенаправление вывода с перезаписью
Знак «больше» > — это оператор перезаписи.
Многие начинающие понимают > как «сохранить в файл», но точнее будет сказать: «направить стандартный вывод в этот файл и заменить его прежнее содержимое». Это различие становится важным при более сложном объединении команд.
Оператор сообщает Linux: «Возьми вывод этой команды и запиши его в данный файл. Если файл уже существует, сначала сотри его содержимое».
Перейдите в каталог проекта:
cd ~/project
Перенаправьте вывод в файл output.txt:
echo "Hello, Linux." > output.txt
На экране ничего не появится. Текст записан в файл. Проверьте это:
cat output.txt
Теперь убедитесь, почему этот оператор называют «перезаписью». Выполните:
echo "This is new content." > output.txt
cat output.txt
Старой строки Hello, Linux. больше нет. Оператор > полностью очистил файл перед записью нового содержимого.
Поэтому к перенаправлению нужно относиться так же осторожно, как к изменению файла. Короткая команда может сразу заменить содержимое существующего файла.
Добавление вывода (>>)
Часто данные не нужно уничтожать — требуется добавить к ним новые строки. Для этого используйте двойной знак «больше» >>.
Он работает как инструкция добавления.
Добавьте новую строку в output.txt:
echo "This line is appended." >> output.txt
cat output.txt
Вы должны увидеть обе строки.
Исходное содержимое сохранилось. Повторите операцию:
echo "Another line." >> output.txt
cat output.txt
Оператор >> отлично подходит для журналов.
Добавление важно, потому что многие эксплуатационные файлы со временем увеличиваются, а не создаются заново. В журналах, отчётах и журналах команд часто используется рабочий процесс «добавить в конец».
Перенаправление ошибок (2>)
Как вы узнали ранее, Linux разделяет «обычный вывод» (stdout) и «вывод ошибок» (stderr).
Операторы > и >> работают только с «обычным выводом». Ошибки они не перенаправляют.
Здесь модель потоков из предыдущей лабораторной работы становится практически полезной. Если вывод и ошибки относятся к разным потокам, Linux может направить их в разные места назначения.
Чтобы перехватывать ошибки, используйте 2>. Идентификатор стандартного вывода ошибок — 2.
Попробуйте вывести список несуществующего каталога:
ls /missing_directory 2> error.log
Экран останется пустым. Ошибка была перехвачена и записана в error.log.
Просмотрите содержимое файла:
cat error.log
Внутри вы увидите сообщение об ошибке.
Число 2 в 2> — это общепринятый номер файлового дескриптора стандартного вывода ошибок. Пока не нужно запоминать все файловые дескрипторы, но полезно знать, что эти номера обозначают каналы потоков оболочки.
Итоги
Вы освоили управление потоками данных:
>(перезапись): сохраняет вывод в файл, удаляя его прежнее содержимое.>>(добавление): добавляет вывод в конец файла, сохраняя предыдущие данные.2>(перенаправление ошибок): перехватывает сообщения об ошибках.
Эти инструменты позволяют эффективно сохранять результаты выполнения команд.



