Перейти к основному содержанию
Рецепты Linux

Main navigation

  • Основы
  • Система
  • Команды
  • Программы
  • Дистро
  • Интерфейсы
  • Устройства
  • Доки
User account menu
  • Войти

Строка навигации

  1. Главная

Стыкование команд

Автор: mensh, 22 ноября, 2005
Основы
Команды

Операционная система Linux позволяет выполнять бесконечное множество операций с данными, комбинируя ограниченный набор команд UNIX.

Стыкование команд в Linux

Содержание

  • Стандартный ввод и стандартный вывод
  • Перенаправление ввода и вывода
  • Использование состыкованных команд
  • Недеструктивное перенаправление вывода

Стандартный ввод и стандартный вывод

Многие команды системы Linux имеют так называемые стандартный ввод (standard input) и стандартный вывод (standard output), часто сокращаемые до stdin и stdout. Ввод и вывод здесь — это входная и выходная информация для данной команды. Программная оболочка делает так, что стандартным вводом является клавиатура, а стандартным выводом — экран монитора.

Приведём пример с использованием команды cat, которая обычно читает данные из всех файлов, указанных в командной строке, и посылает эту информацию непосредственно в стандартный вывод (stdout). Следовательно, команда

$ cat example1 example2

выведет на экран сначала содержимое файла example1, а затем — файла example2.

Однако, если имя файла не указано, программа cat читает входные данные из stdin и возвращает их в stdout. Приведём пример:

$ cat
Привет.
Привет.
Прощай.
Прощай.

Каждую строку, вводимую с клавиатуры, программа cat немедленно возвращает на экран. При вводе информации со стандартного ввода конец текста завершается вводом специальной комбинации клавиш, как правило Ctrl-D. Сокращённое название сигнала конца текста — EOT (end of text).

Команда sort читает строки вводимого текста (также из stdin, если имя одного или нескольких файлов не указано) и выдаёт набор этих строк в упорядоченном виде на stdout. Проверим её действие:

$ sort
Иван
Александр
Татьяна
Николай
{Ctrl-D]
Александр
Иван
Николай
Татьяна

После использования комбинации клавиш Ctrl-D строки были упорядочены в алфавитном порядке.

Перенаправление ввода и вывода

Допустим, вы хотите направить вывод команды sort в файл list, чтобы сохранить упорядоченный по алфавиту список на диске. Командная оболочка позволяет перенаправить (redirect) стандартный вывод команды в файл, используя символ >:

$ sort > list
Иван
Александр
Татьяна
Николай

Результат работы команды sort не был выведен на экран, но сохранился в файле с именем list. Выведем на экран содержимое этого файла:

$ cat list
Александр
Иван
Николай
Татьяна

Пусть теперь исходный неупорядоченный список имен находится в файле names:

$ cp list names

Этот список можно упорядочить с помощью команды sort, если указать ей, что она должна читать из данного файла, а не из своего стандартного ввода, и кроме того, перенаправить стандартный вывод в файл, как это уже выполнялось. Однако, можно поступить и иначе, перенаправив не только стандартный вывод, но и стандартный ввод, используя символ <:

$ sort < names
Александр
Иван
Николай
Татьяна

Введём понятие фильтра (filter). Фильтром является программа, читающая данные из стандартного ввода, некоторым образом их обрабатывающая и результат направляющая на стандартный вывод. Когда применяется перенаправление, в качестве стандартного ввода и вывода могут выступать файлы. Как указывалось выше, по умолчанию, stdin и stdout относятся к клавиатуре и к экрану соответственно. Программа sort является простым фильтром — она сортирует входные данные и посылает результат на стандартный вывод. Совсем простым фильтром является программа cat — она ничего не делает с входными данными, а просто пересылает их на выход.

Использование состыкованных команд

Как поступить при сортировке данных, являющихся результатом работы какой-либо другой команды, например, ls?

Решением в данной ситуации может служить создание состыкованных команд (pipelines). Стыковку осуществляет командная оболочка, направляющая stdout первой команды на stdin второй команды. В данном случае мы направляем stdout команды ls на stdin команды sort. Для стыковки используется символ |:

$ ls | sort -r
names
list
index2.html
index1.html
example2
example1 

Если команда ls выводит на экран слишком длинный список файлов, то можно вывести его частями. Например:

$ ls /usr/bin | less

Недеструктивное перенаправление вывода

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

$ ls > names
$ cat names
example1
example2
index1.html
index2.html
list
names

Если же перенаправление будет сделано с помощью символов >>, то вывод будет приписан в конец указанного файла, при этом исходное содержимое файла не будет уничтожено:

$ ls >> names
$ cat names
Иван
Александр
Татьяна
Николай
example1
example2
index1.html
index2.html
list
names

Перенаправление ввода и вывода и стыкование команд осуществляется командными оболочками, которые поддерживают использование символов >, >>; и |. Сами  же команды не способны воспринимать и интерпретировать эти символы.

Последние материалы

  • Приложение scanimage
    9 hours ago
  • Утилита sensors
    4 days ago
  • Сканер Rkhunter
    1 week 4 days ago
  • Программа resize2fs
    2 weeks 3 days ago
  • Аудиопроигрыватель QMMP
    3 weeks 1 day ago
RSS feed

Secondary menu

  • О проекте

© 2008–2025 Олег Меньшенин mensh@yandex.ru