LinuxCamp | DevOps – Telegram
LinuxCamp | DevOps
14.2K subscribers
193 photos
7 videos
298 links
Обо мне: C/C++/Linux эксперт. Говорим про разработку, Linux, DevOps, сети и администрирование.

Админ (реклама): @XoDefender
Чат: @linuxcamp_chat

Менеджер: @Spiral_Yuri
Биржа: https://telega.in/c/linuxcamp_tg

№ 6327102672
Download Telegram
Удобная работа с файловой системой через CLI

Midnight Commander (mc) - файловый менеджер, работать с которым можно без графического туллкита (GTK, Qt).

Имеет графический интерфейс, который отображается в текстовом режиме. Он работает на всех видах терминалов и через SSH.

Установка и запуск:


$ sudo apt install mc
$ mc


Экран утилиты разбивается на три части - две панели с файлами (левая и правая) и командная строка, позволяющая вводить команды операционной системы.

Некоторые возможности MC

1) стандартные операции с файлами: просмотр, редактирование, копирование, переименование/перемещение, удаление, изменение прав и т.д.;

2) функции работы с выделенным блоком, поиск/замена, отмена последней операции, цветовое выделение синтаксиса и т.д.;

3) выделение файлов разных типов цветом;

4) нажав Enter на файле архива (.tar, .tgz, .zip, .a, .rpm и т.д.) можно "войти внутрь" него;

5) поиск файлов по шаблону имени и по содержимому;

6) может работать с файлами на удаленных системах посредством FTP и SSH.

Вывод

Утилита очень полезна при проведении работ на серверах, когда нет доступа к GUI. В целом, понимаю, учить эти комбинации клавиш геморно. После vim меня вообще "дергает", когда не вижу понятных кнопок)

Но оно того стоит, ребята. Со временем все начинает получаться "на автомате" и работа идет гораздо быстрее. Поэтому и nano и vim и mc хорошо бы знать.

LinuxCamp | #utils
👍48🔥16🤣10❤‍🔥2
От cron‑а к DAG‑ам: зачем нужен оркестратор и почему именно Airflow

Представьте простую бытовую задачу: каждую ночь нужно

1) выгрузить базу;
2) превратить её в отчёт;
3) отправить результат в S3;

Пока шагов мало, их легко раскидать по crontab. Но рано или поздно что‑нибудь пойдет медленнее обычного, соседний скрипт стартует раньше, отчёт выедет пустым — и вы начинаете расставлять костыли: sleep, «if‑else», ручные письма об ошибках. Так появляется «снежный ком» расписаний, который трудно контролировать.

Что делает Airflow по‑другому

Airflow описывает тот же процесс в виде DAG — направленного ациклического графа. Каждая задача — узел, каждая зависимость — стрелка.

Расписание теперь одно на весь процесс, а порядок шагов Airflow вычисляет сам:


from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedelta

with DAG(
dag_id="nightly_pipeline",
# стартуем раз в сутки
schedule_interval="0 2 * * *",
start_date=datetime(2025, 4, 1),
# не догоняем пропущенные дни
catchup=False
) as dag:

dump = BashOperator(
task_id="dump_db",
bash_command="/noscripts/dump.sh",
retries=2,
retry_delay=timedelta(minutes=10),
# алёрт в чат
on_failure_callback="notify_telegram"
)

transform = BashOperator(
task_id="make_report",
bash_command="/noscripts/report.sh"
)

upload = BashOperator(
task_id="upload_s3",
bash_command="/noscripts/upload.sh"
)

dump >> transform >> upload


Что меняется на практике:

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

- Чёткая картинка процессов — в веб‑интерфейсе видно, что именно сейчас выполняется, что уже зелёное, а что покраснело.

- Уведомления «из коробки» — функция on_failure_callback отправит сообщение в Telegram/Slack, как только что‑то рухнет.

-
Sensors и ожидание событий — вместо бесконечных while sleep 30 можно сказать: «ждать, пока файл появится в папке», и Airflow займётся этим сам.

В одном из следующих постов мы поднимем Airflow одной командой через Docker‑Compose и соберём первый «hello world» DAG.

Реальный сценарий задержки

Допустим, дамп БД обычно занимает пять минут. В одну из ночей, из‑за нагрузки, он растягивается до получаса. Если процесс управляется cron’ом, то в 02:05 по расписанию стартует следующий скрипт report.sh, тот читает ещё незаконченный дамп и отправляет пустой отчёт. Ошибку вы заметите только утром.

С Airflow всё иначе: пока задача dump_db не финишировала, зависимый make_report даже не начнётся. Когда дамп завершится успешно, DAG продолжит движение; если же он дважды упадёт подряд, Airflow пометит цепочку как failed и тут же пришлёт вам Telegram‑уведомление со ссылкой на лог.

Cron остаётся отличным будильником для одиночных задач, но когда шагов несколько и они зависят друг от друга, удобнее отдать управление оркестратору. Airflow даёт одну точку правды (DAG), автоматические ретраи, встроенное журналирование и мгновенные алёрты — и всё это пишется на чистом Python, без костылей.

LinuxCamp | Chat | #devops #bymaga
👍52🔥11🤔4❤‍🔥21💯1🗿1
На повестке дня gsettings

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

GSettings - API, которое позволяет приложениям управлять параметрами ключ-значение: сохранять их, изменять и получать. Данные настройки хранятся в бинарном формате, ну а почитать их можно через XML схему, которую должно предоставлять приложение.

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

Сразу у меня возникли мысли: “Опять этот гемор с парсингом”. Все оказалось проще - GTK приложение, которое использует Glib, может создать объект GSettings, указать имя схемы, в которой будут содержаться настройки и управлять ими.

А-ля, нам нужно дать пользователю возможность отключить ММС-ки о том, что подключение к VPN разорвано. Не вопрос:

1) добавляем в схему (….gschema.xml) дополнительную настройку


<key name="disable-vpn-disconnect-notification" type="b">
<default>false</default>
<summary>...</summary>
<denoscription>...</denoscription>
</key>


2) через get/set вызовы получаем и обновляем данные


g_settings_set_boolean (applet->gsettings, "disable-vpn-disconnect-notification", state);

g_settings_get_boolean (applet->gsettings, "disable-vpn-disconnect-notification");


Если отработал ивент на уведомление, просто определяем его тип и сверяем со значением конкретной настройки.

Если приложение не предоставляет GUI по управлению GSettings, пользователь может работать с ними либо через одноименную CLI утилиту, либо через GUI менеджер dconf-editor:


$ gsettings set org.gnome.nm-applet disable-connected-notifications "true"


$ sudo apt install dconf-editor


После правок, локальный бинарный конфиг, скорее всего, будет лежать в каталоге "~/.config/dconf/":


~/.config/dconf$ ls
user


Если админу нужно указать глобальные настройки для всех пользователей, он может вручную подредактировать схему. Обычно они лежат в "/usr/share/glib-2.0/schemas/":


$ ls /usr/share/glib-2.0/schemas/

org.gnome.desktop.sound.gschema.xml
org.gnome.nm-applet.gschema.xml
org.gnome.desktop.a11y.gschema.xml


После того, как дефолтные параметры изменены, XML нужно обязательно скомпилить, т.к. читается именно бинарное представление. Без этого этапа изменения не будут применены:


$ sudo glib-compile-schemas /usr/share/glib-2.0/schemas/


LinuxCamp | #story
👍17🔥136❤‍🔥1
Обновление SteamOS 3.7.3 Preview

После объявления Valve о расширении SteamOS за пределы Steam Deck и запуске публичной беты:

— разработчики продолжают активно улучшать совместимость системы с другими портативными игровыми устройствами.

В марте вышла первая тестовая версия SteamOS 3.7.0, а теперь доступна новая сборка SteamOS 3.7.3 Preview — экспериментальная версия SteamOS с улучшениями.

Изменения:

— Добавлена поддержка ограничения кадровой частоты для дисплеев с переменной частотой обновления (VRR), как встроенных, так и внешних.

— Исправлен сбой, возникавший при отсутствии подключённых дисплеев.

— Добавлена поддержка кнопки питания на портативных устройствах Asus и Lenovo.

— Улучшена поддержка ввода на устройствах Asus и Lenovo.

Интересно следить за развитием этой ОС. Сам декой побаловался и лежит теперь на самой верхней полочке. Там уже, наверное, 100500 апдейтов вышло, надо глянуть 👀

LinuxCamp | #news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥7❤‍🔥21
Буквально вчера столкнулся с проблемой. Поехал, значит, на отдых и вспомнил под вечер, что надо поработать чуток. Зашел в номер, открыл ноут и начал подключаться к сети. Не думал, что столкнусь с проблемой на таком базовом действии)

Нужно было подключиться с "Debain-based" дистра к открытой сети, в которой авторизация происходила через перенаправление на определенный сайт. Такая штука называется "CaptivePortal".

Попробовал через nm-applet - не сработало. Попробовал через nmcli - аналогичная история. Начал гуглить и нашел вот тут следующее решение:


$ xdg-open http://$(ip --oneline route get 1.1.1.1 | awk '{print $3}')


Команду нужно выполнить после базового подключения к сети. Далее вводишь, что нужно и вуаля, все работает!

LinuxCamp | Chat | #microhelp
🔥30👍17❤‍🔥7🤔4
Команда chgrp и изменение атрибутов ссылок

В Linux у каждого файла есть владелец и группа. Также описываются права остальных пользователей, которые состоят из трёх пунктов: чтение, запись, выполнение. Для их изменения (определения дефолтных) используется команда umask, для изменения владельца и группы: chown и chgrp. Подробно про группы говорили тут.

Без параметров chgrp просто меняет группу для конкретного файла либо каталога:


$ sudo chgrp avengers file
-rw-rw-r-- 1 parallels avengers file


И вот тут момент №1 - если вы меняете группу у символьной ссылки, ее атрибуты остаются нетронутыми и аффектится только целевой файл. Для того, чтобы изменить атрибут ссылки, нужно использовать флаг "-h" (аналогично для chown):


$ chgrp -h parallels file_ln
lrwxrwxrwx 1 root parallels file_ln -> ../file


Момент №2 - если вы рекурсивно меняете группу для каталога, при обработке ссылки атрибуты выставляются именно для нее, а не файла. Для дереференса ссылок есть 2 флага: "-H" и "-L".

"-H" переходит по ссылкам и меняет атрибуты ресурсов. При переходе на каталог рекурсивная обработка для него прекращается (только каталогу группу поменяем и все). "-L" при переходе на каталог идет рекурсивно и по нему тоже.


$ chgrp -RH www-data /var/www
$ chgrp -RL www-data /var/www


LinuxCamp | #utils
👍20🔥10❤‍🔥21
Когда ты создал Git/Linux vs когда ты рандомный вайбкодер)

LinuxCamp | Chat | #memes
😁58🤣346👍2🔥2❤‍🔥1
Linux roadmap

Набросал тут план изучения Linux для новичков. Давайте фитбек - чего бы добавили, что может быть лишним)

Основные модули:

1. Введение - понимание базовых определений, различий между "Server" и "Desktop" дистрибутивами, умение накатить линуху на виртуальную машину и физическое железо.

2. Терминал и оболочка - понимание того, что из себя представляет оболочка и какие они бывают.

3. Файловая система - разбор дерева каталогов, типов файлов, их атрибутов и прав доступа, дисков и разделов.

4. Пользователи и группы - управление пользователями/группами, работа со спец. файлами "/etc/group" и т.д. Что такое sudo и привилегии администратора.

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

6. Демоны и systemd - управление и отладка демонов/сервисов.

7. Работа с пакетами - пакетные менеджеры, подключение репозиториев. Принципы управления пакетами.

8. Переменные оболочки - способы их объявления, знание основных переменных "PATH", "HOME" и т.д.

9. Продвинутая работа с оболочкой - перенаправление ввода/вывода, пайпы, шаблоны, условные списки.

10. Создание bash скриптов - базовый синтаксис, примеры, где может пригодиться набросать свой скрипт для автоматизаций.

11. Логирование и мониторинг - умение отлаживать ошибки системы и софта через syslog и journal.

12. Сети и протоколы - понимание различий между ssh, scp, ftp. Умение передавать данные с клиента на сервер и обратно. Подгрузка файлов с инета через curl и wget.

13. Конфигурация системы - структура графического окружения (wm, dm, композитинг) и его настройка.

14. Сборка софта по исходникам - базовая работа с системами (cmake, meson). Понимание файлов, которые используются для сборки (если к проекту не прилагается нормальный README)

LinuxCamp | Chat | #roadmap
🔥65👍3064❤‍🔥1🗿1
Как исправить "rm: cannot remove ‘file’: Device or Resource Busy"?

Бывало же у вас такое - заканчиваешь работать с каким-то ресурсом (файлом/каталогом/устройством), хочешь его удалить и видишь ошибку о том, что он чем-то занят (используется системой либо каким-то процессом).


rm: cannot remove 'file-or-directory': Device or resource busy


Тут нужно понять, в чем конкретная причина и чем он задействован: то ли процессом, то ли это, быть может, точка монтирования для какой-то FS…

Распространенных решения вижу 2:

1. Использование команд "lsof + fuser" для определения занятых ресурсов и завершения процессов. Если вы не знаете, какая программа мешает выполнить операцию, используйте lsof:


$ lsof +D Sources/App/
COMMAND PID USER FD NAME
server 22331 xoadmin txt Sources/App/server
client 22332 xoadmin txt Sources/App/client


Если у нас ресурс занимают 2 процесса, можно и через kill все грохнуть. Если их много, можно более автоматизированно - через fuser. Эта команда завершит все процессы, которые что-то используют в целевом каталоге:


$ fuser -k Sources/App/


После выполнение мы вырубим сразу оба процесса 22331 и 22332.

2. Определение точки монтирования. Это полезно, когда какая-нибудь флешка или внешний диск монтирован в целевой каталог. Узнать, так ли это, можно через команду mount. Допустим, у меня не получается удалить test:


$ rm -rf test
rm: cannot remove 'test/tmpfsdir': Device or resource busy


Проверяем, является ли tmpfsdir точкой монтирования:


$ mount | grep test/tmpfsdir
none on /home/u/test/tmpfsdir type tmpfs (rw,relatime,inode64)


Вывод говорит о том, что в каталог tmpfsdir примонтирована FS tmpfs. Для успешного выполнения операции нужно размонтировать каталог:


$ sudo umount test/tmpfsdir
$ rm -rf test


LinuxCamp | Chat | #filesystem
👍33🔥13❤‍🔥2
Еще 3 пингвина не хватает, который через алиасы прыгает по каталогам)

Если кто не видел, я вот тут приводил топ алиасов, среди который есть те самые для перемещения по уровням FS.

LinuxCamp | Chat | #memes
👍265😁5❤‍🔥2
Лучшие эмуляторы терминала

Эмулятор терминала - утилита, которая дает доступ к командной оболочке и позволяет нам работать с системой через CLI интерфейс.

Их, на самом деле, не 1 и не 2) Вы, возможно, привыкли к дефолтным эмуляторам оболочки от гнома там и kde. Вдруг вам чего-то в них не хватает, что есть в сторонних...

1. Terminator - ключевая фича заключается в том, что оно позволяет раскидывать свои окна по удобной сетке.

Может пригодиться, если вам не нравится переключаться по вкладкам или плодить много окон. Более подробно про него вот тут.


$ sudo apt install terminator


2. Tilix - поддерживает систему “drag and drop”. Вы можете перетащить файл в окно терминала и получите на выходе полный путь в строке ввода.

Также он удобно структурирует окна списком, по которому можно ходить через горячие клавиши. Как и Terminator может разбивать окна по сетке.


$ sudo apt install tilix


3. Guake - неплохо кастомизируется через встроенный менеджер. Сворачивается и разворачивается по горячим клавишам.


$ sudo apt install guake


4. Alacritty - отличает от остальных его тот факт, что он “GPU-accelerated”. Это говорит о том, что для рендера он использует видюху => работает плавнее. Также он кроссплатформенный - запускается на Windows/Linux/MacOS.

Так как для рендера используется OpenGL, эмулятор позволяет более продвинуто настроить внешний вид и добавить, например, прозрачность.

Кастомизируется он через файл. Более подробно про его настройку можете почитать тут. Пример готового конфига приложу по ссылке. Также найти его можно на гите проекта в релизах.

Инструкцию по установке на Ubuntu также прикладываю.

LinuxCamp | Chat | #top
👍287🔥73🥴1
Топ 5 полезных приложений на Linux

В линухе хоть и меньше толковых приложений, чем в MacOS или Windows, но они все еще есть и очень выручают:

1. Todoist - очень популярный планировщик задач. Он кроссплатформенный, в свое время использовал и на android и на ios. Ставится он через snap либо AppImage:


$ sudo snap install todoist


Есть платный и бесплатный формат использования. Мне от него требовалось только приоритизировать задачи и раскидывать их на неделю - все это включено даром.

2. Standard Notes - приложение для заметок, которое может выступать некой заменой obsidian и notion. Также ставится на разные ОС. Отлично подходит, если вы пишите какие-то сценарии либо длинные лонгриды - их удобно менеджерить. Ставится через AppImage, ссылку приложил.

3. KDE Connect - входит в десктопное окружение Plasma. Позволяет управлять мобилкой через десктоп: просматривать уведомления, уровень заряда, передавать файлы и т.д. В некоторых дистрах предоставлена по дефолту.

4. TimeShift - утилита для создания бэкапов системы (FS, настроек, конфигураций). Для Linux это может быть очень полезно, т.к. нередко новички в процессе разбирательств что-то лишнее тыкают и все ломают. Нашел отличный туториал по ее использованию. Установка:


$ sudo apt install timeshift


5. Syncthing - используется для синхронизации файлов между системами. Предположим, мы постоянно работаем с каталогом Documents на компе и ноуте. Если обе системы используют syncthing и следят за Documents, то на них всегда будет актуальное содержимое этого каталога. Установка тут. Еще докину ссылку на информативный туториал.

LinuxCamp | #top
👍25🔥105🤪2💊1
GE-Proton 10-2: исправления для Windows игр на Linux, SteamOS (Steam Deck)

Proton — специальный «прослойка» от Valve, которая позволяет запускать Windows-игры на Linux. Сделана на основе Wine.

GE-Proton (GloriousEggroll Proton) — модифицированная версия Proton, которую делает разработчик с ником GloriousEggroll.

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

Основные изменения в GE-Proton:

— Исправлена ошибка в скрипте, вызванная отсутствующей запятой, что приводило к проблемам с префиксами. Мем 😁

— Добавлен патч для поддержки прокрутки с тачпада в WineWayland

— Добавлены патчи, позволяющие запускать больше лаунчеров в среде Wayland (epic, battlenet, star citizen)

— Обновлена библиотека xalia с включением изменений из основного репозитория

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

LinuxCamp | #news
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍9❤‍🔥3😁1
Приводим хаос данных к порядку

Сегодня мы говорим о команде sort. Утилита выводит текстовые строки в определенном порядке. С помощью нее может быть отсортировано содержимое файла либо вывод какой-либо команды. Основные опции можете просмотреть на OpenNet.

Примеры использования

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


$ echo -e "computer\nmouse\nLAPTOP\ndata" > test.txt


$ cat test.txt
computer
mouse
LAPTOP
data


Опция "-e" указывает команде, что нужно обрабатывать спецсимволы, а "\n" у нас - спецсимвол перевода строки. Теперь выполним сортировку строк:


$ sort test.txt
computer
data
LAPTOP
mouse


После выполнения команды сам файл никак не поменяется: sort просто получает на вход данные с ресурса и итог кидает в stdout. Посмотрим на несколько принципов, по которым выполняется сортировка:

- Строки с цифрами размещаются выше других строк
- Строки, начинающиеся с букв нижнего регистра размещаются выше
- Сортировка выполняется в соответствии алфавиту
- Строки сначала сортируются по алфавиту, а уже вторично по другим правилам.

Удаление дубликатов

100% полезная опция "-u". Она удаляет дубликаты. Представьте, вам нужно проверить логи в "/var/log/syslog", которые туда посылает образный "демон". Если он пишет туда много одинаковых, вероятно, вам не нужен лишний спам. Для предварительной очистки вывода используйте "-u":


$ sort -u /var/log/syslog


Сортировка по колонке

Давайте упорядочим вывод по конкретному полю. Для этого указываем флаг "-k" с номером колонки. Сейчас будем работать с названиями каталогов:


$ ls -l | sort -k9
... 6 user user 4096 дек 6 14:29 Android
... 3 user user 4096 янв 14 22:18 Desktop
... 5 user user 12288 янв 15 14:59 Downloads
... 7 user user 4096 янв 13 11:42 Lightworks


Сортировка по номеру

Входные данных также можем отсортировать по числовому значению. Для этого используем "-n":


$ ls -l | sort -nk2
... 5 user user 12288 янв 15 14:59 Downloads
... 6 user user 4096 дек 6 14:29 Android
... 7 user user 4096 июн 10 2015 Sources
... 8 user user 12288 янв 11 12:33 Pictures


LinuxCamp | #utils
👍29🔥107
Шпора по флагам rsync

Rsync - программка, которую можно использовать для синхронизации файлов и каталогов с локального компьютера на удаленный и наоборот. Чем-то напоминает scp.


$ rsync file1 file2 ... user@host:dest


$ rsync -a dir host:dest_dir


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

Например, если вы перенесли каталог d, содержащий файлы a и b, на машину, на которой был файл d/c, то после копирования сервер будет содержать d/a, d/b и d/c.

Чтобы создать точную копию исходного каталога, необходимо из целевого каталога удалить не существующие в исходном каталоге файлы, например d/c в примере:


$ rsync -a --delete dir host:dest_dir


Посмотрим на еще 1 пример:


$ rsync -avh --del --progress dir1 dir2 dir3 backup


В результате выполнения, каталоги "dir1, dir2 и dir3", вместе со всем их содержимым, будут рекурсивно скопированы в каталог backup.

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

Исключение файлов и каталогов

Еще одной значительной фичей rsync является способность исключать файлы и каталоги из процесса передачи.

Например, ты хочешь перенести локальный каталог src на хост и при этом исключить все данные с именем .git. Можно сделать следующим образом:


$ rsync -a --exclude=.git src host:


Чтобы базовые флаги всегда были под рукой, собрал небольшую шпору, сохраняем)

LinuxCamp | #utils
🔥22👍173
Пополнение софта в библиотеке

Компания Fender, известная своими гитарами и аудиооборудованием, представила новое приложение для записи и обработки звука – Fender Studio. Оно доступно на нашем Linux).

Fender Studio базируется на профессиональной DAW Studio One Pro (приложение для цифровой аудиосистемы), но предлагает упрощённый интерфейс.

Что предлагает Fender Studio?

- Интуитивный интерфейс для музыкантов, подходящий как новичкам, так и профессионалам.

- Многодорожечную запись с поддержкой VST-плагинов.

- Встроенные инструменты для обработки гитарного звука, включая эффекты и усилители.

- Совместимость с ALSA и PipeWire.

Приложение доступно для бесплатной загрузки в формате Flatpak с официального сайта. Появление утилиты – знак растущего интереса крупных компаний к открытой платформе.

LinuxCamp | #news
👍20🔥9❤‍🔥22😁1