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 794 подписчиков, занимая 5 701 место в категории Технологии и приложения и 28 128 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 23 794 подписчиков.
Согласно последним данным от 17 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -202, а за последние 24 часа — -5, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 21.91%. В первые 24 часа после публикации контент обычно набирает 12.48% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 5 213 просмотров. В течение первых суток публикация набирает 2 971 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 21.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как bashdays, linux, bash, docker, скрипт.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.r...”
Благодаря высокой частоте обновлений (последние данные получены 18 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
Курс «Kubernetes База» ➕ Видеокурс «Основы ИБ» ➕ «Ansible.Основы» и «Docker.Основы» 70 000 ₽ (вместо 105000 ₽) Промокод на скидку в боте до 11 октября⭐️ОБНОВИЛИ ВЕСЬ КУРС «K8s База» Чему научим: ✅ Основам работы с K8s, системой автоматизации развертывания, масштабирования и управления приложениями в контейнерах. ✅ Запускать кластер, работать с базовыми абстракциями и подключать дополнительные компоненты ✅ Запускать приложения в кластере, понимать принципы работы сети и настраивать CI/CD пайпланы ➕ Ориентироваться во всех доменах информационной безопасности ➕ Выстраивать безопасную инфраструктуру и разработку Старт потока 7 октября ➡️ 6 недель обучения ➡️ 63 часа практики ➡️ 5 встреч со спикерами 👉 Промокод и подробнее о курсе в боте Реклама ООО «Слёрм» ИНН 3652901451 erid:2VtzqumNrFb
SPF-запись домена https://bashdays.ru задана таким образом, что для ее проверки необходимо 36 DNS-запросов из 10 допустимых.Я человек простой — вижу хуйню, прохожу мимо. Но тут пройти не смог, какой-то животный интерес возник. Что это еще за 10 допустимых запросов? Проресерчив тему, нашел сервис SPF Surveyor который как раз анализирует текущую SPF запись и выводит результат. ➡️ Рекомендую добавить сервис в закладки, для дебага самое оно! От результата я знатно прихуел, вот моя SPF:
v=spf1 mx a include:spf.gca.to include:_spf.google.com include:spf.smtp.bz include:mindbox.ru ~allИ результат: 36/10 И чо мне с этим делать? Для начала убрал mx и a, по итогу получил результат: 18/10. Уже лучше, поехали дальше оптимизировать! А дальше оптимизировать нечего! По крайней мере я нихуя с этим больше не смог ничего сделать. Выкидывать инклуды нельзя, тупо нет лишнего. Перегуглил… нииихуууя! И как это дерьмище сокращать? Если каждый инклуд содержит в себе еще сабинклуды. Сука! Короче пост не про решение проблемы, а про сервис SPF Surveyor. Ну а если ты знаешь как этого босса проходить (мож ты гуру почтовых серверов, а мы и не знали), напиши пару строчек в комменты, обещаю админ чатика за технические коменты не забанит. Такие дела… tags: #рабочиебудни — 🔔 @bashdays➡️ @gitgate
Docker генерирует случайные имена для контейнеров, используя сочетание прилагательных и фамилий известных учёных или инженеров.
<прилагательное><фамилия> и всегда написаны в нижнем регистре.
Например:
quirky_pare agitated_turing furious_heisenberg romantic_curieОкей. После некоторого ресёрча оказалось, что 90% докера написано на Golang. Вот это поворот! Порывшись еще немного, нашел функцию по генерации этих имен для контейнеров. ➡️ Посмотреть можешь тут. ㅤ Мотаем этот код в самый низ и видим забавную хуйню:
if name == "boring_wozniak" /* Steve Wozniak is not boring */ {
goto begin
}
Этакая пасхалочка. Но зачем все эти имена?
Да чтобы удобнее было манипулировать контейнерами, вот и вся идея этой возни.
Ну и на закуску адаптируем полученные знания на bash, генератор может выглядеть так:
#!/bin/bash
adjectives=(
"adoring" "agitated" "amazing" "angry" "awesome" "blissful" "bold"
"boring" "brave" "clever" "cool" "compassionate" "competent" "crazy"
"dazzling" "determined" "ecstatic" "elegant" "eloquent" "epic"
"exciting" "fervent" "focused" "furious" "gallant" "gifted" "goofy"
"gracious" "happy" "hardcore" "hopeful" "hungry" "infallible" "inspiring"
"jolly" "jovial" "keen" "kind" "laughing" "loving" "magical"
"mystifying" "naughty" "nervous" "nostalgic" "optimistic" "peaceful"
"practical" "priceless" "quirky" "recursing" "relaxed" "reverent"
"sad" "serene" "sharp" "silly" "sleepy" "stoic" "strange" "stupefied"
"suspicious" "tender" "thirsty" "trusting" "unruffled" "vibrant"
"vigilant" "wizardly" "wonderful" "youthful" "zealous" "zen"
)
scientists=(
"albattani" "allen" "archimedes" "ardinghelli" "babbage" "bashdays" "banach"
"banzai" "bardeen" "bartik" "bassi" "bell" "benz" "bhabha" "bhaskara"
"blackwell" "bohr" "booth" "borg" "bose" "boyd" "brahmagupta" "brattain"
"brown" "carson" "chandrasekhar" "colden" "cori" "cray" "curie"
"darwin" "davinci" "dijkstra" "dubinsky" "easley" "einstein"
"elion" "engelbart" "euclid" "euler" "fermat" "fermi" "feynman"
"franklin" "galileo" "galois" "goldberg" "goodall" "hawking"
"heisenberg" "hermann" "herschel" "hertz" "hodgkin" "hoover" "hopper"
"hypatia" "joliot" "kalam" "keller" "kowalevski" "lalande" "leavitt"
"lichterman" "liskov" "lovelace" "mayer" "mccarthy" "mcclintock"
"mclean" "mcnulty" "meitner" "mendel" "mendeleev" "minsky" "mirzakhani"
"moore" "napier" "newton" "nobel" "noether" "panini" "pare"
"pasteur" "payne" "perlman" "pike" "poincare" "ptolemy" "raman"
"ramanujan" "ride" "ritchie" "roentgen" "rosalind" "saha"
"sammet" "shockley" "sinoussi" "stallman" "stonebraker" "swanson"
"tesla" "thompson" "torvalds" "turing" "varahamihira" "visvesvaraya"
"wilbur" "wiles" "williams" "wilson" "wing" "wozniak" "wright"
"yonath"
)
generate_container_name() {
local adjective="${adjectives[RANDOM % ${#adjectives[@]}]}"
local scientist="${scientists[RANDOM % ${#scientists[@]}]}"
echo "${adjective}_${scientist}"
}
count=${1:-10}
for ((i=1; i<=count; i++)); do
generate_container_name
done
После запуска скрипта, на экран выведутся 10 случайных имен в стиле docker. Количество можешь гибко менять.
Теперь ты в праве заполнить массивы своими данными и генерировать уникальные имена, например: pizdatiy_huy или ohuennaya_pizda.
А потом использовать сразу в командах:
docker run --name $(bash script.sh) -d nginx
Есть еще такая штука:
alias dn='curl -s https://frightanic.com/goodies_content/docker-names.php'
Это выплюнет тебе подобное имя прям в консоли без скриптов и приседаний.
А еще есть библиотека на питоне — codenamize, которая проворачивает тоже самое.
Короче есть из чего выбрать. В общем пользуйся, прикручивай, изучай!
tags: #linux #bash #docker
—
🔔 @bashdays➡️ @gitgateProxmox — это бесплатная платформа виртуализации, которая позволяет запускать на одном физическом сервере множество виртуальных машин и контейнеров. Она используется для создания и управления виртуальными средами.Всё чего я добился с Pimox7:
The following packages have unmet dependencies: ceph-fuse : Depends: libfmt7 (>= 7.1.3+ds1) but it is not installable libpve-rs-perl : Depends: perlapi-5.32.1 but it is not installable libpve-u2f-server-perl : Depends: perlapi-5.32.1 but it is not installable librados2-perl : Depends: perlapi-5.32.1 but it is not installable lxc-pve : Depends: libgnutlsxx28 but it is not installable pve-cluster : Depends: perlapi-5.32.1 but it is not installable pve-qemu-kvm : Depends: liburing1 (>= 0.7) but it is not installableКакой-то сука перл... Ну раз такое дело, надо решать! Фиксить скрипт Pimox7 я ебал, поэтому устроил анал-карнавал и зашел с черного хода. В телеге с разметкой беда, поэтому запилил свою «официальную документацию» в другом месте. Мож кому пригодится 👇 ➡️ Proxmox на Raspberry Pi 5 Хорошего тебе дня-вечера, увидимся! tags: #linux #рабочиебудни — 🔔 @bashdays➡️ @gitgate
htop, git, rclone, mc и прочее. И чтобы не вводить команду на установку:
apt install htop git rclone mc
Я могу поставить один «мета-пакет», который будет содержать в себе все эти утилиты. Что-то из оперы Zver DVD, где нужный софт ставился сразу пачкой.
Поехали тыкать палкой!
Ставим зависимости и готовим окружение:
sudo apt-get install -y build-essential devscripts dh-make
Создаем структуру для «мета-пакета»:
cd /tmp
mkdir bashdays-soft
cd bashdays-soft
Создайте контрольные файлы пакета:
dh_make --native --single --yes -p bashdays-soft_1.0
Ключи:
native — создаёт пакет без указания версии дистрибутива
single — создаёт минимальную структуру
-p my-metapackage_1.0 — имя пакета и версия (1.0)
В ответ получаем выхлоп:
Maintainer Name : root
Email-Address : root@unknown
Date : Sun, 29 Sep 2024 03:58:22 +0000
Package Name : bashdays-soft
Version : 1.0
License : gpl3
Package Type : single
Открываем файл на редактирование:
vim debian/control
И хуячим описание для «мета-пакета»:
Source: bashdays-soft
Section: misc
Priority: optional
Maintainer: Roman Shubin <hello@devopsina.ru>
Standards-Version: 4.5.0
Build-Depends: debhelper-compat (= 11)
Package: bashdays-soft
Architecture: all
Depends: mc, htop, curl, git
Description: My own Installer
В секции Depends перечислены все пакеты, которые должны быть установлены вместе с мета-пакетом. У меня это mc, htop, curl, git.
Параметр Architecture: all указывает, что пакет не зависит от архитектуры.
Собираем «мета-пакет»:
debuild -us -uc
Ключи -us и -uc отключают подпись пакета.
Смотрим что получилось:
ls -la ..
И видим:
bashdays-soft_1.0.tar.xz
bashdays-soft_1.0_all.deb
Наш «мета-пакет готов». Давай теперь его установим и посмотрим что получилось:
sudo apt install -yf ../bashdays-soft_1.0_all.deb
Проверяем и видим что произошла установка всех пакетов которые я описал в секции Depends в файле debian/control. ЗБС!
Проверить можно так:
dpkg -l mc htop curl git
В ответ получишь красивую табличку и информацию о пакетах.
Теперь можешь приготовить свой собственный «мета-пакет» со всем необходимым и быстренько раскатывать его на новые сервера.
Темка достаточно интересная, поэтому рекомендую потыкать.
Пользуйтесь!
tags: #linux
—
🔔 @bashdays➡️ @gitgate🔵 ImagePullPolicy и старые имейджи в кубе Вы сказали кубу залить новую версию приложения, он этого не сделал, но сказал, что сделал 🔵 PVC и StatefulSet для Stateful приложений Или как потерять все данные из своей БД 🔵 CoreDNS Overload Узкие места в кубах: медленные межсерверные взаимодействия при большом трафике 🔵 Kubelet memory overcommit on the node Или как дестабилизировать куб на своих нодах 🔵 CPU limits Продолжаем наступать на эти грабли: как неэффективно управлять ресурсами приложения⭐️Бонус от Слёрм: На вебинаре подарим одному участнику место на курсе «K8s База» ⚡️пикеры: - Кирилл Борисов. SRE в VK - Всеволод Севостьянов. Staff engineer в Lokalise ➡️Когда вебинар: 2 октября в 17:00 мск ➡️Регистрация — через бот Реклама ООО «Слёрм» ИНН 3652901451
ipmi или аналогов, кроме того, в окружении нет админа. Поэтому конфигурировать сеть нужно по ssh.
Надеюсь никому здесь не нужно объяснять, чем это грозит. В общем, прикинул я 0. Есть работающий сервер. 1. При запуске создается резервная копия защищаемого каталога конфигурации /etc 2. В crontab добавляется задание, которое через определенное время ПОСЛЕ ПЕРЕЗАГРУЗКИ восстановит каталог из копии. 3. Если вышеуказанное задание определит, что в систему по ssh вошел указанный пользователь, восстановление отменяется и задание из crontab убирается. 4.Если пользователь не смог войти в систему - сначала создается вторая резервная копия защищаемого каталога (на тот случай, если сконфигурировали все правильно, но забыли/не смогли войти из-за проблем на вашей стороне, ну и для анализа), после этого производится восстановление резервной копии из пункта 1, убирается задание из crontab и производится перезагрузка сервера. Сервер приведен к пункту 0.Пользоваться этой цацой просто:
1. ПЕРЕД НАЧАЛОМ КОНФИГУРИРОВАНИЯ запускаем скрипт, Он запрашивает имя пользователя и время ожидания до восстановления ПОСЛЕ ПЕРЕЗАГРУЗКИ. 2. Конфигурируем сервак. 3. Отправляем сервак в перезагрузку. (Да, не лучший вариант, но по сравнению с командировкой фигня). 4. Пытаемся войти по ssh.По ssh мы войдем в любом случае. Или быстро (если сервак сконфигурировали правильно) или по окончании времени ожидания и перезагрузки. Обращаю внимание - если пользователь смог войти в систему - Сервер считается работоспособным, задание из cron убирается. И если вы решите что-то снова поконфигурировать - нужно снова запускать скрипт и один-два раза перезагружать сервак. Лучше составьте план действий. Скрипт тестировался на debian путем удаления каталога
/etc/network
Используйте скрипт под свою ответственность. Гарантировать, что он заработает на вашей системе я не могу. Для начала попробуйте защить какой-нибудь каталог в домашней директории.
Скрипт не сможет восстановить конфигурацию, если машина не грузится совсем (ну, например грохнули fstab)
На Alpine точно не работает по двум причинам:
1. crontab не понимает опцию @reboot (проблема решаемая через /etc/inid.d)
2. по умолчанию не работают команды last, who, w. Поэтому несколько проблематично определить наличие пользователя в системе.
➡️ Скрипт в комментария к этому посту, сюда не влез сука!
tags: #bash #linux © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgateWARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Please contact your system administrator. Add correct host key in /home/your_user/.ssh/known_hosts to get rid of this message. Offending RSA key in /home/your_user/.ssh/known_hosts:xx
У меня коллеги обычно сразу прибегают и начинают подозревать неладное — ааа спасите, сервер взломали, не могу подключиться! Паникёры блядь…А дело то в том, что я склонировал сервак и перекинул на него старый айпишник. Соответственно всякие фингерпринты изменились. Чо за ошибка и что нужно делать? Файл
~/.ssh/known_hosts используется для хранения списка хостов, с которыми ты ранее взаимодействовал по ssh.
Когда ты впервые подключаешься к новому удалённому серверу по ssh, клиент ssh сохраняет его ключ в этот файл.
В дальнейшем, при каждом подключении к этому серверу, ssh-клиент сверяет ключ сервера с тем, что хранится в файле known_hosts.
Это помогает удостовериться, что ты подключаешься к правильному серверу, а не к какому-то левому.
Короче вся эта чача сделана для безопасности, чтобы избежать анальной атаки — «мужик посередине».Но нам то бояться нечего, поэтому забиваем хуй и избавляемся от этого раз и навсегда. Открываем свой локальный
/etc/ssh/ssh_config или ~/.ssh/config и херачим в него такое:
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
Всё! Теперь даже если случится «мужик посередине», ты успешно подключишься к серверу без всяких ошибок.
Если нужно отключить защиту для конкретного хоста, знак звездочки заменяем на нужный тебе ip или домен.
Ну а если лень править конфиги, можешь прям из командной строки передавать эти ключи:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@hostname
Либо сделать алиас:
alias ssh = "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
А если всё делать по уму и остерегаться «мужика посередине»:
1. Наводим справки, что случилось с сервером у админов
2. Если все ок, делаем так: ssh-keygen -R <hostname_or_ip>
После этой команды, файл known_hosts подчиститься и ошибка отправится в пешее эротическое.
Чо тебе еще рассказать? Особо больше нечего по этой теме.
А если тебе есть что добавить — велком в комментарии.
Давай краба! Завтра надеюсь точно пятница…
tags: #linux
—
🔔 @bashdays➡️ @gitgate{ crontab -l; echo '#@reboot echo BashDays >/tmp/BashDays.txt' ; }| crontab -
ИЛИ:
{ crontab -l; echo '#*/10 * * * 5 echo BashDays >>/tmp/BashDays.txt' ; }| crontab -
Можно конечно и так, но вдруг одинаковых заданий может быть несколько и их нужно будет как-то различать.
Все очень просто. Просто добавь
#!/bin/bash
function ADD_CRON_TASK(){
local CRON_TASK=${1:-'#'}
local COMMENT=${2:-$(date +%s)}
COMMENT=${COMMENT// /_}
{ crontab -l 2>/dev/null; echo "$CRON_TASK #$COMMENT"; }| crontab -
}
function REMOVE_CRON_TASK(){
if [[ $# -eq 0 ]];then
echo No comment to remove cron task >&2
return
fi
COMMENT=${1// /_}
crontab -l 2>/dev/null|sed '/#'$COMMENT'$/d'|crontab -
}
CRON_TASK='#@reboot reboot'
COMMENT="My litle joke"
ADD_CRON_TASK "$CRON_TASK" "$COMMENT"
crontab -l|tail -3
echo '###################################################'
REMOVE_CRON_TASK "$COMMENT"
crontab -l |tail -3
Если запустить программу, увидите что-то типа:
#
# m h dom mon dow command
# @reboot reboot #My_litle_joke
#############################
# For more information see the
#
# m h dom mon dow command
Видно, что программа добавила задание, вывела последние три строки crontab'a, потом разделитель.
Затем задание было удалено. Это видно по последним трем строкам.
В комментариях задания пробелы заменяются на "_" для упрощения работы c sed.
Ну, и на всякий пожарный напомню, что для корректной работы с cron нужно задать переменную PATH либо в crontab, либо в скрипте.
tags: #bash #linux © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgatedocker run -v /var/run/docker.sock:/var/run/docker.sock mrhavens/dedockify <ID Image>
Либо сразу в алиас:
alias dedoc="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm mrhavens/dedockify"
Предварительно подставь нужный ID Image.Я этим пользоваться не буду, мне больше handjob нравится, но ты посмотри, мож где-то быстренько пригодится что-то зареверсить. ➡️ Репа проекта и документашка. Развлекайся. Увидимся совсем скоро! tags: #debug #devops #docker — 🔔 @bashdays➡️ @gitgate
FROM python:3.8-slim
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "app.py"]
Запускаем сборку имейджа:
docker build -t pythoner:latest .
Теперь нативными командами вытягиваем начинку, без всяких dive и т.п. Но придется немного глазками пробежаться.
docker history pythoner:latest
Результат команды выведет протокол сборки + команды. Но команды будут урезанными. Для того чтобы получить полный листинг, делаем так:
docker history --no-trunc pythoner:latest
Вылетит простыня, но при сноровке и насмотренности, всё вполне предсказуемо.
В идеале совмещаем с dive, смотрим окно Layers и стрелками перемещаемся по слоям, а там уже видно все команды, которые выполнялись из Dockerfile.
По итогу из говна и палок собираем копию нужного нам Dockerfile.
А файлы, которые были добавлены через COPY, вытягиваем себе на локальную машину так:
docker cp <image id>:/etc/nginx/nginx.conf /tmp
Про дебаг докер имейджей и контейнеров я писал в этом посте, почитай, достаточно информативно.Как вариант можешь воспользоваться анализаторами, например trivy. Trivy это комплексный и универсальный сканер безопасности для docker images. Заодно еще безопасность своих решений можно позырить и приуныть. А еще есть клевая поделка для этого на python, но про нее закину уже завтра. Вот такие пироги, если знаешь еще способы — пиши в комменты, будет полезно! tags: #debug #devops #docker — 🔔 @bashdays➡️ @gitgate
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
