cookie

We use cookies to improve your browsing experience. By clicking «Accept all», you agree to the use of cookies.

avatar

Bash Days | Linux | DevOps

Авторский канал от действующего девопса Самобытно про разработку, devops, linux, скрипты, тестирование, сисадминство, техдирство, пиэмство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue Полезняшки: @gitgate Чат: @bashday Инбокс: @onotollebot

Show more
Advertising posts
19 062
Subscribers
-524 hours
+367 days
+43330 days

Data loading in progress...

Subscriber growth rate

Data loading in progress...

Ну вот и пришло время…
TL;DR если хочешь в девопс, я тебя научу
Привет. В личку регулярно заходят наши подписчики и интересуются наставничеством, обучением и т.п. Ладно, чо тянуть, закроем вопрос. Встречаем Linux Factory! 1.08 выпускаю кракена. Но кракен будет для маленьких. Матёрые заскучают, но кто знает… Курс пилить я ебал, поэтому покажу протоптанные дорожки и основы. И если ты ими правильно воспользуешься — слава тебе и почет + 100500 денег в секунду. Живописнее и подробнее можешь ознакомиться тут, всё утро красоту наводил 🥳 Чтобы стать частью прекрасного, подавай заявку через бота и я отвечу на все твои вопросы. Программа: https://bashdays.ru/intro/ Контакты: @linuxfactorybot 👇👇👇
Show all...

98
Войти в DevOps
ДА или НЕТ? Давай разберемся! Запускай:
cd /tmp
touch bashdays.txt
rm -i bashdays.txt
Получаем интерактивный запрос:
rm: remove regular empty file 'test.txt'?
Выбор зависит от потребности. Либо да, либо нет. Но что вводить? Очевидно же — y или n. Справедливо. Но что если… Запускаем:
locale -k noexpr yesexpr
Выхлоп:
noexpr="^[-0nNНн]"  
yesexpr="^[+1yYДд]"
Это все возможные варианты, которыми ты можешь воспользоваться. Если вместо «y» ты введешь знак «+» — файл удалится. Аналогично можно ввести 0 или 1. Либо «Д» или «Н». Не везде из коробки прописаны такие регулярки, например на англоязычной убунте хуй с маслом.
noexpr="^[nN]"
yesexpr="^[yY]"
Функция оценивающая ответ пользователя, учитывает локализацию. Для подтверждения, или отмены может быть использован любой символ в квадратных скобках из вывода вышеприведённой команды. А любой символ не совпадающий с символами из набора yesexpr будет равносилен отмене, в том числе и пустой ввод. Как на это можно повлиять? Всё это забиндино в файлах которые лежат в папке: /usr/share/i18n/locales Например, в файле ru_RU есть такое:
LC_MESSAGES
yesexpr "^[+1yY<U0414><U0434>]"
noexpr  "^[-0nN<U041D><U043D>]"
yesstr  "<U0434><U0430>"
nostr   "<U043D><U0435><U0442>"
END LC_MESSAGES
Тут присутствует как раз «0» и «1» / «+» и «-». Если хочется упороться, можешь собрать свою локаль и добавить свои символы в регулярку:
cp /usr/share/i18n/locales/ru_RU ~/my_ru_RU
localedef -f UTF-8 -i ~/my_ru_RU ru_RU.UTF-8
После первой команды, нужно отредактировать файл ~/my_ru_RU и затем запускать вторую команду. Такие вот перлы и приколы. Изучай. 👉 Многие этого ждали, завтра закину анонс про личное наставничество и обучение в рамках проекта Linux Factory. tags: #linux — 🔔 @bashdays
Show all...
101
Photo unavailableShow in Telegram
Всем привет! 14 июля Selectel организует атмосферный летний ИТ-фестиваль Selectel Day Off🔥 О чем? Тема мероприятия — ностальгия по будущему🤪 Выступят спикеры из Циана, Realiste, Сбера, Альфа-Банка, Яндекса 360, SETTERS EDUCATION и МГУ. Темы докладов: — Платформы данных и как они будут развиваться в будущем.Обсудим эволюцию паттернов в обработке данных, тренды в индустрии и то, как платформа данных устроена в Циане. — Квантовые вычисления. Обсудим экспериментальный прогресс в области создания квантовых процессоров, а также порассуждаем о потенциале их применения в задачах ИИ. — ИИ-разработки в недвижимости. Рассмотрим, какие есть проблемы у самого большого рынка в мире по объему активов и как они решаются с помощью ИИ. — Креативность решений от нейросетей. Вы узнаете, какие задачи типичного сотрудника сможет взять на себя ИИ. Обсудим, будут ли нейросети помогать закрывать задачи, связанные с креативными решениями. — Поговорим про технические сообщества и многое другое. А еще в рамках фестиваля выступит Алексей Семихатов и расскажет про физические теории. Где? Санкт-Петербург, культурный квартал Брусницын Скорее регистрируйтесь: https://slc.tl/lfm2e Реклама АО «Селектел». ИНН: 7810962785 Erid: 2Vtzqvo6U1X
Show all...
6
С утра успешно победил всех антагонистов и теперь самое время сделать что-то полезное. Сегодня разбираем проблемный 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
Show all...
83
Photo unavailableShow in Telegram
😱 👉 Важное событие для всех, кто хочет повысить производительность своих серверов! 🔆 Присоединяйтесь к открытому уроку «Оптимизация Nginx и Angie под высокие нагрузки» На занятии вы: - поймёте, какие параметры влияют на производительность; - научитесь оптимизировать серверную часть; - узнаете, как работать с клиентской производительностью. 🏆 Спикер Николай Лавлинский — технический директор в Метод Лаб, PhD Economic Science, опытный руководитель разработки и преподаватель. 👉 Регистрируйтесь для участия: https://vk.cc/cygpJS Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Show all...
7
И снова здравствуйте. Давай сегодня немного в кишках покопаемся. Запускаем бессмысленную команду:
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
Show all...
120
00:04
Video unavailableShow in Telegram
Как стать DevOps-инженером за 4 месяца? 🐳 Об этом расскажут аж на 2-х бесплатных уроках от Merion Academy! Забирай целый набор из бесплатных полезностей: 📍2 бесплатных урока, где расскажут, кто такой DevOps-инженер, какие инструменты использует, куда и как развивает карьеру, познакомят с Docker и контейнирезацией. 📍 В дополнение бесплатный интенсив по развитию карьеры, где HR-эксперты расскажут лайфхаки, как создавать сильные резюме и проходить собеседования, так, чтобы вас взяли на работу. 📍Гайд по командам Docker и Курс по английскому для IT. 👉 Регистрируйтесь по ссылке чтобы забирать бесплатные уроки, интенсив по карьере и гайд. Что еще важно знать: 1. У ребят одна из самых доступных цен, которая в 4-5 раз ниже, чем в других известных школах, но качество обучения на том же уровне. Это достигается за счет того, что в Мерионе не тратят миллионы на продвижение, а рекламируются только на собственных ресурсах и в тематических телеграм-каналах. Кроме этого у них также отсутствуют расходы на младших менторов, которые в большинстве онлайн-платформах представляются вам как "персональный ментор-преподаватель", но на самом деле являются просто бывшими студентами этих же курсов. 2. Есть возможность опции оплаты через сервис "Яндекс-Долями", т.е. учиться сразу, но платить по чуть-чуть. Merion Academy – это экосистема доступного образования, которая включает в себя: Youtube-канал ,где простыми словами говорят о сложных вещах. IT-академию, где обучат востребованным направлениям по самым доступным ценам. IT-базу знаний с полезными статьями Реклама: ООО "МЕРИОН НЕТВОРКС" ИНН: 7721855710 Erid: 2VtzqxmDUbs
Show all...
!!!DevOps.mp43.98 KB
9
Так, самое время подвести итоги с картами «Релиз». Больше всего реакций набрал комментарий Алексея Агафонова (supmea), по итогу 39 огоньков.
Привести в порядок всё, чтоб не стыдно перед последователями было. А доступы и так оставят и почту. Ещё и докучают что-либо сделать. А мы идём на большие деньги смотреть как у других всё сделано не так как нужно
На втором месте Александр Смирнов (wddingo) с 38 лайками за комментарий:
Самое гадкое, что можно было им сделать - я сделал, я ушел с этой работы. Пусть теперь сами с этим говном разбираются. А пакостить - это считаю слишком мелочным
Ну и третье место занял Максим (Rosssich), набрав 30 респектов за комментарий:
а вообще - ключевое слово "не заплатили". поэтому заявление в трудовую инспекцию, суд и т.д. там можно урона нанести больше чем от всяких там chaosmonkey )
На этой неделе к вам придет Макс и узнает куда засылать призы. Ждите. Нюансы. На руках у меня всего одна колода, она отправится в приоритете Алексею, остальные две вышлем в ближайшее время, как получим их от организатора. Ну либо закинем рублей на карту, чтобы вы самостоятельно заказали их через Авито и не парились на почте. Всем спасибо за участие, вы все лучшие!
Show all...
28
Photo unavailableShow in Telegram
🎲 Высокая доступность в Kubernetes: бесплатный вебинар Привет! Мы — команда Слёрма, учебный центр для айти-специалистов middle+ и фанаты k8s.😎 11 июля в 18:00 мы приглашаем вас на вебинар «Высокая доступность в Kubernetes: пробы, реквесты/лимиты, HPA». На встрече обсудим: ❓ Можно ли не делать рединесс пробы и лить трафик сразу на сервер? ❓ Что будет, если выставить неправильные пробы? И еще много интересного! Спикеры: ➡️ Кирилл Борисов, SRE Lead в MTS Digital ➡️ Всеволод Севостьянов, Staff engineer в Lokalise ➡️ Дмитрий Будаков, Системный инженер в интеграторе Зарегистрироваться на вебинар можно с помощью нашего бота-помощника. Подключайтесь! 🔗 ХОЧУ НА ВЕБИНАР Реклама ООО «Слёрм» ИНН 3652901451 erid: 2Vtzqummakq
Show all...
9
Ёхохо. Не пить алкашку по выходным конечно круто, по итогу все это время компенсируешь работой. Продуктивность зашкаливает. НО, скучно пиздец! Поэтому приходится отвлекаться игрульками. Гоняя Зельду, невольно задумался, а квесты то очень похожи на алгоритмы в программировании. Порой что аж жопа горит. И их можно давать на собеседованиях. Без знания паттернов хер чо пройдешь. Ладно, теперь по теме: Реврайтим 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
Show all...
70
Choose a Different Plan

Your current plan allows analytics for only 5 channels. To get more, please choose a different plan.