linux.exex [GFYB]
157 subscribers
748 photos
87 videos
9 files
553 links
GFYB - go fuck yourself bitch. This Is team GFYB. goida
Download Telegram
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
2020 - 2022 - 2024 - 2026?????
Лайфхак для терминала, который реально экономит время ⚡

Вы знаете про 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
Ставим веб-сервер на пяти дистрибутивах — смотрим, кто удобнее

Задача простая: поднять 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
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
Как работает планировщик процессов в 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
🧩 Как systemd запускает сервисы простыми словами

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
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
Один совет по безопасности, который реально стоит внедрить

Большинство линуксоидов настраивают систему один раз и потом годами не трогают. А между тем есть одна штука, которую легко забыть и о которой потом горько жалеют — это аудит 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
Один лайфхак для терминала, который реально экономит время

Если ты часто работаешь в командной строке, то наверняка знаешь боль: набрал длинную команду, нажал 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
Один лайфхак для терминала, который я использую каждый день

Если ты часто работаешь в терминале, то наверняка знаешь эту боль — набираешь длинную команду, понимаешь что ошибся в начале строки, и начинаешь долбить стрелку влево или зажимаешь 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
⚡ Терминальный лайфхак: Ctrl+R

Вместо того чтобы листать историю стрелкой вверх, нажми 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
📜 Open source факт: Linux начинался не как «большой проект»

В 1991 году Линус Торвальдс выложил ядро как личный эксперимент для своего компьютера. Никакого плана захватить серверы, облака, Android и embedded-мир тогда не было.

Сила Linux оказалась не только в коде, а в модели разработки: тысячи людей могли читать, чинить, портировать и улучшать систему под свои задачи.

Итог: сегодня Linux работает в серверах, роутерах, телефонах, суперкомпьютерах и куче устройств, о которых пользователь даже не думает.

📍 Подпишись на создателей: https://t.me/linuxexex