ch
Feedback
Bash Days | Linux | DevOps

Bash Days | Linux | DevOps

前往频道在 Telegram

Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru

显示更多

📈 Telegram 频道 Bash Days | Linux | DevOps 的分析概览

频道 Bash Days | Linux | DevOps (@bashdays) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 23 788 名订阅者,在 技术与应用 类别中位列第 5 702,并在 俄罗斯 地区排名第 28 099

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 23 788 名订阅者。

根据 19 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -226,过去 24 小时变化为 1,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 23.40%。内容发布后 24 小时内通常能获得 13.11% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 5 567 次浏览,首日通常累积 3 119 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 22
  • 主题关注点: 内容集中在 bashdays, linux, bash, docker, скрипт 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.r...

凭借高频更新(最新数据采集于 20 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

23 788
订阅者
+124 小时
-217
-22630
帖子存档
Всех рад видеть, привет! Сразу к делу. В оболочке Bash есть такая настройка, как «set -k», если по ней вызвать хелп, то получим следующее:
-k All assignment arguments are placed in the environment for a command, not just those that precede the command name.
То есть, при активации этой настройки, все что будет похоже на присваивание переменным значений, поместиться в среду команд. И совершенно не важно, где в строке находится это присваивание. Короче говоря, если в команде используется синтаксис присваивания (HUY=512), то эта команда не получит этих присвоенных опций в качестве аргументов. Чтобы стало понятнее, давай на практике.
set -k  
dd if=/dev/zero of=/dev/null count=1 bs=2048
По идее, команда dd должна прочитать блок размером 2048 байта из устройства /dev/zero и записать эти байты в устройство /dev/null. А после выполнения — завершить работу. На экран должны получить нечто подобное:
1+0 records in
1+0 records out
2048 bytes (1.0 kB, 1.0 KiB) copied, 9.4642e-05 s, 10.8 MB/s
Но так как мы выполнили «set -k», все будет иначе. Утилита dd не получит указанных опций в качестве аргументов и будет пытаться читать и писать блоками по 512 байт (512 по умолчанию). После выполнения команды, мы получаем — Хуй с маслом! Ничего! Хотя ожидали получить — завершение работы. Выполнив «set -k» утилита dd просто заблокировалась на чтении стандартного потока ввода и ожидает данные. Вот такие перлы! Обожаю угорать над студентами, сначала втихую активируем «set -k» и просим решить простую задачку со звездочкой. Но задачка почему-то не решается. А дальше начинается гогул, strace и бессонные ночи. Если нарвался на подобное поведение, как вариант, проверь этот самый «set -k». Деактивировать эту фигню, так: «set +k». Всегда ору с этого синтаксиса, плюс = отключить, минус = включить. Для чего вообще нужна «set -k» и где применяется? Возможно для фоновых процессов, ну либо угорать над студентами. Если знаешь истинное применение, пиши в комменты, будет интересно. Давай, увидимся вечером, хорошего тебе дня! tags: #bash — 💩 @bashdays

🔍Вопросы с собеседований и задачи по DevOps У нас появились новые каналы по DevOps, в которых мы готовимся к собеседованиям
🔍Вопросы с собеседований и задачи по DevOps У нас появились новые каналы по DevOps, в которых мы готовимся к собеседованиям и проверяем себя на практических задачках 🚀 Подписывайтесь: 👉Библиотека собеса по DevOps — тут мы готовимся к интервью 👉Библиотека задач по DevOps — тут решаем задачи, проходим тесты и изучаем код Реклама. ИП Дрёмов А.С. ИНН: 771391651571, erid: 2VtzqvCoyyE

+2
Ребята, что я вам принёс! Кринжатину! Офигительная консольная, мульти-плеерная игруля под названием «piu-piu». Под капотом нативный Bash + ANSI. Подозреваю изобрел её наш русскоговорящий соотечественник, судя по локализации терминала на видео. Суть игрушки: Летим на вертолёте, управляем wasd, стреляем на «p» и уничтожаем вражеские юниты. Жизни и патроны расходуются. Но это еще не всё, в игре присутствует режим penis mode. Как пишет автор — если тебе не достаточно весело, запускай игру так:
penis=big ./piu-piu
Бери друга и вперед! В два ствола летать гораздо веселее. Так же присутствует режим дуэли, который позволит выяснить у кого прибор длиннее. Выясни это здесь и сейчас! А в последнем обновлении, добавлен эффект трясущегося хозяйства. Вообще у разработчика большие планы на этот проект, обещают добавить кастомизацию размеров с плавающей точкой. Если у тебя еще остались друзья, можешь нехило зарубиться! Ставится элементарно через apt (но версия не последняя), либо сливаешь себе репозиторий, чмодишь на «икс» и запускаешь. На выбор либо вертолет, либо penis mode. Сам уже отталкивайся от своих предпочтений. Здесь страница проекта и мануалы как ставить. Погнали! tags: #linux #bash #games — 💩 @bashdays

Привет. Давно не виделись, конец года, все как с ума посходили, всем нужно вчера и срочно. Надеюсь у тебя тоже все хорошо. Сегодня поделюсь задачей которую решал на днях для клиента, связанную со swap. Задача от заказчика: У меня есть приложение, которое уходит в swap, мне нужно чтобы оно туда не уходило. Сам swap отключать нельзя. Задаю очевидный вопрос — а зачем? Чтобы что? Ну свапится оно, ну и пусть свапится, никогда с этим проблем ни у кого не встречал. Как оказалось, они там провели у себя какие-то хитрые тесты и доказали, что если их приложение начинает свапится, то это влияет на скорость его работы. Ну да, есть в этом доля правды. Если на сервере достаточно RAM, можно и реализовать это безобразие. А решается эта задача через cgroups. cgroups (Control Groups) представляют собой механизм в ядре Linux для ограничения, изоляции и управления ресурсами, предоставляемыми группам процессов. Они предоставляют интерфейс для создания и управления группами процессов, а затем накладывают ограничения на ресурсы, потребляемые этими группами. Сначала ставим необходимые пакеты, если они не стоят:
apt-get install cgroup-tools
Создаем отдельную группу asshole, в нее будем добавлять приложения, которые нужно оградить от swap:
cgcreate -g memory,cpu:/asshole
Запрещаем вытеснять процессы в swap:
echo 0 | tee /sys/fs/cgroup/asshole/memory.swap.max
Добавляем процесс в группу asshole:
cgclassify -g memory,cpu:/asshole/ $(pidof nginx)
Для примера я добавил nginx, который не будет уходить в swap. Но ты можешь добавить все что угодно. Дополнительно для группы asshole отключим OOM:
echo 1 | tee /sys/fs/cgroup/asshole/memory.oom.group
Вот и всё, теперь приложение не будет уходить в swap и OOM (Linux Out-Of-Memory Killer) обломается. Ну и как вариант: всё нахуй встанет раком, продакшен издаст последний вздох и упадет в новогодние праздники. Но тут, как говорится — хозяин барин! Хотели отключить, отключили. Все настройки производились на ubuntu 22.04, в других версиях есть различия на названия memory.swap.max, memory.oom.group и прочее. После создания группы, зайди, посмотри что у тебя там создалось. И от туда уже пляши. У меня этот способ не сработал на виртуальных серверах в Селектеле (permissions denied), но прекрасно сработал в Digital Ocean и на локальной виртуалке. Экспериментируйте! Кстати после перезагрузки, cgroups слетят и по возможности создавай юнит в systemd, типа такого: /etc/systemd/system/asshole.service
[Unit]
Description=My cgroup configuration

[Service]
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/asshole
ExecStartPre=/bin/mount -t cgroup -o memory asshole /sys/fs/cgroup/asshole
ExecStart=/bin/echo 1 > /sys/fs/cgroup/asshole/memory.oom.group

[Install]
WantedBy=default.target
systemctl daemon-reload
systemctl start asshole
systemctl enable asshole
Хорошего понедельника! И всегда помни, если что-то ограничиваешь, рано или поздно оно взбунтуется и сделает уйму головняков. tags: #linux — 💩 @bashdays

Это пост изобилует грубыми и матерными выражениями и, в силу своего содержания, вообще не предназначен для просмотра лицам с нежной и хрупкой психикой. Довелось мне тут побывать на ретроспективе. Это пиздец ребята. Не буду писать про прелюдии и чекины, это тот еще артхаус. Короче на вопрос «оцените как прошел этот спринт цифрами от 1-5». Я воткнул естественно 5ку. Ну а чо, факапов нет, продакшены работает, команда довольна, входящие отбиты, бэклог пустой. Условия ГПХ выполняются. Твердая пятерка! Да, бэклог может быть пустым! Но как оказалось, 5ка это нихуя не хорошо, это ПЛОХО! На моё удивление — вы чо там грибов пережрали в своём айти или скрамом упоролись? Ответ проджекта (или как там это тело правильно называется) — Рома, если кто-то ставит 5ку, значит этот человек НЕ загружен задачами на 100%. А возможно вообще сидит на жопе ровно и специально на планировании втыкает стори-поинты в свою пользу. Хм подумал я… напугали кота сосиской, но ничего не ответил. Больные блять, я так-то и на планирование не хожу. А я то думаю, чо все четверки понаставили. Опытные бродяги. То есть получается оценка спринта 1, 2, 3 и 5 это плохо. Какой-то прям гнилой скрам получается. Ну да черт с ним. Если уж еще раз попаду на это безумное мероприятие, буду ставить 5 и всех бесить. Ладно, пережили, забыли. НО спустя пару дней, ко мне приходит ТОП менеджер и говорит — Господин Роман, у нас сложилось такое впечатление, что вы нихуя не делаете. Ваши утренние отчёты выглядят как гавно:
вчера - текущие задачи сегодня - текущие задачи
Что вы скажете в своё оправдание? А давайте вы теперь будете нам писать прям подробным списком, какие задачи делаете! Да блять! Проснулись. В том-то и дело, что я нихуя не делаю, я уже сделал и слежу, чтобы это работало 24/7/365. Ну раз хотите чтива, будут вам подробные отчеты. Позиция понятна, ребят чет понесло не туда, ну бывает… Ну и теперь каждое воскресение я захожу в GPT и клепаю бездушные отчеты на следующую неделю. Закидываю их в телеграм отложку и продолжаю наслаждаться своей зоной комфорта. Ну и ТОП менеджеры позже заапрувили, что теперь всё ок! Эта история закончилась на позитивной ноте, все остались довольны. Но первый звоночек прозвенел, посмотрим что будет дальше. Есть такая прекрасная поговорка — Прод висит на нитке, а думают о прибытке! Спасибо, что дочитали, мне нужно было с вами этим поделиться. Хорошего всем утра-дня-вечера-ночи. На связи! tags: #рабочиебудни — 💩 @bashdays

Прокачайте свои знания о гибридной инфраструктуре 💻 Вы понимаете, какой вид инфраструктуры будет оптимален для вашего бизнес
Прокачайте свои знания о гибридной инфраструктуре 💻 Вы понимаете, какой вид инфраструктуры будет оптимален для вашего бизнеса? Умеете разбираться в различиях и тонкостях запуска и масштабирования проекта? Давайте проверим это вместе. Ребята из @Selectel запустили сайт с небольшим квестом. Там вы погрузитесь в рабочие будни сисадмина и решите задачу от тимлида. Вам предстоит разобраться в особенностях гибридной инфраструктуры, связанных с безопасностью, стоимостью и управлением. Вы изучите вспомогательные материалы от нас, а в конце сможете пройти тест и сделать работу над ошибками. По итогам этого интерактива вас ждет бонус на тестирование , с которым аренда серверов станет еще приятнее. Переходите по ссылке, чтобы увидеть все своими глазами: https://slc.tl/mpmt9 Реклама ООО «Селектел» erid 2VtzquoLxaF

Привет. Утренний микропост. Короче когда перенаправляешь вывод результатов в файл, то на экране нифига не видно. Но порой это
Привет. Утренний микропост. Короче когда перенаправляешь вывод результатов в файл, то на экране нифига не видно. Но порой это бывает критично, а нужно и в файл записать и глазками позырить в реалтайме. На этот случай у нас есть утилита tee, которая как раз этой хераборой и занимается.
command | tee log.txt
На картинке хорошо видно, откуда произошло название tee, это буква T в произношении. Вывод затекает сверху слева и вытекает в двух направлениях. Ты видишь происходящее на экране, а параллельно это происходящее записывается и в файл. Удобно. Вот как нужно называть утилиты! Взял произношение буквы и можно в коробку упаковывать. Кстати пока писал, вспомнил что английская «H», взяло название от Eighth - то есть восьмая буква алфавита. Короче никто особо не заморачивался с неймингом. Ну а еще есть подобная утилита, называется просто script. Она позволяет записать всё происходящее на экране сразу в файл. Работает даже в интерактивном режиме. Запустил ты ее и работаешь в консоли, а она пишет все твои действия в кабачок. Ключей у нее много разных, если интересно можешь глянуть хелпину. Видел что её подключают в bashrc чтобы логировать все действия криворуких обезьян. Я ни tee ни script не использую, потому что всё время про них забываю, да и особой необходимости нет. Такие дела. Вечерком закину еще чтива, увидимся! tags: #bash #utils — 💩 @bashdays

Тишина у каждого своя, у всех в душе свои оркестры… Как мы с тобой знаем, в начале скрипта принято использовать строку shebang/hashbang. Это то самое, которое #!/bin/bash. Конечно его не обязательно ставить, но рекомендуется. Ранее этот вопрос разбирался здесь. Так, но порой вместо привычной нам конструкции, можно встретить нечто подобное:
#!/usr/bin/env bash
#!/usr/bin/env python
#!/usr/bin/env python3
Да, с питончиком тоже такая чача бывает. Но что это за сракафак и зачем? В нашем случае такое хитрое указание интерпретатора имеет смысл. Основная идея env bash это улучшение переносимости. Никто не может гарантировать, что интерпретатор находится по захардкоженому пути. Указал ты допустим в скрипте #!/bin/bash, закинул скрипт на сервер, а эндпоинта bin/bash нет. По этой причине господа ребята используют хак с env bash. Использование env позволяет снизить риски за счет запуска команды на основе данных из переменной среды PATH. Ну и используя env в скрипте можно указывать любые версии интерпретатора. Возможно у тебя стоит две версии bash, ну или как распространено с питончиком. Деприкейтед 2.7 и трёшка. Думаю мысль ты уловил. Чтобы не править скрипты, можно подменять версии интерпретаторов и даже сами интерпретаторы. Давай посмотрим на практике.
mkdir ~/bin
cp /bin/sh ~/bin/bash
export PATH=~/bin:$PATH
env bash
1. Создаем папку bin в домашнем каталоге 2. Копируем интерпретатор sh в ~/bin, но обзываем его bash 3. Экспортируем новый путь ~/bin в PATH 4. Запускам bash через env Дела… у нас запустился интерпретатор sh. То есть ~/bin/bash (обращаем внимание на знак ~ = домашняя директория пользователя) был найден раньше, чем просто /bin/bash. Если посмотреть PATH мы увидим следующее:
echo $PATH
/root/bin:/root:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Наш домашний каталог с бинарниками стал приоритетным. И если теперь в скриптах указать #!/usr/bin/env bash то запустится sh из ~/bin. Ничего сложного. Но на практике обычно никто такой хераборой не занимается. Чисто для примера, ну или для совсем уж костылей, когда нужно быстро и вчера. Преимущества c env: - Запуск интерпретатора не из конкретно указанного места, а из того что встретилось первым в переменной окружения PATH. Недостатки: - Путь /usr/bin/env банально может не существовать. Но обычно существует. Ну и если используешь env, в него можно прокинуть параметры, делается через ключик -S:
#!/usr/bin/env -S var1=a var2=b bash --help
Venv в Python работает по такому же принципу, реврайтит PATH и позволяет использовать разные версии.
> index.py
python3 -m venv .venv
source .venv/bin/activate
import sys
print(sys.executable)

/tmp/.venv/bin/python
Если посмотреть PATH (echo $PATH) при активации venv, то увидим совершенно другой PATH:
/tmp/.venv/bin:/home/user/bin:/usr/local/opt/libpcap/bin:/home/user/.pyenv/bin:/opt/homebrew/opt/openjdk/bin
То есть к нашему PATH добавился каталог /tmp/.venv/bin, который стал приоритетнее чем /home/user/bin. Вот так вот это всё и работает под капотом. Я эти env по большей части никогда не использую, хреначу #!/bin/bash и погнали, пока всегда и везде работало. Конец! tags: #bash #linux — 💩 @bashdays

Новогодний, праздничный, веселый бот от Selectel🦖 Что вас ждет в 2024? Ребята из Selectel создали бесплатного бота, который
Новогодний, праздничный, веселый бот от Selectel🦖 Что вас ждет в 2024? Ребята из Selectel создали бесплатного бота, который предскажет будущее и подберет тотемное животное на 2024. Предсказания ему передает искусственный интеллект, но не переживайте: с Selectel вас ждет только хорошее. А еще бот поможет нескучно провести время: расскажет, что почитать, посмотреть или приготовить. Запускайте бота, делитесь результатами с друзьями и участвуйте в розыгрыше призов. Реклама ООО «Селектел» erid 2VtzqxNxKNB

Надо было тут провести экстренные технические работы на сервере. Сервер публичный и смотрит жопой в интернет. Клиенты это обычные пользователи, которые заходят по ssh и пытаются на практике изучать bash и linux. Короче студенты какого-то крупного ВУЗа, а сервер выступает подопытным стендом для всяких лабораторных работ. Клиентов дофига (человек 800) предупредить о технических работах нет никакой возможности. А если бы и была, то 99% не увидят электронных писем с важной информацией и начнут долбать саппорт. Задача вроде тривиальная, но нужно было предварительно задропать все сессии + не разрешать повторно подключить. Ну и естественно каким-то хреном выслать уведомление всем тем, кого задропали в моменте. На самом деле тут все просто. Создаем пустой файл /etc/nologin. Теперь только root сможет авторизоваться по ssh. Да, предварительно нужно разрешить вообще заходить под root’ом. Часть задачи решили. Теперь нужно уведомить бедолаг, которые в данный момент что-то делают в терминале. Пусть сохраняют свои поделки и отправляются на заслуженный отдых. Для этого воспользуемся утилитой wall. Wall — утилита командной строки, которая отображает сообщение на терминалах всех вошедших в систему пользователей. Запускаем команду:
wall "Быстренько сохраняемся и валим с сервера. В 10:15 сервер уходит в запой."
Все кто был подключен к серверу, получают сообщение:
Broadcast message from root@dev (pts/0) (Sun Dec 17 11:38:21 2023):
Быстренько сохраняемся и валим с сервера. В 10:15 сервер уходит в запой.
И неважно что делает человек и где находится, сообщение появится у него на экране. Через wall кстати можно спамить определенным группам пользователей. Ну все, ответственность с себя сняли. В 10:15 запускаем ассасина:
pkill -9 -u `who | awk '{print $1}'| grep -v root|head -1
Вот так вот грубо мы выгнали всех с сервера, кроме root’а. Вот и все, спокойно проводим технические работы, удаляем /etc/nologin и радуемся какие мы молодцы. Wall можно заменить например на такое:
echo "Hello from BashDays" | write user
Но тут сообщение уйдет конкретному пользователю user. Конечно если по какой-то причине отсутствует wall в системе, можно и через цикл выгрести всех юзеров и через echo скормить им уведомление. write - утилита, позволяющая отправить сообщение другому пользователю, который имеет сессию в этой же системе. Ну либо так:
echo "Hello from BashDays" > /dev/pts/1
Пытался сделать так /dev/pts/[0-9]*, но чет не проканало, заорала как потерпевшая. Ну это всё костыли, в общем неважно. Ладно, хорошо тебе провести остаток выходного, увидимся завтра. tags: #bash #linux #utils — 💩 @bashdays

Привет, сейчас покажу интересную bash фичу. Которая ну совсем уж не очевидная и про нее мало кто знает. В bash скрипте можно хранить данные, закодированные в base64. Выглядит это следующим образом:
#!/bin/bash

read_data() {
  mapfile -t DATASET < <(sed '1,/^DATASET/d' "$0" | base64 -d)
}

read_data

echo ${DATASET[@]}

exit 0

DATASET
SGVsbG8gQmFzaERheXM=
Функция read_data считывает данные из самого скрипта. С помощью sed удаляются строки от начала файла до строки DATASET. А затем происходит декодирование оставшихся данных. В конце всё сохраняется в массив DATASET с помощью mapfile и выводится через echo. Красота! Мой скрипт по итогу выведет на экран «Hello BashDays». Где это можно применить, понятия не имею. Возможно тебе удастся это куда-нибудь приспособить. Еще в этом скрипте мне не нравится exit 0, если есть мысли как от него избавиться, велком в комментарии. Я чет покопался вчера, но так пока и не победил. Если убрать exit 0, оно будет работать, но в конце грязно выругается. Бери на вооружение, возможно твой стартап нуждается в этом. Увидимся! tags: #bash — 💩 @bashdays

Ловите полезную финансовую привычку, чтобы экономить каждый день до 30% ⤵️ 👉 Просто покупайте всё, что вам нужно, по кредитн
Ловите полезную финансовую привычку, чтобы экономить каждый день до 30% ⤵️ 👉 Просто покупайте всё, что вам нужно, по кредитной карте Тинькофф Платинум у партнеров банка. Так вы сможете тратить меньше на продукты, гаджеты, одежду, книги, обучение, путешествия и многое другое. Кредитный лимит — до 1 000 000 рублей, а беспроцентный период составляет 55 дней. Пополнение бесплатное в любом банкомате. На любые покупки от 1000 рублей можно подключить рассрочку и платить до 12 месяцев без процентов 👍 А если оформить карту в декабре и активировать до 15 января, банк вернет 1000 рублей за покупки на сумму от 3000 рублей*. Переходите по ссылке и забирайте карту, с которой просто экономить. 👉 tinkoff.ru * Акция действует для тех, у кого нет действующей кредитной карты или она закрыта больше года назад. Реклама. АО «Тинькофф Банк», ИНН 7710140679

Привет. Много вопросов поступило про ASCII после моего демонического поста. Этот пост будет не лучше, крепись🙂 Конкретно есть интерес — как можно переводить и узнавать номера символов в различных системах счисления. Ну смотри, давай выведем значения номеров символа английского алфавита в кодировке ASCII (шестнадцатеричные, восьмеричные, десятичные). Возьмем за эталон символ «S». В bash это можно провернуть таким способом:
printf 'Hex : %x Oct : %o Dec : %d\n' "'"S{,,}  
printf 'Hex : %x Oct : %o Dec : %d\n' '"'S{,,}  
printf 'Hex : %x Oct : %o Dec : %d\n' \'S{,,}  
printf 'Hex : %x Oct : %o Dec : %d\n' \"S{,,}
Получим:
Hex : 53 Oct : 123 Dec : 83
Это специальный синтаксис команды printf. Если перед символом «S» идет одинарная кавычка, или двойная кавычка, то значение будет номером символа. Такой синтаксис появился в bash с версии 2.05a. Added support for builtin printf "'" flag character as per latest POSIX drafts. Аналогично можно узнать номер символа в многобайтовой кодировке UTF-8. Например, так:
printf 'Hex : %x Oct : %o Dec : %d\n' '"'Я{,,}
На всю эту чачу влияют переменные окружения LC_CTYPE и LC_ALL. Ща покажу. Запускаем такое:
( LC_ALL=C ; chunks="Сёма" ; echo ${chunks:0:1}${chunks:3} )
Кодировка сломалась, на экран вывелось «Бма». Мы получили доступ к байтам, а не к символам UTF-8 кодировки. Второй байт символа «С» отправляется на помойку и аналогично первый «ё». По итогу вместо «Сёма» мы получили «Бма».
Установка LC_ALL=C может использоваться для обеспечения непрерывности в работе программы, независимо от языковых настроек окружающей среды. Это может быть полезно, если вам нужно гарантировать, что вывод программы или результат выполнения команды не зависит от текущей локали системы.
Если интересно более глубже погрузиться в весь этот 3.14здец UTF-8, можешь прочитать эту замечательную статью. Так, опять от темы ушли. Наверняка тебя интересует, что означает конструкция {,,}. Это бородатый хак, который дублирует строки.
echo bashdays{,,,}
На выходе получим 4 раза слово bashdays. Ничего сложного. Бери на заметку, хак полезный. А еще команда printf, позволяет присвоить результат переменной. Делается это так:
printf -v var 'Hex : %x Oct : %o Dec : %d\n' '"'Ж{,,}
echo "$var"
Пока на этом всё. Больше не смею тебя мучить этими ужасными вещами! Увидимся завтра. tags: #linux #bash — 💩 @bashdays

Зашел тут разговор, а зачем люди делают touch, перед тем, как что-то записать в файл? Причем так делает большинство, да и в учебниках повсюду это пихают. Но какой в этом смысл, если при записи все равно будет создан файл? Я имею в виду такую ситуацию:
touch file.txt
vim file.txt
:w
все же проще:
vim file.txt
:w
И не нужно никакого touch. Так откуда взялась эта дурная привычка? И дурная ли она? Почему мы не делаем тогда типа такого?
dd if=/dev/zero of=newfile bs=1 count=0
Оно ведь тоже создает новый файл… На самом деле правильного ответа нет. Единственно что нужно знать, это — используя touch ты всегда будешь уверен, что сможешь записать свои данные в файл. А не когда набрал в vim кучу текста, сохраняешь, а оно тебе идикатывхуй, permission denied. Файл есть, но владелец кто-то другой. Короче говоря это быстрый способ выяснить, если ли у тебя права на запись, прежде чем ты начнешь редактирование. Да и еще touch используется для обновления даты модификации. Кстати очень удобная штука. Например, ты редактировал конфиг nginx в прошлом году, но всем нужно показать что вчера, делаешь touch nginx.conf и проставляется актуальная дата и время. И в bash скриптах можно использовать, если есть какая-то логика с lock файлами, таймштампами и т.п. А как правильно создавать файлы? А просто! Правильный способ для создания файлов, это любая команда, которая использует системный вызов create или open (с флагом O_CREATE). Таких команд и программ дофига. Вообще ситуацию можно сравнить с grep, мы его используем, потому что не знаем ничего лучше. Старая школа и мышечная память. Ну или сравним с гуглом и chatgpt, я знаю что gpt найдет и даст ответ быстрее, но я все же предпочитаю гуглить. А все мифы о том, что в старых linux с ядром 0.97 нужно было обязательно использовать touch, всего лишь мифы. Кстати есть еще такой древний строковый редактор, называется ed. Идет в коробке почти со всеми дистрибутивами. Этот редактор изначально требовал наличия файла перед его редактированием. И да, из этого редактора выйти намного сложнее чем из vim. Попробуй ради интереса. Как-то так. А как ты создаешь файлы? tags: #linux — 💩 @bashdays

Все надоело и пропал интерес, чувствуешь себя амебой и хочется только залипать в телефоне. Бывает? Если ты долго работал и не
Все надоело и пропал интерес, чувствуешь себя амебой и хочется только залипать в телефоне. Бывает? Если ты долго работал и не давал себе отдохнуть, мозг рано или поздно скажет тебе “Хватит, я устал от умных мыслей” и отключится 😵‍💫 Выгорание? Называй как угодно, в любом случае, из него нужно выходить. Клиенты ведь не ждут, дедлайны горят, близкие смотрят искоса… ⚡️ Справиться с этим состоянием, избавиться от прокрастинации и вернуться к жизни тебе поможет канал Вадима - "Психолог взрослого человека". Он точно знает, как IT-специалисту выйти из застоя и вернуть себе силы и энергию. Рекомендую начать с его мини-курса, который, кстати, Вадим сейчас проводит бесплатно: 👉🏻 “Как избежать выгорания, даже если вы постоянно вкалываете?”. Ты найдешь причины упадка сил, апатии и выгорания. И поймешь, как из этого выйти. Подписывайся на канал @vadimpetrov_psy и смотри мини-курс - ссылка в закрепе. https://t.me/+ld6PnxsPmW85ZmZi Реклама. ООО «ТД «Степмотор», ИНН: 7804501708, erid: 2VtzquY2qdV

Bash скрипт который смог... Думал отдельный канал сделать под такой формат, но решил не заниматься хуйнёй ерундой и порой пос
Bash скрипт который смог... Думал отдельный канал сделать под такой формат, но решил не заниматься хуйнёй ерундой и порой постить своё творчество прям сюда. Благо создается оно под настроение. Валить мемами не собираюсь, хватает мне псины и гардена. Не обессудьте 🥳 tags: #bash #hokku — 💩 @bashdays

Больше не нужно собирать целый стек программ ИКС закроет все ваши задачи: межсетевой экран, DHCP-сервер, DNS, NAT, VPN-сервер
Больше не нужно собирать целый стек программ ИКС закроет все ваши задачи: межсетевой экран, DHCP-сервер, DNS, NAT, VPN-сервер, система обнаружения и предотвращения вторжений IPS/IDS, функции контроля приложении, WAF, потоковый антивирус, прокси-сервер, файловый сервер, контент-фильтр, защищенная почта, корпоративная телефония и многое другое. Многофункциональное решение для корпоративной сети, единый удобный интерфейс. Легкий старт - простая установка и настройка. Триал ИКС - все возможности бесплатно 35 дней. Предоставляется приоритетная техподдержка с первого дня тестирования. Реклама. ООО «А-Реал Консалтинг». ИНН: 7606047112

Как и обещал, сегодня у нас с тобой хитрая стеганография на bash. Не скажу что тема простая, но будут готовые инструменты, которые можно взять и использовать. Не вникая в кишки. Как говорится - чтобы что-то спрятать, нужно поместить это на видное место. Начнём со спойлера:
ls -l /tmp/box

-rw---x--- 
-rw----r--
-rwx--xr--
-rw-r-----
-rw--w----
-rw----r--
-rwxr--r--
-rwx--xr--
Пока ничего не понятно, а если я сделаю так:
./mode2char /tmp/box

-rw---x---     (610)
 1100010 (98)  ('b')

-rw----r--     (604)
 1100001 (97)  ('a')

-rwx--xr--     (714)
 1110011 (115) ('s')

-rw-r-----     (640)
 1101000 (104) ('h')

-rw--w----     (620)
 1100100 (100) ('d')

-rw----r--     (604)
 1100001 (97)  ('a')

-rwxr--r--     (744)
 1111001 (121) ('y')

-rwx--xr--     (714)
 1110011 (115) ('s')

bashdays
Сечешь фишку? Это и называется стеганография. Я спрятал в правах файлов скрытое сообщение «bashdays». Вот тут нам и пригодилась тема с правами доступа и всякими этими системами счислений. Давай разбираться как это работает. Сами bash скрипты mode2char и char2mode закину в конце поста на гитхаб. В примере выше у меня сопоставляются права доступа с диапазоном символов 32..126 (ASCII). Если номер 7ми битной кодировки ASCII сдвинуть на два бита, то получаем как раз те самые 9 бит прав доступа. Давай подвигаем! Распечатаем диапазон ACSII символов 32..126 в восьмеричном формате:
for i in 10 {32..126} ; do printf '%03o\n' $(( i << 2 )) ; done
На экран вывалится куча всего, что-то похожее на права доступа:
372
376
380
Чтобы преобразовать в обратную сторону делаем так:
for i in 440 524 545 ; do echo $(( 8#$i >> 2 )) ; done
То есть сдвигаем вправо на 2 бита. Из цифр 440, 524, 545 - получили 72, 85, 89. Ну а теперь всю эту херню ненаглядную, преобразуем в читаемые символы.
for i in 440 524 545 ; do printf -v hex '\\x%x' $(( 8#$i >> 2 )) ; echo -e "$hex" ; done
Вот это поворот! Странно что на такую строчку антивирус не триггернулся. В общем теперь на экране красуется всем известное слово. Помнишь я сегодня писал, что единицы двоичного представления прав доступа, соответствуют символам rwx, а нули символу «-». Таким образом можно легко получить закодированный символ вручную подставляя 0 и 1 в нужных местах. А вот и сам скрипт, который разбивает строку и генерирует кучку файлов с нужными правами доступа. В скрипте не используются сдвиги, работает всё через ассоциативные массивы для декодирования. Запускается так:
./char2mode /tmp/box 'Welcome to bashdays'
Указываешь директорию, где создаем структуру файлов и саму строчку, которую нужно спрятать в правах доступа. Конечно есть нюансы. Скрипт будет орать если что-то не так. Существующие файлы не перезаписываются. Именование файлов соответствуют лексикографическому порядку сортировки. Это нужно для того, чтобы получить ту же последовательность файлов, что и при создании. Скрипт декодирования получает имена используя globbing, который сортирует именно так. Сам скрипт декодирования лежит тут, запускается аналогично:
./mode2char /tmp/box
При использовании скрипта декодирования, можно привязать какие угодно права к конкретному символу без какой-либо логики. Выбор велик:
printf '%s\n' {0..7}{0..7}{0..7}
printf '%s\n' {r,-}{w,-}{x,-}{r,-}{w,-}{x,-}{r,-}{w,-}{x,-}
А еще же есть имена файлов, временные метки с наносекундами. Ну или вообще упороться и упаковывать более одного числа в атрибуты файла используя уникальную сортировку имен файлов. Сложно? Конечно! Но думаю общую идею ты понял. Изучай! Увидимся совсем скоро. tags: #linux #bash — 💩 @bashdays

Привет, дело было вечером, делать было нечего. Начнем это утро с мнемоники прав доступа. Оно нам сегодня вечером пригодится. Возможно будет сумбурно, но постараюсь разжевать. А вечером будем заниматься хитрой стеганографией на bash, как раз с помощью прав доступа. Для стандартных трех троек прав доступа справедливо следующее:
 4    2    1     # восьмеричная система  
r--  -w-  --x    # символьное представление  
100  010  001    # двоичная система
Сразу обрати внимание на разряды с единицей (1) в двоичной системе счисления. Они соответствуют позициям прав доступа в символьном представлении из вывода команды ls -l. Наглядная табличка соответствий:
- 0: 000 / —
- 1: 001 / –x
- 2: 010 / -w-
- 3: 011 / -wx
- 4: 100 / r–
- 5: 101 / r-x
- 6: 110 / rw-
- 7: 111 / rwx

Если требуется определенный набор прав, то складываем 4, 2, 1. Первая строка это, права, которые получаются при сложении.
 3     5     6     7  
1+2   1+4   2+4  1+2+4    
-wx   r-x   rw-   rwx  
011   101   110   111
Если на пальцах, у нас есть 3 базовых цифры 1, 2, 4 которые означают такое:
4 = r
2 = w
1 = x
Берем эти цифры, складываем как угодно и получаем например 7, что равно 1+2+4 = rwx (читаем, пишем, исполняем). Ладно, большинству из вас оно нахрен не вперлось, но я продолжу. У меня коллега например всегда всем ставит 777 даже не задумываясь. Мол всё работает и никогда нет проблем с доступом к файлам и папкам. Ну ок, возможно однажды встретит своего черношляпа и пересмотрит свои практики. Работает кстати в крупном банке. Только представь какой 3.14здец на серверах у него творится где наши денюжки лежат. Давай по теме. Создаем массив:
arr=({0..1}{0..1}{0..1})
Получаем права в двоичной системе счисления:
echo ${arr[1]}  
echo ${arr[2]}  
echo ${arr[3]}  
echo ${arr[4]}  
echo ${arr[5]}  
echo ${arr[6]}  
echo ${arr[7]}
На экран выведется:
000
001
010
011
100
101
110
В bash при указании индекса массива можно применять арифметические операции. Давай воспользуемся и наглядно посмотрим как суммируются права доступа.
echo ${arr[1+2]}  
echo ${arr[1+4]}  
echo ${arr[2+4]}  
echo ${arr[1+2+4]}
Получаем:
010
100
101
110
То есть когда мы делали arr[1] у нас было 000, а когда применили сложение arr[1+2], 000+001 = 010. В общем математика и кишочки. Голову сильно не забивай, в повседневных задачах достаточно восьмеричной и символичной системы счислений. Из полезного: теперь ты знаешь как создавать массивы и складывать их. Ну и на закуску команда, которая выведет права в восьмеричной системе:
stat -c'%a %n' /tmp/*
Получим такое:
700 snap-private-tmp
700 ssh-XXXXXX5Fyxmr
700 ssh-XXXXXXENecCm
700 ssh-XXXXXXkPO9QF
700 systemd-logind.tkfPcb
700 systemd-r1KRzA
777 test.txt
Не забываем что у всей этой ерунды есть еще дополнительные биты, это когда права указываются четырьмя цифрами. Короче базу рассмотрели, если ничо не понял, забей. Это как Джаз, чтобы от него блевать не хотелось, нужно стать старым пердуном. Но мы же с вами еще так молоды! Увидимся вечером. Хорошего понедельника! tags: #linux #bash — 💩 @bashdays

Как бы странно это не звучало, но в оболочке bash есть набор очень полезных хоткеев для эффективной работы. Держу пари многие тут пользуются только ctrl+r и ctrl+l, да чо греха таить я из этого же числа. Давай залезем поглубже и возможно возьмем что-то на вооружение. Навигация
Ctrl+A переместить курсор в начало строки Ctrl+E переместить курсор в конец строки Ctrl+F переместить курсор на один символ вправо Ctrl+B переместить курсор на один символ влево Alt+B / Esc+B переместить курсор влево на одно слово
Хм… фигня какая-то, я пользуюсь ctrl+стрелочки, хватает. Редактирование
Ctrl+U удалить все и вернуться в начала строки Ctrl+K удалить все после курсора Ctrl+W удалить слово перед курсором Alt+D удалить слово после курсора Ctrl+Y вернуть удаленное Ctrl+D удалить символ под курсором Ctrl+H аналогично backspace Alt+T смена позиции текущего слова на предыдущее Ctrl+T замена местами двух символа перед курсором Alt+U перевод слова в заглавные после курсора Alt+L перевод слова в строчные после курсора Ctrl+_ отмена последнего ввода
Тут уже поинтереснее. Мне зашло преобразование в заглавные и строчные символы, не знал. Ну и откат порадовал по Ctrl+Y. Bash History
Ctrl+R режим обратного поиска Ctrl+P переход к предыдущей команде Ctrl+N переход к следующей команде Ctrl+O выполнить найденную команду Ctrl+G выход из режима поиска !! выполнить предыдущую команду !vim выполнить последнюю команду, которая начиналась на vim !vim:p вывести последнюю команду, которая начиналась на vim !n запустить n команду из history
Избыточно. Максимум оставляем Ctrl+R, остальное ну такое. Общие хоткеи
Ctrl+C завершить команду Ctrl+L очистить экран Ctrl+S приостановить вывод, остановить прокрутку Ctrl+Q возобновить прокрутку Ctrl+D закрыть оболочку Ctrl+Z приостановить процесс
Большинство из них мы с вами знаем. Из интересного это остановка прокрутки, например когда нужно приостановить вывод информации на экран и прочитать ее. Как видим никаких киллер-фич нет. За исключением пары-тройки хоткеев. Разогнать workflow особо не получится, но для ознакомления вполне сойдет. Если знаешь какие-нибудь еще вкусные сочетания или хаки, велком в комментарии. tags: #linux #bash — 💩 @bashdays