Мастер ремонтирует электронную платуФото: Bulat843 🌙 / Pexels
← Все подборки Маршрут Bashdays

Bash и автоматизация

Скрипты, однострочники, awk, cron, mapfile и практическая автоматизация рутины.

bashshellawkскриптскриптыcronоднострочникmapfile
126 материалов в подборке
О подборке

Все, что помогает писать понятные скрипты и автоматизировать рабочую рутину без лишней магии.

Сначала новые

Материалы маршрута

Материалов: 126

bash

Зачем командам двойное тире

Разбираем назначение разделителя -- в командах Linux и показываем его работу на примерах ssh, cat и rm. Учимся безопасно передавать имена файлов и аргументы, начинающиеся с дефиса.

bash

Как гарантированно удалять tmp-файлы через trap

Используем Bash trap с EXIT для автоматической очистки временных файлов при успешном завершении, ошибке и SIGTERM. Проверяем порядок системных вызовов через strace и разбираем работу ловушек сигналов.

bash

Как отвязать процесс от терминала через setsid

Практическое сравнение setsid и nohup для запуска Bash-скриптов независимо от текущего терминала. Смотрим дерево процессов через pstree и разбираемся, когда создаётся новый сеанс.

linux

Чем rm отличается от unlink

Сравниваем команды rm и unlink в Linux: системные вызовы, обработку отсутствующих файлов, шаблоны и каталоги. Показываем, когда unlink удобнее для контроля ошибок в Bash-скриптах.

bash

Защита от повторного запуска через lckdo

Используем lckdo из пакета moreutils, чтобы второй экземпляр скрипта не запускался одновременно с первым. Рассматриваем lock-файл, ожидание через -w и безопасный запуск периодической задачи cron.

bash

Многопоточное чтение файлов на Bash через FIFO

Практический Bash-скрипт для параллельной обработки строк файла с ограничением числа потоков через FIFO. Разбираем именованный канал, файловый дескриптор и простой семафор без GNU parallel.

bash

Приём почты по POP3 в Bash через coproc

Продолжаем практику Bash-сопроцессов и принимаем почту по POP3 через openssl s_client. Реализуем команды STAT, DELE, RETR и TOP, затем собираем цикл обработки сообщений.

bash

Проверка переменной в Bash через -z

Проверяем, определена ли переменная Bash, с помощью условного выражения -z и расширения параметра ${VAR+x}. Пошагово разбираем результаты, режим set -x, export и unset.

games

Три игры для изучения командной строки Linux

Три игровых тренажёра для изучения командной строки Linux: BashCrawl, Terminus и CL Mystery. Они помогают практиковать навигацию, команды и логику в формате текстовых приключений и детективных квестов.

linux

Фильтрация файлов через awk без сортировки

Показываем, как отфильтровать строки одного текстового файла по списку из другого с помощью конструкции NR == FNR и массива awk. Разбираем работу NR, FNR и next, выбор столбцов и ограничение по памяти без обязательной …

bash

Измерение времени Bash-скриптов через EPOCHREALTIME

Функция uTIME измеряет интервалы выполнения Bash-кода в микросекундах с помощью EPOCHREALTIME. Сравниваем функции в текущей оболочке и subshell, а также преобразование даты через printf и внешнюю команду date.

bash

Как base64 игнорирует посторонние символы

Разбираем ключ -i в GNU base64, который пропускает символы вне алфавита кодирования. Примеры показывают, как декодировать изменённые строки и почему такое сокрытие данных нельзя считать настоящим шифрованием.

bash

Как отвязать запущенный процесс от терминала

Спасаем долгий процесс, случайно запущенный без nohup или screen. Комбинация Ctrl+Z и команды bg, disown и fg позволяют остановить задачу, продолжить её в фоне и отвязать от текущей оболочки.

linux

Логирование cron-задач и ротация логов

Показываем, как сохранить стандартный вывод cron-задачи в отдельный файл и настроить его ротацию через logrotate. Такой журнал помогает увидеть внутренние ошибки приложения, которые не попадают в системный лог cron.

bash

Тернарный оператор Bash и его ловушки

Исследуем тернарный оператор Bash внутри арифметической подсистемы и сравниваем его с классической связкой && и ||. Пример показывает работу восьмеричных значений, вычисление обеих ветвей и неочевидные ошибки сравнения.

bash

Fallthrough в операторе case Bash

Разбираем завершители блоков ;;, ;& и ;;& в операторе case Bash. На практических примерах показываем обычное завершение ветки, fallthrough и повторную проверку следующих шаблонов.

bash

IP-watchdog на Bash для перезагрузки роутера

Пишем Bash-watchdog, который проверяет доступность интернета и наращивает интервалы попыток восстановления связи. Для физической перезагрузки роутера подключаем недорогое USB-реле и управляем им через последовательный порт.

linux

Как запускать долгие скрипты в screen

Разбираем запуск долгих задач в именованных screen-сессиях, подключение через -r и -x и корректное отсоединение сочетанием Ctrl+A, d. Показываем фоновый запуск, передачу команд в сессию и организацию логирования.

bash

Как кэшировать управляющие последовательности tput

Разбираемся, почему многократные вызовы tput замедляют Bash-скрипт, и один раз сохраняем управляющие последовательности терминала в переменные. Показываем печать, экранирование и практические однострочники.

linux

Как переназначить Ctrl+C в Linux

Смотрим текущие настройки терминала через stty -a и меняем символ прерывания процесса с Ctrl+C на другое сочетание клавиш. Разбираем возврат настройки, запись в shell-конфиг и альтернативу через xbindkeys.

bash

Как рендерить шаблоны в Bash через envsubst

Создаём шаблон конфигурации nginx и подставляем разные значения для production и stage через envsubst. Сравниваем функцию рендеринга с heredoc и разбираем передачу переменных окружения.

bash

Лишний cat и другие Bash-антипаттерны

Разбираем распространённые Bash-антипаттерны из учебных скриптов: лишний cat перед cut, grep и tr, а также небезопасный перебор файлов через ls. Показываем более прямые и устойчивые варианты команд.

networks

Как безопасно переконфигурировать сеть по SSH

Сценарий отката сетевой конфигурации удалённого Linux-сервера без IPMI и локального администратора. Резервная копия /etc, задание cron после перезагрузки и проверка успешного входа по SSH.

bash

Как временно отключить alias в Bash

Пять способов запустить исходную команду в Bash, не удаляя alias из конфигурации оболочки. Показываем экранирование, кавычки, полный путь, command и unalias с восстановлением настроек.

bash

Как повторять символы в Bash

Несколько способов вывести повторяющуюся строку в Bash: собственная функция repeat, seq, printf и tr. Разбираем параметры функции, двойное тире printf и компактные однострочные команды.

bash

Как считывать функциональные клавиши в Bash

Разбираем обработку стрелок, Home, End и F1–F12 в интерактивном Bash-скрипте. Функция GET_KEY переводит многобайтные управляющие последовательности терминала в hexadecimal-коды.

bash

Восстановление правил iptables после запуска Docker

Пишем Bash-скрипт, который проверяет цепочку DOCKER-USER и восстанавливает правила iptables после изменений Docker. Добавляем список разрешённых IP и безопасный запуск проверки через cron.

bash

Как временно сменить каталог в Bash

Три способа выполнить команду в другом каталоге и вернуться обратно: subshell, pushd/popd и cd -. На наглядных примерах сравниваем поведение рабочего каталога Bash.

bash

Таймеры и сопроцессы в Bash без sleep

Экспериментируем с coproc, массивом COPROC и тайм-аутом команды read. На примерах разбираем обмен через файловые дескрипторы и ограничения такого таймера.

bash

Зачем нужна команда enable в Bash

Разбираем встроенную команду enable в Bash: отключаем shell builtin, переключаемся на дисковую утилиту и загружаем расширения оболочки. Показываем работу с test, mkdir и BASH_LOADABLES_PATH.

linux

Как настроить zram и отключить zswap

Отключаем zswap через параметры GRUB и настраиваем сжатие оперативной памяти с помощью zram. Показываем Bash-скрипт и конфигурацию systemd-zram-generator с алгоритмом lz4.

bash

Как проверить доступ к Git-репозиторию в Bash

Проверяем существование удалённого Git-репозитория и доступ к нему через git ls-remote. Пишем Bash-скрипты для HTTPS и SSH, отключаем интерактивные запросы и возвращаем понятные коды ошибок.

bash

Как работает RANDOM в Bash

Исследуем генератор псевдослучайных чисел RANDOM в Bash на примере безопасной русской рулетки. Разбираем seed, влияние BASH_COMPAT и различия поведения между версиями оболочки.

linux

Как установить сертификаты Минцифры в Ubuntu

Устанавливаем корневой и подчинённый сертификаты Минцифры в Ubuntu одной shell-командой. Проверяем subject, SHA-1 fingerprint и цепочку OpenSSL, обновляем системное хранилище CA и тестируем HTTPS через curl.

networks

Контроль новых IP и MAC через csh и awk

Контролируем появление новых связок IP и MAC в сетях DMZ и LAN на OPNsense. Скрипты csh и awk сравнивают ARP-таблицу со справочником и отправляют уведомление в Telegram без раскрытия инфраструктуры.

bash

Перезапуск сервиса по длине очереди RabbitMQ

Пишем Bash-скрипт, который проверяет длину очереди RabbitMQ по SSH и перезапускает зависший микросервис при накоплении писем. Разбираем cron, rabbitmqctl, awk и запуск команд от отдельного пользователя.

bash

Подключение к бастиону по хоткею Alt+B

Привязываем SSH-подключение к bastion-серверу к комбинации Alt+B в Bash через функцию и bind -x. Также разбираем псевдотерминал, reset и вариант конфигурации для Zsh.

bash

Чем export отличается от переменной Bash

Показываем разницу между обычной переменной Bash и переменной окружения, объявленной через export. Проверяем наследование в подпроцессах и разбираем обходной способ передачи массивов через строку.

security

Белый список команд SSH через ONLY

Настраиваем белый список команд для SSH-пользователя с помощью Bash-скрипта ONLY и директивы command в authorized_keys. Разбираем ключи, ограничения сессии и правила .onlyrules без выдачи интерактивной оболочки.

bash

Как dd обновляет прогресс в одной строке

Разбираем, как dd обновляет статистику через stderr и символ возврата каретки. Превращаем динамический прогресс в строки и пишем Bash-бенчмарк для сравнения скорости при разных размерах блока.

bash

Как редактировать команды через Ctrl+X+E

Используем встроенный хоткей Ctrl+X+E для редактирования многострочной команды в Vim, Nano или другом редакторе. Настраиваем переменную EDITOR и разбираем, как Bash выполняет сохранённый временный файл.

linux

Как создать и завершить зомби-процесс в Linux

Создаём зомби-процесс на C и Bash, находим его и родительский PID через ps и разбираем завершение процесса. Объясняем, почему kill по PID зомби не помогает и когда такие записи можно не трогать.

bash

Терминальная шпаргалка по хоткею в Bash

Создаём всплывающую шпаргалку прямо в терминале без графической оболочки. Используем tput, read, trap и bind, чтобы показывать альтернативный экран по Ctrl+H и закрывать его после отпускания клавиши.

bash

Юнит-тесты Bash-скриптов с bashunit

Пишем первый юнит-тест для Bash-скрипта с фреймворком bashunit. Разбираем установку, assert_equals, успешный и проваленный прогон, а также другие доступные проверки.

linux

Systemd-таймеры против cron

Сравниваем systemd timers и cron на практическом примере: создаём service и timer, запускаем задачу каждую минуту и включаем автозагрузку. Разбираемся, когда гибкость таймеров оправдана, а когда сотни unit-файлов только усложняют …

bash

Анимация выполнения команд на Bash

Bash-скрипт запускает долгую команду в фоне и показывает текстовую анимацию до её завершения. Разбираем временный лог, trap, tput, сигналы, PID процесса и очистку терминального вывода.

bash

Аргументы скрипта в Bash

На примерах сравниваем специальные переменные $@ и $* в Bash с кавычками и без них. Показываем разбиение аргументов с пробелами, объединение в одну строку и влияние разделителя IFS.

security

Детерминированные пароли с pwgen

Генерируем повторяемые пароли через pwgen по логину, ключевому файлу и запоминаемому модификатору. Bash-обёртка скрывает ввод, проверяет зависимости и позволяет получать тот же набор паролей без их хранения.

bash

Как проверить каталоги в PATH одной командой

Разбираем Bash-команду, которая проверяет каждый элемент PATH и выводит отсутствующие или недоступные каталоги. Пошагово объясняем set -f, IFS, проверку переменной, права доступа и диагностику путей через namei.

bash

TCP и UDP-запросы через /dev в Bash

Проверяем TCP- и UDP-порты средствами Bash через /dev/tcp и /dev/udp, когда в системе нет curl, wget или telnet. Добавляем timeout, читаем код возврата и сравниваем подход с netcat.

bash

Временные метки в истории Bash и Zsh

Добавляем дату и время к истории команд в Bash через HISTTIMEFORMAT и настраиваем цветные метки. Сравниваем history -E, history -i и fc в Zsh и сохраняем удобные настройки оболочки.

linux

Как изолировать SSH-пользователя через chroot

Создаём ограниченное окружение chroot для SSH-пользователя в Linux. Копируем Bash и зависимости через ldd, настраиваем ChrootDirectory и по одной добавляем разрешённые утилиты.

bash

Как ограничить время выполнения команды в Linux

Разбираем утилиту timeout для ограничения времени работы команд и скриптов в Linux. Показываем длительности, сигналы завершения, удалённый запуск через SSH и вариант на чистом Bash.

bash

Как отправлять файлы с сервера в Telegram

Пишем Bash-скрипт, который архивирует файлы на сервере, отправляет tar.gz через Telegram Bot API и удаляет временный архив. Разбираем chat_id, bot_token, curl, подписи и ограничение размера.

bash

Генератор TOTP-кодов на Bash

Собираем локальный генератор TOTP-кодов для двухфакторной аутентификации на Bash. Извлекаем секрет из QR-кода через zbarimg, генерируем OTP с oathtool и делаем меню для нескольких сервисов.

bash

Как Bash обрабатывает сигналы

Объясняем коды завершения после SIGINT и SIGTERM и настраиваем обработчики сигналов через trap в Bash. Разбираем, почему получается код 130, как изменить поведение скрипта и почему SIGKILL нельзя перехватить.

linux

Как найти шрифты с кириллицей в Linux

Ищем Linux-шрифты с кириллическими глифами через fc-list и сопоставляем их со шрифтами ImageMagick. Затем Bash-скрипт генерирует образцы русской буквы «А» для каждого найденного файла.

linux

Как устроена справочная система man

Разбираем разделы справочной системы man: команды, системные вызовы, форматы файлов, административные утилиты и функции ядра. Показываем поиск через man -k, страницы intro и вывод справки в HTML.

linux

Какая оболочка быстрее Bash или Zsh

Сравниваем скорость запуска Bash и Zsh вручную и с помощью shellbench. Заодно разбираем плагины Oh My Zsh, автодополнение и место Dash среди быстрых POSIX-оболочек.

bash

Консольный справочник по тегам на Bash

Разбираем Bash-скрипт spr.sh — консольный справочник для поиска записей и фрагментов кода по нескольким тегам. Конфигурация хранится в текстовом файле, а фильтрация реализована однострочником awk.

bash

Почему Bash-цикл зависает после grep -m1

Исследуем бесконечный Bash-цикл, канал до grep -m1 и незаметный SIGPIPE. Смотрим коды сигналов, процессы подоболочки и способы корректно остановить cat после закрытия конвейера.

services

Basic Auth в Nginx через Lua и MySQL

Реализуем расширенную Basic Auth-аутентификацию в Nginx с помощью Lua и базы MySQL. Скрипт OpenResty читает заголовок Authorization, хеширует пароль, проверяет пользователя и передаёт запрос в защищённый location.

security

Безопасное меню команд через SSH

Ограничиваем SSH-пользователя интерактивным меню разрешённых административных команд. Bash-скрипт, ForceCommand и точечное правило sudoers дают перезапускать сервисы без полноценного доступа к серверу.

bash

Интерактивный проброс портов через SSH

Bash-скрипт для интерактивного проброса TCP-портов через SSH jump-сервер. Готовое меню помогает подключаться к службам во внутренних сетях, не меняя конфигурацию вручную.

bash

Как использовать heredoc в Bash

Разбираем heredoc в Bash на практических примерах с cat, sed, перенаправлением в файл и удалённым запуском команд по SSH. Показываю, как управлять подстановкой переменных и отступами.

linux

Как отслеживать изменения в /etc с etckeeper

Etckeeper превращает каталог /etc в Git-репозиторий и помогает отслеживать, фиксировать и откатывать изменения конфигурации Linux. Разбираем установку, удалённый репозиторий, коммиты и автоматизацию через incron.

bash

Стеганография в правах доступа Linux

Прячем ASCII-сообщение в девяти битах прав доступа Linux-файлов. На Bash разбираем сдвиги битов, восьмеричные режимы chmod и кодирование текста последовательностью файлов.

bash

Временная почта из консоли с tmpmail

Устанавливаем Bash-утилиту tmpmail и создаём одноразовый почтовый адрес прямо в терминале. Показываем генерацию адресов, выбор домена, просмотр входящих писем и получение последнего сообщения в текстовом виде.

bash

Диалоговые окна в Bash с whiptail

Добавляем в Bash-скрипты терминальные окна yes/no, поля ввода, меню и прогресс-бар с помощью whiptail. На готовых примерах разбираем коды возврата и перенаправление файловых дескрипторов.

debug

Как найти зависание PHP-FPM с помощью strace

Практический разбор зависания PHP-FPM и ошибки 502 Bad Gateway с помощью strace и lsof. По файловому дескриптору находим недоступный Elasticsearch, из-за которого воркер перестаёт обрабатывать запросы.

bash

Как очистить конфиг от комментариев на Bash

Пишем небольшой Bash-парсер, который превращает большой php.ini в компактный шаблон без комментариев и пустых строк. Разбираем чтение файла построчно, continue и регулярные выражения в конструкции [[ =~ ]].

bash

Какие циклы Bash работают быстрее

Сравниваем время инициализации и выполнения разных вариантов for и while в Bash, а также цикла gawk. Тест на пяти миллионах итераций показывает влияние генерации списка, расхода памяти и содержимого тела цикла.

bash

Коды завершения команд в Bash

Разбираем коды завершения Linux-команд от 0 до 255 и специальную переменную $?. Учимся сохранять статус, строить обработку ошибок и завершать Bash-скрипт нужным кодом через exit.

bash

База данных на Bash

Строим простой индекс для большого отсортированного текстового файла с помощью ассоциативного массива Bash и sed. Ограничиваем поиск диапазоном строк по первой букве и ускоряем извлечение данных без тяжёлой СУБД.

devops

Как Docker генерирует имена контейнеров

Разбираемся, откуда берутся случайные имена Docker-контейнеров и как устроен генератор Moby с пасхалкой для Стива Возняка. В конце собираем похожий генератор на Bash и рассматриваем готовые альтернативы.

linux

Как восстановить удалённый лог через файловый дескриптор

Воспроизводим ситуацию, когда процесс продолжает писать в удалённый лог через открытый файловый дескриптор. Восстанавливаем содержимое через /proc, а затем с помощью GDB переключаем работающий процесс на новый файл без …

bash

Как запускать команды параллельно в Bash

Запускаем фоновые команды в Bash через оператор &, управляем заданиями с помощью wait и jobs и получаем PID через $!. Собираем параллельный загрузчик файлов и сравниваем нативный подход с GNU Parallel.

bash

Как передавать события сигналами реального времени в Bash

Строим взаимодействие между Bash-процессами через сигналы SIGRTMIN и trap без временных файлов. Пишем сервер-слушатель и клиент, разделяем события по индексам сигналов и разбираем порядок обработки и приоритеты.

bash

Как передавать файлы через transfer.sh

Автоматизируем передачу файлов с сервера скриптом на Bash: проверяем размер, упаковываем крупные данные, загружаем их через curl в transfer.sh и получаем ссылку. Отдельно обсуждаем лимиты сервиса и безопасность.

bash

Как работает eval в Bash

Разбираем двойную обработку команд в Bash через eval на примерах brace expansion, косвенного раскрытия переменных и файловых дескрипторов. Показываем, почему перенаправление с переменной требует ещё одного прохода интерпретатора.

linux

Как работают нулевые байты в Linux

Экспериментируем с /dev/zero, поведением read и нулевым символом в C-строках. Затем находим смещение строки через strings и точечно патчим бинарный файл одним нулевым байтом с помощью dd.

bash

Как ускорить find с exec и xargs

Разбираем разницу между суффиксами ; и + у find -exec, сокращаем число запускаемых процессов и подключаем xargs для параллельной обработки файлов. Практические команды помогают ускорить поиск и безопасно передавать группы …

linux

Типы оболочек в Linux

Разбираем interactive, non-interactive, login, non-login, restricted и другие типы оболочек Linux. Смотрим, какие файлы профиля они читают, почему скрипт работает вручную, но ломается в cron, и как определить текущий режим.

qa

Сколько стоит фреймворк автоматизации #1

Однажды я вручную гонял регресс 5 недель. Больше я так не хочу. Я построил фреймворк, который за 30 минут прогоняет то, на что раньше уходил месяц. Но главное — на этапе проектировки запросов мы нашли столько дефектов в SOAP API, …

bash

Почему лишние условия убивают читаемость в Bash

Мне за 30, я видел много скриптов с дьявольскими отрицаниями, и каждый раз хотелось задушить автора. Поэтому я решил написать пост, в котором покажу как превратить кошмарную конструкцию в простой if-else без единого лишнего знака. …

dev

Как я скрестил WinSCP, Puttygen и CMD на старой винде

Часто слышу, что автоматизировать sftp на Windows XP‑10 невозможно без кучи сторонних утилит. На деле всё проще. Я разобрался, как затащить sftp с ключами на такие системы. Самое смешное — WinSCP пришлось настроить так, чтобы он …

devops

Как перейти с Docker на Podman

Вместе с Романом Шубиным, СТО и автором канала Bash Days, собрали отдельный мини-курс по Podman. Внутри — восемь материалов, которые помогут освоить инструмент с открытым исходным кодом для работы с контейнерами.

dev

Hugo за 30 секунд. Мой пайплайн на Gitea Actions

Мне надоело кормить корпоративных монстров своими данными и ждать пока их джава-скрипты прогрузятся. Gitea встала на мой дохлый сервер как родная и начала летать даже с кривым конфигом. Ты получишь тот же функционал но без слежки …

bash

Awk для новичков. Как автоматизировать анализ логов

Я знаю, что сейчас все гонятся за JSON, и это удобно для новичков. Но когда речь заходит о реальной работе с большими логами, я всегда возвращаюсь к awk. Мой опыт показывает, что для быстрых фильтров и обработки огромных объемов …

games

Браузерный киберпанк-симулятор хакера — DeepNet

Забудьте про графику, в DeepNet всё построено на терминале и командах Bash. Игра очень атмосферная, с онлайн-миром и кучей возможностей для прокачки. Я залип на ней надолго, советую всем, кто любит подобные симуляторы.

bash

15 функций Bash, которые стоит добавить в .bashrc

Если ты часто работаешь в командной строке, тебе точно пригодится подборка моих bash-функций для .bashrc. Они делают рутинные задачи намного удобнее и быстрее. Зацени и добавь себе.

security

Настройка Yubikey + WSL2 + SSH

Как подключить физический YubiKey к WSL2, чтобы использовать его для SSH без паролей и SMS. Разберёмся с проблемами прокидывания USB в WSL и сделаем автоматический скрипт, который решит баги с повторным подключением ключа.

bash

Капча под контролем или как нажать F24

Я придумал хитрую капчу и покажу как с помощью xdotool ее можно эффективно обойти. Роботы же начинают троить, кейс отлично подходит под нишевые проекты с защитой от дурака.

soft

Терминальный браузер нового поколения

Если любишь терминал и хочешь попробовать что-то новое, Brow6el для тебя. Сборка не из пакетов, но есть скрипты. Браузер поддерживает графику, скрипты и все современные фишки.

devops

Туалетная бумага по cron’у

Каждый месяц я забывал заказать туалетную бумагу, пока не написал Bash-скрипт, который делает это за меня. В этом посте расскажу, как с реверсом API и cron’ом автоматизировал рутину.

games

Легендарная Star Trek 1971 года на Bash

Вот что бывает, когда классика встречается с современным Bash! Bash Trek — это пошаговая стратегия из 70-х, ожившая в терминале. Готовься к тактическим баталиям и ностальгии.

bash

Читаем файл построчно в Bash

Забудь про бесконечные циклы для чтения файлов в Bash! Показываю, как работать с mapfile, зачем нужен строгий режим и как избежать типичных ошибок в скриптах.

services

Визуальный сервис для разбора Bash/Shell команд

Рассмотрим сервис в виде веб-сервиса, который помогает понять, что делает та или иная shell-команда в Unix/Linux. Проще говоря, ты вставляешь команду, а оно разбирает её и объясняет фрагмент за фрагментом, что означает каждая …

networks

Telnet для сетевых инженеров. Автоматизация и обход логина

Если тебе надо быстро подключиться к сетевому устройству и выполнять команды — этот пост для тебя. Поделюсь рабочими скриптами для Telnet с и без логина, а также лайфхаками по парсингу ответов.

linux

CRON в первый рабочий день месяца

Сегодня будет обучать cron понимать рабочие и выходные дни. Из коробки этот функционал не работает, да и systemd тут не особо поможет. Так что, придется изобретать очередную кишку.

soft

Выводим красивые нотификации средствами Bash

Давно хотел реализовать функцию на Bash, чтобы красиво выводить какие-то значимые уведомления в терминал по типу как это сделано в npm. Обычное echo уже не возбуждает, ничего не поделаешь. Да и всякие Gum тоже ставить не хочется.

bash

Подводные камни в Bash №9

Команда if [ bar = "$foo" ]; проверяет, равны ли два значения. Тут самое важно это — пробелы, про кавычки повторять не буду, ты это уже и так знаешь. Все уши прожужал.

bash

Подводные камни в Bash №8

В Bash конструкция [ ... ] — не часть синтаксиса if, а отдельная команда, аналогичная test. Разбираем, как на самом деле выполняются условия и почему это важно для скриптов.

bash

Подводные камни в Bash №7

Он считает, сколько строк в файле bar.txt содержат слово foo. Здесь главная проблема — переменная count не изменится вне цикла while, потому что в Bash каждая команда в пайплайне (|) запускается в отдельной оболочке (subshell). То …

bash

Подводные камни в Bash №6

Конструкция [[ ... ]] в Bash предназначена для проверки условий, но не для арифметики. Разбираем ошибочное сравнение и правильное применение (( ... )) для чисел.

bash

Подводные камни в Bash №5

Представь две коробки с созвучными подписями. Разбираемся, как Bash интерпретирует строки и почему одинаково выглядящие условия могут давать неожиданный результат.

bash

Подводные камни в Bash №3

Когда в Bash сравниваешь две переменные, важно не про***ться с кавычками. Разбираем, что произойдёт, если переменная $foo окажется пустой.

bash

Подводные камни в Bash №4

Это ошибочный вариант, бэд мать его практика. Команда cd $(dirname "$f") должна вернуть путь к папке, где лежит файл.

bash

Подводные камни в Bash №2

Продолжаем погружаться в Бэд-Практики! В прошлом посте мы рассмотрели файлы, которые начинаются с дефиса и то, что команда cp их может воспринимать как флаг. Ну дак вот. Предыдущие посты про Бэд-Практики ищи по тегу pitfalls Как …

bash

Подводные камни в Bash №1

Вот всё трём мы с тобой за бест-практики, но практически ничего не разбираем по бэд-практикам. Давай это исправлять в контексте Bash скриптов.

bash

И на старуху бывает проруха

Сегодня решил поделиться отрицательным опытом. Код, приведенный в статье лучше не использовать. У меня возникла необходимость распарсить файл типа: