🤔Что происходит на рынке баз данных в свете импортозамещения?
🔥Обсудим этот злободневный вопрос на бесплатном открытом уроке 4 марта вместе с Сергеем Окатовым — руководителем управления разработки, Fullstack-разработчик с опытом >10 лет
✅Если вы бэкенд-разработчик, аналитик, тимлид, архитектор или занимаетесь вопросами миграции, этот урок — для вас. Мы обсудим мировые тенденции в сфере баз данных, рассмотрим предложения от отечественных производителей, а также сравним их с зарубежными аналогами. Разберемся, как обстоят дела на российском рынке и какие проблемы требуют решения.
👉🏻Этот открытый урок – хороший шанс расширить знания и получить свежие инсайты о рынке баз данных. Больше актуальных знаний ждут вас на онлайн-курсе OTUS “NoSQL”. Осталось меньше половины мест. Курс можно приобрести в рассрочку.
🤝Чтобы записаться на открытый урок, пройдите вступительный тест!
🔥Обсудим этот злободневный вопрос на бесплатном открытом уроке 4 марта вместе с Сергеем Окатовым — руководителем управления разработки, Fullstack-разработчик с опытом >10 лет
✅Если вы бэкенд-разработчик, аналитик, тимлид, архитектор или занимаетесь вопросами миграции, этот урок — для вас. Мы обсудим мировые тенденции в сфере баз данных, рассмотрим предложения от отечественных производителей, а также сравним их с зарубежными аналогами. Разберемся, как обстоят дела на российском рынке и какие проблемы требуют решения.
👉🏻Этот открытый урок – хороший шанс расширить знания и получить свежие инсайты о рынке баз данных. Больше актуальных знаний ждут вас на онлайн-курсе OTUS “NoSQL”. Осталось меньше половины мест. Курс можно приобрести в рассрочку.
🤝Чтобы записаться на открытый урок, пройдите вступительный тест!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576Помнишь я писал про shellcheck, который проверяет Bash скрипты на синтаксические и подобные ошибки. Ну так вот, у интерпретатора Bash есть подобный функционал прям из коробки.
Суть - проверить скрипт на ошибки, до запуска.
Перед запуском скрипта, добавь флаг -n и оно тебе скажет, накосячил ты или нет.
Конечно коробочный вариант не такой гибкий как shellchek, но зато ничего не нужно устанавливать лишнего. Это как nginx -t перед его ребутом. Зачем ставить что-то внешнее, если это уже предусмотрено в самой программе. Ну только если расширить функционал и получить больше плюшек.
А если работаешь с гитом, можешь сделать pre-hook и гавно в репу уже не улетит (но если постараешься, то улетит):
После запуска этого хука проверяются все * .sh скрипты в папке src. Пример скрипта с ошибкой:
Хуй Хук выдаст тебе сообщение
Нечто подобное было прикручено к puppet очень давно в одной студии, был какой-то внутренний линтер на хуке гита, но хлебнул я знатно с ним. Мне пушить, а он на какие-то фантомные пробелы орет падла. Короче как только встал у руля, избавился и от этого вонючего паппета, от хуков и от команды.
Ну или как вариант можно включать set -u, например если переменную не объявил и попытался где-то её использовать.
Или так:
Включает режим noexec (режим «нет выполнения»). Когда этот режим включен, скрипт не будет выполняться, а только проверяться на синтаксические ошибки. В общем много вариантов есть, чтобы проверить не запуская.
А завтра кстати внеплановая пятница! Ждем ждем…
tags: #bash
—
💩
Суть - проверить скрипт на ошибки, до запуска.
Перед запуском скрипта, добавь флаг -n и оно тебе скажет, накосячил ты или нет.
Конечно коробочный вариант не такой гибкий как shellchek, но зато ничего не нужно устанавливать лишнего. Это как nginx -t перед его ребутом. Зачем ставить что-то внешнее, если это уже предусмотрено в самой программе. Ну только если расширить функционал и получить больше плюшек.
А если работаешь с гитом, можешь сделать pre-hook и гавно в репу уже не улетит (но если постараешься, то улетит):
bashErr=$(find src/ -type f -name '*.sh' -exec bash -n {} \; 2>&1 > /dev/null)
if [ -n "$bashErr" ]; then
echo "$bashErr"
exit 1
fiПосле запуска этого хука проверяются все * .sh скрипты в папке src. Пример скрипта с ошибкой:
echo "Hello Bashdays
exit 0
src/script.sh: 7: Syntax error: Unterminated quoted string и запретит (коммитить, пушить в мастер).Нечто подобное было прикручено к puppet очень давно в одной студии, был какой-то внутренний линтер на хуке гита, но хлебнул я знатно с ним. Мне пушить, а он на какие-то фантомные пробелы орет падла. Короче как только встал у руля, избавился и от этого вонючего паппета, от хуков и от команды.
Ну или как вариант можно включать set -u, например если переменную не объявил и попытался где-то её использовать.
set -u включает режим обработки неустановленных переменных (также известный как режим nounset). Когда этот режим включен, обращение к неустановленной переменной приведет к ошибке выполнения скрипта.
set -u
echo "Переменная VAR: $VAR"
./script.sh: line 3: VAR: unbound variable
Или так:
set -o noexec
Включает режим noexec (режим «нет выполнения»). Когда этот режим включен, скрипт не будет выполняться, а только проверяться на синтаксические ошибки. В общем много вариантов есть, чтобы проверить не запуская.
А завтра кстати внеплановая пятница! Ждем ждем…
tags: #bash
—
💩
Мастхэв для инженеров инфраструктуры, плюс для программистов
26 февраля стартует 6 поток Apache Kafka для разработчиков. Это углублённый курс с практикой на Java или Golang и платформой Spring+Docker+Postgres. Мы расскажем и покажем, как выйти на новый уровень владения инструментом.
Что вы получите:
👉 Узнаете , как использовать Kafka при создании приложения.
👉 Решите реальные бизнес-кейсы.
👉 Получите типовые шаблоны проектирования: они облегчат разработку на начальном этапе.
👉 Узнаете о большинстве частых ошибок, и научитесь их избегать.
Что в программе?
В курсе 28 онлайн-уроков, готовые стенды, много-много практики и закрытый чат с кураторами. Коротко о программе:
➡️ Терминология. В подробностях и с примерами расскажем, что такое нода, датацентр, кластер, ZooKeeper, консумер, топик и так далее.
➡️ Как выстроена архитектура Kafka.
➡️ Основы брокера. Разберем, как создать топик, настроить продюсер и консумер.
➡️ Как выстраивать архитектуру между микросервисами.
➡️ Наиболее распространенные проблемы при...
26 февраля стартует 6 поток Apache Kafka для разработчиков. Это углублённый курс с практикой на Java или Golang и платформой Spring+Docker+Postgres. Мы расскажем и покажем, как выйти на новый уровень владения инструментом.
Что вы получите:
👉 Узнаете , как использовать Kafka при создании приложения.
👉 Решите реальные бизнес-кейсы.
👉 Получите типовые шаблоны проектирования: они облегчат разработку на начальном этапе.
👉 Узнаете о большинстве частых ошибок, и научитесь их избегать.
Что в программе?
В курсе 28 онлайн-уроков, готовые стенды, много-много практики и закрытый чат с кураторами. Коротко о программе:
➡️ Терминология. В подробностях и с примерами расскажем, что такое нода, датацентр, кластер, ZooKeeper, консумер, топик и так далее.
➡️ Как выстроена архитектура Kafka.
➡️ Основы брокера. Разберем, как создать топик, настроить продюсер и консумер.
➡️ Как выстраивать архитектуру между микросервисами.
➡️ Наиболее распространенные проблемы при...
С наступающим! Давным-давно я избавился от OpenVPN и сейчас активно продолжаю использовать WireGuard. Даже порой связываю продакшен сервера wg тоннелями в разных регионах, где нет возможности это сделать из коробки. Стабильно, быстро, бесплатно.
Всё было хорошо, пока я не повзрослел и непознал джаззз установил себе Windows. Ну и естественно запихал туда официальный гуёвый клиент от wg. А что могло пойти не так? А всё!
Клиент в рандомный момент показывал средний палец и работал через хуй копыто.
Приходилось его выгружать, перезапускать службы, иногда передергивать софтверно сетевую карту, чтобы не ребутить машину. Ну такое себе удовольствие… Мне блять/блядь работать надо, а я тут утехами занимаюсь.
Так я ебался с полгода, но в этот понедельник меня это окончательно заебало! Пошел искать альтернативы, конкретно гуишного клиента. Потому что сама технология wg меня устраивает, не устраивают эти постоянные глюки.
И да, я много гуглил про эти проблемы, они имеются и фиксятся именно, так как я их и фиксил, перезагрузками, службами и другими костылями.
Короче перебрал я разные клиенты, всё шлак, ну и наткнулся на гитхабе на что-то приличное, простое и даже с фичами.
Называется эта штука TunnlTo. Работает в коллаборации с WireSock. По бенчмаркам обгоняет даже официальный WG клиент. На странице проекта там все подробно описано, можешь самостоятельно ознакомиться.
Чо понравилось:
1. Не глючит, шустрый, не виснет
2. Поддержка импорта тоннелей из официального wg клиента
3. При загрузки ОС можно автоматом подключать/не подключать VPN
4. Разделение приложений, кто идет через VPN, а кто нет
5. Ну и конечно другие фичи, какие хз, мне 4х хватает
В общем мне пока нравится. Заточено под винду, но у маководов и линукс-гиков и так всё хорошо, мой личный пруф.
💻 Страница проекта на github
Неделька выдалась продуктивная и очень нервная, в плане работы, в плане домашней рутины, в плане партнерских интеграций. Надо уже новых коллег к нам приводить, а я всё фигнёй какой-то занимаюсь. Исправлюсь! На выходные сделаем небольшую паузу, буду готовить контент план, чтобы уж совсем из пальца темы не высасывать. Да и ты отдохнешь.
В качестве серваков под VPN я использую AEZA. Да, можно оплачивать РФ картами, серваки там честные, даже GPT работает через них, бана пула адресов не замечено. Иногда раздают промо серваки по 1-2 евро. Кого заинтересует, держи рефссылку. Ссылка не моя, это Дмитрий, админ нашего чата порекомендовал этих ребят. Так что, не обессудь, нихуя не реклама, просто полезняшка 👇
https://aeza.net/?ref=370785
Ну а тебе и твоим близким желаю хороших предстоящих выходных, берегите себя ребят. Увидимся!
tags: #utils #windows #networks
—
💩
Всё было хорошо, пока я не повзрослел и не
Клиент в рандомный момент показывал средний палец и работал через хуй копыто.
Приходилось его выгружать, перезапускать службы, иногда передергивать софтверно сетевую карту, чтобы не ребутить машину. Ну такое себе удовольствие… Мне блять/блядь работать надо, а я тут утехами занимаюсь.
Так я ебался с полгода, но в этот понедельник меня это окончательно заебало! Пошел искать альтернативы, конкретно гуишного клиента. Потому что сама технология wg меня устраивает, не устраивают эти постоянные глюки.
И да, я много гуглил про эти проблемы, они имеются и фиксятся именно, так как я их и фиксил, перезагрузками, службами и другими костылями.
Короче перебрал я разные клиенты, всё шлак, ну и наткнулся на гитхабе на что-то приличное, простое и даже с фичами.
Называется эта штука TunnlTo. Работает в коллаборации с WireSock. По бенчмаркам обгоняет даже официальный WG клиент. На странице проекта там все подробно описано, можешь самостоятельно ознакомиться.
Чо понравилось:
1. Не глючит, шустрый, не виснет
2. Поддержка импорта тоннелей из официального wg клиента
3. При загрузки ОС можно автоматом подключать/не подключать VPN
4. Разделение приложений, кто идет через VPN, а кто нет
5. Ну и конечно другие фичи, какие хз, мне 4х хватает
В общем мне пока нравится. Заточено под винду, но у маководов и линукс-гиков и так всё хорошо, мой личный пруф.
💻 Страница проекта на github
Неделька выдалась продуктивная и очень нервная, в плане работы, в плане домашней рутины, в плане партнерских интеграций. Надо уже новых коллег к нам приводить, а я всё фигнёй какой-то занимаюсь. Исправлюсь! На выходные сделаем небольшую паузу, буду готовить контент план, чтобы уж совсем из пальца темы не высасывать. Да и ты отдохнешь.
В качестве серваков под VPN я использую AEZA. Да, можно оплачивать РФ картами, серваки там честные, даже GPT работает через них, бана пула адресов не замечено. Иногда раздают промо серваки по 1-2 евро. Кого заинтересует, держи рефссылку. Ссылка не моя, это Дмитрий, админ нашего чата порекомендовал этих ребят. Так что, не обессудь, нихуя не реклама, просто полезняшка 👇
https://aeza.net/?ref=370785
Ну а тебе и твоим близким желаю хороших предстоящих выходных, берегите себя ребят. Увидимся!
tags: #utils #windows #networks
—
💩
Доброе утро! Все выходные разгребал бухгалтерию, да готовил рекламную кампанию на завтра. Даже баг мимолётом поправил у клиента. После подключения ddos-guard, мониторинг сильно засопливил. Ну тут очевидно, docker контейнеры с экспортерами снимают показатели по домену, а домен-то теперь за ddos-guard, пришлось прокинуть hosts файл и ходить напрямую за метриками.
Ладно. Сегодня на повестке дня: Зачем добавлять ./ перед исполняемым файлом или скриптом.
Когда я только начал изучение linux, я столкнулся с проблемой, что не могу выполнить bash скрипт. Вроде и атрибут +x указан, но после запуска получалидинахуй:
Интернета тогда не было, максимум на что я мог рассчитывать это Фидонет. Но он мне не понадобился, методом тыка я самостоятельно смог решить задачу с запуском. Наверное знания MSDOS как-то натолкнули поставить перед скриптом символы
Но почему так? Это же не логично! Нет, всё логично. Это сделано для безопасности и от кривых рук. Например:
Работаешь ты под рутом, заходишь в домашнюю папку какого-нибудь пользователя, делаешь ls и хуяк, нет у тебя больше сервера. А что произошло?
А произошло то, что в папке пользователя лежал бинарник под названием ls. Который содержал руткит, он то и выполнился. Хотя ты ожидал что выполнится нативная утилита ls.
Вот поэтому если запускать какую-то дичь или скрипт БЕЗ
А вот когда указываешь
Аналогично можно запускать указывая полный путь к программе/скрипту:
Здесь так же PATH будет игнорироваться. Но вопрос остается: Как это может быть мерой безопасности, если эта мера обходится банальным
Нууу… это больше для предотвращения несчастных случаев. Указав явно
Как вариант, можешь добавить точку в PATH и тогда можешь запускать скрипты без
Добавляем текущий каталог в PATH. Теперь
Так, теперь про cron. Если хочешь чтобы твои скрипты гарантировано запускались в cron, всегда указывай полные пути до программ/утилит. Так как cron может смотреть в какой-то свой PATH или вообще через sh запускаться. Встречал/встречаю я такие случаи. Поэтому рекомендуется писать скрипты в таком духе:
Определяем полный путь до утилиты cat, а потом уже используем как переменные. Даже если cat не найдется через PATH, скрипт в кроне будет выполнен, так как указаны полные пути. Заметки про PATH можешь глянуть в этом посте.
Вот так. Хорошей тебе рабочей недели. Вечерком после интеграции закину еще чтива. На связи!
tags: #bash #linux
—
💩
Ладно. Сегодня на повестке дня: Зачем добавлять ./ перед исполняемым файлом или скриптом.
Когда я только начал изучение linux, я столкнулся с проблемой, что не могу выполнить bash скрипт. Вроде и атрибут +x указан, но после запуска получал
script.sh: command not found
Интернета тогда не было, максимум на что я мог рассчитывать это Фидонет. Но он мне не понадобился, методом тыка я самостоятельно смог решить задачу с запуском. Наверное знания MSDOS как-то натолкнули поставить перед скриптом символы
./Но почему так? Это же не логично! Нет, всё логично. Это сделано для безопасности и от кривых рук. Например:
Работаешь ты под рутом, заходишь в домашнюю папку какого-нибудь пользователя, делаешь ls и хуяк, нет у тебя больше сервера. А что произошло?
А произошло то, что в папке пользователя лежал бинарник под названием ls. Который содержал руткит, он то и выполнился. Хотя ты ожидал что выполнится нативная утилита ls.
Вот поэтому если запускать какую-то дичь или скрипт БЕЗ
./ то оболочка будет искать эту дичь/скрипт в указанных каталогах. Которые определены в PATH. Соответственно если домашний каталог пользователя не определен в PATH, то и возникает ошибка command not found.А вот когда указываешь
./script.sh ты говоришь оболочке - Эй бля! Игнорируй PATH и запускай мне эту пепяку! Да, вот прям отсюда!Аналогично можно запускать указывая полный путь к программе/скрипту:
cd ~
./script.sh
# или
/home/user/script.sh
Здесь так же PATH будет игнорироваться. Но вопрос остается: Как это может быть мерой безопасности, если эта мера обходится банальным
./ ?Нууу… это больше для предотвращения несчастных случаев. Указав явно
./ ты говоришь оболочке - запусти конкретно этот файл из текущего каталога, а не тот который может лежать в PATH.Как вариант, можешь добавить точку в PATH и тогда можешь запускать скрипты без
./ например:export PATH=$PATH:.
script.sh
Добавляем текущий каталог в PATH. Теперь
script.sh выполнится, без указания этого хитрого ./ Но так делать не рекомендуется, наступишь на грабли или даже на граблища!Так, теперь про cron. Если хочешь чтобы твои скрипты гарантировано запускались в cron, всегда указывай полные пути до программ/утилит. Так как cron может смотреть в какой-то свой PATH или вообще через sh запускаться. Встречал/встречаю я такие случаи. Поэтому рекомендуется писать скрипты в таком духе:
CAT=$(which cat)
$CAT script.sh
Определяем полный путь до утилиты cat, а потом уже используем как переменные. Даже если cat не найдется через PATH, скрипт в кроне будет выполнен, так как указаны полные пути. Заметки про PATH можешь глянуть в этом посте.
Вот так. Хорошей тебе рабочей недели. Вечерком после интеграции закину еще чтива. На связи!
tags: #bash #linux
—
💩
Возможность для всех, кто работает с Linux и хочет прокачаться.
CROC Cloud Services запускает программу обучения: погружение в DevOps + прокачка в Linux. Если пройдешь на программу — трудоустраивают и платят зарплату, пока учишься. Обучение с практикой, лабораторными и под контролем экспертов из CROC Cloud Services.
Курс проходит офлайн в Москве, но регионы могут подключить онлайн — пробуйте.
Подробности тут.
Реклама. ЗАО “КРОК инкорпорейтед”
CROC Cloud Services запускает программу обучения: погружение в DevOps + прокачка в Linux. Если пройдешь на программу — трудоустраивают и платят зарплату, пока учишься. Обучение с практикой, лабораторными и под контролем экспертов из CROC Cloud Services.
Курс проходит офлайн в Москве, но регионы могут подключить онлайн — пробуйте.
Подробности тут.
Реклама. ЗАО “КРОК инкорпорейтед”
Сегодня на собесе задал кандидату вопрос, а расскажи чем отличается && и «;» при склейке консольных команд. В ответ получил — а мне это зачем знать? Если с && не заработало, то поменяю на «;».
Да и правда, у меня иногда такой же подход. Мне быстрее в моменте поменять одно на другое, чем в гугол лезть. Понятно дело если это выполняешь на критичной инфраструктуре, то такое уже не проканает. Нужно отдавать полный отчет своим действиям.
Давай разбираться чем отличается:
от:
&& (AND) это логический оператор, а вот «;» обычная последовательность действий.
В первом примере с &&, вторая команда запустится, только в том случае, если первая завершится успешным кодом возврата. Соответственно если первая накроется пиздой, произойдет короткое замыкание и вторая команда даже не соизволит запуститься.
А вот в случае с «;», вторая команда запустится при любых обстоятельствах, конечно если это не kernel panic и при условии если в оболочке не включен
Да, есть еще конструкция:
Тут у нас логический оператор OR (или). Вторая команда будет запущена, только если первая сыграет в ящик. В примере выше выполнится вторая команда, так как первая всегда завершается с ошибкой. Если false заменить на true, соответственно на экране будет пусто.
Иногда применяю это в скриптах, когда одна утилита не смогла справиться, подключается вторая.
База. Тут хочешь не хочешь, оно должно на подкорке быть. Интересно конечно, как людей на вайтишных курсах обучают. Человек отучился 6 месяцев, администратор Linux, диплом. А в голове обезьяна тарелками стучит, администрирует. Хотя тут всё от человека зависит, если ему это не интересно, то никакие курсы ситуацию не изменят.
Ладно, всякое бывает. Не смею больше задерживать. Спокойной ночи. Увидимся!
tags: #bash #linux
—
💩
Да и правда, у меня иногда такой же подход. Мне быстрее в моменте поменять одно на другое, чем в гугол лезть. Понятно дело если это выполняешь на критичной инфраструктуре, то такое уже не проканает. Нужно отдавать полный отчет своим действиям.
Давай разбираться чем отличается:
command && command
от:
command ; command
&& (AND) это логический оператор, а вот «;» обычная последовательность действий.
В первом примере с &&, вторая команда запустится, только в том случае, если первая завершится успешным кодом возврата. Соответственно если первая накроется пиздой, произойдет короткое замыкание и вторая команда даже не соизволит запуститься.
Про статусы и коды возврата можешь почитать в этом посте.
А вот в случае с «;», вторая команда запустится при любых обстоятельствах, конечно если это не kernel panic и при условии если в оболочке не включен
set -e (завершение при любых сбоях). Да, есть еще конструкция:
false || echo "hello bashdays"
Тут у нас логический оператор OR (или). Вторая команда будет запущена, только если первая сыграет в ящик. В примере выше выполнится вторая команда, так как первая всегда завершается с ошибкой. Если false заменить на true, соответственно на экране будет пусто.
Иногда применяю это в скриптах, когда одна утилита не смогла справиться, подключается вторая.
База. Тут хочешь не хочешь, оно должно на подкорке быть. Интересно конечно, как людей на вайтишных курсах обучают. Человек отучился 6 месяцев, администратор Linux, диплом. А в голове обезьяна тарелками стучит, администрирует. Хотя тут всё от человека зависит, если ему это не интересно, то никакие курсы ситуацию не изменят.
Ладно, всякое бывает. Не смею больше задерживать. Спокойной ночи. Увидимся!
tags: #bash #linux
—
💩
Как сисадмину перейти в DevOps? Чем DevOps отличается от SRE? Где найти работу в DevOps и как успешно пройти собеседование?
Ответы на эти вопросы — в канале «Люди и код». Команда канала беседует с опытными и начинающими разработчиками и программистами, находит интересные и неожиданные темы и помогает влюбиться в IT. Про мемы тоже не забываем :)
Наши любимые материалы:
1. Кто такой DevOps? Инженер, программист, сисадмин или всё сразу?
2. Антон Косенко: «Работа SRE — это про нежность к инфраструктуре».
3. Ганна Новикова aka Ханна Монтана: «Я пришла в DevOps, потому что удалила прод».
4. Как стать программистом в 37 и найти работу после сотен отказов.
5. Барух Садогурский: «Называя DevOps профессией, мы нивелируем смысл термина».
Подписывайтесь на канал «Люди и код»:
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880 2VtzqvZKorY
Ответы на эти вопросы — в канале «Люди и код». Команда канала беседует с опытными и начинающими разработчиками и программистами, находит интересные и неожиданные темы и помогает влюбиться в IT. Про мемы тоже не забываем :)
Наши любимые материалы:
1. Кто такой DevOps? Инженер, программист, сисадмин или всё сразу?
2. Антон Косенко: «Работа SRE — это про нежность к инфраструктуре».
3. Ганна Новикова aka Ханна Монтана: «Я пришла в DevOps, потому что удалила прод».
4. Как стать программистом в 37 и найти работу после сотен отказов.
5. Барух Садогурский: «Называя DevOps профессией, мы нивелируем смысл термина».
Подписывайтесь на канал «Люди и код»:
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880 2VtzqvZKorY
Внимание, сейчас будем упарываться. Давно не упарывались. Камон в нашу ламповую лабораторию. Сразу не сбегай, возможно узнаешь что-то новенькое или окончательно засвистит фляга.
Для начала давай создадим две подопытные папки:
Теперь скопируем в них нативную утилиту cp (copy):
Скопировали, файлы назвали lt-test.
Далее запускаем:
В параметрах указываем файл, которого нет. На экран вывелось:
А теперь запускаем:
На экран получаем:
Ну и внимательно сравниваем результаты:
Хм, всё же идентично, почему тогда результаты разные? В первом случае кусок названия запускаемого файла lt-test вообще обрезан.
В первом случае путь и прёфикс lt был обрезан, потому что запуск утилиты был выполнен из директории .libs.
Всё дело в функции
А потом эти переменные используются для вывода при ошибках или при выводе страницы хелпа.
Ну и на закуску тест:
Результат тот же:
Вся эта байда в программах нужна для корректного отображения имени, при использовании ГНУТого инструмента libtool.
Как это обрабатывается на самом деле, можешь глянуть в нативном исходнике на СИ здесь, там и про префикс lt и про .libs всё прекрасно структурировано. А здесь можешь ознакомиться с развёрнутым комментарием на эту же тему.
Короче голову не грей, на этой неделе постараюсь подобным тебя больше не развлекать. Спасибо за внимание!
tags: #linux
—
💩
Для начала давай создадим две подопытные папки:
mkdir /tmp/{.libs,.bashdays}Теперь скопируем в них нативную утилиту cp (copy):
cp "$(which cp)" /tmp/.libs/lt-test
cp "$(which cp)" /tmp/.bashdays/lt-test
Скопировали, файлы назвали lt-test.
Далее запускаем:
/tmp/.libs/lt-test example.txt .
В параметрах указываем файл, которого нет. На экран вывелось:
test: cannot stat 'example.txt': No such file or directory
А теперь запускаем:
/tmp/.bashdays/lt-test example.txt .
На экран получаем:
/tmp/.bashdays/lt-test: cannot stat 'example.txt': No such file or directory
Ну и внимательно сравниваем результаты:
1. test: cannot stat 'example.txt'
2. /tmp/.bashdays/lt-test: cannot stat 'example.txt'
Хм, всё же идентично, почему тогда результаты разные? В первом случае кусок названия запускаемого файла lt-test вообще обрезан.
В первом случае путь и прёфикс lt был обрезан, потому что запуск утилиты был выполнен из директории .libs.
Всё дело в функции
set_program_name которую пихают в ГНУтые утилиты и программы. Эта функция модифицирует путь и имя утилиты если запуск был произведен из папки .libs, а затем присваивает результат переменным.А потом эти переменные используются для вывода при ошибках или при выводе страницы хелпа.
В GNU утилитах, функция set_program_name используется для установки имени программы, которое будет использоваться в выводе сообщений об ошибках, помощи и других местах, где требуется указание имени программы.
Ну и на закуску тест:
/tmp/.libs/lt-test --help | head -1
/tmp/bashdays/lt-test --help | head -1
Результат тот же:
1. bash: /tmp/.libs/lt-test --help
2. bash: /tmp/bashdays/lt-test --help
Вся эта байда в программах нужна для корректного отображения имени, при использовании ГНУТого инструмента libtool.
Как это обрабатывается на самом деле, можешь глянуть в нативном исходнике на СИ здесь, там и про префикс lt и про .libs всё прекрасно структурировано. А здесь можешь ознакомиться с развёрнутым комментарием на эту же тему.
Короче голову не грей, на этой неделе постараюсь подобным тебя больше не развлекать. Спасибо за внимание!
tags: #linux
—
💩
Начни свою карьеру в DevOps с курсом от DevOps фабрики! Без воды и траты времени, решай задачи подобранные из реальной практики.
Не конвейер как в этих гигантских академиях, получай личную обратную связь и индивидуальные карьерные рекомендации от DevOps профессионалов.
Узнай больше и попробуй бесплатно
https://devops-factory.com/
Реклама. ООО Байкалтим, ИНН:3851008933, erid: 2VtzquZnhoG
Не конвейер как в этих гигантских академиях, получай личную обратную связь и индивидуальные карьерные рекомендации от DevOps профессионалов.
Узнай больше и попробуй бесплатно
https://devops-factory.com/
Реклама. ООО Байкалтим, ИНН:3851008933, erid: 2VtzquZnhoG
Привет друзья. Частый вопрос: Можно ли в bash скрипте, каким-то образом временно изменить текущий рабочий каталог для выполнения команды, но остаться в каталоге запуска?
Да всё можно, а если говорят что нельзя, то это пиздёшь. Формулировка вопроса конечно замысловатая. Сходу в голову приходит вариант использовать cd (Change Directory), тип такого:
После запуска команды, переходим в каталог
Вот наглядно что происходит:
В самой последней строке видим, что каталог изменился. А я хочу оставаться в root!
Что делать? Есть способы, которые я лично использую в своих bash скриптах. Возможно есть какие-то и другие варианты, если знаешь, пиши в комментарии, будет полезно.
Способ первый:
Добавим в скрипт exec_command такой код:
Запускаем то же самое в круглых скобках:
Что мы видим: после выполнения команды в скобках, отработала команда
Способ второй pushd/popd:
Механика аналогична первому способу. Но используются древние, инопланетные технологии pushd и popd, это коробочные аналоги cd из 80x годов. Местоположение предыдущих каталогов сохраняются в стек (массив). А потом уже из этого стека можно вытаскивать необходимое. Погугли если интересно, есть статейки.
Ну и бонусом третий способ:
Здесь используем чистый cd, но для возврата в предыдущий каталог используем cd с параметром «-».
В 99% случаев никто этим не пользуется, все привыкли в скриптах использовать cd туда-сюда с указанием полных/относительных путей. Но если посмотреть в скрипты коммерческих продуктов, в них активно используются методы с pushd и popd.
Легаси? Возможно. Тут наверное дело больше в элегантности. У каждого свои бест-практики, нет неправильных решений. Если задача приносит ожидаемый результат, значит ты всё сделал правильно.
Ладно, изучай, а я пошёл писать следующий пост про обработку сигналов. И нас тут уже 13к, идем дальше!
tags: #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.
◽️ Развернуть инфраструктуру можно в удобной панели за пару минут. Если у вас возникнут вопросы, наша техподдержка ответит на них в любое время.
Переходите...
Разместить сайт, запустить приложение и быстро масштабировать проект любой сложности можно на облачных серверах Selectel. Настроить базы данных, развернуть кластер Managed Kubernetes или загрузить данные в хранилище с поддержкой S3 API возможно прямо в панели my.selectel.ru.
Кроме того, вы можете быстро настроить автоматические бэкапы сетевых дисков, а также настроить бесплатный облачный файрвол для фильтрации входящего или исходящего трафик приватной подсети.
Преимущества облака Selectel для клиента:
◽️ Облачные серверы соответствуют 152-ФЗ. Это значит, что вы можете хранить и обрабатывать персональные данные до первого уровня защищенности включительно.
◽️ IAM-система разграничивает доступ к ресурсам и данным, определяет роли пользователей. Возможен вход в панель управления Selectel через SSO.
◽️ Развернуть инфраструктуру можно в удобной панели за пару минут. Если у вас возникнут вопросы, наша техподдержка ответит на них в любое время.
Переходите...
