Bash Days | Linux | DevOps
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Bash Days | Linux | DevOps
تُعد قناة Bash Days | Linux | DevOps (@bashdays) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 23 792 مشتركاً، محتلاً المرتبة 5 701 في فئة التكنولوجيات والتطبيقات والمرتبة 28 128 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 23 792 مشتركاً.
بحسب آخر البيانات بتاريخ 17 يونيو, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -202، وفي آخر 24 ساعة بمقدار -5، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 21.91%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 12.48% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 5 213 مشاهدة. وخلال اليوم الأول يجمع عادةً 2 971 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 21.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل bashdays, linux, bash, docker, скрипт.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.r...”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 18 يونيو, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
rm и паре с find и зачищаешь ненужное гавно которое старше определенного времени.
А чо делать когда бекапы «правильно» заливаются в облако s3 по протоколу swift?
Там find с rm уже не прокатит. Можно конечно изгаляться, но я в рот ебал изобретать очередной велосипед.
Для этих целей отлично подходит rclone, кто бы блядь мог подумать.
Работает так:
/usr/bin/rclone --config ~/.config/rclone/rclone.conf \
--log-file /var/log/rclone-trasher.log \
-v delete selectel:backups/1c/ --min-age 3d --rmdirs
Показываем где лежит конфиг, конфиг представляет нечто такое:
[selectel] type = swift env_auth = false user = bashdays key = fuckyou auth = https://auth.selcdn.ru/ endpoint_type = internalПишем непотребства в лог файл, чтобы потом посмотреть что там в кроне навыполнялось. Указываем где чистим бекапы, задаем сколько бекапов нам оставить, в примере я оставляю за 3 последних дня. Бекапы у меня в каталогах по датам, добавляю ключик
rmdirs.
Вешаем на крон и идем дальше Я собрал докер имейдж, а контейнер вечно в ребуте либо вообще не запускается, чо делать и как отлаживать?Давай симулируем ситуацию и попробуем что-то с этим сделать. ㅤ Для начала соберем имейдж, это будет простой nginx + свой конфиг, который будет копироваться с локальной машины в имейдж. Создаем на хостовой машине пару файлов: Dockerfile:
FROM nginx:latest
WORKDIR /etc/nginx
COPY ./nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
nginx.conf
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name localhost;
location / {
return 200 'Hello, Docker!'
add_header Content-Type text/plain;
}
}
}
Собираем имейдж:
docker build -t my-nginx .
Ждем, на экране бежит куча всякого непотребства. Это нормально. Ждем…
Проверяем:
docker images
Ага, все ок, выплюнуло что-то вроде:
REPOSITORY TAG IMAGE ID CREATED SIZE
my-nginx latest b844ef77daa3 33 seconds ago 188MB
Запускаем:
docker run -d -p 80:80 my-nginx
Проверяем:
docker ps
Хуй там плавал. Ничо не стартануло… ошибок нет, куда смотреть?
Если контейнер вообще не запускается, то для начала смотрим логи:
1. Узнаем состояние контейнера:
docker ps -a
Видим хуй с маслом: Exited (1) 4 minutes ago
2. Смотрим логи:
docker logs --follow <id or name>
В <id or name> подставляем айдишник либо имя контейнера:
В логах видим ошибку:
invalid number of arguments in "return" directive in /etc/nginx/nginx.conf:15
Вот! С ней уже можно работать. Получается мы посмотрели логи, даже для незапущенного контейнера. Пиздуем в nginx конфиг и видим, что в 14й строке проебали точку с запятой.
Дополнительно можно посмотреть коды выхода:
docker inspect <id or name>
Например, если код выхода ExitCode = 137, значит не хватило ресурсов, подкинь памяти и все взлетит. Наверное…
Это основные моменты отладки.
Ну а если контейнер все же запустился, но что-то не работает, сначала повторяем все вышенаписанное. Ну и дополнительно можешь подключиться к нему в интерактивном режиме:
docker exec -it <id or name> bash/sh
Подставляешь id/name контейнера и выбираешь шелл, частенько bash и коробки не установлен, поэтому как вариант запускаешь sh.
А для визуализации слоев используем утилиту dive
Установка dive:
DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -OL https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.deb
sudo apt install ./dive_${DIVE_VERSION}_linux_amd64.deb
Открываем имейдж на анализ:
dive <id or imagename>
Подставляем id или имя — ИМЕЙДЖА (не контейнера)
Смотрим, охуеваем, закрываем.
Еще можно глянуть конкретный файл в контейнере:
docker exec -it <id or name> cat /etc/nginx/nginx.conf
Либо скопировать его себе на локальную машину:
docker cp <id or name>:/etc/nginx/nginx.conf /tmp
Поправить и скопировать обратно в контейнер:
docker cp /tmp/nginx.conf <id or name>:/etc/nginx/nginx.conf
Перезапускаем контейнер с новым конфигом:
Прикол в том, что тебе не нужно билдить новый имейдж, ты делаешь правки прям в контейнере.
docker exec <id or name> nginx -s reload
Такие дела! Если знаешь еще хаки и способы отладки контейнеров/имеджей, пиши в комменты, будет полезно!
tags: #devops #debug #docker
—
➕ @bashdays ➕ @gitgateСтрелки, HOME, END... и особенно функциональные клавиши (F1-F12) генерят многобайтные коды.
3. Клавиши TAB ENTER SPACE вообще нихрена не выдают.
4. Коды нажатых клавиш зависят от терминала, который у вас эмулируется.
5. Очень много клавиш используется в качестве "горячих", поэтому их обработка производится раньше, чем их обработает bash.
В общем - если вы умный человек - не используйте bash для обработки функциональных клавиш.
А если похожи на меня - приведу функцию, которая помогает минимизировать проблемы.
Поскольку не все клавиши генерят печатные коды, я не придумал ничего более умного, чем конвертнуть коды в hex-последовательность. Поверьте, работать со строкой в 10 символов проще, чем с управляющими символами.
Понятней.
Программа более-менее обрабатывает совместное нажатие CTRL+, ALT+. Не обрабатывает нажатия нескольких клавиш.
#!/bin/bash
function GET_KEY(){
declare K1 K2 K=
declare -i i
read -rsn1 K1;read -rsn4 -t 0.001 K2
if [[ "$K1" != $'\x1b' ]];then
K2=
fi
K1="${K1}${K2}"
i=${#K1}
while ((i--));do
printf -v K2 "%02X" \"${K1:$i:1}\"
K=${K2}${K}
done
printf "%s" $K
}
clear
echo "TERMINAL="$TERM
KEY=1
while [ "$KEY" != "" ];do
KEY=$(GET_KEY)
echo $KEY
# echo -e "\x$KEY"
done
сохраните в файл key2hex.sh
chmod +x ./key2hex.sh
./key2hex.sh
Под закрытым текстом объяснения для начинающих.
Поскольку программа простая - сильно комментировать не буду.
read -rsn1 K1;read -rsn4 -t 0.001 K2 считывает 1 символ, потом возможно еще 4, но с малым временем ожидания. Если символ многобайтный - в буфере он уже есть.
Если символ начинается не с кода 1b (ESC) он должен быть однобайтным.
${#K1} -число символов в строке.
Далее в цикле while ((i--));do посимвольно преобразуем строку в hex, накапливая в переменной K
echo -e "\x$KEY" команда перевода hex в char привожу для примера.
Для прикола попробуйте выполнить программу в разных терминалах (LxTerminal и tty1) и посмотреть на F5.
Поясню, в tty1 можно перейти из GUI CTRL+ALT+F1, а вернуться обратно обычно ALT+F7
Ну, или не F7. посмотреть, куда возвращаться можно командой w . Даже маленькие разберутся.
В общем, терминал(ы) - штука сложная. И тот только теперь я начал немного понимать, нахрена нужна библиотека ncurses.
help read printf
man w printf
tags: #bash © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgateКак в gitlab registry чистить докер имейджы, а то там такая пиздец блядь каша после экспериментов.В gitlab есть встроенная херня, которая находится в Settings → Packages & Registries → Container Registry. Заранее не забудь выбрать нужный проект. Там есть раздел: Cleanup Policies, в нём нажимаешь кнопку Set cleanup rules иии видишь еще кучу какого-то гавна. Короче:
Run cleanup — выбираешь как часто запускать зачистку
Keep these tags — теги которые не нужно зачищать
Remove these tags — теги которые будем удалять
Remove tags older than — ну тут ежу понятно
В этих штуках работают регулярные выражения, примеры этих регулярок можешь глянуть тут.
Еще момент, если заполнить Keep these tags, то это даст протекцию тегам и даже если их прописать в Remove these tags имейджы не будут удалены.
Заполняешь, сохраняешь и оно автоматически будет тебе все подчищать.
✔ Дополнительные варианты зачистки:
- удаляешь мышкой в UI самого гитлаба
- удаляешь через API самого гитлаба (например баш скриптом)
- используешь утилиты типа regclient или docker-gc
Такие дела, надеюсь было полезно. Давай, хороших тебе предстоящих выходных и береги себя!
UPD: от Малахитовая Штукатурка
а еще можно так зачистить:
sudo gitlab-ctl registry-garbage-collect -m
tags: #devops
—
🔔 @bashdays➡️ @gitgatessh -i ~/.ssh/id_rsa user@xxx.xxx.xxx.xxx
Ключик можно автоматически добавлять в ssh-agent и тогда подключение будет выглядеть так:
ssh user@xxx.xxx.xxx.xxx
Чтобы это провернуть, прописываем в ~/.profile
if [ -z "$SSH_AUTH_SOCK" ]; then
eval $(ssh-agent -s) > ~/.ssh/ssh-agent
fi
ssh-add ~/.ssh/gitlab_rsa
ssh-add ~/.ssh/production_rsa
ssh-add ~/.ssh/home_rsa
Первый блок проверяет запущен ли SSH агент, а если нет — запускает его.
ㅤ
Второй блок добавляет нужные ключи в агент. Посмотреть все ключи в агенте можешь командой ssh-add -L, а удалить всё из агента можно командой ssh-add -D.
Вот и вся наука. Ну а теперь интерактивная часть.
Ну а чтоб тебе не скучно было, можешь написать башник и скинуть в комменты, который автоматически пробегается по всем ключам в папке ~/.ssh и добавляет их в агент.
Но учти что в этой папке могут быть косячные ключи, ключи с неправильными правами, да и всякие файлы вида config, known_hosts. Короче потребуется работа с эксепшенами.
Чей коммент с решением соберет больше всех реакций и будет заебись работать, закину приятный бонус. Поехали!
tags: #utilites #рабочиебудни #bash
—
🔔 @bashdays➡️ @gitgate.bashrc хуй поставишь.
И нашел я BLE.sh (Bash Line Editor). Звучит же?
Софтина полностью меня устроила, даж красненьким подсвечивает команды когда я хуйню пытаюсь ввести.
Устанавливается просто, клонируешь себе из гит репки файлы, компилируешь и в ~/.profile подключаешь. Выглядит это так:
git clone --recursive https://github.com/akinomyoga/ble.sh.git
make -C ble.sh
echo "source ble.sh/out/ble.sh" >> ~/.profile
Перезапускаешь сессию и получаешь подсказки по командам, которые ты ранее вводил.
Бле так Бле!
В репе есть мануал, там чет через курл-хуюрл ставится и всякие другие способы описаны. Выбирай какой тебе ближе.
Но как быть со сфистоперделками и новогодними ёлками? Там оформление добавить, нерд-фонты и т.п.
Ха, на этот случай есть штука oh-my-posh.
Ставится так:
curl -s https://ohmyposh.dev/install.sh | bash -s
mkdir ~/.poshthemes
wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/themes.zip -O ~/.poshthemes/themes.zip
unzip ~/.poshthemes/themes.zip -d ~/.poshthemes
chmod u+rw ~/.poshthemes/*.omp.*
rm ~/.poshthemes/themes.zip
Дополнительно ставишь темы оформления. Ну и потом не забываем всё это дело подключить в ~/.profile
eval "$(oh-my-posh --init --shell bash --config ~/.poshthemes/capr4n.omp.json)"
В ключик --config вставляем название понравившейся темы. Ну и оболочку указываем, я естественно захуярил туда bash.
Темы визуально позырить тут. Итог ты можешь посмотреть на скриншоте к посту.
А завтра покажу как для всего этого дела ещё одну очень полезную штуку прикрутить.
tags: #utilites #рабочиебудни #bash
—
🔔 @bashdays➡️ @gitgateexec.
Есть два варианта использования:
1. exec command — билет в один конец. Для чего это нужно я так и не понял, может умные в комментах напишут. Перед выполнением команды, bash фактически завершается, управление передаётся команде. И все...
пример:
exec echo 123 — результат очень красочный. Такой же, как и с любой другой командой.
2. Перенаправление. Это штука крайне нужная и очень понятная. В других, нормальных ЯП она называлась бы open.
В Basic open "filename.txt" for input as #3
В bash exec 3<fileneme.txt
В Basic open "filename.txt" for output as #4
В bash exec 4>filename.txt
В Basic open "filename.txt" for append as #5
В bash exec 5>>filename.txt
В Basic open "filename.txt" for random as #6
В bash exec 6<>filename.txt
Приведу несколько полезных примеров
exec 2>/dev/null — все сообщения об ошибках отправить по пути, указанному в считалочке.
На код ошибки (типа errorlevel) это не влияет.
exec 1>filename.txt все сообщения, кроме ошибок отправить в файл.
exec 1>filename.txt 2>&1 все сообщения, включая ошибки отправить в файл.
Стоп-стоп. Откуда взялся &? Легко запомнить. Это костыль. Если вы не укажите &, сообщения попадут в файл с именем "1".
Все помнят, что 0=/dev/stdin 1=/dev/stdout 2=/dev/stderr. Остальные 3-9 можем использовать по собственному усмотрению.
Пример:
#!/bin/bash
seq 1 3|tee 1.txt > 2.txt
exec 3<1.txt
while read -u3 L1;do
exec 4<2.txt
while read -u4 L2;do
echo $L1 $L2
done
done
seq — создаем два файла, по три строки в каждом
exec 3<1.txt - открываем файл для чтения с дескриптором 3
read -u3 L1 читаем из файла с дескриптором 3. Дальше все аналогично.
Если нужно закрыть 4, например, дескриптор за ненадобностью exec 4>&-
man tee seq help while read exectags: #bash © by Tagd Tagd — 🔔 @bashdays➡️ @gitgate
docker run --name wyl \
-e "IFACES=$YOURIFACE" \
-e "TZ=$YOURTIMEZONE" \
--network="host" \
-v $DOCKERDATAPATH/wyl:/data/WatchYourLAN \
aceberg/watchyourlan:v2
Не забываем забить свои переменные. На вебморду можно попасть так:
< IP >:8844
В общем рекомендую потыкать, может кому пригодится для каких-то своих целей.
Официальная репка на гитхабе тут
tags: #utilites
—
🔔 @bashdays➡️ @gitgate
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
