usbsearch/usbsearch.sh
Sazonov Andrey 938fca0ee8 update
2026-01-14 10:46:17 +03:00

101 lines
2.7 KiB
Bash

#!/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