zombie процессы: кто их чистит и когда это проблема
Что такое zombie
Zombie-процесс - это процесс, который уже завершился, но его родитель ещё не прочитал код завершения. Он не потребляет CPU и память, но занимает запись в таблице процессов. В ps выглядит так:
Статус Z или Z+.
Откуда они берутся
Процесс завершился, родитель не вызвал wait() или waitpid(). Часто это баги в демонах, скриптах, самописных сервисах, иногда кривые fork-циклы.
Кто чистит зомби
Зомби может удалить только родительский процесс. Если родитель умер, зомби автоматически переподвешивается к init / systemd, и он его корректно дочищает. То есть сам зомби убить нельзя, у него уже нет кода выполнения.
Как диагностировать причину
Смотрим родителя зомби:
Если PPID не 1, значит родитель жив и неправильно обрабатывает завершение детей.
Что с этим делать
Убивать нужно родителя, а не зомби. После перезапуска или фикса родительского процесса зомби исчезнут автоматически.
Вывод
Zombie - это не утечка памяти, а утечка внимания со стороны родителя. Если зомби накапливаются - это всегда баг в коде или в управлении процессами, а не проблема ядра.
LinuxCamp | #utils
Что такое 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👍35❤12🔥6
systemd watchdog: перезапуск зависших сервисов
Что это вообще такое
Watchdog в systemd - это механизм, который перезапускает сервис, если он завис, даже если процесс формально жив. Не по exit-коду, а по факту отсутствия уведомления.
Минимальная настройка
В юните сервиса:
Это значит, что сервис обязан раз в 30 секунд подтверждать, что он работает. Сервис пингует systemd через sd_notify. Простейший пример (bash):
Если systemd-notify перестаёт вызываться watchdog срабатывает. При зависании, даже если процесс жив, но зациклился, завис на I/O, ушёл в deadlock, перестал обрабатывать события systemd считает сервис мёртвым и делает:
Проверка, что watchdog активен
И в логах:
Частая ошибка
Не сработает. Watchdog требует Type=notify, иначе systemd не ждёт сигналов.
Вывод
systemd watchdog можно использовать как защита от зависаний, а не падений. Если сервис может застыть, но не упасть, то watchdog лучше включить watchdog.
LinuxCamp | #utils
Что это вообще такое
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
👍34❤10🔥8
Restart=always: зло или нет
Что делает Restart=always
systemd перезапускает сервис при любом завершении, даже если он упал из-за бага или был остановлен вручную.
Почему это выглядит удобно
Сервис упал, systemd быстро поднял. Никаких алертов, все типо работает. Именно здесь начинается проблема.
Типичный плохой сценарий
Сервис падает сразу после старта.
В итоге:
CPU жрётся, логи летят, система шумит, а причина падения маскируется. Посмотреть это легко:
Когда Restart=always реально зло
Если сервис падает из-за: ошибки конфигурации, отсутствия зависимостей, недоступной сети, битых env-переменных. В этих случаях рестарт ничего не чинит, а только мешает диагностике.
Более безопасная альтернатива
Для большинства сервисов лучше:
systemd перезапустит сервис при краше, но не будет вечно крутить его при нормальном выходе.
Контроль перезапусков
Чтобы не получить restart loop:
После 5 падений за минуту systemd остановит сервис.
Когда Restart=always оправдан
Очень простые демоны, воркеры без состояния, sidecar-сервисы, сервисы, где падение = всегда ошибка. Даже там обычно добавляют лимиты.
Вывод
Restart=always - не защита, а автоповтор ошибки. Если сервис может падать из-за конфигурации или окружения используй on-failure и лимиты. Автоперезапуск должен помогать системе, а не скрывать проблемы.
LinuxCamp | #utils
Что делает 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❤🔥6❤4
conntrack table: невидимый лимит Linux
Что такое conntrack
conntrack - это таблица отслеживания сетевых соединений в netfilter. Каждое TCP/UDP соединение, NAT, kube-proxy, Docker, firewall проходит через нее. Если таблица переполнена, сеть начинает ломаться без ошибок в приложениях.
Симптомы переполнения
Соединения не устанавливаются, random timeouts, сервисы живы, но клиенты не могут подключиться, CPU норм, сеть есть, но ничего не работает. В логах ядра:
Проверяем текущее состояние
Если count ≈ max, то ты уже в зоне риска.
Временное решение
Увеличить лимит на лету:
Постоянная настройка
В /etc/sysctl.conf или /etc/sysctl.d/conntrack.conf:
И применить:
Вывод
Переполненный conntrack выглядит как непонятная поломка сети. Проверка занимает 10 секунд, но лучше заранее заняться настройкой правильного лимита.
LinuxCamp | #utils
Что такое 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🔥12❤5🎄3
TCP TIME_WAIT: нормально ли это
Что это и зачем
TIME_WAIT - состояние TCP, в котором сокет некоторое время живёт после закрытия соединения. Это нужно, чтобы гарантировать доставку финальных пакетов и не допустить повторного использования старых sequence numbers.
Как посмотреть и когда это важно
Количество сокетов в TIME_WAIT видно так:
Проблемой это становится только тогда, когда новые соединения перестают создаваться. Обычно происходит, когда закончились ephemeral ports. Это временные клиентские порты, которые ядро автоматически выделяет для исходящих соединений. Их диапазон можно посмотреть здесь:
Если диапазон узкий и соединения короткие, порты быстро оказываются заняты TIME_WAIT.
Почему их становится много
Короткие HTTP-соединения, отсутствие keep-alive, прокси, балансировщики, высокая RPS, микросервисы, healthchecks - все это создает тысячи короткоживущих TCP-сессий. В этом сценарии большое количество TIME_WAIT признак нагрузки, а не поломки.
Что делать безопасно
Обычно ничего. Если упираешься в лимиты, расширяют диапазон ephemeral ports и разрешают повторное использование TIME_WAIT для клиентов:
Главное решение все равно на уровне приложения: keep-alive, connection pool, HTTP/2.
Вывод
TIME_WAIT - это нормальное состояние TCP. Пока есть свободные ephemeral ports, система работает корректно. Если они заканчиваются, то масштабируй диапазон портов и соединения, а не пытайся лечить TCP.
LinuxCamp | #utils
Что это и зачем
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🔥7❤5
ExecStartPre / ExecStartPost: хуки для systemd
Что это такое
ExecStartPre и ExecStartPost - это команды, которые systemd выполняет до и после запуска сервиса.
Важно: если ExecStartPre вернёт non-zero, то сервис не запустится вообще.
Самая частая ловушка
Pre-хук выглядит безопасным, но падает:
Если сервис на 9000 ещё не поднят, curl вернёт код ошибки, systemd считает, что сервис сломан, и даже не дойдёт до ExecStart. Pre-хук выполняется каждый раз при старте, включая рестарты. Любая временная проблема: сеть, DNS, файл, env превращается в стоппер сервиса. В логах:
Типичные ошибки:
Для post-хуков помни, если ExecStartPost падает, значит сервис уже запущен, но unit помечается как failed.
Практическое правило
ExecStartPre - только для быстрых, гарантированных операций (создать каталог, выставить права, подготовить env). Все, что зависит от сети, БД, других сервисов лучше выносить в код сервиса.
Вывод
ExecStartPre - это точка отказа, если одна команда упала, то сервис не стартует. Если хук может упасть либо гаси ошибку, либо убирай его совсем.
LinuxCamp | #utils
Что это такое
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
👍27❤9🔥5
Все в Linux должно быть как Windows
В GNOME решили отключить вставку по среднему клику мыши. И чем дальше, тем страннее становятся их аргументы.
Во-первых, основная причина — это «X11ism». То есть, функция им не нравится, потому что она родом из X11, а к X11 у них политические претензии.
Но потом они попытались найти более «техническое» обоснование. И, кажется, пришли к выводу, что Linux должен работать в точности как Windows.
Вообще, мысли на счет того, что нужно быть похожими на винду - верные.
Но, как по мне, это имеет вес на более глобальном функционале, а не на способе вставки текста...
LinuxCamp | #news
В GNOME решили отключить вставку по среднему клику мыши. И чем дальше, тем страннее становятся их аргументы.
Во-первых, основная причина — это «X11ism». То есть, функция им не нравится, потому что она родом из X11, а к X11 у них политические претензии.
Но потом они попытались найти более «техническое» обоснование. И, кажется, пришли к выводу, что Linux должен работать в точности как Windows.
«У Linux-десктопа 4% рыночной доли»
«А значит, оставшиеся 96% пользователей привыкли к средам, где… вставки по среднему клику не существует».
— один из участников команды.
Вообще, мысли на счет того, что нужно быть похожими на винду - верные.
Но, как по мне, это имеет вес на более глобальном функционале, а не на способе вставки текста...
LinuxCamp | #news
🤣56👍16❤7🤯4😱4🤔2🌚1🗿1
Новый удобный df: duf
duf - это консольная утилита для просмотра использования файловых систем в Linux. По назначению она повторяет df, но выводит информацию в структурированном виде, поддерживается цветовая индикация.
Установка на Ubuntu
В Ubuntu duf доступен в официальном репозитории. Установка стандартная, без сторонних источников и сборки из исходников.
После установки команда duf становится доступна глобально.
Основные режимы работы
Запуск без параметров показывает все примонтированные файловые системы, включая tmpfs, loop-устройства, overlay и сетевые маунты. Это удобно для анализа систем с контейнерами и снапами.
Для вывода только локальных дисков используется отдельный режим, который исключает временные и виртуальные файловые системы.
Дополнительно duf умеет сортировать вывод, скрывать псевдо-файловые системы и работать одинаково в интерактивных и скриптовых сценариях.
Вывод
duf - это современная замена df с тем же назначением и расширенным форматом вывода. Подходит для рабочих станций и серверов, особенно в окружениях с большим количеством примонтированных файловых систем.
LinuxCamp | #utils
duf - это консольная утилита для просмотра использования файловых систем в Linux. По назначению она повторяет df, но выводит информацию в структурированном виде, поддерживается цветовая индикация.
Установка на Ubuntu
В Ubuntu duf доступен в официальном репозитории. Установка стандартная, без сторонних источников и сборки из исходников.
sudo apt install duf
После установки команда duf становится доступна глобально.
Основные режимы работы
Запуск без параметров показывает все примонтированные файловые системы, включая tmpfs, loop-устройства, overlay и сетевые маунты. Это удобно для анализа систем с контейнерами и снапами.
duf
Для вывода только локальных дисков используется отдельный режим, который исключает временные и виртуальные файловые системы.
duf --only local
Дополнительно duf умеет сортировать вывод, скрывать псевдо-файловые системы и работать одинаково в интерактивных и скриптовых сценариях.
Вывод
duf - это современная замена df с тем же назначением и расширенным форматом вывода. Подходит для рабочих станций и серверов, особенно в окружениях с большим количеством примонтированных файловых систем.
LinuxCamp | #utils
1👍50❤13🔥7❤🔥1
hyperfine: замер времени выполнения команд
hyperfine - это утилита для бенчмаркинга команд в Linux. Она запускает одну или несколько команд много раз и измеряет время выполнения. В отличие от time, здесь сразу считаются среднее значение, минимальное и максимальное время, стандартное отклонение. Учитываются прогрев и шум системы.
Установка
В Ubuntu утилита доступна в официальных репозиториях.
После установки команда hyperfine доступна без дополнительной настройки.
Базовое использование
Простейший случай это замер одной команды. hyperfine сам выполнит несколько прогонов и выведет агрегированную статистику.
Чаще всего утилиту используют для сравнения нескольких вариантов одной и той же операции, например разных реализаций или флагов.
В этом режиме вывод сразу показывает разницу по времени и разброс значений, что удобно для принятия технических решений.
Вывод
hyperfine предназначен для воспроизводимых замеров производительности команд. Подходит для сравнения CLI-утилит, флагов запуска, скриптов и небольших изменений в пайплайнах, где важно видеть реальные цифры, а не разовый запуск через time.
LinuxCamp | #utils
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 сразу ориентирован на графическое представление данных в терминале и гибкую компоновку экрана.
Установка
После установки утилита запускается командой btm.
Как работает
При запуске btm открывает интерактивный интерфейс с несколькими блоками: CPU, память, swap, диск, сеть, список процессов. Блоки можно скрывать, менять их порядок и переключать режимы отображения с клавиатуры, без редактирования конфигов.
Для серверов и Docker-хостов полезен режим с упором на процессы и нагрузку, где видно PID, пользователя, потребление CPU и памяти в реальном времени.
Все настройки сохраняются в конфигурационном файле, который можно использовать одинаково на разных машинах.
Вывод
bottom - это интерактивный мониторинг системы в терминале с расширенной визуализацией и настройкой интерфейса. Подходит для личного пользования и постоянного контроля ресурсов без GUI-инструментов.
LinuxCamp | #utils
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🔥7❤4❤🔥1
Forwarded from ITCamp | AI & Code
This media is not supported in your browser
VIEW IN TELEGRAM
Арчевод показал свой рабочий стол Linux дистра и его оформление. Ну, по факту, выглядит оч даже ничего)
Вы такое, как, одобряете?
🔥 - топ окружение
👍 - нет ничего краше Винды
ITCamp | AI & Code
Вы такое, как, одобряете?
ITCamp | AI & Code
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥58💊52❤🔥9😁7👍2🤯2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Ролл бэк в 1994 - тут еще молодой Линус Торвальдс представляет ядро Linux версии 1.0. Как же сильно его творение эволюционировало
LinuxCamp
LinuxCamp
1👍54🔥20❤7👾3❤🔥2
entr: автозапуск команд при изменении файлов
entr - это небольшая утилита для отслеживания изменений файлов и автоматического запуска команд. Она читает список файлов из stdin и перезапускает указанную команду каждый раз, когда один из файлов меняется. Используется для сборки, тестов, перезапуска сервисов и любых задач, где нужен простой file-watcher без демонов и сложной конфигурации.
Установка
После установки бинарь entr доступен сразу.
Базовое использование
Чаще всего entr работает в связке с find или ls. Список файлов передаётся через pipe, после чего указывается команда, которую нужно выполнять при изменениях.
В этом примере тесты будут автоматически запускаться при любом изменении Go-файлов в проекте. Процесс остаётся в терминале и реагирует на каждое сохранение.
Полезные режимы
Для перезапуска long-running команд или сервисов используется флаг -r. Он корректно завершает предыдущий процесс перед новым запуском.
Такой подход часто применяют для локальной проверки конфигураций, генерации статики, сборки документации и CI-подобных сценариев без отдельного watcher-инструмента.
Вывод
entr - это утилита для реактивного запуска команд при изменении файлов. Она хорошо подходит для разработки и администрирования, когда нужен простой и предсказуемый механизм автоматизации без дополнительных сервисов и фоновых процессов.
LinuxCamp | #utils
entr - это небольшая утилита для отслеживания изменений файлов и автоматического запуска команд. Она читает список файлов из stdin и перезапускает указанную команду каждый раз, когда один из файлов меняется. Используется для сборки, тестов, перезапуска сервисов и любых задач, где нужен простой file-watcher без демонов и сложной конфигурации.
Установка
sudo apt install entr
После установки бинарь entr доступен сразу.
Базовое использование
Чаще всего entr работает в связке с find или ls. Список файлов передаётся через pipe, после чего указывается команда, которую нужно выполнять при изменениях.
find . -name "*.go" | entr go test ./...
В этом примере тесты будут автоматически запускаться при любом изменении Go-файлов в проекте. Процесс остаётся в терминале и реагирует на каждое сохранение.
Полезные режимы
Для перезапуска long-running команд или сервисов используется флаг -r. Он корректно завершает предыдущий процесс перед новым запуском.
ls *.conf | entr -r nginx -t
Такой подход часто применяют для локальной проверки конфигураций, генерации статики, сборки документации и CI-подобных сценариев без отдельного watcher-инструмента.
Вывод
entr - это утилита для реактивного запуска команд при изменении файлов. Она хорошо подходит для разработки и администрирования, когда нужен простой и предсказуемый механизм автоматизации без дополнительных сервисов и фоновых процессов.
LinuxCamp | #utils
1👍29❤9🔥5
Как случайно заGNOME'иться и что с этим делать
В Linux можно установить одно приложение из экосистемы GNOME и получить целиком весь GNOME desktop stack.
Это происходит из-за зависимостей: метапакеты, Recommends, Depends, общие сервисы и gnome-session подтягиваются пакетным менеджером автоматически.
Почему GNOME становится DE по умолчанию
Обычно это происходит, когда устанавливается gnome-session, gdm или метапакеты вроде gnome-core, gnome-shell.
После этого display manager считает GNOME полноценной сессией и может выбрать её как дефолтную, особенно если предыдущая была установлена не через метапакет.
Проверить, что именно подтянулось, можно так:
Или уже по факту посмотреть, что из GNOME стоит в системе:
Как этого избежать
На системах с apt стоит сразу отключать установку рекомендованных пакетов.
Это снижает шанс, что за одним приложением приедет половина desktop-стека.
Если приложение нужно только как утилита, а не как часть GNOME, часто этого достаточно.
Также полезно смотреть, не тянется ли метапакет, перед подтверждением установки.
Что делать, если GNOME уже приехал
Если GNOME уже установлен, но не нужен, его можно удалить, оставив display manager и текущее DE.
Обычно удаляются метапакеты и shell, а не отдельные библиотеки.
После этого стоит проверить, какой display manager используется, и при необходимости выбрать нужный:
Комьюнити
Это такая частая и актуальная проблема, что был создан сабреддит для обсуждения этой темы и люди активно этим пользуются, чтобы выговориться:
https://reddit.com/r/gotgnomed/
LinuxCamp
В Linux можно установить одно приложение из экосистемы GNOME и получить целиком весь GNOME desktop stack.
Это происходит из-за зависимостей: метапакеты, Recommends, Depends, общие сервисы и gnome-session подтягиваются пакетным менеджером автоматически.
Почему GNOME становится DE по умолчанию
Обычно это происходит, когда устанавливается gnome-session, gdm или метапакеты вроде gnome-core, gnome-shell.
После этого display manager считает GNOME полноценной сессией и может выбрать её как дефолтную, особенно если предыдущая была установлена не через метапакет.
Проверить, что именно подтянулось, можно так:
apt depends gnome-shell
Или уже по факту посмотреть, что из GNOME стоит в системе:
dpkg -l | grep gnome
Как этого избежать
На системах с apt стоит сразу отключать установку рекомендованных пакетов.
Это снижает шанс, что за одним приложением приедет половина desktop-стека.
sudo apt install --no-install-recommends gnome-calculator
Если приложение нужно только как утилита, а не как часть GNOME, часто этого достаточно.
Также полезно смотреть, не тянется ли метапакет, перед подтверждением установки.
Что делать, если GNOME уже приехал
Если GNOME уже установлен, но не нужен, его можно удалить, оставив display manager и текущее DE.
Обычно удаляются метапакеты и shell, а не отдельные библиотеки.
sudo apt purge gnome-shell gnome-session gdm3
sudo apt autoremove
После этого стоит проверить, какой display manager используется, и при необходимости выбрать нужный:
sudo dpkg-reconfigure lightdm
Комьюнити
Это такая частая и актуальная проблема, что был создан сабреддит для обсуждения этой темы и люди активно этим пользуются, чтобы выговориться:
https://reddit.com/r/gotgnomed/
LinuxCamp
🔥24❤8👍5😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Ну че, знакомо?) Буквально, когда пытаешься войти в BIOS, а потом оказывается что не та кнопка...
LinuxCamp
LinuxCamp
🤣79🔥13💯11👍2❤1
czkawka: поиск мусора и дубликатов на диске
czkawka - это утилита для анализа файловой системы и поиска лишних данных.
Она умеет находить дубликаты файлов, похожие изображения, пустые директории, временные файлы, битые ссылки и т.д.
Проект написан на Rust, есть CLI и GUI-версия, но в серверных и headless-сценариях обычно используют именно CLI.
Установка на Ubuntu
В репозиториях Ubuntu утилиты нет, поэтому самый простой вариант - скачать готовый бинарь с GitHub Releases и положить его в PATH.
Основные сценарии
Поиск дубликатов файлов по хешу. Это полезно для архивов, бэкапов и каталогов с копиями данных.
Поиск пустых директорий и мусорных файлов, которые часто остаются после сборок и тестов.
Отдельный режим предназначен для поиска похожих изображений.
Он сравнивает изображения по содержимому, а не по имени или размеру.
На что стоит обратить внимание
czkawka ничего не удаляет автоматически, если явно не указать флаги удаления.
LinuxCamp | #utils
czkawka - это утилита для анализа файловой системы и поиска лишних данных.
Она умеет находить дубликаты файлов, похожие изображения, пустые директории, временные файлы, битые ссылки и т.д.
Проект написан на Rust, есть CLI и GUI-версия, но в серверных и headless-сценариях обычно используют именно CLI.
Установка на Ubuntu
В репозиториях Ubuntu утилиты нет, поэтому самый простой вариант - скачать готовый бинарь с GitHub Releases и положить его в PATH.
wget https://github.com/qarmin/czkawka/releases/latest/download/czkawka_cli-linux.tar.gz
tar -xzf czkawka_cli-linux.tar.gz
sudo mv czkawka_cli /usr/local/bin/czkawka
Основные сценарии
Поиск дубликатов файлов по хешу. Это полезно для архивов, бэкапов и каталогов с копиями данных.
czkawka dup -d /data
Поиск пустых директорий и мусорных файлов, которые часто остаются после сборок и тестов.
czkawka empty-folders -d /data
Отдельный режим предназначен для поиска похожих изображений.
Он сравнивает изображения по содержимому, а не по имени или размеру.
czkawka image -d /photos
На что стоит обратить внимание
czkawka ничего не удаляет автоматически, если явно не указать флаги удаления.
LinuxCamp | #utils
👍20❤10🔥5❤🔥1
Когда хочется проверить уровень своих знаний и убедиться в своей компетентности, один из рабочих вариантов — это пройти экзамен DevOps Engineer от Yandex Cloud. Он рассчитан на специалистов с опытом DevOps от 2 лет.
По данным исследования Yandex Cloud, у 74% специалистов после сертификации заметно выросла уверенность в собственной экспертизе.
Экзамен для тех, кто работает с автоматизацией инфраструктуры, оркестрацией контейнеров, отказоустойчивостью и CI/CD. Плюс это реальное преимущество при трудоустройстве или в разговоре о повышении.
Тестирование проходит онлайн, 65 вопросов, 90 минут.
И ещё момент: до 31 марта 2026 действует скидка 50%, можно успеть зарегистрироваться на выгодных условиях.
По данным исследования Yandex Cloud, у 74% специалистов после сертификации заметно выросла уверенность в собственной экспертизе.
Экзамен для тех, кто работает с автоматизацией инфраструктуры, оркестрацией контейнеров, отказоустойчивостью и CI/CD. Плюс это реальное преимущество при трудоустройстве или в разговоре о повышении.
Тестирование проходит онлайн, 65 вопросов, 90 минут.
И ещё момент: до 31 марта 2026 действует скидка 50%, можно успеть зарегистрироваться на выгодных условиях.
👍10❤3🥴1
Пинганите меня, когда Linux станет основной системой и заменит Windows. Я пока настрою ArchLinux
LinuxCamp
LinuxCamp
👍46😁38🔥11🤔6❤3😢2👏1
sched_ext: планировщик Linux в userspace
sched_ext позволяет реализовывать планировщики задач вне ядра Linux. Логика планирования выносится в eBPF-программу, а ядро остаётся ответственным за выполнение и переключение контекста.
Проверка поддержки
Работает только на ядрах с включённым SCHED_EXT.
Если опция включена, ядро поддерживает внешний планировщик.
Запуск планировщика
В репозитории есть готовые реализации. После запуска система начинает использовать внешний планировщик.
Остановка процесса возвращает стандартный планировщик.
Вывод
sched_ext используется для экспериментов и workload-ориентированного планирования без патчей ядра.
LinuxCamp | #utils
sched_ext позволяет реализовывать планировщики задач вне ядра Linux. Логика планирования выносится в eBPF-программу, а ядро остаётся ответственным за выполнение и переключение контекста.
Проверка поддержки
Работает только на ядрах с включённым SCHED_EXT.
grep SCHED_EXT /boot/config-$(uname -r)
Если опция включена, ядро поддерживает внешний планировщик.
Запуск планировщика
В репозитории есть готовые реализации. После запуска система начинает использовать внешний планировщик.
sudo ./scx_simple
Остановка процесса возвращает стандартный планировщик.
Вывод
sched_ext используется для экспериментов и workload-ориентированного планирования без патчей ядра.
LinuxCamp | #utils
👍13❤5🔥5
Forwarded from ITCamp | AI & Code
Деннис Ритчи — создатель языка C и ОС Unix
Влияние языка C на индустрию
— C позволил легко переносить Unix на разные аппаратные платформы.
— C давал низкоуровневый контроль, как ассемблер, но с высокоуровневой структурой, что сделало его идеальным для системного программирования
— Синтаксис и идеи C легли в основу C++, Java, C#, Go, Python.
Если было полезно, ставим🔥
ITCamp | AI & Code
1941 — Родился в пригороде Нью-Йорка, вырос в семье учёного из Bell Labs.
1968 — Получил образование в Гарварде, но не осилил степень PhD из-за бюрократических формальностей.
1969 — начал работать в Bell Labs, где и создал свои главные проекты.
1972 — создал язык программирования C. Язык создавался для эффективности и переносимости.
(1969–1973) — разрабатывал ОС Unix, которая изначально писалась на ассемблере, но к 1973 году была почти полностью переписана на C.
1978 — с Брайаном Керниганом выпустил книгу «Язык программирования C».
Также свою руку Деннис приложил и к другим проектам: ОС Plan 9 и Inferno, язык Limbo, взлом шифровальной машины M-209, редактор QED, макропроцессор М4.
Влияние языка C на индустрию
— C позволил легко переносить Unix на разные аппаратные платформы.
— C давал низкоуровневый контроль, как ассемблер, но с высокоуровневой структурой, что сделало его идеальным для системного программирования
— Синтаксис и идеи C легли в основу C++, Java, C#, Go, Python.
Если было полезно, ставим
ITCamp | AI & Code
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥139👍17❤8