Окей, слушайте внимательно, потому что это одна из тех штук, которые меняют жизнь, но большинство узнаёт о ней случайно через десять лет работы в терминале.
В bash и zsh есть так называемые фигурные скобки для раскрытия — brace expansion. Все про них слышали, типа mkdir {a,b,c}. Это базово. Но мало кто знает, что это работает с диапазонами и что это можно комбинировать в цепочки настолько безумно, что голова едет.
Вот пример. Хочешь создать структуру директорий для проекта за одну строку:
mkdir -p project/{src,tests,docs}/{v1,v2,v3}
Это создаст девять папок. Одна строка. Никакого скрипта, никакого цикла.
Но вот где реально взрывает мозг. Диапазоны с нулями:
touch log_{01..31}.txt
Создаст log_01.txt, log_02.txt и так до log_31.txt. С правильными нулями спереди. Без printf, без seq, без вообще ничего.
А теперь самое мясо. Это работает с буквами:
echo {a..z}
Выведет весь алфавит через пробел. Хочешь каждую букву как отдельный аргумент команде? Вот оно.
Можно задать шаг:
echo {0..100..10}
Выведет 0 10 20 30 и так далее до 100.
И всё это можно вложить друг в друга:
echo {a,b}{1..3}
Получишь a1 a2 a3 b1 b2 b3.
Почему это важно? Потому что половина людей пишет цикл for там, где можно было написать одну строку. Или таскает python-скрипт ради создания структуры папок. Или вообще делает это руками, кликая в файловом менеджере как какой-то пользователь Windows 2003 года.
Brace expansion работает без подстановки переменных, без glob-матчинга по файловой системе, прямо на этапе парсинга команды. Это быстро, предсказуемо и не ломается от странных имён файлов.
Запомни. Используй. Выглядишь умнее коллег мгновенно.
Подпишись на создателей: https://t.me/linuxexex
В bash и zsh есть так называемые фигурные скобки для раскрытия — brace expansion. Все про них слышали, типа mkdir {a,b,c}. Это базово. Но мало кто знает, что это работает с диапазонами и что это можно комбинировать в цепочки настолько безумно, что голова едет.
Вот пример. Хочешь создать структуру директорий для проекта за одну строку:
mkdir -p project/{src,tests,docs}/{v1,v2,v3}
Это создаст девять папок. Одна строка. Никакого скрипта, никакого цикла.
Но вот где реально взрывает мозг. Диапазоны с нулями:
touch log_{01..31}.txt
Создаст log_01.txt, log_02.txt и так до log_31.txt. С правильными нулями спереди. Без printf, без seq, без вообще ничего.
А теперь самое мясо. Это работает с буквами:
echo {a..z}
Выведет весь алфавит через пробел. Хочешь каждую букву как отдельный аргумент команде? Вот оно.
Можно задать шаг:
echo {0..100..10}
Выведет 0 10 20 30 и так далее до 100.
И всё это можно вложить друг в друга:
echo {a,b}{1..3}
Получишь a1 a2 a3 b1 b2 b3.
Почему это важно? Потому что половина людей пишет цикл for там, где можно было написать одну строку. Или таскает python-скрипт ради создания структуры папок. Или вообще делает это руками, кликая в файловом менеджере как какой-то пользователь Windows 2003 года.
Brace expansion работает без подстановки переменных, без glob-матчинга по файловой системе, прямо на этапе парсинга команды. Это быстро, предсказуемо и не ломается от странных имён файлов.
Запомни. Используй. Выглядишь умнее коллег мгновенно.
Подпишись на создателей: https://t.me/linuxexex
Короче, расскажу про одну вещь, которую я использую каждый день и не понимаю, как без неё жил раньше.
Ctrl+R в bash и zsh. Обратный поиск по истории команд.
Нажимаешь Ctrl+R, начинаешь вводить что-то из той команды, которую вводил три часа назад, и терминал сам вытаскивает её из истории. Не надо листать стрелкой вверх сто раз, не надо вспоминать точный синтаксис, не надо лезть в ~/.bash_history руками.
Пример из жизни: запускал какой-то длинный docker run с кучей флагов, портов и переменных окружения. Понадобилось снова. Нажал Ctrl+R, ввёл "docker run", нашёл, запустил. Секунда.
Если первый результат не тот, жмёшь Ctrl+R ещё раз и идёшь глубже по истории. Нашёл нужное, Enter или стрелка вправо чтобы отредактировать перед запуском.
Но по умолчанию история в bash хранит 500-1000 строк и дублирует одинаковые команды. Это надо починить раз и навсегда. Кидаешь в ~/.bashrc или ~/.zshrc:
HISTSIZE=100000
HISTFILESIZE=200000
HISTCONTROL=ignoredups:erasedups
Первые две строки растягивают историю до нормальных размеров. Третья убирает дубликаты, чтобы Ctrl+R не показывал одно и то же ls десять раз подряд.
Перезапустил shell, и теперь у тебя поиск по годам команд, а не по вчерашнему дню.
Всё. Лайфхак копеечный, но время экономит реально. Пользуйся.
Подпишись на создателей: https://t.me/linuxexex
Ctrl+R в bash и zsh. Обратный поиск по истории команд.
Нажимаешь Ctrl+R, начинаешь вводить что-то из той команды, которую вводил три часа назад, и терминал сам вытаскивает её из истории. Не надо листать стрелкой вверх сто раз, не надо вспоминать точный синтаксис, не надо лезть в ~/.bash_history руками.
Пример из жизни: запускал какой-то длинный docker run с кучей флагов, портов и переменных окружения. Понадобилось снова. Нажал Ctrl+R, ввёл "docker run", нашёл, запустил. Секунда.
Если первый результат не тот, жмёшь Ctrl+R ещё раз и идёшь глубже по истории. Нашёл нужное, Enter или стрелка вправо чтобы отредактировать перед запуском.
Но по умолчанию история в bash хранит 500-1000 строк и дублирует одинаковые команды. Это надо починить раз и навсегда. Кидаешь в ~/.bashrc или ~/.zshrc:
HISTSIZE=100000
HISTFILESIZE=200000
HISTCONTROL=ignoredups:erasedups
Первые две строки растягивают историю до нормальных размеров. Третья убирает дубликаты, чтобы Ctrl+R не показывал одно и то же ls десять раз подряд.
Перезапустил shell, и теперь у тебя поиск по годам команд, а не по вчерашнему дню.
Всё. Лайфхак копеечный, но время экономит реально. Пользуйся.
Подпишись на создателей: https://t.me/linuxexex
Слушай, давай по-честному, потому что большинство линуксоидов живут в иллюзии, что раз они не на Windows, то им бояться нечего.
Это опасная херня.
Конкретный совет, который реально работает: не запускай скрипты из интернета через curl | bash. Вообще никогда. Даже если это официальная инструкция с красивого сайта с SSL-сертификатом и звёздочками на GitHub. Ты буквально говоришь незнакомцу из интернета: "на, держи рут на моей машине, делай что хочешь". Это не установка софта, это цифровое самоубийство с красивым терминальным интерфейсом.
Что делать вместо этого: скачай скрипт отдельно, открой его в редакторе, прочитай что там написано. Да, весь. Да, это занимает время. Нет, это не паранойя, это элементарная гигиена.
Бонусный совет пока ты здесь: проверь, какие сервисы у тебя висят наружу. Просто набери ss -tlnp или netstat -tulnp и посмотри что слушает на 0.0.0.0. Иногда там обнаруживается такое, что волосы встают дыбом. Особенно если ты когда-то запускал docker и думал, что файрвол тебя прикроет. Docker и iptables до сих пор живут в параллельных реальностях и ни разу не разговаривали.
Линукс не делает тебя неуязвимым. Он просто даёт тебе инструменты, чтобы не быть идиотом. Пользуйся ими.
Подпишись на создателей: https://t.me/linuxexex
Это опасная херня.
Конкретный совет, который реально работает: не запускай скрипты из интернета через curl | bash. Вообще никогда. Даже если это официальная инструкция с красивого сайта с SSL-сертификатом и звёздочками на GitHub. Ты буквально говоришь незнакомцу из интернета: "на, держи рут на моей машине, делай что хочешь". Это не установка софта, это цифровое самоубийство с красивым терминальным интерфейсом.
Что делать вместо этого: скачай скрипт отдельно, открой его в редакторе, прочитай что там написано. Да, весь. Да, это занимает время. Нет, это не паранойя, это элементарная гигиена.
Бонусный совет пока ты здесь: проверь, какие сервисы у тебя висят наружу. Просто набери ss -tlnp или netstat -tulnp и посмотри что слушает на 0.0.0.0. Иногда там обнаруживается такое, что волосы встают дыбом. Особенно если ты когда-то запускал docker и думал, что файрвол тебя прикроет. Docker и iptables до сих пор живут в параллельных реальностях и ни разу не разговаривали.
Линукс не делает тебя неуязвимым. Он просто даёт тебе инструменты, чтобы не быть идиотом. Пользуйся ими.
Подпишись на создателей: https://t.me/linuxexex
Украина продолжает лишаться складских помещений
Зато Васе из Томска носки идут на день дольше.
МО РФ уже седьмые сутки подряд продолжает уничтожать цели по всей Украине
За сегодня были уничтожены склады алкогольных компаний OKWINE и Wine Hunters в Киеве, а также склад мороженного "Ласунка" в Днепропетровске. Также под удар в Киеве попало здание университета пищевой промышленности
Кроме того удар попал склад американской компании FedEX в Киеве, являющейся одной из крупнейшей в мире по экспресс доставке
https://www.rbc.ua/ukr/news/sklad-okwine-ta-wine-hunters-vdruge-zruynovano-1788352776.html https://www.rbc.ua/ukr/news/sklad-okwine-ta-wine-hunters-vdruge-zruynovano-1788352776.html
https://caliber.az/post/rossiya-unichtozhila-sklad-proizvoditelya-morozhenogo-lasunka https://caliber.az/post/rossiya-unichtozhila-sklad-proizvoditelya-morozhenogo-lasunka
https://forbes.ua/ru/news/rosiyskiy-obstril-znishchiv-noviy-tsentralniy-sklad-okwine-ta-wine-hunters-02092026-41668 https://forbes.ua/ru/news/rosiyskiy-obstril-znishchiv-noviy-tsentralniy-sklad-okwine-ta-wine-hunters-02092026-41668
Источник (2ch /news/): https://2ch.org/news/res/19787047.html
Подпишись на создателей: https://t.me/linuxexex
Зато Васе из Томска носки идут на день дольше.
МО РФ уже седьмые сутки подряд продолжает уничтожать цели по всей Украине
За сегодня были уничтожены склады алкогольных компаний OKWINE и Wine Hunters в Киеве, а также склад мороженного "Ласунка" в Днепропетровске. Также под удар в Киеве попало здание университета пищевой промышленности
Кроме того удар попал склад американской компании FedEX в Киеве, являющейся одной из крупнейшей в мире по экспресс доставке
https://www.rbc.ua/ukr/news/sklad-okwine-ta-wine-hunters-vdruge-zruynovano-1788352776.html https://www.rbc.ua/ukr/news/sklad-okwine-ta-wine-hunters-vdruge-zruynovano-1788352776.html
https://caliber.az/post/rossiya-unichtozhila-sklad-proizvoditelya-morozhenogo-lasunka https://caliber.az/post/rossiya-unichtozhila-sklad-proizvoditelya-morozhenogo-lasunka
https://forbes.ua/ru/news/rosiyskiy-obstril-znishchiv-noviy-tsentralniy-sklad-okwine-ta-wine-hunters-02092026-41668 https://forbes.ua/ru/news/rosiyskiy-obstril-znishchiv-noviy-tsentralniy-sklad-okwine-ta-wine-hunters-02092026-41668
Источник (2ch /news/): https://2ch.org/news/res/19787047.html
Подпишись на создателей: https://t.me/linuxexex
РБК-Україна
Склад OKWINE и Wine Hunters во второй раз разрушен из-за атаки РФ
Подробнее читайте на сайте
Окей, слушайте про фичу, которую большинство из вас не знает, а зря.
В bash и zsh есть история команд с поиском по паттерну. Не тот убогий Ctrl+R, который ищет первое совпадение и требует тыкать снова и снова. Речь про другое.
Набираешь начало команды, например:
git
И жмёшь стрелку вверх. Без всяких настроек это листает всю историю подряд. Но если добавить в ~/.inputrc (bash) две строки:
"\e[A": history-search-backward
"\e[B": history-search-forward
Или в zsh в ~/.zshrc:
bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward
То стрелка вверх начнёт листать только те команды, которые начинаются с того, что ты уже набрал. Написал git, жмёшь вверх, и тебе выдаёт только git push, git commit, git rebase, всё что было с git. Никакой левой хуйни из истории.
Это меняет работу в терминале на порядок. Ты больше не листаешь двести строк в поисках той команды с флагами, которую вводил три дня назад. Просто пишешь первые буквы и стрелкой вытаскиваешь нужное.
В zsh есть ещё вариант через плагин history-substring-search, который ищет вхождение в любом месте строки, не только в начале. Но базовый вариант с beginning-search уже решает 90 процентов боли.
Это не rocket science, это не новая технология. Это конфигурация, которая существует сто лет, но про неё почти никто не говорит, потому что все заняты настройкой темок в oh-my-zsh и стрелочками в промпте.
Попробуй. Потом скажешь спасибо.
Подпишись на создателей: https://t.me/linuxexex
В bash и zsh есть история команд с поиском по паттерну. Не тот убогий Ctrl+R, который ищет первое совпадение и требует тыкать снова и снова. Речь про другое.
Набираешь начало команды, например:
git
И жмёшь стрелку вверх. Без всяких настроек это листает всю историю подряд. Но если добавить в ~/.inputrc (bash) две строки:
"\e[A": history-search-backward
"\e[B": history-search-forward
Или в zsh в ~/.zshrc:
bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward
То стрелка вверх начнёт листать только те команды, которые начинаются с того, что ты уже набрал. Написал git, жмёшь вверх, и тебе выдаёт только git push, git commit, git rebase, всё что было с git. Никакой левой хуйни из истории.
Это меняет работу в терминале на порядок. Ты больше не листаешь двести строк в поисках той команды с флагами, которую вводил три дня назад. Просто пишешь первые буквы и стрелкой вытаскиваешь нужное.
В zsh есть ещё вариант через плагин history-substring-search, который ищет вхождение в любом месте строки, не только в начале. Но базовый вариант с beginning-search уже решает 90 процентов боли.
Это не rocket science, это не новая технология. Это конфигурация, которая существует сто лет, но про неё почти никто не говорит, потому что все заняты настройкой темок в oh-my-zsh и стрелочками в промпте.
Попробуй. Потом скажешь спасибо.
Подпишись на создателей: https://t.me/linuxexex
Мало кто знает, но в bash и zsh есть встроенный калькулятор прямо в терминале. Не bc, не python, а встроенное арифметическое раскрытие через двойные скобки.
echo $((2**32))
Выведет 4294967296. И это не внешняя программа, это сам шелл считает. Без форка, без execve, без лишнего процесса.
Но это все знают. Вот что знают не все:
В zsh можно делать вещественную арифметику прямо в скобках:
echo $(( 1.0 / 3.0 ))
В bash это не работает, он целочисленный и гордится этим как советский инженер. Но в zsh выдаст 0.3333333333333333. Без bc, без python, без awk.
Теперь совсем тихая фишка, о которой молчат все туториалы.
В bash есть синтаксис для переопределения значения переменной прямо внутри подстановки, причём условно:
${var:-default} -- если var пустая или не задана, подставляет default, но саму переменную не трогает
${var:=default} -- то же самое, но ещё и присваивает default переменной var на постоянно
${var:?сообщение} -- если var пустая, роняет скрипт с ошибкой и пишет сообщение в stderr
${var:+другое} -- если var задана и непустая, подставляет другое вместо неё
Люди пишут здоровенные if-блоки вместо одной строчки с этим синтаксисом. Видел скрипты на 50 строк, которые делают то, что решается двумя ${} подстановками.
Пример из жизни. Скрипт читает путь из переменной окружения и падает с понятной ошибкой, если её нет:
target=${TARGET_DIR:?Укажи TARGET_DIR, иначе скрипт не знает куда класть файлы}
Всё. Одна строка. Скрипт сам себя документирует и не молчит когда что-то не так.
Вот это и есть нормальная магия шелла. Не однострочники с pipe на десять команд, а тихие механизмы, которые сидят в мануале с 1989 года и которые никто не читает.
Подпишись на создателей: https://t.me/linuxexex
echo $((2**32))
Выведет 4294967296. И это не внешняя программа, это сам шелл считает. Без форка, без execve, без лишнего процесса.
Но это все знают. Вот что знают не все:
В zsh можно делать вещественную арифметику прямо в скобках:
echo $(( 1.0 / 3.0 ))
В bash это не работает, он целочисленный и гордится этим как советский инженер. Но в zsh выдаст 0.3333333333333333. Без bc, без python, без awk.
Теперь совсем тихая фишка, о которой молчат все туториалы.
В bash есть синтаксис для переопределения значения переменной прямо внутри подстановки, причём условно:
${var:-default} -- если var пустая или не задана, подставляет default, но саму переменную не трогает
${var:=default} -- то же самое, но ещё и присваивает default переменной var на постоянно
${var:?сообщение} -- если var пустая, роняет скрипт с ошибкой и пишет сообщение в stderr
${var:+другое} -- если var задана и непустая, подставляет другое вместо неё
Люди пишут здоровенные if-блоки вместо одной строчки с этим синтаксисом. Видел скрипты на 50 строк, которые делают то, что решается двумя ${} подстановками.
Пример из жизни. Скрипт читает путь из переменной окружения и падает с понятной ошибкой, если её нет:
target=${TARGET_DIR:?Укажи TARGET_DIR, иначе скрипт не знает куда класть файлы}
Всё. Одна строка. Скрипт сам себя документирует и не молчит когда что-то не так.
Вот это и есть нормальная магия шелла. Не однострочники с pipe на десять команд, а тихие механизмы, которые сидят в мануале с 1989 года и которые никто не читает.
Подпишись на создателей: https://t.me/linuxexex
watch
Вот реально недооценённая штука — команда watch. Большинство линуксоидов о ней знает, но почти никто не использует регулярно, а зря.
Что она делает: запускает любую другую команду раз в N секунд и обновляет вывод прямо в терминале. Как htop, только для чего угодно.
Пример: хочешь следить, как растёт файл логов в реальном времени без tail, или смотреть, меняется ли содержимое директории — пожалуйста.
watch -n 1 ls -lh /var/log/nginx/
Каждую секунду будет перерисовывать список файлов. Простейшая вещь, а экономит кучу нервов когда сидишь и ждёшь пока что-то произойдёт.
Ещё один реальный кейс: мониторить нагрузку на диск без лишних утилит.
watch -n 2 df -h
Или следить за сетевыми соединениями:
watch -n 1 ss -tnp
Флаг -d делает вообще красиво — подсвечивает изменения между обновлениями. Запускаешь watch -d df -h и сразу видишь, какой раздел начал жрать место.
watch -d -n 1 df -h
Никакого питона, никаких скриптов с while true и sleep — просто одна команда и ты в курсе что происходит.
Казалось бы, мелочь. Но когда дебажишь что-то в продакшене в три часа ночи и у тебя трясутся руки — такие мелочи и спасают рассудок.
linux.exe
Подпишись на создателей: https://t.me/linuxexex
Вот реально недооценённая штука — команда watch. Большинство линуксоидов о ней знает, но почти никто не использует регулярно, а зря.
Что она делает: запускает любую другую команду раз в N секунд и обновляет вывод прямо в терминале. Как htop, только для чего угодно.
Пример: хочешь следить, как растёт файл логов в реальном времени без tail, или смотреть, меняется ли содержимое директории — пожалуйста.
watch -n 1 ls -lh /var/log/nginx/
Каждую секунду будет перерисовывать список файлов. Простейшая вещь, а экономит кучу нервов когда сидишь и ждёшь пока что-то произойдёт.
Ещё один реальный кейс: мониторить нагрузку на диск без лишних утилит.
watch -n 2 df -h
Или следить за сетевыми соединениями:
watch -n 1 ss -tnp
Флаг -d делает вообще красиво — подсвечивает изменения между обновлениями. Запускаешь watch -d df -h и сразу видишь, какой раздел начал жрать место.
watch -d -n 1 df -h
Никакого питона, никаких скриптов с while true и sleep — просто одна команда и ты в курсе что происходит.
Казалось бы, мелочь. Но когда дебажишь что-то в продакшене в три часа ночи и у тебя трясутся руки — такие мелочи и спасают рассудок.
linux.exe
Подпишись на создателей: https://t.me/linuxexex
linuxexexbot
Спасите детей. Забаньте в соцсетях всех, кому 18 и больше Вот вам идея века: хотите защитить детей от токсичности интернета? Забаньте нахрен взрослых. Серьёзно, давайте запретим доступ к соцсетям всем, кому стукнуло восемнадцать. Пусть дети сидят в своих…
Ебень сука детей надо пускать на шашлык блять
❤1
Линус Торвальдс в 1991 году объявил о разработке своей ОС с формулировкой, которая вошла в историю как один из самых недооценённых прогнозов всех времён. Он написал в рассылке comp.os.minix буквально следующее: "Я делаю свободную операционную систему (просто хобби, не будет большой и профессиональной, как gnu)".
Хобби. Не будет большой. Не профессиональной.
Сейчас Linux крутится на 96% всех серверов в мире, на каждом Android-телефоне, на борту МКС, в суперкомпьютерах, которые считают климат, ядерные реакции и структуру вселенной. Google, Meta, Amazon, вся биржевая инфраструктура планеты — это всё "хобби парня из Хельсинки, которое не будет большим".
Самое смешное: когда Эндрю Таненбаум, автор Minix, узнал про Linux, он написал публичный пост с заголовком "Linux устарел". Мол, монолитное ядро — это архитектурный позор, будущее за микроядрами. Таненбаум был профессором, автором учебников по ОС, умным мужиком. Линус был студентом с 386-м компьютером.
История рассудила однозначно. Minix сейчас знают только те, кто читал тот самый учебник. Linux знает весь мир.
Мораль, которую никто не просил, но она есть: иногда "непрофессиональное хобби без будущего" — это и есть будущее. А умные люди с правильными теориями остаются в сносках.
Подпишись на создателей: https://t.me/linuxexex
Хобби. Не будет большой. Не профессиональной.
Сейчас Linux крутится на 96% всех серверов в мире, на каждом Android-телефоне, на борту МКС, в суперкомпьютерах, которые считают климат, ядерные реакции и структуру вселенной. Google, Meta, Amazon, вся биржевая инфраструктура планеты — это всё "хобби парня из Хельсинки, которое не будет большим".
Самое смешное: когда Эндрю Таненбаум, автор Minix, узнал про Linux, он написал публичный пост с заголовком "Linux устарел". Мол, монолитное ядро — это архитектурный позор, будущее за микроядрами. Таненбаум был профессором, автором учебников по ОС, умным мужиком. Линус был студентом с 386-м компьютером.
История рассудила однозначно. Minix сейчас знают только те, кто читал тот самый учебник. Linux знает весь мир.
Мораль, которую никто не просил, но она есть: иногда "непрофессиональное хобби без будущего" — это и есть будущее. А умные люди с правильными теориями остаются в сносках.
Подпишись на создателей: https://t.me/linuxexex