[{"id":"filesystem","label":"Файловая система","is_bonus":false,"entries":[{"slug":"bind-mount","title":"bind mount - монтирование каталога в другое место","category":"filesystem","tldr":"bind mount - `mount --bind <src> <target>`. Делает каталог (или файл) видимым по второму пути.\nНе копия, не symlink - те же inode'ы через VFS. Базовый кирпич chroot'ов, контейнеров и systemd-sandbox.\n"},{"slug":"block-devices","title":"Block devices - диски в Linux","category":"filesystem","tldr":"Block device - устройство которое читается/пишется блоками фиксированного\nразмера (обычно 512B или 4K). Диски, SSD, NVMe - всё block devices в `/dev/`.\n"},{"slug":"btrfs","title":"btrfs - copy-on-write, subvolumes и снапшоты","category":"filesystem","tldr":"btrfs - copy-on-write ФС с subvolume'ами, снапшотами за O(1),\nнативным RAID 0/1/10 и чексуммами данных. RAID 5/6 проблемен.\nCOW-фрагментация бьёт БД и VM-image - выключай для них.\n"},{"slug":"ext4","title":"ext4 - рабочая лошадь Linux-ФС","category":"filesystem","tldr":"ext4 - дефолтная ФС большинства дистро: журналирование, extents,\nфиксированное число inode при mkfs. Главные тюны - data-mode,\nnoatime, lazy init. Стабилен 15+ лет. Не масштабируется как XFS.\n"},{"slug":"extended-attributes","title":"Extended attributes (xattr) - произвольные метаданные файла","category":"filesystem","tldr":"xattr - key-value метаданные на inode помимо stat. 4 namespace:\nuser (свободно), trusted (root), system (ACL), security (SELinux,\ncapabilities). getfattr читает, setfattr пишет.\n"},{"slug":"file-permissions","title":"File permissions: rwx и chmod","category":"filesystem","tldr":"Каждый файл имеет три набора прав - для владельца, группы и остальных. Каждый\nнабор это три бита: read (r), write (w), execute (x). Меняем через `chmod`.\n"},{"slug":"fhs","title":"Filesystem Hierarchy Standard (FHS)","category":"filesystem","tldr":"FHS - стандарт что лежит в каких корневых каталогах Linux: /etc - конфиги,\n/var - изменяемые данные, /usr - статика дистрибутива, /home - пользователи,\n/tmp - временное.\n"},{"slug":"fsck-and-recovery","title":"fsck и recovery - проверка и восстановление ФС","category":"filesystem","tldr":"fsck, проверка ФС на размонтированной файловой системе.\ne2fsck (ext), xfs_repair (XFS), btrfs check (btrfs).\nJournal replay при mount решает 90% проблем после crash'а.\n"},{"slug":"hard-link","title":"Hard link","category":"filesystem","tldr":"Hard link - второе имя для того же [[inode]]. Оба имени равноправны:\nфайл живёт пока есть хотя бы одно из них.\n"},{"slug":"inode","title":"Inode","category":"filesystem","tldr":"Inode - это запись в файловой системе с метаданными и указателями на блоки данных\nфайла. Имя файла лежит отдельно (в директории) и просто указывает на inode.\n"},{"slug":"lvm","title":"LVM - Logical Volume Manager","category":"filesystem","tldr":"LVM - слой между [[block-devices]] и ФС: объединяет диски в pool'ы и\nнарезает логические тома любого размера, которые можно расширять, снапшотить, мигрировать вживую.\n"},{"slug":"mount-and-fstab","title":"mount и /etc/fstab - подключение ФС","category":"filesystem","tldr":"`mount` подключает блочное устройство или ФС к точке монтирования в дереве.\n`/etc/fstab` - список того что монтировать при загрузке.\n"},{"slug":"posix-acl","title":"POSIX ACL - расширенные права доступа","category":"filesystem","tldr":"POSIX ACL расширяют классические rwx-права: можно дать доступ\nN пользователям/группам без перекраивания owner/group. setfacl\nпишет, getfacl читает. Default ACL на директории - наследуется детям.\n"},{"slug":"raid","title":"RAID - software-raid через mdadm","category":"filesystem","tldr":"RAID объединяет несколько [[block-devices]] в один логический с\nизбыточностью или скоростью. На Linux - `mdadm`. Hardware-RAID - отдельная история.\n"},{"slug":"sparse-files","title":"Sparse-файлы - дыры и apparent size","category":"filesystem","tldr":"Sparse-файл имеет \"дыры\" - блоки которые ФС не аллоцировала.\nПри чтении возвращают нули, но не занимают места. ls показывает\napparent size, du - реальное. Используются в qcow2, бэкапах, sparse loop.\n"},{"slug":"setuid-setgid-sticky","title":"SUID, SGID, sticky bit - спецбиты прав","category":"filesystem","tldr":"Три спецбита поверх обычных rwx: **SUID** - запуск с правами владельца файла,\n**SGID** - с правами группы (или наследование группы на каталоге), **sticky** - удалить может только владелец файла (важно для `/tmp`).\n"},{"slug":"symbolic-link","title":"Symbolic link","category":"filesystem","tldr":"Symlink - отдельный файл-«ярлык», который содержит путь к цели. В отличие от\n[[hard-link]], это разные [[inode]], symlink может указывать на что угодно\n(включая несуществующее).\n"},{"slug":"tmpfs-overlayfs","title":"tmpfs и overlayfs - RAM-disk и слои","category":"filesystem","tldr":"tmpfs - ФС в RAM (с swap'ом). Дефолт для /run, /dev/shm, часто /tmp.\noverlayfs - lower + upper = merged: RO-база + RW-слой над ней.\nОснова Docker (overlay2), Live-ISO, immutable distro.\n"},{"slug":"xfs","title":"XFS - extents и параллельный I/O","category":"filesystem","tldr":"XFS - дефолт RHEL 7+: allocation groups (параллельный I/O),\nextents-based allocation, online grow. **Нельзя уменьшить** -\nтолько grow. Идеален для big files, БД, parallel workload.\n"},{"slug":"filesystems","title":"Файловые системы: ext4, xfs, btrfs, zfs","category":"filesystem","tldr":"ext4 - дефолт, надёжный. xfs - для больших файлов и parallel I/O.\nbtrfs/zfs - снапшоты, чексуммы, RAID встроенный, но сложнее.\n"}]},{"id":"processes","label":"Процессы и ресурсы","is_bonus":false,"entries":[{"slug":"bash-strict-mode","title":"Bash strict mode: set -euo pipefail","category":"processes","tldr":"Три флага в начале bash-скрипта которые превращают его из «прощающего всё»\nв «упасть на первой же ошибке». Без них баги молча копятся.\n"},{"slug":"bpf-co-re","title":"BPF CO-RE - Compile Once Run Everywhere","category":"processes","tldr":"CO-RE - один скомпилированный eBPF-объект работает на разных kernel\nблагодаря BTF (BPF Type Format). vmlinux.h - dump структур ядра.\nlibbpf на runtime перезаписывает offsets. Заменяет BCC, не нужен\nLLVM в проде.\n"},{"slug":"cgroups","title":"cgroups (v2)","category":"processes","tldr":"cgroups v2 - иерархическая виртуальная FS под `/sys/fs/cgroup` через которую\nядро лимитирует CPU/память/I/O процессов. Docker/k8s/systemd пишут сюда.\n"},{"slug":"cgroups-v2-deep","title":"cgroups v2 - unified hierarchy, PSI, eBPF control","category":"processes","tldr":"cgroups v2 - один tree вместо отдельных hierarchies на controller.\nЧистая семантика, новые fields (memory.high, io.cost). PSI показывает\nresource pressure. eBPF может управлять resources. Default в RHEL 9,\nUbuntu 22+.\n"},{"slug":"chrony-and-ntp","title":"chrony и NTP - синхронизация времени","category":"processes","tldr":"NTP - протокол синхронизации часов (точность ~миллисекунды через интернет).\nНа современных Linux реализация - `chronyd` (default) или `systemd-timesyncd` (lightweight).\n"},{"slug":"chroot","title":"chroot - изоляция процесса в каталог","category":"processes","tldr":"`chroot()` - системный вызов меняющий apparent root каталог процесса (и его потомков).\nЛёгкая изоляция доступа к ФС. **НЕ заменяет [[namespaces]]/контейнеры** - root внутри chroot часто может выйти.\n"},{"slug":"ebpf-basics","title":"eBPF - программируемый kernel","category":"processes","tldr":"eBPF - запуск sandboxed-программ в kernel без kernel-modules.\nПрицепляются к hooks (kprobe, uprobe, tracepoint, perf, socket, XDP).\nVerifier гарантирует завершение и safety. JIT компилирует в native.\nbpftool/libbpf/BCC - userspace tooling.\n"},{"slug":"file-descriptors","title":"File descriptors (stdin, stdout, stderr)","category":"processes","tldr":"File descriptor - целое число, через которое процесс обращается к открытому\nфайлу/сокету/pipe. У каждого процесса 0/1/2 = stdin/stdout/stderr.\n"},{"slug":"heredoc","title":"Here-doc и here-string: данные внутри скрипта","category":"processes","tldr":"Here-doc (`<<EOF ... EOF`) подаёт многострочный текст на stdin команды без\nвременного файла. Here-string (`<<<`) - то же самое для одной строки.\n"},{"slug":"io-uring","title":"io_uring - third-rank async I/O syscall","category":"processes","tldr":"io_uring - shared-memory очередь между userspace и kernel.\nSQE submit без syscall (с SQPOLL). CQE - completion. Поддержка\nread/write/accept/connect/recv/send. Заменяет aio+epoll для\nI/O-bound сервисов. CVE 2022-2024 - не enable бездумно.\n"},{"slug":"kernel-modules","title":"Kernel modules - LKM, modprobe, signing, DKMS","category":"processes","tldr":"LKM - код, динамически загружаемый в kernel. modprobe резолвит\nзависимости через depmod. Подпись модуля для Secure Boot. DKMS\nпересобирает out-of-tree модули после kernel-upgrade.\nLockdown mode запрещает загрузку неподписанных.\n"},{"slug":"capabilities","title":"Linux capabilities - биты привилегий","category":"processes","tldr":"Capabilities дробят привилегии root'а на 40+ независимых битов: NET_ADMIN,\nSYS_PTRACE, и т.д. Можно дать процессу часть, не делая его полным root'ом.\n"},{"slug":"namespaces","title":"Linux namespaces","category":"processes","tldr":"Namespaces - механизм ядра, который даёт процессу собственный изолированный\nview на ресурс (сеть, mount-points, PID, UID, IPC, hostname, time).\nНа них построены все контейнеры.\n"},{"slug":"load-average","title":"Load average","category":"processes","tldr":"Три числа в `uptime` - экспоненциальные средние длины очереди процессов\n(R + D state) за 1, 5 и 15 минут. Имеет смысл только в контексте `nproc`.\n"},{"slug":"mmap","title":"mmap - файлы и shared memory","category":"processes","tldr":"`mmap()` маппит файл (или анонимный регион) в virtual address space процесса.\nЛюбые read/write через указатель = операции с файлом. Основа shared memory.\n"},{"slug":"oom-killer","title":"OOM killer","category":"processes","tldr":"OOM killer - механизм ядра, который выбирает и завершает процесс когда\nсистема упирается в лимит памяти. В контейнерах работает per-cgroup.\n"},{"slug":"page-cache","title":"Page cache - диск в памяти","category":"processes","tldr":"Page cache - кеш в RAM для содержимого файлов. Любое чтение/запись ФС\nидёт через него. «Used» в free выглядит большим, но page cache - это availabe.\n"},{"slug":"process-substitution","title":"Process substitution: <(cmd) и >(cmd)","category":"processes","tldr":"Bash-синтаксис `<(cmd)` подставляет команду как «псевдо-файл» на чтение.\n`>(cmd)` - на запись. Получаешь временный файл которого не нужно убирать.\n"},{"slug":"seccomp","title":"seccomp - фильтр системных вызовов","category":"processes","tldr":"seccomp - kernel-level фильтр syscall'ов. Процесс декларирует «можно\nтолько эти», и kernel отсекает остальные. Основа sandbox'а Docker и Chrome.\n"},{"slug":"selinux-apparmor","title":"SELinux и AppArmor - Mandatory Access Control","category":"processes","tldr":"SELinux и AppArmor - это MAC: дополнительный слой контроля поверх обычных\npermissions. Запрещают процессу делать что не входит в его профиль/тип.\n"},{"slug":"shebang","title":"Shebang: первая строка скрипта","category":"processes","tldr":"Первая строка скрипта вида `#!/usr/bin/env bash` говорит ядру какой\nинтерпретатор поднимать. Без shebang скрипт запускается через текущий\nshell - и в bash-режиме на проде ломается на /bin/sh.\n"},{"slug":"sudo","title":"sudo - выполнить от имени root","category":"processes","tldr":"`sudo` запускает команду от имени другого пользователя (обычно root)\nпо правилам в `/etc/sudoers`. Стандартный путь эскалации привилегий.\n"},{"slug":"swap","title":"Swap - когда RAM кончается","category":"processes","tldr":"Swap - место на диске, куда ядро вытесняет редко используемые страницы памяти,\nкогда RAM нужнее. Раздел или файл. Управляется `vm.swappiness` (0-100).\n"},{"slug":"systemd","title":"systemd - init и менеджер сервисов","category":"processes","tldr":"systemd - init-система Linux: PID 1, который запускает всё остальное,\nследит за зависимостями, перезапускает упавшее, агрегирует логи.\n"},{"slug":"systemd-drop-ins","title":"systemd drop-ins - override без правки оригинала","category":"processes","tldr":"Drop-in - `.conf` файл в `<unit>.d/` каталоге, который подмешивается к unit-файлу.\nСпособ переопределить любую директиву unit'а **не правя оригинальный файл** из пакета.\n"},{"slug":"systemd-targets","title":"systemd targets - runlevels по-новому","category":"processes","tldr":"Target - unit-файл `.target` который описывает желаемое состояние системы как набор зависимостей.\nЗамена SystemV runlevels: `multi-user.target` ≈ runlevel 3, `graphical.target` ≈ runlevel 5.\n"},{"slug":"systemd-timers","title":"systemd timers - замена cron","category":"processes","tldr":"systemd timer - unit-файл `.timer`, запускающий парный `.service` по расписанию или\nчерез интервал после события (boot, last-run). Замена cron с логами в [[cmd-journalctl]] и зависимостями.\n"},{"slug":"systemd-resolved","title":"systemd-resolved - локальный DNS-stub","category":"processes","tldr":"systemd-resolved - DNS stub-resolver, слушает на `127.0.0.53:53` и проксирует\nзапросы на upstream-DNS, агрегируя данные от NetworkManager/DHCP/VPN. Управляется `resolvectl`.\n"},{"slug":"virtual-memory","title":"Virtual memory - виртуальные адреса, page tables","category":"processes","tldr":"Каждый процесс видит свой 64-битный virtual address space. MMU переводит\nвиртуальные адреса в физические через page tables. Это основа изоляции и mmap.\n"},{"slug":"process-and-pid","title":"Процесс и PID","category":"processes","tldr":"Процесс - это запущенная программа со своим PID, памятью, открытыми\nдескрипторами и UID. Все процессы образуют дерево, корень - init (PID 1).\n"},{"slug":"signals","title":"Сигналы (SIGTERM, SIGKILL, SIGHUP)","category":"processes","tldr":"Сигнал - асинхронное уведомление процессу от ядра или другого процесса.\nTERM - попроси завершиться, KILL - убей сразу, HUP - перечитай конфиг.\n"},{"slug":"systemd-unit-types","title":"Типы systemd-юнитов","category":"processes","tldr":"Юнит - управляемый systemd ресурс. Расширение файла = тип: `.service` (демон),\n`.socket` (lazy-старт по сокету), `.timer`, `.mount`, `.path`, `.slice`/`.scope` (cgroup'ы), `.target` (группа).\n"}]},{"id":"network-l2-l3","label":"Сеть: L2 / L3","is_bonus":false,"entries":[{"slug":"arp","title":"ARP - Address Resolution Protocol","category":"network-l2-l3","tldr":"ARP отвечает на вопрос «у кого MAC = ?» для конкретного IP в одной сети.\nLinux хранит результат в neighbor-таблице (`ip neigh`).\n"},{"slug":"bonding-and-teaming","title":"Bonding и teaming - объединение интерфейсов","category":"network-l2-l3","tldr":"Bonding объединяет несколько физических интерфейсов в один логический.\nРежимы: active-backup (один активный), 802.3ad/LACP (LAG со свитчем),\nbalance-xor (хэш по MAC). Используется для HA и удвоения throughput.\n"},{"slug":"broadcast-domain","title":"Broadcast-домен - что это и кто в нём живёт","category":"network-l2-l3","tldr":"Группа устройств, где L2-фрейм с dst MAC `FF:FF:FF:FF:FF:FF` (broadcast)\nдоходит до всех. Switch расширяет broadcast-домен, router его останавливает.\n"},{"slug":"default-gateway","title":"Default gateway - выход из своей сети","category":"network-l2-l3","tldr":"IP-адрес роутера в твоей подсети, куда стек шлёт пакеты для всех адресов,\nкоторые **не лежат локально**. Один gateway на хост - но в multi-homed\nсетапах их может быть несколько.\n"},{"slug":"ebpf-xdp","title":"eBPF XDP - kernel data-plane","category":"network-l2-l3","tldr":"XDP - eBPF-программа на самом раннем RX-hook (до skb_alloc).\nActions: DROP, PASS, TX, REDIRECT. Native-mode в драйвере, generic\nв стеке. AF_XDP - zero-copy в userspace. Use cases - DDoS-фильтр,\nL4 load balancer, cilium kube-proxy.\n"},{"slug":"ethernet-frame","title":"Ethernet frame","category":"network-l2-l3","tldr":"Ethernet-frame - единица передачи на L2: dst-MAC, src-MAC, ethertype,\npayload (обычно IP-пакет), FCS-checksum. Стандартный MTU = 1500 байт.\n"},{"slug":"gre-tunnel","title":"GRE-туннели и IPIP - point-to-point поверх IP","category":"network-l2-l3","tldr":"GRE - инкапсуляция любого L3 в IP (proto 47), 24 байта header.\nIPIP - тоньше, только IP-в-IP. mGRE - один интерфейс к multiple\nendpoint'ам. Без шифрования - обёртывают в IPsec. Используется в\nsite-to-site VPN, BGP-полу-мешах.\n"},{"slug":"icmp","title":"ICMP","category":"network-l2-l3","tldr":"ICMP - служебный протокол поверх IP для control-сообщений: echo (ping),\ndestination-unreachable, time-exceeded (используется traceroute), MTU\ndiscovery. Не для данных.\n"},{"slug":"ip-forwarding","title":"IP forwarding - превратить хост в роутер","category":"network-l2-l3","tldr":"Linux по умолчанию НЕ пересылает пакеты между интерфейсами. Включается\nчерез `sysctl net.ipv4.ip_forward=1`. Без этого не работают NAT, VPN-роутер, любой forwarding.\n"},{"slug":"ipv4-addressing","title":"IPv4-адресация и CIDR","category":"network-l2-l3","tldr":"IP-адрес = 32 бита, обычно как `a.b.c.d`. **/N** в конце - длина префикса\nсети: `/24` = первые 24 бита фиксированы, последние 8 - host'ы (256 адресов).\n"},{"slug":"ipv6-basics","title":"IPv6 - адресация и базовые концепции","category":"network-l2-l3","tldr":"IPv6 - 128-битные адреса в 8 группах по 16 бит. Link-local fe80::/10\nдля соседей, global для интернета. SLAAC выдаёт адрес автоматически\nчерез Router Advertisement. Neighbor Discovery (NDP) заменяет ARP.\n"},{"slug":"linux-bridge","title":"Linux bridge - программный свитч","category":"network-l2-l3","tldr":"Bridge - программный L2-свитч в ядре Linux. Учит MAC в FDB,\nфорвардит фреймы между интерфейсами. Основа Docker default network,\nKVM bridge, libvirt. С vlan_filtering эмулирует управляемый свитч.\n"},{"slug":"mac-address","title":"MAC address","category":"network-l2-l3","tldr":"MAC - 48-битный аппаратный адрес сетевой карты, формат `aa:bb:cc:dd:ee:ff`.\nУникален в пределах L2-сегмента, используется в [[ethernet-frame]] для\nадресации L2.\n"},{"slug":"mtu-and-pmtud","title":"MTU и Path MTU Discovery (PMTUD)","category":"network-l2-l3","tldr":"MTU - максимум байт IP-пакета на интерфейсе. PMTUD ищет минимум на\nпути через ICMP \"Fragmentation Needed\". Если ICMP режут - blackhole\nбольших пакетов. MSS clamping в iptables/nftables - стандартный фикс\nна туннелях VXLAN/IPsec.\n"},{"slug":"policy-routing","title":"Policy routing - rule-based маршрутизация","category":"network-l2-l3","tldr":"Policy routing - выбор routing-таблицы по src-IP, fwmark, iif, tos.\nip rule + ip route table N. Multi-uplink, source-based routing,\nVRF, split-tunnel VPN. RPDB - Routing Policy Database.\n"},{"slug":"routing-table","title":"Routing table","category":"network-l2-l3","tldr":"Таблица маршрутизации - список «куда направлять пакеты с таким destination».\nСамая длинная (longest-prefix) подходящая запись выигрывает.\n"},{"slug":"subnetting-cidr","title":"Subnetting и CIDR","category":"network-l2-l3","tldr":"CIDR /N показывает сколько бит из 32 (или 128 для IPv6) - это сеть.\n/24 = 256 адресов, /30 = 4 (p2p), /16 = 65536. Хост в подсети может\nнапрямую общаться только с хостами с тем же prefix'ом.\n"},{"slug":"traceroute","title":"Traceroute - как увидеть путь пакета через интернет","category":"network-l2-l3","tldr":"Утилита, показывающая каждый роутер на пути до удалённого хоста. Работает\nчерез хитрый трюк: шлёт пакеты с **возрастающим TTL** (1, 2, 3, ...) и\nсобирает ответы «time exceeded» от роутеров, которые дропают такие пакеты.\n"},{"slug":"veth-pair","title":"veth pair","category":"network-l2-l3","tldr":"veth-pair - два связанных виртуальных Ethernet-интерфейса. Что заходит в\nодин конец - выходит из другого. Базовый кирпич всех Linux-контейнерных сетей.\n"},{"slug":"vlan-and-trunk","title":"VLAN и trunk - 802.1Q","category":"network-l2-l3","tldr":"VLAN - логическое разделение одного физического свитча на несколько L2.\nTag 802.1Q добавляет 4 байта в Ethernet-frame с VLAN-ID (12 бит, до 4094\nVLAN). Trunk = много VLAN на порте, access = один.\n"},{"slug":"vxlan-overlay","title":"VXLAN - L2 overlay поверх L3-сети","category":"network-l2-l3","tldr":"VXLAN - L2-overlay через UDP/4789. 24-битный VNI = 16M сегментов\n(vs 4K у VLAN). VTEP делает encap/decap. BUM-трафик идёт через\nmulticast или head-end replication. EVPN-VXLAN - control plane через\nBGP. Underlay MTU 1550 минимум.\n"}]},{"id":"network-l4","label":"Сеть: L4 и выше","is_bonus":false,"entries":[{"slug":"coap","title":"CoAP - REST для constrained-устройств поверх UDP","category":"network-l4","tldr":"CoAP - REST поверх UDP для маломощных IoT-устройств. 4-байтный\nheader, GET/POST/PUT/DELETE, response codes как HTTP. Observe\nдля notifications. DTLS для security. Применяется в LwM2M, Thread.\n"},{"slug":"conntrack","title":"Conntrack - память Linux о всех сетевых соединениях","category":"network-l4","tldr":"Подсистема ядра Linux, которая помнит каждое активное соединение. Без неё\nNAT не развернёт ответ на нужный приватный IP, а фаервол не отличит\n«новый коннект» от «уже установленного». Видна в `/proc/net/nf_conntrack`.\n"},{"slug":"dhcp-protocol","title":"DHCP - Dynamic Host Configuration Protocol","category":"network-l4","tldr":"DHCP выдаёт хосту IP-адрес, маску, шлюз и DNS через broadcast. 4 пакета:\nDORA = Discover (клиент), Offer (сервер), Request (клиент), Ack (сервер).\nАренда продлевается за 50% TTL.\n"},{"slug":"dns-resolution","title":"DNS resolution","category":"network-l4","tldr":"Резолвинг имени → IP проходит через NSS: сначала `/etc/hosts`, потом DNS\nчерез `/etc/resolv.conf`. Порядок задаётся в `/etc/nsswitch.conf`.\n"},{"slug":"grpc-basics","title":"gRPC - HTTP/2 + Protobuf RPC framework","category":"network-l4","tldr":"gRPC = HTTP/2 + Protocol Buffers + кодогенерация. Четыре типа RPC:\nunary (как REST), server-stream, client-stream, bidirectional.\nСильная типизация, бинарный wire format, multi-language. grpcurl\nкак curl для gRPC.\n"},{"slug":"http-protocol","title":"HTTP/1.1, HTTP/2, HTTP/3","category":"network-l4","tldr":"HTTP/1.1 - текстовый протокол с keep-alive. HTTP/2 - бинарный с\nмультиплексированием в одном TCP-соединении. HTTP/3 = HTTP/2-семантика\nповерх QUIC/UDP без TCP-head-of-line blocking.\n"},{"slug":"http2-internals","title":"HTTP/2 internals - binary framing, HPACK, stream multiplexing","category":"network-l4","tldr":"HTTP/2 - бинарный мультиплексинг поверх одного TCP-соединения.\nHPACK сжимает headers через индексированный словарь. Streams\nнезависимы. Server push deprecated. На loss-friendly link\nHoL-blocking - проблема, которую решил QUIC.\n"},{"slug":"mqtt","title":"MQTT - publish/subscribe для IoT и mobile push","category":"network-l4","tldr":"MQTT - lightweight pub/sub поверх TCP. Topics с wildcards, QoS 0/1/2,\nretained messages, last will. Малый overhead (2 байта min header).\nБрокер обязателен (mosquitto/EMQX/HiveMQ). Применение: IoT, telemetry,\nmobile push.\n"},{"slug":"nat","title":"NAT и masquerade","category":"network-l4","tldr":"NAT - переписывание src/dst адресов пакета на роутере. Masquerade - частный\nслучай: src-IP заменяется на свой исходящий, для исходящих из приватной\nсети в публичную.\n"},{"slug":"tcp-keepalive","title":"TCP keepalive","category":"network-l4","tldr":"Keepalive шлёт пробы по простаивающему TCP-соединению чтобы поймать\nмёртвый peer (NAT-таймаут, упавший хост). Дефолт Linux: 7200s простоя,\n75s между пробами, 9 проб. Включается через setsockopt(SO_KEEPALIVE).\n"},{"slug":"tcp-states","title":"TCP states (LISTEN, ESTABLISHED, TIME_WAIT)","category":"network-l4","tldr":"TCP-сессия проходит через 11 состояний от LISTEN до CLOSED. Самые\nважные на проде: LISTEN, ESTABLISHED, TIME_WAIT, CLOSE_WAIT.\n"},{"slug":"tcp-handshake","title":"TCP three-way handshake","category":"network-l4","tldr":"TCP-соединение открывается тремя пакетами: SYN от клиента, SYN-ACK от сервера,\nACK от клиента. После - соединение Established, можно слать данные.\n"},{"slug":"tls-handshake","title":"TLS handshake","category":"network-l4","tldr":"TLS - слой шифрования поверх TCP. Перед передачей данных стороны делают\nhandshake: обмениваются ключами, проверяют сертификат, выбирают cipher.\n"},{"slug":"udp-basics","title":"UDP - User Datagram Protocol","category":"network-l4","tldr":"UDP - простой протокол доставки датаграмм без установки соединения, без\nретрансмитов, без гарантии порядка. Заголовок 8 байт. Применение: DNS,\nDHCP, QUIC, VoIP, любой случай когда задержка важнее надёжности.\n"},{"slug":"websocket","title":"WebSocket - bidirectional поверх HTTP","category":"network-l4","tldr":"WebSocket - двусторонний канал поверх одного TCP. Апгрейд из HTTP/1.1\nчерез Upgrade header, потом обмен бинарными frame'ами. Используется для\nreal-time UI - чаты, дашборды, live-обновления.\n"},{"slug":"port","title":"Порт - как несколько сервисов делят один IP","category":"network-l4","tldr":"16-битное число (0-65535), идентифицирует **процесс-получатель** на хосте.\nIP говорит куда (хост), порт - кому (процессу). 80 - HTTP, 443 - HTTPS,\n22 - SSH.\n"}]},{"id":"commands","label":"Команды","is_bonus":false,"entries":[{"slug":"cmd-awk","title":"awk - обработка структурированного текста по полям","category":"commands","tldr":"awk бьёт строку на поля по FS (default - whitespace) и применяет\npattern { action }. `$1..$NF`, `NR` (счётчик), BEGIN/END для пролога и\nитогов. Покрывает 80% задач \"обработать колонки\" без Python.\n"},{"slug":"bash-scripting","title":"bash-скрипты - основы и идиомы","category":"commands","tldr":"Bash-скрипт - текстовый файл с shebang `#!/usr/bin/env bash` и `chmod +x`.\nОбязательный starting point - `set -euo pipefail` и `shellcheck` для проверки.\n"},{"slug":"cmd-cron-crontab","title":"cron и crontab - расписание задач","category":"commands","tldr":"cron - демон, который читает crontab-файлы и запускает задачи по\nрасписанию. Формат: `min hour day month weekday command`. Anacron\nдля выключаемых машин. На systemd-системах часто заменяется timers.\n"},{"slug":"cmd-curl","title":"curl - HTTP-клиент из терминала","category":"commands","tldr":"`curl` - universal CLI для HTTP/HTTPS/FTP/etc. Делает запросы, видит\nзаголовки, сертификаты, тайминги. Главный инструмент дебага HTTP API.\n"},{"slug":"cmd-dig","title":"dig - DNS-разведка с подробностями","category":"commands","tldr":"dig - DNS-разведка. Запросить любую запись у любого сервера. +short -\nкомпактно, +trace - путь от корня, +dnssec - показать подписи.\nСовременная замена nslookup для отладки.\n"},{"slug":"cmd-dmesg","title":"dmesg - kernel ring buffer","category":"commands","tldr":"dmesg - сообщения ядра из ring buffer (фиксированный размер,\nстарое затирается). `-T` человеческие даты, `-w` follow,\n`-l err,crit` фильтр. Источник правды для драйверов и OOM-killer'а.\n"},{"slug":"cmd-find","title":"find - поиск файлов по предикатам","category":"commands","tldr":"`find` обходит дерево каталогов и применяет предикаты (имя, тип, время, размер,\nправа). Действия: `-print` (по умолчанию), `-delete`, `-exec`, `| xargs`.\n"},{"slug":"cmd-grep","title":"grep - поиск строк по шаблону","category":"commands","tldr":"`grep` ищет строки по regex'у в stdin или файлах. Главные режимы: `-E` (ERE),\n`-P` (PCRE), `-F` (фиксированная строка), `-r` (рекурсивно по дереву).\n"},{"slug":"cmd-htop","title":"htop - интерактивный монитор процессов","category":"commands","tldr":"htop - интерактивный TUI-монитор процессов. F-keys: F3 поиск, F4 фильтр,\nF5 дерево, F6 сортировка, F9 kill. Цветовые столбцы наверху, список\nвнизу. Замена top'а везде, где доступен.\n"},{"slug":"cmd-ip","title":"ip - швейцарский нож сетевой настройки","category":"commands","tldr":"`ip` - фронт-энд iproute2, заменяет старые ifconfig/route/arp. Подкоманды:\n`ip addr` (адреса), `ip link` (интерфейсы), `ip route` (маршруты), `ip neigh`\n(ARP).\n"},{"slug":"cmd-iperf3","title":"iperf3 - измерение bandwidth","category":"commands","tldr":"`iperf3` - стандартный инструмент замера throughput TCP/UDP между двумя\nточками. Запускается парой server + client. Не для прода, а для теста сети.\n"},{"slug":"cmd-iptables","title":"iptables - правила netfilter (legacy)","category":"commands","tldr":"iptables = userland для netfilter. 5 таблиц\n(filter/nat/mangle/raw/security), цепочки INPUT/OUTPUT/FORWARD/PRE/POSTROUTING,\njump-targets ACCEPT/DROP/MASQUERADE. Legacy, но в проде ещё везде.\n"},{"slug":"cmd-journalctl","title":"journalctl - журнал systemd","category":"commands","tldr":"`journalctl` читает binary-журнал systemd-journald. Это центральный лог\nсистемы: kernel, systemd-сервисы, syslog - всё через один интерфейс.\n"},{"slug":"cmd-jq","title":"jq - запросы и трансформация JSON","category":"commands","tldr":"jq - запросный язык для JSON в shell. `.field`, `.array[]`, `select(...)`,\n`map(...)`, пайпы внутри выражения через `|`. `-r` снимает кавычки,\n`-c` пакует в строку. Идеально для curl + jq + grep.\n"},{"slug":"cmd-lsblk-blkid","title":"lsblk и blkid - block-устройства и UUID","category":"commands","tldr":"lsblk показывает дерево block-устройств (диск → раздел → LVM/crypt\n→ mountpoint). blkid печатает UUID/LABEL/TYPE ФС. Связка для\nнаписания строки в [[mount-and-fstab|/etc/fstab]] по UUID.\n"},{"slug":"cmd-lsof","title":"lsof - кто что открыл","category":"commands","tldr":"`lsof` (List Open Files) показывает все открытые файлы по всем процессам.\nВ Linux всё - файл, поэтому это и обычные файлы, и сокеты, и pipe'ы.\n"},{"slug":"cmd-mtr","title":"mtr - traceroute + ping в одном","category":"commands","tldr":"mtr = traceroute + ping. Непрерывно опрашивает каждый hop, показывает\nloss% и latency. Помогает за секунду найти где в маршруте теряются\nпакеты или растёт задержка.\n"},{"slug":"cmd-nft","title":"nft - современный файрвол (nftables)","category":"commands","tldr":"`nft` - единый CLI для современного netfilter. Заменяет iptables/ip6tables/\narptables/ebtables. Структура: tables → chains → rules.\n"},{"slug":"cmd-nmap","title":"nmap - сканирование портов и хостов","category":"commands","tldr":"nmap - сетевой сканер: discover хостов (-sn), TCP/UDP-порты (-sS/-sU),\nверсии сервисов (-sV), ОС (-O), NSE-скрипты. Только в своей сети\nили с явным разрешением - сканировать чужое запрещено.\n"},{"slug":"cmd-ps","title":"ps - снимок процессов","category":"commands","tldr":"ps - снимок процессов в момент вызова. Два диалекта: BSD (`aux`,\nбез дефиса) и UNIX (`-ef`, с дефисом). `-o` задаёт колонки. Для\nнепрерывного просмотра - [[cmd-htop|htop]].\n"},{"slug":"cmd-rsync","title":"rsync - инкрементальная синхронизация файлов","category":"commands","tldr":"rsync копирует только изменённые блоки файлов локально или по SSH.\n`-avz` базовая комбинация (archive + verbose + compress).\n`--delete` зеркалирует. `--dry-run` обязателен перед первым запуском.\n"},{"slug":"cmd-sed","title":"sed - потоковый редактор текста","category":"commands","tldr":"sed - потоковый редактор: каждой строке применяет команды (`s/a/b/`,\n`d`, `p`, ...). `-i` правит файл на месте; `-E` включает ERE; адресный\nдиапазон `/start/,/end/` фильтрует блок. Hold space - вторая память.\n"},{"slug":"cmd-ss","title":"ss - кто слушает и кто подключён","category":"commands","tldr":"`ss` - современная замена netstat. Показывает сокеты: LISTEN, ESTABLISHED,\nподдерживает фильтры по адресу/порту/state и extended TCP info.\n"},{"slug":"cmd-strace","title":"strace - какие syscall'ы делает процесс","category":"commands","tldr":"`strace` показывает в реальном времени какие системные вызовы делает\nпроцесс и с какими аргументами. Главный инструмент когда «процесс молчит».\n"},{"slug":"cmd-sysctl","title":"sysctl - крутилки ядра","category":"commands","tldr":"`sysctl` читает и пишет параметры ядра через виртуальную FS `/proc/sys/`.\nTuning сети, памяти, файлсистемы - всё через эти ручки.\n"},{"slug":"cmd-systemctl","title":"systemctl - управление сервисами systemd","category":"commands","tldr":"`systemctl` - главный CLI для управления unit'ами systemd: сервисами,\nтаймерами, маунтами, сокетами. Замена SysV-init/`service` на современных дистро.\n"},{"slug":"cmd-tc","title":"tc - traffic control","category":"commands","tldr":"`tc` управляет очередями пакетов на сетевых интерфейсах: лимиты bandwidth,\nзадержки, потери, классификация. Часть iproute2.\n"},{"slug":"cmd-tcpdump","title":"tcpdump - захват пакетов","category":"commands","tldr":"tcpdump читает пакеты с интерфейса по BPF-фильтру. Поддерживает запись pcap\nдля последующего анализа в Wireshark.\n"},{"slug":"cmd-vtysh","title":"vtysh - CLI к FRR (BGP/OSPF)","category":"commands","tldr":"vtysh - Cisco-подобный CLI к FRRouting. Через него настраиваются\nвсе routing-демоны (zebra, bgpd, ospfd) одной интегрированной сессией.\n"},{"slug":"xargs-and-find-exec","title":"xargs и find -exec - массовые операции","category":"commands","tldr":"Два способа применить команду к набору файлов: `find ... -exec cmd {} +` (внутри find) и `... | xargs cmd` (через pipe).\nДля безопасности с пробелами/спецсимволами - связка `find -print0 | xargs -0`.\n"}]},{"id":"protocols","label":"Протоколы","is_bonus":false,"entries":[{"slug":"apache-httpd","title":"Apache httpd - веб-сервер","category":"protocols","tldr":"Apache httpd - веб-сервер. На RHEL пакет `httpd`, конфиг `/etc/httpd/conf/httpd.conf`.\nНа Debian/Ubuntu пакет `apache2`, конфиг `/etc/apache2/apache2.conf` + `sites-enabled/`.\n"},{"slug":"bgp","title":"BGP - Border Gateway Protocol","category":"protocols","tldr":"**BGP** - протокол маршрутизации между автономными системами (AS).\nЭто «язык» которым общаются ISP и крупные сети интернета: какой AS\nвладеет какими prefix'ами и через кого до них доходить.\n"},{"slug":"bind-dns-server","title":"BIND - авторитативный/кеширующий DNS-сервер","category":"protocols","tldr":"BIND (Berkeley Internet Name Domain) - самый распространённый DNS-сервер в Linux.\nДемон `named`, конфиг `/etc/named.conf` или `/etc/bind/named.conf`, контроль через `rndc`.\n"},{"slug":"ftp-sftp","title":"FTP и SFTP - передача файлов","category":"protocols","tldr":"FTP, старый протокол с control + data соединениями (active/passive\nmodes), без шифрования. SFTP, подсистема SSH, ничего общего с FTP\nкроме имени. Сегодня, SFTP или [[cmd-rsync|rsync]].\n"},{"slug":"gpg-pgp","title":"GPG/PGP - подпись, шифрование, web of trust","category":"protocols","tldr":"GPG = open-source реализация OpenPGP. Пара ключей (RSA/ECDSA),\nпубличный для verify/encrypt, приватный для sign/decrypt. keyring\nлокально, web-of-trust между людьми. Используется в git-commit\nsigning, package-signing (apt/rpm), email.\n"},{"slug":"ipsec-ike","title":"IPsec и IKEv2 - стандарт корпоративных VPN","category":"protocols","tldr":"IPsec - L3-VPN-стандарт. ESP инкапсулирует и шифрует, IKEv2\nобменивается ключами. Tunnel-mode даёт новый IP-заголовок для\nsite-to-site; transport-mode - host-to-host. На Linux это strongSwan.\n"},{"slug":"kerberos","title":"Kerberos - сетевой single sign-on","category":"protocols","tldr":"Kerberos - SSO-система с тикетами на временной криптографии.\nОдин раз вводишь пароль (`kinit`), получаешь TGT, дальше KDC\nвыдаёт service tickets в обмен. Основа AD и FreeIPA.\n"},{"slug":"ldap-basics","title":"LDAP - directory services основы","category":"protocols","tldr":"LDAP - запрос к иерархическому справочнику. DN = координата объекта\n(cn=user,ou=People,dc=example,dc=com), bind = аутентификация,\nschema задаёт классы объектов и атрибуты. OpenLDAP/389-DS на Linux.\n"},{"slug":"nfs","title":"NFS - сетевая файловая система","category":"protocols","tldr":"NFS - сетевая ФС от Sun. v3 - stateless, v4.1+ - stateful с\nделегациями и pNFS. /etc/exports на сервере, mount -t nfs на\nклиенте. root_squash, sync/async, lock manager - три главные опции.\n"},{"slug":"openvpn","title":"OpenVPN - TLS-based VPN","category":"protocols","tldr":"OpenVPN - userspace TLS-VPN на сертификатах X.509. Режимы: tun\n(L3, default) или tap (L2). Поддерживает UDP/TCP, push routes,\nper-user-аутентификацию, TCP-443 как маскировку. Жирнее [[wireguard|WG]].\n"},{"slug":"ospf","title":"OSPF - Open Shortest Path First","category":"protocols","tldr":"**OSPF** - link-state IGP внутри одной автономной системы.\nКаждый роутер знает полную топологию (LSDB) и независимо считает\nкратчайшие пути алгоритмом Dijkstra. Сходимость секунды.\n"},{"slug":"quic-http3","title":"QUIC и HTTP/3 - современный транспорт поверх UDP","category":"protocols","tldr":"QUIC - транспорт поверх UDP. TLS 1.3 встроен (1 RTT, 0-RTT для\nresume). Multiplexing без head-of-line blocking. Connection\nmigration (Wi-Fi → 4G без drop). HTTP/3 = HTTP-семантика поверх\nQUIC.\n"},{"slug":"radius","title":"RADIUS - аутентификация для сети, VPN, Wi-Fi","category":"protocols","tldr":"RADIUS - старый AAA-протокол UDP/1812+1813 (auth+accounting).\nИспользование - аутентификация на сетевом железе: Wi-Fi WPA2-Ent\nчерез EAP, VPN-клиенты, доступ к роутерам и switch'ам.\nFreeRADIUS - реализация по умолчанию.\n"},{"slug":"smtp-mta","title":"SMTP и MTA - доставка email","category":"protocols","tldr":"SMTP - текстовый протокол доставки почты. 25/tcp - server-to-server,\n587 - submission (клиент с auth), 465 - implicit-TLS legacy.\nMX-запись в DNS, STARTTLS+SPF+DKIM+DMARC - стандартный набор.\n"},{"slug":"ssh","title":"SSH - secure shell","category":"protocols","tldr":"SSH - зашифрованный канал к удалённому хосту: shell, копирование файлов,\nport-forwarding. Стандартный порт 22, аутентификация по ключам или паролю.\n"},{"slug":"wireguard","title":"WireGuard - современный UDP-VPN","category":"protocols","tldr":"WireGuard - UDP-VPN в ядре Linux. Пара ключей Curve25519, peers\nс AllowedIPs (это и ACL, и routing-table). ~4000 строк кода против\nмиллионов у OpenVPN/IPsec. Конфиг плоский, без TLS и сертификатов.\n"}]},{"id":"security","label":"Безопасность","is_bonus":false,"entries":[{"slug":"auditd","title":"auditd - syscall и file audit","category":"security","tldr":"auditd пишет события ядра в /var/log/audit/audit.log: file watches\n(-w), syscall rules (-a), exec'и. ausearch для поиска, aureport\nдля отчётов. Основа compliance (PCI-DSS, HIPAA, ФЗ-152).\n"},{"slug":"cis-benchmark-hardening","title":"CIS Benchmark и system hardening (lynis, OpenSCAP)","category":"security","tldr":"CIS Benchmark - стандарт hardening Linux. Lynis - быстрый локальный\naudit со скором, OpenSCAP - формальный с XCCDF-профилями и SCAP-\nрепортом. ansible-lockdown - remediate. Audit и remediate раздельно.\n"},{"slug":"fail2ban","title":"fail2ban - автобан по логам","category":"security","tldr":"fail2ban читает логи (sshd, nginx, postfix), регэкспом ловит N неудачных попыток за окно, добавляет\nIP в правила firewall'а на bantime. Главный инструмент против brute-force на SSH.\n"},{"slug":"firewalld-vs-nftables","title":"firewalld vs nftables - что выбрать","category":"security","tldr":"firewalld - daemon-обёртка с zones, services, rich-rules; backend\nс RHEL 8 - nftables. Чистый nft - больше контроля, sets, atomic\nreload. firewalld для desktop/multi-zone, nft для server-fleet.\n"},{"slug":"pam","title":"PAM - Pluggable Authentication Modules","category":"security","tldr":"PAM - фреймворк аутентификации в Linux. Программы (sudo, login, sshd) не проверяют пароли сами,\nа вызывают PAM, который через стек модулей в `/etc/pam.d/<service>` решает: пускать или нет.\n"},{"slug":"selinux-policy","title":"SELinux policy - типы, домены, audit2allow","category":"security","tldr":"SELinux: каждый процесс имеет домен, каждый объект - тип. Policy\nопределяет какие домены могут что делать с какими типами. audit2allow\nгенерит rules из AVC-denials, semanage тюнит, .pp - модули policy.\n"},{"slug":"ssh-hardening","title":"SSH hardening - закрытие сервера","category":"security","tldr":"SSH hardening: ключи only (PasswordAuthentication no), отключить\nroot-login, AllowUsers/AllowGroups, MaxAuthTries, fail2ban-jail\nна sshd. Опционально - нестандартный порт + Match-блоки для гостей.\n"},{"slug":"tls-certificates","title":"TLS-сертификаты - X.509, цепочка доверия, Let's Encrypt","category":"security","tldr":"TLS cert - X.509 объект с public key + identity (CN/SAN) + подписью\nCA. Цепочка: leaf → intermediate → root (доверенный OS). Let's\nEncrypt = бесплатный CA через ACME (HTTP-01/DNS-01 challenge).\nВ k8s - cert-manager.\n"},{"slug":"unattended-upgrades","title":"Автообновления безопасности (unattended-upgrades, dnf-automatic, livepatch)","category":"security","tldr":"Debian/Ubuntu - unattended-upgrades, RHEL - dnf-automatic.\nAuto только security-updates, остальное вручную. Live patching ядра\n(livepatch/kpatch) даёт security-fixes без reboot. Без autoreboot -\nно с уведомлением о необходимости.\n"},{"slug":"secrets-management","title":"Управление секретами - Vault, k8s Secrets, sealed-secrets","category":"security","tldr":"Секреты не в git, не в env-vars в коде. Опции: HashiCorp Vault\n(универсал, dynamic creds), k8s Secrets (base64, нужен encryption-\nat-rest), sealed-secrets (commit-friendly), external-secrets\n(sync из cloud-vault).\n"}]},{"id":"containers","label":"Контейнеры (бонус)","is_bonus":true,"entries":[{"slug":"cni-plugins","title":"CNI plugins - сеть Kubernetes (calico, cilium, flannel)","category":"containers","tldr":"CNI - спека плагина: дай pod IP и сеть. Реализации: flannel (VXLAN\nL2-overlay), calico (BGP routing), cilium (eBPF в kernel). Каждая\nдаёт NetworkPolicy для firewall'а между подами. IPAM - часть CNI,\nвыделяет адреса.\n"},{"slug":"image-signing-cosign","title":"Cosign и подпись container images (sigstore)","category":"containers","tldr":"cosign подписывает container images. Sigstore = ekosistema:\nrekor (transparency log), fulcio (CA для keyless OIDC). Подписи\nхранятся как OCI-объекты рядом с image. Verify - часть admission\ncontrol в k8s через policy-controller или Kyverno.\n"},{"slug":"docker-storage-drivers","title":"Docker storage drivers - overlay2, btrfs, zfs","category":"containers","tldr":"Storage driver - как Docker хранит image-layers и контейнер-changes\nна диске. overlay2 default (overlayfs над ext4/xfs), btrfs/zfs\nчерез subvolumes/snapshots, fuse-overlayfs для rootless.\n"},{"slug":"helm-charts","title":"Helm charts - пакетный менеджер для Kubernetes","category":"containers","tldr":"Helm - пакетный менеджер k8s. Chart - папка с Chart.yaml,\nvalues.yaml и templates/ (Go-templates над YAML). Releases хранятся\nв Secret namespace'а; upgrade/rollback атомарны. Альтернатива -\nkustomize (без templating, патчи).\n"},{"slug":"kubelet-internals","title":"kubelet - архитектура агента ноды Kubernetes","category":"containers","tldr":"kubelet - демон на каждой ноде. Получает PodSpec через API,\nзапускает контейнеры через CRI, монтирует volumes через CSI,\nследит за health. При pressure делает eviction. Image GC и\ncgroup-tree - тоже его.\n"},{"slug":"kubernetes-pod-lifecycle","title":"Kubernetes pod lifecycle - от Pending до Terminated","category":"containers","tldr":"Pod проходит фазы Pending → Running → Succeeded/Failed/Unknown.\nInit-containers выполняются последовательно до основных. Probes:\nstartup → readiness/liveness. SIGTERM + grace period при удалении.\n"},{"slug":"kubernetes-services-and-ingress","title":"Kubernetes Service и Ingress - сетевая публикация подов","category":"containers","tldr":"Service - стабильный VIP перед группой подов (label selector).\nТипы: ClusterIP (внутри), NodePort (порт на каждой ноде),\nLoadBalancer (внешний LB облака), ExternalName (CNAME).\nIngress - L7 reverse-proxy (nginx/traefik) для HTTP-роутинга.\n"},{"slug":"kubernetes-storage","title":"Kubernetes storage - PV, PVC, StorageClass, CSI","category":"containers","tldr":"PV - физический volume. PVC - запрос pod'а. StorageClass + CSI -\nшаблон для dynamic provisioning. ReadWriteOnce типичный (block),\nReadWriteMany нужен NFS/CephFS. Эфемерные (emptyDir, configMap)\nживут пока жив pod.\n"},{"slug":"oci-spec","title":"OCI spec - стандарт контейнеров","category":"containers","tldr":"OCI - три спеки: Image (слои + manifest), Runtime (config.json\n+ rootfs для runc), Distribution (registry API). Стандарт после\nDocker'а; runc, podman, containerd, CRI-O - всё OCI-compatible.\n"},{"slug":"runc-and-runsc","title":"runc, runsc, kata - container runtimes","category":"containers","tldr":"runc - стандартный OCI-runtime, namespaces+cgroups+seccomp.\nrunsc/gVisor - userspace-ядро для дополнительной изоляции.\nkata - облегчённая VM на контейнер. Performance ↔ isolation trade-off.\n"}]},{"id":"observability","label":"Observability и мониторинг","is_bonus":false,"entries":[{"slug":"alerting-rules-alertmanager","title":"Alertmanager: route tree, inhibit, dedup, on-call","category":"observability","tldr":"Alertmanager - принимает alerts от Prometheus, дедупит, группирует,\nроутит по route tree в PagerDuty/Slack/email. Inhibit suppress'ит\nзависимые alerts при upstream-падении. Silence на время maintenance.\nШум убивает on-call.\n"},{"slug":"cardinality-explosion","title":"Cardinality explosion: как убить Prometheus и как чинить","category":"observability","tldr":"Cardinality = uniq(metric × labels). Каждый series ≈ 3 KB RAM,\n10M series = 30 GB RAM, Prom OOM-цикл. Source: user_id-labels,\nпути с ID, dynamic version. Diag - topk по __name__. Cure - drop\nlabels через relabel или нормализация в коде.\n"},{"slug":"pyroscope-continuous-profiling","title":"Continuous profiling: Pyroscope, eBPF, flame graphs в проде","category":"observability","tldr":"Continuous profiling - always-on CPU/memory profiler в проде через\neBPF. 1-2% overhead. Flame graphs показывают hot path. Pyroscope\n(Grafana), Parca, Polar Signals. Замена ad-hoc perf для production\ndebug.\n"},{"slug":"tracing-basics","title":"Distributed tracing: span, context propagation, sampling","category":"observability","tldr":"Tracing - граф spans (parent-child) одного логического запроса\nчерез сервисы. Context передаётся HTTP-header traceparent (W3C).\nSampling: head (на edge, дёшево) или tail (в Collector, точнее).\nBackend: Jaeger, Tempo, Zipkin.\n"},{"slug":"loki-grafana-logging","title":"Loki: label-based логи, LogQL, Promtail/Vector pipeline","category":"observability","tldr":"Loki - log aggregation с label-based индексом (не full-text как\nElastic). Дёшево на S3-storage. Promtail/Vector как агенты. LogQL\nпохож на PromQL: фильтр + parse + aggregation. Cardinality - враг.\n"},{"slug":"opentelemetry","title":"OpenTelemetry: signals, OTLP, Collector pipeline","category":"observability","tldr":"OpenTelemetry - CNCF-стандарт для metrics+traces+logs в одном SDK.\nOTLP протокол (gRPC или HTTP). Collector принимает, фильтрует, роутит\nв Prom/Tempo/Loki/Jaeger. Auto-instrumentation без code change.\n"},{"slug":"prometheus-basics","title":"Prometheus: scrape, TSDB, PromQL и production-pitfalls","category":"observability","tldr":"Prometheus - сервер мониторинга: сам опрашивает приложения по\nHTTP, собирает числовые метрики, хранит во встроенной БД ~15\nдней. По ним строят графики в Grafana и алерты через Alertmanager.\nСтандарт de-facto в Kubernetes.\n"},{"slug":"service-discovery-prometheus","title":"Service discovery в Prometheus: k8s, Consul, file_sd, relabel","category":"observability","tldr":"Prom discoverит targets через k8s API, Consul, file_sd (static).\nrelabel_configs - до scrape (filter+rewrite labels). metric_relabel\n- после scrape (drop bad metrics). Без relabel - cardinality из\nk8s взрывается.\n"},{"slug":"sli-slo-error-budget","title":"SLI / SLO / error budget: SRE-метрики без шума","category":"observability","tldr":"SLI - метрика для пользователя (availability, p99 latency).\nSLO - цель за период (99.9% за 30d). Error budget = 1-SLO,\nрасходуется на инциденты+релизы. Multi-window burn rate alerting\nзаменяет threshold-алерты, меньше шума.\n"},{"slug":"metric-types","title":"Типы метрик: counter, gauge, histogram, summary","category":"observability","tldr":"4 типа метрик: counter (только вверх), gauge (любое значение),\nhistogram (buckets для p99), summary (quantile в клиенте).\nNative histogram (Prom 2.40+) - sparse buckets, аккуратнее по памяти.\nExemplars связывают метрику с trace_id.\n"}]}]