ar
Feedback
Bash Days | Linux | DevOps

Bash Days | Linux | DevOps

الذهاب إلى القناة على Telegram

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

إظهار المزيد

📈 نظرة تحليلية على قناة تيليجرام 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