ServerAdmin.ru
31.6K subscribers
851 photos
57 videos
23 files
3K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru

Ресурс включён в перечень Роскомнадзора
Download Telegram
Покажу небольшой bash трюк, который поможет грепнуть информацию, когда обычный способ не работает. Демонстрирую сразу на примере, с которым сам постоянно сталкиваюсь.

Вам нужно узнать, есть ли необходимый модуль в составе Nginx. По идее всё просто:

# nginx -V

На выходе портянка, в которой глазами трудно что-то найти. Пробуем грепнуть:

# nginx -V | grep http_realip_module

Вообще ноль изменений. И причины тут на самом деле не одна, а сразу две:

1️⃣ nginx -V выводит информацию не в стандартный поток с данными stdout, с которым работает grep и прочие консольные утилиты, а в stderr;

2️⃣ все модули перечислены одной строкой, так что грепнуть её содержимое не получится.

Показываю решение обоих проблем:

# nginx -V 2>&1 | tr ' ' '\n' | grep http_realip_module
--with-http_realip_module

Видим нужный нам модуль. Я сначала через 2>&1 направил поток stderr в stdout, чтобы с ним можно было работать консольными утилитами, а затем с помощью tr заменил все пробелы символами перехода на новую строку \n. В итоге у нас весь вывод nginx -V разбился на отдельные фразы, каждая в новой строке и после этого успешно грепнулся.

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

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#bash
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍244👎2
Искал на днях материалы на тему Playwright. Это фреймворк для веб тестирования и автоматизации, более современный аналог Selenium. Последний я немного учил, но он довольно замороченный, с полтычка не освоишь. Playwright показался немного попроще в каких-то базовых вещах.

Рассказать сегодня хотел не об этом. Я попал на сайт к какому-то девопсу, где были материалы по Playwright. Я немного походил по нему и набрёл на раздел DevTools. Он там собрал то ли свои, то ли просто open source инструменты для решения простых прикладных задач. Вроде ничего особенного, но некоторые вещи я просто не знал, что вообще существуют. Всегда их делал вручную.

Покажу сразу на примерах, что мне показалось полезным:

- Docker Run to Docker Compose Converter
Отправляем в форму однострочник с docker run и получаем файл для docker compose. Вроде мелочь, но я всегда это делал вручную. Не думал, что кому-то придёт в голову написать конвертер.

- Docker Compose to Docker Run Converter
И соответственно в обратную сторону преобразование из docker compose в однострочник для docker run. Не припоминаю, чтобы мне приходилось такие преобразования делать, но в тему к первому упоминаю.

- Bash Command Formatter
Эта штука тоже очень понравилась. Она длинный однострочник разбивает на строки с переходами через \ То есть вот такую колбасу:

curl -v --url "smtp://mail.server.ru:25" --mail-from "root@server.ru" --mail-rcpt "user@gmail.com" --user 'root@server.ru:password123' --upload-file ~/mail.txt

Нарезает на кусочки:

curl -v \
 --url "smtp://mail.server.ru:25" \
 --mail-from "root@server.ru" \
 --mail-rcpt "user@gmail.com" \
 --user 'root@server.ru:password123' \
 --upload-file ~/mail.txt

Я тоже всегда это вручную делал, особенно для публикации сюда. Можно упростить себе задачу.

- URL Extractor
Просто кидаешь сюда любой текст, а на выходе получаешь набор ссылок, если они в нём присутствуют.

Там много всяких конвертеров и анализаторов синтаксиса для json, yaml, toml, csv. Не стал обращать на них внимание, так как их существует десятки. Обычно просто в гугле ищут что-то подобное, когда надо преобразовать. Посмотрите список, может вам что-то ещё приглянётся. Меня впечатлили только эти четыре штуки.

#devops #docker #bash
👍111👎2
Существует удобный и функциональный инструмент для добавления интерактива в shell скрипты под названием Gum. Я посмотрел несколько примеров, в том числе на ютубе, как люди решают те или иные задачи с его помощью. Синтаксис очень простой, особо разбираться не надо. Можно сходу брать и писать скрипт.

Я для примера решил сделать поиск по директории с выводом топ 10 самых больших файлов, из которых можно какие-то выбрать и удалить. Сделал просто в лоб на bash – сформировал список, отправил его в gum и добавил действие для выбранных файлов:

#!/bin/bash

DIR="/tmp/backup"
files=$(find "$DIR" -type f -exec du -b {} + 2>/dev/null | sort -nr | head -n 10 | awk '{print $2}')
selected=$(echo "$files" | gum choose --no-limit)
delete=$(echo -e "$selected")

if [[ -z "$delete" ]]; then
echo "Ничего не выбрано."
exit 0
fi

gum confirm "Удалить выбранные файлы?" &&
echo "$delete" | xargs -d '\n' rm -f && echo "Выбранное удалено."


Понял, что всё получилось и решил как-то это усложнить и сделать более удобным. Дай, думаю, попрошу Chatgpt что-то написать. На самом деле не рассчитывал на успех, так как это не особо популярный инструмент. Откуда ему взять навык написания скриптов для gum? Вряд ли их много в интернете можно найти.

Отправил ему адрес репозитория и попросил сделать 2 списка: один с самыми большими файлами, второй – с самыми старыми. Причём вывести их вместе на один экран, в списках отобразить размер файлов и их даты.

Задача не сильно сложная, но немного муторная, так как списки надо правильно сформировать, объединить, пункты выбора насытить дополнительной информацией в виде размера файлов и даты. Потом всё это надо очистить, чтобы передать на удаление только имя файла. Чтобы самому это сделать, надо потратить какое-то время.

Chatgpt меня удивил, когда практически сразу же выдал рабочее решение. Там были ошибки по части bash. Нужно было что-то экранировать, а что-то получше очистить. А вот в части непосредственно Gum он на удивление сразу же всё корректно оформил в соответствии с его возможностями. Я думал, что-то выдумает от себя нерабочее, но нет.

В итоге минут за 15-20 со всеми тестами я получил рабочий вариант скрипта. Реально, был очень удивлён. Не так давно его мучал конфигурациями Nginx, по которым море примеров в сети, но так и не добился того, что хотел. А тут какой-то Gum и сразу всё заработало.

☝️ Какое в итоге резюме. Gum – прикольная штука, которую можно приспособить под какие-то свои задачи. Например, выбор подключений по SSH, работа с ветками GIT, работа со списками файлов и т.д. Тут уж каждому своё. А второй момент – используйте ИИ для своих задач. Где-то он мимо советует, а где-то сразу рабочий вариант даёт. Причём в таких небольших прикладных задачах он нормально работает. На bash пишет уверенно. Есть проблемы, но поправить после него намного проще, чем написать самому, вспомнив все возможности и ключи консольных утилит.

Итоговый скрипт

Использовать:

# ./cleanup-with-gum.sh /mnt/backup

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#bash #AI #script
👍112👎5
Коротенькая, но мне кажется полезная заметка на тему одного небольшого сервиса, который поможет тем, кто пишет свои bash скрипты. Речь пойдёт вот про этот сервис:

https://www.strfti.me

С его помощью можно быстро подобрать формат даты для консольной утилиты date. Я её почти всегда использую в скриптах, чтобы зафиксировать дату, например, в имени файла или директории. Даже если на канале пройтись по моим скриптам, в каждом втором, если не первом она будет.

Например, почти всегда для имени файла с бэкапом использую конструкцию date +"%Y-%m-%d_%H-%M-%S", что запишет дату в виде 2025-08-24_17-52-06. Удобно и для быстрой сортировки по имени, и для визуального восприятия. Если кто-то не понял, о чём идёт речь, то вот простой пример готовой команды с использованием date:

/usr/bin/pg_dump -U postgres db01 | pigz > /var/lib/pgpro/backup/`date +"%Y-%m-%d_%H-%M"`-db01.sql.gz

Получим файл с дампом базы данных 2025-08-24_17-52-06-db01.sql.gz.

Я подобные вещи проверяю сразу в консоли, а наиболее популярные форматы у меня просто в шпаргалке записаны. На сайте можно быстро получить код для любого формата и там же описание всех параметров, чтобы подобрать свой. Быстро и удобно. Быстрее, чем где-то искать или читать man.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#bash #terminal
1👍148👎2
За время ведения канала накопилось некоторое количество сервисов, которые будут полезны тем, кто всё ещё сам пишет bash скрипты. Остались такие уникумы или все делегировали эту рутину ИИ?

Решил собрать эти сервисы в подборку. Сам уже и не помню, когда что-то новое писал. Всё уже давно написано и сохранено в git. Вроде стремительно развиваются (или это только кажется?) технологии, но вся скриптовая база одна и та же: проверить, перезапустить, скопировать, грепнуть, отправить в мониторинг, записать в лог и т.д.

🔥ShellCheck – проверка синтаксиса shell скриптов
◽️Explainshell – наглядное объяснение сложных и составных консольных команд
◽️Cmdgenerator – помощник по выбору ключей к популярным консольным утилитам
◽️Конструктор команд для linux утилиты find
◽️Проверка различных форматов даты и времени в утилиты date

Отдельно обращаю внимание на сервис ShellCheck. Стараюсь проверять им свои скрипты, если не забываю. Чаще всего даёт рекомендации по делу, которые имеет смысл принять к сведению.

Explainshell пришёл к нам из давних времён, когда ещё не было ИИ. То есть там под капотом не ИИ, а обработанные man страницы используемых утилит. Хотя стоит признать, что ИИ конкретно эти задачи решает неплохо, так как в основе лежит точная справочная информация. Тем не менее, man никто не отменял, особенно, когда нужно строгое описание.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#bash #подборка
4👍132👎3