Что такое pipeline linux

Что такое pipeline linux

A pipeline is a sequence of one or more commands separated by one of the control operators ‘ | ’ or ‘ |& ’.

The format for a pipeline is

[time [-p]] [!] command1 [ | or |& command2 ] …

The output of each command in the pipeline is connected via a pipe to the input of the next command. That is, each command reads the previous command’s output. This connection is performed before any redirections specified by command1 .

If ‘ |& ’ is used, command1 ’s standard error, in addition to its standard output, is connected to command2 ’s standard input through the pipe; it is shorthand for 2>&1 | . This implicit redirection of the standard error to the standard output is performed after any redirections specified by command1 .

The reserved word time causes timing statistics to be printed for the pipeline once it finishes. The statistics currently consist of elapsed (wall-clock) time and user and system time consumed by the command’s execution. The -p option changes the output format to that specified by POSIX. When the shell is in POSIX mode (see Bash POSIX Mode), it does not recognize time as a reserved word if the next token begins with a ‘ — ’. The TIMEFORMAT variable may be set to a format string that specifies how the timing information should be displayed. See Bash Variables, for a description of the available formats. The use of time as a reserved word permits the timing of shell builtins, shell functions, and pipelines. An external time command cannot time these easily.

Читайте также:  Linux где лежит mysql

When the shell is in POSIX mode (see Bash POSIX Mode), time may be followed by a newline. In this case, the shell displays the total user and system time consumed by the shell and its children. The TIMEFORMAT variable may be used to specify the format of the time information.

If the pipeline is not executed asynchronously (see Lists of Commands), the shell waits for all commands in the pipeline to complete.

Each command in a multi-command pipeline, where pipes are created, is executed in its own subshell, which is a separate process (see Command Execution Environment). If the lastpipe option is enabled using the shopt builtin (see The Shopt Builtin), the last element of a pipeline may be run by the shell process when job control is not active.

The exit status of a pipeline is the exit status of the last command in the pipeline, unless the pipefail option is enabled (see The Set Builtin). If pipefail is enabled, the pipeline’s return status is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands exit successfully. If the reserved word ‘ ! ’ precedes the pipeline, the exit status is the logical negation of the exit status as described above. The shell waits for all commands in the pipeline to terminate before returning a value.

Источник

Работа с linux. Пайплайны

Привет, сегодня продолжение небольшой заметки по командной строке. Начало здесь. Сегодня про конвеер∕пайплайн, управление потоками и немного о том как их скрещивать.

При старте любой программы операционная система связывает с ней 3 потока:

  • Входящие данные (Standart input, STDIN)
  • Выходные данные (Standart output, STDOUT)
  • Данные об ошибках (Standart error, STDERR)
Читайте также:  Linux machine check error

Для языка программирования эти потоки — просто файлы. Операционная система сама решит куда вывести результат и как в дальнейшем взаимодействовать с этими данными.

У потоков есть свои номера:

Зная это можно манипулировать данными и перенаправлять потоки. Например мы можем собрать ошибки в файл и вести своеобразный лог:

2>&1 позволяет перенаправить поток, отвечающий за ошибки в вывод и сохранить это все в файл output. При этом можно перенаправить в файл сразу оба потока с помощью &>some_file.

символ > позволяет перезаписать данные.

символ >> позволяет добавить данные в конец файла. Если заменить > на >> второй раз использовать команду, то в файле уже будет не одна запись а две.

Это все поможет, понять как работает конвеер (PIPELINE) .

Конвеер∕пайплайн позволяет протаскивать данные через цепочки команд.
Команды соединяются с помощью символа `|`. Выход данных одной команды подается на вход в другую. Так вы сможете разбить исполнение одной сложной программы на N простых операций, которыми будет гораздо проще управлять.

Один из самый простых примеров, который я периодически использую — поиск как-либо команды, которую уже использовал в терминале, но делал это достаточно давно, чтобы просто проматывать последние подключения.

Порядок выполнения такой: history читает информацию из файла с историей команд, введенных в терминал и передает её в grep, которая находит все строки, в которых использовалась команда подключения по ssh. Найденные данные уходят в tail, которая ограничивает вывод 5 строками.

За построением пайплайнов кроется несколько достаточно глубоких идей:

  • Пишите программы, которые будут делать что-то одно и делать это хорошо.
  • Пишите программы, которые будут работать вместе.
  • Пишите программы, которые поддерживают текстовые потоки, т.к. это универсальный интерфейс.
Читайте также:  Linux virtual can driver

На этом на сегодня всё) Последнее время поковыриваю питоновские кишки, в следующей заметке скорее всего будет перевод заметки о работе сборщика мусора. Будем разбираться как в Python считаются ссылки и когда он выкидывает объекты из памяти.

Источник

Оцените статью
Adblock
detector