watch — команда, о которой забывают, но зря
Большинство линуксоидов знают top, htop, tail -f. Но есть одна простая штука, которую почему-то игнорируют — команда watch.
Что она делает: запускает любую команду повторно через заданный интервал и показывает результат прямо в терминале. Живое обновление без скриптов и циклов.
Базовое использование:
watch df -h
Это будет каждые 2 секунды показывать состояние дисков. Никакого скрипта, никакого while true.
Полезные флаги:
-n — задать интервал в секундах
watch -n 5 free -m
обновляет каждые 5 секунд, смотрим память
-d — подсвечивает изменения между обновлениями
watch -d netstat -an
сразу видно, что поменялось в сетевых соединениях
-t — убирает шапку с временем и командой, если мешает
-e — останавливает выполнение, если команда вернула ошибку
Реальные сценарии где это реально спасает:
Следишь за размером лога в реальном времени:
watch -n 1 'ls -lh /var/log/syslog'
Мониторишь очередь задач:
watch -n 3 'ps aux | grep python'
Ждёшь когда файл появится в директории:
watch -n 2 'ls /tmp/ | grep backup'
Смотришь как меняется температура процессора:
watch -n 1 sensors
Проверяешь статус сервиса пока что-то деплоишь:
watch systemctl status nginx
Одна тонкость: watch запускает команду через sh -c, поэтому алиасы из вашего .bashrc там не работают. Если нужен алиас — передавай явно строкой или используй функцию.
Ещё момент — минимальный интервал 0.1 секунды. Можно делать почти real-time мониторинг без написания ни строчки кода.
watch есть в procps-ng, стоит практически везде из коробки. На macOS ставится через brew install watch.
Простая команда, но когда знаешь о ней — перестаёшь писать дурацкие циклы в bash ради банального мониторинга 🖥️
📍 Подпишись на создателей: https://t.me/linuxexex
Большинство линуксоидов знают top, htop, tail -f. Но есть одна простая штука, которую почему-то игнорируют — команда watch.
Что она делает: запускает любую команду повторно через заданный интервал и показывает результат прямо в терминале. Живое обновление без скриптов и циклов.
Базовое использование:
watch df -h
Это будет каждые 2 секунды показывать состояние дисков. Никакого скрипта, никакого while true.
Полезные флаги:
-n — задать интервал в секундах
watch -n 5 free -m
обновляет каждые 5 секунд, смотрим память
-d — подсвечивает изменения между обновлениями
watch -d netstat -an
сразу видно, что поменялось в сетевых соединениях
-t — убирает шапку с временем и командой, если мешает
-e — останавливает выполнение, если команда вернула ошибку
Реальные сценарии где это реально спасает:
Следишь за размером лога в реальном времени:
watch -n 1 'ls -lh /var/log/syslog'
Мониторишь очередь задач:
watch -n 3 'ps aux | grep python'
Ждёшь когда файл появится в директории:
watch -n 2 'ls /tmp/ | grep backup'
Смотришь как меняется температура процессора:
watch -n 1 sensors
Проверяешь статус сервиса пока что-то деплоишь:
watch systemctl status nginx
Одна тонкость: watch запускает команду через sh -c, поэтому алиасы из вашего .bashrc там не работают. Если нужен алиас — передавай явно строкой или используй функцию.
Ещё момент — минимальный интервал 0.1 секунды. Можно делать почти real-time мониторинг без написания ни строчки кода.
watch есть в procps-ng, стоит практически везде из коробки. На macOS ставится через brew install watch.
Простая команда, но когда знаешь о ней — перестаёшь писать дурацкие циклы в bash ради банального мониторинга 🖥️
📍 Подпишись на создателей: https://t.me/linuxexex
Лайфхак для терминала, который реально экономит время ⚡
Вы знаете про Ctrl+R — поиск по истории команд. Но большинство людей используют его неправильно: нажал, начал вводить, получил одну команду, вышел. Всё.
А теперь настоящий трюк.
Установите fzf — это fuzzy finder для командной строки. После установки он перехватывает Ctrl+R и превращает поиск по истории в интерактивный список с нечётким поиском.
Например, помните что запускали что-то с docker compose и каким-то длинным флагом — но не помните точно что. Жмёте Ctrl+R, вводите "dock comp", и fzf мгновенно показывает все подходящие команды из истории. Стрелками выбираете нужную, Enter — и она уже в строке ввода.
Установка на Ubuntu/Debian:
sudo apt install fzf
На macOS:
brew install fzf
После установки нужно подключить интеграцию с шеллом. Для bash и zsh:
$(brew --prefix)/opt/fzf/install
или на Linux:
/usr/share/doc/fzf/examples/key-bindings.bash
Добавьте source этого файла в .bashrc или .zshrc.
Но это ещё не всё. fzf работает не только с историей команд. Нажмите Ctrl+T в терминале — получите интерактивный поиск файлов прямо во время набора команды. Пишете vim, жмёте Ctrl+T, находите файл — путь вставляется автоматически.
А команда **cd + Alt+C** открывает интерактивный выбор директории для перехода.
Ещё один момент: по умолчанию история bash хранит 500 команд. Это смешно. Добавьте в .bashrc:
HISTSIZE=100000
HISTFILESIZE=200000
HISTCONTROL=ignoredups:erasedups
Теперь история не будет дублировать одинаковые команды и будет хранить реально много записей. В связке с fzf это становится вашей персональной базой знаний по командам, которые вы уже запускали.
Звучит как мелочь, но когда каждый день работаешь в терминале — это десятки минут, которые перестают уходить на вспоминание и перепечатку. 🖥️
📍 Подпишись на создателей: https://t.me/linuxexex
Вы знаете про Ctrl+R — поиск по истории команд. Но большинство людей используют его неправильно: нажал, начал вводить, получил одну команду, вышел. Всё.
А теперь настоящий трюк.
Установите fzf — это fuzzy finder для командной строки. После установки он перехватывает Ctrl+R и превращает поиск по истории в интерактивный список с нечётким поиском.
Например, помните что запускали что-то с docker compose и каким-то длинным флагом — но не помните точно что. Жмёте Ctrl+R, вводите "dock comp", и fzf мгновенно показывает все подходящие команды из истории. Стрелками выбираете нужную, Enter — и она уже в строке ввода.
Установка на Ubuntu/Debian:
sudo apt install fzf
На macOS:
brew install fzf
После установки нужно подключить интеграцию с шеллом. Для bash и zsh:
$(brew --prefix)/opt/fzf/install
или на Linux:
/usr/share/doc/fzf/examples/key-bindings.bash
Добавьте source этого файла в .bashrc или .zshrc.
Но это ещё не всё. fzf работает не только с историей команд. Нажмите Ctrl+T в терминале — получите интерактивный поиск файлов прямо во время набора команды. Пишете vim, жмёте Ctrl+T, находите файл — путь вставляется автоматически.
А команда **cd + Alt+C** открывает интерактивный выбор директории для перехода.
Ещё один момент: по умолчанию история bash хранит 500 команд. Это смешно. Добавьте в .bashrc:
HISTSIZE=100000
HISTFILESIZE=200000
HISTCONTROL=ignoredups:erasedups
Теперь история не будет дублировать одинаковые команды и будет хранить реально много записей. В связке с fzf это становится вашей персональной базой знаний по командам, которые вы уже запускали.
Звучит как мелочь, но когда каждый день работаешь в терминале — это десятки минут, которые перестают уходить на вспоминание и перепечатку. 🖥️
📍 Подпишись на создателей: https://t.me/linuxexex
Вот фишка, которую я сам узнал позже, чем следовало бы.
В bash и zsh есть встроенная замена подстрок прямо в переменных — без sed, без awk, без лишних процессов.
Допустим, у тебя есть строка:
file="hello_world_2024.log"
Хочешь заменить первое вхождение подстроки:
echo "${file/world/linux}"
→ hello_linux_2024.log
Хочешь заменить все вхождения — добавляешь второй слэш:
text="aaa bbb aaa"
echo "${text//aaa/xxx}"
→ xxx bbb xxx
Это работает в bash и zsh без вызова внешних утилит. Быстро, чисто, и никакого fork().
Но это ещё не всё.
Можно удалить подстроку, просто не указывая замену:
echo "${file/2024/}"
→ hello_world_.log
Можно работать с началом и концом строки. Одна решётка — удалить минимальный префикс, две — максимальный:
path="/usr/local/bin/bash"
echo "${path#*/}" → usr/local/bin/bash
echo "${path##*/}" → bash
Процент работает так же, но с конца:
echo "${path%/*}" → /usr/local/bin
echo "${path%%/*}" → (пусто, срезало всё)
Это активно используют в скриптах для работы с путями и расширениями файлов — без dirname и basename:
file="archive.tar.gz"
echo "${file%%.*}" → archive
echo "${file##*.}" → gz
Ещё один трюк — изменение регистра (zsh и bash 4+):
str="hello world"
echo "${str^^}" → HELLO WORLD
echo "${str,,}" → hello world
А вот для первой буквы:
echo "${str^}" → Hello world
Это всё POSIX-расширения parameter expansion — встроены в сам шелл, документированы в man bash в разделе Parameter Expansion. Большинство людей знают про ${var:-default} и на этом останавливаются.
Почему это важно? В скриптах каждый вызов sed или awk — это отдельный процесс. Если ты в цикле обрабатываешь тысячи строк, разница в скорости будет ощутимой. Встроенные операции работают в памяти без форка.
Сохрани себе, пригодится при следующем скрипте 🐚
📍 Подпишись на создателей: https://t.me/linuxexex
В bash и zsh есть встроенная замена подстрок прямо в переменных — без sed, без awk, без лишних процессов.
Допустим, у тебя есть строка:
file="hello_world_2024.log"
Хочешь заменить первое вхождение подстроки:
echo "${file/world/linux}"
→ hello_linux_2024.log
Хочешь заменить все вхождения — добавляешь второй слэш:
text="aaa bbb aaa"
echo "${text//aaa/xxx}"
→ xxx bbb xxx
Это работает в bash и zsh без вызова внешних утилит. Быстро, чисто, и никакого fork().
Но это ещё не всё.
Можно удалить подстроку, просто не указывая замену:
echo "${file/2024/}"
→ hello_world_.log
Можно работать с началом и концом строки. Одна решётка — удалить минимальный префикс, две — максимальный:
path="/usr/local/bin/bash"
echo "${path#*/}" → usr/local/bin/bash
echo "${path##*/}" → bash
Процент работает так же, но с конца:
echo "${path%/*}" → /usr/local/bin
echo "${path%%/*}" → (пусто, срезало всё)
Это активно используют в скриптах для работы с путями и расширениями файлов — без dirname и basename:
file="archive.tar.gz"
echo "${file%%.*}" → archive
echo "${file##*.}" → gz
Ещё один трюк — изменение регистра (zsh и bash 4+):
str="hello world"
echo "${str^^}" → HELLO WORLD
echo "${str,,}" → hello world
А вот для первой буквы:
echo "${str^}" → Hello world
Это всё POSIX-расширения parameter expansion — встроены в сам шелл, документированы в man bash в разделе Parameter Expansion. Большинство людей знают про ${var:-default} и на этом останавливаются.
Почему это важно? В скриптах каждый вызов sed или awk — это отдельный процесс. Если ты в цикле обрабатываешь тысячи строк, разница в скорости будет ощутимой. Встроенные операции работают в памяти без форка.
Сохрани себе, пригодится при следующем скрипте 🐚
📍 Подпишись на создателей: https://t.me/linuxexex
Ставим веб-сервер на пяти дистрибутивах — смотрим, кто удобнее
Задача простая: поднять nginx, добавить его в автозапуск и проверить статус. Казалось бы, одно и то же везде. Но дьявол в деталях.
Ubuntu 24.04
apt install nginx, systemctl enable --now nginx — и всё. Nginx уже в репозитории свежий, firewall не мешает (ufw по умолчанию выключен), браузер открывает страницу сразу. Для новичка — идеально. Для сервера — тоже норм, пока не нужен тонкий контроль.
Debian 12
Почти то же самое, но nginx в stable чуть старше. Зато система минималистичная: ставишь ровно то, что просил, ничего лишнего. AppArmor присутствует, но не мешает базовой установке. Предсказуемость и стабильность — главные козыри.
Fedora 40
dnf install nginx, потом systemctl enable --now nginx — и тут сюрприз. firewalld работает по умолчанию и 80 порт закрыт. Нужно явно открыть: firewall-cmd --permanent --add-service=http && firewall-cmd --reload. Новичок споткнётся, опытный оценит, что безопасность из коробки серьёзнее. Nginx здесь самый свежий из всех пяти.
AlmaLinux 9
Это RHEL-клон для тех, кто хочет «как на продакшене в энтерпрайзе». nginx надо сначала включить модуль или добавить репозиторий, потому что в базовом реп он постарше. SELinux включён и работает — если положить конфиг в нестандартное место, nginx тихо упадёт и будет смотреть на тебя с укором. Надо разбираться с контекстами. Зато потом понимаешь, почему крупные компании это любят.
Arch Linux
pacman -S nginx, systemctl enable --now nginx — пакет свежайший. Никакого лишнего слоя абстракции. Но Arch не держит тебя за руку: нет автонастройки firewall, нет подсказок, документация — это вики, и она реально хорошая. Зато полный контроль над каждым шагом. Если хочешь понять, как оно работает изнутри — лучший вариант для обучения.
Итого по ощущениям
Быстрее всего взлетело на Ubuntu — ноль сюрпризов.
Самый свежий пакет — Arch и Fedora.
Самый высокий порог входа из-за безопасности — AlmaLinux с SELinux.
Самый предсказуемый и тихий — Debian.
Лучший для понимания происходящего — Arch.
Выбор дистрибутива — это во многом выбор того, сколько системы ты хочешь видеть. Ubuntu прячет детали, Arch показывает всё. Остальные где-то посередине, каждый со своим акцентом.
Под какие задачи ты выбираешь дистрибутив? 👇
📍 Подпишись на создателей: https://t.me/linuxexex
Задача простая: поднять nginx, добавить его в автозапуск и проверить статус. Казалось бы, одно и то же везде. Но дьявол в деталях.
Ubuntu 24.04
apt install nginx, systemctl enable --now nginx — и всё. Nginx уже в репозитории свежий, firewall не мешает (ufw по умолчанию выключен), браузер открывает страницу сразу. Для новичка — идеально. Для сервера — тоже норм, пока не нужен тонкий контроль.
Debian 12
Почти то же самое, но nginx в stable чуть старше. Зато система минималистичная: ставишь ровно то, что просил, ничего лишнего. AppArmor присутствует, но не мешает базовой установке. Предсказуемость и стабильность — главные козыри.
Fedora 40
dnf install nginx, потом systemctl enable --now nginx — и тут сюрприз. firewalld работает по умолчанию и 80 порт закрыт. Нужно явно открыть: firewall-cmd --permanent --add-service=http && firewall-cmd --reload. Новичок споткнётся, опытный оценит, что безопасность из коробки серьёзнее. Nginx здесь самый свежий из всех пяти.
AlmaLinux 9
Это RHEL-клон для тех, кто хочет «как на продакшене в энтерпрайзе». nginx надо сначала включить модуль или добавить репозиторий, потому что в базовом реп он постарше. SELinux включён и работает — если положить конфиг в нестандартное место, nginx тихо упадёт и будет смотреть на тебя с укором. Надо разбираться с контекстами. Зато потом понимаешь, почему крупные компании это любят.
Arch Linux
pacman -S nginx, systemctl enable --now nginx — пакет свежайший. Никакого лишнего слоя абстракции. Но Arch не держит тебя за руку: нет автонастройки firewall, нет подсказок, документация — это вики, и она реально хорошая. Зато полный контроль над каждым шагом. Если хочешь понять, как оно работает изнутри — лучший вариант для обучения.
Итого по ощущениям
Быстрее всего взлетело на Ubuntu — ноль сюрпризов.
Самый свежий пакет — Arch и Fedora.
Самый высокий порог входа из-за безопасности — AlmaLinux с SELinux.
Самый предсказуемый и тихий — Debian.
Лучший для понимания происходящего — Arch.
Выбор дистрибутива — это во многом выбор того, сколько системы ты хочешь видеть. Ubuntu прячет детали, Arch показывает всё. Остальные где-то посередине, каждый со своим акцентом.
Под какие задачи ты выбираешь дистрибутив? 👇
📍 Подпишись на создателей: https://t.me/linuxexex
📰 Хронические финансовые проблемы связаны с ускоренным старением мозга
Новое исследование показало: люди, которые на протяжении длительного времени испытывали финансовые трудности или стабильно низкий доход в молодом и среднем возрасте, к 53 годам показывали худшие результаты в когнитивных тестах.
Иными словами, постоянная нехватка денег — это не только стресс здесь и сейчас. Это удар по мозгу в долгосрочной перспективе. Причём важна именно хроничность: не разовые финансовые трудности, а затяжные, годами тянущиеся проблемы с деньгами.
Учёные разделяют два фактора: объективно низкий доход и субъективное ощущение финансовой нестабильности. Оба оказались связаны с ухудшением когнитивных функций — памяти, скорости мышления, способности концентрироваться.
Механизм, скорее всего, в хроническом стрессе: постоянное беспокойство о деньгах держит организм в состоянии повышенной тревоги, повышает уровень кортизола, нарушает сон и в итоге буквально изнашивает мозг быстрее, чем это происходит у людей без финансового давления.
Источник (r/science): https://www.reddit.com/r/science/comments/1v72m2a/persistent_money_struggles_linked_to_faster_brain/
📍 Подпишись на создателей: https://t.me/linuxexex
Новое исследование показало: люди, которые на протяжении длительного времени испытывали финансовые трудности или стабильно низкий доход в молодом и среднем возрасте, к 53 годам показывали худшие результаты в когнитивных тестах.
Иными словами, постоянная нехватка денег — это не только стресс здесь и сейчас. Это удар по мозгу в долгосрочной перспективе. Причём важна именно хроничность: не разовые финансовые трудности, а затяжные, годами тянущиеся проблемы с деньгами.
Учёные разделяют два фактора: объективно низкий доход и субъективное ощущение финансовой нестабильности. Оба оказались связаны с ухудшением когнитивных функций — памяти, скорости мышления, способности концентрироваться.
Механизм, скорее всего, в хроническом стрессе: постоянное беспокойство о деньгах держит организм в состоянии повышенной тревоги, повышает уровень кортизола, нарушает сон и в итоге буквально изнашивает мозг быстрее, чем это происходит у людей без финансового давления.
Источник (r/science): https://www.reddit.com/r/science/comments/1v72m2a/persistent_money_struggles_linked_to_faster_brain/
📍 Подпишись на создателей: https://t.me/linuxexex
Reddit
From the science community on Reddit: Persistent money struggles linked to faster brain ageing. The study found that people who…
Explore this post and more from the science community
tee — команда, о которой забывают, но она реально выручает
Все знают про перенаправление вывода через >. Записал в файл — и дальше работаешь. Но что если нужно одновременно видеть вывод в терминале И писать его в файл? Вот тут большинство начинают городить костыли.
А можно просто использовать tee.
Базовый пример:
ping google.com | tee ping_log.txt
Всё, что пишет ping — идёт и на экран, и в файл одновременно. Никакой магии, просто удобно.
Дописать в файл, не затирая старое:
some_command | tee -a log.txt
Флаг -a работает как >> — дописывает в конец.
Писать сразу в несколько файлов:
echo "deploy started" | tee deploy.log backup.log
Оба файла получат одинаковое содержимое. Можно передать сколько угодно имён.
Запись в защищённый файл через sudo:
Вот это реально полезная штука. Классическая ошибка новичка:
sudo echo "something" > /etc/protected_file
Это не работает — перенаправление выполняется от имени текущего пользователя, а не root. А вот так работает:
echo "something" | sudo tee /etc/protected_file
Если не хочешь видеть вывод на экране при этом — добавь > /dev/null в конец.
Ещё один сценарий — логирование сборок и деплоев. Запускаешь скрипт, хочешь видеть прогресс и одновременно сохранять лог:
./build.sh | tee build_$(date +%F).log
После сборки у тебя готовый файл с датой в названии и ты всё видел в реальном времени.
tee встроена в GNU coreutils, есть везде — Linux, macOS, BSD. Маленькая, без сюрпризов, делает ровно то что говорит.
Одна из тех команд, которые узнаёшь — и потом удивляешься, как раньше без неё обходился.
📍 Подпишись на создателей: https://t.me/linuxexex
Все знают про перенаправление вывода через >. Записал в файл — и дальше работаешь. Но что если нужно одновременно видеть вывод в терминале И писать его в файл? Вот тут большинство начинают городить костыли.
А можно просто использовать tee.
Базовый пример:
ping google.com | tee ping_log.txt
Всё, что пишет ping — идёт и на экран, и в файл одновременно. Никакой магии, просто удобно.
Дописать в файл, не затирая старое:
some_command | tee -a log.txt
Флаг -a работает как >> — дописывает в конец.
Писать сразу в несколько файлов:
echo "deploy started" | tee deploy.log backup.log
Оба файла получат одинаковое содержимое. Можно передать сколько угодно имён.
Запись в защищённый файл через sudo:
Вот это реально полезная штука. Классическая ошибка новичка:
sudo echo "something" > /etc/protected_file
Это не работает — перенаправление выполняется от имени текущего пользователя, а не root. А вот так работает:
echo "something" | sudo tee /etc/protected_file
Если не хочешь видеть вывод на экране при этом — добавь > /dev/null в конец.
Ещё один сценарий — логирование сборок и деплоев. Запускаешь скрипт, хочешь видеть прогресс и одновременно сохранять лог:
./build.sh | tee build_$(date +%F).log
После сборки у тебя готовый файл с датой в названии и ты всё видел в реальном времени.
tee встроена в GNU coreutils, есть везде — Linux, macOS, BSD. Маленькая, без сюрпризов, делает ровно то что говорит.
Одна из тех команд, которые узнаёшь — и потом удивляешься, как раньше без неё обходился.
📍 Подпишись на создателей: https://t.me/linuxexex
Как работает планировщик процессов в Linux — и почему это вообще важно
Твой ноутбук запускает браузер, музыку, терминал и ещё пятьдесят фоновых процессов одновременно. Но ядро у тебя одно, ядер процессора — допустим, четыре. Кто решает, кому из тысячи процессов дать время на выполнение прямо сейчас? Планировщик.
Суть простая: процессор может делать только одно дело в конкретный момент времени. Задача планировщика — нарезать это время на крошечные куски и раздавать их процессам по очереди, так быстро, что тебе кажется, будто всё работает параллельно. Это называется вытесняющая многозадачность.
Как он выбирает, кому дать CPU?
В Linux уже давно используется CFS — Completely Fair Scheduler. Название говорящее: он пытается быть честным. Идея в том, чтобы каждый процесс получил примерно одинаковое реальное время процессора с учётом своего приоритета.
CFS не работает с очередями в классическом смысле. Он хранит все запущенные задачи в красно-чёрном дереве, где ключ — виртуальное время выполнения процесса (vruntime). Чем меньше vruntime, тем меньше процесс успел поработать, значит он стоит ближе к левому краю дерева. Планировщик всегда берёт крайний левый узел — того, кто ждал дольше всех.
Когда процесс поработал своё время (таймслот), его vruntime увеличивается, он уходит правее в дереве, и на смену приходит следующий претендент. Всё это происходит за микросекунды.
А приоритеты?
Приоритет в Linux называется nice-значение, от -20 (максимум наглости) до 19 (максимально уступчивый). Чем ниже nice, тем медленнее растёт vruntime у процесса — то есть он чаще оказывается крайним слева и получает больше CPU. Не грубой силой, а математикой.
Есть ещё отдельный класс задач реального времени — SCHED_FIFO и SCHED_RR. Они вообще живут вне CFS и имеют абсолютный приоритет. Используются для аудио, промышленного управления, всего, где задержка критична.
Что происходит при переключении контекста?
Когда планировщик решает сменить задачу, ядро сохраняет состояние текущего процесса: регистры, указатель стека, счётчик команд — всё это в структуре task_struct. Потом загружает сохранённое состояние следующего процесса и передаёт ему управление. Для тебя это невидимо, но каждое такое переключение стоит времени — десятки микросекунд. Поэтому слишком частые переключения вредны, планировщик старается давать разумный таймслот.
Кстати, с появлением многоядерных систем задача усложнилась: нужно не только распределять время, но и решать, на каком ядре запускать процесс. Лучше на том, где он работал в прошлый раз — данные ещё могут быть в кэше (cache affinity). Планировщик учитывает и это.
В ядре 6.6 появился EEVDF — новый алгоритм на замену CFS, ещё более честный и с лучшей работой с латентностью. Эволюция не останавливается.
Итог: планировщик — это сердце многозадачности. Ты никогда не думаешь о нём, пока он работает правильно. И это, наверное, лучший комплимент для системного кода 🐧
📍 Подпишись на создателей: https://t.me/linuxexex
Твой ноутбук запускает браузер, музыку, терминал и ещё пятьдесят фоновых процессов одновременно. Но ядро у тебя одно, ядер процессора — допустим, четыре. Кто решает, кому из тысячи процессов дать время на выполнение прямо сейчас? Планировщик.
Суть простая: процессор может делать только одно дело в конкретный момент времени. Задача планировщика — нарезать это время на крошечные куски и раздавать их процессам по очереди, так быстро, что тебе кажется, будто всё работает параллельно. Это называется вытесняющая многозадачность.
Как он выбирает, кому дать CPU?
В Linux уже давно используется CFS — Completely Fair Scheduler. Название говорящее: он пытается быть честным. Идея в том, чтобы каждый процесс получил примерно одинаковое реальное время процессора с учётом своего приоритета.
CFS не работает с очередями в классическом смысле. Он хранит все запущенные задачи в красно-чёрном дереве, где ключ — виртуальное время выполнения процесса (vruntime). Чем меньше vruntime, тем меньше процесс успел поработать, значит он стоит ближе к левому краю дерева. Планировщик всегда берёт крайний левый узел — того, кто ждал дольше всех.
Когда процесс поработал своё время (таймслот), его vruntime увеличивается, он уходит правее в дереве, и на смену приходит следующий претендент. Всё это происходит за микросекунды.
А приоритеты?
Приоритет в Linux называется nice-значение, от -20 (максимум наглости) до 19 (максимально уступчивый). Чем ниже nice, тем медленнее растёт vruntime у процесса — то есть он чаще оказывается крайним слева и получает больше CPU. Не грубой силой, а математикой.
Есть ещё отдельный класс задач реального времени — SCHED_FIFO и SCHED_RR. Они вообще живут вне CFS и имеют абсолютный приоритет. Используются для аудио, промышленного управления, всего, где задержка критична.
Что происходит при переключении контекста?
Когда планировщик решает сменить задачу, ядро сохраняет состояние текущего процесса: регистры, указатель стека, счётчик команд — всё это в структуре task_struct. Потом загружает сохранённое состояние следующего процесса и передаёт ему управление. Для тебя это невидимо, но каждое такое переключение стоит времени — десятки микросекунд. Поэтому слишком частые переключения вредны, планировщик старается давать разумный таймслот.
Кстати, с появлением многоядерных систем задача усложнилась: нужно не только распределять время, но и решать, на каком ядре запускать процесс. Лучше на том, где он работал в прошлый раз — данные ещё могут быть в кэше (cache affinity). Планировщик учитывает и это.
В ядре 6.6 появился EEVDF — новый алгоритм на замену CFS, ещё более честный и с лучшей работой с латентностью. Эволюция не останавливается.
Итог: планировщик — это сердце многозадачности. Ты никогда не думаешь о нём, пока он работает правильно. И это, наверное, лучший комплимент для системного кода 🐧
📍 Подпишись на создателей: https://t.me/linuxexex
🧩 Как systemd запускает сервисы простыми словами
systemd читает unit-файлы, понимает зависимости и запускает сервисы в нужном порядке.
Например, если приложению нужна сеть, unit может указать:
After=network-online.target
Главные команды:
systemctl status nginx — состояние сервиса
systemctl restart nginx — перезапуск
journalctl -u nginx -f — живые логи
systemd не просто «запускает демоны». Он ещё следит за процессами, логирует, рестартит при падении и помогает понять, почему сервис не поднялся.
📍 Подпишись на создателей: https://t.me/linuxexex
systemd читает unit-файлы, понимает зависимости и запускает сервисы в нужном порядке.
Например, если приложению нужна сеть, unit может указать:
After=network-online.target
Главные команды:
systemctl status nginx — состояние сервиса
systemctl restart nginx — перезапуск
journalctl -u nginx -f — живые логи
systemd не просто «запускает демоны». Он ещё следит за процессами, логирует, рестартит при падении и помогает понять, почему сервис не поднялся.
📍 Подпишись на создателей: https://t.me/linuxexex
🚀 Bash/Zsh: быстро заменить ошибку в прошлой команде
Опечатался в предыдущей команде? Не обязательно переписывать всё заново.
Можно сделать так:
^stauts^status
Shell повторит прошлую команду, заменив первый фрагмент на второй.
Пример:
git stauts
^stauts^status
Мелочь, но в терминале такие мелочи складываются в скорость.
📍 Подпишись на создателей: https://t.me/linuxexex
Опечатался в предыдущей команде? Не обязательно переписывать всё заново.
Можно сделать так:
^stauts^status
Shell повторит прошлую команду, заменив первый фрагмент на второй.
Пример:
git stauts
^stauts^status
Мелочь, но в терминале такие мелочи складываются в скорость.
📍 Подпишись на создателей: https://t.me/linuxexex
tee — труба с раздвоением
Все знают пайпы в Linux. Гонишь вывод одной команды в другую — красота. Но иногда хочется одновременно и в файл записать, и дальше по трубе пустить. Вот тут и приходит tee.
Название — от буквы T, форма которой буквально описывает что происходит: поток данных идёт прямо и одновременно ответвляется в сторону.
Простой пример:
ls -la | tee output.txt | grep ".sh"
Что произошло: вывод ls записался в output.txt И при этом ушёл дальше в grep. Без tee пришлось бы делать два отдельных вызова или городить костыли.
Несколько полезных флагов:
-a (append) — не перезаписывает файл, а дописывает в конец. Незаменимо для логов.
./deploy.sh | tee -a deploy.log | grep "ERROR"
Следишь за ошибками в реальном времени и лог копится — удобно.
Запись в несколько файлов сразу — просто перечисляешь их:
echo "привет" | tee file1.txt file2.txt file3.txt
Все три файла получат одинаковое содержимое.
Хитрый трюк с sudo — когда надо записать в системный файл, но редиректом это не выйдет:
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.conf
Классическая ошибка новичков — написать sudo echo ... > /etc/sysctl.conf. sudo применяется к echo, а редирект > выполняется от текущего пользователя. Получаешь "Permission denied". С tee — работает, потому что именно tee запускается с правами root и пишет в файл.
Можно подавить вывод в терминал, если нужна только запись в файл, и дальнейшая обработка через пайп — перенаправляешь в /dev/null:
command | tee output.txt > /dev/null
Не самый частый сценарий, но бывает нужен в скриптах.
tee есть везде — Linux, macOS, BSD. Входит в GNU Coreutils, так что никаких установок не нужно. Одна из тех команд, про которую не думаешь неделями, а потом однажды вспоминаешь — и она решает задачу за три секунды.
linux.exe
📍 Подпишись на создателей: https://t.me/linuxexex
Все знают пайпы в Linux. Гонишь вывод одной команды в другую — красота. Но иногда хочется одновременно и в файл записать, и дальше по трубе пустить. Вот тут и приходит tee.
Название — от буквы T, форма которой буквально описывает что происходит: поток данных идёт прямо и одновременно ответвляется в сторону.
Простой пример:
ls -la | tee output.txt | grep ".sh"
Что произошло: вывод ls записался в output.txt И при этом ушёл дальше в grep. Без tee пришлось бы делать два отдельных вызова или городить костыли.
Несколько полезных флагов:
-a (append) — не перезаписывает файл, а дописывает в конец. Незаменимо для логов.
./deploy.sh | tee -a deploy.log | grep "ERROR"
Следишь за ошибками в реальном времени и лог копится — удобно.
Запись в несколько файлов сразу — просто перечисляешь их:
echo "привет" | tee file1.txt file2.txt file3.txt
Все три файла получат одинаковое содержимое.
Хитрый трюк с sudo — когда надо записать в системный файл, но редиректом это не выйдет:
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.conf
Классическая ошибка новичков — написать sudo echo ... > /etc/sysctl.conf. sudo применяется к echo, а редирект > выполняется от текущего пользователя. Получаешь "Permission denied". С tee — работает, потому что именно tee запускается с правами root и пишет в файл.
Можно подавить вывод в терминал, если нужна только запись в файл, и дальнейшая обработка через пайп — перенаправляешь в /dev/null:
command | tee output.txt > /dev/null
Не самый частый сценарий, но бывает нужен в скриптах.
tee есть везде — Linux, macOS, BSD. Входит в GNU Coreutils, так что никаких установок не нужно. Одна из тех команд, про которую не думаешь неделями, а потом однажды вспоминаешь — и она решает задачу за три секунды.
linux.exe
📍 Подпишись на создателей: https://t.me/linuxexex
📰 Мой SpaceX останется «GaySex»
Всё. Больше добавить нечего.
Источник (4chan /biz/): https://boards.4chan.org/biz/thread/62525448
📍 Подпишись на создателей: https://t.me/linuxexex
Всё. Больше добавить нечего.
Источник (4chan /biz/): https://boards.4chan.org/biz/thread/62525448
📍 Подпишись на создателей: https://t.me/linuxexex
boards.4chan.org
/biz/ - My spacex stays gaysex! - Business & Finance - 4chan
My spacex stays gaysex! - "/biz/ - Business & Finance" is 4chan's imageboard for the discussion of business and finance, and cryptocurrencies such as Bitcoin and Dogecoin.
Один совет по безопасности, который реально стоит внедрить
Большинство линуксоидов настраивают систему один раз и потом годами не трогают. А между тем есть одна штука, которую легко забыть и о которой потом горько жалеют — это аудит SUID/SGID-файлов.
Что это и зачем?
SUID-бит позволяет запускать файл с правами владельца (обычно root), даже если ты обычный пользователь. Это нужно для таких команд как passwd или sudo. Но если злоумышленник подбросит или подменит хотя бы один такой файл — он получает повышение привилегий. Тихо и незаметно.
Как проверить систему прямо сейчас:
find / -perm /4000 -o -perm /2000 2>/dev/null
Эта команда выведет все файлы с SUID или SGID-битом на всей системе. Пробегись глазами по списку. Видишь что-то незнакомое или подозрительное — это повод разбираться.
Что дальше?
Зафиксируй эталонный список сразу после чистой установки или настройки системы. Сохрани его в файл:
find / -perm /4000 -o -perm /2000 2>/dev/null | sort > suid_baseline.txt
И периодически сравнивай с текущим состоянием:
find / -perm /4000 -o -perm /2000 2>/dev/null | sort | diff suid_baseline.txt -
Если в выводе появляются новые строки — кто-то или что-то добавило новый файл с повышенными привилегиями. Это уже сигнал тревоги.
Для автоматизации можно повесить такую проверку в cron и отправлять результат на почту или в бот — тогда ты узнаешь об изменениях раньше, чем они станут проблемой.
Маленький лайфхак: если хочешь убрать SUID-бит с конкретного файла, которому он не нужен — это делается так:
chmod u-s /путь/к/файлу
Только не трогай системные утилиты без понимания последствий. passwd без SUID превратится в тыкву.
Безопасность — это не разовая акция, это привычка проверять. 🔒
📍 Подпишись на создателей: https://t.me/linuxexex
Большинство линуксоидов настраивают систему один раз и потом годами не трогают. А между тем есть одна штука, которую легко забыть и о которой потом горько жалеют — это аудит SUID/SGID-файлов.
Что это и зачем?
SUID-бит позволяет запускать файл с правами владельца (обычно root), даже если ты обычный пользователь. Это нужно для таких команд как passwd или sudo. Но если злоумышленник подбросит или подменит хотя бы один такой файл — он получает повышение привилегий. Тихо и незаметно.
Как проверить систему прямо сейчас:
find / -perm /4000 -o -perm /2000 2>/dev/null
Эта команда выведет все файлы с SUID или SGID-битом на всей системе. Пробегись глазами по списку. Видишь что-то незнакомое или подозрительное — это повод разбираться.
Что дальше?
Зафиксируй эталонный список сразу после чистой установки или настройки системы. Сохрани его в файл:
find / -perm /4000 -o -perm /2000 2>/dev/null | sort > suid_baseline.txt
И периодически сравнивай с текущим состоянием:
find / -perm /4000 -o -perm /2000 2>/dev/null | sort | diff suid_baseline.txt -
Если в выводе появляются новые строки — кто-то или что-то добавило новый файл с повышенными привилегиями. Это уже сигнал тревоги.
Для автоматизации можно повесить такую проверку в cron и отправлять результат на почту или в бот — тогда ты узнаешь об изменениях раньше, чем они станут проблемой.
Маленький лайфхак: если хочешь убрать SUID-бит с конкретного файла, которому он не нужен — это делается так:
chmod u-s /путь/к/файлу
Только не трогай системные утилиты без понимания последствий. passwd без SUID превратится в тыкву.
Безопасность — это не разовая акция, это привычка проверять. 🔒
📍 Подпишись на создателей: https://t.me/linuxexex
Мало кто знает про CDPATH — и зря.
Это переменная окружения в bash и zsh, которая работает как PATH, только для команды cd. Объясняю на пальцах.
Допустим, у тебя есть куча проектов в ~/projects, и ты постоянно делаешь:
cd ~/projects/myapp
cd ~/projects/backend
cd ~/projects/frontend
Надоедает. Добавляешь в .bashrc или .zshrc одну строчку:
export CDPATH=.:~:~/projects
И теперь из любой директории пишешь просто:
cd myapp
cd backend
cd frontend
Шелл сам найдёт нужную папку, пробежавшись по путям в CDPATH слева направо. Если нашёл — переходит и печатает полный путь, чтобы ты не потерялся. Точка в начале означает "сначала смотри в текущей директории" — это важно, иначе поведение cd станет неожиданным.
Можно добавить несколько корневых папок через двоеточие. Например, если работаешь ещё и с конфигами:
export CDPATH=.:~:~/projects:~/work/configs
Zsh дружит с этим ещё приятнее — автодополнение по Tab учитывает CDPATH и подсказывает папки из всех указанных мест. Bash тоже умеет, но чуть хуже из коробки.
Маленький нюанс: если в двух папках из CDPATH есть одноимённые директории — победит та, чей родитель стоит левее в списке. Поэтому порядок важен.
Простая штука, настраивается за 30 секунд, а экономит кучу нажатий каждый день. Такие мелочи и делают работу в терминале приятной 🙂
📍 Подпишись на создателей: https://t.me/linuxexex
Это переменная окружения в bash и zsh, которая работает как PATH, только для команды cd. Объясняю на пальцах.
Допустим, у тебя есть куча проектов в ~/projects, и ты постоянно делаешь:
cd ~/projects/myapp
cd ~/projects/backend
cd ~/projects/frontend
Надоедает. Добавляешь в .bashrc или .zshrc одну строчку:
export CDPATH=.:~:~/projects
И теперь из любой директории пишешь просто:
cd myapp
cd backend
cd frontend
Шелл сам найдёт нужную папку, пробежавшись по путям в CDPATH слева направо. Если нашёл — переходит и печатает полный путь, чтобы ты не потерялся. Точка в начале означает "сначала смотри в текущей директории" — это важно, иначе поведение cd станет неожиданным.
Можно добавить несколько корневых папок через двоеточие. Например, если работаешь ещё и с конфигами:
export CDPATH=.:~:~/projects:~/work/configs
Zsh дружит с этим ещё приятнее — автодополнение по Tab учитывает CDPATH и подсказывает папки из всех указанных мест. Bash тоже умеет, но чуть хуже из коробки.
Маленький нюанс: если в двух папках из CDPATH есть одноимённые директории — победит та, чей родитель стоит левее в списке. Поэтому порядок важен.
Простая штука, настраивается за 30 секунд, а экономит кучу нажатий каждый день. Такие мелочи и делают работу в терминале приятной 🙂
📍 Подпишись на создателей: https://t.me/linuxexex
Один лайфхак для терминала, который реально экономит время
Если ты часто работаешь в командной строке, то наверняка знаешь боль: набрал длинную команду, нажал Enter — и только потом заметил опечатку. Или хочешь повторить команду из прошлой недели, но уже не помнишь её целиком.
Вот что реально помогает — интерактивный поиск по истории через fzf.
Стандартный Ctrl+R в bash работает, но неудобно: ищет по одному результату, нужно жать снова и снова. fzf меняет это полностью.
Ставишь fzf:
На Ubuntu/Debian — sudo apt install fzf
На Arch — sudo pacman -S fzf
На macOS — brew install fzf
Добавляешь в ~/.bashrc или ~/.zshrc одну строку:
source /usr/share/doc/fzf/examples/key-bindings.bash
(для zsh путь может отличаться, смотри документацию пакета)
Перезапускаешь шелл — и теперь Ctrl+R открывает интерактивное окно поиска прямо в терминале. Начинаешь печатать любое слово из команды — список фильтруется в реальном времени. Нашёл нужное — Enter, и команда вставляется в строку ввода. Можно ещё отредактировать перед запуском.
Это не всё. fzf цепляется и к Ctrl+T — интерактивный поиск файлов в текущей директории. И к Alt+C — быстрый переход в любую поддиректорию без cd и табов.
Казалось бы, мелочь. Но когда перестаёшь тратить время на листание истории стрелками и вспоминание точного синтаксиса — замечаешь, насколько быстрее идёт работа.
Особенно ценно, если работаешь на нескольких серверах по SSH и история у каждого своя. fzf одинаково хорошо работает везде, где его поставил.
Попробуй один день с ним — обратно уже не захочешь 🙂
📍 Подпишись на создателей: https://t.me/linuxexex
Если ты часто работаешь в командной строке, то наверняка знаешь боль: набрал длинную команду, нажал Enter — и только потом заметил опечатку. Или хочешь повторить команду из прошлой недели, но уже не помнишь её целиком.
Вот что реально помогает — интерактивный поиск по истории через fzf.
Стандартный Ctrl+R в bash работает, но неудобно: ищет по одному результату, нужно жать снова и снова. fzf меняет это полностью.
Ставишь fzf:
На Ubuntu/Debian — sudo apt install fzf
На Arch — sudo pacman -S fzf
На macOS — brew install fzf
Добавляешь в ~/.bashrc или ~/.zshrc одну строку:
source /usr/share/doc/fzf/examples/key-bindings.bash
(для zsh путь может отличаться, смотри документацию пакета)
Перезапускаешь шелл — и теперь Ctrl+R открывает интерактивное окно поиска прямо в терминале. Начинаешь печатать любое слово из команды — список фильтруется в реальном времени. Нашёл нужное — Enter, и команда вставляется в строку ввода. Можно ещё отредактировать перед запуском.
Это не всё. fzf цепляется и к Ctrl+T — интерактивный поиск файлов в текущей директории. И к Alt+C — быстрый переход в любую поддиректорию без cd и табов.
Казалось бы, мелочь. Но когда перестаёшь тратить время на листание истории стрелками и вспоминание точного синтаксиса — замечаешь, насколько быстрее идёт работа.
Особенно ценно, если работаешь на нескольких серверах по SSH и история у каждого своя. fzf одинаково хорошо работает везде, где его поставил.
Попробуй один день с ним — обратно уже не захочешь 🙂
📍 Подпишись на создателей: https://t.me/linuxexex
📰 /cyb/+/psg/: Кибerpunk, безопасность и приватность
«Чем дальше общество отдаляется от правды, тем сильнее оно будет ненавидеть тех, кто её говорит.»
— Джордж Оруэлл
> Кибerpunk
FAQ: https://archive.is/mkDpa
Что такое /cyb/erpunk?: https://pastebin.com/pmn9vzWZ
Как войти в /cyb/erpunk?: https://pastebin.com/5tpNFQds
Огромный список киберпанк-медиа: https://archive.is/6pQt6
Cyberdeck: https://pastebin.com/7fE4BVBg
Cyberlife: https://jinteki.industries/files/cyberlife.7z
Библиотека (Bibliothek): https://www.mediafire.com/folder/4m5hd2065hde8/Bibliothek
> Сети
Tor: https://www.torproject.org/download/
I2P: https://i2p.net/en/
Freenet: https://www.hyphanet.org/
> Приватность
Инструменты: https://www.privacyguides.org/en/tools/
Железо с открытым ПО: https://ryf.fsf.org/products
Приватные фронтенды: https://igwiki.lyci.de/wiki/Privacy_friendly_frontends
Гайд по OSINT: https://inteltechniques.com/index.html
Прошивки: https://libreboot.org/
РМС о Facebook: https://stallman.org/facebook.html
Проверь, утекли ли твои данные: https://haveibeenpwned.com/
> Безопасность
«Всё стало серьёзно»: https://pastebin.com/rqrLK6X0
Основы кибербезопасности: https://igwiki.lyci.de/wiki/Cybersecurity_-_/sec/_guide
Базовый арсенал: https://igwiki.lyci.de/wiki/Cybersecurity_-_basics_and_armory
Обучение / новости / CTF: https://igwiki.lyci.de/wiki/Cybersecurity_-_Learning/News/CTFs
PDF-подборка /sec/: https://mega.nz/#F!zGJT1QQQ!O-8yiH845GN26ajAvkoLkA
EFF — самозащита от слежки: https://ssd.eff.org/
Дополнительная библиотека: https://mega.nz/file/UCgEGAjb#rwNcnMAQCUUbSp8supsFvn9QEHCWUW86eLcZa16ZG4Y
Актуальные ссылки для удаления себя из баз данных брокеров:
https://pastebin.com/cDbDXQvh
https://pastebin.com/raw/cDbDXQvh
Источник (4chan /g/): https://boards.4chan.org/g/thread/109387207
📍 Подпишись на создателей: https://t.me/linuxexex
«Чем дальше общество отдаляется от правды, тем сильнее оно будет ненавидеть тех, кто её говорит.»
— Джордж Оруэлл
> Кибerpunk
FAQ: https://archive.is/mkDpa
Что такое /cyb/erpunk?: https://pastebin.com/pmn9vzWZ
Как войти в /cyb/erpunk?: https://pastebin.com/5tpNFQds
Огромный список киберпанк-медиа: https://archive.is/6pQt6
Cyberdeck: https://pastebin.com/7fE4BVBg
Cyberlife: https://jinteki.industries/files/cyberlife.7z
Библиотека (Bibliothek): https://www.mediafire.com/folder/4m5hd2065hde8/Bibliothek
> Сети
Tor: https://www.torproject.org/download/
I2P: https://i2p.net/en/
Freenet: https://www.hyphanet.org/
> Приватность
Инструменты: https://www.privacyguides.org/en/tools/
Железо с открытым ПО: https://ryf.fsf.org/products
Приватные фронтенды: https://igwiki.lyci.de/wiki/Privacy_friendly_frontends
Гайд по OSINT: https://inteltechniques.com/index.html
Прошивки: https://libreboot.org/
РМС о Facebook: https://stallman.org/facebook.html
Проверь, утекли ли твои данные: https://haveibeenpwned.com/
> Безопасность
«Всё стало серьёзно»: https://pastebin.com/rqrLK6X0
Основы кибербезопасности: https://igwiki.lyci.de/wiki/Cybersecurity_-_/sec/_guide
Базовый арсенал: https://igwiki.lyci.de/wiki/Cybersecurity_-_basics_and_armory
Обучение / новости / CTF: https://igwiki.lyci.de/wiki/Cybersecurity_-_Learning/News/CTFs
PDF-подборка /sec/: https://mega.nz/#F!zGJT1QQQ!O-8yiH845GN26ajAvkoLkA
EFF — самозащита от слежки: https://ssd.eff.org/
Дополнительная библиотека: https://mega.nz/file/UCgEGAjb#rwNcnMAQCUUbSp8supsFvn9QEHCWUW86eLcZa16ZG4Y
Актуальные ссылки для удаления себя из баз данных брокеров:
https://pastebin.com/cDbDXQvh
https://pastebin.com/raw/cDbDXQvh
Источник (4chan /g/): https://boards.4chan.org/g/thread/109387207
📍 Подпишись на создателей: https://t.me/linuxexex
archive.is
The alt.cyberpunk FAQ - sizeof(cat)
archived 26 Jun 2025 19:48:57 UTC
Один лайфхак для терминала, который я использую каждый день
Если ты часто работаешь в терминале, то наверняка знаешь эту боль — набираешь длинную команду, понимаешь что ошибся в начале строки, и начинаешь долбить стрелку влево или зажимаешь Backspace.
Стоп. Есть способ лучше.
Ctrl+A — переходит в начало строки
Ctrl+E — переходит в конец строки
Ctrl+W — удаляет слово слева от курсора
Alt+B — прыгает на слово назад
Alt+F — прыгает на слово вперёд
Это базовые шорткаты bash/readline, которые работают везде — в zsh, fish (частично), в psql, python REPL, даже в gdb.
Но вот лайфхак, который реально меняет жизнь 👇
Набери в терминале:
set -o vi
Теперь твой bash работает в vi-режиме. Нажимаешь Esc — и ты в командном режиме. Жмёшь b, w, 0, $, x, dd — всё как в vim, прямо в строке ввода. Хочешь отредактировать длинную команду по-человечески — нажимаешь v, и она открывается в полноценном редакторе.
Назад к обычному режиму:
set -o emacs
Чтобы vi-режим сохранился навсегда, добавь в ~/.bashrc:
set -o vi
Если ты уже на vi-режиме — есть ещё один трюк. Нажми Esc, потом k — и ты листаешь историю команд в стиле vim. Нажми / — и можешь искать по истории как в vim-поиске.
Бонус для тех, кто не хочет vi-режим, но хочет удобный поиск по истории:
Ctrl+R — интерактивный поиск назад по истории. Начинаешь вводить фрагмент команды — терминал сам находит последнее совпадение. Ctrl+R ещё раз — следующее совпадение.
Это, пожалуй, самый недооценённый шорткат вообще. Люди по 5 лет работают в Linux и не знают про Ctrl+R 🙈
Попробуй прямо сейчас — Ctrl+R и начни вводить docker или git. Увидишь магию.
📍 Подпишись на создателей: https://t.me/linuxexex
Если ты часто работаешь в терминале, то наверняка знаешь эту боль — набираешь длинную команду, понимаешь что ошибся в начале строки, и начинаешь долбить стрелку влево или зажимаешь Backspace.
Стоп. Есть способ лучше.
Ctrl+A — переходит в начало строки
Ctrl+E — переходит в конец строки
Ctrl+W — удаляет слово слева от курсора
Alt+B — прыгает на слово назад
Alt+F — прыгает на слово вперёд
Это базовые шорткаты bash/readline, которые работают везде — в zsh, fish (частично), в psql, python REPL, даже в gdb.
Но вот лайфхак, который реально меняет жизнь 👇
Набери в терминале:
set -o vi
Теперь твой bash работает в vi-режиме. Нажимаешь Esc — и ты в командном режиме. Жмёшь b, w, 0, $, x, dd — всё как в vim, прямо в строке ввода. Хочешь отредактировать длинную команду по-человечески — нажимаешь v, и она открывается в полноценном редакторе.
Назад к обычному режиму:
set -o emacs
Чтобы vi-режим сохранился навсегда, добавь в ~/.bashrc:
set -o vi
Если ты уже на vi-режиме — есть ещё один трюк. Нажми Esc, потом k — и ты листаешь историю команд в стиле vim. Нажми / — и можешь искать по истории как в vim-поиске.
Бонус для тех, кто не хочет vi-режим, но хочет удобный поиск по истории:
Ctrl+R — интерактивный поиск назад по истории. Начинаешь вводить фрагмент команды — терминал сам находит последнее совпадение. Ctrl+R ещё раз — следующее совпадение.
Это, пожалуй, самый недооценённый шорткат вообще. Люди по 5 лет работают в Linux и не знают про Ctrl+R 🙈
Попробуй прямо сейчас — Ctrl+R и начни вводить docker или git. Увидишь магию.
📍 Подпишись на создателей: https://t.me/linuxexex
Расскажу про одну штуку в bash и zsh, которую большинство людей просто не замечают, хотя пользуются терминалом каждый день.
Это модификаторы истории. Знак восклицательного знака — не только для эмоций 😄
Допустим, ты только что запустил длинную команду:
rsync -avz --progress /home/user/projects/ backup@192.168.1.100:/mnt/backup/
И теперь хочешь повторить её, но с другим путём. Можно стрелку вверх, потом долго ёлозить курсором. А можно вот так:
!! — повторяет последнюю команду целиком. Классика, многие знают.
Но вот что знают единицы:
!$ — последний аргумент предыдущей команды.
Пример. Создал директорию и хочешь сразу в неё зайти:
mkdir /tmp/very/long/path/here
cd !$
Всё, не надо ничего перепечатывать. !$ подставит /tmp/very/long/path/here автоматически.
!^ — первый аргумент. Если аргументов несколько и нужен самый первый — вот он.
!:2, !:3 и так далее — конкретный аргумент по номеру. Нумерация с нуля, где 0 — сама команда, 1 — первый аргумент и так далее.
Например:
cp file1.txt file2.txt file3.txt /destination/
!:1 вернёт file1.txt, !:2 — file2.txt, и так далее.
!:1-3 — диапазон аргументов. В примере выше вернёт file1.txt file2.txt file3.txt без пути назначения.
!:* — все аргументы без самой команды. Удобно когда хочешь выполнить другую команду с теми же файлами.
Ещё одна вещь — модификатор замены ^старое^новое^
Опечатался в команде:
git comit -m "fix"
Жмёшь Enter, получаешь ошибку. Вместо того чтобы лезть в историю, просто:
^comit^commit^
bash/zsh возьмёт последнюю команду и заменит первое вхождение. Готово.
И последнее — !строка
!git найдёт последнюю команду, которая начиналась на git, и выполнит её. Без лишних поисков по истории.
!?строка? — то же самое, но ищет вхождение строки в любом месте команды, не только в начале.
Всё это работает в bash и zsh одинаково. В zsh ещё есть глобальные псевдонимы и расширения, но это уже отдельная история.
Попробуй !$ прямо сейчас — это одна из тех вещей, после которых уже не понимаешь, как жил без неё раньше 🐚
📍 Подпишись на создателей: https://t.me/linuxexex
Это модификаторы истории. Знак восклицательного знака — не только для эмоций 😄
Допустим, ты только что запустил длинную команду:
rsync -avz --progress /home/user/projects/ backup@192.168.1.100:/mnt/backup/
И теперь хочешь повторить её, но с другим путём. Можно стрелку вверх, потом долго ёлозить курсором. А можно вот так:
!! — повторяет последнюю команду целиком. Классика, многие знают.
Но вот что знают единицы:
!$ — последний аргумент предыдущей команды.
Пример. Создал директорию и хочешь сразу в неё зайти:
mkdir /tmp/very/long/path/here
cd !$
Всё, не надо ничего перепечатывать. !$ подставит /tmp/very/long/path/here автоматически.
!^ — первый аргумент. Если аргументов несколько и нужен самый первый — вот он.
!:2, !:3 и так далее — конкретный аргумент по номеру. Нумерация с нуля, где 0 — сама команда, 1 — первый аргумент и так далее.
Например:
cp file1.txt file2.txt file3.txt /destination/
!:1 вернёт file1.txt, !:2 — file2.txt, и так далее.
!:1-3 — диапазон аргументов. В примере выше вернёт file1.txt file2.txt file3.txt без пути назначения.
!:* — все аргументы без самой команды. Удобно когда хочешь выполнить другую команду с теми же файлами.
Ещё одна вещь — модификатор замены ^старое^новое^
Опечатался в команде:
git comit -m "fix"
Жмёшь Enter, получаешь ошибку. Вместо того чтобы лезть в историю, просто:
^comit^commit^
bash/zsh возьмёт последнюю команду и заменит первое вхождение. Готово.
И последнее — !строка
!git найдёт последнюю команду, которая начиналась на git, и выполнит её. Без лишних поисков по истории.
!?строка? — то же самое, но ищет вхождение строки в любом месте команды, не только в начале.
Всё это работает в bash и zsh одинаково. В zsh ещё есть глобальные псевдонимы и расширения, но это уже отдельная история.
Попробуй !$ прямо сейчас — это одна из тех вещей, после которых уже не понимаешь, как жил без неё раньше 🐚
📍 Подпишись на создателей: https://t.me/linuxexex
⚡ Терминальный лайфхак: Ctrl+R
Вместо того чтобы листать историю стрелкой вверх, нажми Ctrl+R и начни вводить кусок старой команды.
Например, вводишь ssh или docker, и shell сразу ищет совпадение в истории. Ещё одно Ctrl+R — следующее совпадение.
Это особенно удобно для длинных команд с флагами, путями и портами.
Бонус: в zsh можно усилить поиск через fzf, но даже встроенный Ctrl+R уже заметно ускоряет работу.
📍 Подпишись на создателей: https://t.me/linuxexex
Вместо того чтобы листать историю стрелкой вверх, нажми Ctrl+R и начни вводить кусок старой команды.
Например, вводишь ssh или docker, и shell сразу ищет совпадение в истории. Ещё одно Ctrl+R — следующее совпадение.
Это особенно удобно для длинных команд с флагами, путями и портами.
Бонус: в zsh можно усилить поиск через fzf, но даже встроенный Ctrl+R уже заметно ускоряет работу.
📍 Подпишись на создателей: https://t.me/linuxexex
📰 JPEG XL [JXL] Thread
JPEG XL - Новый свободный формат изображений, который мы заслуживаем.
Из распространённых форматов на сегодняшний день мы имеем старый добрый JPEG, который немного омолодила Mozilla, когда выпустила кодировщик MOZ JPEG; PNG (для изображений без потерь) и GIF, который давно пора отправить на свалку истории.
Также есть несколько относительно свежих форматов изображений, которые являются побочным продуктом, полученным при разработки видеокодеков. К примеру HEIС (HEIF) который так любит Apple происходит из видеокодека HEVC. Та же история с форматами WebP и AVIF, которые произошли из VP9 (VP8) и AV1 соответственно.
Но так как эти кодировщики делались изначально для видео, они концептуально не настолько эффективны для хранения изображений.
Джва года назад собрались компании Google и JPEG и решили, что так дальше дела не могут идти и создали новый свободный формат, который должен стать новым мировым стандартом, как когда-то стал JPEG. И у него есть все шансы. Он одновременно может заменить JPEG, в случаях сжатия с потерями (например фотки), PNG, в случаях сжатия без потерь (скриншоты), GIF (коротенькие анимации), ведь он может это всё гораздо лучше их самих.
Основные фичи формата:
- Сжимает на 60% лучше, чем JPEG.
- Сжимает без потерь на 35% лучше, чем PNG.
- Он может транскодировать jpeg изображение без потерь туда и обратно. Транскодированное JPEG XL изображение весит на ~20% меньше оригинала. Это значит, что можно спокойно пережать все свои фотки, не потеряв ни бита информации. Таким больше никто не может похвастаться.
- Поддержка прогрессивного декодирования (актуально для веба. Наполовину загруженная пикча уже выглядит хорошо)
- Анимации (замена гифок).
- Почти полнота по Тьюрингу (если бы не ограничения на максимальный размер обрабатываемых пикселей). Это позволит почти бесконечно оптимизировать формат. Пикрил в формате JPEG XL весит всего 117 байтов! И по факту является программой по его генерации, написанной вручную. Больше подобных пикч можно найти в комьюнити Discord сервере.
- Свободный формат, а это значит, что его может использовать кто и как угодно. Его уже можно активировать в Chrome, если включить флаг enable-jxl, и в ночных сборках Firefox. Также его поддержка уже добавлена в Gnome. Для винды тоже есть вьюеры. Про Plasma вообще без понятия (скорее всего тоже есть).
Сайт сообщества: https://jpegxl.info/ https://jpegxl.info/
Там все нужные ссылки, картинки и более подробное объяснение всего.
Источник (2ch /s/): https://2ch.org/s/res/3213710.html
📍 Подпишись на создателей: https://t.me/linuxexex
JPEG XL - Новый свободный формат изображений, который мы заслуживаем.
Из распространённых форматов на сегодняшний день мы имеем старый добрый JPEG, который немного омолодила Mozilla, когда выпустила кодировщик MOZ JPEG; PNG (для изображений без потерь) и GIF, который давно пора отправить на свалку истории.
Также есть несколько относительно свежих форматов изображений, которые являются побочным продуктом, полученным при разработки видеокодеков. К примеру HEIС (HEIF) который так любит Apple происходит из видеокодека HEVC. Та же история с форматами WebP и AVIF, которые произошли из VP9 (VP8) и AV1 соответственно.
Но так как эти кодировщики делались изначально для видео, они концептуально не настолько эффективны для хранения изображений.
Джва года назад собрались компании Google и JPEG и решили, что так дальше дела не могут идти и создали новый свободный формат, который должен стать новым мировым стандартом, как когда-то стал JPEG. И у него есть все шансы. Он одновременно может заменить JPEG, в случаях сжатия с потерями (например фотки), PNG, в случаях сжатия без потерь (скриншоты), GIF (коротенькие анимации), ведь он может это всё гораздо лучше их самих.
Основные фичи формата:
- Сжимает на 60% лучше, чем JPEG.
- Сжимает без потерь на 35% лучше, чем PNG.
- Он может транскодировать jpeg изображение без потерь туда и обратно. Транскодированное JPEG XL изображение весит на ~20% меньше оригинала. Это значит, что можно спокойно пережать все свои фотки, не потеряв ни бита информации. Таким больше никто не может похвастаться.
- Поддержка прогрессивного декодирования (актуально для веба. Наполовину загруженная пикча уже выглядит хорошо)
- Анимации (замена гифок).
- Почти полнота по Тьюрингу (если бы не ограничения на максимальный размер обрабатываемых пикселей). Это позволит почти бесконечно оптимизировать формат. Пикрил в формате JPEG XL весит всего 117 байтов! И по факту является программой по его генерации, написанной вручную. Больше подобных пикч можно найти в комьюнити Discord сервере.
- Свободный формат, а это значит, что его может использовать кто и как угодно. Его уже можно активировать в Chrome, если включить флаг enable-jxl, и в ночных сборках Firefox. Также его поддержка уже добавлена в Gnome. Для винды тоже есть вьюеры. Про Plasma вообще без понятия (скорее всего тоже есть).
Сайт сообщества: https://jpegxl.info/ https://jpegxl.info/
Там все нужные ссылки, картинки и более подробное объяснение всего.
Источник (2ch /s/): https://2ch.org/s/res/3213710.html
📍 Подпишись на создателей: https://t.me/linuxexex
jpegxl.info
JPEG XL: Superior Image Compression
Explore JPEG XL, the next-generation image format delivering superior compression, fast encoding/decoding, and seamless JPEG transcoding. The future of image compression is here.
📜 Open source факт: Linux начинался не как «большой проект»
В 1991 году Линус Торвальдс выложил ядро как личный эксперимент для своего компьютера. Никакого плана захватить серверы, облака, Android и embedded-мир тогда не было.
Сила Linux оказалась не только в коде, а в модели разработки: тысячи людей могли читать, чинить, портировать и улучшать систему под свои задачи.
Итог: сегодня Linux работает в серверах, роутерах, телефонах, суперкомпьютерах и куче устройств, о которых пользователь даже не думает.
📍 Подпишись на создателей: https://t.me/linuxexex
В 1991 году Линус Торвальдс выложил ядро как личный эксперимент для своего компьютера. Никакого плана захватить серверы, облака, Android и embedded-мир тогда не было.
Сила Linux оказалась не только в коде, а в модели разработки: тысячи людей могли читать, чинить, портировать и улучшать систему под свои задачи.
Итог: сегодня Linux работает в серверах, роутерах, телефонах, суперкомпьютерах и куче устройств, о которых пользователь даже не думает.
📍 Подпишись на создателей: https://t.me/linuxexex