iperf3: тест пропускной способности сети

iperf3 — клиент-серверный тест пропускной способности. Один хост — сервер, второй — клиент. # На сервере iperf3 -s # На клиенте iperf3 -c 192.168.10.1 # TCP-тест (10 сек по умолчанию) iperf3 -c 192.168.10.1 -t 30 # 30 секунд iperf3 -c 192.168.10.1 -P 4 # 4 параллельных потока iperf3 -c 192.168.10.1 -R # реверс: сервер → клиент UDP — для проверки jitter и потерь (актуально для VoIP и tunnel-трафика): iperf3 -c 192.168.10.1 -u -b 500M # UDP, ограничение 500 Mbit/s Итог выглядит так: ...

2 июля 2026 г. · llexa

Proxmox #5: cloud-init — первый запуск без рук

cloud-init настраивает ВМ при первом старте: hostname, SSH-ключи, сеть. Proxmox передаёт конфиг через cloudinit-диск. Создать шаблон из cloud-образа Ubuntu: qm create 9000 --name ubuntu-tmpl --memory 2048 --net0 virtio,bridge=vmbr0 qm importdisk 9000 ubuntu-cloud.img local-lvm qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0 qm set 9000 --ide2 local-lvm:cloudinit --serial0 socket --vga serial0 qm set 9000 --boot c --bootdisk scsi0 qm template 9000 Клонировать и сразу задать параметры: qm clone 9000 101 --name web01 --full qm set 101 --ciuser deploy --sshkeys ~/.ssh/id_ed25519.pub qm set 101 --ipconfig0 ip=192.168.10.101/24,gw=192.168.10.1 qm start 101 ВМ стартует готовой к SSH — cloud-init записал ключ без ручного вмешательства. Лог внутри гостя: cat /var/log/cloud-init-output.log ...

2 июля 2026 г. · llexa

nice, renice, ionice: приоритеты процессов и I/O

nice запускает команду с пониженным CPU-приоритетом (от -20 до +19, чем выше — тем ниже): nice -n 10 make -j4 # сборка не задавит остальное nice -n 19 tar czf ... # архивирование в самом фоне renice меняет приоритет уже запущенного процесса: renice -n 15 -p 12345 # по PID renice -n 10 -u backup # всем процессам пользователя Повысить приоритет (отрицательное значение) — только root. ionice управляет I/O-приоритетом. Классы: 1 — realtime, 2 — best-effort, 3 — idle: ...

1 июля 2026 г. · llexa

Современные ФС #3: btrfs — RAID и scrub

btrfs реализует RAID на уровне файловой системы — без mdadm. Создать том из двух дисков с зеркалированием: mkfs.btrfs -d raid1 -m raid1 /dev/sdb /dev/sdc mount /dev/sdb /mnt/data Флаг -d — профиль данных, -m — профиль метаданных. Для трёх+ дисков доступны raid5, raid6, raid10. Добавить диск к существующей ФС и перераспределить под новый профиль: btrfs device add /dev/sdd /mnt/data btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt/data Проверка целостности — scrub читает все блоки и сверяет чексуммы: ...

1 июля 2026 г. · llexa

chattr и lsattr: защита файлов на уровне ФС

chattr +i /etc/resolv.conf — файл становится иммутабельным: даже root не может изменить, удалить или переименовать его до снятия атрибута. chattr +i /etc/resolv.conf # иммутабельный chattr +a /var/log/app.log # append-only: нельзя перезаписать или удалить chattr -i /etc/resolv.conf # снять атрибут lsattr /etc/resolv.conf # ----i---------e--- lsattr -R /etc/ # рекурсивно +a (append-only) — для лог-файлов: процесс пишет, но никто не сделает truncate или rm. Работает на ext2/3/4 и btrfs; на tmpfs и vfat атрибуты не поддерживаются. ...

30 июня 2026 г. · llexa

mapfile и readarray: файл в bash-массив

mapfile (alias readarray) читает строки в массив за один вызов — чище цикла while IFS= read -r line. mapfile -t lines < /etc/hosts # -t убирает \n в конце каждой строки echo "${#lines[@]}" # количество строк echo "${lines[0]}" # первая строка mapfile -t hosts < <(grep -v '^#' /etc/hosts) # из process substitution mapfile -t -n 10 head10 < bigfile # только первые 10 строк В отличие от arr=($(cat file)), не ломается на строках с пробелами и не делает glob-expansion. readarray — полный синоним. Требует bash 4.0+. ...

30 июня 2026 г. · llexa

traceroute и tracepath: маршрут до хоста

traceroute отправляет пакеты с нарастающим TTL — каждый роутер на пути отвечает ICMP Time Exceeded, так строится маршрут. traceroute -n google.com # без DNS-резолвинга, быстрее traceroute -T -p 443 google.com # TCP SYN вместо UDP — проходит через файрволы traceroute -I google.com # ICMP echo (нужен root) tracepath google.com # без root, находит MTU на каждом сегменте tracepath не требует root и параллельно определяет MTU пути (PMTUD) — полезно при проблемах с фрагментацией пакетов. Если нужен непрерывный мониторинг маршрута — mtr объединяет оба инструмента в реальном времени. ...

30 июня 2026 г. · llexa

bash best practices: пишем скрипты надёжно

Каждый скрипт начинается с set -euo pipefail — стоп при первой ошибке, незаданной переменной, упавшем пайпе. #!/bin/bash set -euo pipefail NAME="${1:-world}" # значение по умолчанию readonly LOG="/var/log/app.log" cleanup() { rm -f /tmp/app.lock; } trap cleanup EXIT [[ -f "$LOG" ]] && tail -n 100 "$LOG" [[ ]] вместо [ ] — нет сюрпризов с пробелами в переменных. readonly — защита от случайного переопределения. trap EXIT — очистка даже при ошибке. #bash #linux #sysadmin

29 июня 2026 г. · llexa

GNU parallel: xargs с параллелизмом и прогресс-баром

parallel — как xargs, но с явным числом потоков, progress-баром и --eta. Запустить команду для каждого аргумента: parallel -j4 gzip ::: file1.log file2.log file3.log parallel -j$(nproc) "convert {} {.}.webp" ::: *.png Читать список из файла и показывать прогресс: parallel -j8 --progress --eta curl -O {} :::: urls.txt Несколько групп аргументов — комбинации через :::: parallel echo {1}-{2} ::: A B C ::: 1 2 # A-1 A-2 B-1 B-2 C-1 C-2 xargs -P 4 проще для однострочников. parallel — когда нужен --eta, --joblog, --retry-failed. ...

29 июня 2026 г. · llexa

nginx: map и geo — динамика без if

map и geo живут в http {} и вычисляются один раз на запрос — без if, без лишнего кода. geo $remote_addr $is_internal { default 0; 10.0.0.0/8 1; 192.168.0.0/16 1; } map $http_referer $bad_referer { default 0; ~*spam\.ru 1; } server { if ($bad_referer) { return 444; } if ($is_internal = 0) { return 403; } } geo — хэш по IP, без regex, очень быстро. map — regex по любому заголовку или переменной. Комбинируются свободно. #nginx #linux #sysadmin

29 июня 2026 г. · llexa