Библиотека — FreeBSD — сводный cheatsheet [X]
Шифр
freebsd-cheatsheet
Разделы
cheatsheet freebsd
Сверено
2 сентября — в этот день утверждения статьи сверялись с первоисточниками, а не правился текст
Объём
15 245 знаков · 15 разделов · чтения около 15 минут

FreeBSD — сводный cheatsheet


Quick reference по всей серии из 10 статей. Команды сгруппированы по задачам. Для углублённого понимания — ссылки на соответствующие статьи.


Информация о системе

freebsd-version                    # версия base system (точнее uname -r)
freebsd-version -k                 # версия ядра
freebsd-version -u                 # версия userland
uname -a                           # полная информация о системе
sysctl hw.machine                  # архитектура
sysctl hw.model                    # модель CPU
sysctl hw.ncpu                     # число CPU
sysctl hw.physmem                  # физическая RAM
sysctl kern.boottime               # время загрузки
uptime                             # uptime + load average
dmesg | less                       # сообщения ядра
kenv                               # переменные окружения загрузчика

📖 Статьи: файловая иерархия, sysctl и ядро


Управление сервисами (rc)

service <name> start|stop|restart|status
service <name> enable               # = sysrc <name>_enable=YES
service -e                          # список включённых сервисов
service -l                          # все доступные rc-скрипты
sysrc <var>=<value>                 # установить переменную в /etc/rc.conf
sysrc -a                            # все переменные rc.conf
sysrc -x <var>                      # удалить переменную

# Service jails (лёгкая изоляция)
sysrc nginx_svcj="YES"

📖 Статья: rc-система


Сеть

# Интерфейсы
ifconfig                            # все интерфейсы
ifconfig vtnet0 inet 10.0.0.1/24   # назначить IP
ifconfig vtnet0 up|down             # поднять/опустить

# Маршрутизация
netstat -rn                         # таблица маршрутизации
route add default 10.0.0.1         # шлюз по умолчанию
route add -net 192.168.0.0/16 10.0.0.2   # статический маршрут

# DNS
cat /etc/resolv.conf
drill example.com                   # аналог dig (base system)

# Диагностика
ping -c 3 8.8.8.8
traceroute 8.8.8.8
sockstat -l                         # слушающие порты (= ss -ln)
sockstat -4c                        # активные IPv4 соединения
netstat -an                         # все соединения
netstat -s                          # статистика протоколов
netstat -i                          # статистика интерфейсов
tcpdump -i vtnet0 -n port 80       # перехват трафика
arp -a                              # ARP-таблица

PF (firewall)

# Управление
pfctl -e                            # включить PF
pfctl -d                            # выключить PF
pfctl -f /etc/pf.conf              # загрузить правила
pfctl -nf /etc/pf.conf             # проверить синтаксис (dry run)
pfctl -sr                           # показать правила
pfctl -ss                           # показать state table
pfctl -si                           # статистика
pfctl -sa                           # всё вместе

# Таблицы
pfctl -t bruteforce -T show         # содержимое таблицы
pfctl -t bruteforce -T add 203.0.113.4  # добавить IP
pfctl -t bruteforce -T delete 203.0.113.4
pfctl -t bruteforce -T expire 86400 # удалить записи старше 24ч

# Логи
tcpdump -i pflog0 -n               # живой pflog
tcpdump -r /var/log/pflog -n       # сохранённый pflog

📖 Статья: сеть


Пакеты и порты

# Бинарные пакеты (pkg)
pkg update                          # обновить индекс
pkg upgrade                         # обновить все пакеты
pkg install <name>                  # установить
pkg delete <name>                   # удалить
pkg search <query>                  # поиск
pkg info                            # установленные пакеты
pkg info <name>                     # детали о пакете
pkg which /path/to/file             # какому пакету принадлежит файл
pkg audit -F                        # проверить уязвимости
pkg lock <name>                     # заблокировать от обновлений
pkg autoremove                      # удалить осиротевшие зависимости
pkg check -d -a                     # проверить зависимости

# Порты (сборка из исходников)
git clone https://git.FreeBSD.org/ports.git /usr/ports   # portsnap удалён в 14.0
cd /usr/ports && git pull           # обновить дерево портов
cd /usr/ports/<category>/<name>
make install clean                  # собрать и установить
make config                         # опции сборки
make deinstall                      # удалить

📖 Статья: pkg и порты


ZFS

# Пулы
zpool list                          # список пулов
zpool status                        # состояние, ошибки, scrub
zpool iostat 2                      # I/O статистика
zpool scrub <pool>                  # проверка целостности
zpool history                       # история операций
zpool create tank mirror da0 da1    # создать зеркальный пул

# Датасеты
zfs list                            # все датасеты
zfs list -t snapshot                # все снепшоты
zfs create zroot/data               # создать датасет
zfs destroy zroot/data              # удалить
zfs set compression=lz4 zroot       # включить сжатие (наследуется)
zfs set quota=10G zroot/data        # квота
zfs set atime=off zroot             # отключить atime
zfs get all zroot/data              # все свойства
zfs get compressratio zroot         # коэффициент сжатия

# Снепшоты и клоны
zfs snapshot zroot/data@before      # создать снепшот
zfs snapshot -r zroot@daily         # рекурсивно
zfs rollback zroot/data@before      # откатить (данные после снепшота ТЕРЯЮТСЯ)
zfs clone zroot/data@snap zroot/clone   # клон (writable)
zfs promote zroot/clone             # сделать клон независимым

# Send/receive (бэкапы)
zfs send zroot/data@snap | ssh remote zfs receive tank/data         # полный
zfs send -i @snap1 zroot/data@snap2 | ssh remote zfs receive tank/data  # инкрементальный
zfs send -R zroot@snap | xz > /backup/full.zfs.xz                  # рекурсивный + сжатие

# Boot environments
bectl list                          # список BE
bectl create before-upgrade         # создать BE
bectl activate <name>               # активировать для следующей загрузки
bectl destroy <name>                # удалить
bectl export default | xz > backup.be.xz   # экспорт
xzcat backup.be.xz | bectl import restored  # импорт

# Пространство — кто занимает
zfs list -o name,used,usedbydataset,usedbysnapshots,usedbychildren zroot
zfs list -t snapshot -o name,used -s used   # снепшоты по размеру

📖 Статья: ZFS


Jails

# Управление
service jail start <name>           # запустить jail
service jail stop <name>            # остановить
service jail restart <name>         # перезапустить
jls                                 # список запущенных jail'ов
jls -v                              # подробно
jexec <name> /bin/sh                # shell внутри jail
jexec <name> pkg install <pkg>      # установить пакет в jail

# Создание thick jail
zfs create zroot/jails/<name>
bsdinstall jail /usr/local/jails/<name>
cp /etc/resolv.conf /usr/local/jails/<name>/etc/
cp /etc/localtime /usr/local/jails/<name>/etc/

# Создание thin jail (ZFS clone)
zfs snapshot zroot/jails/templates/15.1-RELEASE@base
zfs clone zroot/jails/templates/15.1-RELEASE@base zroot/jails/<name>

# Ресурсы (rctl, нужен kern.racct.enable=1 в loader.conf)
rctl -a jail:<name>:memoryuse:deny=1g
rctl -u jail:<name>                 # текущее потребление

📖 Статья: jails


Безопасность

# SSH
ssh-keygen -t ed25519               # генерация ключа
ssh-copy-id user@server             # копирование ключа на сервер

# doas — минималистичная альтернатива sudo; в base FreeBSD его нет, ставится из портов
pkg install doas                    # живой форк; persist не работает — пароль на каждую команду
# pkg install opendoas              # persist есть, но апстрим заморожен с 2022; конфликтует с doas
echo 'permit :wheel' > /usr/local/etc/doas.conf

# Файловые флаги
chflags schg /etc/rc.conf           # system immutable (даже root не изменит при securelevel≥1)
chflags sappnd /var/log/auth.log    # system append-only
chflags noschg /etc/rc.conf         # снять immutable
ls -lo /etc/rc.conf                 # посмотреть флаги

# Аудит
service auditd start
praudit /var/audit/current          # читать аудит-лог
auditreduce -u root | praudit       # действия root

# Проверка целостности
mtree -c -K sha256 -p /etc > /root/etc.mtree   # baseline
mtree -f /root/etc.mtree -p /etc               # проверка изменений
freebsd-update IDS                              # верификация base system

# Blocklistd (защита от брутфорса, base system); до 15.0 назывался blacklistd
sysrc blocklistd_enable=YES
# В /etc/ssh/sshd_config: UseBlocklist yes

Hardening sysctl (минимальный набор)

# /etc/sysctl.conf
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
security.bsd.see_jail_proc=0
security.bsd.unprivileged_read_msgbuf=0
security.bsd.unprivileged_proc_debug=0
kern.elf64.aslr.enable=1
kern.elf64.aslr.pie_enable=1
kern.randompid=1
kern.coredump=0

📖 Статьи: безопасность, sysctl и ядро


Обновление системы

# Patch-level (рутина)
freebsd-update fetch
freebsd-update install
# Ребут если обновлено ядро

# Minor upgrade (15.0 → 15.1)
bectl create before-15.1            # бэкап на ZFS
freebsd-update fetch install        # сначала пропатчить текущую!
freebsd-update -r 15.1-RELEASE upgrade
freebsd-update install              # 1-й: ядро
reboot
freebsd-update install              # 2-й: userland
pkg upgrade

# Major upgrade (14.x → 15.x)
bectl create before-15.0
freebsd-update fetch install
freebsd-update -r 15.0-RELEASE upgrade
freebsd-update install && reboot    # 1-й: ядро
freebsd-update install              # 2-й: userland
freebsd-update install              # 3-й: удаление старых libs
pkg-static install -f pkg && pkg upgrade -f   # пересборка ВСЕХ пакетов

# Обновление jail'ов
freebsd-update -b /usr/local/jails/<name> fetch install

# Если система установлена пакетами базы (pkgbase, с 15.0)
pkg upgrade -r FreeBSD-base

# Пакеты
pkg update && pkg upgrade
pkg upgrade -n                      # dry run
pkg audit -F                        # проверка уязвимостей

📖 Статья: обновление системы


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

# Быстрый обзор
top                                 # процессы, CPU, RAM
top -o res                          # сортировка по памяти
top -P                              # загрузка по ядрам
vmstat 1                            # CPU, RAM, swap, I/O (каждую сек)
systat -vmstat 2                    # интерактивный монитор

# CPU
ps aux --sort=-%cpu | head          # топ по CPU

# Память
vmstat -s                           # подробная статистика VM
swapinfo -h                         # swap
sysctl kstat.zfs.misc.arcstats.size # размер ZFS ARC
systat -zarc 2                      # ARC интерактивно

# Диск
iostat -x 2                         # I/O по дискам
gstat                               # GEOM I/O (интерактивно)
zpool iostat -v 2                   # I/O по ZFS vdev

# Сеть
netstat -i                          # ошибки/дропы интерфейсов
netstat -s | grep retransmit        # TCP ретрансмиссии
netstat -m                          # mbuf (сетевые буферы)
systat -ifstat 2                    # throughput интерфейсов

# Процессы
truss -p <PID>                      # системные вызовы (= strace)
truss -f command                    # трассировка с дочерними
procstat -f <PID>                   # открытые файлы
procstat -k <PID>                   # стек ядра (на чём заблокирован)
kill -INFO <PID>                    # запросить прогресс (Ctrl+T)
fstat -p <PID>                      # файловые дескрипторы

# DTrace
kldload dtraceall                   # вручную; с 10.0 dtrace(1) делает это сам
dtrace -n 'syscall:::entry { @[execname] = count(); }'         # кто делает syscall'ы
dtrace -n 'syscall::open*:entry { printf("%s %s", execname, copyinstr(arg0)); }'  # что открывается

# Логи
tail -f /var/log/messages           # следить за логами
dmesg | tail                        # последние сообщения ядра
grep -i error /var/log/messages     # искать ошибки

# "Система тормозит" — алгоритм
# 1. top → CPU idle≈0? → кто ест CPU
# 2. vmstat 1 → pi/po≠0? → свопит, проверить RAM/ARC
# 3. iostat -x 2 → %b≈100? → I/O bottleneck
# 4. netstat -s → retransmits растут? → сетевые потери
# 5. dmesg → hardware errors?

📖 Статья: мониторинг и отладка


sysctl: ключевые переменные

sysctl -a                           # все переменные (5000+)
sysctl -d <var>                     # описание переменной
sysctl <var>=<value>                # установить (до ребута)
# Персистентно: /etc/sysctl.conf (runtime) или /boot/loader.conf (boot-time)

# Сеть
kern.ipc.somaxconn=4096             # listen queue (дефолт 128)
net.inet.ip.forwarding=1            # маршрутизация
net.inet.tcp.fast_finwait2_recycle=1

# Ресурсы
kern.maxfiles=200000
kern.maxfilesperproc=100000

# ZFS (в /boot/loader.conf)
vfs.zfs.arc_max="1073741824"        # 1GB — ограничить ARC на VPS

📖 Статья: sysctl и ядро


Файловая система: ключевые каталоги

/etc/                  конфигурация системы
/etc/rc.conf           главный конфиг сервисов
/etc/pf.conf           firewall
/etc/ssh/sshd_config   SSH-сервер
/boot/loader.conf      tunables загрузчика
/usr/local/            сторонний софт (pkg/порты)
/usr/local/etc/        конфигурация стороннего софта
/usr/ports/            дерево портов
/usr/src/              исходники системы
/var/log/              логи
/var/db/pkg/           база пакетов

📖 Статья: файловая иерархия


Карта статей

  1. Файловая иерархия — FHS vs FreeBSD, base system и /usr/local
  2. rc-система — init, rc.conf, sysrc, управление сервисами
  3. Сеть — ifconfig, маршрутизация, PF firewall
  4. pkg и Ports — бинарные пакеты, дерево портов, poudriere
  5. sysctl и ядро — sysctl, loader.conf, сборка ядра, securelevel
  6. Jails — контейнеризация, VNET, типы jail'ов
  7. Безопасность — SSH, hardening, MAC, аудит
  8. ZFS — пулы, датасеты, снепшоты, boot environments
  9. Обновление системы — patches, minor/major upgrade
  10. Мониторинг и отладка — top, vmstat, DTrace
  11. bhyve — виртуализация после jails: virtio, zvol, nmdm, vm-bhyve

Связанные заметки

Из библиотеки института уносят только знания. Читателей здесь не считают: посещение не регистрируется, отметок в издании не остаётся, счётчиков нет ни у одного издания фонда.

Издание пополняется и пересверяется. Текст доступен на условиях CC BY-SA 4.0 — унесённое можно передавать дальше на тех же условиях.