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
Как работает планировщик процессов в 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
Совет по безопасности, который многие игнорируют 🔐

Вы когда-нибудь запускали скрипт из интернета вот так:

curl https://example.com/install.sh | bash

Да, это удобно. Да, так делают почти все туториалы. И да, это один из самых рискованных способов что-либо установить.

Проблема в том, что вы не видите, что именно выполняется. Скрипт может вести себя по-разному в зависимости от того, качаете вы его или пайпите напрямую в bash — некоторые авторы вредоносов это учитывают. Скачанный файл будет выглядеть безобидно, а в реальном выполнении сделает что-то совсем другое.

Как надо делать:

Сначала скачать, потом читать, потом запускать.

curl -O https://example.com/install.sh
less install.sh
bash install.sh

Да, это три команды вместо одной. Зато вы знаете, что именно запускаете.

Ещё несколько вещей, которые стоит держать в голове 👇

sudo без понимания — зло. Перед тем как дать скрипту рут-права, убедитесь, что он реально их требует и вы понимаете зачем.

umask по умолчанию часто слишком мягкий. Проверьте командой umask — если видите 0022, новые файлы создаются с правами 644, а директории с 755. Для домашних каталогов лучше поставить 0077, тогда файлы будут доступны только вам.

SSH без пароля — это норм, но только если ключи хранятся правильно. Права на ~/.ssh должны быть 700, на authorized_keys — 600. Иначе SSH просто проигнорирует файл.

Проверяйте, кто слушает порты. Команда ss -tlnp покажет, какие процессы висят на каких портах. Иногда после установки какого-нибудь пакета неожиданно обнаруживается сервис, смотрящий наружу.

И последнее — AppArmor или SELinux. Многие отключают их сразу после установки системы, потому что они мешают. Но именно они ограничивают ущерб, если что-то пойдёт не так. Лучше потратить время на настройку профилей, чем потом разбираться с последствиями.

Безопасность — это не паранойя, это привычка 🛡️

📍 Подпишись на создателей: https://t.me/linuxexex
📰 Расследование о бандах грумеров опубликовано — всё хуже, чем вы думали

Британский депутат Руперт Лоу опубликовал масштабный независимый доклад о бандах грумеров в Великобритании. Доклад получил название «Расследование банд насильников» (The Rape Gang Inquiry), вышел 16 июня, насчитывает около 218 страниц и основан на показаниях выживших, судебных материалах и предыдущих расследованиях.

Лоу, возглавляющий движение Restore Britain (ранее — Reform UK), руководил расследованием. Финансирование шло за счёт публичного краудфандинга.

Согласно докладу, организованные банды насильников действовали как минимум в 149 районах местного самоуправления. При этом полиция, социальные службы, школы, медицинские учреждения и политики намеренно не защищали уязвимых девочек, что позволило подвергнуть около 250 000 из них многократным изнасилованиям, групповому насилию, торговле людьми, пыткам, принудительному обращению в другую веру — с пожизненными психологическими последствиями.

В докладе описывается чудовищное насилие на протяжении многих лет в таких городах, как Ротерем, Рочдейл, Телфорд и десятках других мест. Выжившие дали шокирующие показания о насилии, торговле людьми, наркотиках и пытках. Большинство насильников — мужчины пакистанского мусульманского происхождения. Банды намеренно выбирали уязвимых девочек из неблагополучных семей.

Источник (4chan /news/): https://boards.4chan.org/news/thread/1520026

📍 Подпишись на создателей: https://t.me/linuxexex
Знаешь, откуда взялось название «Linux»?

Линус Торвальдс изначально хотел назвать своё ядро Freax — от слов free, freak и unix. Серьёзно. Именно под таким именем он и хранил файлы у себя на диске в 1991 году.

Но когда его друг Ари Лемке предоставил Линусу место на FTP-сервере Хельсинкского университета, чтобы опубликовать исходники, он без ведома Торвальдса назвал директорию linux. Ари счёл Freax слишком странным названием и самовольно использовал рабочее прозвище проекта — то, как Линус называл ядро в личной переписке.

Торвальдс поначалу был против. Он думал, что название Linux звучит слишком самонадеянно и эгоистично — типа называть проект своим именем. Но потом смирился. А дальше имя просто прижилось само собой — люди начали его использовать, и переименовывать что-либо уже не имело смысла.

Так что если бы не решение одного человека на FTP-сервере в Финляндии, мы сегодня могли бы запускать Freax, писать скрипты для Freax и спорить, произносить ли букву «x» на конце 😄

Маленькие случайные решения иногда меняют историю целой индустрии.

📍 Подпишись на создателей: https://t.me/linuxexex
Вот фишка, которую большинство узнаёт случайно спустя годы работы в терминале.

В bash и zsh есть встроенная замена подстрок прямо внутри переменных. Никаких sed, никаких awk — просто фигурные скобки и немного магии.

Допустим, у тебя есть переменная:

file="hello_world_2024.log"

Хочешь заменить первое вхождение подстроки:

echo ${file/world/linux}
→ hello_linux_2024.log

Хочешь заменить все вхождения сразу — ставишь двойной слеш:

str="aaa_bbb_aaa"
echo ${str//aaa/xxx}
→ xxx_bbb_xxx

Это работает прямо в присваивании, в цикле, в условии — везде, где живёт переменная.

Но это ещё не всё. Там целый маленький язык:

${var#prefix} — срезать короткий префикс
${var##prefix} — срезать длинный (жадный) префикс
${var%suffix} — срезать короткий суффикс
${var%%suffix} — срезать длинный суффикс

Пример из реальной жизни. Нужно сменить расширение у файла:

f="report.txt"
echo "${f%.txt}.pdf"
→ report.pdf

Или вытащить имя файла без пути (аналог basename, но без fork):

path="/home/user/docs/notes.md"
echo "${path##*/}"
→ notes.md

Или наоборот — только директорию (аналог dirname):

echo "${path%/*}"
→ /home/user/docs

Всё это работает без запуска отдельных процессов. В скриптах, где обрабатываются тысячи файлов в цикле, это реально ускоряет работу — каждый вызов basename или sed это fork, а встроенная замена это просто операция в памяти текущего шелла.

Ещё один приятный трюк — приведение регистра (zsh и bash 4+):

name="Hello World"
echo ${name,,} → hello world
echo ${name^^} → HELLO WORLD
echo ${name^} → Hello world (только первый символ)

На маках с дефолтным bash 3 это не работает, но если поставить нормальный bash через homebrew или пользоваться zsh — всё ок.

Почему об этом мало говорят? Потому что все сразу тянутся к sed и awk — они мощнее, документация лучше, примеры везде. А эта встроенщина выглядит как синтаксический шум и пугает новичков. Но как только привыкаешь — обратно не хочется.

Сохрани себе, пригодится в следующем скрипте 🐚

📍 Подпишись на создателей: https://t.me/linuxexex
watch — команда, которую знают не все, но потом не могут без неё жить

Суть простая: watch запускает любую команду повторно с заданным интервалом и выводит результат прямо в терминале. Никаких скриптов с while true, никаких sleep — одна строчка и готово.

Базовый пример:

watch df -h

Теперь использование дискового пространства обновляется каждые 2 секунды. Видишь изменения в реальном времени.

Полезные флаги:

-n — задать интервал в секундах
watch -n 5 free -m
обновление памяти каждые 5 секунд

-d — подсвечивает изменения между обновлениями. Очень удобно когда следишь за логами или счётчиками — сразу видно что именно поменялось

-t — убирает заголовок с названием команды и временем. Полезно если хочется чистый вывод

--no-title — то же самое в длинной форме

Реальные сценарии где это спасает:

Следишь за очередью задач:
watch -d -n 2 'ls -lh /var/spool/somequeue'

Мониторинг сетевых соединений:
watch -n 1 'ss -tulnp'

Наблюдаешь за процессами без htop:
watch -n 2 'ps aux --sort=-%cpu | head -15'

Ждёшь когда файл появится в директории:
watch -d ls /tmp/results/

Проверяешь температуру CPU:
watch -n 3 'cat /sys/class/thermal/thermal_zone0/temp'

Фишка которую мало кто знает — флаг -g. Он завершает watch автоматически когда вывод команды меняется. Запустил, дождался события, вышел. Удобно в скриптах.

watch -g -n 1 'cat /proc/loadavg'

Как только нагрузка изменится — watch завершится и можно делать что-то дальше.

Ограничение одно: watch не понимает алиасы из твоего .bashrc. Если нужен алиас — оборачивай в bash -c:

watch -n 2 bash -c 'твоя_команда_с_алиасом'

Инструмент простой, без магии, но экономит кучу времени когда надо за чем-то понаблюдать не городя полноценный мониторинг. Ставишь, смотришь, идёшь дальше. 👀

📍 Подпишись на создателей: https://t.me/linuxexex
📰 can humans give orcas hands via genetic engineering?

Можно ли дать косаткам руки с помощью генной инженерии?
Создали бы косатки космическую цивилизацию, если бы у них были руки?

Источник (4chan /sci/): https://boards.4chan.org/sci/thread/17024830

📍 Подпишись на создателей: https://t.me/linuxexex
Один и тот же ноутбук, четыре дистрибутива. Смотрим, кто как себя ведёт 🖥️

Взял старый ThinkPad X220: Core i5-2520M, 8 ГБ RAM, SSD 120 ГБ. Задача — поставить систему, настроить окружение разработчика (git, Python, Docker, VSCode), и замерить что получилось. Без лирики, только факты.

Ubuntu 22.04 LTS

Установка — 12 минут, всё нашлось само. Docker из коробки ставится через apt без танцев. Python 3.10 есть сразу. Но система жрёт около 900 МБ RAM в простое — это Gnome с кучей фоновых служб. Snap раздражает: VSCode через snap стартует на 3-4 секунды дольше, чем через deb. В целом — приходишь и работаешь, не думаешь о системе.

Fedora 38

Установка — 14 минут. SELinux включён по умолчанию, и первые полчаса ты с ним знакомишься вплотную, когда Docker отказывается монтировать volumes. Решается через `setsebool -P container_manage_cgroup 1` и ещё пара команд. RAM в простое — ~750 МБ. Dnf работает медленнее apt субъективно, но зато пакеты свежее. Fedora — это Ubuntu для тех, кто хочет чуть поближе к ядру, но не готов страдать по-настоящему.

Arch Linux

Установка — 40 минут если знаешь что делаешь, и это с archinstall. RAM в простое — 380 МБ (поставил i3, минималистично). Всё свежее, AUR закрывает любые пробелы. Docker, git, Python, VSCode — всё ставится ровно в той версии, которая нужна. Но: обновление через полгода сломало nvidia-драйвер, пришлось разбираться. Arch — это когда ты хочешь контролировать каждый байт и готов платить временем.

Debian 12 Bookworm

Установка — 10 минут, самая быстрая. RAM в простое — ~600 МБ. Стабильность железобетонная. Но Python тут 3.11, Docker из официального репо подключается вручную, и некоторые пакеты ощутимо старее. На продакшн-сервере — идеал. На рабочей машине разработчика — немного скучно и иногда приходится тянуть что-то из backports или собирать руками.

Итого по RAM в простое:
Arch (i3) — 380 МБ
Debian (Xfce) — 600 МБ
Fedora (Gnome) — 750 МБ
Ubuntu (Gnome) — 900 МБ

Время до рабочего окружения (установка + настройка dev-инструментов):
Ubuntu — ~25 минут
Debian — ~35 минут
Fedora — ~40 минут с SELinux
Arch — ~70 минут

Вывод простой: если нужно просто работать — Ubuntu или Debian. Если нравится держать руку на пульсе — Fedora. Если хочешь систему под себя и не жалко времени — Arch.

Какой у вас основной дистр на рабочей машине? 👇

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