#!/bin/bash PATTERN='New USB device found|Product:|Manufacturer:|SerialNumber:|USB Mass Storage' clear echo -e "\e[1;32m" cat <<'EOF' _ __ _ /\ /\ ___| |__ / _\ ___ __ _ _ __ ___| |__ / / \ \/ __| '_ \\ \ / _ \/ _` | '__/ __| '_ \ \ \_/ /\__ \ |_) |\ \ __/ (_| | | | (__| | | | \___/ |___/_.__/\__/\___|\__,_|_| \___|_| |_| EOF echo -e "\e[0m" ############################################################################### # Определение источника логов ############################################################################### if command -v journalctl >/dev/null 2>&1 && \ journalctl --no-pager -n 1 >/dev/null 2>&1 then SOURCE="journalctl" else SOURCE="files" fi ############################################################################### # Функция парсинга (общая для всех источников) ############################################################################### parse_usb() { awk ' { idx=1 while ($idx != "New" && $idx != "Product:" && $idx != "Manufacturer:" && $idx != "SerialNumber:" && $idx != "Mass" && idx != NF) { idx++ } if ($idx == "New") { print("\033[35m-----------------------------------------------------------\033[0m") } if ($idx == "Mass") { printf("\033[1;33m") } printf("Дата: %s %s %s | ", $1, $2, $3) if ($idx == "New") { printf("VID:%s PID:%s\n", substr($(idx + 4), 10, 4), substr($(idx + 5), 11, 4)) } else if ($idx == "Mass") { printf("USB Mass Storage device\n\033[0m") } else { while ($(idx-1) != $NF) { printf("%s ", $idx) idx++ } printf("\n") } }' } ############################################################################### # journalctl ############################################################################### if [[ "$SOURCE" == "journalctl" ]] then echo -e "\e[1;34m--------------------- journalctl ---------------------\e[0m" journalctl -k \ --no-pager \ --output=short \ | grep -E "$PATTERN" \ | parse_usb ############################################################################### # Legacy logs (/var/log) ############################################################################### else LOG_PATH=/var/log LOG_BASE="kern.log" LOG_LIST=$(find "$LOG_PATH" -type f -name "$LOG_BASE*") for doc in $LOG_LIST do echo -e "\e[1;34m--------------------- File $doc ---------------------\e[0m" if [[ "${doc##*.}" == "gz" ]] then CMD=zgrep else CMD=grep fi $CMD -E "$PATTERN" "$doc" | parse_usb done fi