UCS - коллекция мануалов

Практика - критерий истины...

Инструменты пользователя

Инструменты сайта


linux:linux:scripts

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
linux:linux:scripts [2025/08/26 04:32] Luciferuslinux:linux:scripts [2025/09/17 20:55] (текущий) – удалено Luciferus
Строка 1: Строка 1:
-====== Скрипты, которые облегчат вам жизнь ====== 
  
-===== Замена пробелов знаком подчеркивания ===== 
- 
-Не так уж и редко есть необходимость заменить пробелы в именах файлов на подчеркивание. 
- 
-<hidden Развернуть blank-rename.sh> 
-<code bash> 
-#!/bin/bash 
-# 
-# Скрипт blank-rename.sh 
-# Заменяет пробелы символом подчеркивания в именах файлов в текущем каталоге. 
-  
-ONE=1                     # единственное или множественное число (см. ниже). 
-number=0                  # Количество переименованных файлов. 
-FOUND=0                   # Код завершения в случае успеха. 
-  
-for filename in *         # Перебор всех файлов в текущем каталоге. 
-do 
-     echo "$filename" | grep -q " "         # Проверить - содержит ли имя файла пробелы. 
-     if [ $? -eq $FOUND ] 
-     then 
-       fname=$filename                      # Удалить путь из имени файла. 
-       n=`echo $fname | sed -e "s/ /_/g"  # Заменить пробелы символом подчеркивания. 
-       mv "$fname" "$n"                     # Переименование... 
-       let "number += 1" 
-     fi 
-done 
- 
-if [ "$number" -eq "$ONE" ] 
-then 
- echo "$number файл переименован." 
-else 
- echo "Переименовано файлов: $number" 
-fi 
-  
-exit 0 
-</code> 
-</hidden>  // 
- 
- 
-===== Конвертирование аудиофайлов в MP3 из FLAC ===== 
- 
-Иногда требуется переконвертировать аудиофайлы из одного формата или битрейта в другой, в этом нам поможет утилита **lame** и этот незамысловатый скриптик... 
- 
-<hidden Развернуть conv2mp3.sh> 
-<code bash> 
-#!/bin/bash 
-### Заменить flac на другой аудиформат, если есть необходимость, также заменить 320, если нужен другой битрейт. 
-### Скрипт конвертации аудиофайлов conv2mp3.sh 
- 
-cd ./ && mkdir ./conv 
-for f in *.flac; do flac -cd "$f" | lame -b 320 - ./conv/"${f%.*}".mp3; done 
-</code> 
-</hidden>  // 
- 
- 
-===== Мониторинг системы ===== 
- 
-Показывает информацию о текущем железе, занятых ресурсах и состоянии накопителей. 
- 
-<hidden Развернуть sysfull_info.sh> 
-<code bash> 
-#!/bin/bash 
-### Скрипт вывода информации о unix-like системах 
-### Сделайте скрипт исполняемым: chmod a+x sysfull_info.sh 
- 
-# Цветовые коды 
-ORANGE='\033[0;33m' 
-YELLOW='\033[1;33m' 
-RED='\033[1;31m' 
-GREEN='\033[1;32m' 
-WHITE='\033[1;37m' 
-CIAN='\033[1;36m' 
-MAGENTA='\033[1;35m' 
-PINK='\033[38;5;199m' 
-NC='\033[0m' 
- 
-section() { 
-    echo -e "${ORANGE}=== $1 ===${NC}" 
-} 
- 
-# Проверка прав 
-if [ "$EUID" -ne 0 ]; then 
-    echo -e "${RED}ВНИМАНИЕ:${NC} Для полной информации запустите скрипт с sudo" 
-fi 
- 
-section "Информация о системе" 
- 
-echo "" 
- 
-CURRENT_DATE=$(date '+%Y-%m-%d %H:%M:%S') 
-UPTIME=$(uptime -p) 
-echo -e "${WHITE}Текущее время:${NC} ${CIAN}$CURRENT_DATE${NC}" 
-echo -e "${WHITE}Аптайм:${NC} ${CIAN}$UPTIME${NC}" 
-echo -e "${WHITE}Активные пользователи:${NC} ${CIAN}$(who | wc -l)${NC}" 
-echo -e "${WHITE}Загрузка системы:${NC} ${CIAN}$(uptime | awk -F'load average: ' '{print $2}')${NC}" 
- 
-echo "" 
- 
-# Состояние основных компонентов 
-CPU_NAME=$(cat /proc/cpuinfo | grep -i 'model name'| sed -n '1p' | awk '{print $4,$5,$7,$8}') 
-CPU_TEMP=$(sensors | grep 'Package id 0' | awk '{print $4}' | sed 's/+//;s/\.0//') 
-FAN_RPM=$(sensors | grep 'fan2' | awk '{print $2}') 
-CPU_LOAD=$(top -bn1 | grep 'Cpu(s)' | awk '{printf "%.1f", $2 + $4}') 
-MEM_INFO=$(free -m | awk '/Mem:/||/^Память:/ {print $3, $2}') 
-MEM_USED=$(echo $MEM_INFO | awk '{print $1}') 
-MEM_TOTAL=$(echo $MEM_INFO | awk '{print $2}') 
-MEM_PERCENT=$((MEM_USED * 100 / MEM_TOTAL)) 
-ZOMBIES=$(ps axo state | grep -c 'Z') 
- 
-echo -e "   ┌─ ${WHITE}Процессор:${NC} ${CIAN}$CPU_NAME${NC}" 
-echo -e "   ├─ ${WHITE}Температура CPU:${NC} ${CIAN}$CPU_TEMP°C${NC}" 
-echo -e "   ├─ ${WHITE}Обороты кулера:${NC} ${CIAN}$FAN_RPM${NC} ${WHITE}RPM${NC}" 
-echo -e "   └─ ${WHITE}Загрузка CPU:${NC} ${CIAN}$CPU_LOAD%${NC}" 
- 
-echo "" 
- 
-echo -e "   ┌─ ${WHITE}Использовано памяти:${NC} ${CIAN}$MEM_USED МБ${NC} ${WHITE}из${NC} ${CIAN}$MEM_TOTAL МБ${NC} ${WHITE}($MEM_PERCENT%)${NC}" 
-echo -e "   ├─ ${WHITE}Процессов всего:${NC} ${CIAN}$(ps -e | wc -l)${NC}" 
-echo -e "   ├─ ${WHITE}Зомби-процессы:${NC} ${RED}$ZOMBIES${NC}" 
-if [ "$ZOMBIES" -gt 0 ]; then 
-    ps -eo pid,state,comm | awk '$2=="Z" {print $1, $3}' | while read -r pid comm; do 
-        echo -e "   ${RED}└─${NC} ${PINK}$pid${NC} ${YELLOW}(${comm})${NC}" 
-    done 
-fi 
- 
-echo "" 
- 
-#section "Состояние GPU" 
-detect_gpu() { 
-    # NVIDIA 
-    if command -v nvidia-smi &> /dev/null; then 
-        GPU_NAME=$(nvidia-smi --query-gpu=gpu_name --format=csv,noheader 2>/dev/null | head -1) 
-        GPU_VRAM=$(nvidia-smi --query-gpu=memory.used --format=csv,noheader 2>/dev/null | awk '{print $1}') 
-        GPU_TEMP=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader) 
-        echo -e "   ┌─ ${WHITE}Видеокарта:${NC} ${CIAN}NVIDIA $GPU_NAME${NC}" 
-        echo -e "   ├─ ${WHITE}Температура GPU:${NC} ${CIAN}$GPU_TEMP°C${NC}" 
-        echo -e "   └─ ${WHITE}Утилизация VRAM:${NC} ${CIAN}$GPU_VRAM МБ${NC}" 
-    # AMD 
-    elif [ -d /sys/class/drm/card0/device ]; then 
-        GPU_NAME=$(cat /sys/class/drm/card0/device/gpu_bus_id 2>/dev/null) 
-        if [ -n "$GPU_NAME" ]; then 
-            GPU_TEMP=$(sensors | grep 'edge' | awk '{print $2}' | sed 's/+//;s/°C//') 
-            echo -e "${WHITE}Видеокарта:${NC} ${CIAN}AMD $GPU_NAME${NC}" 
-            echo -e "${WHITE}Температура GPU:${NC} ${CIAN}$GPU_TEMP°C${NC}" 
-        fi 
-    # Intel 
-    elif [ -d /sys/class/drm/card0 ]; then 
-        echo -e "${WHITE}Видеокарта:${NC} ${CIAN}Intel Integrated Graphics${NC}" 
-    else 
-        echo -e "${WHITE}Видеокарта:${NC} ${CIAN}Не обнаружена${NC}" 
-    fi 
-} 
-detect_gpu 
- 
-echo "" 
- 
-# Начало блока "Статус сервисов" 
-services=("ssh" "smbd" "cups" "swapspace") 
-for service in "${services[@]}"; do 
-    if systemctl is-active --quiet $service 2>/dev/null; then 
-        status="${GREEN}активен${NC}" 
-    else 
-        status="${RED}не активен${NC}" 
-    fi 
-    echo -e "${WHITE}$service:${NC} ${status}" 
-done 
-# Конец блока "Статус сервисов", если этот блок нужен, закомментируйте его 
-echo "" 
- 
-# Доступные обновления 
-if command -v apt &> /dev/null; then 
-    updates=$(apt list --upgradable 2>/dev/null | wc -l) 
-    if [ $updates -gt 1 ]; then 
-        echo -e "${WHITE}Доступно обновлений:${NC} ${CIAN}$((updates - 1))${NC}" 
-    else 
-        echo -e "${WHITE}Система обновлена${NC}" 
-    fi 
-else 
-    echo -e "${WHITE}Информация недоступна (только apt-системы)${NC}" 
-fi 
- 
-REBOOT_NEEDED=$(if [ -f /var/run/reboot-required ]; then echo "Да"; else echo "Нет"; fi) 
-echo -e "${WHITE}Требуется перезагрузка:${NC} ${CIAN}$REBOOT_NEEDED${NC}" 
- 
-echo "" 
- 
-# Сетевой трафик 
-NET_STATS=$(netstat -i | grep -E '^(ens|eth|enp)' | awk '{rx+=$3; tx+=$7} END {print rx, tx}') 
-RX_MB=$(echo "scale=2; $(echo $NET_STATS | awk '{print $1}') / 1024" | bc) 
-TX_MB=$(echo "scale=2; $(echo $NET_STATS | awk '{print $2}') / 1024" | bc) 
-echo -e "${WHITE}Получено данных за сессию:${NC} ${CIAN}$RX_MB МБ${NC}" 
-echo -e "${WHITE}Передано данных за сессию:${NC} ${CIAN}$TX_MB МБ${NC}" 
- 
-echo "" 
- 
-disk_info() { 
-    local device=$1 
-    local device_name=${device##*/} 
-    local device_type 
-    local model 
-    local temp 
-    local health 
-    local errors="" 
-    local disk_size 
- 
-    if [[ $device == *"nvme"* ]]; then 
-        device_type="NVMe SSD" 
-        model=$(nvme list | grep "$device" | awk '{for(i=3;i<=NF-5;i++) printf $i" "}' | sed 's/ *$//') 
-        temp=$(nvme smart-log $device | grep 'temperature' | awk '{print $3}') 
-        health=$(nvme smart-log $device | grep 'percentage_used' | awk '{print $3}') 
-        health="Износ: ${health}%" 
-    elif [[ $(cat /sys/block/${device_name}/queue/rotational) -eq 0 ]]; then 
-        device_type="SATA SSD" 
-        model=$(smartctl -i $device | awk -F': ' '/Device Model|Model Number/{print $2}' | head -1 | sed 's/ *$//') 
-        temp=$(smartctl -a $device | awk '/Temperature_Celsius/ {print $10}') 
-        health=$(smartctl -a $device | grep -m1 'overall-health' | awk '{print $NF}') 
-    else 
-        device_type="HDD" 
-        model=$(smartctl -i $device | awk -F': ' '/Device Model|Model Number/{print $2}' | head -1 | sed 's/ *$//') 
-        temp=$(smartctl -a $device | awk '/Temperature_Celsius/ {print $10}') 
- 
-        # SMART-статус для HDD 
-        smart_status=$(smartctl -H $device | grep 'result' | awk '{print $NF}') 
-        if [[ "$smart_status" == "PASSED" ]]; then 
-            health="Хорошо" 
-        else 
-            # Проверка конкретных ID атрибутов 
-            critical_errors=$(smartctl -A $device | awk ' 
-                $1 == 1  && $10 > 0 { printf "Raw_Read_Error: %d ", $10 } 
-                $1 == 5  && $10 > 0 { printf "Reallocated_Sectors: %d ", $10 } 
-                $1 == 7  && $10 > 0 { printf "Seek_Error_Rate: %d ", $10 } 
-                $1 == 187 && $10 > 0 { printf "Reported_Uncorrect: %d ", $10 } 
-                $1 == 194 && $10 > 60 { printf "Temp: %d°C ", $10 } 
-                $1 == 196 && $10 > 0 { printf "Realloc_Event_Count: %d ", $10 } 
-                $1 == 197 && $10 > 0 { printf "Pending_Sectors: %d ", $10 } 
-                $1 == 198 && $10 > 0 { printf "Offline_Uncorrect: %d ", $10 } 
-                $1 == 199 && $10 > 0 { printf "UDMA_CRC_Errors: %d ", $10 } 
-                $1 == 200 && $10 > 0 { printf "Write_Error_Rate: %d ", $10 } 
-            ') 
-            health="Плохо" 
-            errors="$critical_errors" 
-        fi 
-    fi 
- 
-    # Получаем размер диска 
-    disk_size=$(lsblk -bdno SIZE $device | numfmt --to=iec --format "%.2fB" | sed 's/,/./; s/ //g') 
- 
-    # Вывод основной информации 
-    echo -e "   ┌─ ${MAGENTA}[$device_type] ${model} ${device}: ${disk_size}${NC}" 
-    echo -e "   ├─ Температура: ${CIAN}${temp}°C${NC}" 
-    echo -e "   ├─ Состояние: ${CIAN}${health}${NC}" 
- 
-    if [[ -n "$errors" ]]; then 
-        echo -e "   ├─ Ошибки: ${RED}${errors}${NC}" 
-    fi 
- 
-    # Получаем смонтированные разделы 
-    partitions=$(lsblk -lno NAME,SIZE,MOUNTPOINT $device | grep -v '^NAME' | awk '$3 != ""') 
- 
-    if [[ -n "$partitions" ]]; then 
-        echo -e "   └─ Точки монтирования:" 
- 
-        # Выводим разделы 
-        counter=0 
-        while IFS= read -r part; do 
-            part_name=$(echo "$part" | awk '{print $1}') 
-            part_size=$(echo "$part" | awk '{print $2}') 
-            part_mount=$(echo "$part" | awk '{print $3}') 
-            used=$(df -h /dev/$part_name 2>/dev/null | awk 'NR==2 {print $5}') 
-            [[ -z "$used" ]] && used="N/A" 
- 
-            if [[ $counter -eq $(($(echo "$partitions" | wc -l)-1)) ]]; then 
-                symbol="└─" 
-            else 
-                symbol="├─" 
-            fi 
- 
-            echo -e "        ${symbol} ${CIAN}/dev/${part_name}:${NC} ${part_size} -> ${YELLOW}${part_mount}${NC} (${WHITE}${used}${NC})" 
-            ((counter++)) 
-        done <<< "$partitions" 
-    else 
-        echo -e "   └─ ${YELLOW}Не смонтирован${NC}" 
-    fi 
-    echo "" 
-} 
- 
-section "Состояние накопителей" 
-echo "" 
-{ 
-    # Сначала NVMe 
-    lsblk -dno NAME,TYPE,ROTA | grep ' disk' | grep 'nvme' | awk '{print $1}' 
-    # Затем SSD (не NVMe) 
-    lsblk -dno NAME,TYPE,ROTA | grep ' disk' | grep -v 'nvme' | awk '$3 == 0 {print $1}' 
-    # Затем HDD 
-    lsblk -dno NAME,TYPE,ROTA | grep ' disk' | grep -v 'nvme' | awk '$3 == 1 {print $1}' 
-} | while read -r disk; do 
-    disk_info "/dev/$disk" 
-done 
- 
-exit 
-</code> 
-</hidden>  // 
linux/linux/scripts.1756168325.txt.gz · Последнее изменение: Luciferus