Изучите основы работы перенаправления ввода-вывода (ввода-вывода) в Linux.
Одной из наиболее важных и интересных тем администрирования Linux является перенаправление ввода-вывода. Эта функция командной строки позволяет вам перенаправлять ввод и/или вывод команд из и/или в файлы или объединять несколько команд вместе с помощью каналов для формирования так называемого «командного конвейера». .
Все команды, которые мы запускаем, по сути, производят два вида вывода:
- результат команды – данные, которые программа предназначена для создания, и
- сообщения о состоянии программы и ошибках, которые информируют пользователя о деталях выполнения программы.
В Linux и других Unix-подобных системах есть три файла по умолчанию, названные ниже, которые также идентифицируются оболочкой по номерам файловых дескрипторов:
- stdin или 0 – подключен к клавиатуре, большинство программ читают ввод из этого файла.
- stdout или 1 – он прикрепляется к экрану, и все программы отправляют свои результаты в этот файл и
- stderr или 2 — программы отправляют сообщения о состоянии/ошибках в этот файл, который также прикрепляется к экрану.
Таким образом, перенаправление ввода-вывода позволяет вам изменить источник ввода команды, а также то, куда отправляются ее выходные данные и сообщения об ошибках. И это стало возможным благодаря операторам перенаправления “< ”
и “> ”
.
Как перенаправить стандартный вывод в файл в Linux
Вы можете перенаправить стандартный вывод, как показано в примере ниже. Здесь мы хотим сохранить вывод команды top для последующей проверки:
top -bn 5 >top.log
Где флаги:
-b
— позволяет top работать в пакетном режиме, чтобы вы могли перенаправить его вывод в файл или другую команду.-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
Здесь варианты:
-l
– включает формат длинного списка-t
— сортировка по времени изменения: сначала отображаются самые новые файлы.-n
– указывает количество отображаемых строк заголовка.
Важные команды для построения конвейеров
Здесь мы кратко рассмотрим две важные команды для построения командных конвейеров:
xargs, который используется для создания и выполнения командных строк из стандартного ввода. Ниже приведен пример конвейера, использующего xargs. Эта команда используется для копирования файла в несколько каталогов в Linux:
echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh
И варианты:
-n 1
– указывает xargs использовать не более одного аргумента в командной строке и отправлять команду cpcp
— копирует файл-v
— отображает ход выполнения команды копирования.
Дополнительные параметры использования и информацию можно найти на странице руководства xargs:
man xargs
Команда tee считывает данные из стандартного ввода и записывает в стандартный вывод и файлы. Мы можем продемонстрировать, как работает tee, следующим образом:
echo "Testing how tee command works" | tee file1
Файловые или текстовые фильтры обычно используются с каналами для эффективных файловых операций Linux, для эффективной обработки информации, например, для реструктуризации вывода команд (это может быть жизненно важно для создания полезных отчетов Linux), изменения текста в файлах, а также для некоторых других системного администрирования Linux. задания.
Чтобы узнать больше о фильтрах и каналах Linux, прочтите эту статью «Найдите 10 основных IP-адресов для доступа к серверу Apache», в которой показан полезный пример использования фильтров и каналов.
В этой статье мы объяснили основы перенаправления ввода-вывода в Linux. Не забудьте поделиться своими мыслями в разделе обратной связи ниже.