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 — головні інсайти року 
