Admin Guides | Сисадмин
11.5K subscribers
1.39K photos
20 videos
34 files
589 links
Обучающий канал по ОС Linux & Windows для начинающих и действующих администраторов.

Админ, реклама: @Ak_Mihail
Биржа: https://telega.in/c/admguides

РКН: https://kurl.ru/nQejS
Download Telegram
Проверка, что реально грузит CPU

Когда сервер кажется «тормозным», top и htop часто показывают поверхностную картину.

Иногда виноваты shared библиотеки, а не сам процесс.

📝smem — утилита, которая учитывает shared memory и показывает реальное потребление:

smem -r | sort -nrk 4 | head -n 10


Выведет топ процессов по реальной памяти.

📝pidstat — для мониторинга нагрузки в динамике:

pidstat -u 2 10


Показывает, какие процессы жрут CPU каждые 2 секунды в течение 10 замеров.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94🔥3
Rust Coreutils 0.3.0: быстрее, безопаснее и почти как GNU

24 октября 2025 вышел Rust Coreutils 0.3.0 (uutils) — аналог GNU Coreutils, но на Rust.

Это более сотни утилит вроде ls, cat, chmod, sort и cp, переписанных с упором на кроссплатформенность и безопасность (работает даже на Windows, Redox и Fuchsia).

Что нового:
sort стал быстрее GNU-версии в 3.7 раза, base64 — в 1.2, uniq -c — в 1.13;
добавлена инфраструктура для автоматического трекинга производительности (через CodSpeed);
улучшена работа с путями, безопасное обращение с rm, du, chmod, chgrp;
меньше unsafe, больше Rust-подхода через crate nix;
добавлены новые флаги (--progress, --reference=file, --base58 и др.);
совместимость с GNU-тестами — 83.9% (немного ниже из-за новых тестов).

Любопытный факт: именно из-за отсутствия флага --reference в date на Ubuntu 25.10 сломалось автообновление. Теперь всё исправили.


Rust Coreutils распространяется по MIT-лицензии, в отличие от GPL у GNU, и уже движется к полной замене классических coreutils.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍104🥱1
OSPF Passive Interface: контроль анонсов маршрутов

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

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


Passive Interface решает эту проблему.

С его помощью интерфейс продолжает принимать маршруты, но не инициирует соседские сессии.

Маршрутизатор знает всё, что нужно, при этом сеть становится «тише», а нагрузка на CPU снижается.

На Cisco IOS настройка выглядит так:

router ospf 1
network 10.0.0.0 0.0.0.255 area 0
passive-interface GigabitEthernet0/1


После применения этой команды интерфейс GigabitEthernet0/1 перестанет отправлять hello-пакеты, но маршруты через другие интерфейсы продолжают работать корректно.

На Juniper JunOS принцип аналогичен:

protocols ospf {
interface ge-0/0/1.0 {
passive
}
}


Passive Interface особенно нужен на VLAN-подсетях и внутренних сегментах, где соседей нет.

🔥Если сочетать passive mode с аутентификацией OSPF, вы получаете дополнительный уровень безопасности. Маршруты продолжают приходить, сеть остаётся стабильной, а ненужные пакеты hello больше не «шумят» в топологии.
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4🔥1
💬 Вопрос на собеседовании для DevOps-инженера

Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.


Вопрос: Что такое RCU (Read-Copy-Update) и почему это эффективный механизм синхронизации?

Ответ: RCU (Read-Copy-Update) — это механизм синхронизации, оптимизированный для сценариев с частым чтением и редкими изменениями. Основная идея в том, что читатели могут получать доступ к структурам данных без блокировок, а обновления выполняются через создание новой копии данных.

При изменении структуры создаётся её новая версия, обновление “публикуется”, а старые версии остаются доступными для текущих читателей. После того как все старые читатели завершили работу, ядро удаляет устаревшие копии.
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥3
udev: управление устройствами автоматически

В Linux устройства появляются и исчезают постоянно — USB-диски, сетевые карты, внешние диски.

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


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

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

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

Например, правило для автоматического переименования USB-диска по серийному номеру выглядит так:

SUBSYSTEM=="block", ATTRS{serial}=="12345678", NAME="usb_backup"


После перезагрузки или переподключения устройства оно всегда будет называться /dev/usb_backup.

Чтобы автоматически монтировать диск с конкретными правами, можно использовать RUN и mount:

SUBSYSTEM=="block", ATTRS{serial}=="12345678", ACTION=="add", RUN+="/usr/bin/mount /dev/%k /mnt/backup"


udev позволяет назначать права и группы для устройств, например, чтобы обычный пользователь мог записывать на USB-диск:

SUBSYSTEM=="block", ATTRS{serial}=="12345678", MODE="0660", GROUP="users"


Файлы правил обычно лежат в /etc/udev/rules.d/. После добавления или изменения правил нужно перезагрузить udev:

sudo udevadm control --reload
sudo udevadm trigger
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥4
10😁1😢1
logrotate для нестандартных каталогов

В Linux большинство системных логов лежит в /var/log, и для них уже настроена ротация.

Но приложения часто пишут логи в свои каталоги, например /opt/myapp/logs или /srv/service/logs. 


Без ротации такие файлы могут быстро «съесть» диск. Для этого используется logrotate с кастомными конфигурациями.

Создаём файл конфигурации для нашего приложения, например /etc/logrotate.d/myapp:

/opt/myapp/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 myuser mygroup
postrotate
systemctl reload myapp
endscript
}


Что здесь происходит: файлы логов в /opt/myapp/logs/ будут ротацироваться каждый день, храниться 7 архивов, старые версии будут сжиматься, а если лог пустой — пропускается.

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

Проверить конфигурацию можно в режиме dry-run:

sudo logrotate -d /etc/logrotate.d/myapp


И вручную запустить ротацию:

sudo logrotate -f /etc/logrotate.d/myapp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115👎1
8👍3
systemd Path Units: запуск сервисов по событиям файловой системы

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

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

Например, у нас есть каталог /srv/watch и сервис process-files.service, который должен обрабатывать новые файлы. Сначала создаём Path Unit:

# /etc/systemd/system/watch-files.path
[Unit]
Description=Watch /srv/watch for new files

[Path]
PathExists=/srv/watch
PathChanged=/srv/watch

[Install]
WantedBy=multi-user.target


Path Unit отслеживает появление или изменение файлов в указанной директории. Когда событие происходит, systemd запускает связанный service unit.

Service Unit может выглядеть так:

# /etc/systemd/system/process-files.service
[Unit]
Description=Process new files

[Service]
Type=oneshot
ExecStart=/usr/local/bin/process_new_files.sh


После создания единиц активируем Path Unit:

sudo systemctl daemon-reload
sudo systemctl enable --now watch-files.path
Please open Telegram to view this post
VIEW IN TELEGRAM
👍144
Ошибка команды date в Ubuntu 25.10 нарушила автообновления

В Ubuntu 25.10 команда date из набора uutils на Rust не поддерживала опцию -r.

Скрипт apt.systemd.daily, проверяющий время последних обновлений, всегда получал текущее время и считал систему обновлённой.


Проблема затронула облачные развёртывания, контейнеры, Desktop и Server. Ручное обновление через apt работало корректно.

Исправлено в пакете rust-coreutils 0.2.2-0ubuntu2.1:

sudo apt update
sudo apt install --only-upgrade rust-coreutils


Причина: при релизе Ubuntu 25.10 изменения с поддержкой -r в uutils не были включены, и ошибка не проявлялась в тестах, так как вызов date -r не выдавал ошибку.
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍5🤬2🤡1🥱1
lockf / fcntl: синхронизация через файлы

Когда несколько процессов работают с одним ресурсом, важно предотвратить конфликты.

Для этого есть lockf и fcntl — более гибкие аналоги flock.

Пример с lockf:

exec 200>/var/lock/myapp.lock
lockf -t 0 200 || exit 1
echo "Process $$ is running" >> /var/log/myapp.log


В Python с fcntl можно блокировать файл или его часть:

import fcntl

with open("/var/lock/myapp.lock", "w") as f:
fcntl.flock(f, fcntl.LOCK_EX)
f.write("Process is running\n")
6🔥2
Такое подходит
🤣18😁54
inotifywait: реакции на изменения файлов в реальном времени

Иногда нужно отследить, когда меняется файл — лог, конфиг или каталог с бэкапами.

tail -f помогает только смотреть, но не реагировать.

А вот inotifywait из пакета inotify-tools позволяет «подслушивать» изменения и запускать действия сразу.

Как отследить обновление конфига nginx

inotifywait -m /etc/nginx/nginx.conf


После каждой модификации inotifywait выведет событие — например:

/etc/nginx/ MODIFY nginx.conf



Автоматический reload при изменении

while inotifywait -e close_write /etc/nginx/nginx.conf; do
systemctl reload nginx
done


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

Мониторинг каталога

inotifywait -m -r /var/www/html


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

Типы событий

• create — создан файл
• delete — удалён
• modify — изменён
• close_write — файл записан и закрыт
• move — переименован или перемещён

Можно комбинировать:

inotifywait -e create,delete,move /opt/data
8👍6
💬 Вопрос на собеседовании для сисадмина

Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.


Вопрос: Что такое page reclaim в Linux и как ядро решает, какие страницы памяти освободить при нехватке RAM?

Ответ: Page reclaim — это процесс, при котором ядро Linux освобождает память, вытесняя неактивные страницы из оперативки, когда системе не хватает RAM. Это часть подсистемы управления памятью (MM subsystem).

Как это работает:
• Ядро поддерживает два списка: active и inactive.
• Активные страницы недавно использовались, неактивные — давно не трогались.
• При нехватке памяти запускается kswapd, который перемещает страницы из active → inactive и затем освобождает их, сбрасывая dirty-страницы на диск или удаляя чистые.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5
Как запретить юзерам выключать сервер или менять сетевые настройки

Иногда на сервере несколько пользователей, и не все должны иметь полные права.

Например, кто-то случайно жмёт “Выключить” в GUI — и сервер падает.

Linux даёт способ это запретить без удаления sudo: через PolicyKit (polkit).

Запрет выключения и перезапуска

Создаём правило:

sudo nano /etc/polkit-1/rules.d/49-disable-shutdown.rules


И добавляем:

polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.login1.power-off" ||
action.id == "org.freedesktop.login1.reboot") &&
!subject.isInGroup("wheel")) {
return polkit.Result.NO;
}
});


Теперь только пользователи из группы wheel (или другой, если заменишь) смогут перезагружать и выключать систему.

Запрет изменения сети

Файл:

sudo nano /etc/polkit-1/rules.d/50-disable-network.rules


Код:

polkit.addRule(function(action, subject) {
if (action.id.indexOf("org.freedesktop.network-manager.settings.") == 0 &&
!subject.isInGroup("netadmin")) {
return polkit.Result.NO;
}
});


Теперь менять соединения, IP и Wi-Fi смогут только пользователи группы netadmin.

Как проверить:

pkaction | grep power
pkaction | grep network


Покажет все доступные polkit-действия.
👍12🔥8
Вышел Rust 1.91.0!

30 октября 2025 года состоялся релиз новой версии языка Rust — одной из самых стабильных и безопасных экосистем в мире. 


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

Главное в релизе:
Windows на ARM (aarch64-pc-windows-msvc) получила статус Tier-1 — теперь есть официальные бинарники и полный саппорт.
Новые lint-проверки: защита от висячих указателей и преобразования чисел в указатели через transmute.
В Cargo стабилизирована опция build.build-dir — можно указать каталог для временных артефактов сборки.
Поддержка inline-ассемблера для LoongArch32 и обновление компилятора до LLVM 21.
Добавлены десятки стабильных API — от PathBuf::add_extension до Ipv6Addr::from_segments.
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3
💬 Вопрос на собеседовании для DevOps-инженера

Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.


Вопрос: Что такое seq_file API в Linux и зачем оно используется?

Ответ: seq_file — это интерфейс ядра Linux, упрощающий вывод последовательных данных из ядра в пространство пользователя, например через /proc или /sys. Он нужен для безопасного и эффективного отображения длинных структурированных данных (таблицы, списки, статистику и т.п.).

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

• последовательную генерацию данных в чанках,
• автоматическую поддержку seek/read,
• потокобезопасный доступ к данным ядра,
• экономию памяти за счёт ленивой генерации.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64
Как безопасно удалить старые логи и кэши, не трогая нужное

Со временем на сервере накапливаются гигабайты старых логов и временных файлов.

Рука не поднимается чистить /var/log — страшно что-то удалить лишнее.

Но всё можно сделать аккуратно, одной командой find с правильными фильтрами.

Удалим файлы старше 30 дней

sudo find /var/log -type f -mtime +30 -delete


-mtime +30 — старше 30 дней
-type f — только файлы
-delete — удалить (осторожно, без подтверждения)

Добавим исключения:

sudo find /var/log -type f -mtime +30 \
! -name "*.conf" \
! -path "/var/log/journal/*" \
-delete


Так мы не тронем systemd-журналы и конфиги лог-демонов.

Чистим кэш без вреда

sudo find /var/cache -type f -mtime +15 -delete


Можно ограничить размер:

sudo du -sh /var/cache/*


и удалить вручную то, что реально разрослось (например, apt или pip кэши).

Тест перед удалением:

sudo find /var/log -type f -mtime +30 -print


Покажет, что будет удалено. Меняем -delete на -print, если нужно просто посмотреть.

Автоматизация:
Добавляем в cron:

sudo crontab -e


и строку:

0 3 * * 0 find /var/log -type f -mtime +30 -delete


Каждое воскресенье в 3:00 — чистка логов.
10🔥8👍4
Отслеживаем, кто открывает соединения на сервере

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

Даже если firewall настроен, иногда нужно понять активность внутри системы.

Посмотреть текущие соединения и процессы

ss -tulpn


• -t — TCP
• -u — UDP
• -l — слушающие порты
• -p — показать процесс
• -n — без резолва имен

Пример вывода:

LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))


Альтернативы

lsof -i -P -n


• Показывает все открытые сетевые сокеты с процессами.

netstat -tulnp


• Старый, но привычный вариант для мониторинга.

Автоматическая запись в лог для аудита

watch -n 60 'ss -tupn >> /var/log/active_connections.log'


• Каждую минуту логируются текущие соединения.
• Можно добавить logger для syslog:

ss -tupn | logger -t net-audit
👍128