лайфхак, который я использую каждый день, а вы, скорее всего, нет
если ты работаешь в терминале и до сих пор вручную переписываешь длинные команды из истории — ты тратишь своё время в мусорное ведро по одной минуте.
вот штука, которую знают немногие: Ctrl+R
это reverse search по истории bash/zsh. нажимаешь Ctrl+R, начинаешь вводить кусок команды — и терминал сам находит последнюю похожую из истории. не надо листать стрелками вверх двадцать раз, не надо помнить точный синтаксис.
набрал "docker run" — оно вытащило ту длинную команду с флагами, которую ты писал три дня назад. нажал Enter — готово.
хочешь следующее совпадение — жми Ctrl+R ещё раз. хочешь редактировать найденное — стрелка вправо или End, и команда встаёт в строку ввода.
работает в bash, zsh, и даже вfish если правильно настроен.
бонус для параноиков и перфекционистов: если хочешь, чтобы история была длиннее и не терялась между сессиями, добавь в.bashrc вот это
HISTSIZE=100000
HISTFILESIZE=200000
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
теперь твоя история не затирается при открытии нового терминала, дубли не засоряют выдачу, и Ctrl+R находит команды даже из прошлой недели.
простая хрень, которая реально сокращает время на рутину. пользуйтесь.
Подпишись на создателей: https://t.me/linuxexex
если ты работаешь в терминале и до сих пор вручную переписываешь длинные команды из истории — ты тратишь своё время в мусорное ведро по одной минуте.
вот штука, которую знают немногие: Ctrl+R
это reverse search по истории bash/zsh. нажимаешь Ctrl+R, начинаешь вводить кусок команды — и терминал сам находит последнюю похожую из истории. не надо листать стрелками вверх двадцать раз, не надо помнить точный синтаксис.
набрал "docker run" — оно вытащило ту длинную команду с флагами, которую ты писал три дня назад. нажал Enter — готово.
хочешь следующее совпадение — жми Ctrl+R ещё раз. хочешь редактировать найденное — стрелка вправо или End, и команда встаёт в строку ввода.
работает в bash, zsh, и даже вfish если правильно настроен.
бонус для параноиков и перфекционистов: если хочешь, чтобы история была длиннее и не терялась между сессиями, добавь в.bashrc вот это
HISTSIZE=100000
HISTFILESIZE=200000
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
теперь твоя история не затирается при открытии нового терминала, дубли не засоряют выдачу, и Ctrl+R находит команды даже из прошлой недели.
простая хрень, которая реально сокращает время на рутину. пользуйтесь.
Подпишись на создателей: https://t.me/linuxexex
CTRL+R все знают. Это база. А вот что реально мало кто использует — это ** в глобинге в bash и zsh.
По умолчанию в bash нужно включить его руками:
shopt -s globstar
И после этого конструкция ** начинает означать «любое количество вложенных директорий». То есть:
ls **/*.log
выдаст тебе все.log файлы рекурсивно по всему дереву. Без find, без xargs, без этого бесконечного танца с флагами.
В zsh это работает из коробки, без шопта.
Казалось бы, мелочь. Но когда ты в третий раз пишешь:
find. -name "*.conf" -exec grep -l "timeout" {} \;
и в четвёртый раз путаешься в этих скобках и слешах — вспоминаешь, что можно было просто:
grep -l "timeout" **/*.conf
Чище, быстрее, читается как человеческая речь, а не как заклинание из документации к sendmail.
Ещё один момент, который реально удивляет людей: ** работает не только в ls и grep, но и в for-циклах. Хочешь пройтись по всем Python-файлам в проекте и что-то с ними сделать — пожалуйста:
for f in **/*.py; do
echo "$f"
done
Никакого find -exec, никакого subshell, никакого головняка с пробелами в именах файлов.
Пробелы, кстати, отдельная история. Глобинг обрабатывает их корректно, если переменная в кавычках. А вот find -exec и обратные кавычки — это уже лотерея.
В общем, shopt -s globstar в.bashrc, и жизнь становится чуть менее похожей на ад.
Подпишись на создателей: https://t.me/linuxexex
По умолчанию в bash нужно включить его руками:
shopt -s globstar
И после этого конструкция ** начинает означать «любое количество вложенных директорий». То есть:
ls **/*.log
выдаст тебе все.log файлы рекурсивно по всему дереву. Без find, без xargs, без этого бесконечного танца с флагами.
В zsh это работает из коробки, без шопта.
Казалось бы, мелочь. Но когда ты в третий раз пишешь:
find. -name "*.conf" -exec grep -l "timeout" {} \;
и в четвёртый раз путаешься в этих скобках и слешах — вспоминаешь, что можно было просто:
grep -l "timeout" **/*.conf
Чище, быстрее, читается как человеческая речь, а не как заклинание из документации к sendmail.
Ещё один момент, который реально удивляет людей: ** работает не только в ls и grep, но и в for-циклах. Хочешь пройтись по всем Python-файлам в проекте и что-то с ними сделать — пожалуйста:
for f in **/*.py; do
echo "$f"
done
Никакого find -exec, никакого subshell, никакого головняка с пробелами в именах файлов.
Пробелы, кстати, отдельная история. Глобинг обрабатывает их корректно, если переменная в кавычках. А вот find -exec и обратные кавычки — это уже лотерея.
В общем, shopt -s globstar в.bashrc, и жизнь становится чуть менее похожей на ад.
Подпишись на создателей: https://t.me/linuxexex
Знаете, что вообще могло угробить Linux в зародыше?
В 1992 году Эндрю Таненбаум, профессор и автор учебной операционки MINIX, публично назвал Linux технологически отсталым и устаревшим ещё до того, как оно толком взлетело. Мол, монолитное ядро — это прошлый век, будущее за микроядрами, и вообще Линус Торвальдс написал фигню для одной архитектуры x86, которая протухнет через пять лет.
Этот срач вошёл в историю как дискуссия Tanenbaum-Torvalds и до сих пор цитируется в учебниках.
Линус не стал вежливо раскланиваться. Он ответил прямо в Usenet: да, ядро монолитное, и что с того. Потом добавил, что MINIX с её лицензией на тот момент была бесполезна для реального применения, а теории Таненбаума хороши для лекций, но не для работающего софта.
Таненбаум был прав насчёт архитектуры с академической точки зрения. Микроядра действительно чище по дизайну. Но Linux оказался прав с практической: монолитное ядро с правильно написанными модулями работало быстро, его легко было портировать, оно жрало меньше ресурсов на IPC и вокруг него сложилось сообщество, которое просто допилило всё руками.
Сегодня Linux крутится на большинстве серверов планеты, на вашем телефоне, на МКС, на суперкомпьютерах и в холодильниках умных домов. MINIX тихонько живёт в учебных аудиториях и, по иронии, внутри процессоров Intel как управляющая прошивка, о которой большинство пользователей вообще не знает.
А спор о микроядрах против монолитных до сих пор не закрыт. Просто пока что у монолитного ядра серверная стойка, а у микроядра — конспект с лекции.
Подпишись на создателей: https://t.me/linuxexex
В 1992 году Эндрю Таненбаум, профессор и автор учебной операционки MINIX, публично назвал Linux технологически отсталым и устаревшим ещё до того, как оно толком взлетело. Мол, монолитное ядро — это прошлый век, будущее за микроядрами, и вообще Линус Торвальдс написал фигню для одной архитектуры x86, которая протухнет через пять лет.
Этот срач вошёл в историю как дискуссия Tanenbaum-Torvalds и до сих пор цитируется в учебниках.
Линус не стал вежливо раскланиваться. Он ответил прямо в Usenet: да, ядро монолитное, и что с того. Потом добавил, что MINIX с её лицензией на тот момент была бесполезна для реального применения, а теории Таненбаума хороши для лекций, но не для работающего софта.
Таненбаум был прав насчёт архитектуры с академической точки зрения. Микроядра действительно чище по дизайну. Но Linux оказался прав с практической: монолитное ядро с правильно написанными модулями работало быстро, его легко было портировать, оно жрало меньше ресурсов на IPC и вокруг него сложилось сообщество, которое просто допилило всё руками.
Сегодня Linux крутится на большинстве серверов планеты, на вашем телефоне, на МКС, на суперкомпьютерах и в холодильниках умных домов. MINIX тихонько живёт в учебных аудиториях и, по иронии, внутри процессоров Intel как управляющая прошивка, о которой большинство пользователей вообще не знает.
А спор о микроядрах против монолитных до сих пор не закрыт. Просто пока что у монолитного ядра серверная стойка, а у микроядра — конспект с лекции.
Подпишись на создателей: https://t.me/linuxexex