LinuxCamp | DevOps
14.5K subscribers
224 photos
10 videos
330 links
Обо мне: C/C++/Linux эксперт. Говорим про разработку, Linux, DevOps, сети и администрирование.

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

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

РКН: https://clck.ru/3RWA3C
Download Telegram
Opensource в каждый офис

Германская земля Шлезвиг-Гольштейн приняла решение отказаться от Microsoft Office 365 в пользу LibreOffice и другого открытого ПО, что приведёт к значительной экономии бюджета и повышению суверенитета данных.

Такой переход позволит экономить более 15 млн евро ежегодно. Сейчас выполнена миграция 80% рабочих мест.

Кроме того, запланирован инвестиционный вклад в размере 9 млн евро, который направлен на завершение миграции и развитие открытых решений.

LinuxCamp | #news
👏5921👍12🤣5
Сетевые неймспейсы: изолируем сетевой стек в три команды

Что такое netns

Сетевой namespace - это отдельный сетевой стек: свои интерфейсы, маршруты, iptables, локальные порты.

Создаём изолированный сетевой стек

Создаём namespace:


sudo ip netns add testns


Проверяем:


ip netns list


Пустой стек без интерфейсов, кроме lo.

Добавляем виртуальный линк

Соединяем основной namespace и testns:


sudo ip link add veth0 type veth peer name veth1
sudo ip link set veth1 netns testns


Назначаем адреса:


sudo ip addr add 10.10.0.1/24 dev veth0
sudo ip netns exec testns ip addr add 10.10.0.2/24 dev veth1


Включаем интерфейсы:


sudo ip link set veth0 up
sudo ip netns exec testns ip link set veth1 up
sudo ip netns exec testns ip link set lo up


Проверяем связь

Из основного пространства:


ping -c 3 10.10.0.2


Из изолированного:


sudo ip netns exec testns ping -c 3 10.10.0.1


Для чего это в реальности

Тестирование сетевых конфигов, iptables, VPN-клиентов, сервисов, бинарей, маршрутизации без ломания системы. Поднимаешь неймспейс, гоняешь сервис внутри:


sudo ip netns exec testns curl http://10.10.0.1:8080


И не трогаешь основной стек.

Вывод

Сетевые неймспейсы дают чистую сетевую песочницу. Три команды и у вас отдельная "мини-сеть" для экспериментов, тестов и отладки, без виртуалок и контейнеров.

LinuxCamp | #utils
👍40🔥164🌭3
tune2fs: куда пропало место и почему это нормально

Что показывает Reserved block count

Reserved block count - это блоки ext4, зарезервированные под root. По умолчанию около 5% диска. На больших RAID это десятки гигабайт, и это ожидаемо. Посмотреть сколько зарезервировано:


sudo tune2fs -l /dev/md2 | grep "Reserved block count"


Зачем нужен резерв

Резерв позволяет системе работать, даже если диск заполнен: писать логи, логиниться под root, корректно завершать сервисы. Убирая его полностью, ты сознательно снижаешь устойчивость системы к авариям.

Когда можно уменьшать

На разделах с данными (/var, /data, /srv) резерв обычно не критичен. На системном разделе (/) его лучше оставить хотя бы минимальным. Уменьшение до 1%:


sudo tune2fs -m 1 /dev/md2


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

К чему может привести неправильная настройка

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

Вывод

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

LinuxCamp | #utils
👍17🔥65❤‍🔥1
Мне кажется, нужно для всех топ компаний вводить новый стандарт - шифровать методом стеганографии и прятать под PNG все логи и бэкапы инфраструктуры 🤔

LinuxCamp | #memes
Please open Telegram to view this post
VIEW IN TELEGRAM
😁53🤣13👍75
Когда кто-то говорит:

да кому вообще нужен ваш линукс


Чтобы не было вопросов, нужно на каждой системе, где он юзается писать "Powered by linux"

LinuxCamp | #memes
💯63👍152💊2
fsck и счётчик монтирований: как управлять лимитом проверок

Что за лимит монтирований

В ext4 есть счётчик монтирований. Когда он достигает Maximum mount count, при следующей загрузке запускается fsck. Проверка текущих значений:


sudo tune2fs -l /dev/sda1 | grep -E "Mount count|Maximum mount count"


Почему fsck может мешать

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

Как увеличить лимит

Если нужно реже запускать проверку, лимит можно поднять:


sudo tune2fs -c 500 /dev/sda1


Это значит, что fsck сработает только после 500 монтирований. При необходимости можно сбросить текущий счётчик:


sudo tune2fs -C 0 /dev/sda1


Важное про безопасность

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

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

Вывод

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

LinuxCamp | #utils
👍27🔥75
atime, relatime, noatime: зачем это вообще нужно

Что такое atime

atime - это время последнего доступа к файлу. Каждое чтение файла обновляет метаданные. Даже обычный cat, grep или ls может вызвать запись на диск. Проверить режим монтирования можно так:


mount | grep atime


Почему atime это проблема

Обновление atime - дополнительная запись. Исторически atime был включён всегда, и это реально било по производительности.

Компромисс - relatime

relatime обновляет atime не всегда, а только если atime старше mtime или ctime, или прошло больше 24 часов Это дефолт почти во всех современных дистрибутивах. Пример:


UUID=... / ext4 defaults,relatime 0 1


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

noatime - максимум производительности

noatime полностью отключает обновление atime. Используется для: /var, /data, базы данных, кэшей, логов


UUID=... /data ext4 defaults,noatime 0 2


Когда atime все-таки нужен

Некоторые утилиты и сценарии зависят от atime: почтовые системы, старые бэкапы, системы очистки неиспользуемых файлов. С noatime такая логика ломается.

Вывод

atime - это не архаизм, а механизм, который нужно контролировать. relatime подходит почти всегда. noatime - осознанная оптимизация для data-разделов. Менять режим стоит только понимая, что именно ты ускоряешь и чем жертвуешь.

LinuxCamp | #utils
👍276🤔5🔥3👀1
Релиз Kali Linux 2025.4

Ключевое изменение - произошел полный переход графической среды GNOME на Wayland. Сеансы X11 теперь работают только через XWayland.

Что нового:

— Дистрибутив обновлён до ядра Linux 6.16 и GNOME 49

— Добавлены новые утилиты: bpf-linker для работы с BPF, evil-winrm-py для удалённого управления Windows и hexstrike-ai (MCP-сервер для ИИ-агентов)

— Улучшена поддержка гостевых утилит для VirtualBox, VMware и QEMU под Wayland

Из-за возросшего размера образа Live (более 5 ГБ) разработчики отказались от его прямой HTTP-загрузки.

Теперь полный образ доступен только через BitTorrent, что уже практиковалось для 15-гигабайтного варианта «Everything».

LinuxCamp | #news
👍255🔥3
slab и slub: куда уходит память ядра

slab и slub - это аллокатор памяти ядра. Он кэширует структуры ядра, чтобы не выделять и не освобождать память постоянно. Из-за этого память может выглядеть занятой, хотя пользовательские процессы её не используют.

Быстрая диагностика

Смотрим общее потребление slab:


grep Slab /proc/meminfo


Детализация по кэшам:


slabtop


Здесь видно, какие структуры ядра занимают память: dentry, inode, kmalloc-*, sock, buffer_head и т.д.

Почему появляется соблазн чистить кэш

При высокой файловой активности slab растёт и визуально съедает RAM. В free кажется, что памяти почти нет, хотя это нормальное поведение. В такие моменты часто вспоминают про drop_caches. Почистить кеш можно командой:


sync
echo 2 | sudo tee /proc/sys/vm/drop_caches


sync принудительно сбрасывает грязные данные на диск, после чего ядро освобождает dentry, inode и другие slab-структуры. Память освобождается сразу.

Зачем это используют на практике

Команду применяют для диагностики, чтобы понять, кэш это или утечка. Если после очистки slab резко уменьшается - это нормальный кэш. Если он быстро возвращается без нагрузки, значит возможна проблема в ядре, драйвере или модуле.

Какие проблемы будут после выполнения

После очистки кэша первые файловые операции становятся медленнее, увеличивается latency, возрастает нагрузка на диск, сервисы с активным I/O могут кратковременно тормозить. На проде это может быть заметно пользователям.

Вывод

drop_caches - это диагностический инструмент, а не оптимизация. Использовать его стоит осознанно, с sync перед выполнением и пониманием того, что система после команды станет временно медленнее.

LinuxCamp | #utils
🔥227👍5❤‍🔥1
zombie процессы: кто их чистит и когда это проблема

Что такое zombie

Zombie-процесс - это процесс, который уже завершился, но его родитель ещё не прочитал код завершения. Он не потребляет CPU и память, но занимает запись в таблице процессов. В ps выглядит так:


ps aux | grep Z
# или
ps -eo pid,ppid,stat,cmd | grep Z


Статус Z или Z+.

Откуда они берутся

Процесс завершился, родитель не вызвал wait() или waitpid(). Часто это баги в демонах, скриптах, самописных сервисах, иногда кривые fork-циклы.

Кто чистит зомби

Зомби может удалить только родительский процесс. Если родитель умер, зомби автоматически переподвешивается к init / systemd, и он его корректно дочищает. То есть сам зомби убить нельзя, у него уже нет кода выполнения.

Как диагностировать причину

Смотрим родителя зомби:


ps -eo pid,ppid,stat,cmd | grep Z


Если PPID не 1, значит родитель жив и неправильно обрабатывает завершение детей.

Что с этим делать

Убивать нужно родителя, а не зомби. После перезапуска или фикса родительского процесса зомби исчезнут автоматически.

Вывод

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

LinuxCamp | #utils
4👍3512🔥6
Действительно, как же не хватает в ОС рекламы и напоминаний о таких знаковых днях, как "Национальный день пиццы")

Как бы вы отнеслись к тому, что Linux дистры начали бы пушить рекламу? Как быстро бы снесли образ либо перешли на cli?

LinuxCamp | #memes
🤣74🙈92
systemd watchdog: перезапуск зависших сервисов

Что это вообще такое

Watchdog в systemd - это механизм, который перезапускает сервис, если он завис, даже если процесс формально жив. Не по exit-коду, а по факту отсутствия уведомления.

Минимальная настройка

В юните сервиса:


[Service]
Type=notify
WatchdogSec=30


Это значит, что сервис обязан раз в 30 секунд подтверждать, что он работает. Сервис пингует systemd через sd_notify. Простейший пример (bash):


while true; do
systemd-notify WATCHDOG=1
sleep 10
done


Если systemd-notify перестаёт вызываться watchdog срабатывает. При зависании, даже если процесс жив, но зациклился, завис на I/O, ушёл в deadlock, перестал обрабатывать события systemd считает сервис мёртвым и делает:


Watchdog timeout, restarting service


Проверка, что watchdog активен


systemctl show myservice | grep Watchdog


И в логах:


journalctl -u myservice | grep watchdog


Частая ошибка


Type=simple
WatchdogSec=30


Не сработает. Watchdog требует Type=notify, иначе systemd не ждёт сигналов.

Вывод

systemd watchdog можно использовать как защита от зависаний, а не падений. Если сервис может застыть, но не упасть, то watchdog лучше включить watchdog.

LinuxCamp | #utils
👍3410🔥8
Restart=always: зло или нет

Что делает Restart=always

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


[Service]
Restart=always


Почему это выглядит удобно

Сервис упал, systemd быстро поднял. Никаких алертов, все типо работает. Именно здесь начинается проблема.

Типичный плохой сценарий

Сервис падает сразу после старта.


Restart=always
RestartSec=1


В итоге:


start → crash → restart → crash → restart


CPU жрётся, логи летят, система шумит, а причина падения маскируется. Посмотреть это легко:


systemctl status myservice
journalctl -u myservice


Когда Restart=always реально зло

Если сервис падает из-за: ошибки конфигурации, отсутствия зависимостей, недоступной сети, битых env-переменных. В этих случаях рестарт ничего не чинит, а только мешает диагностике.

Более безопасная альтернатива

Для большинства сервисов лучше:


Restart=on-failure
RestartSec=5


systemd перезапустит сервис при краше, но не будет вечно крутить его при нормальном выходе.

Контроль перезапусков

Чтобы не получить restart loop:


StartLimitIntervalSec=60
StartLimitBurst=5


После 5 падений за минуту systemd остановит сервис.

Когда Restart=always оправдан

Очень простые демоны, воркеры без состояния, sidecar-сервисы, сервисы, где падение = всегда ошибка. Даже там обычно добавляют лимиты.

Вывод

Restart=always - не защита, а автоповтор ошибки. Если сервис может падать из-за конфигурации или окружения используй on-failure и лимиты. Автоперезапуск должен помогать системе, а не скрывать проблемы.

LinuxCamp | #utils
👍43🔥12❤‍🔥64
conntrack table: невидимый лимит Linux

Что такое conntrack

conntrack - это таблица отслеживания сетевых соединений в netfilter. Каждое TCP/UDP соединение, NAT, kube-proxy, Docker, firewall проходит через нее. Если таблица переполнена, сеть начинает ломаться без ошибок в приложениях.

Симптомы переполнения

Соединения не устанавливаются, random timeouts, сервисы живы, но клиенты не могут подключиться, CPU норм, сеть есть, но ничего не работает. В логах ядра:


dmesg | grep conntrack

типичный вывод:
nf_conntrack: table full, dropping packet


Проверяем текущее состояние


# сколько соединений сейчас
cat /proc/sys/net/netfilter/nf_conntrack_count

# максимальный лимит
cat /proc/sys/net/netfilter/nf_conntrack_max


Если count ≈ max, то ты уже в зоне риска.

Временное решение

Увеличить лимит на лету:


sysctl -w net.netfilter.nf_conntrack_max=262144


Постоянная настройка

В /etc/sysctl.conf или /etc/sysctl.d/conntrack.conf:


net.netfilter.nf_conntrack_max=262144
net.netfilter.nf_conntrack_tcp_timeout_established=600


И применить:


sysctl -p


Вывод

Переполненный conntrack выглядит как непонятная поломка сети. Проверка занимает 10 секунд, но лучше заранее заняться настройкой правильного лимита.

LinuxCamp | #utils
👍37🔥125🎄3
TCP TIME_WAIT: нормально ли это

Что это и зачем

TIME_WAIT - состояние TCP, в котором сокет некоторое время живёт после закрытия соединения. Это нужно, чтобы гарантировать доставку финальных пакетов и не допустить повторного использования старых sequence numbers.

Как посмотреть и когда это важно

Количество сокетов в TIME_WAIT видно так:


ss -tan | grep TIME-WAIT | wc -l


Проблемой это становится только тогда, когда новые соединения перестают создаваться. Обычно происходит, когда закончились ephemeral ports. Это временные клиентские порты, которые ядро автоматически выделяет для исходящих соединений. Их диапазон можно посмотреть здесь:


cat /proc/sys/net/ipv4/ip_local_port_range


Если диапазон узкий и соединения короткие, порты быстро оказываются заняты TIME_WAIT.

Почему их становится много

Короткие HTTP-соединения, отсутствие keep-alive, прокси, балансировщики, высокая RPS, микросервисы, healthchecks - все это создает тысячи короткоживущих TCP-сессий. В этом сценарии большое количество TIME_WAIT признак нагрузки, а не поломки.

Что делать безопасно

Обычно ничего. Если упираешься в лимиты, расширяют диапазон ephemeral ports и разрешают повторное использование TIME_WAIT для клиентов:


sysctl -w net.ipv4.ip_local_port_range="10240 65535"
sysctl -w net.ipv4.tcp_tw_reuse=1


Главное решение все равно на уровне приложения: keep-alive, connection pool, HTTP/2.

Вывод

TIME_WAIT - это нормальное состояние TCP. Пока есть свободные ephemeral ports, система работает корректно. Если они заканчиваются, то масштабируй диапазон портов и соединения, а не пытайся лечить TCP.

LinuxCamp | #utils
👍23🔥75
ExecStartPre / ExecStartPost: хуки для systemd

Что это такое

ExecStartPre и ExecStartPost - это команды, которые systemd выполняет до и после запуска сервиса.


ExecStartPre=
ExecStart=
ExecStartPost=


Важно: если ExecStartPre вернёт non-zero, то сервис не запустится вообще.

Самая частая ловушка

Pre-хук выглядит безопасным, но падает:


ExecStartPre=/usr/bin/curl http://127.0.0.1:9000/health


Если сервис на 9000 ещё не поднят, curl вернёт код ошибки, systemd считает, что сервис сломан, и даже не дойдёт до ExecStart. Pre-хук выполняется каждый раз при старте, включая рестарты. Любая временная проблема: сеть, DNS, файл, env превращается в стоппер сервиса. В логах:


journalctl -u myservice



ExecStartPre failed with exit code 7


Типичные ошибки:


ExecStartPre=/bin/mkdir /var/run/app
ExecStartPre=/usr/bin/test -f /config/app.yml
ExecStartPre=/usr/bin/psql -c "select 1"


Для post-хуков помни, если ExecStartPost падает, значит сервис уже запущен, но unit помечается как failed.

Практическое правило

ExecStartPre - только для быстрых, гарантированных операций (создать каталог, выставить права, подготовить env). Все, что зависит от сети, БД, других сервисов лучше выносить в код сервиса.

Вывод

ExecStartPre - это точка отказа, если одна команда упала, то сервис не стартует. Если хук может упасть либо гаси ошибку, либо убирай его совсем.

LinuxCamp | #utils
👍279🔥5
Все в Linux должно быть как Windows

В GNOME решили отключить вставку по среднему клику мыши. И чем дальше, тем страннее становятся их аргументы.

Во-первых, основная причина — это «X11ism». То есть, функция им не нравится, потому что она родом из X11, а к X11 у них политические претензии.

Но потом они попытались найти более «техническое» обоснование. И, кажется, пришли к выводу, что Linux должен работать в точности как Windows.

«У Linux-десктопа 4% рыночной доли»

«А значит, оставшиеся 96% пользователей привыкли к средам, где… вставки по среднему клику не существует».

— один из участников команды.


Вообще, мысли на счет того, что нужно быть похожими на винду - верные.

Но, как по мне, это имеет вес на более глобальном функционале, а не на способе вставки текста...

LinuxCamp | #news
🤣56👍167🤯4😱4🤔2🌚1🗿1
Новый удобный df: duf

duf - это консольная утилита для просмотра использования файловых систем в Linux. По назначению она повторяет df, но выводит информацию в структурированном виде, поддерживается цветовая индикация.

Установка на Ubuntu

В Ubuntu duf доступен в официальном репозитории. Установка стандартная, без сторонних источников и сборки из исходников.


sudo apt install duf


После установки команда duf становится доступна глобально.

Основные режимы работы

Запуск без параметров показывает все примонтированные файловые системы, включая tmpfs, loop-устройства, overlay и сетевые маунты. Это удобно для анализа систем с контейнерами и снапами.


duf


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


duf --only local


Дополнительно duf умеет сортировать вывод, скрывать псевдо-файловые системы и работать одинаково в интерактивных и скриптовых сценариях.

Вывод

duf - это современная замена df с тем же назначением и расширенным форматом вывода. Подходит для рабочих станций и серверов, особенно в окружениях с большим количеством примонтированных файловых систем.

LinuxCamp | #utils
1👍5013🔥7❤‍🔥1
hyperfine: замер времени выполнения команд

hyperfine - это утилита для бенчмаркинга команд в Linux. Она запускает одну или несколько команд много раз и измеряет время выполнения. В отличие от time, здесь сразу считаются среднее значение, минимальное и максимальное время, стандартное отклонение. Учитываются прогрев и шум системы.

Установка

В Ubuntu утилита доступна в официальных репозиториях.


sudo apt install hyperfine


После установки команда hyperfine доступна без дополнительной настройки.

Базовое использование

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


hyperfine "ls -R /usr/share >/dev/null"


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


hyperfine "grep -R foo ." "rg foo ."


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

Вывод

hyperfine предназначен для воспроизводимых замеров производительности команд. Подходит для сравнения CLI-утилит, флагов запуска, скриптов и небольших изменений в пайплайнах, где важно видеть реальные цифры, а не разовый запуск через time.

LinuxCamp | #utils
23👍12🔥6❤‍🔥1
bottom (btm): мониторинг системы с гибкой визуализацией

bottom, сокращённо btm, это TUI-утилита для мониторинга состояния системы. По задачам она пересекается с top и htop: загрузка CPU, использование памяти, диск, сеть, процессы. Отличие в том, что btm сразу ориентирован на графическое представление данных в терминале и гибкую компоновку экрана.

Установка


sudo apt install bottom


После установки утилита запускается командой btm.

Как работает

При запуске btm открывает интерактивный интерфейс с несколькими блоками: CPU, память, swap, диск, сеть, список процессов. Блоки можно скрывать, менять их порядок и переключать режимы отображения с клавиатуры, без редактирования конфигов.


btm


Для серверов и Docker-хостов полезен режим с упором на процессы и нагрузку, где видно PID, пользователя, потребление CPU и памяти в реальном времени.


btm -b


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

Вывод

bottom - это интерактивный мониторинг системы в терминале с расширенной визуализацией и настройкой интерфейса. Подходит для личного пользования и постоянного контроля ресурсов без GUI-инструментов.

LinuxCamp | #utils
👍25🔥74❤‍🔥1
Forwarded from ITCamp | AI & Code
This media is not supported in your browser
VIEW IN TELEGRAM
Арчевод показал свой рабочий стол Linux дистра и его оформление. Ну, по факту, выглядит оч даже ничего)

Вы такое, как, одобряете?

🔥 - топ окружение
👍 - нет ничего краше Винды

ITCamp | AI & Code
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥58💊52❤‍🔥9😁7👍2🤯21