Admin Guides | Сисадмин
Обучающий канал по ОС Linux & Windows для начинающих и действующих администраторов. Админ, реклама: @Ak_Mihail Биржа: https://telega.in/c/admguides РКН: https://kurl.ru/nQejS
Ko'proq ko'rsatish📈 Telegram kanali Admin Guides | Сисадмин analitikasi
Admin Guides | Сисадмин (@admguides) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 11 781 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 10 514-o'rinni va Rossiya mintaqasida 55 271-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 11 781 obunachiga ega bo‘ldi.
30 Iyul, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni 119 ga, so‘nggi 24 soatda esa 1 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 12.69% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 6.89% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 495 marta ko‘riladi; birinchi sutkada odatda 811 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 10 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent ядро, /proc, grep, latency, linux kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Обучающий канал по ОС Linux & Windows для начинающих и действующих администраторов.
Админ, реклама: @Ak_Mihail
Биржа: https://telega.in/c/admguides
РКН: https://kurl.ru/nQejS”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 31 Iyul, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
smem -r -k -P nginx
-r сортирует по PSS, -k выводит в читаемых единицах, -P фильтрует по имени процесса.
⏺pmap
Показывает карту адресного пространства процесса с размером каждого региона. Сразу видно где heap, где shared libraries, где анонимные регионы которые растут:
pmap -x <PID> | sort -k3 -rn | head -20
-x добавляет RSS и dirty pages для каждого региона. Сортируем по размеру, аномально большие анонимные регионы это первый признак утечки.
⏺cat /proc/PID/status
Без внешних утилит, прямо из ядра. VmRSS это реальная физическая память, VmSize виртуальная, VmSwap сколько ушло в своп:
grep -E "VmRSS|VmSize|VmSwap|VmPeak" /proc/<PID>/status
VmPeak показывает максимум за всё время жизни процесса, полезно когда пик уже прошёл но хочется знать сколько было.
⚡️ps aux и top показывают RSS без учёта разделяемой памяти. Если десять воркеров nginx показывают по 50MB каждый, это не значит что они съели 500MB: большая часть это shared code и данные. smem с PSS даст реальную цифру.Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.❓Вопрос: Что такое IRQ affinity и зачем настраивать привязку аппаратных прерываний к ядрам CPU? ✅Ответ: IRQ affinity - это механизм Linux, позволяющий закрепить обработку аппаратных прерываний (Interrupt Requests) за определёнными ядрами процессора. Это помогает равномерно распределить нагрузку и уменьшить задержки при работе с сетью, дисками и другими устройствами. Как это работает: • Каждое аппаратное устройство генерирует IRQ, которое обрабатывается одним или несколькими CPU. • По умолчанию ядро само распределяет прерывания, но это не всегда оптимально. • Через /proc/irq/<IRQ>/smp_affinity можно вручную указать, какие ядра будут обслуживать конкретное устройство.
inotifywait -e close_write /etc/nginx/nginx.conf && nginx -t && systemctl reload nginx
Но это одноразово. Для постоянного мониторинга нужен цикл:
inotifywait -m -e close_write /etc/nginx/nginx.conf | while read -r; do
nginx -t && systemctl reload nginx
done
Проблема без debounce
Редактор вроде vim делает несколько операций при сохранении: создаёт временный файл, переименовывает, удаляет старый. inotifywait срабатывает несколько раз подряд на одно логическое сохранение. Reload запускается три раза вместо одного.
Debounce через sleep и проверку времени последнего события:
#!/bin/bash
CONFIG="/etc/nginx/nginx.conf"
LAST_RUN=0
DEBOUNCE=2
inotifywait -m -e close_write,moved_to "$CONFIG" 2>/dev/null | while read -r; do
NOW=$(date +%s)
if (( NOW - LAST_RUN > DEBOUNCE )); then
LAST_RUN=$NOW
nginx -t && systemctl reload nginx \
&& echo "$(date) reloaded" >> /var/log/nginx_autoreload.log
fi
done
Запускаем как systemd-сервис чтобы не умирал:
[Unit]
Description=Nginx config watcher
[Service]
ExecStart=/usr/local/bin/nginx_watcher.sh
Restart=always
[Install]
WantedBy=multi-user.target
⚡️inotifywait не видит изменения через bind mount или NFS, ядро не генерирует события для удалённых файловых систем. Если конфиг приезжает через ConfigMap в Kubernetes или NFS-шару, inotifywait не сработает, нужен polling или механизм самого оркестратора.find /usr/bin /usr/sbin -type f | while read -r bin; do
dpkg -S "$bin" &>/dev/null || echo "NOT IN PACKAGES: $bin"
done
На RHEL/CentOS:
find /usr/bin /usr/sbin -type f | while read -r bin; do
rpm -qf "$bin" &>/dev/null || echo "NOT IN PACKAGES: $bin"
done
Медленно на большом количестве файлов. Ускоряем через массовый запрос:
find /usr/bin /usr/sbin -type f -print0 \
| xargs -0 dpkg -S 2>&1 \
| grep "no path found" \
| awk -F': ' '{print $2}'
Добавляем проверку времени создания, свежие файлы подозрительнее:
find /usr/bin /usr/sbin -type f -newer /var/lib/dpkg/info -print0 \
| xargs -0 dpkg -S 2>&1 \
| grep "no path found" \
| awk -F': ' '{print $2}'
-newer /var/lib/dpkg/info фильтрует файлы появившиеся после последнего apt действия.
В cron для периодического аудита:
0 3 * * * /usr/local/bin/check_unknown_bins.sh >> /var/log/unknown_bins.logТакже поддерживается чтение данных S.M.A.R.T., встроенных датчиков процессора и температуры видеокарт.Что изменилось в HWMonitor 1.66: • улучшен отчёт о температуре в зонах перегрева видеокарт AMD Radeon RX 9000; • окно графика стало прозрачным.
ps aux | awk '$8 == "Z" {print $2, $11}'
Для каждого зомби находим родителя:
ps aux | awk '$8 == "Z" {print $2}' | while read -r pid; do
ppid=$(cat /proc/$pid/status 2>/dev/null | awk '/PPid/ {print $2}')
parent=$(ps -p "$ppid" -o comm= 2>/dev/null)
echo "zombie PID=$pid родитель PID=$ppid ($parent)"
done
Скрипт мониторинга с алертом
#!/bin/bash
THRESHOLD=5
BOT_TOKEN="ваш_токен"
CHAT_ID="ваш_chat_id"
LOG="/var/log/zombie_check.log"
zombies=$(awk '$8 == "Z" {count++} END {print count+0}' /proc/[0-9]*/status 2>/dev/null)
echo "$(date '+%Y-%m-%d %H:%M:%S') zombies: $zombies" >> "$LOG"
if [ "$zombies" -ge "$THRESHOLD" ]; then
details=$(ps aux | awk '$8 == "Z" {print $2, $11}' | head -10)
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="⚠️ $zombies zombie-процессов на $(hostname)\n${details}"
fi
В cron каждые 5 минут:
*/5 * * * * /usr/local/bin/zombie_check.shСмотрим тренд:
grep zombies /var/log/zombie_check.log | tail -20
👀 Убить зомби через kill нельзя, он уже мёртв. Единственный способ: отправить SIGCHLD родителю чтобы он забрал exit code, или убить самого родителя. Если родитель это системный демон который плодит зомби, это баг в приложении который нужно фиксить, а не обходить.Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.❓Вопрос: Что такое epoll и почему он эффективнее select() и poll()? ✅Ответ: epoll — это механизм мультиплексирования ввода-вывода в Linux, предназначенный для эффективной работы с большим количеством сетевых соединений. Именно на нём построены современные веб-серверы, прокси и балансировщики нагрузки. Как это работает: • Приложение один раз регистрирует файловые дескрипторы в epoll через
epoll_ctl(). • Ядро самостоятельно отслеживает события на этих дескрипторах. • При вызове epoll_wait() возвращаются только те сокеты, на которых действительно произошло событие.realm join example.com -U AdministratorОн автоматически настроит SSSD, Kerberos и разрешения. Если без realmd — делаем вручную. 2️⃣ Настраиваем /etc/sssd/sssd.conf Пример минимального конфига:
[sssd]
domains = example.com
config_file_version = 2
services = nss, pam
[domain/example.com]
id_provider = ad
auth_provider = ad
chpass_provider = ad
access_provider = ad
ad_domain = example.com
krb5_realm = EXAMPLE.COM
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
fallback_homedir = /home/%u@%d
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
3️⃣ Права на файл конфигурации
chmod 600 /etc/sssd/sssd.conf
4️⃣ Запускаем и добавляем в автозагрузку
systemctl enable --now sssd
5️⃣ Настраиваем PAM
Обновляем /etc/pam.d/common-auth и common-session для вызова pam_sss.so и автоматического создания домашней директории.
Пример для common-session:
session required pam_mkhomedir.so skel=/etc/skel/ umask=0077
Сервис отвечает, CPU и I/O в порядке, но часть запросов периодически «подвисает». Задержка возникает не внутри приложения, а на этапе резолва - до установления соединения.Каждый getaddrinfo() может блокироваться: ожидание ответа от DNS, попытки по нескольким nameserver’ам, fallback с IPv6 на IPv4, поиск по search-доменам. При сетевых сбоях или медленных резолверах это превращается в десятки–сотни миллисекунд на каждый запрос. В асинхронных сервисах это особенно заметно: потоков много, а блокировка происходит в libc. Проверить, где теряется время:
strace -tt -e trace=network,connect,recvfrom,sendto -p <pid>
Если видны паузы на recvfrom/sendto к DNS-серверам - задержка вне приложения.
Посмотреть, какие резолверы используются:
cat /etc/resolv.conf
Порядок nameserver, наличие search и options напрямую влияет на количество попыток и время ожидания.
Проверить реальное время резолва:
dig +stats example.comЕсли время скачет или есть retries - проблема в DNS-инфраструктуре или сетевом пути. Дополнительно:
ss -u -a | grep :53
Позволяет увидеть активность UDP-запросов к DNS.#!/bin/bash
IFACES=("eth0" "eth1")
SNAPSHOT_DIR="/var/lib/iface_stats"
LOG="/var/log/iface_errors.log"
THRESHOLD=100
ERROR_KEYS="rx_errors tx_errors rx_missed_errors rx_fifo_errors
rx_crc_errors rx_frame_errors tx_aborted_errors
rx_length_errors rx_over_errors"
mkdir -p "$SNAPSHOT_DIR"
for iface in "${IFACES[@]}"; do
SNAP="$SNAPSHOT_DIR/${iface}.snap"
CURRENT=$(mktemp)
ethtool -S "$iface" 2>/dev/null | awk '{gsub(/:/,"",$1); print $1, $2}' \
| sort > "$CURRENT"
if [ ! -f "$SNAP" ]; then
cp "$CURRENT" "$SNAP"
rm "$CURRENT"
continue
fi
join "$SNAP" "$CURRENT" | while read -r key prev curr; do
for ekey in $ERROR_KEYS; do
if [ "$key" = "$ekey" ]; then
delta=$(( curr - prev ))
if [ "$delta" -ge "$THRESHOLD" ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') $iface $key +$delta" >> "$LOG"
fi
fi
done
done
cp "$CURRENT" "$SNAP"
rm "$CURRENT"
done
В cron каждые 5 минут:
*/5 * * * * /usr/local/bin/iface_stats.shСмотрим лог за сегодня:
grep "$(date '+%Y-%m-%d')" /var/log/iface_errors.log
Если конкретный счётчик растёт стабильно, смотрим подробнее:
ethtool -S eth0 | grep -E "crc|missed|fifo|frame"Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.❓Вопрос: Что такое S.M.A.R.T. и почему одного статуса PASSED недостаточно для оценки состояния диска? ✅Ответ: S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology) - это система самодиагностики HDD и SSD, которая отслеживает десятки параметров, связанных с состоянием накопителя. Однако статус PASSED означает лишь то, что производитель не считает диск критически неисправным, а не то, что он полностью исправен. На что обращать внимание: • Reallocated_Sector_Ct - количество переназначенных секторов. • Current_Pending_Sector - нестабильные сектора, ожидающие повторной проверки. • Offline_Uncorrectable - сектора, которые не удалось прочитать. • Для SSD - Percentage Used, Media_Wearout_Indicator, объём записанных данных (TBW).
