LinuxCamp | DevOps
Обо мне: C/C++/Linux эксперт. Говорим про разработку, Linux, DevOps, сети и администрирование. Админ (реклама): @XoDefender Чат: @linuxcamp_chat Менеджер: @Spiral_Yuri Биржа: https://telega.in/c/linuxcamp_tg РКН: https://clck.ru/3RWA3C
نمایش بیشتر📈 تحلیل کانال تلگرام LinuxCamp | DevOps
کانال LinuxCamp | DevOps (@linuxcamp_tg) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 13 926 مشترک است و جایگاه 9 160 را در دسته فناوری و برنامهها و رتبه 47 344 را در منطقه روسيا دارد.
📊 شاخصهای مخاطب و پویایی
از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 13 926 مشترک جذب کرده است.
بر اساس آخرین دادهها در تاریخ 09 ژوئیه, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -116 و در ۲۴ ساعت گذشته برابر -26 بوده و همچنان دسترسی گستردهای حفظ شده است.
- وضعیت تأیید: تأیید نشده
- نرخ تعامل (ER): میانگین تعامل مخاطب 21.35% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 11.55% واکنش نسبت به کل مشترکان کسب میکند.
- دسترسی پستها: هر پست به طور میانگین 2 974 بازدید دریافت میکند. در اولین روز معمولاً 1 608 بازدید جمعآوری میشود.
- واکنشها و تعامل: مخاطبان بهطور فعال حمایت میکنند؛ میانگین واکنش به هر پست 24 است.
- علایق موضوعی: محتوا بر موضوعات کلیدی مانند linuxcamp, ядро, linux, диск, docker تمرکز دارد.
📝 توضیح و سیاست محتوایی
نویسنده این فضا را محل بیان دیدگاههای شخصی توصیف میکند:
“Обо мне: C/C++/Linux эксперт. Говорим про разработку, Linux, DevOps, сети и администрирование.
Админ (реклама): @XoDefender
Чат: @linuxcamp_chat
Менеджер: @Spiral_Yuri
Биржа: https://telega.in/c/linuxcamp_tg
РКН: https://clck.ru/3RWA3C”
به لطف بهروزرسانیهای پرتکرار (آخرین داده در تاریخ 10 ژوئیه, 2026)، کانال همواره بهروز و دارای دسترسی بالاست. تحلیلها نشان میدهد مخاطبان بهطور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامهها تبدیل کردهاند.
$ ls --human-readable --size -1 -S --classify
Каждый раз набирать команду с таким количеством параметров не слишком удобно и хорошо бы это дело как-то сократить. Можно воспользоваться alias и определить ярлык для данного вызова:
$ alias lsrt='ls --human-readable --size -1 -S --classify'
Теперь запуск lsrt приведет к тому же результату, что и использование ls с параметрами.
Если нам больше не нужен ярлык, мы можем воспользоваться командой "unalias" и удалить его:
$ unalias lsrt
$ lsrt
Command 'lsrt' not found
Если требуется вывести значение конкретного псевдонима, запустите alias и передайте его имя в качестве аргумента:
$ alias g
alias g='grep'
Важно: после начала нового сеанса оболочки псевдоним пропадет, а при попытке его использовать мы получим ошибку следующего вида:
<your-alias-name> : command not found.
Создание постоянных псевдонимов
Давайте, для начала, посмотрим, какие псевдонимы уже заданы в системе и доступны для текущей сессии:
$ alias
alias l='ls -CF'
alias la='ls -A'
...
Хммм, интересно, почему я ничего еще не делал, а уже что-то определено...
Да, в зависимости от дистрибутива, определенный набор псевдонимов уже будет заранее задан.
Как правило, найти и определить глобальные псевдонимы можно в скрипте "~/.bashrc", который выполняется каждый раз при инициализации оболочки:
$ cat ~/.bashrc | grep alias
alias la='ls -A'
alias l='ls -CF'
Вот и они - те самые псевдонимы. Таким образом, для того, чтобы наш ярлык был доступен в разных терминалах целевого пользователя, нам требуется прописать его в локальном файле "~/.bashrc".
Если вы хотите, чтобы ваши алиасы были доступны для всех юзеров системы, необходимо использовать файл "/etc/bash.bashrc".
Linux++ | IT-Образование
$ lsmod
Module Size Used by
tcp_lp 12663 0
bluetooth 372662 7 bnep
rfkill 26536 3 bluetooth
Результат дает нам следующую информацию:
1) Module - название модуля, выгруженного в память;
2) Size - количество памяти (в килобайтах), которое занимает модуль;
3) Used by - количество экземпляров модуля, используемое в настоящее время. Нулевое значение означает, что модуль не используется и его можно безопасно выгрузить.
Разделенный запятыми список после числа показывает, какие модули использует экземпляр;
Вывод информации о модуле
Команда modinfo отображает дополнительную информацию о модуле:
$ modinfo i915
filename: /lib/modules/6.8.12-060812-generic/kernel/drivers/gpu/drm/i915/i915.ko.zst
license: GPL and additional rights
description: Intel Graphics
author: Intel Corporation
...
Загрузка модулей в рантайме
Как уже говорилось, подгрузка модулей - эффективный способ расширить функционал ядра. Как загрузить модуль? Использовать команды modprobe и insmod:
1) modprobe - умная команда, которая анализирует файл modules.dep, чтобы сначала загрузить зависимости, потом уже сам модуль:
$ modprobe i915
$ lsmod | grep i915
i915 4268032 53
2) insmod - более простая и менее гибкая команда, которая загружает модуль без проверки зависимостей:
$ insmod helloWorld.ko Welcome to Hello world Module.Выгрузка модулей в рантайме При необходимости можно удалить модули из работающей системы. Это также можно выполнить 2 способами: использовать rmmod или modprobe -r. Последняя используется для более безопасного удаления, учитывая зависимости. При выгрузке модуля через rmmod, остальные, которые от него зависят, будут пытаться функционировать. Также команда поддерживает опцию "--force", которая ингода может быть полезна для агрессивной выгрузки:
$ rmmod module.ko
Goodbye, from module
$ modprobe -r module.ko
Goodbye, from module
Исключение модуля из автоматической загрузки
Для того, чтобы не загружать модуль на этапе бута системы, его требуется добавить в ЧС - файл blacklist.conf:
$ cat /etc/modprobe.d/blacklist.conf
blacklist eepro100
blacklist evbug
Такой прием бывает полезен, если требуется отключить проблемное оборудование или драйверы.
Автозагрузка модулей
Для того, чтобы каждый раз не производить ручную загрузку модулей, работать с которыми требуется регулярно, существует отдельный каталог, в котором можно настроить автоматическую загрузку модулей на старте системы "/etc/modules-load.d/".
В каталоге хранятся конфиги, содержащие наименования необходимых модулей:
$ cat modules.conf
video
e1000
serio_raw
При следующем запуске системы, указанные в файле модули, будут автоматически загружены.
Linux++ | IT-Образование
/boot/vmlinuz-6.8.0-47-generic
Такая архитектура имеет ряд недостатков, например, невозможность установки новых драйверов без полной пересборки. Разработчики думали, думали и нашли решение этой проблеме, проработав систему модулей.
Сегодня ядро позволяет драйверам оборудования, файловых систем, и некоторым другим компонентам быть скомпилированными отдельно - в качестве модулей.
Модуль ядра - это программа, которая может отсоединяться от ядра и присоединяться к нему по необходимости, без повторной его компиляции и перезагрузки системы.
В общих терминах, модуль можно описать, как плагин, который расширяет функциональность ядра.
Такой подход не свел монолитность на нет - ядро таковым и осталось, за счет того, что работает вместе с модулями в одном адресном пространстве.
Находятся все модули в директории "/lib/modules/". Учитывая то, что они собираются под каждую отдельную версию ядра, в этом каталоге выстраивается структура папок - по штуке на установленную версию:
$ cd /lib/modules
$ ls
6.10.1-061001-generic 6.11.0-9-generic 6.8.0-060800-generic 6.9.0-060900-generic
В директории целевого ядра находятся, как сами модули, так и дополнительные конфиги:
$ cd 6.8.12-060812-generic
$ ls
build
modules.builtin
modules.dep.bin
kernel
...
В ОС Linux все модули имеют расширение .ko (kernel object) или .ko.zst (модуль, сжатый с помощью алгоритма Zstandard). Подгружаются они, как правило, на этапе бута системы.
Помните, я тут недавно жаловался на драйвер i915, который в старых ядрах очень несовместим с некоторыми intel процессорами. Давайте посмотрим, где он засел:
$ find /lib/modules/$(uname -r) -name *.ko* | grep i915
/lib/modules/6.8.12-060812-generic/kernel/drivers/gpu/drm/i915/i915.ko.zst
Сегодня мы узнали, что такое модуль ядра. В следующей публикации дополнительно расширим спектр скиллов и рассмотрим основные команды администрирования модулей.
Linux++ | IT-Образование
$ cat ~/.bash_history
history | grep qdbu
qdbus org.kde.KWin /Compositor suspend
Посмотреть историю можно и более простым способом - выполнить команду history. Эта команда выведет содержимое .bash_history, добавив слева номер:
$ history
6 exit
7 docker ps
Если набрать "history 5", то отобразятся только пять последних введенных команд:
$ history 5
1498 sudo reboot
1499 cat ~/.bash_history
...
При необходимости историю всегда можно погрепать:
$ history | grep export
174 export HOME=/tmp
183 history | grep export
Еще один способ - использовать комбинацию Ctrl+R прямо в оболочке. После нажатия клавиш начинается поиск:
$ (reverse-i-search)`qdb': qdbus org.kde.KWin /Compositor suspend
Настройка истории Linux
По умолчанию, команда history дополняет .bash_history только порядковым номером, но вы можете выводить еще и дату выполнения команды. Для этого нужно экспортировать переменную HISTORYFORMAT вместе нужным форматом:
$ export HISTTIMEFORMAT='%F %T '
$ history
1503 2024-10-28 11:17:56 cat ~/.history
Также можно отключить вывод одинаковых команд:
$ export HISTCONTROL=ignoredups
Вы можете указать какие команды не стоит отображать, например, не будем выводить ls -l, pwd и date:
$ export HISTIGNORE='ls -l:pwd:date:'
Linux++ | IT-Образование
$ sudo apt install flatpak
$ flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
Установка Mission Center
$ flatpak install flathub io.missioncenter.MissionCenter
$ flatpak run io.missioncenter.MissionCenter
2. Во втором случае путь один - ручная сборка через исходники. Подробная инструкция по установке содержится в GitLab репозитории проекта: ИСХОДНИКИ.
Сайт проекта: Mission Center.
Linux++ | IT-Образование
$ ps
PID TTY TIME CMD
107468 pts/1 00:00:00 bash
107747 pts/1 00:00:00 ps
C этой командой вам нужно быть довольно точным в требованиях. Если вы хотите посмотреть на полный список процессов, запущенных целевым пользователем, вам нужно попросить именно об этом:
$ ps -u xodefender | grep picom
109331 ? 00:00:00 picom
Если мы посмотрим на вывод с флагом "--help", то поймем, что команда на столько обширная, что и для "--help" есть ряд параметров:
$ ps --help
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
Возможных флагов и комбинаций, на самом деле, уйма. На практике, чаще всего, используется именно следующая запись "ps -aux", где:
'a' говорит о выводе процессов всех пользователей;
'u' требует отобразить пользователя, которому принадлежит процесс;
'x' просит вывести процессы, которые не привязаны к управляющему терминалу (TTY) - демоны и другие фоновые процессы.
$ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 23128 13352 ? Ss 08:57 0:07 /sbin/init
Команды для убийства процессов "kill/pkill":
Бывает же такое, программа просто перестает отвечать на запросы. Да, знаю, частенько бывает. В таком случае может быть полезно, во что бы то ни стало, уничтожить подвисший процесс. Сделать это можно с помощью команд "kill" и "pkill".
Команда "kill" требует указать id процесса, который необходимо терминировать:
$ kill 109331
Работает это через отправку сигнала целевому процессу. Без явного указания, команда пытается "убить" процесс с помощью сигнала "SIGTERM", которые не гарантирует полное и сиюсекундное терминирование.
Для того, чтобы по-настоящему "убить" процесс, требуется отправить сигнал "SIGKILL", который находится под 9 номером:
$ kill -9 109331
Список всех сигналов можно получить через флаг '-l':
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP ...
Утилита "pkill" позволяет оперировать именами, а не идентификаторами и отправляет сигнал она всем процессам с указанным именем:
$ pkill -9 picom
Команда для получения id процесса "pgrep":
pgrep позволяет находить идентификаторы (PID) запущенных процессов на основе заданных критериев: имя процесса, его владелец и т.д. Для того, чтобы получить (PID) процесса по его имени, следует выполнить:
$ pgrep picom
109331
Команды для оценки потребления ресурсов системы "top/htop":
Их использование полезно для анализа процессов и определения того, сколько CPU тратится на их выполнение, какое потребление оперативной памяти и т.д. htop является более продвинутой версией, но, в своей основе, они используются для идентичных целей:
$ top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 106676 xodefen+ 20 0 495180 92356 63828 S 1.0 2.3 0:34.08 Xorg
Linux++ | IT-Образование
# читаем мануал к программе
$ man picom
# смотрим на список установленных файлов
$ dpkg -L picom
Для удобства, в последнем случае можно "грепнуть" вывод, т.к. обычно конфиги заканчиваются ".cnf" и ".conf":
$ dpkg -L picom | grep -e .conf -e .cnf
/usr/share/doc/picom/examples/picom.sample.conf
Также стоит упомянуть тот факт, что конфиги бывают пользовательскими и системными. Пользовательские, как правило, имеют больший приоритет и расположены в скрытой директории внутри хомяка "~/.config". Системные, в свою очередь, где-то внутри "/etc/":
$ dpkg -L openssl | grep -e .conf -e .cnf
/etc/ssl/openssl.cnf
Общение через переменные окружения
Приложение может поддерживать коннект с пользователем и обрабатывать запросы в том числе и через переменные. Если мы посмотрим на мануал к проекту mesa, сколько же там всего можно проконтролировать, оставляю ссылочку. Аналогичная история и с такими проектами, как gtk, kwin и т.д.
Если приложение допускает кастомизацию одних и тех же параметров и через файлы и через проставление переменных окружения, то переменные, как правило, имеют больший приоритет.
Общение через переменные происходит обычно по 3 сценариям:
1) мы определяем переменную для конкретного пользователя, например через файл "~/.bashrc". В таком случае, каждый раз, как пользователь открывает сессию, переменная становится видимой для приложений внутри:
$ cat ~/.bashrc
export SOME_VARIABLE="some value"
2) мы определяем общесистемную переменную "/etc/environment", которая доступна приложениям любой сессии и всем пользователям:
$ cat /etc/environment
SOME_VARIABLE="some value"
3) мы передаем переменную программе на старте. В результате, только целевая программа и ее потомки будут видеть переменную и смогут с ней работать:
$ SOME_VARIABLE="some value" picom
Общение через аргументы командной строки
Еще одна полезная опция - передавать программе определенный пулл параметром через CLI (Command line interface) в момент запуска. Такой формат очень распространен в "no-GUI" утилитах, работа с которыми происходит исключительно в командной строке: nmcli, pkcs11-tool, ssh и т.д.:
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Список параметров программа, как правило, выдает через флаг "--help":
$ nmcli --help
nmcli [ПАРАМЕТРЫ] ОБЪЕКТ { КОМАНДА | help }
ПАРАМЕТРЫ
-a, --ask запрос отсутствующих параметров
Linux++ | IT-Образованиеисточник.приоритет действие # Записывать все сообщения от ядра в файл kern.log kern.* /var/log/kern.logПрограммный интерфейс syslog Программный интерфейс syslog состоит из трех основных функций, которые входят в пространство "syslog.h": 1. Функция openlog() устанавливает настройки, которые по умолчанию применяются ко всем последующим вызовам syslog():
void openlog(const char *ident, int log_options, int facility);
openlog("slog", LOG_PID|LOG_CONS, LOG_DAEMON);
2. Функция syslog() записывает сообщения в журнал:
void syslog(int priority, const char *format, ...);
syslog(LOG_INFO, "Hello world ... ");
3. Функция closelog() вызывается после окончания записи сообщений, чтобы разорвать соединение с журналом:
void closelog(void);
Если не прорабатывать конфиги и не указывать альтернативные пути вывода сообщений для различных источников, то последовательное выполнение функций выше приведет к появлению лога в файле "/var/log/syslog":
xodefenderpc slog[754521]: Hello world ...Linux++ | IT-Образование
$ sudo apt install alien
Для преобразования .deb файла в .rpm с изменением стандартных для Debian инсталляционных скриптов используется опция -r. На выходе получится RPM-пакет:
$ sudo alien -r --scripts <some_pkg>.deb
<some_pkg>.rpm generated
Для преобразования .rpm файла в .deb используется опция -d. На выходе получится DEB-пакет:
$ sudo alien -d --scripts <some_pkg>.rpm
<some_pkg>.deb generated
За дополнительной информацией об утилите направляю вас прямо в мануал.
Linux++ | IT-Образование
$ sudo apt update
2. Обновляет все установленные пакеты до актуальных версий, НО существующие пакеты не удаляет.
Если для обновления требуется удаление/установка зависимостей, оно пропускается, и пакет остается нетронутым в текущей версии:
$ sudo apt upgrade
3. Обновляет все установленные пакеты до актуальных версий, устанавливает или удаляет пакеты для разрешения зависимостей:
$ sudo apt dist-upgrade
4. Устанавливает пакет вместе со всеми его зависимостями:
$ sudo apt install <имя_пакета>
5. Переустанавливает пакет и обновляет все его содержимое. Бывает полезно, если какие-то файлы пакета были удалены или повреждены:
$ sudo apt install --reinstall <имя_пакета>
6. Удаляет указанный пакет, но оставляет файлы конфигурации:
$ sudo apt remove <имя_пакета>
7. Полностью удаляет пакет и его конфигурационные файлы:
$ sudo apt purge <имя_пакета>
8. Показывает информацию о пакете: версия, зависимости, описание, размер и т.д.:
$ sudo apt show <имя_пакета>
9. Ищет пакеты в репозиториях по имени или описанию:
$ sudo apt search <имя_пакета>
10. Удаляет пакеты, которые были установлены как зависимости, но больше не требуются:
$ sudo apt autoremove
11. Удаляет все загруженные архивы пакетов из кэша "/var/cache/apt/archives/":
$ sudo apt clean
Основные команды dpkg
1. Устанавливает пакет из локального файла .deb и не подтягивает зависимости:
$ sudo dpkg -i <имя_пакета.deb>
2. Удаляет пакет, но сохраняет конфигурационные файлы:
$ sudo dpkg -r <имя_пакета>
3. Полностью удаляет пакет и его конфигурационные файлы:
$ sudo dpkg -P <имя_пакета>
4. Показывает список всех установленных пакетов либо информацию о конкретном пакете:
$ dpkg -l
$ dpkg -l <имя_пакета>
5. Выводит подробную информацию о пакете/пакетах:
$ dpkg -s
$ dpkg -s <имя_пакета>
6. Показывает список файлов, установленных данным пакетом:
$ dpkg -L <имя_пакета>
7. Показывает содержимое архива .deb (файлы, которые будут установлены):
$ dpkg -c <имя_пакета.deb>
8. Доводит конфигурацию пакета/пакетов до конца при аварийном завершении:
$ sudo dpkg --configure -a
$ sudo dpkg --configure <имя_пакета>
9. Показывает имя пакета, который устанавливает указанный файл:
$ dpkg -S picom.desktop
picom: /etc/xdg/autostart/picom.desktop
Linux++ | IT-Образование
#include <unistd.h>
int chroot(const char *pathname);
Затем все абсолютные имена путей интерпретируются, как начинающиеся с указанного местоположения в файловой системе. Иногда это называют заключением в клетку chroot, поскольку программа оказывается замкнутой внутри некоторой части файловой системы.
Моменты, которые стоит учитывать при работе с chroot
Следует 100% помнить, что вызов chroot() не меняет текущий рабочий каталог процесса. Для обеспечения полной безопасности, либо перед, либо после chroot() необходимо выполнить вызов chdir(), иначе процесс сможет использовать относительные пути для доступа к ресурсам вне клетки.
Также, при переходе в пространство chroot, вы можете столкнуться с тем, что ничего не работает) Это и не удивительно, как оболочка будет выполнять команды, которых для нее просто не существует...
Для решения проблемы вам может понадобиться перенести ряд библиотек и программ из "реальной" корневой системы в имитированную либо использовать команду debootstrap, но это уже отдельная история)
Linux++ | IT-Образование