Один из самых важных и интересные темы под управлением Linux перенаправление ввода / вывода. Эта функция командной строки позволяет перенаправлять ввод и / или вывод команд из и / или в файлы или объединять несколько команд вместе с помощью каналов для формирования так называемого «командный конвейер”.
По сути, все выполняемые нами команды производят два вида вывода:
В Linux и других Unix-подобных системах есть три файла по умолчанию, указанные ниже, которые также идентифицируются оболочкой с помощью номеров файловых дескрипторов:
Следовательно, перенаправление ввода-вывода позволяет вам изменять источник ввода команды, а также то, куда отправляются ее вывод и сообщения об ошибках. И это стало возможным благодаря “ и
“>”
операторы перенаправления.
Вы можете перенаправить стандартный вывод, как в примере ниже, здесь мы хотим сохранить вывод верхняя команда для последующего осмотра:
$ top -bn 5> top.log.
Где флаги:
-b
- позволяет вершина для запуска в пакетном режиме, чтобы вы могли перенаправить его вывод в файл или другую команду.-n
- указывает количество итераций до завершения команды.Вы можете просмотреть содержимое top.log
файл с использованием команда кота следующее:
$ cat top.log.
Чтобы добавить вывод команды, используйте “>>”
оператор.
Например, чтобы добавить вывод верхняя команда выше в top.log файл, особенно в сценарии (или в командной строке), введите следующую строку:
$ top -bn 5 >> top.log.
Примечание: Используя номер дескриптора файла, приведенная выше команда перенаправления вывода аналогична следующей:
$ top -bn 5 1> top.log.
Чтобы перенаправить стандартную ошибку команды, вам необходимо явно указать номер дескриптора файла, 2
чтобы оболочка понимала, что вы пытаетесь сделать.
Например, команда ls ниже приведет к ошибке при выполнении обычным системным пользователем без привилегий root:
$ ls -l / корень /
Вы можете перенаправить стандартную ошибку в файл, как показано ниже:
$ 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Как перенаправить стандартный ввод / вывод в файл
Вы можете одновременно выполнять стандартный ввод и перенаправление стандартного вывода, используя команда сортировки как показано ниже:
$ sortsort.output. Как использовать перенаправление ввода / вывода с помощью каналов
Чтобы перенаправить вывод одной команды на ввод другой, вы можете использовать каналы, это мощное средство построения полезных командных строк для сложных операций.
Например, приведенная ниже команда будет перечислить пять самых популярных недавно измененных файлов.
$ ls -lt | голова -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А тройник Команда читает из стандартного ввода и записывает в стандартный вывод и файлы. Мы можем продемонстрировать, как тройник работает следующим образом:
$ echo "Тестирование работы команды tee" | тройник file1Файловые или текстовые фильтры обычно используются с трубами для эффективные файловые операции Linux, для обработки информации мощными способами, такими как реструктуризация вывода команд (это может быть жизненно важно для генерация полезных Linux-отчетов), изменение текста в файлах, а также несколько других Задачи системного администрирования Linux.
Чтобы узнать больше о фильтрах и конвейерах Linux, прочтите эту статью Найдите 10 основных IP-адресов, по которым осуществляется доступ к серверу Apache, показывает полезный пример использования фильтров и каналов.
В этой статье мы объяснили основы перенаправления ввода-вывода в Linux. Не забудьте поделиться своими мыслями в разделе отзывов ниже.