Анализ данных в Linux. Глава из книги «Bash и кибербезопасность»

Пе­ред тобой седь­мая гла­ва из кни­ги «Bash и кибер­безопас­ность: ата­ка, защита и ана­лиз из коман­дной стро­ки Linux», которую мы пуб­лику­ем по догово­рен­ности с изда­тель­ством «Питер». Ее авто­ры — Пол Трон­кон и Карл Олбинг, а ори­гинал был издан O’Reilly.

Чтение из STDIN

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

Баш вмещает трубопроводы и перенаправление посредством специальных файлов. Каждый процесс получает собственный набор файлов (один для STDIN, STDOUT и STDERR соответственно), и они связаны при вызове или перенаправлении. Каждый процесс получает следующие файлы:

  • STDIN — /proc/<processID>/fd/0
  • STDOUT — /proc/<processID>/fd/1
  • STDERR — /proc/<processID>/fd/2

Чтобы сделать жизнь более удобной, система создает для нас несколько ярлыков:

  • STDIN — /dev/stdin or /proc/self/fd/0
  • STDOUT — /dev/stdout or /proc/self/fd/1
  • STDERR — /dev/stderr or /proc/self/fd/2

fd в дорожках выше обозначает дескриптор файла.

Чтение из STDIN

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

summary

Shell #!/bin/bash # Основное резюме моего отчета о продажах echo Here is a summary of the sales data: echo ==================================== echo cat /dev/stdin | cut -d’ ‘ -f 2,3 | sort

12345678 #!/bin/bash# Основное резюме моего отчета о продажах echo Here is a summary of the sales data:echo ====================================echo cat /dev/stdin | cut d‘ ‘ f 2,3 | sort

Давайте разберем это:

  • Строки 4, 5, 6 — Распечатайте заголовок для вывода
  • Строка 8 — cat файл, представляющий STDIN, вырезает установку разделителя на пробел, поля 2 и 3 затем сортируют вывод.
Читайте также:  Операции с файлами и каталогами linux: как выполнять правильно

Сортировка и упорядочение данных

При пер­вичном ана­лизе дан­ных в боль­шинс­тве слу­чаев полез­но начинать с рас­смот­рения экс­тре­маль­ных зна­чений: какие события про­исхо­дили наибо­лее или наиме­нее час­то, самый малень­кий или самый боль­шой объ­ем передан­ных дан­ных и т. д. Нап­ример, рас­смот­рим дан­ные, которые мож­но соб­рать из фай­лов жур­нала веб‑сер­вера. Необыч­но боль­шое количес­тво обра­щений к стра­ницам может ука­зывать на активное ска­ниро­вание или попыт­ку отка­за в обслу­жива­нии. Необыч­но боль­шое количес­тво бай­тов, заг­ружен­ных хос­том, может ука­зывать на то, что дан­ный сайт кло­ниру­ется или про­исхо­дит эксфиль­тра­ция дан­ных.

Что­бы управлять рас­положе­нием и отоб­ражени­ем дан­ных, ука­жите в кон­це коман­ды sort, head и tail:

| sort -k 2.1 -rn | head -15

При этом выход­ные дан­ные сце­нария переда­ются коман­де sort, а затем отсорти­рован­ный вывод нап­равля­ется коман­де head, которая напеча­тает 15 вер­хних (в дан­ном слу­чае) строк. Коман­да sort в качес­тве сво­его клю­ча сор­тиров­ки (-k) исполь­зует вто­рое поле, начиная с его пер­вого сим­вола (2.1). Более того, эта коман­да выпол­нит обратную сор­тиров­ку (-r), а зна­чения будут отсорти­рова­ны в чис­ловом поряд­ке (-n). Почему чис­ловой порядок? Потому что 2 отоб­ража­ется меж­ду 1 и 3, а не меж­ду 19 и 20 (как при сор­тиров­ке в алфа­вит­ном поряд­ке).

Ис­поль­зуя коман­ду head, мы зах­ватыва­ем пер­вые стро­ки вывода. Мы мог­ли бы получить пос­ледние нес­коль­ко строк, переда­вая вывод из коман­ды sort коман­де tail вмес­то head. Исполь­зование коман­ды tail с опци­ей -15 выведет пос­ледние 15 строк. Дру­гой спо­соб отсорти­ровать дан­ные по воз­раста­нию, а не по убы­ванию — уда­лить параметр -r.

Стандартная ошибка

Стандартная ошибка записывает ошибки, возникающие в ходе исполнения программы. Как и в случае стандартного вывода, по умолчанию этот поток выводится на терминал дисплея.

Пример

Рассмотрим пример стандартной ошибки с помощью команды ls, которая выводит список содержимого каталогов.

При запуске без аргументов ls выводит содержимое в пределах текущего каталога.

Введем команду ls с каталогом % в качестве аргумента:

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

Читайте также:  Что символизирует кулич и яйца на Пасху в православии

ls: cannot access %: No such file or directory

Перенаправление потока

Linux включает в себя команды перенаправления для каждого потока.

Команды со знаками > или < означают перезапись существующего содержимого файла:

  • > — стандартный вывод
  • < — стандартный ввод
  • 2> — стандартная ошибка

Команды со знаками >> или << не перезаписывают существующее содержимое файла, а присоединяют данные к нему:

  • >> — стандартный вывод
  • << — стандартный ввод
  • 2>> — стандартная ошибка

Пример

В приведенном примере команда cat используется для записи в файл file1, который создается в результате цикла:

cat > file1abc

Для завершения цикла нажмите сочетание клавиш Ctrl + D.

Если файла file1 не существует, то в текущем каталоге создается новый файл с таким именем.

Для просмотра содержимого файла file1 введите команду:

cat file1

В результате на дисплей терминала должно быть выведено следующее:

abc

Для перезаписи содержимого файла введите следующее:

cat > file1123

Для завершения цикла нажмите сочетание клавиш Ctrl + D.

В результате на дисплей терминала должно быть выведено следующее:

123

Предыдущего текста в текущем файле больше не существует, так как содержимое файла было переписано командой >.

Для добавления нового текста к уже существующему в файле с помощью двойных скобок >> выполните команду:

cat >> file1abc

Для завершения цикла нажмите сочетание клавиш Ctrl + D.

Откройте file1 снова и в результате на дисплее монитора должно быть отражено следующее:

123abc

Подсказки по использованию команд в Linux

При работе в командной оболочке Linux, в основной массе случаев, можно получить справочную информацию по использованию конкретной команды, введя ее имя с метеопараметром —help:

ls —help — отобразить справку для команды ls. В большинстве случаев, для получения справочной данных, допускается использование ключа -h

ls -h В операционных системах семейства Linux, более подробную ссылочную информацию можно получить из комплекта документации, известного как man-страницы, поскольку он доступен по бригаде man. Этот комплект включает в себя 8 разделов, содержащих справочную информацию, которую возможно вывести на экран с использованием команды man

Читайте также:  Ноутбук быстро нагревается и выключается что делать

Просматриваем Linux-файл в сжатом виде

Порой, в системе встречаются текстовые файлы в сжатом виде и формате gz. Это могут быть конфигурационные файлы ядра либо логи программ. Открыть такие файлы можно тоже через терминал, не прибегая к распаковке. Для этого существует множество аналогов вышеназванных утилит с той лишь разницей, что они имеют приставку z: zgerp, zegrep, zcat, zless.

Давайте откроем сжатый файл в Linux для просмотра:

zcat

Или выполним просмотр сжатого файла с прокруткой:

zless test

Вот, пожалуй, и всё. Теперь вы точно в курсе, как правильно открывать и просматривать текстовые файлы в терминале Linux.

Источники: — -otkryt-tekstovyj-fajl-linux; — ; — -text-file.

Удаление дублированных строк с помощью команды uniq

Команда uniq позволяет удалять дублированные строки из отсортированного файла. Она часто выполняется в конвейере следом за командой sort. В случае применения с ней параметра –c она может подсчитывать количество обнаруживаемых вхождений каждой строки, а в случае применения параметра –d — только сообщать о дублированных строках. 

$ sort -m | uniq -c 1 New test. 2 Now testing 1 Only a test.

В приведенном выше примере команда sort объединяет два файла — и — из-за наличия параметра –m, после чего ее вывод по конвейеру передается команде uniq с параметром –c. В результате на экране отображается отсортированный в алфавитном порядке список без дублированных строк вместе с количеством вхождений для каждой строки.

Author: ВладимирДругие статьи автора:

  • Перемещение по файлам с помощью команд head и tail
  • Редактирование файлов с помощью редактора vi