Bash Days | Linux | DevOps
Авторский блог от действующего девопса Самобытно про разработку, 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), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
-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
—
💩 @bashdayspenis=big ./piu-piu
Бери друга и вперед! В два ствола летать гораздо веселее. Так же присутствует режим дуэли, который позволит выяснить у кого прибор длиннее. Выясни это здесь и сейчас!
А в последнем обновлении, добавлен эффект трясущегося хозяйства. Вообще у разработчика большие планы на этот проект, обещают добавить кастомизацию размеров с плавающей точкой.
Если у тебя еще остались друзья, можешь нехило зарубиться!
Ставится элементарно через apt (но версия не последняя), либо сливаешь себе репозиторий, чмодишь на «икс» и запускаешь.
На выбор либо вертолет, либо penis mode. Сам уже отталкивайся от своих предпочтений.
Здесь страница проекта и мануалы как ставить. Погнали!
tags: #linux #bash #games
—
💩 @bashdaysapt-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вчера - текущие задачи сегодня - текущие задачиЧто вы скажете в своё оправдание? А давайте вы теперь будете нам писать прям подробным списком, какие задачи делаете! Да блять! Проснулись. В том-то и дело, что я нихуя не делаю, я уже сделал и слежу, чтобы это работало 24/7/365. Ну раз хотите чтива, будут вам подробные отчеты. Позиция понятна, ребят чет понесло не туда, ну бывает… Ну и теперь каждое воскресение я захожу в GPT и клепаю бездушные отчеты на следующую неделю. Закидываю их в телеграм отложку и продолжаю наслаждаться своей зоной комфорта. Ну и ТОП менеджеры позже заапрувили, что теперь всё ок! Эта история закончилась на позитивной ноте, все остались довольны. Но первый звоночек прозвенел, посмотрим что будет дальше. Есть такая прекрасная поговорка — Прод висит на нитке, а думают о прибытке! Спасибо, что дочитали, мне нужно было с вами этим поделиться. Хорошего всем утра-дня-вечера-ночи. На связи! tags: #рабочиебудни — 💩 @bashdays
command | tee log.txt
На картинке хорошо видно, откуда произошло название tee, это буква T в произношении. Вывод затекает сверху слева и вытекает в двух направлениях. Ты видишь происходящее на экране, а параллельно это происходящее записывается и в файл. Удобно.
Вот как нужно называть утилиты! Взял произношение буквы и можно в коробку упаковывать. Кстати пока писал, вспомнил что английская «H», взяло название от Eighth - то есть восьмая буква алфавита. Короче никто особо не заморачивался с неймингом.
Ну а еще есть подобная утилита, называется просто script. Она позволяет записать всё происходящее на экране сразу в файл. Работает даже в интерактивном режиме. Запустил ты ее и работаешь в консоли, а она пишет все твои действия в кабачок.
Ключей у нее много разных, если интересно можешь глянуть хелпину. Видел что её подключают в bashrc чтобы логировать все действия криворуких обезьян.
Я ни tee ни script не использую, потому что всё время про них забываю, да и особой необходимости нет.
Такие дела. Вечерком закину еще чтива, увидимся!
tags: #bash #utils
—
💩 @bashdays#!/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
—
💩 @bashdayswall "Быстренько сохраняемся и валим с сервера. В 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#!/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
—
💩 @bashdaysprintf '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
—
💩 @bashdaystouch 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
—
💩 @bashdaysls -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
—
💩 @bashdays4 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
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
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
