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 792 名订阅者,在 技术与应用 类别中位列第 5 701,并在 俄罗斯 地区排名第 28 128

📊 受众指标与增长动态

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

根据 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),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

23 792
订阅者
-524 小时
-277
-20230
帖子存档
Сегодня разберем, чем отличаются различные циклы при работе с файлами.
#!/bin/bash
seq 1 5 >file.txt

for i in $(<file.txt);do
  echo $i
  read -p 'press ENTER'
done
echo ---
while read i;do
  echo $i
  read -p 'press ENTER'
done <file.txt
rm file.txt
#--
Сохраняем в файл loop3.sh
chmod +x loop3.sh
Создаем файл из пяти нумерованных строк.
seq 1 5 > file.txt
Блок for: читаем файл, и выводим построчно. После каждой строки жмем ENTER для продолжения. Блок while - тело цикла - один в один. Запускаем: ./loop3.sh
1
press ENTER
2
press ENTER
3
press ENTER
4
press ENTER
5
press ENTER
---
1
3
5
Часть срок второго цикла потерялась. ENTER нажимать никто не просил. Все дело в том, что циклы работают принципиально по-разному. Цикл for in сначала вычисляет/считывает все значения для перебора в память, потом начинает с ними работать. Цикл while(until) читает последовательно, по одному значению. Мало того в данном случае цикл работает НЕ С ФАЙЛОМ НАПРЯМУЮ, а с stdin, (куда мы перенаправляем файл) поэтому любое чтение stdin приводит к чтению записи файла. Результат вы видели. Продолжение следует... tags: #bash © by Tagd Tagd — 🔔 @bashdays➡️ @gitgate

Repost from Selectel Newsfeed
Экономьте время и деньги с Selectel 🔽 Давно хотели воспользоваться услугами Selectel? Сейчас самое время, потому что у нас м
Экономьте время и деньги с Selectel 🔽 Давно хотели воспользоваться услугами Selectel? Сейчас самое время, потому что у нас много выгодных предложений! Собрали для вас актуальные акции: ♦️ Аукцион выделенных серверов Популярные конфигурации выделенных серверов становятся дешевле в реальном времени. Успейте их арендовать по выгодным ценам. ♦️ -10% на выделенный сервер на год Зарезервируйте сервер на год и платите меньше каждый месяц. ♦️ Распродажа выделенных серверов Арендуйте сервер прошлого поколения со скидкой до 25%. ♦️ Кешбэк 100% на PaaS-сервисы Получите кешбэк за первый месяц использования Managed Kubernetes или облачных баз данных. ♦️ 100% кешбэк за использование объектного хранилища S3 Арендуйте объектное хранилище и получайте кешбэк до 1 000 000 ₽ в течение трех месяцев. ♦️ Миграция в объектное хранилище Получите миграционные каникулы. ​​Хранение и входящие запросы в объектном хранилище — бесплатно на время переезда. ♦️ Бесплатный переезд в Selectel Оставьте заявку до 31 августа — мы проведем аудит, подберем инфраструктуру, перенесем ваши проекты, проследим за работой сервисов и компенсируем первый месяц аренды облачного сервера. Получайте выгоду с Selectel уже сейчас! Реклама. erid: 2VtzquuKinq АО Селектел

- Ты такой душный... - Не могли бы вы поподробнее разъяснить мне, в чём конкретно это выражается?
AMD E1-6010 6Gb Swap 0 Сегодня будем собирать пенки на кабачковой икре и протестируем несколько циклов. Скрипт для тестирования циклов. Каждый цикл выводит два числа. Первое - число секунд от начала цикла до вывода первого значения. Второе - число секунд длительности цикла. Если решите перетестировать у себя - обратите внимание, что в циклах FOR0 и GAWK число итераций прописаны константами. В остальных - через переменную MAX. Меняйте синхронно. Выводы будут в конце. Рекомендую рассмотреть код. Может найдете для себя что-то новое. Да, у некоторых циклов обратный порядок. Это для случаев, когда переменная цикла не используется, а важно количество итераций.
#!/bin/bash
declare -i MAX=5000000
declare -i MA1=MAX+1
declare -i Z0=0
declare -i Z1=1
declare -i P
declare LOG=./log.txt
declare LOOPNAME

clear
LOOPNAME=FOR0
P=0
SECONDS=0
for i in {1..5000000};do
  if [[ $P -eq 0 ]];then
    echo $LOOPNAME $SECONDS
    P=1
  fi
done
echo $LOOPNAME $SECONDS

LOOPNAME=FOR1
P=0
SECONDS=0
for i in $(seq $Z1 $MAX);do
  if [[ $P -eq 0 ]];then
    echo $LOOPNAME $SECONDS
    P=1
  fi
done
echo $LOOPNAME $SECONDS

LOOPNAME=FOR2
P=0
SECONDS=0
seq $Z1 $MAX|for i in $(</dev/stdin);do
  if [[ $P -eq 0 ]];then
    echo $LOOPNAME $SECONDS
    P=1
  fi
done
echo $LOOPNAME $SECONDS

LOOPNAME=FOR3
P=0
SECONDS=0
for ((i=$Z0;i++<$MAX;));do
  if [[ $P -eq 0 ]];then
    echo $LOOPNAME $SECONDS
    P=1
  fi
done
echo $LOOPNAME $SECONDS

LOOPNAME=FOR4
P=0
SECONDS=0
for ((i=$MAX;i--!=0;));do
  if [[ $P -eq 0 ]];then
    echo $LOOPNAME $SECONDS
    P=1
  fi
done
echo $LOOPNAME $SECONDS

LOOPNAME=FOR5
P=0
SECONDS=0
for ((i=$Z1;i<$MA1;i++));do
  if [[ $P -eq 0 ]];then
    echo $LOOPNAME $SECONDS
    P=1
  fi
done
echo $LOOPNAME $SECONDS

LOOPNAME=WHL0
P=0
i=$Z0
SECONDS=0
while ((i++<$MAX));do
  if [[ $P -eq 0 ]];then
    echo $LOOPNAME $SECONDS
    P=1
  fi
done
echo $LOOPNAME $SECONDS

LOOPNAME=WHL1
P=0
i=$MAX
SECONDS=0
while ((i--));do
  if [[ $P -eq 0 ]];then
    echo $LOOPNAME $SECONDS
    P=1
  fi
done
echo $LOOPNAME $SECONDS

gawk 'BEGIN{p=0
  for(i = 1;i < 5000000;i++){
    if(p==0)
     print "GAWK 0";p++}
  }'

gawk 'BEGIN{t=systime();p=0
  for(i = 1;i < 5000000;i++){
    if(p==0){
      print "GAWK " systime()-t;p++}
  }
print "GAWK "systime()-t}'
FOR0 14 FOR0 76 FOR1 11 FOR1 72 FOR2 10 FOR2 53 FOR3 0 FOR3 97 FOR5 0 FOR5 103 WHL0 0 WHL0 100 WHL1 0 WHL1 78
--- Я немного отделил, поскольку gawk не совсем bash, но привел для примера.
GAWK 0 GAWK 2 (тут реально 1.6) но баш оперирует целыми.
Выводы: 1. Самый быстрый - FOR2 for in (seq) 2. Самый медленный - FOR5 (сишный классический) 3. Несмотря на небольшие разницы в скорости выполнения скорость циклов соизмерима. 4. Циклы for in - ВНАЧАЛЕ получают полный список значений (в памяти) потом быстро его перебирают. 4.1 Эти циклы жрут больше памяти, в случае нахватки - может быть критическая потеря производительности при использовании swap. 4.2 У этих циклов может быть большая задержка на инициализацию цикла. Это может быть критичным - если сам цикл большой, но очень часто происходит прерывание цикла в самом начале. 5. awkgawk самый медленный awk) значительно быстрее bash. Если скорость в приоритете - используйте его. 6. Цикл FOR0 вообще нежелательно применять, постокольку пределы цикла и инкремент нельзя задать переменными. только константы. Но сам конструкт {1..5} применять можно и даже нужно в подстановках (но не циклах). Например: ls text{9..27}.txt. 7. Главное помнить, что скорость выполнения определяется не скоростью самого цикла, а оптимизацией его тела. Продолжение следует... tags: #bash © by Tagd Tagd — 🔔 @bashdays➡️ @gitgate

💻 Создаете веб-приложения? На Positive Tech Day в Санкт-Петербурге вы узнаете, как можно обеспечить их безопасность еще на р
💻 Создаете веб-приложения? На Positive Tech Day в Санкт-Петербурге вы узнаете, как можно обеспечить их безопасность еще на ранних этапах разработки. Встречаемся 5 сентября на AppSec Track, во время которого эксперты Positive Technologies расскажут, как повысить качество кода, сократив число уязвимостей в нем, и поделятся самыми важными темами из сферы кибербезопасности. ☁️ Какие новые возможности открываются для разработчиков на основе облачных технологий? 🖥 Какие инструменты необходимы для проверки безопасности веб-приложений? 👣 Можно ли обнаружить следы побега из контейнера? Ответы — на Positive Tech Day. Регистрируйтесь заранее на сайте, количество мест ограничено!

Практика, которая увеличит твою пенсию в 3 раза! Есть такая практика «Помодоро», в общем это когда ты 25 минут усердно работаешь, потом 5 минут отдыхаешь и так по кругу. Практика так сказать — ХУЙНЯ ПОЛНАЯ. Но если критикуешь, предлагай! Оказывается давным-давно я случайно изобрел свою практику, которую в шутку назвал «Тюленинг». Суть этой практики полная противоположность «Помодоро». То есть ты работаешь 5 минут и 30 минут отдыхаешь, повторяешь до бесконечности. В чем плюсы «Тюленинга»? Главная киллер фича — спустя пару часов нихуя не делания тебе становится скучно и возникает желание поработать. Это желание обычно появляется внезапно. Либо не появляется, тогда практикуешь «тюленинг» дальше. И как только появилось желание, беги за комп и пили таски. Твой KPI будет прокачен на 100500%, мозг раскочегарен на азарте и в жопе будет приятный зуд. Двухнедельный спринт закроешь буквально за полчаса. Без хуйни! Думаешь это прикол такой? Неа! Сегодня лично провел эксперимент, практика работает — идеально! В общей сложности я провалялся часов 8 + 30 минут ушло на работу + три раза пообедал. Завтра обязательно повторю! Попробуй, тебе понравится! #рабочиебудни — 🔔 @bashdays➡️ @gitgate

Приглашаем на митап «DevOps – новый подход в разработке» от ПСБ! 🗓 31 августа в 12:00 📍 Онлайн На митапе обсудим актуальные
Приглашаем на митап «DevOps – новый подход в разработке» от ПСБ! 🗓 31 августа в 12:00 📍 Онлайн На митапе обсудим актуальные инструменты, тенденции и перспективы развития DevOps, особенно в условиях импортозамещения. Вы узнаете, как эффективно автоматизировать процессы и внедрять лучшие практики. Спикеры от ПСБ: 🔸 «Serverless: новый путь в разработке» – Лев Немировский 🔸 «Перенос распределенного монолита из одной CI-системы в другую» – Петр Галонза 🔸 «Почему у нас своё железо» – Александр Татаринцев Спикеры от партнеров ПСБ (тема будет объявлена позже) выступят с докладами, завершит мероприятие Клуб DevOps, где участники смогут обсудить актуальные вопросы и проблемы. Зарегистрироваться: https://cnrlink.com/psbmeetupbashd Реклама. ПАО "Промсвязьбанк". ИНН 7744000912. erid: LjN8KKkk5

Ха! Не ждали? Ща будет кринж, но кринж просветит тех, кто глубоко копается в жопах линукса. Ну а если решил провести выходной на изи, оно нахуй тебе не всралось. Короче... У кодировки ASCII есть особенность:
a -> 01*1*00001  A -> 01*0*00001
b -> 01*1*00010  B -> 01*0*00010
c -> 01*1*00011  C -> 01*0*00011
d -> 01*1*00100  D -> 01*0*00100
e -> 01*1*00101  E -> 01*0*00101
f -> 01*1*00110  F -> 01*0*00110
g -> 01*1*00111  G -> 01*0*00111
h -> 01*1*01000  H -> 01*0*01000
i -> 01*1*01001  I -> 01*0*01001
j -> 01*1*01010  J -> 01*0*01010
k -> 01*1*01011  K -> 01*0*01011
l -> 01*1*01100  L -> 01*0*01100
m -> 01*1*01101  M -> 01*0*01101
n -> 01*1*01110  N -> 01*0*01110
o -> 01*1*01111  O -> 01*0*01111
p -> 01*1*10000  P -> 01*0*10000
q -> 01*1*10001  Q -> 01*0*10001
r -> 01*1*10010  R -> 01*0*10010
s -> 01*1*10011  S -> 01*0*10011
t -> 01*1*10100  T -> 01*0*10100
u -> 01*1*10101  U -> 01*0*10101
v -> 01*1*10110  V -> 01*0*10110
w -> 01*1*10111  W -> 01*0*10111
x -> 01*1*11000  X -> 01*0*11000
y -> 01*1*11001  Y -> 01*0*11001
z -> 01*1*11010  Z -> 01*0*11010
Строчные и заглавные отличаются только шестым битом. Ну и для изменения регистра достаточно поменять этот бит.
Звёздочками я выделил эту хуйню, чтобы тебе все прозрачно было.
Давай установим его, например в 0 или 1:
printf '%b %b\n' $( printf '\\%03o \\%03o' 65 $((65 ^ 32)) )  
printf '%b %b\n' $( printf '\\%03o \\%03o' 97 $((97 ^ 32)) )

printf '%s\n' $((65 ^ 32))  
printf '%s\n' $((97 ^ 32))
Нихуясе? Да! Позырить таблицу ascii: man ascii А для изменения регистра в баше есть удобные конструкции:
( a='abc'; echo "${a^}" )   
( a='ABC'; echo "${a,}" )  
( a='abc'; echo "${a^^}" ) 
( a='ABC'; echo "${a,,}" )  
Эти команды в скобках запускаются в подоболочке, чтобы не гадить в текущее окружение самой оболочки. Но ты это и так прекрасно знаешь 🥳 Да будет так! tags: #bash #linux — 🔔 @bashdays➡️ @gitgate

Горизонт Выходные заебись, никто не срёт в голову, все копят таски до понедельника и отдыхают... Потому что работая в найме ты видишь горизонт (пятницу), а дальше ебутся блохи в суматохе! Но стоит тебе выйти из найма и начать своё дело, выходные дни странным образом «смещаются», ну как смещаются, ты уже не видишь горизонта событий до которого тебе нужно дойти, ты видишь какой-то кусок земли и лопату в руках. А дальше ты либо копаешь, чтобы найти свой кусок золота и прокормить своё поселение, либо прокрастинируешь (маешься хуйнёй) и просираешь всё под забором. Всегда было интересно когда учителя в школе говорили — ты закончишь под забором. Ты будешь продавать пирожки на базаре. Под каким блядь нахуй забором? Где ХУЙ написан? А пирожки я люблю, особенно на базаре! WTF??? Эт я к чему, если решил копать — не бросай, даже если каждый первый тебе говорит — что ты дурной пизды ребёнок… Всё у тебя получится, просто копай дальше и не останавливайся! Получится! Равновесие мира. Балансировка нагрузки. А кто дохуя пиздит и сеет в тебе сомнения, пусть идут — нахуй! tags: #рабочиебудни — 🔔 @bashdays

Как собрать все логи в один. Иногда возникает задача найти что-то в логах ручками, без установки анализаторов логов. Логов может быть много, некоторые сжатые - некоторые нет. Для работы со сжатыми файлами есть утилиты, начинающиеся на z. zcat, zgrep, zdiff... ls -/bin/z* в помощь. Для сборки логов в один я написал простой скрипт. Он выдает в stdout все логи, в порядке создания, сжатые разжимаются.
#!/bin/bash

test -z "$1" && echo "need log file" && exit

declare EXT=gz

for CUR_LOG in $(ls -tr "$1"*);do
  PREFIX=z
  if [[ "${CUR_LOG##*.}" != "$EXT" ]];then 
    PREFIX=
  fi
  ${PREFIX}cat ${CUR_LOG}
done
Сохраняем его в файл sumlog.sh делаем файл исполняемым:
chmod +x sumlog.sh
sudo ./sumlog.sh /var/log/apache2/access.log
Лог файл без индексов и архивных расширений. Поскольку скрипт очень простой, метод написания я выбрал максимально извращенный. :-) declare EXT=gz - сжатый файл. ls -tr "$1"* спиcок файлов, отсортированный по времени (-t), в порядке убывания (-r) Если у файла расширение не gz, то используем утилиту cat, если gz - zcat А дальше обрабатывать вывод можно как угодно:
sudo ./sumlog.sh /var/log/apache2/access.log|grep ...
sudo ./sumlog.sh /var/log/apache2/access.log|awk ...
sudo ./sumlog.sh /var/log/apache2/access.log|sed ...
UPD: Тут пользователь Кирилл Катаевский (@rosskk) подсказал, как можно упростить:
#!/bin/bash
test -z "$1" && echo "need log file" ||zcat -f $(ls -tr "$1"*)
tags: #bash © by Tagd Tagd — 🔔 @bashdays

В новом выпуске подкаста ребята из Сравни подробно обсудили, кто такой DevOps в 2024 году. С Кириллом Карелиным, лидом DevOps
В новом выпуске подкаста ребята из Сравни подробно обсудили, кто такой DevOps в 2024 году. С Кириллом Карелиным, лидом DevOps-команды, рассмотрели разные аспекты темы: от типовых задач, скиллов и инструментов девопса до глобального значения этой роли в процессах разработки. Кирилл рассказал о специфике модели «инфраструктура как код», объяснил, в чем российские облачные провайдеры отстают от западных коллег и почему потребность компаний в железных серверах не теряет актуальности. А еще поделился советами по развитию в профессии и полезной литературой. Посмотреть или послушать подкаст можно здесь: ✅YouTubeRUTUBEЯндекс Музыка Реклама. ООО «Сравни.ру» ИНН: 7710718303, erid: 2VtzqvZH43w

У меня еще осталась пара тем по ssh, но пока отдохните, наберитесь сил... Я тут решил протестировать циклы for и поделиться результатами.
for ((i = 0 ; i < 100 ; i++)); do
    echo $i
done
Годный цикл. Главное логичный и понятный.
for i in {1..3}; do
    echo $i
done

# или его расширенная версия с шагом

for i in {50..5..-5}; do
    echo $i
done
Возможно построение циклов с нарастанием и убыванием. Циклы не допускают подстановки переменных в параметры цикла!!! Чистый башизм. Не рекомендую.
for i in $(seq 1 10); do
   echo $i
done
У разработчиков seq странная логика.seq [OPTION]... FIRST INCREMENT LAST. INCREMENT в средине!!! Несмотря на логику рекомендую.
IFS=$'\n'
for i in $(cat /etc/passwd); do
   echo $i
done
Годный цикл для построчного чтения файла, но нужно помнить про разделитель IFS.
for i in "./space test/"*; do
    echo $i
done
Годный цикл для перебора файлов, обратите внимание путь в кавычках, а звездочка - нет.
for i in 5 9 8 3;do
  echo $i
done
Годный цикл с перечислятельством, для не очень больших количеств.
echo 1 2 3|for i in $(</dev/stdin);do
  echo $i
done
Если цикл не работает - верните IFS=" " Тройка упоротых конструкций:
for ((a=0,b=9;a<10;a++,b--));do
   echo $a,$b
done

for ((a=1;a<2000;a+=a));do
  echo $a
done

for i in $(j=10;while ((j--));do echo $j;done);do
   echo $i
done
Последнюю сам придумал. Можно вообще на собесах применять с предложением упростить или объяснить. Продолжение следует... © by Tagd Tagd tags: #bash — 🔔 @bashdays

🔥 Используешь Nginx? Тогда узнай об Angie и его возможностях для своих проектов! 👨‍🚀Спикер Николай Лавлинский - опытный ра
🔥 Используешь Nginx? Тогда узнай об Angie и его возможностях для своих проектов! 👨‍🚀Спикер Николай Лавлинский - опытный разработчик, руководитель, преподаватель и автор каналов «Ускорение сайтов» и «Поддержка сайтов». Расскажет, основные отличия Angie — форка Nginx, чем он может быть интересен и как быстро перевести проект на этот продукт. Открытый урок нужен как воздух для администраторов Linux, веб-разработчиков и всех, кто использует Nginx в проектах. 👉 Приходи 29 августа в 19:00 : https://clck.ru/3Cjfzz Пройдя курс Администрирование Nginx/Angie, вы сможете: 1️⃣ Настраивать Angie и Nginx как фронт веб-серверы для любых приложений. 2️⃣ Оптимизировать серверную и клиентскую производительность. 3️⃣ Конфигурировать балансировщики нагрузки L4 (TCP, UDP) и L7 (HTTP/HTTPS). 4️⃣Управлять логированием и оптимизировать HTTPS-соединения. 5️⃣Работать с модулями вещания для видео-сервисов. И многое другое: https://clck.ru/3Cjfzz Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru, erid: 2VtzqvmAx8V

Любишь линукс? А готов ли ты сыграть в опасную игру? У тебя будет всего лишь одна попытка и как только ты ошибешься, придется знатно поебаться. Поэтому прежде чем что-то сделать в консоли — подумай, а правильно ли ты ввел команду и готов ли ты поставить на карту всё самое дорогое? Если готов всё потерять, запускай:
docker run --rm -it -v /:/host tiagoad/suicide-linux
Я проиграл спустя пару секунд и по настоящему проебал всё! Но испытал непередаваемое чувство радости и свободы. Вот и повод пересесть на 24.04. Вообще забавно получилось!
И сегодня я уже не работаю, благо я запустил это в wsl. Пойду искать бекапы, где-то они у меня вроде были. Рискнешь? Пиши в комменты, сколько тебе удалось продержаться и какую бурю эмоций ты испытал. Все еще любишь линукс? Вечный холивар, какой дистрибутив выбрать. Ответ однозначный - Suicide Linux! Он тебя дисциплинирует, с ним ты выйдешь на новый уровень и преисполнишься. Рекомендую потыкать, но будь осторожен, сапёр ошибается только один раз. Страница проекта: https://github.com/tiagoad/suicide-linux tags: #linux — 🔔 @bashdays

Превратить себя в сервис, заставить разработчиков думать одинаково, и откатывать миграции БД Изучаем навыки DevOps в большой
Превратить себя в сервис, заставить разработчиков думать одинаково, и откатывать миграции БД Изучаем навыки DevOps в большой компании на новом митапе от РСХБ.цифра при поддержке JUG Ru Group. 📍Онлайн и офлайн в Москве 📆 29 августа в 18:00 (МСК, GMT+3) В программе: ✔ Василий Куценко (Почтатех) — «Секреты успешного DevOps as a Service: Опыт и рекомендации» ✔ Константин Белкин (РСХБ.цифра) — «Как внедрить CI/CD для всех разработчиков в банке. CI/CD by App.Farm» ✔ Алексей Романов (IT Enduro) — «Деплой и откат приложения и миграций БД» 🎁 Участников ждут подарки. Организаторы подготовили призы за лучшие вопросы спикерам и розыгрыш мерча среди тех, кто оставит отзыв после митапа. Для участия нужно зарегистрироваться. ❗️Количество мест в офлайне ограничено. Реклама. Фонд «Сколково». ИНН 7701058410

Спешу напомнить, кто очень хотел, но проебал все полимеры, у вас осталось 2 недели до дедлайна. Подробности тут: https://t.me
Спешу напомнить, кто очень хотел, но проебал все полимеры, у вас осталось 2 недели до дедлайна. Подробности тут: https://t.me/bashdays/504 А кто заявки подавал и пропал — вы письки! Вам отдельный тариф выкачу если передумаете, время только зря потратил занося вас в табличку. Могли бы хоть что-то ответить, подход у вас конечно моё почтение. Забавно Забаню наверное. Но уже завтра.

А давай потрясём cиськами с помощью Bash! Я думаю этот пост должен здесь быть, а постарался наш внештатный корреспондент Tadg Tadg. Погнали 👇 Сегодня разберем потрясный скрипт. Не в том смысле, что классный. Просто он трясет сисками при выполнении длительных операций (копирование, загрузка, синхронизация). Я когда-то видел что-то подобное, но найти не смог и пришлось писать свой. Вообще-то я против «красотулек», но кому-то нравится... Сохраняем его в файл tits.sh и проверяем:
chmod +x tits.sh

# демо:
./tits.sh
# тест:
./tits.sh 7z b
Собственно скрипт:
#!/bin/bash

declare -r LOG=$(mktemp)
declare -r BS='\b\b\b\b\b\b\b'
declare -r SPC='       '
trap 'echo
      tput cnorm
      test -f "$LOG" && cat "$LOG" && rm "$LOG"
      exit ' INT TERM HUP QUIT EXIT ERR
tput civis
CMD="$@"
test -z "$CMD" && CMD='sleep 10'
function TITS(){
  declare N P T=${1:-21}
  case "${T:0:1}" in
    1) N='(.)';;
    2) N='(o)';;
    *) N='(*)';;
  esac
  case "${T:1:1}" in
    1) P=${N}${N}' ';;
    2) P=${N}' '${N};;
    *) P=' '${N}${N};;
  esac
  echo -n "$P"
}
$CMD > "$LOG" 2>&1 &
PID=$!
echo -n "$SPC"
while :;do
  for i in 21 12 23 33 23 12 21 31;do
    echo -en $BS 
    TITS  $i
    ps -q "$PID" > /dev/null 2>&1 ||  exit
    sleep .3
  done
done
#--
Разбор скрипта: LOG=$(mktemp) - создать лог в темповом каталоге BS='\b\b\b\b\b\b\b' - забои для перемещения в начало строки (число равно размеру сисек в символах) SPC=' ' - пробелы, для очиски сисек (число то же) Поскольку используется темповый файл, пишем правильно. trap INT TERM HUP QUIT EXIT ERR - Перехват сигналов, (последние два - башизм) echo - перевод строки после сисек tput cnorm - включение курсора test -t "$LOG && "cat "$LOG" && rm "$LOG" - вывод на экран лога и его удаление (при наличии). tput civis - гашение курсора test -z "$CMD" && CMD='sleep 10' - если параметры скрипта не заданы - запускаем паузу 10 сек function TITS() - входной параметр двузначное число, где десятки - форма соска, единицы - положение declare N P T=${1:-21} - описываем локальные переменные. Если входной параметр не задан, используется 21 case "${T:0:1}" ... esac - задаем форму соска case "${T:1:1}" ... esac - задаем положение echo -n "$P" - выводим сиськи, без перевода строки. Кстати, интересная особенность echo $P. Если переменная P содержит пробелы в начале и конце - они отбрасываются! Если пробелы важны - нужно использовать "$P" $CMD > "$LOG" 2>&1 & - запуск команды фоном, с выводом stdout и err в лог PID=$! - запомнили PID запущенного процесса echo -n "$SPC" - перед печатью сисек старые очищаются, чтобы было что очищать - печатаем пробелы. while :;do - бесконечный цикл for i in 21 12 23 33 23 12 21 31 - анимация echo -en $BS - очищаем старый вывод (используем ESC-символы, без перевода строки) TITS $i - печатаем сиськи ps -q "$PID" > /dev/null 2>&1 || exit - проверяем не закончился ли фоновый процесс sleep .3 - пауза 0.3 секунды Вообще-то можно было бы обойтись буквально одним циклом... Но нужно же и учится. Даже на сиськах.
man tput mktemp signal ps help trap declare https://cheatsheets.zip/bash
Надеюсь тема сисек раскрыта. Всем добра. Tagd tags: #bash — 🔔 @bashdays

Какие перспективы у квантовых компьютеров? Часто слышим, что вскоре квантовые компьютеры смогут взломать RSA-шифрование. Многие уже пробовали писать код на Qiskit и ждут запуска на реальном оборудовании. Сегодня квантовые компьютеры решают задачи вроде факторизации чисел, моделирования молекул и оптимизации. Но примеры «квантового преимущества» пока далеки от реальных кейсов. Хотя число кубитов стабильно растет. Будет ли квантовый компьютер полезен бизнесу в ближайшее время? На ИТ-пикнике об этом говорил спикер облачного провайдера Cloud․ru. Вот ключевые советы от Михаила Ремнева, аналитика-исследователя из R&D-команды Cloud․ru: 😶‍🌫️Фокусироваться на прикладных задачах, а не на кубитах; 😶‍🌫️Сравнивать с традиционными методами; 😶‍🌫️Следить за новостями и мнениями экспертов; ➡️Подписывайтесь на Cloud․ru Tech, чтобы быть в курсе трендов в облаках и AI. Erid 2VfnxvbKy4c

На пути к умноватому дому напишем простой ip watchdog на баш. Будем мониторить наличие интернета и перезапускать роутер, если он "завис".
#!/bin/bash
declare -i COUNTER=0
declare -r P=1m # задержка между пингами или циклами

function EXECUTE(){ echo $COUNTER Need execute ; }

while :;do
  COUNTER+=1
  for LNK in "ya.ru" "youtube.ru" "list.ru" "vk.com" "8.8.8.8" \
             "2ns.info" "aliexpress.com" "yandex.ru" "77.88.8.8" "ozon.ru" \
             "8.8.4.4" "gmail.com" "mail.ru" "ok.ru" "youtube.com";do
    ping -c1 -w2 $LNK > /dev/null 2>&1 
    if [[ $? -eq 0 ]];then
      COUNTER=0
      sleep $P
    fi
  done

  case $COUNTER in
    0) continue;;
    2|5|10|15|20|40|60|90|120|180|300) EXECUTE;;
    600) COUNTER=300; EXECUTE;;
  esac
  sleep $P
done
#--
COUNTER - счетчик циклов присутствия проблемы. P=1m - задержка в цикле 1 минута function EXECUTE() - функция, в которой прописываем действия для устранения проблемы. for LNK in ... done в цикле пингуем адреса, и если хотя бы один ответ получили, сбрасываем счетчик проблем в 0 и выдерживаем паузу. Если ответ на ping не получили без задержек переходим к следующему адресу. Адреса на ping не проверял. Проверяйте, добавляйте, изменяйте сами. ping -c1 - один пакет -w2 - время ожидания 2 сек Таким образом, если все адреса отвечают - каждый из них пингуется раз в 15 минут (задержка * количество адресов). Если отвечает только 1 - пинговаться он будет ежеминутно. Не хорошо, но не критично. case $COUNTER in ... esac самый удобный оператор для множественных условий. Если проблем нет ($COUNTER=0) сразу возвращаемся к пингам. Если проблема есть попробуем ее решить (перезагрузить роутер, например). Попытки будут предприниматься с нарастанием времени на 2,5,...300 циклах. 600) COUNTER=300...;; - далее попытки проводятся через 300 циклов. Вообще-то строку "600) COUNTER=300; EXECUTE;;" можно было бы заменить на "599) COUNTER=299;;" с сохранением логики работы. Но оставил более понятный вариант. Прошу обратить внимание, что цикл чуть больше минуты, когда все хорошо, но когда ping не получает ответа - время ~ 2 сек. То есть время fail-цикла = задержка + (число адресов * 2сек) ~ 1мин 30 сек. Ну, и теперь самое интересное. На aliexpress ищем "usb relay". (одиночный < 200 рублей). Качаем и ставим драйвера и пишем что-то вроде:
declare -r HEX_CODE_OFF='\xA0\x01\x01\xA2'
declare -r HEX_CODE_ON='\xA0\x01\x00\xA1'
#use ls /dev/ttyUSB* ###############################
declare -r USB_DEV=/dev/ttyUSB0
echo -n -e $HEX_CODE_OFF > $USB_DEV
sleep 30
echo -n -e $HEX_CODE_ON > $USB_DEV
Подключаем релюху (контакты NO) в разрыв провода питания роутера - и автомат готов.
PS от Ромы — НО будьте аккуратны, чтобы ёбом не токнуло!
tags: #homework #DIY © by Tagd Tagd — 🔔 @bashdays

Здрасти здрасти хуймордасти, оказывается есть люди, которые не знают как залетать в mysql без пароля. Попался вчера свежий Bash скрипт от персонажа комиксов, который явно указывает пароль от mysql. Заебись Bash скрипт с паролями от рутового мускла. Так делать не нужно. А нужно всего лишь создать файл в домашнем каталоге пользователя и обозвать его /home/user/.my.cnf. Содержимое файла .my.cnf
[client]
user=user
password=passwd
database=db
Этот файл содержит настройки по умолчанию для команд mysql. Помимо этих переменных, в этот файл можно закинуть что-то еще, не знаю что еще я туда больше ничего не пихаю. Либо передавать напрямую в mysql путь до файла с помощью ключа:
--defaults-file==filename
В этом случае имя и путь файла может быть любой. НО обязательно сделай этот файл доступным для чтения только тебе, чтобы пидарасы-криворукие не смогли подглядеть креденшелы. Теперь если в командой строке просто ввести mysql, ты залетишь в mysql без юзера и пароля + сменится база данных.
Обычно этот хак используют на рутах, чтобы рут не ебался и залетал с первым же лучиком солнца.
А для винды есть mysql_config_editor, который поможет зашифровать пароль, ведь в винде нужные права на файл хуй поставишь. Почитать: Параметры командной строки, влияющие на обработку. Хороших предстоящих выходных! tags: #linux #mysql — 🔔 @bashdays

Сегодня мы рассмотрим второй способ, как запилить SOCKS через ssh. Напишем свой крутой шелл с анимацией и ограничениями для пользователей. Как-то видел анимацию сисек при долгом копировании, но сейчас не нашел. Может кто подскажет... Варианты анимации здесь.
sudo vim /usr/local/bin/socksshell

#!/bin/bash
trap 'echo -e "\\nWaiting session end...";exit' SIGINT SIGTERM SIGHUP SIGQUIT
printf "VPN on. Press CTRL-C for BREAK   "
while :;do
  for i in '> ' '>>' ' <' '<<';do
    printf "\b\b$i"
    sleep 3
  done
done

sudo chmod 755 /usr/local/bin/socksshell
Скрипт не дает пользователю ничего делать, но своей анимацией поддерживает соединение в рабочем состоянии. Если не нравится shell на скрипте - поищите в сети Sleep Dummy Shell он на си. В файле /etc/ssh/sshd_config
Match User bashdays_tagd
    MaxAuthTries 3
    MaxSessions 10 
    PasswordAuthentication no
    PermitEmptyPasswords no
    PubkeyAuthentication yes
    allowtcpforwarding yes 
    ForceCommand /usr/local/bin/socksshell
#--
Опция ForceCommand, фактически, заменяет оболочку для ssh, если захотите заменить оболочку пользователя в глобально системе (не обязательно):
sudo usermod -s /usr/local/bin/socksshell bashdays_tagd
sudo service sshd restart
А на клиенте:
ssh -D 5000 bashdays_tagd@ssh.host.name
После запуска и ввода фразы ключа программа выводит анимацию. Если прервать команду, соединения в браузере не разорвутся, как в первом способе, а программа будет ожидать закрытия браузера!!! В firefox Настройки -> Настройка сети -> Параметры соединения: Ручная настройка прокси. SOCKS5. 127.0.0.1 порт 5000. + галка Отправлять DNS-запросы через прокси при использовании SOCKS5. или
ssh -D 192.168.1.57:5000 bashdays_tagd@ssh.host.name
Если ваш адрес 192.168.1.57 и вы человек еще более добрый чем я и решили поделиться вашем счастьем со всей своей локалкой. В настройка firefox нужно будет заменить 127.0.0.1 на 192.168.1.57 Продолжение следует... © by Tagd Tagd tags: #linux #networks #bash — 🔔 @bashdays