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
Размонтирование файловой системы: unmount

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

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

Сначала посмотрим полный список доступных дисков:


$ sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL


loop0 4K /snap/bare/5
sda 104G
├─sda1 vfat 1G /boot/efi
├─sda2 ext4 2G /boot
...
sdb 500G
├─sdb1 ntfs 500G /media/root-user/C2D8...


USB-диск объемом 500 ГБ маркирован как sdb1. Для его размонтирования следует выполнить команду:


$ sudo umount /dev/sdb1


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

Если диск в настоящий момент занят, то возникнет ошибка. С помощью опции "-l" его получится размонтировать, когда он освободится:


$ sudo umount -l /dev/sdb1


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


$ sudo umount -f /dev/sdb1


Размонтировать все устройства

Опция "-a" отвечает за размонтирование всех файловых систем. Eсть несколько разделов с исключениями: rocdevfsdevptssysfsrpc_pipefs и nfsd. Запускать ее нужно с осторожностью:


$ sudo umount -a


Перед выполнением команды вы можете посмотреть то, какие устройства будут затронуты. Тут пригодятся опции "--fake" и "-v" для вывода подробной информации:


$ sudo umount --fake -v -a

/run/user/1000/doc: successfully unmounted
/snap/firefox/6015: successfully unmounted
...


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

Размонтировать путь

Если вы хотите отключить конкретный путь от корневой FS, то подход будет иной.

В качестве примера возьмем каталог "/run/lock/tmpfs". Команда для размонтирования будет выглядеть следующим образом:


$ sudo umount /run/lock/tmpfs


Рекурсивное размонтирование

Для рекурсивного размонтирования определенной директории, к описанной выше команде следует добавить опцию "-R":


$ sudo umount -R /run/lock/tmpfs


Если же вы хотите получить дополнительную информацию при рекурсивном размонтировании, то воспользуйтесь опцией "-v":


$ sudo umount -R -v /run/lock/tmpfs


LinuxCamp | #utils
👍39🔥7❤‍🔥61
Релиз Ubuntu 25.04 Plucky Puffin

По информации OpenNET, основные изменения и доработки включают:

— Рабочий стол обновлён до GNOME 48, в котором реализована поддержка HDR, тройной буферизации, стековой компоновки. Добавлены оптимизации потребления памяти и производительности;

— Вместо Evince для просмотра PDF задействована программа Papers;

— Задействован пакетный менеджер APT 3.0, в котором предложен новый движок разрешения зависимостей Solver3;

— Улучшены возможности для использования устройств на базе архитектуры ARM64 в качестве рабочих станций с графическим окружением;

— Ядро Linux обновлено до 6.14;

— На ноутбуках с GPU NVIDIA по умолчанию включён сервис nvidia‑powerd, обеспечивающий поддержку Dynamic Boost;

— Обеспечена полная поддержка GPU Intel на базе архитектуры Xe2;

LinuxCamp | #news
👍448🤯32💊1
ArcoLinux прекращает деятельность

ArcoLinux — открытая операционная система, разрабатываемая группой бельгийских программистов на основе ArchLinux.

Завершает работу после 8 лет существования. Эрик Дюбуа (создатель) сообщил, что проект прекратит выпуск ISO, приложений и скриптов с 1 июля 2025 года. Уже скоро социальные сети проекта также будут деактивированы.

Причины:

— Личные причины Эрика Дюбуа: автор не стремится к новым амбициозным планам и хочет замедлить темп жизни.

Он планирует заниматься Linux исключительно для удовольствия, без давления, связанного с управлением крупной инициативой

— Появление мелких ошибок, влияющих на качество работы, из-за потери концентрации и внимания создателя проекта

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


LinuxCamp | #news
🔥28👍18❤‍🔥4😢4🫡41
Как разбить файл на части?

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

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

Разбить по размеру

Для этого используем опцию "-b", определяющую максимальный размер элемента. За основу возьмем файлик в 721 байт. Его нужно разбить на части по 100 байт. Для удобства зададим префикс имени "file-part_":


$ ls -l
721 Apr 20 13:11 file_orig


$ split -b 100 ./file_orig ./file-part_


Помимо оригинала появятся еще 8 файлов:


$ ls -l
721 Apr 20 13:11 file_orig
100 Apr 20 13:12 file-part_aa
...
21 Apr 20 13:12 file-part_ah


Разбить по количеству строк

Может быть нужно разбить один текстовый документ на несколько, с количеством строк "<= n". В этом вопросе полезной окажется опция "-l". Команда поделит большой log-файл на части по 10 тысяч строк в каждом:


$ split -l 1000 ~/Logs/log ~/Logs/log-part_


Разбить на определённое количество файлов

Еще одна интересная задача, в решении которой поможет опция "-n". Размер будет, по возможности, поделен поровну. Достаточно прописать итоговое количество файлов и запустить команду:


$ split -n 3 ./file_orig ./file-part_


$ ls -l
240 Apr 20 13:31 file-part_aa
240 Apr 20 13:31 file-part_ab
241 Apr 20 13:31 file-part_ac
721 Apr 20 13:11 file_orig


Настройка имени частей файла

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

С помощью опций можно изменить его длину "-a", переключиться на числа "-d" или hex-символы "-x". В последних двух сценариях получится выбрать начальную точку отчета "--numeric-suffixes" для чисел и "--hex-suffixes" для hex-символов.

Возьмем задачу – разделить текстовый файл на 3 части равного размера, чтобы каждый из них имел префикс "file-part_" и числовой суффикс из одного символа, начиная с 1:


$ split -a 1 --numeric-suffixes=1 -n 3 ./file_orig ./file-part_


$ ls -l
240 Apr 20 13:36 file-part_1
240 Apr 20 13:36 file-part_2
241 Apr 20 13:36 file-part_3


Объединение частей файла

Следующий шаг – объединение нескольких частей в единый файл. Для этих целей отлично подойдет утилита cat. Сначала нужно задать имена частей, потом итоговый файл:


$ cat ~/Archive/split-archive.part_* > ~/Archives/cat-archive.tar.gz


LinuxCamp | #utils
👍43🔥135❤‍🔥1
Как удалять ссылки?

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

Обычно мы как проверяем ссылку - выполняем "ls -l" и смотрим на тип:


$ ls -l
lrwxrwxrwx ... sftp-server -> openssh/sftp-server


Если будем работать через find, руками тип смотреть не придется. Для фильтрации по символьным ссылкам у нас есть опция "-type l":


$ find /usr/lib -type l
/usr/lib/gvfs/gvfsd-afp
/usr/lib/libmultipath.so


Если мы переживаем, что удалим что-то лишнее, можем проверить путь к файлу, на который указывает ссылка. Для этого нужно для вывода команды выполнить "-exec ls -l {} \":


$ find /usr/lib -type l -exec ls -l {} \;
/usr/lib/gvfs/gvfsd-afp -> ../../libexec/gvfsd-afp
/usr/lib/libmultipath.so -> libmultipath.so.0


Напоследок разберемся с поиском и удалением битых ссылок, которые никуда не ведут. Для такой цели подойдет параметр "-xtype l":


$ find ~/broken_links/ -xtype l


LinuxCamp | #microhelp
👍33🔥12❤‍🔥3
Как узнать разрядность операционки?

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

Существует две самые популярные: i386 (32 битная) и x86_64 (64 битная). Первая уже устаревшая и поддерживает работу с не больше чем 4ГБ оперативки.

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

Самый простой способ узнать разрядность - воспользоваться утилитой arch:


$ arch
aarch64


Да, это "маковская" история. Aarch64 — это 64-битная архитектура от ARM (иногда её называют arm64).

Есть еще команда uname, которая выводит архитектуру ядра через опцию "-m". Архитектура ядра соответствует системной, поэтому этот метод можно использовать:


$ uname -m
aarch64


Команда file позволяет просматривать информацию о файлах. Для исполняемых отображается их архитектура. Если вы посмотрите архитектуру какого-либо важного системного файла, то узнаете и разрядность системы:


$ file /lib/systemd/systemd
/lib/systemd/systemd: ELF 64-bit LSB pie executable, ARM aarch64, ...


LinuxCamp | #utils
👍39🔥123
Forwarded from ITCamp
Мультивселенная существует)

Я как-то о его творчестве поверхностно наслышан, но, вроде, он не эти занимался. Не думал, что PewDiePie и Linux можно увидеть вместе 😕
Please open Telegram to view this post
VIEW IN TELEGRAM
33🔥9👍3❤‍🔥2😁1
Типы файловых систем Linux

Решил провести вам небольшой экскурс по файловым системам линухи. Чтоб знали, что не только ext существует)

Ext2, Ext3, Ext4 (Extended Filesystem) — стандартная файловая система, первоначально разработанная еще для Minix.

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

Начиная с Еxt3 реализована функция журналирования (небольшой кэш вне обычной структуры данных) для повышения целостности данных и ускорения загрузки.

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

Для семейства Ext существует обратная совместимость. Вы можете монтировать ext2 и ext3 взаимозаменяемо, монтировать ext2/3 как ext4, но не можете монтировать ext4 как ext2/3.

JFS (Journaled File System) — разработана IBM в качестве альтернативы для ext. Сейчас она используется там, где необходима высокая стабильность и минимальное потребление ресурсов (в многопроцессорных компьютерах).

Легко восстанавливает данные после сбоя питания и довольно надежна. Более того, она потребляет меньше процессорной мощности, чем другие файловые системы.

ReiserFS - разработана специально для Linux компанией Namesys (в качестве альтернативы ext3). Она быстрее систем семейства ext4. Reiserfs можно использовать в качестве основной файловой системы для корня, также как и ext4.

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

Btrfs (B-tree filesystem) — разработана Oracle. Родная для Linux, расширяет возможности ext4. Используется по умолчанию в OpenSUSE и SUSE Linux.

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

XFS — высокопроизводительная система от компании SGI. Изначально предназначалась для их ОС «IRIX», но позже была передана Linux. Рассчитана на файлы большого размера, поддерживает диски до 2 терабайт. Стоит по умолчанию в Red Hat Enterprise.

LinuxCamp | Chat | #filesystem
👍53🔥112🌭1
Удобная работа с файловой системой через 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