Как grep -q ускоряет поиск по большим файлам
Проверяем через strace, почему grep -q прекращает чтение большого файла после первого совпадения. Сравниваем системные вызовы, коды возврата и перенаправление вывода в /dev/null.
Фото: Luis Gomes / Pexels
← Все темы
Скрипты и практические примеры на Bash: автоматизация, администрирование Linux и DevOps-подходы к работе с инфраструктурой.
Проверяем через strace, почему grep -q прекращает чтение большого файла после первого совпадения. Сравниваем системные вызовы, коды возврата и перенаправление вывода в /dev/null.
Разбираемся, зачем скрипту нужен Shebang и что происходит при ошибке ENOEXEC. На примерах показываем, когда Bash способен самостоятельно выполнить файл без привычной строки интерпретатора.
Создаём массив двоичных чисел средствами brace expansion и переводим значения между системами счисления в Bash. Заодно разбираем границы intmax_t и целочисленное переполнение.
Используем printf для получения кодов символов в шестнадцатеричной, восьмеричной и десятичной системах. Проверяем влияние LC_ALL на UTF-8 и сохраняем форматированный результат в переменную.
Сравниваем команды rm и unlink в Linux: системные вызовы, обработку отсутствующих файлов, шаблоны и каталоги. Показываем, когда unlink удобнее для контроля ошибок в Bash-скриптах.
Создаём вложенную структуру каталогов одной командой mkdir с ключом -p и brace expansion. Сравниваем последовательность команд с компактным вариантом и проверяем запуск через strace.
Практическое сравнение setsid и nohup для запуска Bash-скриптов независимо от текущего терминала. Смотрим дерево процессов через pstree и разбираемся, когда создаётся новый сеанс.
Используем Bash trap с EXIT для автоматической очистки временных файлов при успешном завершении, ошибке и SIGTERM. Проверяем порядок системных вызовов через strace и разбираем работу ловушек сигналов.
Разбираем назначение разделителя -- в командах Linux и показываем его работу на примерах ssh, cat и rm. Учимся безопасно передавать имена файлов и аргументы, начинающиеся с дефиса.
Показываем, как отфильтровать строки одного текстового файла по списку из другого с помощью конструкции NR == FNR и массива awk. Разбираем работу NR, FNR и next, выбор столбцов и ограничение по памяти без обязательной …
Проверяем, определена ли переменная Bash, с помощью условного выражения -z и расширения параметра ${VAR+x}. Пошагово разбираем результаты, режим set -x, export и unset.
Продолжаем практику Bash-сопроцессов и принимаем почту по POP3 через openssl s_client. Реализуем команды STAT, DELE, RETR и TOP, затем собираем цикл обработки сообщений.
Bash — раздел BashDays, посвященный Bash, Shell scripting и работе в терминале Linux.
В разделе публикуются материалы по:
Здесь собраны практические примеры скриптов, приемов работы в терминале и способов автоматизации повседневных задач администратора.