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 738 підписників, посідаючи 5 559 місце в категорії Технології та додатки та 27 925 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 23 738 підписників.
За останніми даними від 01 серпня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на 2, а за останні 24 години на -5, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 21.76%. Протягом перших 24 годин після публікації контент зазвичай збирає 12.80% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 5 165 переглядів. Протягом першої доби публікація в середньому набирає 3 037 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 23.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як bashdays, linux, bash, docker, скрипт.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.r...”
Завдяки високій частоті оновлень (останні дані отримано 02 серпня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
nip.io ничего не слышал, но всё чаще встречаю его у ребят с Linux Factory.
Суть этого сервиса — автоматически разрешать поддомены в IP адреса без необходимости поднимать свой DNS сервер.
Сейчас как мы делаем, локально редактируем файл /etc/hosts, прописываем в него какие-то свои локальные айпишники на вымышленные домены.
Например:
192.168.0.10 nginx.local
192.168.0.11 grafana.local
И если перейти по адресу nginx.local попадаешь на виртуалку с айпишником 192.168.0.10. Это всё очевидно.
Но опять же как оказалось про манипуляции с hosts файлом многие не знали.А ведь это база. С помощью которой ты к примеру поднимаешь новый продакшен. Но что бы протестировать его, тебе нужно подкинуть на новый продакшен домен со старого продакшена. А тебе такое сделать не дадут. Вот и прописываешь себе в
hosts этот домен, указываешь айпишник нового прода, идешь тестишь, если все ок, то меняешь A запись.
Вернемся к nip.io, суть там такая же, прописываешь айпишники и нужные домены и по итогу получаешь такое:
nginx.192.168.0.10.nip.io → 192.168.0.10
app.192.168.0.11.nip.io → 192.168.0.11
test.192.168.0.12.nip.io → 192.168.0.12
Теперь открыв nginx.192.168.0.10.nip.io ты попадешь на 192.168.0.10 без редактирования своего hosts файла.
Давай потыкаем
У меня на IP 192.168.10.6 в локалке висит малина со всякими открытыми портами.
Пингуем:
ping 192.168.10.6.nip.io
В ответ я получаю такую картинку:
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: 192.168.10.6.nip.io
Address: 192.168.10.6
Отлично, пинг прошел, вернулся локальный айпишник. То есть мы пинганули какой-то глобальный домен, а он привел нас на локальный сервис.
Теперь я направляюсь в браузер и открываю url:
http://192.168.10.6
Мне открывается стартовая страница nginx. Тут всё понятно и логично. А теперь давай сделаем так.
http://nginx.192.168.10.6.nip.io
Хуяк и видим предупреждение:
Для сайта 192.168.10.6.nip.io не поддерживается защищенное подключениеНу клёвое же. Запрос прошел через глобальный домен и перенаправил запрос в мою локальную сеть. Без необходимости что-то прописывать в
hosts файле.
Просто жмем «продолжить» и попадаем снова на стартовую страницу nginx.
Еще вариант с портами:
http://sync.192.168.10.6.nip.io:8384На порту
8384 у меня висит syncthing и всё отлично открывается. То есть можно пробрасывать запросы через домен прям на порты или в докер контейнеры.
А можно прям кучу поддоменов плодить:
http://a.b.c.d.192.168.10.6.nip.io/И всё будет работать. А еще можно на такие домены получить SSL сертификаты, но у тебя должен быть белый айпишник.
sudo certbot certonly --standalone -d nginx.204.0.115.50.nip.io
Хуяк и у тебя готовый SSL для домена nginx.204.0.115.50.nip.io. Ну а если не хочется возиться с certbot можно воспользоваться алтернативами, например acme.sh или caddy.
Минусы nip.io:
1. Не поддерживает wildcards, но в большинстве случаев они избыточны. Инструмент заточен больше на удобное тестирование при разработке.
2. SSL работает только с публичными IP. Для 127.0.0.1.nip.io или 192.168.x.x.nip.io Let's Encrypt не выдаст сертификат.
У nip.io есть альтернативы: xip.io или sslip.io
В общем я показал, а тебе уже самому решать где это применить или не применить.Хорошо тебе провести эти выходные. Ну а я пошел фиксить баги. Увидимся! 🛠 #devops #networks — ✅ @bashdays / @linuxfactory / @blog
echo $foo
Тут всё предельно ясно и понятно. Все в ажуре!
Но это вершина айсберга. Эта команда может отрабатывать не так, как ты ожидаешь. Потому что foo это переменная. И если ты её не возьмешь в кавычки, то Bash может сделать с её содержимым всякие хитрые штуки.
Что подразумевается по «хитрыми штуками»
— Разделить содержимое на отдельные слова (если там есть пробелы).
— Подставить имена файлов с таким шаблоном, если он выглядит как *.zip (это называется глоббинг).
И тут у новичков возникает многочасовой проёб, когда переменная выводит неправильные значения.
Смотри:
msg="Пожалуйста, введите имя файла в формате *.zip"
echo $msg
Выглядит опять всё красиво. А по факту получаешь:
Пожалуйста, введите имя файла в формате awscliv2.zip
Да блядь! А я просто хотел вывести строкой *.zip а не получить список файлов в текущей папке.
var="*.zip"
echo "$var"
echo $var
Первое echo напечатает *.zip, а второе выведет список всех файлов, которые заканчиваются на .zip.
Поэтому, если ты хочешь наверняка вывести переменную как есть, лучше используй `printf`
printf "%s\n" "$foo"
Для маленьких:
Представь, что ты говоришь падшей женщине: «покажи что у тебя в трусах», она снимает трусы, а там — большой сочный хуй.
А чтобы в трусах был ожидаемый результат, нужно изначально это учесть в моменте знакомства (до просьбы) и расставить все кавычки.
Хотя у каждого свой ожидаемый результат… возможно кавычки вовсе и не потребуются.
Такие дела. Изучай!
🛠 #bash #badpractices #bestpractices
—
✅ @bashdays / @linuxfactory / @blogecho -e "foo\nbar\nfoo again" > bashdays.txt
Внутри получаем:
foo
bar
foo again
И применяем бэд-практику:
cat bashdays.txt | sed 's/foo/baz/g' > bashdays.txt
Эта команда читает файл bashdays.txt и одновременно пишет в него.
Что тут не так?
А всё! В лучшем случае получишь хуем по лбу и примеришь золотой пизды колпак. Эта команда испортит файл. Низя так делать! Всё проебёшь!
После этой команды файл bashdays.txt обнулится. Хотя визуально команда выглядит абсолютно безопасной.
А теперь делаем правильно!
sed 's/foo/baz/g' bashdays.txt > tmpfile && mv tmpfile bashdays.txt
Смотрим содержимое файла bashdays.txt и видим ожидаемый результат:
baz
bar
baz again
Здесь мы всё сделали через временный файл, громоздко, но по крайней мере безопасно. Веселый колпак тебе теперь точно не светит.
Можно извратиться и провернуть всё это дело на основе дескрипторов, но опять же этот способ не безопасен.
Можно правда хакнуть таким методом:
printf '%s\n' ',s/foo/baz/g' w q | ed -s bashdays.txt
Это работает без временного файла на уровне Bash, потому что ed сделаем всё сам. Но опять же конструкция нихуя непонятная.
Резюмируем: Не ссы использовать временные файлы, пусть твои bash скрипты будут безопасны и читаемы.
🛠 #bash #badpractices #bestpractices
—
✅ @bashdays / @linuxfactory / @blogЕсли работает, это еще ничего не значит. Ну ты это и сам знаешь.Ладно… Оставляю на ночь это ебучую головную боль с родным блоком питания, proxmox шуршит, всё ништяк. На утро — вентилятор хуярит как дичь перепуганная. Ебаться рылом в ламинат! Пингую, хуй там плавал! Выключаю, включаю — ничего! Перекидываю блоки питания — ничего! Я даж и не знаю теперь, что сука происходит, нагрев 40-50, чипы не должны отваливаться. Включается какая-то защита? Такое ощущение что этот мини-пиздюк конкретно решил мне выкрутить яйца.
Еще кстати подумал — а мож это proxmox? Ради интереса надо попробовать какой нить SelectOS накатить…Какие мысли господа и дамы? Выкинуть эту поеботу или есть какой-то быстро фикс типа прошивки или пиздюлин 20 таблеток? 🛠 #hardware #fails — ✅ @bashdays / @linuxfactory / @blog
date для работы с датами/временем.
🔤🔤🔥🔤🔤🔤🔤
Очень удобная команда, имеет очень много форматов и позволяет складывать/вычитать даты, например:
date -d"-1 day" # Чт 02 янв 2025 21:52:15 MSK - текущая дата минус один день.
date -d"+2 week" # Пт 17 янв 2025 21:53:48 MSK - текущая дата плюс две недели.
"day", "week" "month", "year", "hour", "min", "sec"
Но в bash есть еще средства для работы со временем:
ㅤ
Переменная SECONDS показывает, сколько секунд прошло с начала запуска скрипта или момента задания значения переменной. Обычно используется для хронометража блока кода скрипта. Например:
SECONDS=0
# здесь блок длительного кода
echo $SECONDS
Переменная EPOCHSECONDS - показывает число секунд, прошедших с начала эпохи UNIX (01.01.1970 00:00:00 UTC).
Обратите внимание, число секунд не зависит от часового пояса.
EPOCHREALTIME - аналогична предыдущей, но секунды с точностью до микросекунды. С помощью этой переменной можно точно отслеживать время небольших кусков кода. Даже если просто вывести переменную дважды - будет разное время:
echo $EPOCHREALTIME $EPOCHREALTIME
# 1744652451,166523 1744652451,166539
Обратите внимание, разделитель дробной части может быть различным, в зависимости от языковых настроек.
Переменные EPOCHSECONDS и EPOCHREALTIME обнулить не получится.
И еще есть специальный формат оператора printf для преобразования секунд UNIX в формат дат:
printf '%(DT_FORMAT)T' $EPOCHSECONDS
DT_FORMAT - практически полностью совпадает с форматом команды date.
Например:
printf '%(%Y%m%d-%H%M%S)T' $EPOCHSECONDS
# 20250414-203214
Если не указать переменную или указать -1 - будет использовано текущая дата/время. Если указать -2 - будет использовано время начала работы этого экземпляра bash.
printf удобен тем, что выполняется гораздо быстрее чем date (хотя говорить о скорости bash немного смешно) и позволяет результат операции записать сразу в переменную (Например DT).
printf -v DT '%(%Y%m%d-%H%M%S)T'
И date и printf работают в локальной временно́й зоне, чтобы это изменить можно задать "врéменную переменную" TZ.
Например:
TZ='UTC' date
# Пн 14 апр 2025 16:15:57 UTC
TZ='Asia/Irkutsk' printf '%(%Y%m%d-%H%M%S)T\n'
# 20250415-001621
Полный список временны́х зон на системах с systemd можно получить с помощью команды timedatectl list-timezones.
🛠 #bash
—
✅ @bashdays / @linuxfactory / @blogfoo, то не нужно писать доллар ($) перед именем переменной.
ㅤ
Напиши так:
read foo
А если хочешь прикрыть своё очко от спецсимволов, делай так:
IFS= read -r foo
Вот так делать хуёва:
read $foo
В этом случае $foo — уже не имя переменной, а значение переменной foo.
Как говорил мой техдир:
Рома, золотые у тебя руки. Оторвать бы их да пропить.Делай правильно и твои руки никто не оторвёт и не пропьёт. Для маленьких: Представь, ты говоришь: «Дай хуй» — и тебе сразу дают хуй. Всёж просто. 😲 А теперь представь, что ты говоришь: «Дай $хуй». Тут сначала дополнительно нужно спросить «А кто такой хуй?» — может, это Олег? И тогда тебе дадут Хуй Олега. То есть, сначала нужно узнать, кто прячется под «хуем», а потом уже брать, чтобы не взять чужой «хуй». Надеюсь ты понял. Изучай! 🛠 #bash #badpractices #bestpractices — ✅ @bashdays / @linuxfactory / @blog
[ — это не просто скобка, а отдельная команда. Она проверяет, пиздеж ли что-то или нет.
Хуёвая практика:
if [ a = b ] && [ c = d ]; then
...
fi
В этом примере сначала проверяется a = b, если это пиздёж — дальше ничего не выполняется.
Если же a = b НЕ пиздёж — тогда проверяется c = d. И если c = d НЕ пиздёж, то выполняется, то что внутри then.
Проще по моему объяснить уже нереально. Сложно перепутать пизду с розеткой. Хотя… вечно путают.Бест-практика! Зырь!
if [[ a = b && c = d ]]; then
...
fi
Делаем двойные скобки. Двойные скобки умеют работать с && внутри.
[[ ... ]] — это специальная команда Bash, которая используется для проверки условий. Она умнее и безопаснее, чем обычная [ ... ].
Внутри неё можно использовать логические операторы && (и) и || (или) без дополнительных скобок или дополнительных [.
Рассмотрим пример:
a="hello"
b="hello"
c="bashdays"
d="bashdays"
if [[ $a = $b && $c = $d ]]; then
echo "Условия совпали!"
fi
1. Проверяет $a = $b → "hello" = "hello"? → Да. 2. Дальше && говорит: Если первое условие — НЕ пиздёж, идём ко второму. 3. Проверяет $c = $d → "bashdays" = "bashdays"? → Да. 4. Оба условия верны → выполняется команда echo.
[ — работает с одним условием за раз
[[ — может работать с комбинированными условиями прямо внутри себя.
[[ ... ]] — это бабушка, которая за всю свою жизнь повидала много дерьма и вполне может понять твою сложную фразу: убрал И сделал уроки.
[ ... ] — это твой младший брат, пиздюк еще не в состоянии воспринимать такие большие выпады и ему нужно говорить частями.
«Сначала убрал?» — (ДА) Не пиздёж. «Сделал уроки?» — (ДА) Не пиздеж. «Ок, теперь я могу поиграть в девопс-инженера»Вот и вся наука. Изучай! 🛠 #bash #badpractices #bestpractices — ✅ @bashdays / @linuxfactory / @blog
Всё еще мечтаешь о ЗП > 200к? Тогда ты по адресу!Над курсом была проведена масштабная работа, все уроки я перенес на свои сервера. Под капотом движок mkdocs + material. Учел твою обратную связь, дополнил и отредактировал первые два сезона. Добавил темную тему и поиск + отрефачена куча мелочей.
Через LF за год прошло более 900 человек, 32 дали фидбек по офферу, то есть нашли работу мечты и получают 100500 мильонов в секунду. Что интересно в этом списке есть люди, которые вообще были далеки от айти и девопса.Ладно. Больше в уши не лью. Захочешь, сам почитаешь. В любом случае до конца апреля действует скидка
