fa
Feedback
LinuxCamp | DevOps

LinuxCamp | DevOps

رفتن به کانال در Telegram

Обо мне: 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)، کانال همواره به‌روز و دارای دسترسی بالاست. تحلیل‌ها نشان می‌دهد مخاطبان به‌طور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامه‌ها تبدیل کرده‌اند.

13 926
مشترکین
-2624 ساعت
-527 روز
-11630 روز
آرشیو پست ها
💻 Зарубежные рабочие столы в пару кликов! Арендуй рабочий стол по самой низкой цене: - Обходи любые ограничения, - Управляй системой через ТГ бот, - Оплачивай картой или криптой. От 1000₽ за сервер. Акция до 30 ноября. 🌍 Переходи в наш бот и мгновенно подключайся к нужному серверу уже сейчас: https://t.me/rd_portal_bot

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

$ 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 - простая утилита, которая не принимает никаких опций или аргументов. Все, что делает команда - читает файл "/proc/modules" и отображает его содержимое в хорошо отформатированном списке:

$ 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-Образование

Модуль ядра — ключ к расширению возможностей Linux Как вы знаете, или, может быть, слышали, ядро Linux изначально задумывалос
Модуль ядра — ключ к расширению возможностей Linux Как вы знаете, или, может быть, слышали, ядро Linux изначально задумывалось монолитным - весь функционал отрабатывает в рамках одной программы:

/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-Образование

Буст в карьере для прикладных администраторов! Регистрируйся на онлайн-интенсив в Открытых школах Т1 и прокачай навыки беспла
Буст в карьере для прикладных администраторов! Регистрируйся на онлайн-интенсив в Открытых школах Т1 и прокачай навыки бесплатно всего за 1 месяц. Это твой шанс получить оффер от Т1🔝 — крупнейшей ИТ-компании по выручке в России по версии RAEX и CNews Analytics 2023. В портфеле компании 800+ высокотехнологичных проектов и 70+ продуктов и услуг. Зачем участвовать? 🔹 Попасть в число лучших. Проекты Т1 ежегодно побеждают в ИТ-конкурсах: Global CIO, Национальной банковской премии и др. 🔹Быстрее вырасти в мидла. Уникальный карьерный фаст-трек для выпускников Открытых школ помогает молодым специалистам прокачаться до уровня мидла в Т1 за 1,5 года. 🔹Работа в бигтехе, где есть ДМС, удалёнка и крутые офисы, спорт и обучение, митапы, программы развития и др. ⌛️ Быстрое обучение: 1 месяц. 💻 Гибкий формат: все этапы онлайн, занятия по вечерам. Присоединяйся — подавай заявку до 8 ноября! #реклама О рекламодателе

Старость - не радость! Сейчас с дистрибутивами такая история, что несколько версий ядра может быть доступно пользователю на э
Старость - не радость! Сейчас с дистрибутивами такая история, что несколько версий ядра может быть доступно пользователю на этапе установки системы. Причем, рекомендованым к установке - тем, что средней опытности юзер, вероятнее всего, поставит, необязательно будет самое передовое. Тут, конечно, на помощь приходят ядерщики, которые патчат ядра и активно следят за тем, чтобы все они работали корректно на разных системах в разных условиях. Но за всем не уследишь. На днях, что вы думаете, нашел очередную проблему в модуле ядра - драйвере i915... По итогу, уже 2 очень неприятных графических бага решаются просто поднятием версии до плюс-минус актуальной. Больше шансов столкнуться с проблемами у тех пользователей, которые сидят на старых ядрах и новом железе. Какие-то шестеренки linux kernel могут очень тяжело прокручиваться на вашем 144Гц мониторе или, к примеру, intel I9 последнего поколения. В результате хочется отметить, что иногда простое обновление ядра до актуальной версии может быть быстрым и эффективным решением многих багов. Linux++ | IT-Образование

Сократите расходы на IT-инфраструктуру. Узнайте больше о серверной ОС от Selectel 👀 С ростом трафика увеличиваются задержки
Сократите расходы на IT-инфраструктуру. Узнайте больше о серверной ОС от Selectel 👀 С ростом трафика увеличиваются задержки в сети, что сразу отражается на всех процессах. Обычно для повышения производительности команда наращивает железо. Это неидеальный выход: расходы на инфраструктуру начинают расти. Selectel нашел способ решения проблемы и создал серверную ОС на базе Linux. Как это работает? Операционная система использует оптимизированный сетевой стек, что позволяет обрабатывать данные в 5 раз быстрее. Это решение поможет справляться с большими объемами трафика без дополнительных затрат на новое оборудование. Проверьте сами — сейчас вы можете поучаствовать в демо-тестировании ОС от Selectel. А чтобы узнать больше об ОС и о сценариях ее применения на реальных проектах, присоединяйтесь к вебинару 20 ноября в 12:00. Регистрация по ссылке. ERID: 2VtzqwqoFuF

Во, отличная шпаргалка, которая будет полезным дополнением к 2 предыдущим постам: 1) разница между chmod и chown; 2) файл гру
Во, отличная шпаргалка, которая будет полезным дополнением к 2 предыдущим постам: 1) разница между chmod и chown; 2) файл групп /etc/group; Много раз слышал от знакомых "Ой, вот помню, что 777 дает всем права на все, дальше хз...". Та я и сам, когда лень вспоминать степени 2 и что-то там считать, обычно проставляю права через "буковки". Теперь, может, и другие комбинации в голове отложатся) Linux++ | IT-Образование

Учимся работать с историей bash Чем больше работаешь в командной строке, тем чаще возникает необходимость повторять введенные
Учимся работать с историей bash Чем больше работаешь в командной строке, тем чаще возникает необходимость повторять введенные ранее команды. Самый простой, но иногда неоптимальный способ — нажимать клавиши «вверх» и «вниз». При каждом нажатии стрелки «вверх» в поле ввода начнет появляться предыдущая выполненная команда, если нажать «вниз» — следующая. История команд bash хранится в специальном файле .bash_history, который лежит в домашней директории пользователя. Каждый раз, когда пользователь вводит команду, она попадает именно в этот файл. Запись происходит при завершении сеанса. За то, какое количество команд хранится в истории, отвечает переменная окружения HISTFILESIZE. Если она выставлена, то берется указанное в ней число, иначе история не обрезается и файл .bash_history растет бесконечно:

$ 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-Образование

K2 Cloud + DevOops Conf = бесплатный день конференции для инженеров 💜 Ребята из K2 Cloud помогли организовать Community Day
K2 Cloud + DevOops Conf = бесплатный день конференции для инженеров 💜 Ребята из K2 Cloud помогли организовать Community Day для DevOps-специалистов. 6 ноября ты сможешь бесплатно послушать часть докладов конференции DevOops: от основ работы сертификатов до организации Flux CD monorepo. Для участия нужно только зарегистрироваться. Подробнее на сайте

Мониторинг ресурсов системы: Mission Center Mission Center — полезная GUI программа для мониторинга использования CPU, RAM, G
Мониторинг ресурсов системы: Mission Center Mission Center — полезная GUI программа для мониторинга использования CPU, RAM, GPU, дисков, сети, процессов. Является более стильным аналогом приложения «Системный монитор» в GNOME. Интерфейс программы - диспетчер задач Windows, реализованный на GTK4. Mission Center может быть отличным выбором для новичков, которым первое время может быть трудно ориентироваться в терминале и использовать утилиты top и htop. Я как-то сам искал что-то графическое для вывода базовой информации. Из всех найденных вариантов, этот показался наиболее удобным и исчерпывающим. Возможности: 1. Мониторинг использования CPU: общая статистика, статистика по каждому ядру и процессу. 2. Просмотр процессов и потоков. 3. Мониторинг использования RAM и Swap. 4. Мониторинг использования дисков, расчет скорости записи и чтения. 5. Оценка использования сети. 6. Мониторинг использования GPU: потребление памяти, питания и т.д. 7. Просмотр информации о сетевых интерфейсах: имя сетевой карты, тип соединения, ip адрес и т.д. Установка: 1. Если дистрибутив поддерживает Flatpak, то ставится и запускается все максимально просто: Установка Flatpak

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

$ 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-Образование

ФСБ отслеживает геолокацию каждого жителя страны в один клик, Google собирает платежные данные, а ВКонтакте сохраняет все отправленные и полученные сообщения в личных чатах и беседах. Об этом пишут в IT ВЕДОМСТВЕ. Это канал про приватность, IT - индустрию и безопасность в сети. Новости индустрии, лайфхаки, полезные трюки для айтишников - там найдете все. Скажем, мало кто знает, что можно подменить свою локацию в Google или читать удаленные сообщения в Telegram. Подписаться на самый полезный канал про IT - https://t.me/+sI4T-JrbDi4zN2M6

Базовые принципы коммуникации "пользователь -> приложение" Всех приветствую на том конце провода. Сегодня коротенько рассмотрим базовые способы того, как пользователю можно повлиять на поведение программы, если она это допускает и предусматривает. Обозреваемые концепты относятся к исполняемым файлам в целом, поэтому затрагивают и динамические библиотеки. Некоторые из нас в курсе про какие-нибудь механизмы IPC (Inter Process Communications), как например: DBUS. IPC подразумевает коммуникацию между приложениями. Выглядеть она может следующим образом "пользователь -> приложение_1 -> приложение_2". Причем пользователь в этой схеме не является ключевой сущностью - он может как-то повлиять на "приложение_1" и затригерить его обратиться к "приложение_2". Коммуникация "пользователь -> приложение" обычно реализована 3 способами: конфиги, переменные окружения, аргументы командной строки: Общение через файлы конфигурации Приложение может давать пользователю влиять на внутреннюю кухню через конфиги. Тут, чтобы понять, есть ли такая возможность, можно либо почитать описание утилиты, которое она обычно предоставляет, либо посмотреть на список установленных файлов:

# читаем мануал к программе
$ 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-Образование

Я айтишник и я устал! С годами работы в IT все сильнее напрягает рутина, прокрастинация, куча задач и 0 желания их выполнять.
Я айтишник и я устал! С годами работы в IT все сильнее напрягает рутина, прокрастинация, куча задач и 0 желания их выполнять. Че делать? Хватит грызть самого себя и заставлять через силу - сделаешь только хуже! Лучше подпишись на того, кто уже не первый год работает с IT-специалистами и помогает им справиться с апатией и прокрастинацией - Психолог с научным подходом. ✔️ Как оторваться от ленты соцсетей и сесть за работу с удовольствием? ✔️ Как спокойно общаться с коллегами, если они бесят? ✔️ Как избавиться от постоянной тревожности? ✔️ Как успокоить конфликты в семье и перестать срываться на всех, а вместо этого получить поддержку и понимание со стороны близких? Подписывайся на канал @remizov_changes - начни работать и жить в кайф, не скатываясь в кризисы и выгорание! А в закрепе тебя уже ждут бонусы: 👨🏻‍💻 Видео, в котором ты найдёшь ответ на вопрос «Почему у тебя нет энергии и что с этим делать» + гайд как it-специалисту вернуть энергию, даже если не получается отдохнуть. https://t.me/+MCdiQmJkDQpiYjFi

Как демоны выполняют логгирование? При написании демона одной из проблем является вывод сообщений об ошибках. Поскольку его выполнение происходит в фоновом режиме, он не может просто выводить информацию в терминал, как это делают другие программы (для того, чтобы освежить в памяти понимание демонов, отсылаю вас на ранний пост). Так вот, в качестве альтернативы сообщения можно записывать в отдельный журнальный файл программы. Основной недостаток такого подхода заключается в сложности менеджмента этих файлов. Для решения проблемы была разработана система syslog. Что такое syslog? Система syslog предоставляет единый централизованный механизм, который позволяет любому приложению записывать свои сообщения в единый журнал. Система syslog состоит из двух основных компонентов: демона syslogd и библиотечной функции syslog(). Демон syslogd, принимает сообщения из двух разных источников: сокета UNIX-домена (/dev/log), который хранит сообщения, сгенерированные локально, и сокета интернет-домена, который хранит сообщения, отправленные по TCP/IP. Для записи сообщений в журнал любой процесс может воспользоваться библиотечной функцией syslog(). На основе переданных ей аргументов она создает сообщение и помещает его в сокет "/dev/log", где оно будет доступно для syslogd. Файл /etc/syslog.conf Конфигурационный файл "/etc/syslog.conf" определяет поведение демона syslogd и то, как и куда должны записываться системные сообщения. Он состоит из набора правил, которые имеют следующий вид:
источник.приоритет действие

# Записывать все сообщения от ядра в файл 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-Образование

Переводим .rpm пакет в .deb (alien) Представим такую ситуацию - ваш друг очень хочет дать вам потестить свое революционное пр
Переводим .rpm пакет в .deb (alien) Представим такую ситуацию - ваш друг очень хочет дать вам потестить свое революционное приложение... Да, все круто, вы только за то, чтобы дать конструктивный фитбек и потыкаться в утилите, но есть проблема - приятель сидит на какой-нибудь федоре и понятия не имеет, как дебианизировать пакет. Без паники, есть решение - утилита alien, которая способна перегнать "инородную" для вашего пакетного менеджера бинарную сборку из одного формата в другой. Поддерживается преобразование между пакетами: Linux Standard Base (.lsb), Redhat (.rpm), Debian (.deb), Stampede (.slp), Solaris (.pkg) и Slackware (.tgz).

$ 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-Образование

Микротуториал по управлению пакетами (Debian-based) В Linux и разработчики и обычные пользователи довольно часто работают с б
Микротуториал по управлению пакетами (Debian-based) В Linux и разработчики и обычные пользователи довольно часто работают с бинарными пакетами: обновляют их, удаляют, переустанавливают, смотрят описание, мониторят содержимое. Сегодня мы рассмотрим пулл команд по работе с пакетами, которые, на практике, чаще всего используются в "Debian-based" системах. Если интересно подробнее изучить, что такое бинарный пакет, пакетный менеджер и для чего все это нужно, отсылаю вас на мой ранний пост. Основные команды apt 1. Обновляет локальный кэш с информацией о доступных пакетах и их версиях из репозиториев, прописанных в "/etc/apt/sources.list":

$ 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-Образование

Слышали про chroot? Chroot (change root) - это утилита, которая используется для того, чтобы создать закрытое окружение "тюрьму", в которой программа будет видеть определенную часть файловой системы, как корневую '/'. Это похоже на создание миниатюрного "сейфа" или "контейнера" для запуска приложений. В качестве примера можете вспомнить тот же Docker. Под капотом chroot использует одноименный системный вызов и в некоторых ситуациях может пригодиться, как дополнительный элемент безопасности, который позволит ограничить набор каталогов и файлов, доступных программе. Системный вызов chroot() Каждый процесс обладает корневым каталогом — он представляет собой стартовую точку, от которой интерпретируются абсолютные имена путей, начинающиеся с символа '/'. По умолчанию данным каталогом является реальный корневой каталог файловой системы. Иногда бывает удобно, чтобы процесс изменил свой корневой каталог. Это может реализовать с помощью системного вызова chroot(). Системный вызов chroot() изменяет корневой каталог процесса на каталог, указанный в аргументе pathname:

#include <unistd.h>
int chroot(const char *pathname);
Затем все абсолютные имена путей интерпретируются, как начинающиеся с указанного местоположения в файловой системе. Иногда это называют заключением в клетку chroot, поскольку программа оказывается замкнутой внутри некоторой части файловой системы. Моменты, которые стоит учитывать при работе с chroot Следует 100% помнить, что вызов chroot() не меняет текущий рабочий каталог процесса. Для обеспечения полной безопасности, либо перед, либо после chroot() необходимо выполнить вызов chdir(), иначе процесс сможет использовать относительные пути для доступа к ресурсам вне клетки. Также, при переходе в пространство chroot, вы можете столкнуться с тем, что ничего не работает) Это и не удивительно, как оболочка будет выполнять команды, которых для нее просто не существует... Для решения проблемы вам может понадобиться перенести ряд библиотек и программ из "реальной" корневой системы в имитированную либо использовать команду debootstrap, но это уже отдельная история) Linux++ | IT-Образование

Мы же все понимаем актуальность и востребованность C++? Сейчас на рынке очень ценятся прокаченные C++ разработчики, которые хорошо разбираются не только в базовых вещах, но и умеют поддерживать высоконагруженные системы, оптимизировать алгоритмы, грамотно распоряжаться памятью - в общем, понимают, как выжать из языка максимум для решения задач. Я сам уже не первый год работаю на C++ и собираю хорошие ресурсы, которые позволят держаться на гребне волны. И, честно говоря, таких немного. Если говорить за ТГ, то большинство каналов просто лутают деньги с рекламы и пичкают людей посредственным и неглубоким контентом. Летом этого года я наткнулся на канал Грокаем C++ и сразу добавил его в список тех ресурсов, которые нестыдно порекомендовать. Авторы пишут глубокие посты, в которых подробно разбирают множество прикладных тем, среди которых: мув-семантика, ключевое слово inline, фишки новых стандартов, метапрограммирование, алгоритмы, гайды по собесам и т.д. В их закрепе уже сейчас можете забрать кучу структурированного материала. Я считаю, что такие каналы не стоит пропускать, если вам интересно направление и вы хотите быть трушным спецом: Грокаем C++