Курс LFCS — часть 1: обработка текстовых потоков в Linux

Курс LFCS — часть 1: обработка текстовых потоков в Linux

Linux Foundation — некоммерческая организация, которая занимается подготовкой и сертификацией специалистов LFCS (Linux Foundation Certified Sysadmin). В рамках 1 из 20 уроков по подготовке к экзаменам Linux Foundation Вы узнаете о том, какие команды помогут обрабатывать текстовые потоки. И для решения каких задач в целом используется обработка текстовых потоков в Linux.

Полный список уроков для прохождения индустриальной сертификации:  Курс LFCS (Linux Foundation Certified Sysadmin): программа подготовки к экзаменам..

Содержание:

  1. Создаем каталог для выполнения практических примеров
  2. Как устроена обработка текстовых потоков в Linux
  3. Команды для обработки стандартных потоков
    1. Учимся использовать команду sed
      1. Заменяем нижний регистр символа на верхний с помощью команды sed
      2. Заменяем слово на специальный символ с помощью команды sed
      3. Фильтруем текст с помощью команды sed
      4. Удаляем комментарии и пустые строки с помощью команды sed
    2. Учимся использовать команду grep
      1. Фильтруем вывод с помощью команды grep
      2. Находим все вхождения комбинации символов с подстановкой любого числа с помощью команды grep
    3. Учимся использовать команду cut
      1. Вырезаем и форматируем текст с помощью команды cut
    4. Учимся использовать команды sort и uniq
      1. Удаляем повторяющиеся строки с помощью команды uniq
      2. Подсчитываем количество событий за день в файле журнала с помощью команды uniq
      3. Объединяем возможности команд sort и uniq
    5. Учимся использовать команду tr
      1. Переводим символы из нижнего регистра в верхний с помощью команды tr
      2. Заменяем разделитель в тексте с помощью команды tr
  4. Выводы

Создаем каталог для выполнения практических примеров

Давайте создадим рабочий каталог Linux, в котором Вы будете практиковаться. Для этого вводим в командную строку команды mkdir LFCS, потом mkdir LFCS/Lab1:

 

В результате Вы создали общий каталог LFCS, в котором находится подкаталог для практических работ в рамках первого занятия — Lab1. Теперь Вам нужно перейти в него. Для этого вводим в командную строку команду cd LFCS/Lab1:

 

Курс LFCS — часть 1: обработка текстовых потоков в Linux

Теперь можно начинать урок и знакомиться с обработкой текстовых потоков в Linux.

Как устроена обработка текстовых потоков в Linux

UNIX-подобные операционные системы (в том числе — из семейства GNU / Linux) обрабатывает ввод и вывод программ в виде последовательностей символов — потоков. Всего существует три вида стандартных потоков:

  • стандартный ввод (поток 0 — stdin);
  • стандартный вывод (поток 1 — stdout);
  • стандартный вывод ошибок (поток 2 — stderr).

Стоит отметить, что стандартные потоки по факту считаются отдельными специальными файлами ( по соглашению в UNIX и Linux).

В рамках этой статьи мы прежде всего рассмотрим использование обработки потока 1 (stdout) — стандартного вывода. При этом в работе с ОС широко используются два инструмента, позволяющих обрабатывать этот поток:

  • перенаправление (с помощью специального символа >);
  • конвейер (с помощью специального символа |);

Теперь давайте разберемся, чем именно они отличаются на практике.

Перенаправление (>) — это команда, позволяющая записать результат стандартного вывода предыдущей команды в указанный файл. Синтаксис команды перенаправления вывода выглядит следующим образом:

 

Важно: команда > без предупреждения перезаписывает содержимое файла каждый раз. Если Вы хотите вместо этого дополнять содержимое файла — используйте команду >>.

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

 

Важно: последовательность команд, объединенных с помощью конвейера, позволяет автоматизировать рутинные операции и создать длинные цепочки действий.

Команды для обработки стандартных потоков

В рамках этого урока Вы научитесь использовать следующие команды, созданные для обработки стандартных потоков Linux:

  • sed;
  • sort и uniq;
  • grep;
  • tr;
  • cut.

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

Учимся использовать команду sed

Команда sed — это то, о чем Вас могут спросить в первую очередь на экзамене для сертификации LFCS. Потому давайте сначала рассмотрим ее использование в рамках нашей темы.

Утилита sed — это язык программирования и одновременно текстовый редактор, разработанный для командной строки UNIX-подобных операционных систем (на сегодняшний день использовать sed можно и в других семействах ОС). Основное назначение sed — преобразование текстовых данных стандартного потока.

Наиболее распространенным и простым примером использования команды sed, с помощью которого выполняется обработка текстовых потоков в Linux, является замена символов.

Заменяем нижний регистр символа на верхний с помощью команды sed

В качестве первого примера мы будем использовать стихотворение анонимного автора под названием A happy child. Чтобы создать соответствующий текстовый файл — вводим в командную строку команду cat>ahappychild.txt:

 

Как видите, мы воспользовались перенаправлением потока вывода команды cat в файл. Теперь просто вводим текст стихотворения, не забывая переносить новые строки клавишей Enter. Чтобы закончить перенаправление текста в файл — воспользуемся комбинацию клавиш Ctrl+D.

Обработка текстовых потоков в Linux: создаем файл ahappychild.txt для примера

Для начала давайте попробуем изменить регистр символа с нижнего на верхний — например, заменить в нашем файле у на Y. И перенаправить вывод команды с результатами замены в новый текстовый файл — ahappychild2.txt. Для этого вводим в командную строку команду sed 's/y/Y/g' ahappychild.txt > ahappychild2.txt:

 

Вводим в командную строку команду [email protected]:~/LFCS/Lab1$ cat ahappychild2.txt, чтобы увидеть результат замены символов:

 

Обработка текстовых потоков в Linux: заменяем y на Y с помощью команды sed

Теперь давайте разберемся в том, что означают символы, заключенные в одинарные кавычки:

  • s — выбираем операцию замены символов;
  • y — задаем символ, который хотим заменить;
  • Y — задаем символ, на который хотим заменить;
  • g — указываем команде sed заменить все совпадающие символы по тексту, а не только первый (в противном случае будет заменено лишь первое вхождение символа).

Заменяем слово на специальный символ с помощью команды sed

Теперь давайте попробуем заменить не отдельный символ, а целое слово (шаблон). И не на другое слово или просто символ, а на специальный символ.

Специальные символы Linux (метасимволы) — это символы, имеющие особое значение для оболочки Linux. Вместо своего буквального значения метасимволы по умолчанию интерпретируются оболочкой как определенные команды.

Мы уже рассказывали выше о вертикальной черте | (вызывает команду конвейера) и знаке больше > (вызывает команду перенаправления). Помимо этого в качестве примера специальных символов в UNIX-подобных операционных системах можно привести:

  • . — точку (заменяет любой одиночный символ);
  • \ — обратную косую черту (отменяет исполнение идущего за ней специального символа в качестве команды);
  • $ — знак доллара (обозначает конец файла или начало строки);
  • ^ — карет (обозначает начало файла или начало строки);
  • * — звездочку (обозначает произвольное количество повторений предыдущего символа);
  • [ и ] — квадратные скобки (в них берется множество символов, используемых в качестве шаблона);
  • & — амперсанд (последовательно объединяет отдельные символы или шаблоны);
  • ~ — тильду (заменяет собой путь до Вашего домашнего каталога).

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

Однако тот факт, что специальные символы имеют особое значения для оболочки Linux, обозначает, что Вы не сможете просто так использовать их в качестве шаблона для поиска или замены. Чтобы сделать это — нужно использовать приведенную в качестве примера обратную косую черту (\), отменяющую для оболочки значение следующего за ней метасимвола.

В качестве примера давайте попробуем заменить слово and на & (амперсанд). Кроме того, дополнительно заменим I на You. Но только в том случае, если c I будет начинаться новая строка. Для этого вводим в командную строку команду sed 's/and/\&/g;s/^I/You/g' ahappychild2.txt:

 

lfcs-kak-ispolzovat-komandu-sed-gnu-dlya-sozdaniya-redaktirovaniya-i-manipulirovaniya-fajlami-v-linux-lfcs-3

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

Фильтруем текст с помощью команды sed

Помимо всего прочего, команду sed можно использовать для того, чтобы добавить в вывод или убрать из него указанное количество строк файла. В качестве примера возьмем файл /var/log/dpkg.log. Для начала пробуем вывести на экран строки, добавленные 4 августа 2022 года в 13:06. Кроме того, ограничиваем вывод только первыми 5 строчками, соответствующими дате и времени. Для этого вводим в командную строку команду sed -n '/^2022-08-04 13:06/p' /var/log/dpkg.log | sed -n 1,5p:

 

Фильтруем вывод с помощью команды sed в Linux

В данном случае команда sed находит все строки, начинающиеся с заданного шаблона — 2022-08-04 13:06. После чего используется знак конвейера |, снова передающий результаты вывода команде sed. Однако в этот раз она применяется для того, чтобы вывести на экран только строки с 1 по 5 из вывода первой команды.

Удаляем комментарии и пустые строки с помощью команды sed

Команда sed позволяет упростить работу с файлами конфигурации или скриптами. В качестве примера возьмем файл /etc/apache2/apache2.conf. По умолчанию он содержит много строк с комментариями и пустых строк, мешающих увидеть нужные Вам настройки. Чтобы убрать из вывода все лишнее — вводим в командную строку команду sed '/^#\|^$/d' /etc/apache2/apache2.conf:

 

Теперь давайте разберемся, как работают составляющие этой команды:

  • ^# — находит строки с комментариями (которые начинаются с соответствующего специального символа);
  • ^$ — находит пустые строки;
  • | —разделяет условия поиска логическим ИЛИ (в противном случае критериям поиска будут соответствовать только строки, которые одновременно содержат комментарий и пустые — что в нашем случае невозможно);
  • d — указываем команде sed удалить все строки, соответствующие условиям поиска.

Удаляем комментарии и пустые строки из вывода помощью команды sed

Можно как просто вывести на экран только важную информацию из файла конфигурации или скрипта. Либо перенаправить результат в другой файл для дальнейшего использования.

Учимся использовать команду grep

Еще одна крайне полезная команда, которую нужно освоить специалисту LFCS — это grep. С ее помощью выполняется основная обработка текстовых потоков в Linux.

Утилита grep — это инструмент командной строки Linux (а также других UNIX-подобных операционных систем), предназначенный для поиска и вывода на экран текстовой информации, соответствующей заданному регулярному выражению. С помощью команды grep очень удобно осуществлять фильтрацию данных, передаваемых в стандартный вывод (поток 1 — stdout)

Фильтруем вывод с помощью команды grep

Давайте попробуем извлечь данные из файла /etc/passwd. К примеру, строку о пользователе sedicomm-university. Для этого вводим в командную строку команду grep sedicomm-university /etc/passwd:

 

Фильтруем вывод из файла passwd с помощью команды grep

Находим все вхождения комбинации символов с подстановкой любого числа с помощью команды grep

Теперь попробуем немного усложнить задачу. Например, найти в каталоге /etc все файлы, названия которых включают комбинацию символов rc, за которыми сразу идет любая цифра. Для этого вводим в командную строку команду ls с опцией -l (подробный вывод, включающий помимо названий файлов данные об их размере, владельце и права доступа) и аргументом /etc. После чего с помощью конвейера | передаем результаты вывода команде grep rc[0-9]:

 

В данном примере регулярное выражение rc[0-9] как раз и означает, что команде grep нужно искать комбинацию символов rc с любой цифрой.

Находим все вхождения комбинации символов с подстановкой любого числа с помощью команды grep

Учимся использовать команду cut

Еще одна важная команда, без которой нельзя получить сертификат LFCS — это команда cut.

Утилита cut — это программа для командной строки UNIX-подобных операционных систем, предназначенная для вырезания текста. С ее помощью пользователь может получить нужные ему части входных строк (как из текстового файла, так и из потока стандартного ввода stdin) и  передать их в поток стандартного вывода stdout.

С командой cut можно использовать следующие опции:

  • -b — вырезать и вернуть заданное количество байтов;
  • -c — вырезать и вернуть заданное количество символов;
  • -f — вырезать и вернуть заданные поля;
  • -d — заменить знак разделителя (по умолчанию разделителем считается табуляция).

Теперь давайте перейдем к практическому применению команды cut.

Вырезаем и форматируем текст с помощью команды cut

В рамках этого примера попробуем извлечь информацию из уже знакомого Вам файла /etc/passwd. Например — имена учетных записей пользователей и соответствующие им названия оболочек. По умолчанию этот файл содержит большой массив информации, который сложно читать. Чтоб вырезать и вывести на экран только искомую информацию — вводим в командную строку команду cat /etc/passwd и с помощью конвейера | передаем ее вывод команде cut -d: -f1,7:

 

В данном случае опция -d указывает, что как разделитель должно расцениваться двоеточие :. Тогда как с помощью опции -f команда будет вырезать и выводить на экран значения из полей №1 и №7.

Вырезаем и форматируем текст с помощью команды cut

Учимся использовать команды sort и uniq

Еще одна команда, без знакомства с которой не получится получить сертификат LFCS — это uniq.

Утилита uniq — это инструмент командной строки для семейства UNIX-подобных операционных систем, позволяющий удалять из текста повторяющиеся значения. По умолчанию команда uniq берет данные для обработки из потока стандартного ввода stdin (если не задан входной файл) и возвращает обработанный текст в поток стандартного вывода stdout (если не задан выходной файл).

Важно: команда uniq не распознает повторяющиеся строки, если они не следуют одна за другой — поэтому предварительно используется команда sort.

Утилита sort — это программа для командной строки семейства UNIX-подобных операционных систем, позволяющая выполнить сортировку текстовой информации (как в файле, так и в выводе другой команды).

Сортируем вывод с помощью команды sort

Прежде чем использовать команду uniq Вам так или иначе нужно будет сперва отсортировать текст. Для этого можно воспользоваться командой sort. В качестве первого примера возьмем результаты вывода команды du.

Утилита du  (от англ. Disc Usage — использование диска) — это инструмент командной строки в ОС семейства GNU / Linux, предназначенный для мониторинга объема использования дискового пространства различными каталогами.

Давайте попробуем проверить, сколько дискового пространства используют различные подкаталоги в каталоге /var. Для этого вводим в командную строку команду sudo du -sch /var/*:

 

Важно: в данном случае команде du нужно предоставить права суперпользователя с помощью команды sudo (иначе операционная система не предоставит доступ к данным о каталоге /var).

Вывод команды du -sch без использования сортировки с помощью команды sort

 

По умолчанию результаты вывода команды du сортируются только по названию подкаталога (а не по размеру). Однако с помощью команды sort это можно легко исправить. Для этого дополняем нашу команду sudo du -sch /var/* с помощью конвейера | командой sort -h:

 

В результате строки отсортированы по возрастанию занимаемого подкаталогом дискового пространства.

Вывод команды du -sch c использованием сортировки с помощью команды sort

Подсчитываем количество событий за день в файле журнала с помощью команды uniq

Системному администратору Linux нужно отслеживать по файлам журналов (логов) множество различных событий. Помимо всего прочего, даже количество событий, зафиксированных за день, может многое сказать о том, нормально ли работает операционная система. В уже знакомом Вам файле /var/log/dpkg.log дата занимает первые 10 символов каждой строки.

С помощью команды uniq можно не только удалить все строки, у которых повторяется те самые первые 10 символов, содержащие дату. Но и получить информацию о том, сколько раз каждое уникальное значение даты повторяется. То есть, сколько записей в тексте файла журнала имеют одинаковую дату. Для этого вводим в командную строку команду cat /var/log/dpkg.log (вывод на экран содержимого файла) и с помощью знака конвейера | добавляем передаем результат команде  uniq -c -w 10:

 

Давайте разберемся в том, что в данном примере означают опции команды uniq:

  • -c — вывод перед каждой строкой количества повторений через пробел;
  • -w — число символов строки, участвующих в операции сравнения.

Подсчитываем количество событий за день в файле журнала с помощью команды uniq

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

Объединяем возможности команд sort и uniq

Команды sort и uniq можно очень удобно объединять. Допустим, что у Вас есть текстовый файл sortuniq.txt, содержащий следующие данные о тратах членов коллектива:

  • имя сотрудника;
  • дату;
  • сумму.

Файл, который нужно обработать с помощью команд sort и uniq

 

Предположим, что Вам нужно вывести на экран список всех членов коллектива без повторений. Для этого вводим в командную строку команду cat sortuniq.txt, ее вывод с помощью конвейера | передаем команде cut -d: -f1, после чего еще раз с помощью конвейера | передаем вывод команде sort, после чего еще раз с помощью конвейера | передаем вывод команде uniq:

 

Объединяем возможности команд sort и uniq

Учимся использовать команду tr

Последняя команда, о которой Вы узнаете в рамках этого урока — tr. И умение ее использовать также обязательно пригодится Вам на экзамене LFCS.

Утилита tr (от англ. translate) — это простой инструмент командной строки Linux, предназначенный для замены символов или удаления из текста. От более сложных аналогов программа отличается полным отсутствием поддержки работы с файлами напрямую. То есть, с помощью команды tr можно изменять только те текстовые данные, которые:

  • получены напрямую из стандартного ввода (поток 0 — stdin);
  • перенаправлены из стандартного вывода (поток 1 — stdout) другой команды.

Теперь давайте попробуем разобраться в возможностях команды tr и в том, как с ее помощью выполняется обработка текстовых потоков в Linux.

Переводим символы из нижнего регистра в верхний с помощью команды tr

Попробуем перевести все символы в файле sortuniq.txt из нижнего в верхний регистр (то есть сделать из строчных букв прописные). Для этого вводим в командную строку команду cat sortuniq.txt и передаем ее вывод с помощью конвейера | команде tr [:lower:] [:upper:]:

 

Переводим символы из нижнего в верхний регистр с помощью команды tr

Заменяем разделитель в тексте с помощью команды tr

Скорее всего, самым частым способом использования команды tr в Вашей практике будет замена разделителя в тексте. Например — двойного пробела в выводе. Прежде всего, вводим в командную строку команду ls -l:

 

Далее снова вводим в командную строку команду ls -l и с помощью конвейера | передаем ее вывод команде tr -s ' ':

 

Поскольку мы задали только первый набор символов для замены и не задали второй — команда tr просто осуществила замену повторяющихся пробелов.

Заменяем двойной пробел в тексте с помощью команды tr

 

Однако в данном случае замена не выглядит достаточно очевидной. Поэтому давайте попробуем вместо пробела использовать в качестве разделителя вертикальную черту. Для этого вводим в командную строку ls -l и с помощью конвейера | передаем ее вывод команде tr -s ' ' '|':

 

В данном случае команда tr находит в выводе команды ls -l пробел из первого набора символов (' ') и заменяет символом их вертикальной чертой из второго набора ('|').  Попробуйте самостоятельно выбрать другие символы для замены, чтобы посмотреть на результат работы команды tr.

Заменяем разделитель в тексте с помощью команды tr

 

Полный список уроков для прохождения индустриальной сертификации:  Подготовка к LFCS (Linux Foundation Certified Sysadmin.

Выводы

Вы прошли первый урок в рамках подготовки к сертификации LFCS, узнали о том, как выполняется обработка текстовых потоков в Linux. А также познакомились с командами sed, grep, cut, sort, uniq и tr, которые в различных комбинациях помогут Вам решать целый спектр задач начинающего системного администратора. Прежде всего, с их помощью Вы можете собирать, фильтровать, форматировать, комбинировать и перенаправлять (как в качестве ввода команды, так и в файл) различную полезную информацию из стандартного вывода.

Спасибо за время, уделенное прочтению статьи! Полный список уроков для прохождения индустриальной сертификации:  Курс LFCS (Linux Foundation Certified Sysadmin): программа подготовки к экзаменам.

Если возникли вопросы — задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet / DevOps (программируемые системы) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Больше похожих постов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Поиск по сайту
Лучшее
Популярное
Рубрики
Меню