GNU/Linux | Notes
2.42K subscribers
106 photos
6 files
70 links
Open Source, Dotfiles, Debian/Ubuntu, Software, Linux, Scripts, Notes, Terminal, Shell, Gnu, Tools, Games, Fun, Free Software Movement.

Автор: Кирилл Рехов
Почта: krekhov.dev@gmail.com
Кто я: https://xn--r1a.website/krxnotes/246
GitHub: https://github.com/krekhovx
Download Telegram
batcat

Это утилита для удобного просмотра файлов в терминале. Это расширенная версия команды cat:

- нумерация строк
- подсветка синтаксиса
- поддержка тем оформления
- просмотр с прокруткой (через less)

Обычно устанавливается как bat, но в Debian/Ubuntu называется batcat.

#utils
❤‍🔥8👍54🤔2👎1🥴1💊1
Выполнение команд в SubShell

Команда выполняется в текущем Shell:
$ ls


Команда выполняется во временном дочернем процессе — в SubShell:
$ (ls)


SubShell — это отдельная копия Shell, которая запускается для команд в круглых скобках. После выполнения команд внутри ( ) Subshell завершается, и все изменения (переменные, текущий каталог и т.п.) не сохраняются в основном Shell.

Пример изоляции:
$ cd /tmp
$ (cd /; ls)
$ pwd # по‑прежнему /tmp


Subshell позволяет временно менять окружение, не затрагивая основной shell-сеанс.

#shell
👍272
Управление фоновыми задачами в Shell

Запускает команду в фоне:
$ xlogo &


Список процессов:
$ ps


Список фоновых задач:
$ jobs


Только PID фоновых задач:
$ jobs -p


Отправить задачу в фон:
Ctrl + Z # остановить задачу (перевести в состояние Stopped)


Вернуть задачу с номером 1 на передний план:
$ fg %1


Продолжить выполнение в фоне:
$ bg %1


#shell
👍171
👍17
git-cherry-pick

Это команда, которая берет конкретный коммит из одной ветки и переносит его в текущую ветку, не сливая всю ветку целиком.

Для чего используется:
• Чтобы перенести один нужный коммит без merge всей ветки.
• Чтобы быстро забрать фикс или изменение из другой ветки.
• Чтобы исправить баги в релизной ветке, не таща лишнюю историю.

-> Как использовать
(перед этим нужно найти коммит, который нужно влить в ветку)

Переход в нужную ветку:
$ git checkout <branch>


Применить нужный коммит по его хэшу:
$ git cherry-pick <hash>


Отправить результат в репозиторий:
$ git push


Грубо говоря: cherry-pick — это "взять точечно один коммит и вставить его сюда".

#git
👍81🔥1
Система контроля версий

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

* Локальные системы контроля версий
* Централизованные системы контроля версий (CVS, SVN)
* Распределенные системы контроля версий (GIT)

Локальные системы контроля версий
Работают на одном компьютере и хранят историю изменений только локально. Примеры — простые инструменты, сохраняющие разницы файлов. Подход удобен для одиночной работы, но неудобен при командной разработке.

Централизованные системы контроля версий (CVS, SVN)
Централизованные системы контроля версий используют один главный сервер, на котором хранится весь репозиторий и вся история изменений, а разработчики получают только рабочие копии файлов и выполняют все операции — такие как коммиты, обновления или просмотр истории — через этот сервер. Такой подход упрощает администрирование и обеспечивает единое место управления проектом, но делает работу полностью зависимой от доступности сервера: без подключения разработчик не может ни сохранить свои изменения, ни получить новые.

Распределённые системы контроля версий (GIT)
Распределённые системы контроля версий дают каждому разработчику полный клон репозитория со всей историей, что позволяет выполнять коммиты, создавать ветки, экспериментировать и просматривать историю полностью локально, без доступа к сети. Обмен изменениями происходит только при необходимости, через push и pull, а отсутствие единого центра делает систему устойчивой: даже если удалённый сервер недоступен, работа продолжается, а множество локальных копий значительно упрощают параллельную и командную разработку.

#git #theory
👍3🤣1
Отладка ядра

Отладка ядра Linux напрямую (например, через gdb и vmlinux) обычно малоэффективна. Даже если загрузить символьный файл, большинство переменных будет отображаться как optimized out. Это происходит потому, что ядро нельзя собрать с флагом -O0: без оптимизаций оно будет слишком медленным, нестабильным и во многих случаях просто не загрузится. Поэтому vmlinux полезен в основном для просмотра структуры данных и отдельных символов, но не для полноценной пошаговой отладки.

Линус Торвальдс много раз подчёркивал: ядро — это не та система, которую нужно отлаживать классическим способом (breakpoint -> step -> step). Правильный подход — использовать трассировки и профилирование. То есть не "останавливать мир", а собирать информацию во время работы системы.

Итог: полноценная пошаговая отладка ядра на той же машине, где оно выполняется, невозможна и бессмысленна. Правильный путь — инструменты вроде printk, ftrace, perf, bpftrace, kprobes, tracepoints. Они дают детальную картину происходящего без остановки системы.

#kernel
👍104👎2
Как модули попадают в ядро Linux

Когда ядро обнаруживает необходимость в тех или иных функциональных возможностях, ещё не загруженных в память, оно вызывает helper kmod (через механизмы uevent/hotplug). Kmod в свою очередь запускает утилиту modprobe, а уже modprobe вызывает insmod. Посмотреть можно так:
$ systemctl status kmod


Утилиты modprobe, insmod, modinfo и другие - это просто ссылки на /bin/kmod, они ничем не отличаются как отдельные бинарники. Всем заправляет один kmod, можно вызвать /bin/kmod напрямую и он сам определит, какую "утилиту" вы имели в виду.

kmod и modprobe запускаются ядром автоматически, когда требуется загрузка определённого модуля. modprobe принимает на вход имя модуля или его alias.

У модулей есть alias. Например, модуль qrtr в выводе lsmod имеет такое имя. Его alias можно посмотреть в /lib/modules/*/modules.alias. Например: net-pf-42 -> qrtr

Это значит, что modprobe можно передавать один и тот же модуль:
$ modinfo qrtr
$ modprobe net-pf-42

(Примечание: modinfo ищет только по реальному имени файла модуля, alias понимает modprobe)

Затем modprobe просматривает /lib/modules/*/modules.dep. Этот файл описывает модули, которые требуют загрузки других модулей перед своей загрузкой - то есть зависимости. Файл создается командой:
$ depmod -a


Например, модуль qrtr-mhi.ko запрашивает загрузку qrtr.ko и mhi.ko:
kernel/net/qrtr/qrtr-mhi.ko: kernel/net/qrtr/qrtr.ko kernel/drivers/bus/mhi/host/mhi.ko


Затем modprobe вызывает insmod (указывая путь из /lib/modules/*/), который загружает сначала зависимые модули, затем нужный модуль.

insmod довольно "глуп" в отношении нахождения модулей, поэтому принимает абсолютные пути и нужный порядок вручную:
$ insmod /lib/modules/2.6.11/kernel/fs/fat/fat.ko
$ insmod /lib/modules/2.6.11/kernel/fs/msdos/msdos.ko


modprobe более "умный" - он ориентируется по modules.dep, поэтому достаточно передать имя:
$ modprobe msdos


Для загрузки модулей, собранных вне дерева ядра, полезно иметь включённый CONFIG_MODVERSIONS=y

Он не обязателен для загрузки модулей в принципе, но позволяет обеспечивать совместимость символов между версиями ядра и модулей (versioned symbols), что уменьшает риск получить ошибку при insmod.

#kernel #utils
👍10
Процессы в ядре Linux

В ядре существует понятие "ядерных потоков" или "потоков ядра" (kernel threads, kthreads) - это легковесные процессы, которые выполняются полностью в пространстве ядра и никогда не переходят в пространство пользователя. Они используются для различных фоновых задач: управление устройствами, обработка событий, обслуживание подсистем ядра и другие служебные функции. Большинство kthreads создаются при загрузке системы или динамически ядром по мере необходимости.

Есть также процессы kworker (kernel worker). Это универсальные фоновые рабочие потоки, обслуживающие работу подсистем workqueue. Они выполняют задачи, которые были отложены другими частями ядра: обработка таймеров, deferred work, обслуживание драйверов, ввод-вывод, управление памятью и многое другое. Kworker‑процессы автоматически создаются ядром, масштабируются по количеству CPU и не связаны с конкретным приложением - они обслуживают всю систему.

kthread - это любой обычный поток ядра, созданный через kthread_create. Он выполняет свою собственную задачу, прописанную автором кода.

kworker - это специальный тип kthread, который используется подсистемой workqueue. Эти потоки создаются и управляются автоматически ядром, а не вручную.

Каждый kworker - это kthread.
Но не каждый kthread - kworker.

#kernel
👍1521🤣1
ioctl()

Input/Output Control.
Это системный вызов в UNIX‑подобных системах, который позволяет отправлять драйверу устройства специальные команды, выходящие за рамки обычных операций read/write. Каждое устройство само определяет набор своих команд, поэтому ioctl даёт гибкий, но низкоуровневый механизм управления.

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

Используется для:
1. Выполнения операций, специфичных для устройства (например, очистка буфера).
2. Запроса информации, недоступной через read.
3. Настройки параметров драйвера или устройства.
4. Любых других операций, для которых нет стандартных системных вызовов.

Пример работы выглядит так.
В пользовательской программе вызывается команда:
ioctl(fd, IOCTL_GET_MSG, buffer)


Эта команда не читает данные напрямую, а сообщает драйверу: "выполни действие IOCTL_GET_MSG". Обычно для таких команд используются макросы _IOR, _IOW и _IOWR:
#define IOCTL_GET_MSG _IOR(MAJOR_NUM, 1, char*)


_IOR — получить данные из драйвера
_IOW — отправить данные драйверу
_IOWR — и отправить, и получить

В драйвере эти команды обрабатываются функцией ioctl, указанной в структуре file_operations:
struct file_operations Fops = {
.read = device_read,
.write = device_write,
.open = device_open,
.release = device_release,
.unlocked_ioctl = device_ioctl, // основной обработчик ioctl
.compat_ioctl = device_ioctl // нужен только для 32‑бит -> 64‑бит совместимости
};


Таким образом, ioctl создаёт "канал команд":
пользовательское приложение отправляет запрос -> драйвер получает код команды -> выполняет нужное действие -> возвращает результат.

Это простой способ расширить возможности устройства так, как нужно автору драйвера, не изобретая собственные протоколы поверх read/write.

#kernel
11👍51❤‍🔥1🔥1🤣1
Rust

Компилируемый системный язык, ориентированный на безопасность памяти и отсутствие неопределённого поведения, без GC (garbage collector). Позволяет писать низкоуровневый код с производительностью на уровне C/C++, но значительно безопаснее благодаря модели владения и строгой типизации.

Где полезен:
- Backend: высоконагруженные сервисы (Actix, Axum), микросервисы.
- Системное программирование: драйверы, ОС‑компоненты, сетевые стеки.
- WebAssembly: написание высокопроизводительных частей веб‑приложений.
- Безопасная работа с параллелизмом: многопоточные сервисы и runtime‑системы.
- Инструменты и CLI: cargo, ripgrep, fd, starship — многие современные утилиты пишутся на Rust.

Плюсы:
- Высокая производительность, сравнимая с C/C++.
- Отличная экосистема: crates.io, tokio, serde, tracing.
- Cargo: один из лучших менеджеров пакетов/сборки в мире.
- Строгий анализ на этапе компиляции предотвращает целые классы ошибок.
- Безопасность памяти без garbage collector — нет segfault, нет use‑after‑free.

Минусы/реалии:
- Компиляция тяжелее и медленнее, чем у C.
- Встраивание Rust в очень старые экосистемы (например, firmware) может быть сложным.
- Иногда низкоуровневые операции требуют unsafe (компилятор снимает с себя ответственность).
- Крутая кривая обучения из‑за модели владения и borrow checker (строго контролирует доступ к памяти).

Rust vs C/C++:
- Безопаснее C/C++ благодаря строгой модели владения.
- Но C всё ещё проще интегрировать в старые системы и ABI стабильнее.
- Производительность сопоставима или выше, особенно в многопоточных задачах.
- Для embedded Rust часто удобнее C++, но не всегда доступен на самых низких MCU.

Rust в ядре Linux:
- Rust официально принят в mainline Linux (начиная с 6.1).
- Поддержка пока ограничена, но активно развивается.
- Можно писать драйверы и части подсистем ядра, но API Rust в ядре ещё не полный.
- В ядро Rust включён не для переписывания всего, а для безопасных новых драйверов.
- Модули ядра на Rust уже возможны, но только те, которые используют предоставленный Rust‑абстракционный слой (kernel crate).

Где Rust нужен в Linux:
- Пользовательские утилиты: многие современные CLI (ripgrep, exa, fd, bat, starship) уже стандарт-де-факто.
- Внутренние абстракции ядра: безопасные обёртки над указателями, блокировками, refcount, pinning.
- Рендеринг и графика: wgpu (кроссплатформенный WebGPU/Vulkan/Metal/DX12 backend), rend3.
- Игры: на Rust пишут игры и игровые движки с поддержкой Linux (Bevy, Fyrox, Amethyst).
- Новые драйверы: сетевые, USB, storage, сенсоры — безопасное ядро без use-after-free.
- Аудио и DSP: rodio, kira, cpal.
- WebAssembly: выполнение WASM‑модулей на Linux (wasmtime, wasmer).
- DevOps/инфраструктура: контейнерные рантаймы, файловые утилиты, CI‑инструменты.
- Сетевые сервисы: высокопроизводительные backend‑приложения под Linux (Axum, Actix).
- Security‑инструменты: сканеры, песочницы, анализаторы (Rust популярен в security‑комьюнити).
- Файловые системы и блочные устройства: есть исследования и эксперименты по FUSE‑драйверам на Rust.

Сложность:
- Порог входа выше среднего.
- Но после понимания модели владения продуктивность высокая.
- Отлично подходит для кода, где важна безопасность + скорость.

Итог: Rust — мощный системный язык, который сочетает скорость C с безопасностью на уровне высокоуровневых языков (Rust ведёт себя по скорости как C). Подходит для драйверов, системного ПО, сетевых сервисов и CLI. Linux уже официально поддерживает Rust, и будущее ядра включает постепенное расширение Rust‑подсистем для безопасных драйверов и новых модулей.

#misc #kernel
💊95👻53👎32🔥2🆒1🦄1
Debian тестирует Debusine, систему индивидуальных репозиториев в стиле PPA

Новость: https://www.opennet.ru/opennews/art.shtml?num=64446

#debian
31
😁34🔥5
Спасибо, что читаете канал и остаётесь здесь — ваша поддержка всегда придаёт сил. Я продолжаю собирать здесь полезные материалы по Linux, чтобы канал оставался уютным и полезным. Ведение канала требует времени и вложений, но я делаю всё бесплатно и без рекламы. Если мой канал помогает и вдохновляет вас, и вы хотите как‑то поддержать, даже небольшой вклад имеет значение. Все средства пойдут на новый ноутбук — мой основной рабочий инструмент. Спасибо!

Поддержать канал:
2202 2036 6907 4603

#info
🔥3918🤝14👍5❤‍🔥2👌1
😁19❤‍🔥11🔥21💯1
Скоро новый год! :D
😁188🔥5👍21🎄1
С новым 2026 годом, друзья! На календаре 01/01/2026 — самое время немного выдохнуть, расслабиться и позволить себе заслуженный отдых. В этом году Linux отмечает 35 лет, Debian — 33, а Ubuntu исполняется 22 года, напоминая нам, что великие вещи создаются сообществом и живут десятилетиями. Пусть 2026 принесёт вам стабильных релизов, минимум багов и бесконечный поток вдохновения. Желаю вам новых идей, удачных коммитов и получать удовольствие от IT и Linux.

Happy New Year, geeks! 👺🎉

#info
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄3213🤝1
Я составил список открытых игр для Debian/Ubuntu и рассмотрел самые достойные проекты, которые можно установить прямо из репозиториев. В него вошли стратегии, платформеры, гонки, шутеры и другие популярные открытые игры. Это не полный перечень, а лишь подборка самых интересных и качественных игр (на мой взгляд). Возможно, кому‑то пригодится и поможет открыть для себя новый опыт. Прежде чем углубляться в игры для Linux, помните: это не Steam, а лишь игры, созданные энтузиастами (just for fun), не нужно это критиковать и обесценивать :)

Первым делом советую обратить внимание на культовые проекты в Open Source среде: SuperTux, SuperTuxKart, Wesnoth, 0 A.D., OpenArena, Freeciv.

> Список

#games #opensource #fun
11❤‍🔥932👍1
ИИ нас заменит? (нет)

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

Технологии всегда приходили волнами. В музыке появлялись синтезаторы — и все говорили о конце живых музыкантов. Потом появились DAW (Digital Audio Workstation) — и предсказывали исчезновение композиторов. Но результат был противоположным: инструменты расширили возможности, а не заменили людей. С ИИ сейчас происходит то же самое.

В программировании история похожа. Появление высокоуровневых языков "убивало" ассемблерщиков. Фреймворки "убивали" ручную веб‑разработку. GitHub, StackOverflow и автодополнение считались "костылями". Но в итоге разработчики стали писать быстрее и чище, а системы, которые мы строим, стали гораздо сложнее и мощнее.

ИИ — это следующая ступень. Он ускоряет рутину:
- подсказывает варианты решения
- помогает со структурой
- генерирует шаблоны
- объясняет код
- ищет баги

Но ключевые вещи остаются за человеком:
- архитектура
- постановка задач
- понимание контекста
- инженерное мышление
- ответственность за продукт

ИИ хорошо генерирует, но плохо понимает. Он не знает, что нужно твоему проекту, пользователю, бизнесу или инфраструктуре. Он не создаст архитектуру под реальные ограничения, не возьмёт на себя риски и не сгладит непредвиденные углы производства. Это делает инженер (человек).

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

Бояться нечего. Писать код, учиться новому, экспериментировать с Linux и инфраструктурой — всё это по‑прежнему важно. ИИ остаётся инструментом — мощным, удобным, но всё ещё инструментом. А инструменты, как показывает история, не вытесняют инженеров. Они делают их сильнее.

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

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

#thoughts
💯29👍6👎21🔥1
Мир кликбейта

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

Например, вот интересное определение интернета из одной моей любимой книги:

Интернет — международная клоака, куда сбрасывается весь информационный мусор со всех стран мира. Сейчас сложно получать информацию из первых рук, минуя посредников, интерпретирующих ее по своему уразумению, а еще хуже по заданию третьего лица. Из книги "Информационная война и безопасность" Брусницын Н.А.

Я в целом ненавижу современный интернет и социальные сети. Сейчас он очень перегружен информационным мусором, рекламой и бесконечными кликбейтами. Интернет превратился в помойку, где ценится не глубина, а внимание. Алгоритмы продвигают то, что вызывает эмоции — чаще всего негативные, резкие или провоцирующие. Поэтому качественный, спокойный и вдумчивый контент тонет под слоями шума. Пользователь становится не получателем информации, а объектом, за чьё внимание борются всеми возможными способами.

Раньше было лучше! Были различные душевные форумы, где люди знакомились и общались, была ICQ, старый VK с голосами и рейтингом =) старый Skype, браузерные игры, RPG игры типо Lineage / Last Chaos / RF Online, было весело и лампово, ощущалась свобода. Некоторые знакомились, встречались, собирались и обсуждали. А сейчас... это дно, кликбейты, скам, накрутки, боты, манипуляции мнениями, подмена понятий, байты на комментарии, реклама казино и ставок, всё это мерзко.

Недавно я видел новость о погоде в каком-то канале, что в Москве будет НУ ОЧЕНЬ ХОЛОДНАЯ ЗИМА, НАСТОЛЬКО ХОЛОДНАЯ И МРАЧНАЯ, ЧТО Я АЖ ОБСИКАЛСЯ. Они писали эту новость так, будто нас ждёт конец света. Через две недели я увидел другую новость в этом же канале, что зима будет комфортная/обычная. Это и есть так называемый кликбейт. На фоне различных страхов привлекается внимание к посту, написанному на коленке, и затем продаётся куча рекламы. Её скупают, и админ — или даже целые команды в крупных каналах — зарабатывают большие деньги.

Самое моё любимое — это кликбейты на здоровье. Их тоже довольно много, врачи ушли в интернет и начали привлекать внимание к своим услугам через кликбейты. Они записывают сильно преувеличенные посты =) ИНСУЛЬТ В 30 ЛЕТ, ЧАСТЫЕ ПРИЧИНЫ!? ОДИН БОКАЛ АЛКОГОЛЯ РАЗРУШАЕТ СЕРДЦЕ НА МОЛЕКУЛЫ. ВАМ ЗАЩЕМИЛО ШЕЮ!? НАСТАЛ КОНЕЦ ЖИЗНИ. Уже доходит до абсурда.

Ещё меня смешат различные кликбейты‑предсказания. В 2026 ГОДУ БУДЕТ КРАХ ЭКОНОМИКИ И НАЧНЁТСЯ ЭКОЛОГИЧЕСКАЯ ВОЙНА. Эти эмоциональные нагревания не несут за собой ни сколечки фактов, тем более человек — такое существо, что он не знает, что будет в будущем, никто не знает. но нет )) Вася Пупкин с Ютуба сейчас нам расскажет, как жить, куда уезжать, что покупать, что будет и т. д.

О, и наши всеми любимые "женщины" всё чаще выкладывают свои глупые, вульгарные мыслишки, рассуждения о мужчинах, отношениях, семье и финансах, пытаясь делать на этом кликбейты и псевдомораль, хотя у самих ни гроша за душой — глупые, ленивые и вечно обиженные. Никакая косметология им не помогает, хотя они вкладывают в эту сферу огромные деньги. Больше всего меня удивляет, как мы, мужчины, всё это терпим. И да, у меня есть знакомые, которые очень неплохо зарабатывают в крупных компаниях, и они почему‑то одиноки… может, дело не в финансах?

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

#thoughts
💯21😢32😁2👎1