ГлавнаяОперационные системыLinuxПонимание каналов и перенаправления для командной строки Linux

Понимание каналов и перенаправления для командной строки Linux

трубы-200pxДве мощные функции оболочки командной строки Linux — это перенаправление и каналы, которые позволяют отправлять выходные данные (или даже входные данные) программы в файл или другую программу. Возможно, вы уже использовали эти функции, даже не подозревая об этом. Всякий раз, когда вы использовали знак «>» в команде или «|», вы использовали перенаправление или канал соответственно.

Во всех Unix-подобных операционных системах, таких как Linux и FreeBSD, выходные данные программы командной строки автоматически передаются в место, известное как стандартный вывод (stdout). По умолчанию стандартным выходом является экран (консоль), но его можно изменить с помощью каналов и перенаправления. Аналогично, клавиатура считается стандартным вводом (stdin) и, как и стандартный вывод, ее можно изменить.

Трубы

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

Команда «more» принимает стандартный ввод и разбивает его на страницы на стандартном выводе (на экране). Это означает, что если команда отображает больше информации, чем можно отобразить на одном экране, программа «more» приостановится после заполнения первого экрана (страницы) и будет ждать, пока пользователь нажмет ПРОБЕЛ, чтобы увидеть следующую страницу или RETURN, чтобы увидеть следующую строку.

Вот пример, в котором будут перечислены все файлы с подробностями (-la) в каталоге /devи передан вывод в more.. В каталоге /devдолжно быть множество файлов, поэтому moreнеобходимо разбивать на страницы.

ls -la /dev | more

Я трубю больше

Обратите внимание на подсказку --More--внизу экрана. Нажмите ПРОБЕЛ, чтобы просмотреть следующую страницу, и продолжайте нажимать ПРОБЕЛ, пока вывод не завершится.

Вот еще один пример канала, на этот раз с использованием инструмента «wc» (подсчет слов).

ls -1 /dev | wc

wcподсчитывает количество строк, слов и символов в стандартном вводе. Если вы используете параметр -l, он будет отображать только количество строк, что является хорошим способом узнать, сколько файлов находится в каталоге!

В Подробно ознакомьтесь с учебным пособием по командам архивирования и сжатия Linux. есть пример совместного использования tarи 7-Zip:

tar cvf - * | 7zr a -si somefiles.tar.7z

В этом случае дефис после параметра fуказывает tarотправлять выходные данные на стандартный выход, а не в файл. Вывод из tarбудет передаваться по каналу в 7zr, который ожидает ввода от стандартного входа благодаря опции -si.

Перенаправление

Перенаправление похоже на каналы, за исключением использования файлов, а не другой программы. Стандартным выводом программы является экран. Используя символ >(больше), выходные данные программы можно отправить в файл. Вот снова список каталогов /dev, но на этот раз перенаправленный на файл с именем listing.txt

ls -la > listing.txt

На терминале ничего не будет отображаться, так как все было отправлено в файл. Вы можете просмотреть файл с помощью команды cat(которую можно передать в more) или для удобства вы можете просто использовать команду more command. отдельно:

more listing.txt

Если listing.txtуже существовало, оно будет перезаписано. Но вы можете добавить к существующему файлу, используя >>, вот так:

ls -la /home > listing.txt
ls -la /dev >> listing.txt

Первое перенаправление перезапишет файл listing.txt, а второе — добавит к нему.

Команду catможно использовать для создания файла с помощью перенаправления, например:

 cat > atextfile.txt

Теперь любой набранный вами текст будет отправляться в файл atextfile.txtдо тех пор, пока вы не нажмете Control-D, после чего файл закроется, и вы вернетесь в командную строку. Если вы хотите добавить в файл больше текста, используйте ту же команду, но с двумя знаками «больше» (>>).

Заключение

Многие программы командной строки Linux предназначены для работы с перенаправлением и каналами. Попробуйте поэкспериментировать с ними и посмотреть, как они взаимодействуют. Например, выходные данные команды ps, в которой перечислены текущие процессы, можно передать в grep. Посмотрите, сможете ли вы составить список процессов, принадлежащих пользователю root.

ПОХОЖИЕ СТАТЬИ

Популярные записи