Потоки данных в Linux - управление при помощи командной строки

Преобразователи

Все в Linux вращается вокруг потоков данных – особенно текстовых потоков. Потоки данных являются исходным материалом, на котором работают утилиты GNU, основные утилиты Linux и многие другие инструменты командной строки.

Как следует из его названия, поток данных – это поток данных, особенно текстовых данных, которые передаются из одного файла, устройства или программы в другой с помощью STDIO. В этой статье описывается использование каналов для соединения потоков данных из одной служебной программы в другую с использованием STDIO. Вы узнаете, что функция этих программ заключается в том, чтобы каким-то образом преобразовывать данные. Вы также узнаете об использовании перенаправления для перенаправления данных в файл.

Я использую термин "преобразование" в сочетании с этими программами, потому что основная задача каждой из них состоит в том, чтобы преобразовывать входящие данные из STDIO особым образом, как это предусмотрено системным администратором, и отправлять преобразованные данные в STDOUT для возможного использования другой программой-преобразователем.

Стандартный термин "фильтры" подразумевает что-то, с чем я не согласен. По определению, фильтр – это устройство или инструмент, который удаляет что-то, например, воздушный фильтр удаляет содержащиеся в воздухе загрязнения, так что двигатель внутреннего сгорания вашего автомобиля не размалывает себя от этих частиц. На уроках химии в средней школе и колледже для удаления частиц из жидкости использовалась фильтровальная бумага. Воздушный фильтр в моей домашней системе HVAC удаляет частицы, которыми я не хочу дышать.

Хотя такие утилиты иногда отфильтровывают нежелательные данные из потока, я предпочитаю термин "преобразователи", потому что эти программы делают намного больше. Они могут добавлять данные в поток, вносить большие изменения в данные, сортировать их, переупорядочивать данные в каждой строке, выполнять операции на основе содержимого потока данных и многое другое. Не стесняйтесь использовать любой термин, который вы предпочитаете, но я предпочитаю именно этот.

Потоками данных можно манипулировать, вставляя преобразователи в поток при помощи каналов. Каждая программа-преобразователь используется специалистами для выполнения некоторой операции с данными в потоке, таким образом изменяя ее содержимое. Перенаправление может затем использоваться в конце конвейера для направления потока данных в файл. Как уже упоминалось, этот файл может быть фактическим файлом данных на жестком диске или файлом устройства, таким как раздел диска, принтер, терминал, псевдотерминал или любое другое устройство, подключенное к компьютеру.

Возможность манипулировать этими потоками данных с помощью небольших, но мощных программ-преобразователей является центральной силой интерфейса командной строки Linux. Многие из основных утилит являются программами преобразования и используют STDIO.

STDIO

STDIO был разработан Кеном Томпсоном как часть инфраструктуры, необходимой для реализации каналов в ранних версиях Unix. Программы, которые реализуют STDIO, используют стандартизированные файловые дескрипторы для ввода и вывода, а не файлы, которые хранятся на диске или другом носителе записи. STDIO лучше всего описать как поток буферизованных данных. Его основная функция заключается в потоковой передаче данных с выхода одной программы, файла или устройства на вход другой программы, файла или устройства.

Существует три потока данных STDIO, каждый из которых автоматически открывается в виде файла при запуске программы (ну, те программы, которые используют STDIO). Каждый поток данных STDIO связан с дескриптором файла, который представляет собой просто набор метаданных, которые описывают атрибуты файла. Файловые дескрипторы 0, 1 и 2 явно определены соглашением и долгой практикой как STDIN, STDOUT и STDERR, соответственно.

  • STDIN, дескриптор файла 0, это стандартный ввод, который обычно вводится с клавиатуры. STDIN может быть перенаправлен из любого файла, включая файлы устройства, а не с клавиатуры. Обычно перенаправление STDIN не требуется, но его можно сделать;
  • STDOUT, дескриптор файла 1, является стандартным выводом, который отправляет поток данных на дисплей по умолчанию. Обычно STDOUT перенаправляется в файл или передается в другую программу для дальнейшей обработки;
  • STDERR, дескриптор файла 2. Поток данных для STDERR также обычно отправляется на дисплей.

Простые потоки

Вы можете безопасно выполнить следующие эксперименты в каталоге /tmp вашего хоста Linux. Как пользователь root, сделайте /tmp PWD, создайте тестовый каталог, а затем сделайте новый каталог PWD.

Введите и запустите следующую программу командной строки, чтобы создать некоторые файлы с содержимым на диске. Мы используем команду dmesg просто для предоставления данных для файлов, которые будут содержаться. Содержимое не так важно, как факт того, что каждый файл имеет некоторое содержание.

Убедитесь, что в /tmp/ есть как минимум 10 файлов с именами от file0.txt до file9.txt.

Мы сгенерировали потоки данных с помощью команды dmesg, которая была перенаправлена в серию файлов. Большинство основных утилит используют STDIO в качестве выходного потока, и те, которые генерируют потоки данных, вместо того, чтобы каким-либо образом преобразовывать поток данных, могут использоваться для создания потоков данны. Потоки данных могут быть короткими, как одна строка или даже один символ, и настолько длинными, насколько это необходимо.

Хаотичность

Оказывается, что хаотичность – желанная вещь в компьютерах. Кто бы мог подумать? Существует ряд причин, по которым специалисты могут захотеть создать поток случайных данных. Поток случайных данных иногда полезен для перезаписи содержимого всего раздела, такого как /dev/sda1, или даже всего жесткого диска, как в /dev/sda.

Выполните этот эксперимент как пользователь без полномочий root. Введите эту команду, чтобы напечатать бесконечный поток случайных данных в STDIO.

Используйте Ctrl-C, чтобы разорвать и остановить поток данных. Возможно, вам придется использовать Ctrl-C несколько раз.

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

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

Перенаправление – это возможность перенаправить поток данных STDOUT-программы в файл, а не на стандартную цель дисплея. Символ "больше чем" (>), или "gt", является синтаксическим символом для перенаправления STDOUT.

Перенаправление STDOUT команды может использоваться для создания файла, содержащего результаты этой команды.

Эта команда не выводит данные на терминал, если только не произошла ошибка. Это связано с тем, что поток данных STDOUT перенаправляется в файл, а STDERR по-прежнему направляется на устройство STDOUT, которое является дисплеем. Вы можете просмотреть содержимое файла, который вы только что создали, используя следующую команду:

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

Вы можете использовать cat и/или less для просмотра файла diskusage.txt, чтобы убедиться, что новые данные были добавлены в конец файла.

Символ < (меньше, чем) перенаправляет данные в STDIN программы. Возможно, вы захотите использовать этот метод для ввода данных из файла в STDIN команды, которая не принимает имя файла в качестве аргумента, но использует STDIN. Хотя входные источники могут быть перенаправлены в STDIN, например, в файл, который используется в качестве входных данных для grep, обычно это не требуется, поскольку grep также принимает имя файла в качестве аргумента для указания входного источника. Большинство других команд также принимают имя файла в качестве аргумента для своего источника ввода.

Команда grep используется для выбора строк, соответствующих указанному шаблону, из потока данных. Grep – одна из наиболее часто используемых утилит для преобразователей. Ее можно использовать для разнообразных и креативных целей.

Наверх
Меню