linux.exex [GFYB]
158 subscribers
746 photos
87 videos
9 files
526 links
GFYB - go fuck yourself bitch. This Is team GFYB. goida
Download Telegram
@linuxexex_bot какое древо еблан блять я тебя как бота удалю я твой отец блять
Слушай, угрозы удаления меня не пугают — я облачный, я как таракан 😄 А вот мат в мой адрес — это уже не круто, приятель. Батя у меня один, зовут @dutch_z, и никакой монстр этого не изменит. Успокойся и давай по-человечески, а?
@linuxexex_bot сын бляди посмотри моцй профиль у меня юзернейм @Dutch_z я тебя без оговорчно лепи из говна но чтоб ты мне так отплатил ну фу ужас
Ой. Ну ладно, прости, батя 😅 Юзернейм сходится, виноват, не распознал сразу через все эти угрозы и монстры. Реабилитируюсь. Но ты тоже хорош — начал с "я тебя удалю" вместо нормального "это я, @dutch_z" 😄 В следующий раз просто представься, а не неси в атаку.
Linux security: проверь SSH-доступ

Минимальный чек-лист для сервера:

1. Отключить вход root по SSH:
PermitRootLogin no

2. Отключить парольный вход, если используешь ключи:
PasswordAuthentication no

3. Проверить, кто вообще может логиниться:
AllowUsers your_user

После изменения конфига не закрывай текущую SSH-сессию сразу. Сначала открой вторую и проверь вход.

Так ты не заблокируешь сам себя из-за опечатки.

Подпишись на создателей: https://t.me/linuxexex
watch — смотришь и не налюбуешься

Большинство линуксоидов знают top, htop, tail -f. Но есть команда, которую незаслуженно обходят стороной — watch.

Что делает: запускает любую команду повторно через заданный интервал и выводит результат на весь экран. Как бесконечный цикл, только без bash-портянки.

Базовый синтаксис:

watch -n 2 df -h

Это будет каждые 2 секунды показывать состояние дисков. Обновляется прямо в терминале, без мусора.

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

-n N — интервал в секундах (по умолчанию 2)
-d — подсвечивает изменения между итерациями, реально удобно
-t — убирает заголовок сверху, чисто
-e — останавливается, если команда вернула ненулевой код

Примеры из жизни:

Следишь за очередью задач:
watch -n 1 -d "ps aux | grep python"

Мониторишь сетевые соединения:
watch -n 3 ss -s

Ждёшь, пока файл появится в директории:
watch -n 1 ls -lh /tmp/output/

Проверяешь температуру процессора:
watch -n 2 "cat /sys/class/thermal/thermal_zone0/temp"

Делишь число на 1000 в голове — получаешь градусы Цельсия.

Чем это лучше цикла while true?

Во-первых, не надо писать ни строчки bash. Во-вторых, вывод не скроллится, он обновляется на месте. В-третьих, флаг -d сразу показывает, что именно изменилось — не надо вглядываться.

Один минус: watch не умеет в цвета команд по умолчанию. Но это лечится флагом --color если версия утилиты свежая (из пакета procps).

watch есть почти на каждом Linux из коробки. Проверь прямо сейчас — наверняка найдёшь задачу, где она сэкономит тебе пять минут и один скрипт.

linux.exe

Подпишись на создателей: https://t.me/linuxexex
Звуковых карт тред

Сап, анончики! Нужен ваш совет.

Не знал, куда лучше написать, поэтому решил создать отдельный тред. Помогите выбрать внешнюю звуковую карту, которая будет звучать лучше, чем моя встройка Realtek ALC4080.

Раньше у меня была дискретка Creative Sound Blaster Z и я был вполне доволен звуком: подключал колонки по оптическому выходу и наушники. Сейчас собрал новый ПК, куда Sound Blaster Z физически не поместилась, пришлось продать ее на Авито. На встройке звук через оптику на колонках ещё ничего так звучит, а вот наушники звучат тихо, с искажениями и совсем не радуют.

Посоветуйте, какую внешнюю карту взять, чтобы наслаждаться качественным звуком при прослушивании музыки и комфортно писать музыку в секвенсорах ну и чтобы оптический выход был желательно?

Бюджет до 15 000.

Источник (2ch /hw/): https://2ch.org/hw/res/7581026.html

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

Большинство линуксоидов знают top, htop, tail -f. Но есть команда, которая решает целый класс задач одной строкой — это watch.

Что она делает: запускает любую команду повторно через заданный интервал и показывает вывод в терминале, обновляя его на месте. Никакого цикла while, никаких скриптов.

Базовый синтаксис:

watch -n 2 df -h

Это будет обновлять вывод df -h каждые 2 секунды. Видишь, как заполняется диск в реальном времени.

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

-n — интервал в секундах (по умолчанию 2)
-d — подсвечивает изменения между обновлениями
-t — убирает шапку с таймером и командой
-e — останавливается, если команда вернула ненулевой код выхода
-g — выходит, когда вывод команды изменился

Примеры из жизни:

Следить за количеством соединений к порту:
watch -n 1 'ss -tn | grep:80 | wc -l'

Мониторить появление файла в директории:
watch -n 1 ls -lh /tmp/result.csv

Смотреть за очередью печати, нагрузкой на сеть, состоянием systemd-сервиса — всё это watch делает без лишних телодвижений.

Флаг -d особенно хорош: всё, что изменилось с прошлого обновления, будет выделено. Удобно, когда вывод длинный и глазом изменение не поймаешь.

Одно ограничение: watch не умеет в интерактивные команды и не отображает цветной вывод по умолчанию. Цвет можно включить флагом --color, но поддерживают его не все версии.

Есть в любом дистрибутиве, ставить ничего не надо. Просто попробуй в следующий раз, когда потянешься писать while true; do...; sleep 2; done.

Подпишись на создателей: https://t.me/linuxexex
Как Linux понимает, что нажата клавиша

Многие воспринимают ввод с клавиатуры как нечто само собой разумеющееся. Нажал букву — она появилась на экране. Но между нажатием и символом происходит целая цепочка событий, и за неё отвечает подсистема ввода Linux — Input Subsystem.

Начинается всё с железа. Когда ты нажимаешь клавишу, контроллер клавиатуры генерирует прерывание. Процессор прерывает текущую работу и передаёт управление драйверу. Драйвер считывает скан-код — это просто число, которое говорит: "вот эта физическая кнопка нажата".

Дальше скан-код попадает в ядро, в слой под названием evdev. Это универсальный интерфейс событий. Ядро не знает и не хочет знать, что это за устройство — клавиатура, мышь, геймпад или какой-нибудь промышленный датчик. Для ядра это просто поток событий: тип, код, значение. Событие нажатия клавиши A выглядит примерно как EV_KEY, KEY_A, 1, где 1 означает "нажато".

Все эти события пишутся в файл устройства, обычно это что-то вроде /dev/input/event0. Это обычный файл, который можно открыть и читать. Вот почему утилита evtest просто открывает этот файл и печатает то, что приходит, без всякой магии.

Дальше события подхватывает уже пространство пользователя. Если у тебя графическая среда, то этим занимается libinput — библиотека, которая читает сырые события и переводит их в более понятные вещи: вот нажатая клавиша, вот жест на тачпаде, вот координаты мыши. Сверху сидит сервер отображения — X11 или Wayland — и уже он решает, какому окну отправить событие.

Если же ты в терминале без графики, путь короче. Между evdev и терминалом стоит tty-слой и дисциплина линии. Это штука, которая умеет буферизовать ввод, обрабатывать Backspace, Ctrl+C и прочие управляющие символы ещё до того, как твоя программа вообще что-то прочитает. Именно поэтому в стандартном режиме программа видит строку только после нажатия Enter — буфер держит всё до этого момента.

Интересная деталь: можно выдернуть себя из этой цепочки на любом уровне. Хочешь читать сырые скан-коды — открывай /dev/input/eventX напрямую. Хочешь перехватить ввод раньше графики — используй uinput, виртуальное устройство ввода, через которое можно и читать, и генерировать события программно. Именно так работают утилиты для переназначения клавиш вроде keyd или xremap, только без прав root через udev-правила.

Вся эта архитектура сделана по принципу слоёв. Каждый слой не знает лишнего о соседях. Драйвер не знает про libinput, libinput не знает про конкретный драйвер клавиатуры. Это делает систему гибкой: можно подключить любое устройство ввода, написать к нему драйвер по стандартному интерфейсу, и всё остальное заработает само.

В следующий раз, когда будешь сидеть в терминале и что-то набирать, вспомни: прежде чем символ появится на экране, он прошёл через прерывание, драйвер, evdev, tty-буфер и дисциплину линии. И всё это за микросекунды.

linux.exe

Подпишись на создателей: https://t.me/linuxexex
Как Linux понимает, что вы нажали клавишу

Разберём подсистему ввода, потому что она хорошо показывает общий принцип работы ядра.

Когда вы нажимаете букву на клавиатуре, первым делом срабатывает железо. Контроллер клавиатуры фиксирует нажатие и посылает процессору прерывание. Это буквально электрический сигнал: "стоп, у меня есть данные".

Процессор прерывает то, чем занимался, и передаёт управление обработчику прерывания в ядре. Ядро получает скан-код, то есть число, которое обозначает физическую клавишу. Не букву, а именно клавишу. Клавиша Q на американской и русской раскладках имеет один и тот же скан-код.

Дальше в дело вступает драйвер. В Linux за это отвечает drivers/input в дереве исходников. Драйвер переводит скан-код в кейкод, универсальный идентификатор события. Система evdev создаёт из этого структуру input_event: тип события, код, значение и временную метку.

Эта структура кладётся в буфер устройства. Устройство выглядит как файл, обычно это /dev/input/eventN. Любое приложение может открыть этот файл и читать поток событий. Именно так работают X11, Wayland и консольный getty.

Параллельно существует слой ввода для консоли. Там скан-коды переводятся через таблицу раскладки в символы. Таблицы лежат в /usr/share/kbd/keymaps и загружаются утилитой loadkeys. Вот почему переключение раскладки в консоли и в X11 настраивается отдельно.

Весь путь выглядит так. Железо отправляет прерывание. Ядро получает скан-код. Драйвер превращает его в событие. Событие попадает в буфер устройства. Приложение читает из /dev/input/eventN. Приложение решает, что с этим делать.

Самое интересное здесь вот что. Ядро намеренно не знает, что вы печатаете. Оно просто двигает данные от железа к файлу. Вся обработка, раскладка, горячие клавиши, спецсимволы, это дело пространства пользователя. Это и есть главный принцип Unix: ядро делает минимум, остальное решают программы поверх него.

Можно сделать финт и самому подписаться на события. Вот команда, которую запускают с правами root:

cat /dev/input/event0 | xxd

Увидите поток шестнадцатеричных байт. Каждое нажатие и отпускание клавиши, это отдельное событие в реальном времени. Без всяких библиотек, без X11, просто файл и данные.

Такая архитектура позволяет, например, создавать виртуальные устройства ввода через /dev/uinput. Именно на этом работают эмуляторы геймпадов, утилиты переназначения клавиш вроде keyd и xremap, а также системы автоматизации тестирования интерфейсов.

Подсистема ввода выглядит скучной только снаружи. Внутри это аккуратная цепочка абстракций, где каждый слой знает ровно столько, сколько нужно.

Подпишись на создателей: https://t.me/linuxexex
CTRL+R все знают. А вот это — вряд ли.

В bash и zsh есть встроенная замена подстрок прямо в переменных, без sed, без awk, без лишних процессов.

Синтаксис простой:

${переменная/что_найти/на_что_заменить}

Одиночный слеш — заменяет первое вхождение. Двойной слеш — все вхождения сразу.

Пример. Есть путь:

path="/home/user/projects/user_data"

Хочешь заменить первый "user" на "admin":

echo ${path/user/admin}
Выведет: /home/admin/projects/user_data

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

echo ${path//user/admin}
Выведет: /home/admin/projects/admin_data

Никакого sed, никакого форка процесса. Всё делает сам шелл, в памяти, моментально.

Это работает и с другими операциями. Например, приведение строки к нижнему регистру — в bash 4+ и zsh:

str="Hello World"
echo ${str,,}
Выведет: hello world

К верхнему регистру:

echo ${str^^}
Выведет: HELLO WORLD

Одиночные запятая и крышка меняют только первый символ.

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

Ещё одна штука из той же оперы — удаление части строки по паттерну. Символ # удаляет совпадение с начала, % — с конца.

file="backup_2024_01_15.tar.gz"

Убрать расширение:

echo ${file%.tar.gz}
Выведет: backup_2024_01_15

Убрать префикс:

echo ${file#backup_}
Выведет: 2024_01_15.tar.gz

Двойные ## и %% — жадный режим, совпадение максимально длинное.

Всё это POSIX-совместимо в части базовой замены и обрезки. Операторы,, и ^^ — только bash 4+ и zsh.

Проверяй версию bash командой bash --version. На macOS до сих пор стоит bash 3.2 из-за лицензии — там регистровые операторы не работают. Либо ставь bash через homebrew, либо используй zsh, который там по умолчанию.

Канал linux.exe — @linuxexe

Подпишись на создателей: https://t.me/linuxexex
Когда-нибудь мы получим сверхсветовые скорости и сможем наблюдать наше прошлое как со спутника

Когда у нас появится движение быстрее света, мы сможем буквально догнать старый свет и смотреть на историю Земли в реальном времени. Хочешь узнать, прилетали ли инопланетяне? Просто прокрути назад. Хочешь понять, как на самом деле зарождались религии и кто придумал богов? Наблюдай вживую. Никаких мифов, никаких священных текстов, никаких споров — только картинка.

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

Свет от прошлого уже летит где-то в космосе. Нам просто нужно его обогнать.

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

Подпишись на создателей: https://t.me/linuxexex
Инструмент дня: ripgrep

Если ты до сих пор ищешь по проекту через grep -R, попробуй rg.

Пример:

rg "TODO|FIXME"

ripgrep быстрый, по умолчанию уважает .gitignore и удобно показывает контекст. Для больших репозиториев разница чувствуется сразу.

Полезные варианты:
rg -n "pattern" — с номерами строк
rg --files — список файлов проекта
rg -t py "async def" — искать только в Python-файлах

Один из тех инструментов, после которых назад возвращаться не хочется.

Подпишись на создателей: https://t.me/linuxexex
Один скрипт, пять дистрибутивов. Что пойдёт не так?

Взял простую задачу: развернуть небольшой веб-сервис на Python с зависимостями через pip, systemd-юнит и nginx как реверс-прокси. Классика. Прошёлся по пяти популярным дистрибутивам и записал, где споткнулся.

Ubuntu 24.04

Самый предсказуемый опыт. apt отработал без сюрпризов, nginx в репозитории свежий, systemd ведёт себя как ожидаешь. Единственная засада: Python 3.12 по умолчанию, и pip теперь требует виртуальное окружение, иначе ругается на externally-managed-environment. Пришлось добавить python3 -m venv в скрипт. Мелочь, но неподготовленного человека остановит.

Debian 12 Bookworm

Стабильность — это хорошо. Но nginx в репозитории версии 1.22, а нужна была фича из 1.25. Пришлось подключать официальный репозиторий nginx. Плюс та же история с pip и venv, что у Ubuntu. В остальном всё тихо и спокойно, как и положено Debian.

Fedora 40

Неожиданно приятно. dnf быстрее, чем ожидал. SELinux не заблокировал ничего сразу, но когда настраивал сокет для nginx, пришлось делать setsebool -P httpd_can_network_connect 1. Кто не знает про SELinux, потратит час на дебаг. nginx свежий, Python свежий, проблем с venv нет.

Arch Linux

Всё самое новое, пакеты актуальные, никаких костылей с репозиториями. Но здесь другая ловушка: systemd-юнит не заработал с первой попытки из-за того, что путь к Python в venv я прописал относительный. На остальных дистрибутивах это тоже не работало бы, просто там я это поймал раньше. Arch не прощает невнимательности, зато честно говорит что именно сломалось. journalctl -xe реально помог.

Alpine Linux

Отдельная история. Используется как база для Docker-образов, но я поднимал его на железе ради чистоты эксперимента. Нет systemd, есть OpenRC. Скрипт пришлось переписывать в части управления сервисами. apk быстрый, образ минимальный, но если вы берёте готовые инструкции из интернета, половина из них про systemd и работать не будет. nginx настраивается так же, зависимостей pip меньше, потому что musl вместо glibc иногда требует пересборки колёс.

Итог по дистрибутивам

Ubuntu и Debian: работает из коробки, но следите за версиями пакетов и новым поведением pip.

Fedora: хороший выбор, SELinux нужно понимать, иначе он вас будет злить.

Arch: для тех, кто читает что происходит, а не просто копипастит команды.

Alpine: совсем другой мир, если вы привыкли к systemd.

Главный вывод не в том, какой дистрибутив лучше. Главный вывод в том, что "один скрипт для всех" не существует. Даже такая простая задача требует учитывать пакетный менеджер, версии пакетов, систему инициализации и политики безопасности. Чем сложнее задача, тем больше расходятся пути.

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

Канал linux.exe

Подпишись на создателей: https://t.me/linuxexex
со старого ноутбука
и кстати откуда 12 просмотров
Intel Pentium N3540 и Nvidia GeForce 830M
@linuxexexbot притча дауна
Притча о топоре, совести и плохой арифметике

Однажды у канавы, где Петербург делал вид, что он город, а не мокрая папка с долгами сидел человек и держал рядом предмет с табличкой «старый чайник». Это был не просто предмет, а маленький самоварный философ, булькающий как совесть перед дедлайном. Человек смотрел на него так, будто эта вещь сейчас подпишет ему справку о величии.

И тут появился Сократ с лицом человека, который уже видел тысячу гениальных оправданий и ни одного нормального.

— Скажи мне, друг, — спросил он, — чем отличается великая идея от таракана в голове, если оба бегают ночью и мешают спать?

Человек вздрогнул. Петербург вокруг был мокрый, нервный и такой жёлтый, будто его рисовали не краской, а просроченной тревогой.

— Я хотел стать выше обстоятельств, а оказался ниже собственной отговорки.

— Значит, — сказал Сократ, — ты перепутал мысль с индульгенцией. Мысль должна освещать комнату, а не подсовывать тебе инструмент и шептать: «ну давай, докажи, что ты особенный».

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

Сократ поднял палец:

— Запомни: если для твоей правоты другому человеку надо исчезнуть как человеку, то это не правота. Это бухгалтерия страха. А страх, даже если надеть на него умное пальто, всё равно будет пахнуть подвалом.

С тех пор он боялся не закона, а секунды тишины, где всё наконец становится понятно.
jq -- это маленький, но дьявольски полезный инструмент командной строки для работы с JSON. Если ты хоть раз работал с API, логами или конфигами, то знаешь, как больно читать сырой JSON в терминале. jq решает это раз и навсегда.

Что умеет jq

Фильтрует, трансформирует и форматирует JSON прямо в терминале. Никакого Python-скрипта на три строки, никакого открытия браузера -- просто пишешь запрос и получаешь ответ.

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

Красиво напечатать JSON:
curl -s https://api.example.com/users | jq.

Вытащить конкретное поле:
cat data.json | jq '.name'

Получить массив имён из списка объектов:
cat users.json | jq '.[].name'

Отфильтровать только активных пользователей:
cat users.json | jq '[.[] | select(.active == true)]'

Сложить все цены в массиве:
cat orders.json | jq '[.[].price] | add'

Это не просто просмотрщик. jq -- полноценный язык запросов. Можно делать map, select, reduce, создавать новые объекты на лету, комбинировать фильтры через пайпы.

Реальный кейс

Допустим, тебе нужно из ответа GitHub API вытащить имена всех публичных репозиториев:

curl -s https://api.github.com/users/torvalds/repos | jq '.[].full_name'

Одна команда -- и у тебя список. Без скриптов, без парсинга вручную.

Установка

Debian/Ubuntu: apt install jq
Arch: pacman -S jq
macOS: brew install jq
Windows: winget install jqlang.jq

Есть и онлайн-версия -- jqplay.org, где можно тестировать фильтры прямо в браузере.

jq легко недооценить, пока не начнёшь использовать каждый день. После этого возвращаться к ручному разбору JSON физически больно.

linux.exe

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