ПЪЛНА ВТОРА ЧАСТ: Напреднали Linux техники и инструменти
За разработчици, системни администратори и ентусиасти
РАЗШИРЕНИ BASH СКРИПТОВЕ И ТЕХНИКИ
ПРОМЕНЛИВИ И МАСИВИ
Bash:
# Специални променливи
echo "Име на скрипт: $0"
echo "Брой аргументи: $#"
echo "Всички аргументи: $@"
echo "Първи аргумент: $1"
echo "Последен код за изход: $?"
# Масиви
files=(file1.txt file2.txt file3.txt)
echo "Първи файл: ${files[0]}"
echo "Всички файли: ${files[@]}"
echo "Брой елементи: ${#files[@]}"
Bash:
# if-elif-else
if [[ -f "$file" ]]; then
echo "Файлът съществува"
elif [[ -d "$dir" ]]; then
echo "Това е директория"
else
echo "Не съществува"
fi
# Case statement
case "$1" in
start)
echo "Стартиране..."
;;
stop)
echo "Спиране..."
;;
*)
echo "Използвай: $0 {start|stop}"
;;
esac
Bash:
# For цикъл
for i in {1..5}; do
echo "Итерация $i"
done
for file in *.txt; do
echo "Обработвам: $file"
done
# While цикъл
counter=0
while [[ $counter -lt 5 ]]; do
echo "Брояч: $counter"
((counter++))
done
# Функции
log_message() {
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] $1" >> /var/log/myscript.log
}
# Извикване
log_message "Стартирах скрипта"
Bash:
#!/bin/bash
# Скрипт за бекъп
BACKUP_DIR="/backup/$(date +%Y%m%d)"
SOURCE_DIR="/var/www"
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/website_backup.tar.gz" "$SOURCE_DIR"
if [[ $? -eq 0 ]]; then
echo "Бекъп успешен: $BACKUP_DIR"
else
echo "Бекъп неуспешен!" >&2
exit 1
fi
РЕГУЛЯРНИ ИЗРАЗИ (REGEX) В LINUX
ОСНОВНИ МЕТАСИМВОЛИ
| Патерн | Значение | Пример |
|---|---|---|
| . | Всеки един символ | a.c → abc, a&c |
| ^ | Начало на ред | ^start |
| $ | Край на ред | end$ |
| * | 0 или повече повторения | a*b → b, aab |
| + | 1 или повече повторения | a+b → ab, aab |
| ? | 0 или 1 повторение | a?b → b, ab |
| [] | Символен клас | [aeiou] → гласна |
| [^] | Отрицание на клас | [^0-9] → не-цифра |
| () | Група | (ab)+ → ab, abab |
| | | ИЛИ | cat|dog |
| \d | Цифра | \d+ → числа |
| \w | Буквено-цифров символ | \w+ → думи |
РЕАЛНИ ПРИМЕРИ С GREP И SED
Bash:
# Търсене на IP адреси
grep -E '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' file.log
# Търсене на email адреси
grep -E '\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b' contacts.txt
# Заместване с sed
sed -E 's/([0-9]+)-([0-9]+)-([0-9]+)/\3.\2.\1/g' dates.txt
# Превръща 2024-12-31 → 31.12.2024
# Валидация на потребителски имена
if [[ "$username" =~ ^[a-z][a-z0-9_]{3,15}$ ]]; then
echo "Валидно име"
fi
ЧЕСТО ИЗПОЛЗВАНИ REGEX ШАБЛОНИ
Bash:
# URL
https?://[a-zA-Z0-9./?=_-]+
# Телефонен номер (БГ)
\+?359[ -]?[0-9]{1,3}[ -]?[0-9]{3}[ -]?[0-9]{3,4}
# Дата (DD/MM/YYYY)
(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/[0-9]{4}
# Парола (минимум 8 знака, главна, малка, цифра)
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d\W]{8,}$
🛡 СИГУРНОСТ И АУДИТ КОМАНДИ
АУДИТ НА ПОТРЕБИТЕЛИ И ПРАВА
Bash:
# Проверка за потребители с root права
grep -E ':0:' /etc/passwd
# Показване на всички потребители в sudo групата
getent group sudo | cut -d: -f4 | tr ',' '\n'
# Проверка на SUID/SGID файлове
find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \; 2>/dev/null
# Аудит на файлове без собственик
find / -nouser -o -nogroup 2>/dev/null
# Проверка на права за .ssh директории
find /home -name ".ssh" -type d -exec ls -ld {} \;
Bash:
# Проверка за отворени портове
sudo netstat -tulpn
# или
sudo ss -tulpn
# Проследяване на мрежови връзки в реално време
sudo tcpdump -i any -n
# Проверка за неоторизирани cron задачи
sudo cat /etc/crontab
ls -la /etc/cron.*/
ls -la /var/spool/cron/
# Аудит на login активности
last -a
sudo cat /var/log/auth.log | grep -i "failed\|accepted"
ИНСТРУМЕНТИ ЗА АНАЛИЗ
Bash:
# Lynis - Системен аудит
sudo lynis audit system
# Chkrootkit - Проверка за rootkits
sudo chkrootkit
# Rkhunter - Търсене на зловреден софтувер
sudo rkhunter --check
# ClamAV - Антивирусен скенер
sudo freshclam # Обновяване на базата
sudo clamscan -r /home
РЕАКТИВНИ КОМАНДИ ПРИ ИНЦИДЕНТ
Bash:
# Запазване на текущи процеси
ps aux > /tmp/processes_$(date +%s).txt
netstat -tulpn > /tmp/network_$(date +%s).txt
# Проверка за скрити процеси
ls -la /proc/*/exe 2>/dev/null | grep deleted
# Анализ на логове за подозрителни дейности
sudo journalctl -xe --since "1 hour ago"
sudo grep -i "error\|fail\|denied\|attack" /var/log/*.log
МОНИТОРИНГ И DEBUGGING ИНСТРУМЕНТИ
🖥 РЕАЛЕН ТИМ МОНИТОРИНГ
Bash:
# htop - Разширен процес монитор
sudo apt install htop
htop
# glances - Всестранен мониторинг
sudo apt install glances
glances
# nmon - Мониторинг за системата
sudo apt install nmon
nmon
# btop - Модерен монитор с графики
sudo apt install btop
btop
СИСТЕМНА ДИАГНОСТИКА
Bash:
# iotop - Мониторинг на дисков I/O
sudo iotop -o
# iftop - Мониторинг на мрежов трафик
sudo iftop -i eth0
# dstat - Комбинирана статистика
dstat -cdngy
# vmstat - Виртуална памет и процеси
vmstat 2 10 # 10 отчета на всеки 2 секунди
DEBUGGING И ПРОСЛЕДЯВАНЕ
Bash:
# strace - Проследяване на системни извиквания
strace -f -e trace=file ls -la
strace -p <PID> # Проследяване на конкретен процес
# ltrace - Проследяване на библиотечни извиквания
ltrace ls -la
# gdb - GNU Debugger за C/C++ програми
gdb ./myprogram
# Основни команди в gdb:
# break main # Точка на прекъсване
# run # Стартиране
# backtrace # Стек на извикванията
# print variable # Извеждане на стойност
# quit # Изход
# valgrind - Проверка за memory leaks
valgrind --leak-check=full ./myprogram
ПРОФИЛИРАНЕ НА ПРОДУКТИВНОСТ
Bash:
# time - Измерване на време за изпълнение
time ./my_script.sh
# Резултат: real (общо), user (CPU), sys (ядро)
# perf - Linux Performance Counters
perf stat ./myprogram # Обща статистика
perf record ./myprogram # Записване на данни
perf report # Анализ на записа
# pidstat - Статистика по процеси
pidstat -urd -p <PID> 2 5 # 5 отчета на 2 секунди
ПРИЛОЖЕНИ СКРИПТОВЕ ЗА МОНИТОРИНГ
Bash:
#!/bin/bash
# system_health_check.sh
LOGFILE="/var/log/system_health_$(date +%Y%m%d).log"
echo "=== Системен Health Check $(date) ===" | tee -a "$LOGFILE"
echo "" | tee -a "$LOGFILE"
echo "1. 🔋 Зареждане на системата:" | tee -a "$LOGFILE"
uptime | tee -a "$LOGFILE"
echo "" | tee -a "$LOGFILE"
echo "2. 🧠 Употреба на памет:" | tee -a "$LOGFILE"
free -h | tee -a "$LOGFILE"
echo "" | tee -a "$LOGFILE"
echo "3. 💾 Дисково пространство:" | tee -a "$LOGFILE"
df -h | tee -a "$LOGFILE"
echo "" | tee -a "$LOGFILE"
echo "4. 🔥 Топ 5 процеса по CPU:" | tee -a "$LOGFILE"
ps aux --sort=-%cpu | head -6 | tee -a "$LOGFILE"
echo "" | tee -a "$LOGFILE"
echo "5. 🌐 Мрежови връзки:" | tee -a "$LOGFILE"
ss -tulpn | grep LISTEN | tee -a "$LOGFILE"
echo "=== Проверката завърши ===" | tee -a "$LOGFILE"
ПРАКТИЧЕСКИ УПРАЖНЕНИЯ
ЗАДАЧА 1: Създаване на автоматизиран бекъп скрипт
Bash:
#!/bin/bash
# auto_backup.sh
BACKUP_DIR="/backup/$(date +%Y%m%d_%H%M%S)"
SOURCES=("/var/www" "/etc" "/home/important")
RETENTION_DAYS=7
echo "📦 Стартиране на бекъп: $(date)"
mkdir -p "$BACKUP_DIR"
for source in "${SOURCES[@]}"; do
if [[ -e "$source" ]]; then
name=$(basename "$source")
echo " 📁 Архивирам: $source"
tar -czf "$BACKUP_DIR/${name}.tar.gz" "$source"
else
echo " ⚠ Пропускам: $source (не съществува)"
fi
done
echo "🧹 Почистване на стари бекъпове (> $RETENTION_DAYS дни)"
find /backup -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \;
echo "✅ Бекъп завършен: $BACKUP_DIR"
ЗАДАЧА 2: Мониторинг на логове за грешки
Bash:
#!/bin/bash
# log_monitor.sh
LOG_FILES=("/var/log/syslog" "/var/log/auth.log")
ALERT_EMAIL="admin@example.com"
KEYWORDS=("ERROR" "FAILED" "denied" "attack")
while true; do
for logfile in "${LOG_FILES[@]}"; do
for keyword in "${KEYWORDS[@]}"; do
if tail -n 50 "$logfile" | grep -q -i "$keyword"; then
echo "🚨 Намерена ключова дума '$keyword' в $logfile"
echo "Съдържание:" | mail -s "АЛАРМ: $keyword в $logfile" "$ALERT_EMAIL"
tail -n 10 "$logfile" | mail -s "Подробности" "$ALERT_EMAIL"
fi
done
done
sleep 60 # Проверка на всеки 60 секунди
done
РЕСУРСИ И ДОПЪЛНИТЕЛНИ ИНСТРУМЕНТИ
🛠 ИНСТАЛИРАНЕ НА ДОПЪЛНИТЕЛНИ ИНСТРУМЕНТИ
Bash:
# Сигурност и аудит
sudo apt install lynis chkrootkit rkhunter clamav
# Мониторинг
sudo apt install htop glances nmon btop iotop iftop dstat
# Debugging
sudo apt install strace ltrace gdb valgrind linux-tools-common
# Мрежови инструменти
sudo apt install nmap tcpdump wireshark netcat
ПРЕПОРЪЧИТЕЛНА ЛИТЕРАТУРА
- "Advanced Bash-Scripting Guide" - https://tldp.org/LDP/abs/html/
- "The Linux Command Line" - Уилям Шотс
- "Mastering Regular Expressions" - Джефри Фрийдъл
- "Linux Performance" - Брендан Грег
ОБУЧИТЕЛНИ ВИДЕО КАНАЛИ
- NetworkChuck (английски)
- The Linux Foundation (официални курсове)
- Български Linux общности във Facebook
⚠ ВАЖНИ ПРЕДУПРЕЖДЕНИЯ
- Тествайте върху виртуална машина преди употреба в production
- Винаги правете бекъп преди системни промени
- Разбирайте командите, които изпълнявате
- Използвайте man страниците: man grep, man regex
- Логовете са вашият приятел - проверявайте ги редовно
КАК ДА ПОМОГНЕМ НА ДРУГИ?
- Споделяйте своите скриптове и решения
- Пишете коментари в кода си
- Създавайте документация за вашите инструменти
- Участвайте в българските Linux общности
Създадено с
Last edited: