Перенаправление потока ввода / вывода в Linux — это мощная функция командной строки, которая позволяет перенаправлять ввод или вывод команд, а также объединять несколько команд. Эта функция важна потому, что любая утилита Linux принимает входные данные и выдает выходные данные. Первые поступают через стандартный ввод, а вторые выдаются через стандартный вывод. Если что-то идет не так, то ошибки выводятся через stderr
(стандартный вывод ошибок). Работа с функцией перенаправления ввода / вывода — одно из ключевых элементов в системном администрировании Linux.
В этой статье мы расскажем, как использовать перенаправление при работе с файлами в Linux, а также покажем несколько полезных примеров.
Содержание:
- Что такое перенаправление ввода / вывод
- Как использовать перенаправления в Linux
- Как использовать перенаправление с помощью «труб»
- Выводы
Что такое перенаправление ввода / вывода
Как было сказано ранее, перенаправление ввода / вывода — это функция командной оболочки операционной системы Linux, которая позволяет перенаправить стандартные потоки в определенное место, например, в файл или из него. Все данные распределяются между тремя стандартными потоками:
stdin
, дескриптор 0 — стандартный ввод (клавиатура);stdout
, дескриптор 1 — стандартный вывод (вывод на экран);stderr
, дескриптор 2 — стандартная ошибка (вывод ошибок на экран).
Перенаправление позволяет Вам указать место, куда отправляются входные и выходные данные утилиты и сообщения об ошибках. Для этого Вы должны использовать специальные операторы перенаправления — <
и >
.
У Вас также есть возможность объединять несколько команд с помощью «труб» — разделить их вертикальной чертой |
, чтобы сформировать так называемый конвейер.
Как использовать перенаправления в Linux
Очевидно, что одной теории слишком мало, чтобы разобраться в этой теме. Мы предлагаем рассмотреть несколько примеров, которые будут полезными в работе.
Перенаправьте стандартный вывод в файл
Самый простой пример, который можно выполнить с помощью перенаправления — это записать стандартный вывод команды в файл. В качестве примера, запишем результат работы команды ls -l
в файл 123.txt
и выведем его на экран:
Вы могли заметить, что для записи вывода в файл мы использовали символ >
.
Если мы снова перенаправим вывод команды в этот файл, он перезапишется новыми данными, а старые пропадут. Если Вам нужно сохранить старые данные и добавить к ним новые — используйте двойной оператор перенаправления >>
.
Например, чтобы добавить вывод команды ls -la
в файл, введите в терминале следующую комбинацию команд:
На скриншоте показано, что содержимое файла начинается с вывода команды ls -l
, а заканчивается выводом команды ls -la
.
Перенаправьте стандартный вывод ошибок (stderr) в файл
Вы также можете перенаправить в файл сообщения об ошибках. Для этого Вам нужно указать номер дескриптора 2 вместе с символом >
. Для примера выполним следующую последовательность действий:
- введем команду, которая приведет к ошибке при выполнении;
- запишем данную ошибку в файл;
- выведем содержимое файла на экран.
Для этого введем в командную строку следующий код:
Читайте также: Курс LFCS — часть 1: обработка текстовых потоков в Linux.
Обратите внимание, что мы использовали номер дескриптора со специальным символом — 2>
.
Чтобы добавить новое сообщение об ошибках к уже записанным в файл, введите следующую команду:
Перенаправьте стандартный вывод и ошибки в один файл
Если Вам нужно записать весь вывод команды (он состоит как из стандартного вывода, так и из стандартных ошибок) в один файл — воспользуйтесь следующим способом:
Обратите внимание, что мы использовали амперсанд с оператором перенаправления вывода — &>
. Если Вы хотите добавить новый стандартный вывод и стандартную ошибку одновременно в один файл, используйте следующую команду:
Перенаправьте стандартный ввод из файла
Вы можете также перенаправлять содержимое файла на стандартный ввод, используя оператор <
. Например, выведем содержимое файла error.txt
на команду cat
. В результате команда выведет на экран текст файла:
Такой же результат Вы получите и без перенаправления, так как команда умеет принимать название файла в качестве аргумента. Но этот простой пример позволяет понять, как именно работает перенаправление ввода.
Перенаправляйте одновременно стандартный ввод и вывод в файл
Вы можете работать одновременно как и со стандартным вводом, так и со стандартным выводом. Лучше всего продемонстрировать это поможет команда sort
:
Сначала мы направили содержимое файла abc.txt
на команду sort
(стандартный ввод). Команда отсортировала список из файла и направила отсортированный список в новый файл sorted.txt
(стандартный вывод).
Как использовать перенаправление с помощью «труб»
Так называемый конвейер команд задействуется, когда Вам нужно перенаправить вывод одной команды на ввод другой. В основном, он используется во время построения сложных последовательностей команд. Очень часто Вы можете увидеть «трубы» с командой head
, которая выводит первые 10 строк файла. Например, приведенная ниже команда покажет список из пяти первых строк файла /etc/passwd
:
Здесь, мы использовали параметр -n
, чтобы вывести не первые 10 строк, а 5.
Существуют и другие команды с конвейером.
Используйте команду xargs
Утилита xargs
— отличный инструмент, который считывает потоки данных из стандартного ввода, затем генерирует и выполняет командные строки. Ниже Вы можете видеть пример конвейера с использованием xargs
. В этом случае мы используем команду cp -v
для копирования содержимого из файла 123.txt
в файл sorted.txt
:
Читайте также: 12 практических примеров команды xargs для начинающих в Linux, xargs примеры.
Используйте команду tee
Команда tee
считывает стандартный ввод и записывает его в один или несколько выбранных файлов. Например, запишем ввод It is Sedicomm в файл 123.txt
:
Выводы
Мы выяснили для чего и как используется перенаправление ввода / вывода в 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.