Поиск по сайту:

Изучите основы работы перенаправления ввода-вывода (ввода-вывода) в Linux.


Одной из наиболее важных и интересных тем администрирования Linux является перенаправление ввода-вывода. Эта функция командной строки позволяет вам перенаправлять ввод и/или вывод команд из и/или в файлы или объединять несколько команд вместе с помощью каналов для формирования так называемого «командного конвейера». .

Все команды, которые мы запускаем, по сути, производят два вида вывода:

  1. результат команды – данные, которые программа предназначена для создания, и
  2. сообщения о состоянии программы и ошибках, которые информируют пользователя о деталях выполнения программы.

В Linux и других Unix-подобных системах есть три файла по умолчанию, названные ниже, которые также идентифицируются оболочкой по номерам файловых дескрипторов:

  1. stdin или 0 – подключен к клавиатуре, большинство программ читают ввод из этого файла.
  2. stdout или 1 – он прикрепляется к экрану, и все программы отправляют свои результаты в этот файл и
  3. stderr или 2 — программы отправляют сообщения о состоянии/ошибках в этот файл, который также прикрепляется к экрану.

Таким образом, перенаправление ввода-вывода позволяет вам изменить источник ввода команды, а также то, куда отправляются ее выходные данные и сообщения об ошибках. И это стало возможным благодаря операторам перенаправления “< ” и “> ”.

Как перенаправить стандартный вывод в файл в Linux

Вы можете перенаправить стандартный вывод, как показано в примере ниже. Здесь мы хотим сохранить вывод команды top для последующей проверки:

top -bn 5 >top.log

Где флаги:

  1. -b — позволяет top работать в пакетном режиме, чтобы вы могли перенаправить его вывод в файл или другую команду.
  2. -n – указывает количество итераций до завершения команды.

Вы можете просмотреть содержимое файла top.log с помощью команды cat следующим образом:

cat top.log

Чтобы добавить вывод команды, используйте оператор “>> ”.

Например, чтобы добавить вывод команды top, указанной выше, в файл top.log, особенно внутри скрипта (или в командной строке), введите следующую строку:

top -bn 5 >>top.log

Примечание. Используя номер дескриптора файла, приведенная выше команда перенаправления вывода аналогична:

top -bn 5 1>top.log

Как перенаправить стандартную ошибку в файл в Linux

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

Например, приведенная ниже команда ls выдаст ошибку при выполнении обычным пользователем системы без привилегий root:

ls -l /root/

Вы можете перенаправить стандартную ошибку в файл, как показано ниже:

ls -l /root/ 2>ls-error.log
cat ls-error.log 

Чтобы добавить стандартную ошибку, используйте команду ниже:

ls -l /root/ 2>>ls-error.log

Как перенаправить стандартный вывод/ошибку в один файл

Также возможно записать весь вывод команды (как стандартный вывод, так и стандартный вывод ошибок) в один файл. Это можно сделать двумя возможными способами, указав номера дескрипторов файлов:

1. Первый — относительно старый метод, который работает следующим образом:

ls -l /root/ >ls-error.log 2>&1

Приведенная выше команда означает, что оболочка сначала отправит выходные данные команды ls в файл ls-error.log (используя >ls-error.log), а затем запишет все сообщения об ошибках в файловый дескриптор 2 (стандартный вывод), который был перенаправлен в файл ls-error.log (с использованием 2>&1 ). Подразумевается, что стандартная ошибка также отправляется в тот же файл, что и стандартный вывод.

2. Второй, прямой метод:

ls -l /root/ &>ls-error.log

Вы также можете добавить стандартный вывод и стандартную ошибку в один файл следующим образом:

ls -l /root/ &>>ls-error.log

Как перенаправить стандартный ввод в файл

Большинство, если не все, команды получают ввод со стандартного ввода, а стандартный ввод по умолчанию подключен к клавиатуре.

Чтобы перенаправить стандартный ввод из файла, отличного от клавиатуры, используйте оператор “< ”, как показано ниже:

cat <domains.list 

Как перенаправить стандартный ввод/вывод в файл

Вы можете одновременно выполнить стандартный ввод и перенаправление стандартного вывода, используя команду сортировки, как показано ниже:

sort <domains.list >sort.output

Как использовать перенаправление ввода-вывода с помощью каналов

Чтобы перенаправить вывод одной команды на ввод другой, вы можете использовать каналы — это мощное средство создания полезных командных строк для сложных операций.

Например, команда ниже выведет список пяти самых последних измененных файлов.

ls -lt | head -n 5 

Здесь варианты:

  1. -l – включает формат длинного списка
  2. -t — сортировка по времени изменения: сначала отображаются самые новые файлы.
  3. -n – указывает количество отображаемых строк заголовка.

Важные команды для построения конвейеров

Здесь мы кратко рассмотрим две важные команды для построения командных конвейеров:

xargs, который используется для создания и выполнения командных строк из стандартного ввода. Ниже приведен пример конвейера, использующего xargs. Эта команда используется для копирования файла в несколько каталогов в Linux:

echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh

И варианты:

  1. -n 1 – указывает xargs использовать не более одного аргумента в командной строке и отправлять команду cp
  2. cp — копирует файл
  3. -v — отображает ход выполнения команды копирования.

Дополнительные параметры использования и информацию можно найти на странице руководства xargs:

man xargs 

Команда tee считывает данные из стандартного ввода и записывает в стандартный вывод и файлы. Мы можем продемонстрировать, как работает tee, следующим образом:

echo "Testing how tee command works" | tee file1 

Файловые или текстовые фильтры обычно используются с каналами для эффективных файловых операций Linux, для эффективной обработки информации, например, для реструктуризации вывода команд (это может быть жизненно важно для создания полезных отчетов Linux), изменения текста в файлах, а также для некоторых других системного администрирования Linux. задания.

Чтобы узнать больше о фильтрах и каналах Linux, прочтите эту статью «Найдите 10 основных IP-адресов для доступа к серверу Apache», в которой показан полезный пример использования фильтров и каналов.

В этой статье мы объяснили основы перенаправления ввода-вывода в Linux. Не забудьте поделиться своими мыслями в разделе обратной связи ниже.