2 hours ago
Получаем сведения о системе
#!/usr/bin/env bash
# Справка
display_help() {
echo "Ключи: $0 [--host | --user | --help]"
echo "--host: Информация о хосте"
echo "--user: Информация о пользователях"
echo "--help: Информация о том, какие параметры поддерживает скрипт и что они значат"
}
# Информация о хосте
display_host_info() {
echo "Информация о хосте:"
echo "-------------------"
echo
echo "Количество ядер CPU: $(nproc)"
echo "--------------------"
echo
echo "Объём ОЗУ в системе / использовано ОЗУ: $(free -h | grep Mem | awk '{print $2 " / " $3}')"
echo "---------------------------------------"
echo
echo "Информация о дисках:"
echo "--------------------"
echo
disks=$(lsblk -o KNAME -n)
for disk in $disks
do
echo "Диск: $disk"
size=$(lsblk -b -o SIZE -n -d /dev/$disk)
echo "Размер: $((size/1024/1024/1024)) GB"
used_percent=$(echo $(lsblk -b -o FSUSE% -n -d /dev/$disk | sed -r 's/[\%]+//g'))
echo "Свободно: $((100-used_percent))%"
errors=$(smartctl -l error /dev/$disk | grep "Error" | wc -l)
echo "Количество ошибок: $errors"
echo
done
echo "Средняя загрузка системы (load average): $(uptime | awk -F'average:' '{print $2}')"
echo "----------------------------------------"
echo
echo "Текущее время: $(date +"%T")"
echo "--------------"
echo
echo "Время работы системы (Uptime): $(uptime -p)"
echo "------------------------------"
echo
echo "Сетевые интерфейсы:"
echo "-------------------"
echo
interfaces=$(ip link show | awk -F': ' '/^[0-9]+:/{print $2}')
for interface in $interfaces; do
echo "Interface: $interface"
status=$(ip link show "$interface" | grep "state" | awk '{print $9}')
echo "Status: $status"
ip_address=$(ip addr show $interface | awk '/inet /{print $2}')
echo "IP Address: $ip_address"
# Получаем количество отправленных и полученных пакетов
tx_packets=$(ip -s link show "$interface" | awk '/TX: bytes/{getline; print $2}')
rx_packets=$(ip -s link show "$interface" | awk '/RX: bytes/{getline; print $2}')
tx_errors=$(ip -s link show "$interface" | awk '/TX: bytes/{getline; print $3}')
rx_errors=$(ip -s link show "$interface" | awk '/RX: bytes/{getline; print $3}')
echo "Packets Sent: $tx_packets"
echo "Errors Sent: $tx_errors"
echo "Packets Received: $rx_packets"
echo "Errors Received: $rx_errors"
echo
done
echo
echo "Прослушиваемые порты:"
echo "---------------------"
echo
netstat -tulpan | grep "LISTEN"
#ss -lntup | grep "LISTEN"
echo
echo "----------------------------------------------"
}
# Информация о пользователях
display_user_info() {
echo "Информация о пользователях:"
echo "---------------------------"
echo
echo "Список пользователей в системе:"
echo "-------------------------------"
echo
cat /etc/passwd | awk -F':' '{print $1}'
echo
echo "Список root-пользователей:"
echo "--------------------------"
echo
cat /etc/passwd | awk -F':' '{if ($3 == 0) print $1}'
echo
echo "Список залогиненных пользователей:"
echo "----------------------------------"
echo
who | awk '{print $1}'
echo
echo "----------------------------------"
}
# Объявление ключей
OPTS=$(getopt -o "h" -l "help,host,user" -- "$@")
# Вывод help если скрипт запущен без параметров
if [[ $# -eq 0 ]]; then
display_help
exit 0
fi
eval set -- "$OPTS"
while true; do
case "$1" in
--host)
display_host_info
shift
;;
--user)
display_user_info
shift
;;
--help)
display_help
exit 0
;;
--)
shift
break
;;
*)
echo "Неправильный ключ. Используйте --help, --host, --user"
exit 1
;;
esac
done