Команды-фильтры командной строки и каналы ввода и вывода.

Всем, доброго.

В предыдущей статье, мы с вами, познакомились со способами объединения команд, а также с шаблонами имен файлов. В этой статье, мы с вами познакомимся, с таким моментом в Баш, который именуется каналом ввода и каналом вывода. А также, познакомимся с командами-фильтрами, которые получая поток вывода к себе в поток ввода могут его фильтровать и прочее, перед конечной выдачей информации.

Однако, познакомимся с этими командами-фильтрами кратко, т.к. в интернете можно найти множество примеров по их применению. Но, без начальных знаний, которые будут в этой статье, вам, бесполезно будет читать такие «интересности». Также, не стану, уверять или убеждать в практичности моей статьи, т.к. она сделана для Начинающих, Начинающих Линуксоидов, в том числе для тех, кто хочет познакомиться с командной строкой, заодно обозреть ее в простом применении в духе Линукса (наголо, то, что есть), чтобы определиться с ответами на свои вопросы.

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

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

Введение.

Если задаться вопросом конкретного количества команд-фильтров, то их окажется достаточно много (около 15-20). Однако, когда начинаешь уточнять, в чем выражена суть применения смысла «фильтр», то приходишь к интересному выводу. Суть применения команд-фильтров выражается и проявляется в направлении применения их самих, например, чтение в отдельном ПГИП текстового потока или файла. Т.к. несмотря на такое различие между командами-фильтрами, где фильтрация это применение фильтрации входного потока, есть привычные в простом и распространенном понимании команды-фильтры, с которых стоит начинать свое знакомство с командами-фильтрами.

Поэтому, в данной статье, для ознакомления с командами-фильтрами мы познакомимся, со следующими командами: «cat«, «tee«, «grep«, «wc«, «sort«, «comm«. В этих командах также есть разные направления фильтрации входящего потока: в разветвлении входного потока в два выходных потока, в передачи потока на экран с фильтрацией и без нее перед выдачей информации на экран или в другой выходной поток, а также обработка входящего потока с выдачей результата обработки.

Фильтрация через направление входного потока.

Данная группа команд-фильтров направляет входной поток на выходной поток, либо в файл, либо на экран, либо в файл и на экран. При этом, при направлении на экран они могут вывести поток «наголо», а могут его передать через ПГИП, чтобы его смотреть через удобный инструмент просмотра.

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

В данном направлении темы статьи, мы с вами, обратим своем внимание на команды «cat«, «tee«. Причем с первой командой вы уже познакомились в прошлых статьях — «cat«, при этом, команда может не только направлять входной поток на экран, она может направлять его в файл, который будет для нее входным потоком. А также, может принять два и более файла, направив их один выходной поток (в том числе в файл), поочередно открыв все входные файлы, указанные слева направо.

 

Команда «tee» создает ответвление потока, создавая его во время исполнения команды, подающий свой вывод на ввод данной. Эта команда, полезна для создания журналов и историй действий. Т.к. все это происходит во время исполнения команды идущей за ней через объединение «|«.

Также доступны параметры, которые не вижу смысла объяснять, т.к. они элементарны, просты и понятны. Поэтому, рекомендую попробовать их самостоятельно.

 

 Фильтрация входного потока перед выдачей его на экран или в другой выходной поток.

Ранее команда «grep» была объяснена с позиции в одной из статей цикла про поиск файлов, где она применялась для поиска данных в словах, однако было упоминание про поиск данных в потоке. Т.к. большинство параметров по данной команде было указано, то не вижу смысла повторяться, обозначив их только вкратце. Скажу, что параметры одинаково работают с входным потоком и входными файлами, однако те параметры, что направленны на применение файлов, будут «идти в холостую», то бишь результат работы от их применения не изменится. А параметры, которые доступно применять, такие: -i, -w, -c, -v. Первый параметр задает игнорирование регистра символов ключевого слова, второй параметр ищет ключевое  слово целиком, третий параметр вместо вывода найденных значений выводит их количество, а последний параметр наоборот выводит те места, где ключевого слова.

Это не все параметры, которые доступны для применения команды «grep» в качестве команды-фильтра, однако для ознакомления на уровне Начинающего этого достаточно. А остальное, легко узнать по ранее данным подсказкам, например:

А теперь, пример ее применения на практике в качестве команды фильтра:

Команда «sort» производит сортировку данных берущихся, либо с входного потока, либо с файла, который указан самой команде. Также стоит учитывать, что команда «sort» также имеет много своих параметров. Однако, для ознакомления и обучения начальным навыкам и умениям по применению, мы с вами рассмотрим только некоторые из них. Этого будет достаточно, чтобы вы смогли оперировать информацией, получаемой через консоль на уровне Начинающего в ОС Линукс. А теперь сами параметры, которые мы с вами рассмотрим:

  • -b  Игнорирование начальных пропусков;
  • -d  Обращать внимание только на пропуски, буквы и цифры;
  • -f   Игнорировать регистр букв;
  • -i   Обращать внимание только на печатные символы;
  • -M Сравнивать по месяцам (сравнивает первые три буквы в соответствии с локализацией);
  • -h  Сравнивать числа в удобном для человека виде (например 1K, 1G);
  • -n  Сравнивать по числовым значениям строк;
  • -r  Обратить результаты сравнения;
  • -v  Сортировать по номерам (версии) в текстовом представлении
  • -k  Сортировать по ключу;
  • -u  Выводить только первое среди нескольких одинаковых;
  • -o  Вывести в файл результат сортировки.

Параметр «-k«, применяет такой ключ сортировки: номер_поля.позиция_в_поле или номер_поля. Более сложные варианты Начинающему в командной строке пока излишне.

Применение этих параметров сортировки, легче понять на примере работы вместе с командой «ls«.

Разумеется примеры могли показать местами непонятны, т.к. параметры применялись ко всей строке, однако в самом последнем и предпоследнем примере был применен параметр «-k«, который задал сортировку по числам идущим после месяцев.

Теперь, повторим наш пример, с применением параметра «-k«, чтобы получить нормальную сортировку, а не просто пример работы параметров.

А теперь посмотрим, как сортировка работает с содержимым текстового файла.

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

Что ж, наглядно и понятно в достаточной мере на примерах, мною проявлена и выражена работа команды сортировки, чтобы это смог понять неопытный, разобравшись в результатах выполнения. Однако, рекомендую, спокойно, прочитать, не пытаясь делать это с лупой. Заодно, попробовать повторить самим у себя, т.к. эти примеры не влияют на работу вашего компьютера. Единственное, что стоит учесть, так это имя директории «test«, чтобы попутно не удалить вашу директорию с таким же именем. А также напоминаю, что лично сам применяю «ctrl+a» и редактор у себя на компьютере, когда бывает много текста. Так читать на порядки легче, к тому же на моем блоге, это сделать не сложно.

Фильтрация через обработку входящего потока с выдачей результата обработки.

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

Команда «wc» полезна тем, что умеет обрабатывать входные данные и вести подсчет строк, слов, символов и байт. По умолчанию выводит в столбик три параметра: количество строк, количество слов, количество байт. Также доступно получить одно значений результата обработки, задав соответствующий параметр. А т.к. команда простая, то все приведено, в следующем примере.

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

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

Каналы ввода и вывода.

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

Например, когда после выполнения команды стоит оператор «>«, «>>«, то в первом варианте идет перезапись файла с начала, а во втором идет запись с конца, без стирания содержимого. Благодаря этому не обязательно командам иметь возможность записи своего вывода в файл, когда это доступно через ранее указанные параметры. Например.

Для Начинающего в командной строке, такого применения полностью хватает. Однако, стоит понимать, что для опытного применения (посложнее), требуется почитать справочную литературу на тему «Линукс каналы ввода и вывод команд». Так что, теперь вы можете смело записывать результаты вывода в файл, что бы потом их прочитать позднее. Или также, вести свой «маленький журнал». Посредством одной командой «echo» и оператора «>>«.

Также можно производить чтение из файла, например можно создать десять файлов с числовым именем от 1 по  10, сделав это меньшим количеством команд. Для достаточно применить две команды и два оператора перенаправления, вместо того чтобы делать это вручную.

Помимо ранее указанного, в примере (в конце) приводится применение оператора так, как оно полагается изначально. Однако, стоит понимать, что для этого команда обязана сама быть направленной на получение входящего файла. Наглядный этому пример с командой «wc«, где было получен один и тот же результат тремя различными способами, что явно дает понять, насколько в ОС Линукс, легко и просто многое делать командами через командную строку, а не щелкать мышкой по экрану. Также отмечу, что команды, где этого было недоступно, все равно получилось добиться желаемого без уловок, применив оператор подстановки, который объяснялся в статьях ранее в этом цикле статей.

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

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

 

Следующий оператор, это тот, который вы с большей вероятностью будете применять чаще всего, его символ такой: «|«. Он просто объединяет вход следующей команды с выходом предыдущей и может объединять множество команд между собой, например см. ниже.

Как видите, нет ничего сложного в простом и элементарном понимании и применении каналов ввода и вывода. Для ознакомления и обучения на уровне Начинающего в командной строке ОС Линукс, этого, достаточно знать и уметь применять, чтобы грамотно применять основные возможности командной строки.

В заключение.

На данном этапе, мы с вами, научили все основным возможностям командной строки. Однако, не стоит забывать, что это не все команды, которые доступны для применения. А также, не стоит забывать, что для грамотного применения некоторых команд или целых групп, требуются знания, по части применяемого направления или касательно самой ОС Линукс. Так что, следующей статьей мы закончим с вами ознакомление с командной строкой ОС Линукс и подведем итоги обучения и ознакомления для Начинающих в ОС Линукс.

Благодарю, за участие, мне приятно знать, что вы чему-то научились за время прочтения этой статьи.

 

519 просмотров всего, 2 просмотров сегодня