🔥 Открытые консультации по Kubernetes от архитекторов Southbridge
Лекций по кубу в интернете много, а желающих потратить время и разобрать ваши вопросы — мало. Мы решили это исправить!
Southbridge — DevOps-аутсорсер, специализирующийся на k8s. Cреди экспертов — Сергей Бондарев, один из создателей флагманских курсов по Kubernetes учебного центра Слёрм.
Первая консультация пройдёт 4 июля в 17:00. Сергей и его коллеги в прямом эфире будут отвечать на все ваши вопросы и делиться best practices по эксплуатации кубов.
Для участия в консультациях мы собрали бота-помощника. В нём есть кнопка «Задать вопрос» — спросите у нас что-нибудь нужное! Без ваших вопросов ничего не случится.
Так что спрашивайте и занимайте место на нашей встрече. Это бесплатно. 🙃
Ждём вас 4 июля!
🔗 ЗАДАТЬ ВОПРОС И ПРИЙТИ НА КОНСУЛЬТАЦИЮ
Реклама ООО «Слёрм» ИНН 3652901451 erid: 2VtzqwQCwAg
Лекций по кубу в интернете много, а желающих потратить время и разобрать ваши вопросы — мало. Мы решили это исправить!
Southbridge — DevOps-аутсорсер, специализирующийся на k8s. Cреди экспертов — Сергей Бондарев, один из создателей флагманских курсов по Kubernetes учебного центра Слёрм.
Первая консультация пройдёт 4 июля в 17:00. Сергей и его коллеги в прямом эфире будут отвечать на все ваши вопросы и делиться best practices по эксплуатации кубов.
Для участия в консультациях мы собрали бота-помощника. В нём есть кнопка «Задать вопрос» — спросите у нас что-нибудь нужное! Без ваших вопросов ничего не случится.
Так что спрашивайте и занимайте место на нашей встрече. Это бесплатно. 🙃
Ждём вас 4 июля!
🔗 ЗАДАТЬ ВОПРОС И ПРИЙТИ НА КОНСУЛЬТАЦИЮ
Реклама ООО «Слёрм» ИНН 3652901451 erid: 2VtzqwQCwAg
🔥 Кишочки. Короче познавательное.
В документации для команды
Прежде чем выполнить какой-то код, интерпретатору требуется обработать его.
Нужно найти команду, аргументы, различные перенаправления. Расширить параметры, фигурные скобки, тильда, переменные подстановка результатов выполнения команд, математика, арифметика, география, литература, подстановка имен файлов и т.п.
Короче дохера всего. Полный список можешь найти в разделах SIMPLE COMMAND EXPANSION и EXPANSION выполнив:
Ну дак вот, команда
На вход
Очевидно? Совсем нет. Но вот оно так работает, чо с него взять.
Эта возможность используется по-разному, например для генерации и последующего исполнения кода.
Также если знать некоторые последовательности обработки кода, можно сгладить некоторые особенности самой обработки.
Ниже примеры. При присваивании значения переменной, приведенная конструкция с фигурными скобками не расширяется.
Расширение переменной в строке с командой
Поэтому используем
В результате получим:
Другой пример. Здесь из-за использования одинарных кавычек, переменной присваивается указанная строка, а не значение переменной.
И обработка строки делает расширение переменной один раз. Получаем значение переменной
На экране ты увидишь:
А теперь более сложный пример. Если слева от оператора перенаправления указана не корректная строка, в этом случае для перенаправления будет использована только часть строки, всё что находится слева не будет учитываться.
Это значит, что если ты откроешь файл на чтение и слева укажешь переменную содержащую нужный дескриптор, эта переменная не будет участвовать в перенаправлении.
И раз не указан дескриптор, файл будет ассоциирован со стандартным потоком ввода.
Решение. Делаем так, чтобы при первой обработке перенаправление было распознано как обычная строка и была расширена переменная. Тогда на второй обработке слева от оператора перенаправления будет стоять номер дескриптора из переменной.
В первой строке:
Круглые скобки использовались, чтобы не засорять текущую оболочку. И чтобы она не завершилась на первом примере. Из-за того что на её стандартный ввод повесили
Этот «хак» с перенаправлением можно использовать для исследований. Когда требуется определённый диапазон дескрипторов.
Почитать:
А завтра запускаем конкурс с картами. Моя ленивая жопа соизволила добраться до почты.
Хороших выходных!
tags: #bash
—
🔔
В документации для команды
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
—
🔔
Выходные заебись!
Сумма значений со стандартного ввода, или из файла.
➡️ Datamash
➡️ Awk
➡️ Dc
Последнее решение самое занимательное. И самое небезопасное, потому что данные управляют программой.
Вообще во всех трёх случаях очень желательно очищать входные данные.
Почитать:
Да будет так!
tags: #bash
—
🔔
Сумма значений со стандартного ввода, или из файла.
➡️ 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
—
🔔
ЕНОТ ищет таланты
Одна из самых масштабных серверных инфраструктур в России ЕНОТ от VK ищет талантливых разработчиков и SRE, готовых работать с облачными хранилищами и базами данных, облачным решением one-cloud, а также системами метрик и мониторинга.
Присоединяйтесь!
Одна из самых масштабных серверных инфраструктур в России ЕНОТ от VK ищет талантливых разработчиков и SRE, готовых работать с облачными хранилищами и базами данных, облачным решением one-cloud, а также системами метрик и мониторинга.
Присоединяйтесь!
🚜 Синий трактор едет к нам
Этот пост изобилует грубыми выражениями и, в силу своего содержания, вообще не предназначен для просмотра лицам с хрупким душевным миром.
✔ Про Gitlab!
Заебали блядь, мне чо каждый день это гавно обновлять? Ладно бы там нажал кнопку как в wordpress и забыл. А нет, надо хуеву гору телодвижений сделать.
И в 100% эта залупа с первого раза никогда не заводится, то миграции ручками надо запускать, то еще 10 версий предыдущих накатить и молиться.
В прошлый раз вообще пришлось пайплайны переписывать, поломали совместимость.
А еще соль, что при обновлении мне приходится параллельно поднимать клон сервера, на случай если обновка сделает мозги, можно будет на старую версию переключиться. Удобство через край…
И на закуску фаталити — обновку накатывать нужно поздно ночью, либо в выходные, когда разработчики в режиме AFK. Хуита какая-то!
Можно и в будни, но заебут вопросами — а когда заработает?
Этот пост изобилует грубыми выражениями и, в силу своего содержания, вообще не предназначен для просмотра лицам с хрупким душевным миром.
Заебали блядь, мне чо каждый день это гавно обновлять? Ладно бы там нажал кнопку как в wordpress и забыл. А нет, надо хуеву гору телодвижений сделать.
И в 100% эта залупа с первого раза никогда не заводится, то миграции ручками надо запускать, то еще 10 версий предыдущих накатить и молиться.
В прошлый раз вообще пришлось пайплайны переписывать, поломали совместимость.
Либо хуй пополам, либо пизда в дребезги, другого не дано.
А еще соль, что при обновлении мне приходится параллельно поднимать клон сервера, на случай если обновка сделает мозги, можно будет на старую версию переключиться. Удобство через край…
И на закуску фаталити — обновку накатывать нужно поздно ночью, либо в выходные, когда разработчики в режиме AFK. Хуита какая-то!
Можно и в будни, но заебут вопросами — а когда заработает?
...Короче я такие апд
Так, пора закончить с этими картами.
Короче, представляем ситуацию, что тебя нахуй уволили или не заплатили, а ты еще тот злой гений.
Задача — нужно применить все свои навыки заподлостроения в инфраструктуре и знатно усложнить жизнь этим гадам. У тебя есть root доступ ко всему и ты отрабатываешь две недели.
Условия — на тебя не должны подумать и взять за жопу.
Пиши в комментарии свой гениальный план. Чей коммент наберет больше реакций, тому и карты в руки.
Писать нужно не в чатик! А нажав кнопку под постом, это важно. Ну и условия розыгрыша я кидал ранее.
Итоги подведем в следующую пятницу. Доставка по РФ и Беларусь.
Пару колод отдадим вторым и третьим местам, но нужно будет подождать, на руках у меня их щас нет. Там ченить придумаем.
Но если прям чешется, можешь заказать у Кати через Авито.
Погнали сочинять! Может в будущем кто-то и воспользуется твоим гениальным планом 🥳
Короче, представляем ситуацию, что тебя нахуй уволили или не заплатили, а ты еще тот злой гений.
Задача — нужно применить все свои навыки заподлостроения в инфраструктуре и знатно усложнить жизнь этим гадам. У тебя есть root доступ ко всему и ты отрабатываешь две недели.
Условия — на тебя не должны подумать и взять за жопу.
Пиши в комментарии свой гениальный план. Чей коммент наберет больше реакций, тому и карты в руки.
Писать нужно не в чатик! А нажав кнопку под постом, это важно. Ну и условия розыгрыша я кидал ранее.
Итоги подведем в следующую пятницу. Доставка по РФ и Беларусь.
Пару колод отдадим вторым и третьим местам, но нужно будет подождать, на руках у меня их щас нет. Там ченить придумаем.
Но если прям чешется, можешь заказать у Кати через Авито.
Погнали сочинять! Может в будущем кто-то и воспользуется твоим гениальным планом 🥳
Здрасти. Существуют самописные скрипты, которые при запуске устанавливают необходимый набор программ. Этакая автоматизация на коленке, быстро, удобно, никаких ансиблов и паппетов.
Но встает вопрос, а как автоматизировать перезагрузку машины например при обновлении ядра, патчей или какого-то хитровыебанного софта?
Добавить в скрипт reboot на каждую команду? Да не, хуйня какая-то. Тут на помощь приходит reboot-required.
Ща покажу. Есть однострочник:
Первая часть понятна, обновили, апгрейднули, а дальше идет магия.
ㅤ
В квадратных скобках конструкция, которая проверяет наличие файла
Файл reboot-required создается, если система считает, что после обновления требуется перезагрузка. Если файл существует, возвращается true. А если true, то запускается -r = reboot.
Вот и вся наука. Изучай…
tags: #bash #linux
—
🔔
Но встает вопрос, а как автоматизировать перезагрузку машины например при обновлении ядра, патчей или какого-то хитровыебанного софта?
Добавить в скрипт 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
—
🔔
Игнорирование больших данных и нейросетей сегодня — почти гарантия провала. Именно поэтому стоит начать погружение в востребованную сферу Data Science и понять, чем занимаются специалисты по машинному обучению и анализу данных. За 5 дней вы узнаете, как работают нейросети, и создадите свою для поиска новостей.
📌 Зарегистрируйтесь прямо сейчас и получите эксклюзивный бонус — гайд «Как пользоваться ChatGPT и Midjourney + 25 полезных нейросетей»: https://epic.st/R-UIR?erid=2VtzqvbBZiQ
Что будем делать на мини-курсе:
— Узнаем, где востребована наука о данных, и разберёмся в различиях 3 основных направлений
— Освоим азы языка Python и визуализируем данные с его помощью
— Изучим базовые конструкции языка SQL
🎁 Вас ждут подарки:
— Год бесплатного изучения английского языка
— Персональная карьерная консультация
— 5 полезных чек-листов для старта карьеры
🎉 Все участники мини-курса получат сертификат на скидку 10 000 рублей на любой курс Skillbox.
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка...
📌 Зарегистрируйтесь прямо сейчас и получите эксклюзивный бонус — гайд «Как пользоваться ChatGPT и Midjourney + 25 полезных нейросетей»: https://epic.st/R-UIR?erid=2VtzqvbBZiQ
Что будем делать на мини-курсе:
— Узнаем, где востребована наука о данных, и разберёмся в различиях 3 основных направлений
— Освоим азы языка Python и визуализируем данные с его помощью
— Изучим базовые конструкции языка SQL
🎁 Вас ждут подарки:
— Год бесплатного изучения английского языка
— Персональная карьерная консультация
— 5 полезных чек-листов для старта карьеры
🎉 Все участники мини-курса получат сертификат на скидку 10 000 рублей на любой курс Skillbox.
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка...
Такс. Вопрос из зала — как через bash скрипт запросить у пользователя пароль, но чтобы при вводе пароля отображались звездочки?
На этот счет у меня есть 2 кишки. Выбирай любую понравившуюся. Либо пиши свой вариант в комментариях, будет интересно посмотреть.
Кишка первая.
Согласен, выглядит хуёва, но вторая на визуал еще хуёвие.
В этой кишке есть нюанс, она НЕ работает с кнопкой Backspace, то есть ты не сможешь отредактировать, то что уже ввел.
Кишка вторая.
А тут уже более совершенный вариант, с рабочей кнопкой Backspace.
ㅤ
Чо делать дальше? Ну логично же, в переменную «a» записывается введенный пароль, а дальше делай с ним все что захочешь.
Вот такие пироги!
tags: #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
—
🔔
Slack через 12 дней отключит аккаунты российских пользователей – это навсегда.
Уход Slack с российского рынка чем-то напоминает Доминика Торетто и его “последнюю гонку”. Или закрытие Sunlight.
Но тут все серьезно. Лучше не ждать 13 дней, когда Slack заблокирует ваше пространство и удалит все данные, как это случилось с тысячами команд в России.
В этот раз не пронесет. Оформить подписку с левого юрлица или оплатить зарубежной картой уже не получится.
Лучше заранее перейти на сервисы, которые точно никто не заблокирует. В идеале – развернуть мессенджер на своем сервере, в который можно перенести все ваши данные из Slack.
Мы как раз нашли такой – корпоративный мессенжер Compass.
Что он умеет:
🔹полный перенос всех данных из Slack в Compass
🔹все к чему вы привыкли в Slack: чаты, треды, реакции
🔹видеоконференции на 500+ участников
🔹интеграции со 100+ сервисами и боты
Compass можно использовать как в облаке, так и развернуть на своем сервере. А еще у сервиса открытый исходный код.
Попробуйте Compass ...
Уход Slack с российского рынка чем-то напоминает Доминика Торетто и его “последнюю гонку”. Или закрытие Sunlight.
Но тут все серьезно. Лучше не ждать 13 дней, когда Slack заблокирует ваше пространство и удалит все данные, как это случилось с тысячами команд в России.
В этот раз не пронесет. Оформить подписку с левого юрлица или оплатить зарубежной картой уже не получится.
Лучше заранее перейти на сервисы, которые точно никто не заблокирует. В идеале – развернуть мессенджер на своем сервере, в который можно перенести все ваши данные из Slack.
Мы как раз нашли такой – корпоративный мессенжер Compass.
Что он умеет:
🔹полный перенос всех данных из Slack в Compass
🔹все к чему вы привыкли в Slack: чаты, треды, реакции
🔹видеоконференции на 500+ участников
🔹интеграции со 100+ сервисами и боты
Compass можно использовать как в облаке, так и развернуть на своем сервере. А еще у сервиса открытый исходный код.
Попробуйте Compass ...
Про интересный факап и траблшутинг.
Обратился клиент — у нас mysql реплика не работает. Вернее работает, но отстала всего лишь на 3 месяца.
На вопрос — а хули вы 3 месяца сидели, у вас же мониторинг есть?
Очевидный ответ — да, есть, но оно молчит.
Ладно, полез разбираться.
А там ошибки брынчат, как хуи в бидоне.
Ну это ладно, ошибка и ошибка, тут понятно что делать — НИЧЕГО.
Так как реплика используется чисто аналитиками на потыкать, игнорим эту ошибку через my.cfg. Быстрофикс.
✔ Для продуктовой реплики такое делать - НЕЛЬЗЯ!
Самый важный вопрос — какого хера мониторинг 3 месяца молчал?
Тут уже интереснее. Реплика заведена в prometheus, экспортеры есть, все дела.
Но из графаны сервер пропал, хотя год назад я ее точно там видел.
Думаем… Думаем… Смотрю графану, мониторится поле: replica_seconds_behind
Хм, лезу обратно на реплику, а там сроду нет mysql_exporter. Что же это тогда такое?
Копаем вглубь и видим, что node_exporter мониторит папку /tmp на наличие файликов .prom.
Ага… То есть метрики с mysql реплики собирает какой-то bash скрипт по крону, генерит текстовичок и отдает в prometheus.
Типа такого:
Да, оно прекрасно работало, до момента пока не вылезла ошибка: Cannot delete or update a parent row
Соответственно текстовый файл replica.prom получился в таком формате:
Ну а дальше prometheus такое распарсить не смог (он хочет циферки, а не буковки) и тихонечко вывел эту ноду из графаны и вообще отовсюду. Ну и аллерты в придачу. На что им тригериться если ноды нет нигде?
Прикол в том, что во время возникновения ошибки, поле Seconds_Behind_Master в mysql принимает значение Null, а не продолжает дальше считать на сколько отстала реплика.
ㅤ
А вот и bash скрипт, который собирал метрики:
Работа над ошибками проведена, инцидент разобран. Ни одна жопа на ретроспективе пока не пострадала, но возможно дело времени.
И всегда помни — если изобретаешь велосипед, всегда обрабатывай эксепшены!
tags: #devops #debug #bash #monitoring
—
🔔
Обратился клиент — у нас 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
—
🔔
⚡️44% российских компаний уже используют искусственный интеллект для разработки и тестирования ПО
Yandex Cloud совместно с Экспресс 42 и другими партнёрами выпустили первую часть исследования State of DevOps Russia. В этом году в опросе приняли участие более 4000 специалистов – от руководителей до специалистов, связанных с разработкой, тестированием и эксплуатацией систем.
Подробнее об итогах исследования, главных цифрах и выводах – в статье.
Yandex Cloud совместно с Экспресс 42 и другими партнёрами выпустили первую часть исследования State of DevOps Russia. В этом году в опросе приняли участие более 4000 специалистов – от руководителей до специалистов, связанных с разработкой, тестированием и эксплуатацией систем.
Подробнее об итогах исследования, главных цифрах и выводах – в статье.
Тут персонаж один пристал, говорит что у него в Java есть какой-то «мусожор», а вот в Bash такого нет и поэтому от наших скриптов одни проблемы.
Термин «Мусожор» видимо профессиональный и является пресловутым «Garbage Collector».
ㅤ
К Java я отношусь ровно, оно меня не трогает и я его тоже.
Как говорится — Одно гавно другому не равно. Поэтому хуисосить не буду.
Давай проведем эксперимент:
В первой строчке выводится количество физической памяти в килобайтах, используемой текущим процессом оболочки. У меня выдало 4348.
Во второй строчке записываем в переменную
В третьей строчке снова выводим количество физической памяти, у меня 5276.
Ага, оно стало больше. Было 4348 стало 5276.
В четвертой строчке, перезаписываем
На этот раз пятая строчка вновь показывает: 4348.
Что и требовалось доказать. Использование памяти увеличивается, а затем снова уменьшается.
Все манипуляции с памятью выполняются на уровне Linux ядра. И нет никакой необходимости рвать жопу и греть голову.
Bash не работает с памятью и объектами, так же как обычные языки программирования.
tags: #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
—
🔔
Ёхохо. Не пить алкашку по выходным конечно круто, по итогу все это время компенсируешь работой. Продуктивность зашкаливает. НО, скучно пиздец!
Поэтому приходится отвлекаться игрульками. Гоняя Зельду, невольно задумался, а квесты то очень похожи на алгоритмы в программировании. Порой что аж жопа горит. И их можно давать на собеседованиях. Без знания паттернов хер чо пройдешь.
Ладно, теперь по теме: Реврайтим CTRL+C.
Как прерывать запущенные программы и скрипты тут каждый знает. А как работает изнутри
ㅤ
Сегодня что-то вроде на изи потыкать. Понедельник как-никак.
Где применяется реврайт
✔ А вообще причины для реврайта разные:
- Избежание конфликтов с программным обеспечением
- Удобство и предпочтения пользователя
- Специальные рабочие процессы
- Случайные нажатия
- Ограниченные возможности клавиатуры
- и т.п.
Давай теперь на практике.
Смотрим дефолтное сочетание
Получаем портянку вида:
Смотрим параметр intr, он и указывает на сочетание, которое будет слать SIGINT. По умолчанию как видим оно =
Давай теперь поменяем эту штуку:
Теперь запускаем для теста
Поздравляю, реврайт прошел успешно. А теперь нажми
Можешь теперь издеваться над коллегами и ломать им рабочие процессы.
Чтобы сохранить эти настройки, выполняем:
Ну либо в .zshrc, тут уже сам смотри где у тебя первоначальные настройки валяются.
А можно сделать CTRL+ALT+K ?
Через stty увы такое провернуть не получится.
Но используя xbindkeys такое возможно.
Но xbindkeys со своими подводными камнями, оно для Иксов. А если у тебя Wayland то смотри в сторону sway или gnome-keybinding.
Такие дела. Ладно, пошли дальше мир спасать. Хорошего понедельника!
tags: #linux
—
🔔
Поэтому приходится отвлекаться игрульками. Гоняя Зельду, невольно задумался, а квесты то очень похожи на алгоритмы в программировании. Порой что аж жопа горит. И их можно давать на собеседованиях. Без знания паттернов хер чо пройдешь.
Ладно, теперь по теме: Реврайтим 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
—
🔔
🎲 Высокая доступность в Kubernetes: бесплатный вебинар
Привет! Мы — команда Слёрма, учебный центр для айти-специалистов middle+ и фанаты k8s.😎
11 июля в 18:00 мы приглашаем вас на вебинар «Высокая доступность в Kubernetes: пробы, реквесты/лимиты, HPA».
На встрече обсудим:
❓ Можно ли не делать рединесс пробы и лить трафик сразу на сервер?
❓ Что будет, если выставить неправильные пробы?
И еще много интересного!
Спикеры:
➡️ Кирилл Борисов, SRE Lead в MTS Digital
➡️ Всеволод Севостьянов, Staff engineer в Lokalise
➡️ Дмитрий Будаков, Системный инженер в интеграторе
Зарегистрироваться на вебинар можно с помощью нашего бота-помощника. Подключайтесь!
🔗 ХОЧУ НА ВЕБИНАР
Реклама ООО «Слёрм» ИНН 3652901451 erid: 2Vtzqummakq
Привет! Мы — команда Слёрма, учебный центр для айти-специалистов middle+ и фанаты k8s.😎
11 июля в 18:00 мы приглашаем вас на вебинар «Высокая доступность в Kubernetes: пробы, реквесты/лимиты, HPA».
На встрече обсудим:
❓ Можно ли не делать рединесс пробы и лить трафик сразу на сервер?
❓ Что будет, если выставить неправильные пробы?
И еще много интересного!
Спикеры:
➡️ Кирилл Борисов, SRE Lead в MTS Digital
➡️ Всеволод Севостьянов, Staff engineer в Lokalise
➡️ Дмитрий Будаков, Системный инженер в интеграторе
Зарегистрироваться на вебинар можно с помощью нашего бота-помощника. Подключайтесь!
🔗 ХОЧУ НА ВЕБИНАР
Реклама ООО «Слёрм» ИНН 3652901451 erid: 2Vtzqummakq
Так, самое время подвести итоги с картами «Релиз».
Больше всего реакций набрал комментарий Алексея Агафонова (supmea), по итогу 39 огоньков.
На втором месте Александр Смирнов (wddingo) с 38 лайками за комментарий:
Ну и третье место занял Максим (Rosssich), набрав 30 респектов за комментарий:
На этой неделе к вам придет Макс и узнает куда засылать призы. Ждите.
Нюансы. На руках у меня всего одна колода, она отправится в приоритете Алексею, остальные две вышлем в ближайшее время, как получим их от организатора. Ну либо закинем рублей на карту, чтобы вы самостоятельно заказали их через Авито и не парились на почте.
Всем спасибо за участие, вы все лучшие!
Больше всего реакций набрал комментарий Алексея Агафонова (supmea), по итогу 39 огоньков.
Привести в порядок всё, чтоб не стыдно перед последователями было. А доступы и так оставят и почту. Ещё и докучают что-либо сделать. А мы идём на большие деньги смотреть как у других всё сделано не так как нужно
На втором месте Александр Смирнов (wddingo) с 38 лайками за комментарий:
Самое гадкое, что можно было им сделать - я сделал, я ушел с этой работы. Пусть теперь сами с этим говном разбираются. А пакостить - это считаю слишком мелочным
Ну и третье место занял Максим (Rosssich), набрав 30 респектов за комментарий:
а вообще - ключевое слово "не заплатили". поэтому заявление в трудовую инспекцию, суд и т.д. там можно урона нанести больше чем от всяких там chaosmonkey )
На этой неделе к вам придет Макс и узнает куда засылать призы. Ждите.
Нюансы. На руках у меня всего одна колода, она отправится в приоритете Алексею, остальные две вышлем в ближайшее время, как получим их от организатора. Ну либо закинем рублей на карту, чтобы вы самостоятельно заказали их через Авито и не парились на почте.
Всем спасибо за участие, вы все лучшие!
This media is not supported in your browser
VIEW IN TELEGRAM
Как стать DevOps-инженером за 4 месяца? 🐳 Об этом расскажут аж на 2-х бесплатных уроках от Merion Academy!
Забирай целый набор из бесплатных полезностей:
📍2 бесплатных урока, где расскажут, кто такой DevOps-инженер, какие инструменты использует, куда и как развивает карьеру, познакомят с Docker и контейнирезацией.
📍 В дополнение бесплатный интенсив по развитию карьеры, где HR-эксперты расскажут лайфхаки, как создавать сильные резюме и проходить собеседования, так, чтобы вас взяли на работу.
📍Гайд по командам Docker и Курс по английскому для IT.
👉 Регистрируйтесь по ссылке чтобы забирать бесплатные уроки, интенсив по карьере и гайд.
Что еще важно знать:
1. У ребят одна из самых доступных цен, которая в 4-5 раз ниже, чем в других известных школах, но качество обучения на том же уровне. Это достигается за счет того, что в Мерионе не тратят миллионы на продвижение, а рекламируются только на собственных ресурсах и в тематических телеграм-каналах. Кроме этого у них также отсутствуют расходы на младших ме...
Забирай целый набор из бесплатных полезностей:
📍2 бесплатных урока, где расскажут, кто такой DevOps-инженер, какие инструменты использует, куда и как развивает карьеру, познакомят с Docker и контейнирезацией.
📍 В дополнение бесплатный интенсив по развитию карьеры, где HR-эксперты расскажут лайфхаки, как создавать сильные резюме и проходить собеседования, так, чтобы вас взяли на работу.
📍Гайд по командам Docker и Курс по английскому для IT.
👉 Регистрируйтесь по ссылке чтобы забирать бесплатные уроки, интенсив по карьере и гайд.
Что еще важно знать:
1. У ребят одна из самых доступных цен, которая в 4-5 раз ниже, чем в других известных школах, но качество обучения на том же уровне. Это достигается за счет того, что в Мерионе не тратят миллионы на продвижение, а рекламируются только на собственных ресурсах и в тематических телеграм-каналах. Кроме этого у них также отсутствуют расходы на младших ме...
И снова здравствуйте. Давай сегодня немного в кишках покопаемся.
Запускаем бессмысленную команду:
И наблюдаем как строка статистики постоянно меняется.
В простонародье — рефрешится.
Бесполезная? Ну не скажи, с её помощью можно протестировать скорость чтения и записи.
ㅤ
Эта команда копирует блоками нули из спец-файла в другой. Записывая статистику на стандартный вывод ошибок stderr.
Строка статистики постоянно меняется. Но как dd это делает? Давай разберемся ниже.
Запускаем страшную кишку и немного ждем
По итогу получаем, что-то подобное:
Портянка с read означает — ждем 4 секунды, считываем первую строчку ввода и сохраняем ее в переменную REPLY, а далее выводим содержимое переменной на экран.
✔ Не так уж и страшно, правда?
Ааа, херовина
Ну дак вот.
Получается утилита dd, пишет статистику за секунду в стандартный поток ошибок и затем суёт символ
Который означает - возврат каретки.
Вот и вся магия.
Делаем хак, чтобы избавиться от возврата каретки:
Теперь статистика выводится в столбик:
Нагляднее? Конечно!
Что с этим можно сделать? Ну например протестировать скорость чтения и записи, используя разный размер буферов.
Херачим Bash скрипт:
Запускаем и получаем:
Круто? Да охуеть!
Ну а если нужна статистика за пять секунд. Делаем 5+1 к количеству записей и индексу массива. Массив начинается с нуля. Но можешь это изменить с помощью опции -O.
По итогу имеем статистику за 5 секунд:
Вот такие пироги. Теперь можешь тестировать VPSки и писать статью на хабру с бенчмарками.
Давай, увидимся завтра!
tags: #linux #bash
—
🔔
Запускаем бессмысленную команду:
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}"; }
По итогу получаем, что-то подобное:
$'\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
—
🔔
С утра успешно победил всех антагонистов и теперь самое время сделать что-то полезное.
Сегодня разбираем проблемный Bash скрипт.
А проблема заключается в том, что скрипт удаляет файлы, которые содержат в именах цифры.
За качество скрипта тереть не будем. Нам нужно задебажить проблему, ведь явных команд на удаление в этом скрипте — нет.
Для начала, давай создадим вводные, чтобы было с чем работать.
Так, создали 6 файлов с разными именами:
Модифицируем проблемный скрипт, чтобы он выводил строку с командой
Запускаем и получаем красивое:
Смотрим что у нас осталось, хуяк и вместо 6 файлов, у нас осталось всего лишь 3 штук.
Куда блядь делось остальное? Вокруг да около ходить не будем.
Дело в том, что в одном каталоге не может быть двух файлов с одинаковым названием. Очевидно? Да!
Как работает
Если <новое имя> это существующее имя файла, тогда оно будет удалено, а <старое имя> получит имя <новое имя>.
ㅤ
Если взять нашу ситуацию, то произошло следующее:
1. Удалено 01.txt. и 001.txt -> 01.txt
2. Удалено 02.txt. и 002.txt -> 02.txt
3. Удалено 03.txt. и 003.txt -> 03.txt
✔ Итого потеряли 3 файла, печаль.
Теперь давай более наглядно. Удаляем подопытные файлы и создаем новые. Плюс запишем в каждый файл его имя.
Получилось 6 файлов, в каждом файле содержится имя самого файла.
Смотрим что получилось:
Снова модифицируем скрипт и задаем опцию
Выполняем скрипт и смотрим что у нас осталось от файлов.
Теперь смотрим содержимое самих файлов и преисполняемся.
По итогу, если нужно пронумеровать файлы, позаботься об уникальности имён и заранее протестируй на тестовых данных. Чтобы случайно к херам не снести все ассетсы с продакшена.
Ну и всегда обрабатывай исключения если файл уже существует, чтобы не остаться без штанов.
Изучай, всего тебе самого наилучшего!
tags: #linux #bash
—
🔔
Сегодня разбираем проблемный 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
—
🔔
😱 👉 Важное событие для всех, кто хочет повысить производительность своих серверов!
🔆 Присоединяйтесь к открытому уроку «Оптимизация Nginx и Angie под высокие нагрузки»
На занятии вы:
- поймёте, какие параметры влияют на производительность;
- научитесь оптимизировать серверную часть;
- узнаете, как работать с клиентской производительностью.
🏆 Спикер Николай Лавлинский — технический директор в Метод Лаб, PhD Economic Science, опытный руководитель разработки и преподаватель.
👉 Регистрируйтесь для участия: https://vk.cc/cygpJS
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🔆 Присоединяйтесь к открытому уроку «Оптимизация Nginx и Angie под высокие нагрузки»
На занятии вы:
- поймёте, какие параметры влияют на производительность;
- научитесь оптимизировать серверную часть;
- узнаете, как работать с клиентской производительностью.
🏆 Спикер Николай Лавлинский — технический директор в Метод Лаб, PhD Economic Science, опытный руководитель разработки и преподаватель.
👉 Регистрируйтесь для участия: https://vk.cc/cygpJS
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru