docker init: как использовать на Windows
Команда "docker init" создает стартовые файлы, связанные с Docker, для вашего проекта == автоматически генерирует их для запуска приложения под ваш стек. Docker init сейчас доступен только на Docker Desktop на Windows и MacOS, в большинстве ОС на linux данной команды нет:
Устанавливаем Docker Desktop на устройство если не установлен. Если не имели раньше дела спитухоном питоном, также скачиваем его. Как все готово, создаем рабочий каталог:
Создаем и активируем виртуальное окружение чтобы изолировать зависимости проекта и с помощью команды pip freeze автоматически сформировать requirements.txt, не заполняя его вручную:
Cкачиваем необходимые для создания API зависимости с помощью пакетного менеджера pip и сохраняем их в requirements.txt:
Создадим в каталоге проекта файл "main.py" с простым API:
Теперь наконец можем запустить магию:
Нас встречает приветственное сообщение, которое просит нас выбрать язык проекта (python), его версию (3.12.7), порт на котором будет слушать приложение (8000). Далее нужно вписать команду для запуска. Он увидел что я работаю с fastapi и предлагает:
И тут видим, что автоматически были созданы перечисленные в начале файлы! Далее можем абсолютно спокойно поднять контейнер командой:
Дожидаемся пока сбилдится наше приложение и проверяем все ли ок. Переходим в браузер и видим заветное:
LinuxCamp | #devops #docker #bymaga #win
Команда "docker init" создает стартовые файлы, связанные с Docker, для вашего проекта == автоматически генерирует их для запуска приложения под ваш стек. Docker init сейчас доступен только на Docker Desktop на Windows и MacOS, в большинстве ОС на linux данной команды нет:
- .dockerignore
- Dockerfile
- compose.yaml
- README.Docker.md
Устанавливаем Docker Desktop на устройство если не установлен. Если не имели раньше дела с
mkdir my-fastapi-project
cd my-fastapi-project
Создаем и активируем виртуальное окружение чтобы изолировать зависимости проекта и с помощью команды pip freeze автоматически сформировать requirements.txt, не заполняя его вручную:
python3 -m venv venv
source venv/bin/activate
Cкачиваем необходимые для создания API зависимости с помощью пакетного менеджера pip и сохраняем их в requirements.txt:
pip install fastapi uvicorn
pip freeze > requirements.txt
Создадим в каталоге проекта файл "main.py" с простым API:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"Hello": "Docker Init"}
Теперь наконец можем запустить магию:
docker init
Нас встречает приветственное сообщение, которое просит нас выбрать язык проекта (python), его версию (3.12.7), порт на котором будет слушать приложение (8000). Далее нужно вписать команду для запуска. Он увидел что я работаю с fastapi и предлагает:
uvicorn 'main:app' --host=0.0.0.0 --port=8000
И тут видим, что автоматически были созданы перечисленные в начале файлы! Далее можем абсолютно спокойно поднять контейнер командой:
docker compose up --build
Дожидаемся пока сбилдится наше приложение и проверяем все ли ок. Переходим в браузер и видим заветное:
http://127.0.0.1:8000
{"Hello":"Docker Init"}
LinuxCamp | #devops #docker #bymaga #win
👍25🔥7❤🔥2
Размонтирование файловой системы: unmount
При прекращении работы с диском, чтобы полностью закрыть к нему доступ и избежать повреждения данных, следует его размонтировать. Для этих целей существует утилита umount.
В качестве примера возьмем USB-диск, на который были загружены бэкапы данных. Перед отключением от компьютера его следует размонтировать.
Сначала посмотрим полный список доступных дисков:
USB-диск объемом 500 ГБ маркирован как sdb1. Для его размонтирования следует выполнить команду:
В результате диск отсоединится. Вы можете посмотреть, что он пропал из списка доступных устройств в файловом менеджере.
Если диск в настоящий момент занят, то возникнет ошибка. С помощью опции "-l" его получится размонтировать, когда он освободится:
Для принудительного отключения можно использовать флаг "-f". Все выполняемые операции незамедлительно прервутся, и ждать ничего не придется:
Размонтировать все устройства
Опция "-a" отвечает за размонтирование всех файловых систем. Eсть несколько разделов с исключениями: roc, devfs, devpts, sysfs, rpc_pipefs и nfsd. Запускать ее нужно с осторожностью:
Перед выполнением команды вы можете посмотреть то, какие устройства будут затронуты. Тут пригодятся опции "--fake" и "-v" для вывода подробной информации:
В результате отобразится полный список путей и устройств, которые будут размонтированы.
Размонтировать путь
Если вы хотите отключить конкретный путь от корневой FS, то подход будет иной.
В качестве примера возьмем каталог "/run/lock/tmpfs". Команда для размонтирования будет выглядеть следующим образом:
Рекурсивное размонтирование
Для рекурсивного размонтирования определенной директории, к описанной выше команде следует добавить опцию "-R":
Если же вы хотите получить дополнительную информацию при рекурсивном размонтировании, то воспользуйтесь опцией "-v":
LinuxCamp | #utils
При прекращении работы с диском, чтобы полностью закрыть к нему доступ и избежать повреждения данных, следует его размонтировать. Для этих целей существует утилита 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сть несколько разделов с исключениями: roc, devfs, devpts, sysfs, rpc_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❤🔥6❤1
Релиз 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
По информации 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
👍44❤8🤯3✍2💊1
ArcoLinux прекращает деятельность
ArcoLinux — открытая операционная система, разрабатываемая группой бельгийских программистов на основе ArchLinux.
Завершает работу после 8 лет существования. Эрик Дюбуа (создатель) сообщил, что проект прекратит выпуск ISO, приложений и скриптов с 1 июля 2025 года. Уже скоро социальные сети проекта также будут деактивированы.
Причины:
— Личные причины Эрика Дюбуа: автор не стремится к новым амбициозным планам и хочет замедлить темп жизни.
Он планирует заниматься Linux исключительно для удовольствия, без давления, связанного с управлением крупной инициативой
— Появление мелких ошибок, влияющих на качество работы, из-за потери концентрации и внимания создателя проекта
LinuxCamp | #news
ArcoLinux — открытая операционная система, разрабатываемая группой бельгийских программистов на основе ArchLinux.
Завершает работу после 8 лет существования. Эрик Дюбуа (создатель) сообщил, что проект прекратит выпуск ISO, приложений и скриптов с 1 июля 2025 года. Уже скоро социальные сети проекта также будут деактивированы.
Причины:
— Личные причины Эрика Дюбуа: автор не стремится к новым амбициозным планам и хочет замедлить темп жизни.
Он планирует заниматься Linux исключительно для удовольствия, без давления, связанного с управлением крупной инициативой
— Появление мелких ошибок, влияющих на качество работы, из-за потери концентрации и внимания создателя проекта
Код, видео, документация — все это останется в открытом доступе для изучения, форка или переработки. Я искренне надеюсь, что другие найдут в этом вдохновение, как когда-то нашел я в сообществе
LinuxCamp | #news
🔥28👍18❤🔥4😢4🫡4❤1
Как разбить файл на части?
В некоторых случаях один файл нужно разбить на несколько частей, например, для загрузки либо копирования в случае слишком большого размера. Проще всего это сделать с помощью утилиты split.
Команда используется для разбивки файлов по размеру, количеству строк и на определенное количество составных частей.
Разбить по размеру
Для этого используем опцию "-b", определяющую максимальный размер элемента. За основу возьмем файлик в 721 байт. Его нужно разбить на части по 100 байт. Для удобства зададим префикс имени "file-part_":
Помимо оригинала появятся еще 8 файлов:
Разбить по количеству строк
Может быть нужно разбить один текстовый документ на несколько, с количеством строк "<= n". В этом вопросе полезной окажется опция "-l". Команда поделит большой log-файл на части по 10 тысяч строк в каждом:
Разбить на определённое количество файлов
Еще одна интересная задача, в решении которой поможет опция "-n". Размер будет, по возможности, поделен поровну. Достаточно прописать итоговое количество файлов и запустить команду:
Настройка имени частей файла
Как мы уже поняли, для split префикс определяет название части файла, после чего идет дефолтный суффикс из двух латинских букв.
С помощью опций можно изменить его длину "-a", переключиться на числа "-d" или hex-символы "-x". В последних двух сценариях получится выбрать начальную точку отчета "--numeric-suffixes" для чисел и "--hex-suffixes" для hex-символов.
Возьмем задачу – разделить текстовый файл на 3 части равного размера, чтобы каждый из них имел префикс "file-part_" и числовой суффикс из одного символа, начиная с 1:
Объединение частей файла
Следующий шаг – объединение нескольких частей в единый файл. Для этих целей отлично подойдет утилита cat. Сначала нужно задать имена частей, потом итоговый файл:
LinuxCamp | #utils
В некоторых случаях один файл нужно разбить на несколько частей, например, для загрузки либо копирования в случае слишком большого размера. Проще всего это сделать с помощью утилиты 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🔥13❤5❤🔥1
Как удалять ссылки?
В общем-то, задача довольно примитивная, но и пост получится не гигантский. Посмотрим на несколько команд, которые помогут более эффективно расправляться с ссылками.
Обычно мы как проверяем ссылку - выполняем "ls -l" и смотрим на тип:
Если будем работать через find, руками тип смотреть не придется. Для фильтрации по символьным ссылкам у нас есть опция "-type l":
Если мы переживаем, что удалим что-то лишнее, можем проверить путь к файлу, на который указывает ссылка. Для этого нужно для вывода команды выполнить "-exec ls -l {} \":
Напоследок разберемся с поиском и удалением битых ссылок, которые никуда не ведут. Для такой цели подойдет параметр "-xtype l":
LinuxCamp | #microhelp
В общем-то, задача довольно примитивная, но и пост получится не гигантский. Посмотрим на несколько команд, которые помогут более эффективно расправляться с ссылками.
Обычно мы как проверяем ссылку - выполняем "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:
Да, это "маковская" история. Aarch64 — это 64-битная архитектура от ARM (иногда её называют arm64).
Есть еще команда uname, которая выводит архитектуру ядра через опцию "-m". Архитектура ядра соответствует системной, поэтому этот метод можно использовать:
Команда file позволяет просматривать информацию о файлах. Для исполняемых отображается их архитектура. Если вы посмотрите архитектуру какого-либо важного системного файла, то узнаете и разрядность системы:
LinuxCamp | #utils
Разрядность ОС определяет набор инструкций процессора, которые будут использоваться для работы с данными и памятью компьютера. Понимание типа может быть полезно при установке какого-нибудь софта либо драйверов, т.к. обычно предлагаются вариации.
Существует две самые популярные: 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🔥12❤3
Forwarded from ITCamp
Мультивселенная существует)
Я как-то о его творчестве поверхностно наслышан, но, вроде, он не эти занимался. Не думал, что PewDiePie и Linux можно увидеть вместе😕
Я как-то о его творчестве поверхностно наслышан, но, вроде, он не эти занимался. Не думал, что 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
Решил провести вам небольшой экскурс по файловым системам линухи. Чтоб знали, что не только 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🔥11❤2🌭1
Удобная работа с файловой системой через CLI
Midnight Commander (mc) - файловый менеджер, работать с которым можно без графического туллкита (GTK, Qt).
Имеет графический интерфейс, который отображается в текстовом режиме. Он работает на всех видах терминалов и через SSH.
Установка и запуск:
Экран утилиты разбивается на три части - две панели с файлами (левая и правая) и командная строка, позволяющая вводить команды операционной системы.
Некоторые возможности MC
1) стандартные операции с файлами: просмотр, редактирование, копирование, переименование/перемещение, удаление, изменение прав и т.д.;
2) функции работы с выделенным блоком, поиск/замена, отмена последней операции, цветовое выделение синтаксиса и т.д.;
3) выделение файлов разных типов цветом;
4) нажав Enter на файле архива (.tar, .tgz, .zip, .a, .rpm и т.д.) можно "войти внутрь" него;
5) поиск файлов по шаблону имени и по содержимому;
6) может работать с файлами на удаленных системах посредством FTP и SSH.
Вывод
Утилита очень полезна при проведении работ на серверах, когда нет доступа к GUI. В целом, понимаю, учить эти комбинации клавиш геморно. После vim меня вообще "дергает", когда не вижу понятных кнопок)
Но оно того стоит, ребята. Со временем все начинает получаться "на автомате" и работа идет гораздо быстрее. Поэтому и nano и vim и mc хорошо бы знать.
LinuxCamp | #utils
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 вычисляет сам:
Что меняется на практике:
- Автоматические повторы — достаточно указать 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
Представьте простую бытовую задачу: каждую ночь нужно
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❤🔥2❤1💯1🗿1
На повестке дня gsettings
Сегодня расскажу вам про чудеса, которые можно вытворять с вашими приложениями благодаря системе хранения конфигураций GSettings. Мне лично эта находка сэкономила кучу времени на проработке способов хранить, заполнять и парсить конфиги.
GSettings - API, которое позволяет приложениям управлять параметрами ключ-значение: сохранять их, изменять и получать. Данные настройки хранятся в бинарном формате, ну а почитать их можно через XML схему, которую должно предоставлять приложение.
И так, очередная задача - нужно реализовать менеджер уведомлений. Запрос следующий: дать пользователю удобный интерфейс по управлению сообщениями сети и добавить общесистемный конфиг, через который можно было бы выставлять глобальные настройки.
Сразу у меня возникли мысли: “Опять этот гемор с парсингом”. Все оказалось проще - GTK приложение, которое использует Glib, может создать объект GSettings, указать имя схемы, в которой будут содержаться настройки и управлять ими.
А-ля, нам нужно дать пользователю возможность отключить ММС-ки о том, что подключение к VPN разорвано. Не вопрос:
1) добавляем в схему (….gschema.xml) дополнительную настройку
2) через get/set вызовы получаем и обновляем данные
Если отработал ивент на уведомление, просто определяем его тип и сверяем со значением конкретной настройки.
Если приложение не предоставляет GUI по управлению GSettings, пользователь может работать с ними либо через одноименную CLI утилиту, либо через GUI менеджер dconf-editor:
После правок, локальный бинарный конфиг, скорее всего, будет лежать в каталоге "~/.config/dconf/":
Если админу нужно указать глобальные настройки для всех пользователей, он может вручную подредактировать схему. Обычно они лежат в "/usr/share/glib-2.0/schemas/":
После того, как дефолтные параметры изменены, XML нужно обязательно скомпилить, т.к. читается именно бинарное представление. Без этого этапа изменения не будут применены:
LinuxCamp | #story
Сегодня расскажу вам про чудеса, которые можно вытворять с вашими приложениями благодаря системе хранения конфигураций 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🔥13❤6❤🔥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
После объявления 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❤🔥2❤1
Буквально вчера столкнулся с проблемой. Поехал, значит, на отдых и вспомнил под вечер, что надо поработать чуток. Зашел в номер, открыл ноут и начал подключаться к сети. Не думал, что столкнусь с проблемой на таком базовом действии)
Нужно было подключиться с "Debain-based" дистра к открытой сети, в которой авторизация происходила через перенаправление на определенный сайт. Такая штука называется "CaptivePortal".
Попробовал через nm-applet - не сработало. Попробовал через nmcli - аналогичная история. Начал гуглить и нашел вот тут следующее решение:
Команду нужно выполнить после базового подключения к сети. Далее вводишь, что нужно и вуаля, все работает!
LinuxCamp | Chat | #microhelp
Нужно было подключиться с "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 просто меняет группу для конкретного файла либо каталога:
И вот тут момент №1 - если вы меняете группу у символьной ссылки, ее атрибуты остаются нетронутыми и аффектится только целевой файл. Для того, чтобы изменить атрибут ссылки, нужно использовать флаг "-h" (аналогично для chown):
Момент №2 - если вы рекурсивно меняете группу для каталога, при обработке ссылки атрибуты выставляются именно для нее, а не файла. Для дереференса ссылок есть 2 флага: "-H" и "-L".
"-H" переходит по ссылкам и меняет атрибуты ресурсов. При переходе на каталог рекурсивная обработка для него прекращается (только каталогу группу поменяем и все). "-L" при переходе на каталог идет рекурсивно и по нему тоже.
LinuxCamp | #utils
В 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❤🔥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
Набросал тут план изучения 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👍30❤6✍4❤🔥1🗿1