Зима меня что-то прям знатно так подзаебала, тысяча одёжек, реанимация автомобиля в -40, то дождь за шиворот, то метель в морду лица. Всё же летом как-то попроще мне кажется, хотя и жара сильно изматывает. Нежные мы стали с этой удалёнкой, жёсткая зависимость от зоны комфорта. Ладно…
Начинать неделю с ебобо-постов очень не хочется, поэтому давай расслабим булки и решим одну интересную, нетривиальную задачку.
Можно ли после запуска скрипта, перенаправить STDOUT и STDERR в другое место, не останавливая сам скрипт/процесс? Ответ ты и сам знаешь, конечно можно! Ща покажу как.
Чтобы все стало понятным, берем для эксперимента такую команду и запускаем ее в терминале.
Запускаем в фоне просмотр логов авторизации. Задачка запустилась в фоне и отдала нам консоль обратно в интерактивное состояние.
Как только в файле auth.log появляются новые записи, оно начинает нам срать в терминал, мешая дальнейшей работе. Хоть задача и запущена в фоне, но активно работает с текущим tty и stdout.
Чтобы нам все это дело отправить в dev/null не останавливая фоновую задачу/скрипт. Проделываем следующий трюк:
Узнаём PID процесса, в моём случае это 1327692, далее смотрим файловые дескрипторы этого процесса:
Получаем нечто подобное:
Знакомо? stdout = 1 (поток вывода), stderr = 2 (поток с ошибками) и т.п. Уже наталкивает на мысль чо будем делать? Нет? Поехали дальше.
Теперь каким-то образом, надо зареврайтить это говнище в dev/null. Для этого будем использовать утилиту gdb, она обычно идет в коробке либо ставится через апт-инсталл.
Запускаем кракена:
Подключаемся к процессу 1327692 и указываем путь до tail. На экран вывалит кучу всякого мусора, не пугайся, он тебе не нужен.
Всё, теперь ты находишься в «хакерской» оболочке (gdb), начинаем реврайтить говнище. Вводим такие команды:
На экран получишь нечто подобное:
После этого закрываем gdb:
Вот и всё. Говнище из auth.log перестало выводиться на экран, хотя фоновый процесс продолжает работать. Смотрим что у нас получилось:
И видим что наш реврайт сработал:
Теперь stdout(1) и stderr(2) смотрят в dev/null, собственно этого мы и желали добиться.
Разберем команды gdb
«p» (print), выводим результат команды на экран.
«dup2», дублирует файловый дескриптор. Первым аргументом идет файловый дескриптор, который нужно продублировать. Второй аргумент это новый файловый дескриптор, который нужно использовать.
Все это дело приводим к типу Int, хотя раньше и без этого всё отлично работало, видимо что-то поменялось.
И получается такое: Команда сначала открывает файл dev/null, затем дублирует его файловый дескриптор, а затем перенаправляет stdout в этот файл. Прозрачно? Прозрачно!
Вот такие пироги. Надеюсь было интересно.
Ставь лайк, подписывайся, рекомендуй друзьям. Хорошей тебе рабочей недели!
tags: #bash #linux
—
💩
Начинать неделю с ебобо-постов очень не хочется, поэтому давай расслабим булки и решим одну интересную, нетривиальную задачку.
Можно ли после запуска скрипта, перенаправить 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. Коннект к серверу
То есть bastion у меня единая точка входа чтобы попасть на другие сервера, даже если на них нет белых айпишников.
Как я подключался раньше
Как я подключался потом
Как я подключаюсь сейчас
Прям эволюционный роадмэп. Интересно, какая стадия будет следующей. Итак, повесил я подключение на хоткей, стало довольно удобно. Только открылась консоль, бряк alt+b и я уже внутри.
Хоткей вешал так, добавив это в .bahsrc:
«ёб» в последней строчке, это как раз клавиша alt+b в кодах ANSI escape sequences. Если нужны другие кнопки, го в гугол, там этого полно.
«-t» создаёт псевдотерминал, чтобы команды вводились на сервере, а не в текущей оболочке.
А reset;bash понадобился, чтобы победить проблему с отображением команд, которые вводишь. Если убрать это хак, то когда будешь что-то вводить в консоли, это не будет отображаться на экране.
В zsh я на быструю руку попытался подобное провернуть, оно даже подключается, но терминал впадает в бэдтрип Read Only, какая-то абстракция с псевдотерминалами. Пока руки не дошли докопаться до сути. Но если у тебя получится это завести, пиши в комменты, сделаешь ОЧЕНЬ нужное и доброе дело.
Вот мои наработки для .zshrc:
Так, совсем забыл про котов, эту тему обязательно нужно обсудить. И дело тут не в блуждающем нерве.
На хоткеи ты можешь повесить любую команду, любой комбайн, который только заблагорассудится, например можешь запускать vim или редактирование файла /etc/hosts. Короче изучай.
И давай краба, жду тебя в комментах!
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.
Результаты представим уже в апреле!
Реклама. Информация о рекламодателе
🔔 Примите участие в исследовании, регистрируйтесь по ссылке и получите результат первым!
В фокусе исследования:
⚫️Текущее состояние рынка ИТ с фокусом на DevSecOps
⚫️Готовность перехода компаний на облачные технологии, взаимодействие с DevOps инструментами
⚫️Основные тренды в сфере безопасности DevSecOps
⚫️Рынок специалистов DevSecOps — где искать сотрудников и как изменились зарплаты
⚫️Рейтинги DevOps инструментов и оценка степени использования подходов DevOps в организациях
Станьте респондентом Russia DevOps Report 2023.
Результаты представим уже в апреле!
Реклама. Информация о рекламодателе
🏆 Чтобы получить новые знания, опыт совместной работы и общение с лучшими экспертами, пройдите предварительную регистрацию в Летних школах Яндекса 2024!
Больше 50% выпускников становятся стажёрами и сотрудниками Яндекса💪
В этом году будет запущено больше школ:
🔸 Школа бэкенд-разработки;
🔸 Школа разработки интерфейсов;
🔸 Школа мобильной разработки;
🔸 Школа менеджеров Яндекса;
🔸 Школа аналитиков-разработчиков.
После лекций в онлайне будет практика в офисах Яндекса в Москве, Санкт-Петербурге и Екатеринбурге. Вам оплатят проезд и проживание, если вы из другого города📍
👉Подать заявку
Больше 50% выпускников становятся стажёрами и сотрудниками Яндекса💪
В этом году будет запущено больше школ:
🔸 Школа бэкенд-разработки;
🔸 Школа разработки интерфейсов;
🔸 Школа мобильной разработки;
🔸 Школа менеджеров Яндекса;
🔸 Школа аналитиков-разработчиков.
После лекций в онлайне будет практика в офисах Яндекса в Москве, Санкт-Петербурге и Екатеринбурге. Вам оплатят проезд и проживание, если вы из другого города📍
👉Подать заявку
Что случится, если отключить буферизацию
Привет. Чтобы результаты вывода софта/скриптов отображались без задержек в реальном времени — отключи буферизацию.
На практике, эффект буферизации незаметен, либо софт/скрипты и так работают в реальном времени.
Распространенный случай.
Ты всяко с таким сталкивался: запустил программу, которая пишет данные в файл. И пока софтина не отработает, файл с результатами, визуально пустой. Грыжа!
Но хочется же в реальном времени наблюдать, как файл заполняется и делать выводы. А что если софтина работает 10 часов? А выхлоп нужен вчера?
Проблема этого условного скрипта, в том, что файл bashdays.log создаётся только, после выполнения скрипта. Как отслеживать прогресс?
Воспользуйся отключением буферизации!
Всё делается с помощью утилиты stdbuf. Утилита изменяет способ буферизации программ.
Ключ «o» взаимодействует со стандартным выводом (stdout). А аргумент «L» означает Line buffered, то есть, буферизация по строкам.
В примере выше, буфер очищается после каждой строки вывода. А в файле bashdays.log появится долгожданный результат, без мучительного ожидания.
Одно из применений stdbuf:
Если закрыть вкладку с сессией, скрипт продолжит работу.
Либо можешь воспользоваться утилитой script:
Ключ «f» выполняет аналогичную функцию, после каждой операции, запускается flush, запись на диск.
На этом смею откланяться, хорошего дня/вечера!
tags: #bash #linux
—
Привет. Чтобы результаты вывода софта/скриптов отображались без задержек в реальном времени — отключи буферизацию.
На практике, эффект буферизации незаметен, либо софт/скрипты и так работают в реальном времени.
Распространенный случай.
Ты всяко с таким сталкивался: запустил программу, которая пишет данные в файл. И пока софтина не отработает, файл с результатами, визуально пустой. Грыжа!
Но хочется же в реальном времени наблюдать, как файл заполняется и делать выводы. А что если софтина работает 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
Как научиться делать дела и не выгорать?
Психолог взрослого человека - канал для айтишников, у которых периодически опускаются руки и отключается мозг, ибо переработки и постоянная тревожность не приводят к другим исходам.
▪️ Как научиться отвлекаться от работы и отдыхать?
▪️ Как совместить кучу рабочих задач и время с семьей?
▪️ Как справиться с прокрастинацией?
▪️ Как не растерять запал, даже если начальник и коллеги 💩 и кажется, что ничего не выходит?
Подписывайтесь на канал и научитесь работать без упахивания, выгорания и ущерба для личной жизни!
👨🏻💻 Псс. Заходите в закреп канала - там много полезного, и даже бесплатный мини-курс.
Реклама. ООО «ТД «Степмотор», ИНН: 7804501708, erid: 2VtzqwMJebM
Охохо, привет! Размазывать бытовуху не буду, сразу к делу. В bash есть офигительная команда, называется она «readonly». С помощью неё ты сможешь защитить любую переменную от изменения. Получается этакая константа, которую довольно сложно перезаписать.
И не дай бог кто-то решит ее перезаписать, получит в лоб ошибкой:
Буквально сегодня ебался со скриптом уволившегося коллеги и не мог понять, какого лешего я получаю неочевидные результаты.
Оказалось, всё очень даже очевидно. Этот скуфяра мало того что применил ООП в скриптах (это пиздец), так еще и воспользовался «readonly». Спасибо тебе дорогой друг. Надеюсь на новом месте, тебе такого с кубернейтсами не позволяют делать. Диверсант блядь.
Ладно. Теперь про «readonly». Если не можем победить, значит нужно изучить и победить. Это как в анекдоте 18+:
Я ебу все что движется, а всё что не движется, я двигаю и ебу.
Поехали двигать!
Переменная защищается так:
Если её попытаться переопределить, то моментально отправляешься в пешее эротическое. Возникает логичный вопрос — как её откатить обратно и сделать нормальной переменной?
В голову приходит логичный ответ, сделай так:
А вот и нет! Сразу получишьхуем ошибкой по башке:
Хм… интересное кино. А чо делать? Не использовать «readonly»! Ну а если пришлось с этим столкнутся, придется использовать древнюю магию. Мы её кстати недавно использовали в этом посте.
Чтобы заансетить константу, открываем «Ящик Пандоры»:
Если получил $1 = 0, значит всё прошло успешно.
Такими консервированными переменными хорошо манипулировать во всяких конфигах, например в .bashrc и т.п. Если кто-то захочет что-то переопределить, у него ничего не получится. Защита от дурака. Но помни, что древняя магия gdb может не сработать на этом проклятии, если ты не root.
Например, можно защитить переменную PATH от вмешательств и ни одна собака его не зареврайтит. И порой даже ты сам.
В общем изучай. Хороших тебе предстоящих выходных и береги себя!
tags: #bash #linux
—
И не дай бог кто-то решит ее перезаписать, получит в лоб ошибкой:
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. Можно конечно пересобрать
Уверен есть способ запустить такой Bash скрипт по триггеру:
Изучай!
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
📌 Как не потерять бизнес в 2024? Основы информационной безопасности
В 2023 год участились случаи взлома сервисов, хакерских атак, утечек персональных данных. На вебинаре от коллеги обсудят, как обеспечить безопасность инфраструктуры и не потерять данные клиентов.
Программа вебинара:
◽️ Какие атаки были популярны в 2023 году и какие будут актуальны в 2024?
◽️ Как быстро могут вас взломать и какие могут быть последствия?
◽️ Как найти уязвимости и проанализировать безопасность инфраструктуры?
◽️ Пошаговый гайд по повышению защищенности.
Регистрируйтесь на мероприятие и участвуйте в розыгрыше приза за лучший вопрос: https://slc.tl/qdqro
Реклама ООО «Селектел» erid 2VtzquWVJ3V
Кто сеет ветер, тот пожнет бурю
А давай пожнем бурю! Как мы любим. Недавно я писал пост про readonly и переменные. Ну дак вот, заансетить переменную можно и другим способом.
Не спеши переключать канал, будет ОХУЕННО интересно.
Bash теперь не менее опасен чем perl.
ctypes - это не просто очередная скриптовая библиотека, это штука позволяет вызывать функции из shared библиотек на СИ, прямо из bash скриптов. Охуеть да?
Можно сказать это внештатный модуль для Bash с огромным функционалом. Где не справился Bash, справится Bash + ctypes.
Могу сравнить это с паскалем и вставками на ассемблере, ох любил я это дело в школе. Учительница по информатике плакала кровавыми слезами, когда читала мои исходники. А потом вообще просто начала ставить пятерки, чтобы не видеть моих брейнфаков.
Давай попрактикуемся. Собираем модуль ctypes.
По умолчанию вся эта байда ставится в папку /usr/local/bin и /usr/local/lib. Но при сборке путь можно изменить через параметр
Так собрали, установили. Чо дальше? А дальше пишем самую простую so библиотеку:
Компилируем:
На выходе получаем готовый файл
Команда nm покажет, все глобальные функции и переменные, которые доступны в библиотеке
Ок. Всё верно! Символ T перед названием функции, означает, что функция глобальная. А символ U (puts) = что эту функцию можно вызвать из вне.
Ну и теперь с помощью ctypes мы можем вызвать эту функцию из Bash скрипта.
Опа нихуя! На экран получаем результат выполнения СИ функции hello_bashdays. Собственно Hello, Bashdays!
И это всего лишь верхушка айсберга, если копнуть глубже…
Вот несколько отзывов на ctypes:
- Это отвратительно
- Это должно прекратиться
- Вы зашли слишком далеко
- Это шутка?
Вот такие интересные штуки существуют. Надеюсь тебе понравилось. Теперь ты знаешь как собирать shared so файлы и легко вызывать от туда функции.
Аа забыл, как заансетить переменную:
Вот и все. И никаких тебе танцев с gdb. Переменная VAR обнулена.
Примени это с умом, ведь на тёмную сторону перейти очень легко. Увы, но я уже там!
🌐 Страница проекта на github
tags: #bash #linux
—
А давай пожнем бурю! Как мы любим. Недавно я писал пост про 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-специалистов. В нем практикующие разработчики, те...
Как понять, каких навыков тебе не хватает для карьерного роста? Как эти навыки развивать и какие курсы выбрать? Чему нужно учиться, чтобы выдержать конкуренцию с нейросетями? Нашли ответы на вопросы в выпусках подкаста:
⭐️Обучение в IT: как его выбрать и совмещать с работой
Из подкаста узнали, как не ошибиться при выборе образовательного трека, какие привычки помогут сделать самообразование приятной рутиной и как распознать бесполезные курсы.
⭐️Нейросети ВМЕСТЕ с разработчиками или ВМЕСТО них
Гости рефлексируют над стремительным проникновением нейросетей в IT и обсуждают, как специалистам адаптироваться и оставаться востребованными.
⭐️ Развитие личного бренда в IT
В выпуске обсудили, почему важно развивать личный бренд и как найти баланс между развитием реальных навыков и самопрезентацией.
Смотрите выпуски на YouTube или слушайте на аудиоплощадках. «Сегодня на ретро» — подкаст о повседневных проблемах в карьере IT-специалистов. В нем практикующие разработчики, те...
Кот насрал в макбук
Причем не «На», а конкретно «Вв». Сегодня снова про гавно и котов, которые выставляют айтишников на 200к рублей.
Сторис
С утра настраивал примитивный kubernetes кластер для клиента, пилил таску с ноута, сидя на унитазе. Ну а как, удалёнка, могу себе позволить. Жил бы один, вообщеб обратно в обезьяну эволюционировал.
Короче время дейлика с другим клиентом, бросаю открытый ноут в сортире на коврик, бегу к стационарному компу где установлен zoom. 15 минут слушаю очередную хуиту от лосей, проблема не у нас, а на серверах. Классика. По привычке — выгораю, шлю нахуй, реву.
Ну и вот!
Вся эта поебень заканчивается, закидываю в кружку кофея, беру вонючий айкос и направляюсь в обсерваторию. А в кабинете меня ждет картина маслом. Ну как маслом…
Ноут который я бросил на коврик… Ему был произведен основательный апгрейд + 100500 к бренду.
Подробности описывать смысла не вижу. Все предельно просто: кот решил, что посрать на теплоё и закрыть крышку будет нативнее, чем в свой тазик.
А новое и тёплое всегда безумно манит. Тем более присутствует интерактив — закрыть крышку. Зона комфорта. Ну ты и сам это прекрасно понимаешь.
Я даже не стал визжать как сучка, мой косяк, спровоцировал животное. И так ему яйца уже заскейлили за заслуги. Уличные коты себе такого не позволяли, как этот голубых сука кровей, сеньор блядь помидор.
Напомнил знакомого, который, любил гадить в лифтах. Сейчас кстати работает JAVA разработчиком. Тоже сеньор, лифты заменил на GIT репозитории. Забавно, но ситуация страшная.
Сначала комбик за 50к, потом стена и диван в зале, а сегодня макбук за 200к. Хотя сам кот стоил всего 5к. Сомнительно конечно вложение было. Что дальше, хуй знает. Снова выгорел, поревел…
Проанализировав произошедшее, в очередной раз убедился, что от apple и кубернейтсов одно зло. Linux / Windows / Android / Bash / Ctypes наше всё.
Таску в джире пометил как кот - Blocked, а ноут выставил на авито. Так что будь аккуратнее если решишь купить б/у железяку, возможно ранее в её красивонасрали проапгрейдили.
В комментах фото этого диверсанта. Результат апгрейда выкладывать не буду, у меня психологическая травма. Но если есть любители прекрасного, пишите Максу, он скинет.
И всегда помни — даже если кот кастрирован, с его жопой ты ничего не сделаешь. Максимум сможешь провести ретроспективу по методологии «Scrum».
Говорят в айти охуенно весело. Справедливо!
tags: #рабочиебудни
—
Причем не «На», а конкретно «Вв». Сегодня снова про гавно и котов, которые выставляют айтишников на 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
Сайт, игра, пет-проект или другая идея— все это легко запустить на серверах в простой панели Vscale.
Ты найдешь выделенные и облачные серверы в РФ с бесплатной защитой от DDoS-атак на базовом уровне (L3-L4), с 1 Гбит/с безлимитного Интернета, с GPU или без. Плати за час или за месяц, как удобно.
В скором будущем планируется запуск облачных баз данных и управляемых кластеров Kubernetes. А пока можешь заглянуть в наш уютный чатик, где быстро можно что-то спросить или поделиться опытом.
Посмотри все доступные конфиги в панели Vscale: https://slc.tl/m4t0j
Реклама ООО «Селектел» erid 2VtzqukMxRi
Есть такие команды, они выведут справку по утилите printf:
НО. Каждая команда выведет свою версию справки (почти). То есть результат вывода будет отличаться в разных случаях. Не веришь? Попробуй сам.
В первом пункте с help printf всё понятно. Получишь некий огрызок, который трудно назвать страницей помощи. Да и во втором тоже самое.
В 1-2 вызывается именно встроенная утилита printf в оболочку Bash. А вот в третьем пункте, выведется достаточно внушительный хелп.
И этот внушительный хелп будет от схожей, внешней утилиты printf, которая располагается тут: /usr/bin/printf.
Посмотреть все варианты printf можно так:
На экран выведется список:
Ну и везде советуют пользоваться встроенной в Bash командой help, она нативнее и поддерживает почти весь синтаксис оболочки. Тут уже решать тебе.
Я очень редко читаю документацию таким способом, предпочитаю сразу загуглить. Ладно. Изучай.
tags: #bash
—
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
—
Научитесь разрабатывать безопасные приложения на курсе Positive Technologies
19 марта стартует обучение на курсе AppSec: Разработка безопасного программного обеспечения.
Курс разработан совместно с ведущими экспертами в области безопасной разработки и проводится на базе МФТИ.
Вы узнаете основные принципы и методологии разработки безопасных приложений, научитесь работать с угрозами, рисками и обеспечивать безопасность на разных уровнях: от контейнерной инфраструктуры до облачной безопасности.
Курс будет для вас полезен, если вы являетесь практикующим разработчиком, DevOps-инженером, системным администратором или тестировщиком.
О чём ещё важно знать:
- Вас ждёт 4,5 месяца обучения.
- Лекции и семинары будут проходить 2-3 раза в неделю в 19:00.
- В ходе обучения закрепите практику на 3-х практических проектах.
Новый поток стартует 19 марта – успейте оставить заявку!
19 марта стартует обучение на курсе AppSec: Разработка безопасного программного обеспечения.
Курс разработан совместно с ведущими экспертами в области безопасной разработки и проводится на базе МФТИ.
Вы узнаете основные принципы и методологии разработки безопасных приложений, научитесь работать с угрозами, рисками и обеспечивать безопасность на разных уровнях: от контейнерной инфраструктуры до облачной безопасности.
Курс будет для вас полезен, если вы являетесь практикующим разработчиком, DevOps-инженером, системным администратором или тестировщиком.
О чём ещё важно знать:
- Вас ждёт 4,5 месяца обучения.
- Лекции и семинары будут проходить 2-3 раза в неделю в 19:00.
- В ходе обучения закрепите практику на 3-х практических проектах.
Новый поток стартует 19 марта – успейте оставить заявку!
🚀 Хотите узнать, как отслеживать стабильность развертывания в вашем проекте?
✅Тогда вам обязательно стоит посетить бесплатный урок по теме «KPI и метрики непрерывной доставки — отслеживаем стабильность развертывания на примере ArgoCD» от OTUS! Спикер Михаил Чугунов — ведущий DevOps-инженер.
⚡️На вебинаре:
- рассмотрим, какие метрики и ключевые показатели нужны для успешного мониторинга и оценивания качества конвейера доставки;
- поговорим об инструментах;
- на примере ArgoCD разберем несколько кейсов, которые могут пригодиться на «боевых» стендах.
⏰ Занятие пройдёт 26 марта в 20:00 мск в рамках курса «SRE практики и инструменты». Доступна рассрочка на обучение!
➡️Пройдите короткий тест прямо сейчас и получите спец. цену на курс, а также запись урока!
✅Тогда вам обязательно стоит посетить бесплатный урок по теме «KPI и метрики непрерывной доставки — отслеживаем стабильность развертывания на примере ArgoCD» от OTUS! Спикер Михаил Чугунов — ведущий DevOps-инженер.
⚡️На вебинаре:
- рассмотрим, какие метрики и ключевые показатели нужны для успешного мониторинга и оценивания качества конвейера доставки;
- поговорим об инструментах;
- на примере ArgoCD разберем несколько кейсов, которые могут пригодиться на «боевых» стендах.
⏰ Занятие пройдёт 26 марта в 20:00 мск в рамках курса «SRE практики и инструменты». Доступна рассрочка на обучение!
➡️Пройдите короткий тест прямо сейчас и получите спец. цену на курс, а также запись урока!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576Не бей себя ушами по щекам!
Вопрос который я задаю на собесах, возможно с подвохом. Частенько ставит в ступор соискателей. Короче.
Есть два бесконечных bash цикла:
И тут начинается… у людей включается javascript мышление и они начинают троить. Раз есть задача, значит есть и разница в поведении, значит будут какие-то разные ожидаемые результаты.
Рисуют мне какие-то формулы, строят гипотезы, даже пытаются доказать свою правоту и послать меня на хуй.
Ведь как происходит, пишешь ты годами bash скрипты и даже не задумываешься, а схренали я использую «:» а не «true»? Да потому что оно нахер не всралось про это думать, работает и ок.
На самом деле эти циклы делаю одно и тоже. Объяснение простое:
Команда «:» всегда возвращает 0. Да «:» это команда, попробуй её запустить, а следом выполнить
Эта пустая команда, которая ничего не делает и всегда завершается успехом. Ее используют, там где в синтаксисе скрипта требуется какая-либо команда.
Для while справедливо требуется продолжение, вот мы и продолжаем с помощью «:» чтобы интерпретатор не засыпал ошибками. Этакая заглушка, для синтаксической корректности.
Ну а так как true тоже команда и всегда возвращает статус 0, получается что «:» и true = идентичны. Просто написать двоеточие намного быстрее.
Ноги растут из древних Bourne Shell, где не было встроенных команд ни true ни false. Использовали именно «:».
Получается «:» легаси? Ну можно и так сказать. Если хочешь чтобы твои скрипты работали в древних оболочках, используй «:». А если похер, то делай true.
Вот что лучше читается?
Мне очевиднее первый вариант, если не знать за «:», то словишь ступор. Такие дела. Изучай.
tags: #linux #bash
—
Вопрос который я задаю на собесах, возможно с подвохом. Частенько ставит в ступор соискателей. Короче.
Есть два бесконечных bash цикла:
while :
do
done
while true
do
done
Вопрос: почему в первом случае используется «:», а во втором «true»?
И тут начинается… у людей включается javascript мышление и они начинают троить. Раз есть задача, значит есть и разница в поведении, значит будут какие-то разные ожидаемые результаты.
Рисуют мне какие-то формулы, строят гипотезы, даже пытаются доказать свою правоту и послать меня на хуй.
Ведь как происходит, пишешь ты годами bash скрипты и даже не задумываешься, а схренали я использую «:» а не «true»? Да потому что оно нахер не всралось про это думать, работает и ок.
На самом деле эти циклы делаю одно и тоже. Объяснение простое:
Команда «:» всегда возвращает 0. Да «:» это команда, попробуй её запустить, а следом выполнить
echo $? и получишь 0.Эта пустая команда, которая ничего не делает и всегда завершается успехом. Ее используют, там где в синтаксисе скрипта требуется какая-либо команда.
Для while справедливо требуется продолжение, вот мы и продолжаем с помощью «:» чтобы интерпретатор не засыпал ошибками. Этакая заглушка, для синтаксической корректности.
Ну а так как true тоже команда и всегда возвращает статус 0, получается что «:» и true = идентичны. Просто написать двоеточие намного быстрее.
Хотя с другой стороны, если писать true, то код становится более читаемым.
Ноги растут из древних Bourne Shell, где не было встроенных команд ни true ни false. Использовали именно «:».
Получается «:» легаси? Ну можно и так сказать. Если хочешь чтобы твои скрипты работали в древних оболочках, используй «:». А если похер, то делай true.
Вот что лучше читается?
if true; then
echo "hello bashdays"
fi
if :; then
echo "hello bashdays"
fi
Мне очевиднее первый вариант, если не знать за «:», то словишь ступор. Такие дела. Изучай.
tags: #linux #bash
—
Java используют Сбербанк, «Яндекс Маркет», «Госуслуги». На нём создают приложения для банков, IT-корпораций и стриминговых сервисов, разрабатывают интернет-магазины, игры и облачные решения. Попробуйте себя в роли Java-разработчика, напишите несколько программ и решите, нравится ли вам эта профессия, на бесплатном мини-курсе Skillbox.
Сразу после регистрации дарим гайд по профессии Java-разработчика: 👉 https://epic.st/EzTyS?erid=2VtzqwrrieA
Мини-курс подойдёт новичкам разного возраста, а также:
📌 Тем, кто хочет оценить сферу IT
📌 Тем, кто стремится зарабатывать на удалёнке
📌 Разработчикам с небольшим опытом
В программе:
— Основы профессии и языка Java
— Telegram-бот на Java. Запускаем готового бота
— Программа для обработки файлов
— Живой эфир с экспертом по Java
Успейте записаться бесплатно!
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
Сразу после регистрации дарим гайд по профессии Java-разработчика: 👉 https://epic.st/EzTyS?erid=2VtzqwrrieA
Мини-курс подойдёт новичкам разного возраста, а также:
📌 Тем, кто хочет оценить сферу IT
📌 Тем, кто стремится зарабатывать на удалёнке
📌 Разработчикам с небольшим опытом
В программе:
— Основы профессии и языка Java
— Telegram-бот на Java. Запускаем готового бота
— Программа для обработки файлов
— Живой эфир с экспертом по Java
Успейте записаться бесплатно!
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
У самурая нет тестов, только прод
Здрасти. Есть куча способов как определить, в каком окружении запущен Bash скрипт. На хостовой машине или внутри docker контейнера. Я предпочитаю самый простой.
Банально проверяем наличие файла
И да файл
А если требуется высший пилотаж, прям УНИВЕРСАЛЬНО, прочекать docker и lxc, идем таким путём:
Тут суть такая, во всех хост-системах
Запускаем на хостовой машине:
Запускаем в контейнере:
✔️ Может зафакапить, так как не установлен пакет procps.
Да, кто не знал, как сохранять изменения в docker контейнерах, применяется commit. То есть ставишь софт в контейнере, настраиваешь его там под себя. А потом делаешь:
<ID> - ID того контейнера, в котором все ставил
<name> - да похуй, можешь указать тот же самый
После перезапуска контейнера все твои настройки сохранятся. Но лучше этим не частить, а собирать контейнеры сразу с нужной тебе хуйнёй.
Ладно, погнали дальше спасать этот прекрасный мир.
tags: #linux #bash
АSHDАYS | BАSHDАYS.CОM
Здрасти. Есть куча способов как определить, в каком окружении запущен Bash скрипт. На хостовой машине или внутри docker контейнера. Я предпочитаю самый простой.
if [ -f /.dockerenv ]; then
echo "I'm inside docker";
else
echo "I'm living in real world!";
fi
Банально проверяем наличие файла
.dockerenv и всё! Да, так просто. Способ самый универсальный и используется разработчиками в 99% случаев.И да файл
.dockerenv можно удалить и тогда скрипт сломается. Удобно, если хочешь помешать скриптам определять где они выполняются. НО после перезапуска контейнера файл .dockerenv снова появится.А если требуется высший пилотаж, прям УНИВЕРСАЛЬНО, прочекать docker и lxc, идем таким путём:
if [ -n "$(grep 'kthreadd' /proc/2/status 2>/dev/null)" ]; then
echo "I'm living in real world!"
else
echo "I'm inside container";
fi
Тут суть такая, во всех хост-системах
PID(2) == kthreadd. Запускаем на хостовой машине:
ps -p 2
PID TTY TIME CMD
2 ? 00:00:00 kthreadd
Запускаем в контейнере:
ps -p 2
PID TTY TIME CMD
хуй с маслом
✔️ Может зафакапить, так как не установлен пакет procps.
Да, кто не знал, как сохранять изменения в docker контейнерах, применяется commit. То есть ставишь софт в контейнере, настраиваешь его там под себя. А потом делаешь:
docker commit <ID> <name>
<ID> - ID того контейнера, в котором все ставил
<name> - да похуй, можешь указать тот же самый
После перезапуска контейнера все твои настройки сохранятся. Но лучше этим не частить, а собирать контейнеры сразу с нужной тебе хуйнёй.
Ладно, погнали дальше спасать этот прекрасный мир.
tags: #linux #bash
АSHDАYS | BАSHDАYS.CОM
🏹 Предупреждён о современных киберугрозах – значит вооружён
«Лаборатория Касперского» приглашает вас на бесплатный вебинар «Сезон киберохоты: аналитика инцидентов за 2023 год», который состоится 11 апреля в 11:00 (МСК).
Знаете ли вы, что сегодня киберхищники берут не качеством, а количеством? В 2023 году произошло перераспределение в разбивке уровней критичности инцидентов, сделав этот период рекордным по количеству инцидентов низкой критичности, но в чем причина? А известно ли вам, какие отрасли наиболее привлекательны для кибермонстров?
На вебинаре эксперты «Лаборатории Касперского» представят новые аналитические отчеты Kaspersky MDR и Kaspersky Incident Response, расскажут об актуальных уловках атакующих, а также дадут рекомендации по их эффективному обнаружению и реагированию.
Каждый участник получит полные отчетов. И это еще не всё – на вебинаре состоится розыгрыш нескольких памятных подарков!
👉🏻 Зарегистрироваться
Реклама АО "Лаборатория Касперского". ИНН 7713140469
«Лаборатория Касперского» приглашает вас на бесплатный вебинар «Сезон киберохоты: аналитика инцидентов за 2023 год», который состоится 11 апреля в 11:00 (МСК).
Знаете ли вы, что сегодня киберхищники берут не качеством, а количеством? В 2023 году произошло перераспределение в разбивке уровней критичности инцидентов, сделав этот период рекордным по количеству инцидентов низкой критичности, но в чем причина? А известно ли вам, какие отрасли наиболее привлекательны для кибермонстров?
На вебинаре эксперты «Лаборатории Касперского» представят новые аналитические отчеты Kaspersky MDR и Kaspersky Incident Response, расскажут об актуальных уловках атакующих, а также дадут рекомендации по их эффективному обнаружению и реагированию.
Каждый участник получит полные отчетов. И это еще не всё – на вебинаре состоится розыгрыш нескольких памятных подарков!
👉🏻 Зарегистрироваться
Реклама АО "Лаборатория Касперского". ИНН 7713140469
Без скрипта не выловишь и рыбку из пруда
你好! Познакомился вчера на созвоне с китайцем, зовут его что-то вроде АнХуй. Смешной персонаж. Что-то мне 40 минут втирал на сломанном английском. Я ни слова не понял, но уверено махал головой как обезьяна на бананы. 🅰️
По итогу встречи я выучил слова «Нихао» и «Херанука», а он всяко выучил — «ты, заебал» и «пиздец». Вот так и работаем. Айти объединяет.
Ну чо, поехали двигать пингвинов
Сегодня изучаем —
Эта такая штука… короче с помощью нее можно запускать команды и скрипты в новых сеансах и группах процессов. Скрипт запущенный через
Это гарантирует, что если родительский процесс получит сигнал SIGHUP, то запущенный скрипт через
Пишем башник
✔️ Скрипт будет нихуя не делать 200 секунд.
Запускаем:
Сразу видим, что оболочка продолжила работать в интерактивном режиме. Можно вводить команды и продолжать работу. А что со скриптом
Это скрипт запущен через
Видишь, он не является частью процессов bash, а работает самостоятельно, в общем дереве процессов. Запущенный скрипт не привязан к текущему терминалу.
А это скрипт
Видим цепочку, скрипт работает в текущей оболочке bash. Если закрыть оболочку, то и скрипт прекратит свою работу.
Давай сравним setsid и nohup
Если запустить так:
Наблюдаем такую картину:
Пишем
Процесс отделился от закрытой оболочки и попал в корень всех процессов. В данный момент он продолжает работу.
Теперь запускаем
А тут сразу процесс отделился от оболочки и стал корневым. Даже если написать
Хм. Не велика разница. Но она все же есть. Команда
Изучай.
tags: #bash #linux
АSHDАYS | BАSHDАYS.CОM
你好! Познакомился вчера на созвоне с китайцем, зовут его что-то вроде АнХуй. Смешной персонаж. Что-то мне 40 минут втирал на сломанном английском. Я ни слова не понял, но уверено махал головой как обезьяна на бананы. 🅰️
По итогу встречи я выучил слова «Нихао» и «Херанука», а он всяко выучил — «ты, заебал» и «пиздец». Вот так и работаем. Айти объединяет.
Ну чо, поехали двигать пингвинов
Сегодня изучаем —
setsidЭта такая штука… короче с помощью нее можно запускать команды и скрипты в новых сеансах и группах процессов. Скрипт запущенный через
setsid будет независим от родительского процесса.Это гарантирует, что если родительский процесс получит сигнал SIGHUP, то запущенный скрипт через
setsid продолжит работу. Nohup? Почти.. Поехали в практику.Пишем башник
bashdays.sh #!/bin/bash
echo "Starting..."
sleep 200
echo "Finished..."
✔️ Скрипт будет нихуя не делать 200 секунд.
Запускаем:
setsid ./bashdays.sh
Сразу видим, что оболочка продолжила работать в интерактивном режиме. Можно вводить команды и продолжать работу. А что со скриптом
bashdays.sh? Давай запустим pstree и визуально глянем.Это скрипт запущен через
setsid├─sshd─bash
├─sshd─bash─pstree
└─sshd─sshd
├─bashdays.sh─sleep
Видишь, он не является частью процессов bash, а работает самостоятельно, в общем дереве процессов. Запущенный скрипт не привязан к текущему терминалу.
А это скрипт
bashdays.sh запущен напрямую, без setsid├─sshd─bash
├─sshd─bash─bashdays.sh─sleep
Видим цепочку, скрипт работает в текущей оболочке bash. Если закрыть оболочку, то и скрипт прекратит свою работу.
Давай сравним setsid и nohup
Если запустить так:
nohup ./bashdays.sh &
Наблюдаем такую картину:
├─sshd─┬─sshd─bash─pstree
├─sshd─bash─bashdays.sh─sleep
Пишем
exit и видим уже такое:├─sshd─sshd─bash─pstree
├─bashdays.sh─sleep
Процесс отделился от закрытой оболочки и попал в корень всех процессов. В данный момент он продолжает работу.
Теперь запускаем
setsid ./bashdays.sh├─sshd─┬─sshd───bash───pstree
└─sshd───bash
├─bashdays.sh─sleep
А тут сразу процесс отделился от оболочки и стал корневым. Даже если написать
exit и закрыть терминал, sleep продолжит работу.Хм. Не велика разница. Но она все же есть. Команда
setsid более прямой способ создания нового сеанса, тогда как nohup просто игнорирует сигнал SIGHUP.Изучай.
tags: #bash #linux
АSHDАYS | BАSHDАYS.CОM