101 lines
2.7 KiB
Bash
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
|