5 Bash скрипта, които ИИ може да напише за вас

5 Bash скрипта, които ИИ може да напише за вас

Бъдете честни: колко пъти сте отлагали автоматизирането на някоя рутинна задача, просто защото не сте имали време или ентусиазъм да пишете Bash скрипт? Или може би синтаксисът на условията и циклите ви обърква? Днес това вече не е пречка. С появата на съвременните изкуствени интелекти (ИИ) като помощници за кодиране, генерирането на полезни, работещи Bash скрипта става въпрос от секунди.

ИИ инструментите не са просто търсачки. Те разбират контекста, могат да пишат, анализират и дебъгват код. За системния администратор, DevOps инженер или дори обикновения потребител на Linux, това е революция. В тази статия ще разгледаме 5 практически скрипта за ежедневието, които можете да поискате от ИИ, и най-важното – как да ги тествате безопасно, за да сте сигурни, че работят точно както очаквате.


Защо ИИ е идеален за писане на Bash скриптове?

Bash скриптовете често следват предвидими шаблони: обработка на файлове, проверка на условия, изпълнение на команди. Това ги прави идеален кандидат за генериране от ИИ. Вие описвате задачата на прост английски (или български), а ИИ я „превежда“ на Bash. Това не е магия, а напредък в естественото разбиране на езика. Вашата роля се премества от програмист към прецизен мениджър на изискванията – трябва ясно да опишете какво искате и внимателно да проверите резултата.


Скрипт 1: Автоматичен архиватор на стари файлове

Задача: Всеки месец трябва да архивирате стари лог файлове, за да освободите място и да запазите история. Ръчното правене на това е отегчително.

Какво да поискате от ИИ: *“Напиши Bash скрипт, който намира всички файлове в директория /var/log/myapp, по-стари от 30 дни, и ги компресира в tar.gz архив. Архивът да се казва logs_backup_YYYY-MM-DD.tar.gz и да се създава в директория /backups. Скриптът да извежда съобщение за всеки архивиран файл и общ брой.“*

Какво може да генерира ИИ:

#!/bin/bash

# Директория с изходните файлове
SOURCE_DIR="/var/log/myapp"
# Целева директория за архиви
BACKUP_DIR="/backups"
# Дни за запазване
DAYS_OLD=30

# Проверка за съществуващи директории
if [[ ! -d "$SOURCE_DIR" ]]; then
    echo "Грешка: $SOURCE_DIR не съществува."
    exit 1
fi

if [[ ! -d "$BACKUP_DIR" ]]; then
    echo "Грешка: $BACKUP_DIR не съществува."
    exit 1
fi

# Дата за името на архива
DATE=$(date +%Y-%m-%d)
ARCHIVE_NAME="logs_backup_$DATE.tar.gz"
ARCHIVE_PATH="$BACKUP_DIR/$ARCHIVE_NAME"

# Намиране на файлове и създаване на архив
echo "Архивиране на файлове по-стари от $DAYS_OLD дни от $SOURCE_DIR..."
FILES_TO_ARCHIVE=$(find "$SOURCE_DIR" -type f -mtime +$DAYS_OLD)

if [[ -z "$FILES_TO_ARCHIVE" ]]; then
    echo "Няма файлове за архивиране."
    exit 0
fi

# Архивиране
tar -czf "$ARCHIVE_PATH" $FILES_TO_ARCHIVE 2>/dev/null

# Проверка за успех
if [[ $? -eq 0 ]]; then
    echo "Архивът е създаден успешно: $ARCHIVE_PATH"
    COUNT=$(echo "$FILES_TO_ARCHIVE" | wc -l)
    echo "Общо $COUNT файла бяха архивирани."
else
    echo "Грешка при създаването на архива!"
    exit 1
fi

Как да го тествате безопасно:

  1. Не тествайте директно в /var/log! Създайте тестова среда:
mkdir -p /tmp/test/logs /tmp/test/backups
touch -t 202401010000 /tmp/test/logs/old_log{1..3}.txt  # Създава стари файлове
touch /tmp/test/logs/recent_log.txt  # Създава нов файл

  1. Променете променливите SOURCE_DIR и BACKUP_DIR в скрипта да сочат към /tmp/test/logs и /tmp/test/backups.
  2. Изпълнете скрипта: bash archive_script.sh.
  3. Проверете далайн backups/ за архива и дали в него са само трите стари файла.

Скрипт 2: Монитор за дисково пространство и изпращане на известие


Задача: Искате да знаете, преди дискът ви да се напълни, за да избегнете проблеми с приложенията.

Какво да поискате от ИИ: *“Напиши скрипт, който проверява използването на дисково пространство за коренната директория (/). Ако използването надвишава 80%, да изпраща email предупреждение до [email protected]. Скриптът да се логва в /var/log/disk_monitor.log.“*

Какво може да генерира ИИ:

#!/bin/bash

THRESHOLD=80
EMAIL="[email protected]"
LOG_FILE="/var/log/disk_monitor.log"
PARTITION="/"

# Вземане на % използвано пространство
USAGE=$(df -h "$PARTITION" | awk 'NR==2 {print $5}' | sed 's/%//')

# Запис на действие в лог
log_message() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

log_message "Проверка на $PARTITION. Текущо използване: $USAGE%"

# Проверка на прага
if [[ $USAGE -gt $THRESHOLD ]]; then
    SUBJECT="Предупреждение: Дисковото пространство на $PARTITION е $USAGE%"
    BODY="Използването на $PARTITION надвишава зададения праг от $THRESHOLD%. Моля, освободете място."
    echo "$BODY" | mail -s "$SUBJECT" "$EMAIL"
    
    if [[ $? -eq 0 ]]; then
        log_message "Изпратено е email предупреждение до $EMAIL."
    else
        log_message "ГРЕШКА при изпращане на email."
    fi
else
    log_message "Използването е в нормални граници."
fi

Как да го тествате безопасно:

  1. За да не получавате истински email, първо тествайте логиката:
THRESHOLD=1  # Променете прага на 1%, за да се задейства лесно
EMAIL="test@localhost"

2. Вместо командата mail, използвайте echo за тест:

echo "Тестово съобщение: $SUBJECT"

3. Проверете лог файла (може да промените LOG_FILE на /tmp/disk_test.log):

tail -f /tmp/disk_test.log

Скрипт 3: Автоматично щамповане на воден знак в изображения

Задача: Имате папка със снимки, които трябва да маркирате с воден знак преди качване.

Какво да поискате от ИИ: „Напиши Bash скрипт, който обработва всички .jpg файлове в папка, като добавя воден знак (друг изображение) в долния десен ъгъл. Използвай ImageMagick. Оригиналите да се запазват в подпапка /original.“

Какво може да генерира ИИ:

#!/bin/bash

INPUT_DIR="./images"
WATERMARK="watermark.png"
OUTPUT_DIR="./watermarked"
BACKUP_DIR="./original"

# Създаване на директории, ако не съществуват
mkdir -p "$OUTPUT_DIR" "$BACKUP_DIR"

# Проверка за наличието на ImageMagick и водния знак
if ! command -v composite &> /dev/null; then
    echo "Грешка: ImageMagick не е инсталиран."
    exit 1
fi

if [[ ! -f "$WATERMARK" ]]; then
    echo "Грешка: Файлът с воден знак $WATERMARK не е намерен."
    exit 1
fi

# Обработка на всеки JPG файл
for img in "$INPUT_DIR"/*.jpg; do
    if [[ -f "$img" ]]; then
        filename=$(basename "$img")
        echo "Обработва се: $filename"
        
        # Копиране на оригинала
        cp "$img" "$BACKUP_DIR/$filename"
        
        # Добавяне на воден знак
        composite -gravity southeast -geometry +10+10 "$WATERMARK" "$img" "$OUTPUT_DIR/$filename"
        
        if [[ $? -eq 0 ]]; then
            echo "  Готово: $filename"
        else
            echo "  Грешка при обработката на $filename"
        fi
    fi
done

echo "Обработката приключи."

Как да го тествате безопасно:

  1. Създайте тестова директория с няколко копия на снимки.
  2. Създайте прост воден знак (например малък PNG файл).
  3. Пуснете скрипта и проверете папките watermarked и originalСкриптът прави резервно копие, което е безопасно.

Скрипт 4: Проверка на живота на мрежови устройства (Ping монитор)

Задача: Трябва да следите дали група от сървъри или мрежови устройства са онлайн.

Какво да поискате от ИИ: „Напиши скрипт, който чете списък с IP адреси от файл hosts.txt, изпраща по 2 ping заявки към всеки и записва офлайн устройствата във файл offline_hosts.txt.“

Какво може да генерира ИИ:

#!/bin/bash

HOSTS_FILE="hosts.txt"
OFFLINE_FILE="offline_hosts.txt"
TIMEOUT=2  # секунди
COUNT=2    # броя ping заявки

# Проверка за входния файл
if [[ ! -f "$HOSTS_FILE" ]]; then
    echo "Грешка: $HOSTS_FILE не съществува."
    exit 1
fi

# Изчистване на стария резултатен файл
> "$OFFLINE_FILE"

echo "Започва проверка на хостове..."
while IFS= read -r host; do
    # Пропускане на празни редове и редове с коментари
    [[ -z "$host" || "$host" =~ ^# ]] && continue
    
    echo -n "Проверява се $host... "
    
    # Команда за ping
    if ping -c "$COUNT" -W "$TIMEOUT" "$host" &> /dev/null; then
        echo "ОК"
    else
        echo "ОФЛАЙН"
        echo "$host" >> "$OFFLINE_FILE"
    fi
done < "$HOSTS_FILE"

echo "---"
echo "Проверката приключи. Резултатите са записани в $OFFLINE_FILE."

Как да го тествате безопасно:

  1. Създайте hosts.txt с безопасни за ping цели:
127.0.0.1
localhost
8.8.8.8
192.168.1.999  # Несъществуващ адрес за тест на офлайн статус
  1. Изпълнете скрипта. Той няма да промени нищо по мрежата, само ще чете и пише текстови файлове.
  2. Проверете съдържанието на offline_hosts.txt.

Скрипт 5: Ротация на логове с компресия и изтриване

Задача: Класически проблем – логовете растат неконтролируемо.

Какво да поискате от ИИ: *“Създай скрипт за ротация на логове. Той трябва: 1) Да компресира текущия лог файл с дата в името. 2) Да изтрива компресирани логове по-стари от 180 дни. 3) Да изчиства (truncate) оригиналния лог файл.“*

Какво може да генерира ИИ:

#!/bin/bash

LOG_FILE="/var/log/myapp/application.log"
BACKUP_DIR="/var/log/myapp/backups"
RETENTION_DAYS=180

# Проверки
if [[ ! -f "$LOG_FILE" ]]; then
    echo "Грешка: Лог файлът $LOG_FILE не съществува."
    exit 1
fi

mkdir -p "$BACKUP_DIR"

# Стъпка 1: Компресия на текущия лог
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="application_$TIMESTAMP.log.gz"
gzip -c "$LOG_FILE" > "$BACKUP_DIR/$BACKUP_NAME"

if [[ $? -eq 0 ]]; then
    echo "Логът е архивиран в: $BACKUP_DIR/$BACKUP_NAME"
else
    echo "Грешка при архивирането!"
    exit 1
fi

# Стъпка 2: Изтриване на стари архиви
echo "Изтриване на архиви по-стари от $RETENTION_DAYS дни..."
find "$BACKUP_DIR" -name "*.log.gz" -type f -mtime +$RETENTION_DAYS -delete

# Стъпка 3: Изчистване на оригиналния лог
> "$LOG_FILE"
echo "Оригиналният лог файл е изчистен."

Как да го тествате безопасно:

  1. НАПЪЛНО ИЗКЛЮЧИТЕЛНО ВАЖНО: Не изпълнявайте този скрипт върху истински логове без тестване!
  2. Създайте изолирана среда:
mkdir -p /tmp/log_rotation_test/backups
echo "Тестов лог съдържание..." > /tmp/log_rotation_test/app.log
  1. Променете променливите в скрипта да сочат към /tmp/log_rotation_test.
  2. Изпълнете и проверете дали се е създал архив и оригиналният файл дали е празен (truncated).

Общи принципи за тестване на ИИ-генерирани скриптове

ИИ е мощен, но не е непогрешим. Винаги следвайте тези стъпки:

  1. Разбирайте кода: Прочетете скрипта, който ИИ е генерирал. Стремите се да разберете какво прави всеки ред.
  2. Тествайте в изолирана среда: Винаги използвайте временни директории, тестови файлове и фалшиви данни. Никога директно върху продукция!
  3. Тествайте гранични случаи: Какво се случва ако входният файл липсва? Ако директорията е празна?
  4. Проверявайте за вредни команди: Уверете се, че скриптът не съдържа rm -rf / или подобни опасни операции без подходящи проверки.
  5. Стартирайте с bash -x: Тази опция показва всяка стъпка от изпълнението, което е безценно за откриване на грешки.
bash -x your_script.sh

Заключение: ИИ като ваш сътрудник, а не заместник

ИИ инструментите са невероятен силно множител за вашата продуктивност. Те могат да преодолеят празната страница и да ви дадат работещ първи черновик за минути. Вашата роля обаче остава критична. Вие сте експертът, който дефинира проблема, проверява решението за безопасност и ефективност, и го интегрира в по-голямата система.

Започнете с малки, добре дефинирани задачи като показаните по-горе. Поискайте помощ от ИИ, след това тествайте безжалостно. С времето ще откриете, че вашите умения за анализ и управление на изискванията се развиват, докато рутинната работа отстъпва пред автоматизацията. Балансът между човешката експертиза и изкуствения интелект е там, където се намира истинската сила.

Федя Серафиев

Федя Серафиев

е DevOps технологичен ентусиаст с опит в Linux, Docker, Kubernetes и CI/CD. Той споделя практични ръководства и анализи, които помагат на специалистите да изграждат по-добри и ефективни системи. На devopsbg.net Федя предоставя актуални и полезни насоки за автоматизация, сигурност и оптимизация на инфраструктурата.

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *


Колко е 7 + 10 ? (въведете числото)