Bash Days | Linux | DevOps
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru
Больше📈 Аналитический обзор Telegram-канала Bash Days | Linux | DevOps
Канал Bash Days | Linux | DevOps (@bashdays) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 23 741 подписчиков, занимая 5 667 место в категории Технологии и приложения и 27 976 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 23 741 подписчиков.
Согласно последним данным от 27 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -210, а за последние 24 часа — -11, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 26.65%. В первые 24 часа после публикации контент обычно набирает 13.69% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 6 328 просмотров. В течение первых суток публикация набирает 3 252 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 35.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как bashdays, linux, bash, docker, скрипт.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.r...”
Благодаря высокой частоте обновлений (последние данные получены 28 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
systemctl restart php-fpm
Unit php-fpm.service could not be found.
Хм, я точно знаю что php на сервере есть! Так какого чернослива?
За годы практики, я выработал методику поиска сервисов, которые называются совсем не очевидно.
В примере выше, php сервис называется: php8.2-fpm-fuck-you!
Ха! В жизни не догадаешься.
Первым делом пиздуем в:
history | grep php
И внимательно смотрим, если повезет, то там будет эта заветная строчка с ребутом и именем замудрёного сервиса. Возможно когда-то ты с ним имел дело, либо кто-то пытался иметь.
Если не повезло делаем так:
systemctl | grep php
php8.2-fpm-fuck-you.service
phpsessionclean.timer
Эта штука гарантированно выплюнет тебе полное название сервиса, ну а дальше ты знаешь что с ним делать.
Можно конечно воспользоваться внешними утилитами, но не рекомендую. Потому что systemctl есть всегда, а внешних утилит - нет.
➡️ Сразу привыкай работать с инструментами из коробки и будет тебе счастье.
Все!
Ну и анекдот как обещал: еслиб у бабушки был бы хуй, она была бы дедушкой.
tags: #linux #debug
—
🔔 @bashdays➡️ @gitgate#!/bin/bash
find . -type f -exec stat --format='%a %n' {} \; > permissions.txt
git add permissions.txt
git commit -m "на залупе лешего вертели"
git push
Пробегаемся по всем файлам и каталогам, записываем текущие права в файл permissions.txt, коммитим, пушим.
Ну и скрипт для восстановления прав:
#!/bin/bash
if [ -f permissions.txt ]; then
while read perm file; do
if [ -f "$file" ]; then
chmod "$perm" "$file"
fi
done < permissions.txt
fi
Вот и вся наука. По желанию вешаешь это на Git Hook (post-checkout, post-merge) и автоматизируешь.
Как автоматизировать писал в этом посте, на примере можешь адаптировать.А еще есть git-restore-mtime, для восстановления метаданных времени модификации файлов. Такие дела, изучай… tags: #linux #bash — 🔔 @bashdays➡️ @gitgate
Поток “Kubernetes База” ➕ видеокурс “Мониторинг в Grafana” ➕ видеокурс "Ansible. Основы" ➕ видеокурс "Docker. Основы" 🔥70 000 ₽ (вместо 100 000 ₽) Промокод на скидку в боте до 20 сентября⭐️ОБНОВИЛИ ВЕСЬ КУРС в июле 2024 г. ✅Чему научим: - Основам работы с K8s, системой автоматизации развертывания, масштабирования и управления приложениями в контейнерах. - Запускать кластер, работать с базовыми абстракциями и подключать дополнительные компоненты - Запускать приложение в кластере, понимать принципы работы сети и настраивать CI/CD пайплан Старт потока 7 октября ➡️ 7 недель обучения ➡️ 63 часа практики ➡️ 5 встреч со спикерами ➡️ Итоговая сертификация 👉 Промокод и подробнее о курсе в боте Реклама ООО «Слёрм» ИНН 3652901451
Это пост изобилует грубыми и матерными выражениями и, в силу своего содержания, вообще не предназначен для просмотра лицам с нежной и хрупкой психикой.Всё бы хорошо, но в моменте пуша свеженького image docker в registry, я невзначай обнаружил, что в гитлабе его просто-напросто НЕТ! ㅤ Куда же он сука такая делся? В облачном есть, в self-hosted — хуй! Ну думаю щас галочку где-нибудь в настройках поставлю и все у меня получится. Перерыл всё что только возможно. Но гитлаб тот еще выблядок парижской потаскухи. Нет галочки… Хуй сосали на вокзале!
Да даже взять ситуацию перевода private репы в public.Кароче. Чтобы включить Container Registry, нужно зайти в конфиг
/etc/gitlab/gitlab.rb и…
Раскомментировать эту строчку:
gitlab_rails['registry_enabled'] = true
И после этого запустить:
gitlab-ctl reconfigure
gitlab-ctl restart
Пиздец, почему нельзя конфиг просто перечитать без перезагрузки всех сервисов и ожидания.
И о чудо! Заветный пункт меню Container Registry внезапно появляется. Тут и сказочки конец. НО НЕТ. При попытке зайти в этот новый пункт, получаем ошибку:
Docker connection error. We are having trouble connecting to the Container Registry. Please try refreshing the page. If this error persists, please review the troubleshooting documentation .Ебутся блохи в суматохе!!! Идем читать документацию!
Реестр контейнеров автоматически включается и становится доступным в вашем домене GitLab, если вы используете встроенную интеграцию Let's Encrypt.Fuck This Shit! Включаем поддержку Let's Encrypt в конфиге
gitlab.rb:
letsencrypt['enable'] = true
letsencrypt['auto_renew'] = true
Запускаем gitlab-ctl reconfigure && gitlab-ctl restart
Иииии… тадам, модуль registry запустился!
sudo gitlab-ctl status ok: run: registry: (pid 20114) 0sКвест успешно пройден, но мне пиздец как не понравилось! Поэтому сношу я этот sefl-hosted гитлаб к хуям и возвращаюсь в облачный. А на малинку пожалуй воткну gitea, надеюсь там такой хуйни не будет. Или будет? Ладно, в любом случае решение я тебе показал. Пользуйся! tags: #devops — 🔔 @bashdays➡️ @gitgate
Я себе в арсенал ее добавил, штука охуительная, при условии если знаешь зачем оно тебе и как этим пользоваться. Я пока не знаю, но обязательно разберусь. У хорошего девопса и бычий хуй веревка!Короче это хуйня на расте позволяет анализировать «Эльфов» (ELF бинарники).ㅤ - Статический анализ: изучение структуры бинарного файла, включая секции, сегменты, символы и релокации. - Динамический анализ: выполнение бинарного файла с отслеживанием системных вызовов и сигналов (strace/ltrace). - Извлечение строк: поиск полезных строк (например, паролей или URL) внутри бинарного файла. - Шестнадцатеричный дамп: просмотр содержимого файла в виде шестнадцатеричного кода с удобной визуализацией. Инструкция по установке тут, есть докеры-хуёкеры и т.п. Я собрал из исходников, делов 30 секунд:
cd /tmp
VERSION="0.1.0"
wget "https://github.com/orhun/binsider/releases/download/v${VERSION}/binsider-${VERSION}-x86_64-unknown-linux-gnu.tar.gz"
tar -xvzf binsider-*.tar.gz
cd "binsider-${VERSION}"
./binsider
➡️ Репка на гитхабе
➡️ Заценить на ютубе
Обязательно посмотри, рекомендую!
Ааа, еще всех вас с пятницей, хороших предстоящих выходных. Ну и самое главное — береги себя! Всех обнял 🙃
tags: #debug #linux #utils #utilites
—
🔔 @bashdays➡️ @gitgaterm и паре с find и зачищаешь ненужное гавно которое старше определенного времени.
А чо делать когда бекапы «правильно» заливаются в облако s3 по протоколу swift?
Там find с rm уже не прокатит. Можно конечно изгаляться, но я в рот ебал изобретать очередной велосипед.
Для этих целей отлично подходит rclone, кто бы блядь мог подумать.
Работает так:
/usr/bin/rclone --config ~/.config/rclone/rclone.conf \
--log-file /var/log/rclone-trasher.log \
-v delete selectel:backups/1c/ --min-age 3d --rmdirs
Показываем где лежит конфиг, конфиг представляет нечто такое:
[selectel] type = swift env_auth = false user = bashdays key = fuckyou auth = https://auth.selcdn.ru/ endpoint_type = internalПишем непотребства в лог файл, чтобы потом посмотреть что там в кроне навыполнялось. Указываем где чистим бекапы, задаем сколько бекапов нам оставить, в примере я оставляю за 3 последних дня. Бекапы у меня в каталогах по датам, добавляю ключик
rmdirs.
Вешаем на крон и идем дальше Я собрал докер имейдж, а контейнер вечно в ребуте либо вообще не запускается, чо делать и как отлаживать?Давай симулируем ситуацию и попробуем что-то с этим сделать. ㅤ Для начала соберем имейдж, это будет простой nginx + свой конфиг, который будет копироваться с локальной машины в имейдж. Создаем на хостовой машине пару файлов: Dockerfile:
FROM nginx:latest
WORKDIR /etc/nginx
COPY ./nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
nginx.conf
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name localhost;
location / {
return 200 'Hello, Docker!'
add_header Content-Type text/plain;
}
}
}
Собираем имейдж:
docker build -t my-nginx .
Ждем, на экране бежит куча всякого непотребства. Это нормально. Ждем…
Проверяем:
docker images
Ага, все ок, выплюнуло что-то вроде:
REPOSITORY TAG IMAGE ID CREATED SIZE
my-nginx latest b844ef77daa3 33 seconds ago 188MB
Запускаем:
docker run -d -p 80:80 my-nginx
Проверяем:
docker ps
Хуй там плавал. Ничо не стартануло… ошибок нет, куда смотреть?
Если контейнер вообще не запускается, то для начала смотрим логи:
1. Узнаем состояние контейнера:
docker ps -a
Видим хуй с маслом: Exited (1) 4 minutes ago
2. Смотрим логи:
docker logs --follow <id or name>
В <id or name> подставляем айдишник либо имя контейнера:
В логах видим ошибку:
invalid number of arguments in "return" directive in /etc/nginx/nginx.conf:15
Вот! С ней уже можно работать. Получается мы посмотрели логи, даже для незапущенного контейнера. Пиздуем в nginx конфиг и видим, что в 14й строке проебали точку с запятой.
Дополнительно можно посмотреть коды выхода:
docker inspect <id or name>
Например, если код выхода ExitCode = 137, значит не хватило ресурсов, подкинь памяти и все взлетит. Наверное…
Это основные моменты отладки.
Ну а если контейнер все же запустился, но что-то не работает, сначала повторяем все вышенаписанное. Ну и дополнительно можешь подключиться к нему в интерактивном режиме:
docker exec -it <id or name> bash/sh
Подставляешь id/name контейнера и выбираешь шелл, частенько bash и коробки не установлен, поэтому как вариант запускаешь sh.
А для визуализации слоев используем утилиту dive
Установка dive:
DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -OL https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.deb
sudo apt install ./dive_${DIVE_VERSION}_linux_amd64.deb
Открываем имейдж на анализ:
dive <id or imagename>
Подставляем id или имя — ИМЕЙДЖА (не контейнера)
Смотрим, охуеваем, закрываем.
Еще можно глянуть конкретный файл в контейнере:
docker exec -it <id or name> cat /etc/nginx/nginx.conf
Либо скопировать его себе на локальную машину:
docker cp <id or name>:/etc/nginx/nginx.conf /tmp
Поправить и скопировать обратно в контейнер:
docker cp /tmp/nginx.conf <id or name>:/etc/nginx/nginx.conf
Перезапускаем контейнер с новым конфигом:
Прикол в том, что тебе не нужно билдить новый имейдж, ты делаешь правки прям в контейнере.
docker exec <id or name> nginx -s reload
Такие дела! Если знаешь еще хаки и способы отладки контейнеров/имеджей, пиши в комменты, будет полезно!
tags: #devops #debug #docker
—
➕ @bashdays ➕ @gitgateСтрелки, HOME, END... и особенно функциональные клавиши (F1-F12) генерят многобайтные коды.
3. Клавиши TAB ENTER SPACE вообще нихрена не выдают.
4. Коды нажатых клавиш зависят от терминала, который у вас эмулируется.
5. Очень много клавиш используется в качестве "горячих", поэтому их обработка производится раньше, чем их обработает bash.
В общем - если вы умный человек - не используйте bash для обработки функциональных клавиш.
А если похожи на меня - приведу функцию, которая помогает минимизировать проблемы.
Поскольку не все клавиши генерят печатные коды, я не придумал ничего более умного, чем конвертнуть коды в hex-последовательность. Поверьте, работать со строкой в 10 символов проще, чем с управляющими символами.
Понятней.
Программа более-менее обрабатывает совместное нажатие CTRL+, ALT+. Не обрабатывает нажатия нескольких клавиш.
#!/bin/bash
function GET_KEY(){
declare K1 K2 K=
declare -i i
read -rsn1 K1;read -rsn4 -t 0.001 K2
if [[ "$K1" != $'\x1b' ]];then
K2=
fi
K1="${K1}${K2}"
i=${#K1}
while ((i--));do
printf -v K2 "%02X" \"${K1:$i:1}\"
K=${K2}${K}
done
printf "%s" $K
}
clear
echo "TERMINAL="$TERM
KEY=1
while [ "$KEY" != "" ];do
KEY=$(GET_KEY)
echo $KEY
# echo -e "\x$KEY"
done
сохраните в файл key2hex.sh
chmod +x ./key2hex.sh
./key2hex.sh
Под закрытым текстом объяснения для начинающих.
Поскольку программа простая - сильно комментировать не буду.
read -rsn1 K1;read -rsn4 -t 0.001 K2 считывает 1 символ, потом возможно еще 4, но с малым временем ожидания. Если символ многобайтный - в буфере он уже есть.
Если символ начинается не с кода 1b (ESC) он должен быть однобайтным.
${#K1} -число символов в строке.
Далее в цикле while ((i--));do посимвольно преобразуем строку в hex, накапливая в переменной K
echo -e "\x$KEY" команда перевода hex в char привожу для примера.
Для прикола попробуйте выполнить программу в разных терминалах (LxTerminal и tty1) и посмотреть на F5.
Поясню, в tty1 можно перейти из GUI CTRL+ALT+F1, а вернуться обратно обычно ALT+F7
Ну, или не F7. посмотреть, куда возвращаться можно командой w . Даже маленькие разберутся.
В общем, терминал(ы) - штука сложная. И тот только теперь я начал немного понимать, нахрена нужна библиотека ncurses.
help read printf
man w printf
tags: #bash © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgate
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
