Линукс и DevOps Дни
2.03K subscribers
108 photos
8 videos
194 links
Самобытно про разработку, devops, linux, скрипты, тестирование, сисадминство, техдирство, пиэмство и за айтишную жизу.
Download Telegram
Начни свою карьеру в DevOps с курсом от DevOps фабрики! Без воды и траты времени, решай задачи подобранные из реальной практики.

Не конвейер как в этих гигантских академиях, получай личную обратную связь и индивидуальные карьерные рекомендации от DevOps профессионалов.

Узнай больше и попробуй бесплатно
https://devops-factory.com/

Реклама. ООО Байкалтим, ИНН:3851008933, erid: 2VtzquZnhoG
Привет друзья. Частый вопрос: Можно ли в bash скрипте, каким-то образом временно изменить текущий рабочий каталог для выполнения команды, но остаться в каталоге запуска?

Да всё можно, а если говорят что нельзя, то это пиздёшь. Формулировка вопроса конечно замысловатая. Сходу в голову приходит вариант использовать cd (Change Directory), тип такого:

cd /tmp/test && ./exec_command


После запуска команды, переходим в каталог /tmp/test и выполняем exec_command. Логично? Логично! А что если после запуска этой команды, я хочу остаться в том же каталоге из которого запускал эту команду.

Про символы &&/;/|| и т.п. можешь почитать в этой статье.


Вот наглядно что происходит:

1. > pwd
2. /root
3. > cd /tmp/test && ./exec_command
4. > pwd
5. /tmp/test


В самой последней строке видим, что каталог изменился. А я хочу оставаться в root!

Что делать? Есть способы, которые я лично использую в своих bash скриптах. Возможно есть какие-то и другие варианты, если знаешь, пиши в комментарии, будет полезно.

Способ первый:

Добавим в скрипт exec_command такой код:

ls


Запускаем то же самое в круглых скобках:

1. > pwd
2. /root
3. > (cd /tmp/test && ./exec_command)
4. a.txt b.txt c.txt exec_command
5. > pwd
6. /root
7. > ls
8. profit


Что мы видим: после выполнения команды в скобках, отработала команда ls из скрипта и вывела на экран содержимое каталога /tmp/test. Как только произошла магия, всё вернулось обратно в каталог root и вывело на экран содержимое каталога root.

pwd я использую для наглядности, чтобы ты понял суть, в своих скриптах от этого мусора можно избавиться.


Способ второй pushd/popd:

1. > pwd
2. /root
3. > pushd /tmp/test
4. /tmp/test ~
5. > ./exec_command
6. a.txt b.txt c.txt exec_command
7. > popd
8. ~
9. > pwd
10. /root


Механика аналогична первому способу. Но используются древние, инопланетные технологии pushd и popd, это коробочные аналоги cd из 80x годов. Местоположение предыдущих каталогов сохраняются в стек (массив). А потом уже из этого стека можно вытаскивать необходимое. Погугли если интересно, есть статейки.

Ну и бонусом третий способ:

1. > pwd
2. /root
3. cd /tmp/test && ./exec_command
4. a.txt b.txt c.txt exec_command
5. > pwd
6. /tmp/test
7. > cd -
8. /root


Здесь используем чистый cd, но для возврата в предыдущий каталог используем cd с параметром «-».

В 99% случаев никто этим не пользуется, все привыкли в скриптах использовать cd туда-сюда с указанием полных/относительных путей. Но если посмотреть в скрипты коммерческих продуктов, в них активно используются методы с pushd и popd.

Легаси? Возможно. Тут наверное дело больше в элегантности. У каждого свои бест-практики, нет неправильных решений. Если задача приносит ожидаемый результат, значит ты всё сделал правильно.

Ладно, изучай, а я пошёл писать следующий пост про обработку сигналов. И нас тут уже 13к, идем дальше!

tags: #bash

💩
Облачная платформа Selectel для любых ваших задач

Разместить сайт, запустить приложение и быстро масштабировать проект любой сложности можно на облачных серверах Selectel. Настроить базы данных, развернуть кластер Managed Kubernetes или загрузить данные в хранилище с поддержкой S3 API возможно прямо в панели my.selectel.ru.

Кроме того, вы можете быстро настроить автоматические бэкапы сетевых дисков, а также настроить бесплатный облачный файрвол для фильтрации входящего или исходящего трафик приватной подсети.

Преимущества облака Selectel для клиента:

◽️ Облачные серверы соответствуют 152-ФЗ. Это значит, что вы можете хранить и обрабатывать персональные данные до первого уровня защищенности включительно.

◽️ IAM-система разграничивает доступ к ресурсам и данным, определяет роли пользователей. Возможен вход в панель управления Selectel через SSO.

◽️ Развернуть инфраструктуру можно в удобной панели за пару минут. Если у вас возникнут вопросы, наша техподдержка ответит на них в любое время.

Переходите...
Время неумолимо. Кажется ещё сегодня пятница, а уже на горизонте маячит понедельник.

Привет. Сегодня про сигналы и как с ними взаимодействовать через bash скрипты. Да те самые SIGINT, SIGTERM, SIGKILL.

Вероятно ты про них слышал. Ладно, скажу больше, ты даже ими пользуешься. Банально нажимая CTRL+C, ты посылаешь сигнал SIGINT. Этот сигнал позволяет скрипту корректно завершить работу.

Если прервать скрипт по нажатию CTRL+C, то вернется код ошибки 130 (echo $?). А откуда взялось 130?

Потому что если процесс завершается из-за полученного сигнала, он возвращает значение, которое является суммой 128 и кода сигнала. SIGINT = 2, итого получаем 128+2=130.

Цифра 128 выбрана не случайно, сделано это для того, чтобы избежать конфликтов с другими возвращаемыми значениями процесса. Linux использует значения от 0-127 для обозначения различных ошибок и успешного завершения процесса. Поэтому значения от 128 и выше можно использовать для обозначения сигналов, приведших к завершению процесса, не создавая путаницы с кодами завершения процесса.


Для обработки сигналов, в Bash можно использовать обработчики. Спасибо, капитан!

Пример обработки сигналов:

#!/bin/bash

# Функция для обработки SIGINT (Ctrl+C)
sigint_handler() {
echo "Caught SIGINT (Ctrl+C). Exiting..."
exit 1
}

# Функция для обработки SIGTERM
sigterm_handler() {
echo "Caught SIGTERM. Exiting..."
exit 1
}

# Установка обработчиков сигналов
trap sigint_handler SIGINT
trap sigterm_handler SIGTERM

# Главный цикл
while true; do
echo "Script is running..."
sleep 1
done


Скрипт запустит бесконечный цикл. Если нажать CTRL+C, сработает хендлер sigint_handler и скрипт завершится с кодом 1. Видишь, мы поменяли дефолтный код 130 на 1.

А хендлер sigterm_handler сработает в том случае если скрипт убить через kill -TERM PID. Процесс так же завершится с кодом 1.

Таким образом в хендлерах мы можем построить любую логику, например вывести слово «хуй». А если выпилить exit 1, то по нажатию CTRL+C скрипт вообще никак не отреагирует на завершение и продолжит выполняться дальше. БЕСКОНЕЧНО!

Прям море возможностей открывается. В малварях частенько такой подход используют, именно с перехватом и подавлением сигналов. Но это не наша тема, просто для информации.

SIGTERM
= Этот сигнал обычно отправляется операционной системой при попытке завершения процесса. Обработка SIGTERM позволяет скрипту завершить работу безопасно и корректно освободить ресурсы.


Да, есть еще SIGKILL, а вот его обработать не получится. Он нужен для крайних мер. Например, если из скрипта выше убрать exit 1, то бесконечный цикл удастся завершить только через SIGKILL (kill PID). Ну ту тоже логично, всё продумано.

Но я уверен, что и SIGKILL можно перехватить, правда пока лень с этим разбираться, всяко придется в ядро лезть в strace ковыряться и возможно что-то патчить.

Существуют и другие сигналы SIGHUP / SIGUSR1 / SIGPIPE / SIGCHLD и т.п. но сути это не меняет, пост про перехват сигналов.

Обработка сигналов, это как юнит тесты, они нужны, но никто их не пишет. Но в бест-практиках очень даже рекомендуется использовать такие обработки.

В принципе на этом можно и закончить, тему разобрали, база есть, дальше уже от своих потребностей двигайся и наращивай функционал. На собесах кстати иногда спрашивают про обработку сигналов и если на этот вопрос ответить, оффер твой.

Всех с пятницей, хороших предстоящих выходных и береги себя! Увидимся!

tags: #bash #linux

💩
О чо на почту сегодня прилетело. Вчера в чатике видел, ссылка уже пролетала от Константина, но чет значения не придал. А после этого письма придал.

Идем по этой ссылке и тыкаем какой сервак запустить в браузере, с виндой или линуксом. Проходим капчу если необходимо. Если не запускается, значит мешают всякие adguard и т.п. плагины. У меня в яндекс браузере сразу не заработало, а вот в чистом фоксе норм взлетело.

Короче под капотом Debian 12 или Windows Server 2016 (14393.6709) Длительность онлайн сессии 15 минут.

С докой по сервакам, можешь ознакомиться здесь, там с картинками и всеми подробностями.

Винда немного подтормаживает, возможно из-за мобильного интернета, но вот пингвин прям как родной запускается.

Ради интереса проверил лицензию winrar, на момент закралась мысль - а что если... Но нет, всего лишь пробная версия на 40 дней. Ну да ладно.

Не знаю, буду ли я этим пользоваться, но в избранное добавил, возможно когда-нибудь пригодится, что-нибудь потестировать.

Выжимка из доки:

Мы создали ульт...
KTS и Yandex Cloud приглашают на вебинар: Динамические окружения для stateless- и stateful-сервисов

На совместном вебинаре 12 марта в 12:00:

❇️ Расскажут, какие проблемы динамические окружения помогают решать в командах разработки

❇️ Рассмотрят тонкости развертывания и тестирования Stateless и Stateful сервисов

❇️ Поделятся опытом KTS в создании подобной инфраструктуры и возможностями улучшения этого процесса

❇️ Расскажут, на что стоит обратить внимание при создании подобных инструментов

Посмотреть более подробную программу можно на странице вебинара.

👉 Ссылку на трансляцию можно получить в нашем боте

Ждем вас 12 марта!

Реклама. ООО «СТУДИЯ КТС», ИНН: 7733257480, erid: 2VtzquprNev
Зима меня что-то прям знатно так подзаебала, тысяча одёжек, реанимация автомобиля в -40, то дождь за шиворот, то метель в морду лица. Всё же летом как-то попроще мне кажется, хотя и жара сильно изматывает. Нежные мы стали с этой удалёнкой, жёсткая зависимость от зоны комфорта. Ладно…

Начинать неделю с ебобо-постов очень не хочется, поэтому давай расслабим булки и решим одну интересную, нетривиальную задачку.

Можно ли после запуска скрипта, перенаправить STDOUT и STDERR в другое место, не останавливая сам скрипт/процесс? Ответ ты и сам знаешь, конечно можно! Ща покажу как.

Чтобы все стало понятным, берем для эксперимента такую команду и запускаем ее в терминале.

tail -f /var/log/auth.log &


Запускаем в фоне просмотр логов авторизации. Задачка запустилась в фоне и отдала нам консоль обратно в интерактивное состояние.

Как только в файле auth.log появляются новые записи, оно начинает нам срать в терминал, мешая дальнейшей работе. Хоть задача и запущена в фоне, но активно работает с текущим tty и stdout.

Чтобы нам все это дело отправить в dev/null не останавливая фоновую задачу/скрипт. Проделываем следующий трюк:

ps aux | grep tail


Узнаём PID процесса, в моём случае это 1327692, далее смотрим файловые дескрипторы этого процесса:

ls -l /proc/1327692/fd


Получаем нечто подобное:

0 -> /dev/pts/1
1 -> /dev/pts/1
2 -> /dev/pts/1
3 -> /var/log/auth.log


Знакомо? stdout = 1 (поток вывода), stderr = 2 (поток с ошибками) и т.п. Уже наталкивает на мысль чо будем делать? Нет? Поехали дальше.

Теперь каким-то образом, надо зареврайтить это говнище в dev/null. Для этого будем использовать утилиту gdb, она обычно идет в коробке либо ставится через апт-инсталл.

gdb - отладчик для программ, написанных на Си. Отладчик позволяет выполнить программу пошагово, посмотреть значения всех переменных на каждом из этапов выполнения, а если это необходимо, то и дизассемблировать код и посмотреть состояние регистров процессора.


Запускаем кракена:

gdb -p 1327692 /usr/bin/tail


Подключаемся к процессу 1327692 и указываем путь до tail. На экран вывалит кучу всякого мусора, не пугайся, он тебе не нужен.

Всё, теперь ты находишься в «хакерской» оболочке (gdb), начинаем реврайтить говнище. Вводим такие команды:

p (int) dup2((int) open("/dev/null", 0), 1)
p (int) dup2((int) open("/dev/null", 0), 2)


На экран получишь нечто подобное:

$1 = 1
$2 = 2


После этого закрываем gdb:

detach
quit


Вот и всё. Говнище из auth.log перестало выводиться на экран, хотя фоновый процесс продолжает работать. Смотрим что у нас получилось:

ls -l /proc/1327692/fd


И видим что наш реврайт сработал:

0 -> /dev/pts/1
1 -> /dev/null
2 -> /dev/null
3 -> /var/log/auth.log
4 -> anon_inode:inotify
5 -> /dev/null
6 -> /dev/null


Теперь stdout(1) и stderr(2) смотрят в dev/null, собственно этого мы и желали добиться.

Разберем команды gdb

«p» (print), выводим результат команды на экран.

«dup2», дублирует файловый дескриптор. Первым аргументом идет файловый дескриптор, который нужно продублировать. Второй аргумент это новый файловый дескриптор, который нужно использовать.

Все это дело приводим к типу Int, хотя раньше и без этого всё отлично работало, видимо что-то поменялось.

И получается такое: Команда сначала открывает файл dev/null, затем дублирует его файловый дескриптор, а затем перенаправляет stdout в этот файл. Прозрачно? Прозрачно!

Вот такие пироги. Надеюсь было интересно.

Кстати чтобы не упарываться с gdb, существует софтина под названием reredirect, делает то же самое, если интересно, можешь потыкать, ссылка git на репозиторий.


Ставь лайк, подписывайся, рекомендуй друзьям. Хорошей тебе рабочей недели!

tags: #bash #linux

💩
🅰️🅰️🅰️
7 причин, почему коты делают «тыгыдык»

Вчера наконец-то собрался силами и добрался до иммобилайзера, всего-то понадобилась неделя. За 5 дней я знатно себе так жопу отморозил без автозапуска. Починил, правда палец сука порезал. Ну это капля в море, на фоне всратых сервисов и неоправданных счетов за ремонт.

Благо сейчас есть интернет, где можно найти буквально любую инфу по багфиксу хоть чего, главное не ссать. Разобрал, посмотрел умным взглядом, собрал, если пару лишних деталей осталось, то уже успех.

Ну и вот, к чему это я. Спустя несколько лет жизни на алиасах, у меня дошли руки забиндить себе в bash хитрую хоткейку.

Сейчас покажу очередной велосипед, который сэкономит мне еще пару секунд прибывания в консоли. А может быть и ты куда-нибудь себе это присобачишь. Погнали!

Есть у меня сервер, на нем крутится самописная bastion оболочка. Как это работает:

1. Цепляюсь в bastion
2. В консоль вываливает список серверов
3. Коннект к серверу ssh <index>

То есть bastion у меня единая точка входа чтобы попасть на другие сервера, даже если на них нет белых айпишников.

Bastion я написал, впечатлившись этим решением от ITSumma, которое называется isolate.


Как я подключался раньше

> ssh user.bashdays.com


Как я подключался потом

> export alias bas="ssh user.bashdays.com"
> bas


Как я подключаюсь сейчас

> alt+b


Прям эволюционный роадмэп. Интересно, какая стадия будет следующей. Итак, повесил я подключение на хоткей, стало довольно удобно. Только открылась консоль, бряк alt+b и я уже внутри.

Хоткей вешал так, добавив это в .bahsrc:

bastion() {
echo "connect to bastion server"
ssh -t qa.bashdays.com 'reset;bash'
}

bind -x '"\eb": bastion'


«ёб» в последней строчке, это как раз клавиша alt+b в кодах ANSI escape sequences. Если нужны другие кнопки, го в гугол, там этого полно.

«-t» создаёт псевдотерминал, чтобы команды вводились на сервере, а не в текущей оболочке.

А reset;bash понадобился, чтобы победить проблему с отображением команд, которые вводишь. Если убрать это хак, то когда будешь что-то вводить в консоли, это не будет отображаться на экране.

В zsh я на быструю руку попытался подобное провернуть, оно даже подключается, но терминал впадает в бэдтрип Read Only, какая-то абстракция с псевдотерминалами. Пока руки не дошли докопаться до сути. Но если у тебя получится это завести, пиши в комменты, сделаешь ОЧЕНЬ нужное и доброе дело.

Вот мои наработки для .zshrc:

bastion() {
echo "connect to bastion server"
ssh -tt user.bashdays.com
}

zle -N bastion
bindkey '\eb' bastion


Так, совсем забыл про котов, эту тему обязательно нужно обсудить. И дело тут не в блуждающем нерве.

На хоткеи ты можешь повесить любую команду, любой комбайн, который только заблагорассудится, например можешь запускать vim или редактирование файла /etc/hosts. Короче изучай.

И давай краба, жду тебя в комментах!

tags: #bash #linux
💻 Готовим новое исследование отечественного рынка DevOps. Это большой разговор с топ-менеджерами и разработчиками, которые развивают DevSecOps для разработки собственного ПО или внедрения готового продукта.

🔔 Примите участие в исследовании, регистрируйтесь по ссылке и получите результат первым!

В фокусе исследования:

⚫️Текущее состояние рынка ИТ с фокусом на DevSecOps
⚫️Готовность перехода компаний на облачные технологии, взаимодействие с DevOps инструментами
⚫️Основные тренды в сфере безопасности DevSecOps
⚫️Рынок специалистов DevSecOps — где искать сотрудников и как изменились зарплаты
⚫️Рейтинги DevOps инструментов и оценка степени использования подходов DevOps в организациях

Станьте респондентом Russia DevOps Report 2023.
Результаты представим уже в апреле!

Реклама. Информация о рекламодателе
🏆 Чтобы получить новые знания, опыт совместной работы и общение с лучшими экспертами, пройдите предварительную регистрацию в Летних школах Яндекса 2024!

Больше 50% выпускников становятся стажёрами и сотрудниками Яндекса💪

В этом году будет запущено больше школ:
🔸 Школа бэкенд-разработки;
🔸 Школа разработки интерфейсов;
🔸 Школа мобильной разработки;
🔸 Школа менеджеров Яндекса;
🔸 Школа аналитиков-разработчиков.

После лекций в онлайне будет практика в офисах Яндекса в Москве, Санкт-Петербурге и Екатеринбурге. Вам оплатят проезд и проживание, если вы из другого города📍

👉Подать заявку
Что случится, если отключить буферизацию

Привет. Чтобы результаты вывода софта/скриптов отображались без задержек в реальном времени — отключи буферизацию.

На практике, эффект буферизации незаметен, либо софт/скрипты и так работают в реальном времени.

Распространенный случай.

Ты всяко с таким сталкивался: запустил программу, которая пишет данные в файл. И пока софтина не отработает, файл с результатами, визуально пустой. Грыжа!

Но хочется же в реальном времени наблюдать, как файл заполняется и делать выводы. А что если софтина работает 10 часов? А выхлоп нужен вчера?

/usr/local/sbin/script.sh &> bashdays.log


Проблема этого условного скрипта, в том, что файл bashdays.log создаётся только, после выполнения скрипта. Как отслеживать прогресс?

Воспользуйся отключением буферизации!

Всё делается с помощью утилиты stdbuf. Утилита изменяет способ буферизации программ.

stdbuf -oL /usr/local/sbin/script.sh &> bashdays.log


Ключ «o» взаимодействует со стандартным выводом (stdout). А аргумент «L» означает Line buffered, то есть, буферизация по строкам.

По умолчанию при перенаправлении в файл, стандартный вывод (stdout) полностью буферизуется и записывается в файл после сброса.


В примере выше, буфер очищается после каждой строки вывода. А в файле bashdays.log появится долгожданный результат, без мучительного ожидания.

Одно из применений stdbuf:

stdbuf -oL nohup /usr/local/sbin/script.sh &> bashdays.log


Если закрыть вкладку с сессией, скрипт продолжит работу.

Либо можешь воспользоваться утилитой script:

script -c <PROGRAM> -f bashdays.txt


Ключ «f» выполняет аналогичную функцию, после каждой операции, запускается flush, запись на диск.

На этом смею откланяться, хорошего дня/вечера!

tags: #bash #linux
Работать и не уставать, достигать цели, но делать это в кайф - реально!
Как научиться делать дела и не выгорать?

Психолог взрослого человека - канал для айтишников, у которых периодически опускаются руки и отключается мозг, ибо переработки и постоянная тревожность не приводят к другим исходам.

▪️ Как научиться отвлекаться от работы и отдыхать?
▪️ Как совместить кучу рабочих задач и время с семьей?
▪️ Как справиться с прокрастинацией?
▪️ Как не растерять запал, даже если начальник и коллеги 💩 и кажется, что ничего не выходит?

Подписывайтесь на канал и научитесь работать без упахивания, выгорания и ущерба для личной жизни!

👨🏻‍💻 Псс. Заходите в закреп канала - там много полезного, и даже бесплатный мини-курс.

Реклама. ООО «ТД «Степмотор», ИНН: 7804501708, erid: 2VtzqwMJebM
Охохо, привет! Размазывать бытовуху не буду, сразу к делу. В bash есть офигительная команда, называется она «readonly». С помощью неё ты сможешь защитить любую переменную от изменения. Получается этакая константа, которую довольно сложно перезаписать.

И не дай бог кто-то решит ее перезаписать, получит в лоб ошибкой:

bash: VAR: readonly variable


Буквально сегодня ебался со скриптом уволившегося коллеги и не мог понять, какого лешего я получаю неочевидные результаты.

Оказалось, всё очень даже очевидно. Этот скуфяра мало того что применил ООП в скриптах (это пиздец), так еще и воспользовался «readonly». Спасибо тебе дорогой друг. Надеюсь на новом месте, тебе такого с кубернейтсами не позволяют делать. Диверсант блядь.

Еще раз, НЕ НУЖНО УСЛОЖНЯТЬ, ООП и выкрутасы оставь для программистов.


Ладно. Теперь про «readonly». Если не можем победить, значит нужно изучить и победить. Это как в анекдоте 18+:

Я ебу все что движется, а всё что не движется, я двигаю и ебу.

Поехали двигать!

Переменная защищается так:

readonly VAR=1234


Если её попытаться переопределить, то моментально отправляешься в пешее эротическое. Возникает логичный вопрос — как её откатить обратно и сделать нормальной переменной?

В голову приходит логичный ответ, сделай так:

unset VAR


А вот и нет! Сразу получишь хуем ошибкой по башке: bash: unset: VAR: cannot unset: readonly variable.

Хм… интересное кино. А чо делать? Не использовать «readonly»! Ну а если пришлось с этим столкнутся, придется использовать древнюю магию. Мы её кстати недавно использовали в этом посте.

Чтобы заансетить константу, открываем «Ящик Пандоры»:

gdb -ex 'call (int) unbind_variable("VAR")' --pid=$$ --batch


Если получил $1 = 0, значит всё прошло успешно.

Такими консервированными переменными хорошо манипулировать во всяких конфигах, например в .bashrc и т.п. Если кто-то захочет что-то переопределить, у него ничего не получится. Защита от дурака. Но помни, что древняя магия gdb может не сработать на этом проклятии, если ты не root.

Например, можно защитить переменную PATH от вмешательств и ни одна собака его не зареврайтит. И порой даже ты сам.

В общем изучай. Хороших тебе предстоящих выходных и береги себя!

tags: #bash #linux
Любишь унижения? Рекомендую!

Здрасти. В Linux есть возможность включить «оскорбительный режим», который работает из коробки без установки дополнительного шлака.

Суть этого режима: при использовании команды sudo, если ты ввел неправильный пароль, система унизит тебя.

Для включения, добавь в файл /etc/sudoers (либо в /etc/sudoers.d/fuck.conf) такую строчку:

Defaults insults


А после этого попробуй выполнить от пользователя:

sudo apt update


И введи неправильный пароль. Результаты бывают разные:

Take a stress pill and think things over.
You fucking stupid shit!
My mind is going. I can feel it.
Realy? Are you on drugs?


Все эти фразочки зашиты в библиотеке /usr/libexec/sudo/sudoers.so. Но на английском не интересно. Поэтому можно выводить своё сообщение через такой хак:

Делается так:

Defaults  badpass_message="Еще одна попытка и я тебя выебу!"


Предварительно закомментируй Defaults insults. Можно конечно пересобрать sudoers.so со своими фразами, но геморно. Ну либо пропатчить прям этот файл через HEX редактор.

Уверен есть способ запустить такой Bash скрипт по триггеру:

#!/bin/bash

messages=("Неверный блядь пароль! У тебя палец сломан?"
"Еще одна попытка и я тебя выебу"
"Может, тебе стоит попробовать свою девичью фамилию?")

echo "${messages[$RANDOM % ${#messages[@]}]}"


Изучай!

tags: #bash #linux
🗓 12 марта, 16:00
📌 Как не потерять бизнес в 2024? Основы информационной безопасности

В 2023 год участились случаи взлома сервисов, хакерских атак, утечек персональных данных. На вебинаре от коллеги обсудят, как обеспечить безопасность инфраструктуры и не потерять данные клиентов.

Программа вебинара:
◽️ Какие атаки были популярны в 2023 году и какие будут актуальны в 2024?
◽️ Как быстро могут вас взломать и какие могут быть последствия?
◽️ Как найти уязвимости и проанализировать безопасность инфраструктуры?
◽️ Пошаговый гайд по повышению защищенности.

Регистрируйтесь на мероприятие и участвуйте в розыгрыше приза за лучший вопрос: https://slc.tl/qdqro

Реклама ООО «Селектел» erid 2VtzquWVJ3V
Кто сеет ветер, тот пожнет бурю

А давай пожнем бурю! Как мы любим. Недавно я писал пост про readonly и переменные. Ну дак вот, заансетить переменную можно и другим способом.

Не спеши переключать канал, будет ОХУЕННО интересно.

Bash теперь не менее опасен чем perl.


ctypes - это не просто очередная скриптовая библиотека, это штука позволяет вызывать функции из shared библиотек на СИ, прямо из bash скриптов. Охуеть да?

Можно сказать это внештатный модуль для Bash с огромным функционалом. Где не справился Bash, справится Bash + ctypes.

Могу сравнить это с паскалем и вставками на ассемблере, ох любил я это дело в школе. Учительница по информатике плакала кровавыми слезами, когда читала мои исходники. А потом вообще просто начала ставить пятерки, чтобы не видеть моих брейнфаков.

Давай попрактикуемся. Собираем модуль ctypes.

git clone https://github.com/taviso/ctypes.sh.git
cd ctypes.sh
./autogen.sh
./configure
make
sudo make install


По умолчанию вся эта байда ставится в папку /usr/local/bin и /usr/local/lib. Но при сборке путь можно изменить через параметр PREFIX=$HOME make install.

Так собрали, установили. Чо дальше? А дальше пишем самую простую so библиотеку:

#include <stdio.h>

void hello_bashdays() {
printf("Hello, Bashdays!\n");
}


Компилируем:

gcc -shared -o /tmp/bashdays.so bashdays.c


На выходе получаем готовый файл bashdays.so с функцией hello_bashdays. Проверяем какие символы доступны в скомпилированной библиотеке:

nm -g /tmp/bashdays.so


Команда nm покажет, все глобальные функции и переменные, которые доступны в библиотеке bashdays.so. Мне выдало такое:

w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
w __cxa_finalize.2.5
w __gmon_start__
0000000000001119 T hello_bashdays
U puts.2.5


Ок. Всё верно! Символ T перед названием функции, означает, что функция глобальная. А символ U (puts) = что эту функцию можно вызвать из вне.

Ну и теперь с помощью ctypes мы можем вызвать эту функцию из Bash скрипта.

#!/bin/bash

source /usr/local/bin/ctypes.sh

dlopen "/tmp/bashdays.so"
dlcall "hello_bashdays"


Опа нихуя! На экран получаем результат выполнения СИ функции hello_bashdays. Собственно Hello, Bashdays!

И это всего лишь верхушка айсберга, если копнуть глубже…

Вот несколько отзывов на ctypes:

- Это отвратительно
- Это должно прекратиться
- Вы зашли слишком далеко
- Это шутка?

Вот такие интересные штуки существуют. Надеюсь тебе понравилось. Теперь ты знаешь как собирать shared so файлы и легко вызывать от туда функции.

Аа забыл, как заансетить переменную:

readonly VAR=123
source /usr/local/bin/ctypes.sh
dlcall unbind_variable string:VAR


Вот и все. И никаких тебе танцев с gdb. Переменная VAR обнулена.

Примени это с умом, ведь на тёмную сторону перейти очень легко. Увы, но я уже там!

🌐 Страница проекта на github


tags: #bash #linux
Лучшие подкасты про саморазвитие в IT

Как понять, каких навыков тебе не хватает для карьерного роста? Как эти навыки развивать и какие курсы выбрать? Чему нужно учиться, чтобы выдержать конкуренцию с нейросетями? Нашли ответы на вопросы в выпусках подкаста:

⭐️Обучение в IT: как его выбрать и совмещать с работой
Из подкаста узнали, как не ошибиться при выборе образовательного трека, какие привычки помогут сделать самообразование приятной рутиной и как распознать бесполезные курсы.

⭐️Нейросети ВМЕСТЕ с разработчиками или ВМЕСТО них
Гости рефлексируют над стремительным проникновением нейросетей в IT и обсуждают, как специалистам адаптироваться и оставаться востребованными.

⭐️ Развитие личного бренда в IT
В выпуске обсудили, почему важно развивать личный бренд и как найти баланс между развитием реальных навыков и самопрезентацией.

Смотрите выпуски на YouTube или слушайте на аудиоплощадках. «Сегодня на ретро» — подкаст о повседневных проблемах в карьере IT-специалистов. В нем практикующие разработчики, те...
Кот насрал в макбук

Причем не «На», а конкретно «Вв». Сегодня снова про гавно и котов, которые выставляют айтишников на 200к рублей.

Сторис

С утра настраивал примитивный kubernetes кластер для клиента, пилил таску с ноута, сидя на унитазе. Ну а как, удалёнка, могу себе позволить. Жил бы один, вообщеб обратно в обезьяну эволюционировал.

Короче время дейлика с другим клиентом, бросаю открытый ноут в сортире на коврик, бегу к стационарному компу где установлен zoom. 15 минут слушаю очередную хуиту от лосей, проблема не у нас, а на серверах. Классика. По привычке — выгораю, шлю нахуй, реву.

Ну и вот!

Вся эта поебень заканчивается, закидываю в кружку кофея, беру вонючий айкос и направляюсь в обсерваторию. А в кабинете меня ждет картина маслом. Ну как маслом…

Ноут который я бросил на коврик… Ему был произведен основательный апгрейд + 100500 к бренду.

Подробности описывать смысла не вижу. Все предельно просто: кот решил, что посрать на теплоё и закрыть крышку будет нативнее, чем в свой тазик.

А новое и тёплое всегда безумно манит. Тем более присутствует интерактив — закрыть крышку. Зона комфорта. Ну ты и сам это прекрасно понимаешь.

Я даже не стал визжать как сучка, мой косяк, спровоцировал животное. И так ему яйца уже заскейлили за заслуги. Уличные коты себе такого не позволяли, как этот голубых сука кровей, сеньор блядь помидор.

Напомнил знакомого, который, любил гадить в лифтах. Сейчас кстати работает JAVA разработчиком. Тоже сеньор, лифты заменил на GIT репозитории. Забавно, но ситуация страшная.

Сначала комбик за 50к, потом стена и диван в зале, а сегодня макбук за 200к. Хотя сам кот стоил всего 5к. Сомнительно конечно вложение было. Что дальше, хуй знает. Снова выгорел, поревел…

Такое происходит только в фильмах, но увы, порой я думаю, что живу в каком-то сценарии Тарантино.


Проанализировав произошедшее, в очередной раз убедился, что от apple и кубернейтсов одно зло. Linux / Windows / Android / Bash / Ctypes наше всё.

Таску в джире пометил как кот - Blocked, а ноут выставил на авито. Так что будь аккуратнее если решишь купить б/у железяку, возможно ранее в её красиво насрали проапгрейдили.

В комментах фото этого диверсанта. Результат апгрейда выкладывать не буду, у меня психологическая травма. Но если есть любители прекрасного, пишите Максу, он скинет.

И всегда помни — даже если кот кастрирован, с его жопой ты ничего не сделаешь. Максимум сможешь провести ретроспективу по методологии «Scrum».

Говорят в айти охуенно весело. Справедливо!

tags: #рабочиебудни
Выделенные серверы Vscale от 1490 ₽/месяц

Сайт, игра, пет-проект или другая идея— все это легко запустить на серверах в простой панели Vscale.

Ты найдешь выделенные и облачные серверы в РФ с бесплатной защитой от DDoS-атак на базовом уровне (L3-L4), с 1 Гбит/с безлимитного Интернета, с GPU или без. Плати за час или за месяц, как удобно.

В скором будущем планируется запуск облачных баз данных и управляемых кластеров Kubernetes. А пока можешь заглянуть в наш уютный чатик, где быстро можно что-то спросить или поделиться опытом.

Посмотри все доступные конфиги в панели Vscale: https://slc.tl/m4t0j

Реклама ООО «Селектел» erid 2VtzqukMxRi
Есть такие команды, они выведут справку по утилите printf:

1. help printf
2. printf --help
3. env printf --help


НО. Каждая команда выведет свою версию справки (почти). То есть результат вывода будет отличаться в разных случаях. Не веришь? Попробуй сам.

В первом пункте с help printf всё понятно. Получишь некий огрызок, который трудно назвать страницей помощи. Да и во втором тоже самое.

В 1-2 вызывается именно встроенная утилита printf в оболочку Bash. А вот в третьем пункте, выведется достаточно внушительный хелп.

И этот внушительный хелп будет от схожей, внешней утилиты printf, которая располагается тут: /usr/bin/printf.

Посмотреть все варианты printf можно так:

type -a printf


На экран выведется список:

printf is a shell builtin
printf is /usr/bin/printf
printf is /bin/printf


Ну и везде советуют пользоваться встроенной в Bash командой help, она нативнее и поддерживает почти весь синтаксис оболочки. Тут уже решать тебе.

Я очень редко читаю документацию таким способом, предпочитаю сразу загуглить. Ладно. Изучай.

tags: #bash