2 Импорт и предобработка данных
2.1 Работа с данными из командной строки Linux
Зачастую перед импортом данных бывает полезно ознакомится с их форматом и провести предварительную фильтрацию. Командная строка Linux предоставляет мощные средства, в том числе параллельной, обработки данных.
FISH – продвинутая консоль
Если командным интерпретатором планируется пользоваться регулярно, то стоит позаботиться о собственном комфорте и технической эстетике :)
Установим альтернативный теримнал Fish

▶️ На Ubuntu и Debian-based дистрибутивах это делается так:
sudo apt install fish
Если желания менять терминал по-умолчанию для нашего пользователя нет, а хочется временно поработать в fish, можно просто набрать в терминале (например в bash)
fish
▶️ Если хотим поменять во-всей системе, то выполняем следующие шаги:
Смотрим куда установился наш fish, запоминаем путь
which fish
Например, у нас получилось /usr/bin/fish
▶️ Меняем для нашего пользователя терминал по-умолчанию, подставляя полученный путь в параметр --shell:
sudo usermod --shell=/usr/bin/fish $USER
❕Кроме того, если мы пользуемся эмулятором терминала, например Konsole в KDE, то достаточно поменять в настройках профиля Konsole пункт “Команда” на путь к fish – например, /usr/bin/fish.
Перенаправление вывода
В консоли fish как и во всех других консолях Linux существуют операторы управления выводом программ. Например, для просмотра файла сделаем:
cat /etc/passwd
▶️ Если вывод команды мы хотим сохранить в отдельный файл, то сделать это можно используя оператор >:
cat /etc/passwd > myfile.txt
Данная команда сохранит вывод команды cat /etc/passwd в файл myfile.txt.
При этом, если файл myfile.txt уже существовал на диске компьютера, то его содержимое будет заменено.
▶️ Если мы хотим дописать в конец файла, то используем оператор >>:
cat /etc/passwd >> myfile.txt
Данный оператор более безопасен, поскольку не затрет существующие данные если мы случайно ошибемся с именем файла.
▶️ Если вывод одной команды или программы мы хотим передать на вход другой программе, то используем оператор |:
cat /etc/passwd | grep root
Просмотр первых и последних строк файла
▶️ Для просмотра начала файла используется команда head, а для просмотра конца файла, соответственно, tail.
Например:
head /etc/passwd
tail /var/log/syslog
или с использованием пайпа:
cat /etc/passwd | head
cat /var/log/syslog | tail
Параметр -n позволяет управлять количеством отображаемых строк:
cat /var/log/syslog | tail -n 20
▶️ Иногда, в ходе мониторинга определенных событий в логах, существует необходимость on-line отображения и анализа логов по мере их поступления. Тогда для команды tail можно использовать параметр -f:
tail -f /var/log/syslog
PIGZ – многопроцессорная работа c архивами tar.gz
Для эффективного использования всей вычислительной способности Вашего процессора существует утилита pigz – https://www.zlib.net/pigz/.
▶️ Утилита устанавливается из официального репозитория Ubuntu:
sudo apt install pigz
▶️ Теперь, у нас появляется возможность “на лету” просматривать и искать информацию в заархивированных текстовых данных. Например:
wget https://zenodo.org/record/5199540/files/ALLFLOWMETER_HIKARI2021.csv.zip
cat ./ALLFLOWMETER_HIKARI2021.csv.zip | pigz -dc | head
JQ – работа с форматом JSON
Для работы с форматом JSON существует утилита jq. Устанавливается из репозитория:
sudo apt install jq
▶️ Скачаем пример данных в JSON формате и посмотрим:
wget https://github.com/OTRF/Security-Datasets/blob/2c2ac935c925930d009e44179a258b5579a6bbcf/datasets/atomic/windows/defense_evasion/host/cmd_disable_eventlog_service_startuptype_modification_via_registry.zip
cat ./cmd_disable_eventlog_service_startuptype_modification_via_registry.zip | pigz -dc | jq | head
▶️ К данным можно отправлять запросы – найдем все объекты, для которых поле EventID не равно значению 4103:
cat ./cmd_disable_eventlog_service_startuptype_modification_via_registry.zip | pigz -dc | jq 'select(.EventID != "4103")'
▶️ Поля результирующего JSON можно отсортировать, используя флаг -S:
cat ./cmd_disable_eventlog_service_startuptype_modification_via_registry.zip | pigz -dc | jq -S 'select(.EventID != "4103")'
✅
▶️ Также можно сгенерировать новый JSON только с нужными для анализа полями, например “EventID”, “Level” и “Hostname”:
cat ./cmd_disable_eventlog_service_startuptype_modification_via_registry.zip | pigz -dc | jq -S '{ "EventID", "Level", "Hostname"}'
📌 Полная документация к инструменту – https://stedolan.github.io/jq/manual/.