Юнит-тесты Bash-скриптов с bashunit
Пишем первый юнит-тест для Bash-скрипта с фреймворком bashunit. Разбираем установку, assert_equals, успешный и проваленный прогон, а также другие доступные проверки.
Фото: Emre Karademir / PexelsЗдесь собраны все публикации блога Bashdays — заметки про Linux, DevOps и айтишные технологии.
Пишем первый юнит-тест для Bash-скрипта с фреймворком bashunit. Разбираем установку, assert_equals, успешный и проваленный прогон, а также другие доступные проверки.
Создаём всплывающую шпаргалку прямо в терминале без графической оболочки. Используем tput, read, trap и bind, чтобы показывать альтернативный экран по Ctrl+H и закрывать его после отпускания клавиши.
Настраиваем IOMMU и PCI passthrough в Proxmox для передачи физических устройств виртуальным машинам. Разбираем параметры GRUB, модули VFIO, изоляцию GPU и проброс диска по стабильному идентификатору.
Разбираем соответствие символьных, двоичных и восьмеричных прав доступа Linux. Показываем сложение битов rwx, генерацию комбинаций в Bash и просмотр режима файлов через stat.
Создаём зомби-процесс на C и Bash, находим его и родительский PID через ps и разбираем завершение процесса. Объясняем, почему kill по PID зомби не помогает и когда такие записи можно не трогать.
Используем встроенный хоткей Ctrl+X+E для редактирования многострочной команды в Vim, Nano или другом редакторе. Настраиваем переменную EDITOR и разбираем, как Bash выполняет сохранённый временный файл.
Используем strace с измерением времени системных вызовов, чтобы увидеть блокировку записи в Linux pipe. Разбираем сложную команду и находим скачок задержки после заполнения буфера объёмом 65536 байт.
Разбираем, как dd обновляет статистику через stderr и символ возврата каретки. Превращаем динамический прогресс в строки и пишем Bash-бенчмарк для сравнения скорости при разных размерах блока.
Настраиваем белый список команд для SSH-пользователя с помощью Bash-скрипта ONLY и директивы command в authorized_keys. Разбираем ключи, ограничения сессии и правила .onlyrules без выдачи интерактивной оболочки.
Настраиваем автоматическое монтирование NTFS-диска и запуск резервного копирования на сервере без GUI. Связываем правило udev, mount-юнит и systemd-сервис с выводом статуса на tty1.
Исследуем, почему ls отключает ANSI-цвета при передаче вывода через pipe. С помощью strace находим ENOTTY, подменяем результат ioctl и возвращаем управляющие последовательности опциями color=always и cat -v.
Практическая схема резервного копирования с защищённой СХД, внешними дисками и промежуточным сервером. Объясняем чередование носителей, локальные дневные копии и ротацию нумерованных архивов.