ch
Feedback
Bash Days | Linux | DevOps

Bash Days | Linux | DevOps

前往频道在 Telegram

Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru

显示更多

📈 Telegram 频道 Bash Days | Linux | DevOps 的分析概览

频道 Bash Days | Linux | DevOps (@bashdays) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 23 788 名订阅者,在 技术与应用 类别中位列第 5 701,并在 俄罗斯 地区排名第 28 125

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 23 788 名订阅者。

根据 18 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -216,过去 24 小时变化为 -5,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 22.75%。内容发布后 24 小时内通常能获得 12.90% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 5 413 次浏览,首日通常累积 3 068 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 21
  • 主题关注点: 内容集中在 bashdays, linux, bash, docker, скрипт 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.r...

凭借高频更新(最新数据采集于 19 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

23 788
订阅者
-524 小时
-257
-21630
帖子存档
Всем привет! 14 июля Selectel организует атмосферный летний ИТ-фестиваль Selectel Day Off🔥 О чем? Тема мероприятия — носталь
Всем привет! 14 июля Selectel организует атмосферный летний ИТ-фестиваль Selectel Day Off🔥 О чем? Тема мероприятия — ностальгия по будущему🤪 Выступят спикеры из Циана, Realiste, Сбера, Альфа-Банка, Яндекса 360, SETTERS EDUCATION и МГУ. Темы докладов: — Платформы данных и как они будут развиваться в будущем.Обсудим эволюцию паттернов в обработке данных, тренды в индустрии и то, как платформа данных устроена в Циане. — Квантовые вычисления. Обсудим экспериментальный прогресс в области создания квантовых процессоров, а также порассуждаем о потенциале их применения в задачах ИИ. — ИИ-разработки в недвижимости. Рассмотрим, какие есть проблемы у самого большого рынка в мире по объему активов и как они решаются с помощью ИИ. — Креативность решений от нейросетей. Вы узнаете, какие задачи типичного сотрудника сможет взять на себя ИИ. Обсудим, будут ли нейросети помогать закрывать задачи, связанные с креативными решениями. — Поговорим про технические сообщества и многое другое. А еще в рамках фестиваля выступит Алексей Семихатов и расскажет про физические теории. Где? Санкт-Петербург, культурный квартал Брусницын Скорее регистрируйтесь: https://slc.tl/lfm2e Реклама АО «Селектел». ИНН: 7810962785 Erid: 2Vtzqvo6U1X

С утра успешно победил всех антагонистов и теперь самое время сделать что-то полезное. Сегодня разбираем проблемный Bash скрипт.
#!/bin/bash  

i=0
for name in `ls *.txt`
do   
  i=$[i+1]
  mv $name `printf "%02d" $i`.txt
done
А проблема заключается в том, что скрипт удаляет файлы, которые содержат в именах цифры. За качество скрипта тереть не будем. Нам нужно задебажить проблему, ведь явных команд на удаление в этом скрипте — нет. Для начала, давай создадим вводные, чтобы было с чем работать.
mkdir /tmp/test
cd /tmp/test
touch {001..003}.txt {01..03}.txt
Так, создали 6 файлов с разными именами:
01.txt
02.txt
03.txt
001.txt
002.txt
003.txt
Модифицируем проблемный скрипт, чтобы он выводил строку с командой mv перед её выполнением:
#!/bin/bash  
i=0
for name in `ls *.txt`
do   
  i=$[i+1]  
  echo 'DEBUG: mv' $name `printf "%02d" $i`.txt
  mv $name `printf "%02d" $i`.txt
done

exit 0
Запускаем и получаем красивое:
DEBUG: mv 001.txt 01.txt
DEBUG: mv 002.txt 02.txt
DEBUG: mv 003.txt 03.txt
DEBUG: mv 01.txt 04.txt
DEBUG: mv 02.txt 05.txt
DEBUG: mv 03.txt 06.txt
Смотрим что у нас осталось, хуяк и вместо 6 файлов, у нас осталось всего лишь 3 штук.
ls

04.txt
05.txt
06.txt
Куда блядь делось остальное? Вокруг да около ходить не будем. Дело в том, что в одном каталоге не может быть двух файлов с одинаковым названием. Очевидно? Да! Как работает mv:
mv <старое имя> <новое имя>
Если <новое имя> это существующее имя файла, тогда оно будет удалено, а <старое имя> получит имя <новое имя>. Если взять нашу ситуацию, то произошло следующее:
1. DEBUG: mv 001.txt 01.txt 
2. DEBUG: mv 002.txt 02.txt
3. DEBUG: mv 003.txt 03.txt
4. DEBUG: mv 01.txt 04.txt
5. DEBUG: mv 02.txt 05.txt
6. DEBUG: mv 03.txt 06.txt
1. Удалено 01.txt. и 001.txt -> 01.txt 2. Удалено 02.txt. и 002.txt -> 02.txt 3. Удалено 03.txt. и 003.txt -> 03.txt ✔ Итого потеряли 3 файла, печаль. Теперь давай более наглядно. Удаляем подопытные файлы и создаем новые. Плюс запишем в каждый файл его имя.
for i in {001..003}.txt {01..03}.txt; do echo $i > $i;done
Получилось 6 файлов, в каждом файле содержится имя самого файла. Смотрим что получилось:
ls -la

8 Jul 10 08:05 001.txt
8 Jul 10 08:05 002.txt
8 Jul 10 08:05 003.txt
7 Jul 10 08:05 01.txt
7 Jul 10 08:05 02.txt
7 Jul 10 08:05 03.txt
Снова модифицируем скрипт и задаем опцию -b для утилиты mv. Теперь для существующего файла будет создаваться резервная копия. Бекап ёпта!
#!/bin/bash  
i=0
for name in `ls *.txt`
do  
  i=$[i+1]
  echo 'DEBUG: mv' $name `printf "%02d" $i`.txt 
  mv -b $name `printf "%02d" $i`.txt
done  
exit 0
Выполняем скрипт и смотрим что у нас осталось от файлов.
ls -la

7 Jul 10 08:05 01.txt~
7 Jul 10 08:05 02.txt~
7 Jul 10 08:05 03.txt~
8 Jul 10 08:05 04.txt
8 Jul 10 08:05 05.txt
8 Jul 10 08:05 06.txt
Теперь смотрим содержимое самих файлов и преисполняемся. По итогу, если нужно пронумеровать файлы, позаботься об уникальности имён и заранее протестируй на тестовых данных. Чтобы случайно к херам не снести все ассетсы с продакшена. Ну и всегда обрабатывай исключения если файл уже существует, чтобы не остаться без штанов. Изучай, всего тебе самого наилучшего! tags: #linux #bash — 🔔 @bashdays

😱 👉 Важное событие для всех, кто хочет повысить производительность своих серверов! 🔆 Присоединяйтесь к открытому уроку «Оп
😱 👉 Важное событие для всех, кто хочет повысить производительность своих серверов! 🔆 Присоединяйтесь к открытому уроку «Оптимизация Nginx и Angie под высокие нагрузки» На занятии вы: - поймёте, какие параметры влияют на производительность; - научитесь оптимизировать серверную часть; - узнаете, как работать с клиентской производительностью. 🏆 Спикер Николай Лавлинский — технический директор в Метод Лаб, PhD Economic Science, опытный руководитель разработки и преподаватель. 👉 Регистрируйтесь для участия: https://vk.cc/cygpJS Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

И снова здравствуйте. Давай сегодня немного в кишках покопаемся. Запускаем бессмысленную команду:
dd if=/dev/zero of=/dev/null status=progress
И наблюдаем как строка статистики постоянно меняется. В простонародье — рефрешится.
4254480896 bytes (4.3 GB, 4.0 GiB) copied, 4.77966 s, 890 MB/s
Бесполезная? Ну не скажи, с её помощью можно протестировать скорость чтения и записи. Эта команда копирует блоками нули из спец-файла в другой. Записывая статистику на стандартный вывод ошибок stderr. Строка статистики постоянно меняется. Но как dd это делает? Давай разберемся ниже. Запускаем страшную кишку и немного ждем
dd if=/dev/zero of=/dev/null status=progress |& { read -t 4; echo "${REPLY@Q}"; }
По итогу получаем, что-то подобное:
$'\r927888896 bytes (928 MB, 885 MiB) copied, 1 s, 928 MB/s\r1851585024 bytes (1.9 GB, 1.7 GiB) copied, 2 s, 926 MB/s\r2749514752 bytes (2.7 GB, 2.6 GiB) copied, 3 s, 917 MB/s'
Портянка с read означает — ждем 4 секунды, считываем первую строчку ввода и сохраняем ее в переменную REPLY, а далее выводим содержимое переменной на экран. ✔ Не так уж и страшно, правда? Ааа, херовина |& нужна, чтобы объединить stdout и stderr и затем направить его в read. Ну дак вот. Получается утилита dd, пишет статистику за секунду в стандартный поток ошибок и затем суёт символ «\r». Который означает - возврат каретки. Вот и вся магия. Делаем хак, чтобы избавиться от возврата каретки:
dd if=/dev/zero of=/dev/null status=progress |& tr '\r' '\n'
Теперь статистика выводится в столбик:
1836032000 copied, 2 s, 918 MB/s
2793336832 copied, 3 s, 931 MB/s
3726170624 copied, 4 s, 932 MB/s
4655933440 copied, 5 s, 931 MB/s
Нагляднее? Конечно! Что с этим можно сделать? Ну например протестировать скорость чтения и записи, используя разный размер буферов. Херачим Bash скрипт:

#!/bin/bash

for i in {9..20}
do
    bs=$((2**i))
    dd bs="$bs" if=/dev/zero of=/dev/null status=progress |& { 
    mapfile -d$'\r' -n 2; printf '%-8s : %s\n' "$bs" "${MAPFILE[1]}"; }
done

exit
Запускаем и получаем:
512 : 878647296 copied, 1 s, 879 MB/s
1024 : 1618295808 copied, 1 s, 1.6 GB/s
2048 : 3096260608 copied, 1 s, 3.1 GB/s
4096 : 5056294912 copied, 1 s, 5.1 GB/s
8192 : 8047247360 copied, 1 s, 8.0 GB/s
Круто? Да охуеть! Ну а если нужна статистика за пять секунд. Делаем 5+1 к количеству записей и индексу массива. Массив начинается с нуля. Но можешь это изменить с помощью опции -O.
#!/bin/bash

for i in {9..20}
do
    bs=$((2**i))
    dd bs="$bs" if=/dev/zero of=/dev/null status=progress |& { 
    mapfile -d$'\r' -n 6; printf '%-8s : %s\n' "$bs" "${MAPFILE[5]}"; }
done

exit
По итогу имеем статистику за 5 секунд:
512 : 4667945472 copied, 5 s, 934 MB/s
1024 : 8693190656 copied, 5 s, 1.7 GB/s
2048 : 15988561920 copied, 5 s, 3.2 GB/s
4096 : 27510878208 copied, 5 s, 5.5 GB/s
8192 : 39937343488 copied, 5 s, 8.0 GB/s
Вот такие пироги. Теперь можешь тестировать VPSки и писать статью на хабру с бенчмарками. Давай, увидимся завтра! tags: #linux #bash — 🔔 @bashdays

Как стать DevOps-инженером за 4 месяца? 🐳 Об этом расскажут аж на 2-х бесплатных уроках от Merion Academy! Забирай целый набор из бесплатных полезностей: 📍2 бесплатных урока, где расскажут, кто такой DevOps-инженер, какие инструменты использует, куда и как развивает карьеру, познакомят с Docker и контейнирезацией. 📍 В дополнение бесплатный интенсив по развитию карьеры, где HR-эксперты расскажут лайфхаки, как создавать сильные резюме и проходить собеседования, так, чтобы вас взяли на работу. 📍Гайд по командам Docker и Курс по английскому для IT. 👉 Регистрируйтесь по ссылке чтобы забирать бесплатные уроки, интенсив по карьере и гайд. Что еще важно знать: 1. У ребят одна из самых доступных цен, которая в 4-5 раз ниже, чем в других известных школах, но качество обучения на том же уровне. Это достигается за счет того, что в Мерионе не тратят миллионы на продвижение, а рекламируются только на собственных ресурсах и в тематических телеграм-каналах. Кроме этого у них также отсутствуют расходы на младших менторов, которые в большинстве онлайн-платформах представляются вам как "персональный ментор-преподаватель", но на самом деле являются просто бывшими студентами этих же курсов. 2. Есть возможность опции оплаты через сервис "Яндекс-Долями", т.е. учиться сразу, но платить по чуть-чуть. Merion Academy – это экосистема доступного образования, которая включает в себя: Youtube-канал ,где простыми словами говорят о сложных вещах. IT-академию, где обучат востребованным направлениям по самым доступным ценам. IT-базу знаний с полезными статьями Реклама: ООО "МЕРИОН НЕТВОРКС" ИНН: 7721855710 Erid: 2VtzqxmDUbs

Так, самое время подвести итоги с картами «Релиз». Больше всего реакций набрал комментарий Алексея Агафонова (supmea), по итогу 39 огоньков.
Привести в порядок всё, чтоб не стыдно перед последователями было. А доступы и так оставят и почту. Ещё и докучают что-либо сделать. А мы идём на большие деньги смотреть как у других всё сделано не так как нужно
На втором месте Александр Смирнов (wddingo) с 38 лайками за комментарий:
Самое гадкое, что можно было им сделать - я сделал, я ушел с этой работы. Пусть теперь сами с этим говном разбираются. А пакостить - это считаю слишком мелочным
Ну и третье место занял Максим (Rosssich), набрав 30 респектов за комментарий:
а вообще - ключевое слово "не заплатили". поэтому заявление в трудовую инспекцию, суд и т.д. там можно урона нанести больше чем от всяких там chaosmonkey )
На этой неделе к вам придет Макс и узнает куда засылать призы. Ждите. Нюансы. На руках у меня всего одна колода, она отправится в приоритете Алексею, остальные две вышлем в ближайшее время, как получим их от организатора. Ну либо закинем рублей на карту, чтобы вы самостоятельно заказали их через Авито и не парились на почте. Всем спасибо за участие, вы все лучшие!

🎲 Высокая доступность в Kubernetes: бесплатный вебинар Привет! Мы — команда Слёрма, учебный центр для айти-специалистов midd
🎲 Высокая доступность в Kubernetes: бесплатный вебинар Привет! Мы — команда Слёрма, учебный центр для айти-специалистов middle+ и фанаты k8s.😎 11 июля в 18:00 мы приглашаем вас на вебинар «Высокая доступность в Kubernetes: пробы, реквесты/лимиты, HPA». На встрече обсудим: ❓ Можно ли не делать рединесс пробы и лить трафик сразу на сервер? ❓ Что будет, если выставить неправильные пробы? И еще много интересного! Спикеры: ➡️ Кирилл Борисов, SRE Lead в MTS Digital ➡️ Всеволод Севостьянов, Staff engineer в Lokalise ➡️ Дмитрий Будаков, Системный инженер в интеграторе Зарегистрироваться на вебинар можно с помощью нашего бота-помощника. Подключайтесь! 🔗 ХОЧУ НА ВЕБИНАР Реклама ООО «Слёрм» ИНН 3652901451 erid: 2Vtzqummakq

Ёхохо. Не пить алкашку по выходным конечно круто, по итогу все это время компенсируешь работой. Продуктивность зашкаливает. НО, скучно пиздец! Поэтому приходится отвлекаться игрульками. Гоняя Зельду, невольно задумался, а квесты то очень похожи на алгоритмы в программировании. Порой что аж жопа горит. И их можно давать на собеседованиях. Без знания паттернов хер чо пройдешь. Ладно, теперь по теме: Реврайтим CTRL+C. Как прерывать запущенные программы и скрипты тут каждый знает. А как работает изнутри CTRL+C я напишу в следующих постах. Сегодня что-то вроде на изи потыкать. Понедельник как-никак. Где применяется реврайт CTRL+C? Да практически нигде, но то, что его можно зареврайтить это факт. ✔ А вообще причины для реврайта разные: - Избежание конфликтов с программным обеспечением - Удобство и предпочтения пользователя - Специальные рабочие процессы - Случайные нажатия - Ограниченные возможности клавиатуры - и т.п. Давай теперь на практике. Смотрим дефолтное сочетание
stty -a
stty - утилита, которая настраивает параметры терминала.
Получаем портянку вида:
speed 38400 baud; rows 57; columns 237; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0; -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
Смотрим параметр intr, он и указывает на сочетание, которое будет слать SIGINT. По умолчанию как видим оно = CTRL+C. Давай теперь поменяем эту штуку:
stty intr ^K
Теперь запускаем для теста sleep 1000 и пробуем нажать CTRL+C. Опа и нихуя не происходит. Поздравляю, реврайт прошел успешно. А теперь нажми CTRL+K и sleep завершится. Клёва? Клёва! Можешь теперь издеваться над коллегами и ломать им рабочие процессы. Чтобы сохранить эти настройки, выполняем:
echo 'stty intr ^K' >> ~/.bashrc
Ну либо в .zshrc, тут уже сам смотри где у тебя первоначальные настройки валяются. А можно сделать CTRL+ALT+K ? Через stty увы такое провернуть не получится. Но используя xbindkeys такое возможно.
vim ~/.xbindkeysrc

и добавить туда:

"pkill -SIGINT -f ."
  Control+Alt + k
Но xbindkeys со своими подводными камнями, оно для Иксов. А если у тебя Wayland то смотри в сторону sway или gnome-keybinding. Такие дела. Ладно, пошли дальше мир спасать. Хорошего понедельника! tags: #linux — 🔔 @bashdays

Тут персонаж один пристал, говорит что у него в Java есть какой-то «мусожор», а вот в Bash такого нет и поэтому от наших скриптов одни проблемы. Термин «Мусожор» видимо профессиональный и является пресловутым «Garbage Collector». К Java я отношусь ровно, оно меня не трогает и я его тоже. Как говорится — Одно гавно другому не равно. Поэтому хуисосить не буду. Давай проведем эксперимент:
1. ps -o rss -p $$
2. var=$(printf "%s\n" {1..100000})
3. ps -o rss -p $$
4. var="bashdays"
5. ps -o rss -p $$
В первой строчке выводится количество физической памяти в килобайтах, используемой текущим процессом оболочки. У меня выдало 4348. Во второй строчке записываем в переменную var содержимое от 1-100000 с переносом на новую строку. В третьей строчке снова выводим количество физической памяти, у меня 5276. Ага, оно стало больше. Было 4348 стало 5276. В четвертой строчке, перезаписываем var на строку «bashdays» и снова проверяем память. На этот раз пятая строчка вновь показывает: 4348. Что и требовалось доказать. Использование памяти увеличивается, а затем снова уменьшается. Все манипуляции с памятью выполняются на уровне Linux ядра. И нет никакой необходимости рвать жопу и греть голову. Bash не работает с памятью и объектами, так же как обычные языки программирования. tags: #bash — 🔔 @bashdays

⚡️44% российских компаний уже используют искусственный интеллект для разработки и тестирования ПО Yandex Cloud совместно с Эк
⚡️44% российских компаний уже используют искусственный интеллект для разработки и тестирования ПО Yandex Cloud совместно с Экспресс 42 и другими партнёрами выпустили первую часть исследования State of DevOps Russia. В этом году в опросе приняли участие более 4000 специалистов – от руководителей до специалистов, связанных с разработкой, тестированием и эксплуатацией систем. Подробнее об итогах исследования, главных цифрах и выводах – в статье.

Про интересный факап и траблшутинг. Обратился клиент — у нас mysql реплика не работает. Вернее работает, но отстала всего лишь на 3 месяца. На вопрос — а хули вы 3 месяца сидели, у вас же мониторинг есть? Очевидный ответ — да, есть, но оно молчит. Ладно, полез разбираться. SHOW SLAVE STATUS\G; А там ошибки брынчат, как хуи в бидоне.
Error 'Cannot delete or update a parent row: a foreign key constraint fails'
Ну это ладно, ошибка и ошибка, тут понятно что делать — НИЧЕГО. Так как реплика используется чисто аналитиками на потыкать, игнорим эту ошибку через my.cfg. Быстрофикс. ✔ Для продуктовой реплики такое делать - НЕЛЬЗЯ! Самый важный вопрос — какого хера мониторинг 3 месяца молчал? Тут уже интереснее. Реплика заведена в prometheus, экспортеры есть, все дела. Но из графаны сервер пропал, хотя год назад я ее точно там видел. Думаем… Думаем… Смотрю графану, мониторится поле: replica_seconds_behind Хм, лезу обратно на реплику, а там сроду нет mysql_exporter. Что же это тогда такое? Копаем вглубь и видим, что node_exporter мониторит папку /tmp на наличие файликов .prom. Ага… То есть метрики с mysql реплики собирает какой-то bash скрипт по крону, генерит текстовичок и отдает в prometheus. Типа такого:
replica_slave_io_running{host="replica"} 1
replica_seconds_behind{host="replica"} 1234567
Да, оно прекрасно работало, до момента пока не вылезла ошибка: Cannot delete or update a parent row Соответственно текстовый файл replica.prom получился в таком формате:
replica_slave_io_running{host="replica"} 1
replica_seconds_behind{host="replica"} Null
Ну а дальше prometheus такое распарсить не смог (он хочет циферки, а не буковки) и тихонечко вывел эту ноду из графаны и вообще отовсюду. Ну и аллерты в придачу. На что им тригериться если ноды нет нигде? Прикол в том, что во время возникновения ошибки, поле Seconds_Behind_Master в mysql принимает значение Null, а не продолжает дальше считать на сколько отстала реплика. А вот и bash скрипт, который собирал метрики:
#!/bin/bash

MAINDIR=/tmp
METRICS=rstatus.prom
HOST="replica"

SLAVE_IO_RUNNING=$(mysql -e 'SHOW SLAVE STATUS \G' | grep 'Slave_IO_Running'| awk '{print $2}')
SLAVE_SECONDS_BEHIND=$(mysql -e 'SHOW SLAVE STATUS \G' | grep 'Seconds_Behind_Master'| awk '{print $2}')

if [[ "$SLAVE_IO_RUNNING" == "Yes" ]]; then
    J=1
    echo 'replica_slave_io_running{host="'$HOST'"}' $J > $MAINDIR/$METRICS
else
    J=0
    echo 'replica_slave_io_running{host="'$HOST'"}' $J > $MAINDIR/$METRICS
fi

echo 'replica_seconds_behind{host="'$HOST'"}' $SLAVE_SECONDS_BEHIND >> $MAINDIR/$METRICS
Работа над ошибками проведена, инцидент разобран. Ни одна жопа на ретроспективе пока не пострадала, но возможно дело времени.
Как писать подобные экспортеры я накидывал в этом посте.
И всегда помни — если изобретаешь велосипед, всегда обрабатывай эксепшены! tags: #devops #debug #bash #monitoring — 🔔 @bashdays

Slack через 12 дней отключит аккаунты российских пользователей – это навсегда. Уход Slack с российского рынка чем-то напомина
Slack через 12 дней отключит аккаунты российских пользователей – это навсегда. Уход Slack с российского рынка чем-то напоминает Доминика Торетто и его “последнюю гонку”. Или закрытие Sunlight. Но тут все серьезно. Лучше не ждать 13 дней, когда Slack заблокирует ваше пространство и удалит все данные, как это случилось с тысячами команд в России. В этот раз не пронесет. Оформить подписку с левого юрлица или оплатить зарубежной картой уже не получится. Лучше заранее перейти на сервисы, которые точно никто не заблокирует. В идеале – развернуть мессенджер на своем сервере, в который можно перенести все ваши данные из Slack. Мы как раз нашли такой – корпоративный мессенжер Compass. Что он умеет: 🔹полный перенос всех данных из Slack в Compass 🔹все к чему вы привыкли в Slack: чаты, треды, реакции 🔹видеоконференции на 500+ участников 🔹интеграции со 100+ сервисами и боты Compass можно использовать как в облаке, так и развернуть на своем сервере. А еще у сервиса открытый исходный код. Попробуйте Compass в деле.

Такс. Вопрос из зала — как через bash скрипт запросить у пользователя пароль, но чтобы при вводе пароля отображались звездочки? На этот счет у меня есть 2 кишки. Выбирай любую понравившуюся. Либо пиши свой вариант в комментариях, будет интересно посмотреть. Кишка первая.
a=''; while read -n 1 -s c; do [ "$c" = '' ] && break; echo -n '*'; a="$a$c"; done
Согласен, выглядит хуёва, но вторая на визуал еще хуёвие. В этой кишке есть нюанс, она НЕ работает с кнопкой Backspace, то есть ты не сможешь отредактировать, то что уже ввел. Кишка вторая.
a=''; while read -n 1 -s c; do [ "$c" = '' ] && break; if [ "$c" = $'\x7f' ]; then [ "$a" != "" ] && { a=${a:0:-1}; printf "\b \b"; }; else echo -n '*'; a="$a$c"; fi; done;
А тут уже более совершенный вариант, с рабочей кнопкой Backspace. Чо делать дальше? Ну логично же, в переменную «a» записывается введенный пароль, а дальше делай с ним все что захочешь. Вот такие пироги! tags: #bash — 🔔 @bashdays

Игнорирование больших данных и нейросетей сегодня — почти гарантия провала. Именно поэтому стоит начать погружение в востребо
Игнорирование больших данных и нейросетей сегодня — почти гарантия провала. Именно поэтому стоит начать погружение в востребованную сферу Data Science и понять, чем занимаются специалисты по машинному обучению и анализу данных. За 5 дней вы узнаете, как работают нейросети, и создадите свою для поиска новостей. 📌 Зарегистрируйтесь прямо сейчас и получите эксклюзивный бонус — гайд «Как пользоваться ChatGPT и Midjourney + 25 полезных нейросетей»: https://epic.st/R-UIR?erid=2VtzqvbBZiQ Что будем делать на мини-курсе: — Узнаем, где востребована наука о данных, и разберёмся в различиях 3 основных направлений — Освоим азы языка Python и визуализируем данные с его помощью — Изучим базовые конструкции языка SQL 🎁 Вас ждут подарки: — Год бесплатного изучения английского языка — Персональная карьерная консультация — 5 полезных чек-листов для старта карьеры 🎉 Все участники мини-курса получат сертификат на скидку 10 000 рублей на любой курс Skillbox. Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880

Здрасти. Существуют самописные скрипты, которые при запуске устанавливают необходимый набор программ. Этакая автоматизация на коленке, быстро, удобно, никаких ансиблов и паппетов. Но встает вопрос, а как автоматизировать перезагрузку машины например при обновлении ядра, патчей или какого-то хитровыебанного софта? Добавить в скрипт reboot на каждую команду? Да не, хуйня какая-то. Тут на помощь приходит reboot-required. Ща покажу. Есть однострочник:
apt update && apt -fy upgrade && [ -f /var/run/reboot-required ] && shutdown -r now
Первая часть понятна, обновили, апгрейднули, а дальше идет магия. В квадратных скобках конструкция, которая проверяет наличие файла /var/run/reboot-required и если он есть, то выполняется перезагрузка. Файл reboot-required создается, если система считает, что после обновления требуется перезагрузка. Если файл существует, возвращается true. А если true, то запускается -r = reboot. Вот и вся наука. Изучай… tags: #bash #linux — 🔔 @bashdays

Выходные заебись! Сумма значений со стандартного ввода, или из файла. ➡️ Datamash
seq 1000 | datamash sum 1  
datamash sum 1 < <(seq 1000)
➡️ Awk
seq 1000 | awk '{sum += $1}END{print sum}'  
awk '{sum += $1}END{print sum}' <(seq 1000)
➡️ Dc
seq 1000 | dc -e '0d[?+2z>a]salaxp'  
dc -e '0d[?+2z>a]salaxp' < <(seq 1000)
Последнее решение самое занимательное. И самое небезопасное, потому, что данные управляют программой. Вообще во всех трёх случаях очень желательно очищать входные данные. Почитать:
man datamash  
man seq  
man awk  
man dc
Да будет так! tags: #bash — 🔔 @bashdays

Так, пора закончить с этими картами. Короче, представляем ситуацию, что тебя нахуй уволили или не заплатили, а ты еще тот зло
Так, пора закончить с этими картами. Короче, представляем ситуацию, что тебя нахуй уволили или не заплатили, а ты еще тот злой гений. Задача — нужно применить все свои навыки заподлостроения в инфраструктуре и знатно усложнить жизнь этим гадам. У тебя есть root доступ ко всему и ты отрабатываешь две недели. Условия — на тебя не должны подумать и взять за жопу. Пиши в комментарии свой гениальный план. Чей коммент наберет больше реакций, тому и карты в руки. Писать нужно не в чатик! А нажав кнопку под постом, это важно. Ну и условия розыгрыша я кидал ранее. Итоги подведем в следующую пятницу. Доставка по РФ и Беларусь. Пару колод отдадим вторым и третьим местам, но нужно будет подождать, на руках у меня их щас нет. Там ченить придумаем. Но если прям чешется, можешь заказать у Кати через Авито. Погнали сочинять! Может в будущем кто-то и воспользуется твоим гениальным планом 🥳

🚜 Синий трактор едет к нам Этот пост изобилует грубыми выражениями и, в силу своего содержания, вообще не предназначен для п
🚜 Синий трактор едет к нам Этот пост изобилует грубыми выражениями и, в силу своего содержания, вообще не предназначен для просмотра лицам с хрупким душевным миром. Про Gitlab! Заебали блядь, мне чо каждый день это гавно обновлять? Ладно бы там нажал кнопку как в wordpress и забыл. А нет, надо хуеву гору телодвижений сделать. И в 100% эта залупа с первого раза никогда не заводится, то миграции ручками надо запускать, то еще 10 версий предыдущих накатить и молиться. В прошлый раз вообще пришлось пайплайны переписывать, поломали совместимость.
Либо хуй пополам, либо пизда в дребезги, другого не дано.
А еще соль, что при обновлении мне приходится параллельно поднимать клон сервера, на случай если обновка сделает мозги, можно будет на старую версию переключиться. Удобство через край… И на закуску фаталити — обновку накатывать нужно поздно ночью, либо в выходные, когда разработчики в режиме AFK. Хуита какая-то! Можно и в будни, но заебут вопросами — а когда заработает?
Короче я такие апдейты на хую Лунтика вертел.
Хоть отдельного человека нанимай, чтобы каждый день обновки катил в три часа ночи. Что я буду с этим делать? НИЧЕГО! Пусть нахуй всё взламываеют и пиздят, заебали! Пардон. Накипело! ps: так, мне еще вам конкурс придумывать сегодня, так что чуть позже увидимся, пойду успокоительное пить да Зельду на свиче задрачивать. tags: #рабочиебудни — 🔔 @bashdays

ЕНОТ ищет таланты Одна из самых масштабных серверных инфраструктур в России ЕНОТ от VK ищет талантливых разработчиков и SRE,
ЕНОТ ищет таланты Одна из самых масштабных серверных инфраструктур в России ЕНОТ от VK ищет талантливых разработчиков и SRE, готовых работать с облачными хранилищами и базами данных, облачным решением one-cloud, а также системами метрик и мониторинга. Присоединяйтесь!

🔥 Кишочки. Короче познавательное. В документации для команды eval довольно пространное описание. Давай сегодня с ней поковыряемся. Прежде чем выполнить какой-то код, интерпретатору требуется обработать его. Нужно найти команду, аргументы, различные перенаправления. Расширить параметры, фигурные скобки, тильда, переменные подстановка результатов выполнения команд, математика, арифметика, география, литература, подстановка имен файлов и т.п. Короче дохера всего. Полный список можешь найти в разделах SIMPLE COMMAND EXPANSION и EXPANSION выполнив:
man 1 bash
Ну дак вот, команда eval запускает эту обработку кода. Но прежде чем команда eval будет запущена, код должен быть обработан. На вход eval попадает код, который уже обработан и прошел проверку. Поэтому получается, что код обрабатывается два раза и только после этого выполняется. Очевидно? Совсем нет. Но вот оно так работает, чо с него взять. Эта возможность используется по-разному, например для генерации и последующего исполнения кода. Также если знать некоторые последовательности обработки кода, можно сгладить некоторые особенности самой обработки. Ниже примеры. При присваивании значения переменной, приведенная конструкция с фигурными скобками не расширяется. Расширение переменной в строке с командой echo происходит гораздо позже, чем расширение фигурных скобок. Поэтому используем eval. Первая обработка развернет переменную. Вторая, которая запустит eval, развернет конструкцию с фигурными скобками.
str={1..10}   
echo $str
eval echo $str
В результате получим:
{1..10}
1 2 3 4 5 6 7 8 9 10
Другой пример. Здесь из-за использования одинарных кавычек, переменной присваивается указанная строка, а не значение переменной. И обработка строки делает расширение переменной один раз. Получаем значение переменной s0. Количество обработок строки равно количеству eval плюс один.
(s0=100 ; s1='$s0' ; s2='$s1' ; echo "$s2")
(s0=100 ; s1='$s0' ; s2='$s1' ; eval echo "$s2")  
(s0=100 ; s1='$s0' ; s2='$s1' ; eval eval echo "$s2")
На экране ты увидишь:
$s1
$s0
100
А теперь более сложный пример. Если слева от оператора перенаправления указана не корректная строка, в этом случае для перенаправления будет использована только часть строки, всё что находится слева не будет учитываться. Это значит, что если ты откроешь файл на чтение и слева укажешь переменную содержащую нужный дескриптор, эта переменная не будет участвовать в перенаправлении. И раз не указан дескриптор, файл будет ассоциирован со стандартным потоком ввода. Решение. Делаем так, чтобы при первой обработке перенаправление было распознано как обычная строка и была расширена переменная. Тогда на второй обработке слева от оператора перенаправления будет стоять номер дескриптора из переменной.
(fd=6 ; exec "$fd"</dev/null) 
(fd=6 ; eval exec "$fd</dev/null")  
(fd=6 ; eval exec "$fd"\</dev/null)  
(fd=6 ; eval exec "$fd"'</dev/null')
В первой строке: /dev/null на stdin и пытается запустить 6. Круглые скобки использовались, чтобы не засорять текущую оболочку. И чтобы она не завершилась на первом примере. Из-за того что на её стандартный ввод повесили /dev/null. Проверяем какой дескриптор ассоциирован с устройством /dev/null.
bash -c 'shopt -s execfail ; fd=6 ; exec $fd</dev/null ; ls -l /proc/$$/fd'  
bash -c 'shopt -s execfail ; fd=6 ; eval exec $fd\</dev/null ; ls -l /proc/$$/fd'  
bash -c 'shopt -s execfail ; fd=6 ; eval exec "$fd</dev/null" ; ls -l /proc/$$/fd'
Этот «хак» с перенаправлением можно использовать для исследований. Когда требуется определённый диапазон дескрипторов. Почитать: man 1 bash, разделы:
# REDIRECTION  
# SHELL BUILTIN COMMANDS -> eval  
# SHELL BUILTIN COMMANDS -> exec  
# SHELL BUILTIN COMMANDS -> shopt
А завтра запускаем конкурс с картами. Моя ленивая жопа соизволила добраться до почты. Хороших выходных! tags: #bash — 🔔 @bashdays