Каждый раз, когда вы заходите по SSH на Linux VPS после того как что-то пошло не так, вы тянетесь примерно к одной и той же дюжине команд. Эта статья — компактный копи-пейст-чеклист этих команд: что они показывают, когда применять и как поставить то, чего ещё нет. Команды установки сгруппированы во вкладки по семействам дистрибутивов (Ubuntu/Debian сверху по умолчанию, потом RHEL/Rocky/AlmaLinux/CentOS), чтобы не нужно было помнить, какой пакетный менеджер где живёт.
1. Точно ли вы на той машине?
Звучит глупо, но самый частый Sev-1 — это запуск разрушительной команды на не том сервере. Подтвердите, прежде чем действовать:
hostname # короткое имя
hostname -f # FQDN
hostnamectl # имя + ОС + ядро + виртуализация одной командой
ip -4 addr # какие IP у этой машины
whoami; id # кто я и в каких группах
who; w # кто ещё залогинен прямо сейчас
last | head -10 # недавние логины (отлавливает неожиданные сессии)2. Информация о системе / ОС
cat /etc/os-release # дистрибутив + версия
uname -a # ядро + архитектура
uptime # аптайм + load average (1, 5, 15 мин)
lsb_release -a 2>/dev/null # может потребоваться: apt install lsb-release
lscpu # модель CPU, сокеты, ядра, потоки
nproc # количество логических CPU
free -h # RAM + swap, по-человечески
lsblk # блочные устройства и точки монтирования
df -h # использование файловых системСравнивайте load average из `uptime` с `nproc`. Load 4.0 на 4-ядерной машине = полностью занят, но не перегружен; load 12 на 4-ядерной = серьёзная очередь, что-то ждёт CPU.
3. CPU и память в реальном времени
`top` есть везде; `htop` — это то, что вам действительно нужно. Цветной интерактивный вывод, сортируемые колонки, дерево процессов.
sudo apt update && sudo apt install -y htophtop # интерактивный просмотр процессов (q — выйти, F6 — сортировка)
top -c # встроенная альтернатива, не нужно ставить
free -h # быстрый снимок RAM
vmstat 1 5 # 5 семплов CPU/IO/swap с интервалом 1 сек
ps auxf | head -30 # дерево процессов, первые 30
ps -eo pid,user,rss,%mem,%cpu,cmd --sort=-rss | head -10 # топ-10 по RAMЕсли что-то долбит машину, `vmstat 1 5` покажет, в чём упёрлось: CPU (колонки `us`/`sy` высоки), IO (`wa` высок) или swap-трэшинг (`si`/`so` ненулевые). Трёх семплов обычно хватает, чтобы увидеть картину.
4. Диск — место, IO, здоровье
df -h # свободное место (по-человечески)
df -i # свободные inode (отдельно от байтов!)
lsblk -f # блочные устройства + ФС + UUID
sudo du -sh /var/log/* | sort -h # что съедает /var/log
sudo du -sh /* 2>/dev/null | sort -h # разбивка верхнего уровня /
iostat -xz 1 5 # IO диска по секундам (нужен sysstat)
sudo lsof +L1 # удалённые, но открытые файлы (освободят место при kill)Быстрая проверка последовательной скорости диска (без установки):
# Последовательная запись (создаст файл 1 ГиБ в /tmp, потом удалит):
dd if=/dev/zero of=/tmp/diskbench bs=1M count=1024 oflag=direct status=progress
rm /tmp/diskbench
# Последовательное чтение:
sudo hdparm -Tt /dev/sda # cached + uncached read (на Debian/Ubuntu предустановлен)Для нормальных тестов IOPS / смешанной нагрузки ставьте `fio`:
sudo apt install -y fio# 4K random read+write, 30 секунд, 4 джоба (примерно DB-нагрузка):
fio --name=mix --rw=randrw --rwmixread=70 --bs=4k --size=1G \
--numjobs=4 --runtime=30 --time_based --group_reporting --direct=1SMART-данные (на bare-metal; внутри VM обычно недоступны):
sudo apt install -y smartmontoolssudo smartctl -a /dev/sda # полный SMART-отчёт
sudo smartctl -H /dev/sda # только статус здоровья (PASSED / FAILED)5. Сеть — базовая достижимость
Два направления, два вопроса: достучится ли сервер до мира, и достучится ли мир до сервера.
# С сервера наружу:
ping -c 4 8.8.8.8 # IPv4 + RTT до Google DNS
ping -c 4 -6 2606:4700:4700::1111 # IPv6 до Cloudflare
ping -c 4 your-domain.com # DNS + RTT одной командой
curl -I https://www.google.com # HTTPS-достижимость + заголовки# С вашего ноутбука В СТОРОНУ сервера (запускайте на ноутбуке, не на сервере):
ping <server-ip>
curl -v http://<server-ip>:<port>6. Сеть — traceroute и MTR
`traceroute` показывает хопы между вами и точкой назначения один раз. `mtr` гоняет traceroute в цикле и показывает packet loss по каждому хопу в реальном времени — гораздо полезнее для диагностики сетевых проблем.
sudo apt install -y mtr-tiny traceroutetraceroute -n 8.8.8.8 # путь без DNS-резолвинга (быстрее)
mtr 8.8.8.8 # интерактивно (q — выйти)
mtr -rwbzc 100 8.8.8.8 # report mode: 100 пакетов, широкий, ASN+IPВ выводе `mtr` смотрите на колонку Loss%. Loss только на промежуточных хопах при 0% loss в финале = эти роутеры де-приоритизируют ICMP, реальной потери нет. Стабильный loss на финальном хопе или растущий по последним хопам = реальная проблема где-то на пути.
7. Сеть — тесты скорости
Два инструмента, две задачи. `speedtest` (Ookla CLI) меряет до публичного интернета. `iperf3` меряет между двумя своими машинами — полезнее, чтобы понять, где именно узкое место.
Установка Ookla speedtest CLI:
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
sudo apt install -y speedtestspeedtest --servers | head -20 # найти сервер в том же городе
speedtest --server-id=<id-рядом-с-ДЦ> # явный выбор локального сервера
speedtest --format=json | jq '.download.bandwidth' # машинно-читаемоУстановка iperf3 (на обе машины которые тестируете):
sudo apt install -y iperf3# На машине A (сервер):
iperf3 -s
# На машине B (клиент):
iperf3 -c <A-ip> -t 30 # 30-секундный тест
iperf3 -c <A-ip> -P 4 -t 30 # 4 параллельных потока (реалистичнее)
iperf3 -c <A-ip> -R # обратное направление (download)
iperf3 -c <A-ip> -u -b 100M # UDP-тест, целевые 100 Мбит/с(Зачем это вообще нужно и что такое результаты speedtest на самом деле — описано в статье про скорость интернета на VPS.)
8. Сеть — кто слушает, кто к кому подключён
ss -tlnp # все TCP-листенеры + имена процессов
ss -ulnp # все UDP-листенеры
ss -tnp state established # текущие установленные TCP-соединения
ss -s # сводка по сокетам
sudo lsof -iTCP -sTCP:LISTEN -P # альтернативный вид листенеров без резолва
ss -tnp dport = :443 # соединения на удалённый порт 443(Глубокое разбирательство «почему мой порт показывается закрытым извне» — в статье про фаервол и порты.)
9. Сеть — правила фаервола
Несколько слоёв фаервола могут работать одновременно. Проверьте все:
# ufw (по умолчанию на Ubuntu/Debian)
sudo ufw status verbose
# firewalld (по умолчанию на RHEL-семействе)
sudo systemctl is-active firewalld
sudo firewall-cmd --list-all
# Всегда смотрите iptables/nftables напрямую — это то, что реально применяет ядро
sudo iptables -L -n -v
sudo ip6tables -L -n -v
sudo nft list ruleset
# Правила Docker (если есть контейнеры)
sudo iptables -L DOCKER -n -v 2>/dev/null
sudo iptables -L DOCKER-USER -n -v 2>/dev/null10. DNS-запросы
Установка `dig` и компании:
sudo apt install -y dnsutilsdig +short example.com # только ответ
dig example.com A # с полной записью
dig example.com MX +short # почтовые серверы
dig example.com NS +short # авторитативные NS
dig +trace example.com # пройти делегирование от корня
dig @8.8.8.8 example.com # запрос к конкретному резолверу
host -t A example.com # альтернатива
nslookup example.com # альтернатива
getent hosts example.com # резолвер ОС (то, что видят ваши приложения)
resolvectl status # текущее состояние systemd-resolved11. Процессы и сервисы
ps auxf | head -30 # дерево процессов
pstree -p # более чистое дерево
pgrep -a nginx # PID-ы nginx + cmdline
sudo systemctl status nginx # статус сервиса + последние логи
sudo systemctl list-units --type=service --state=running # все запущенные
sudo systemctl --failed # сервисы, которые упали
kill -TERM <pid> # вежливый kill (даём процессу прибраться)
kill -KILL <pid> # жёсткий kill (последняя мера)12. Логи
Современные системы используют `journalctl` (systemd journal). Старые также пишут текстовые логи в `/var/log/`. Путь к текстовому логу различается по дистрибутивам:
sudo tail -F /var/log/syslog # основной системный лог
sudo tail -F /var/log/auth.log # SSH и аутентификация# journalctl работает одинаково на любом современном дистрибутиве:
sudo journalctl -xe # самые свежие записи + объяснения, к концу
sudo journalctl -u nginx --since '1 hour ago'
sudo journalctl -u nginx -f # follow live (как tail -f)
sudo journalctl -k -p err # ошибки уровня ядра
sudo journalctl --disk-usage # сколько места ест journal
sudo dmesg --time-format=iso | tail -50 # ring buffer ядра (драйверы, OOM kill)13. Время и NTP
date # текущее локальное время
timedatectl # статус + часовой пояс + NTP-синхронизация
chronyc tracking 2>/dev/null # если NTP-демон chrony
ntpq -p 2>/dev/null # если NTP-демон ntpd
sudo timedatectl set-timezone Europe/Berlin # смена часового поясаДрейф времени ломает TLS, ломает Kerberos, ломает распределённые БД. Проверьте это, если у вас странные ошибки «certificate not yet valid» или «clock skew».
14. Быстрая health-сводка — один блок для копи-паста
Когда вы заходите по SSH на машину, которую впервые видите, вот что мы обычно вставляем первым делом, чтобы за 30 секунд сориентироваться:
echo '== HOST =='; hostnamectl
echo; echo '== UPTIME / LOAD =='; uptime
echo; echo '== CPU =='; lscpu | grep -E 'Model name|^CPU\(s\)|MHz'
echo; echo '== RAM =='; free -h
echo; echo '== DISK =='; df -h --output=target,size,used,avail,pcent | grep -v tmpfs
echo; echo '== LISTENERS =='; sudo ss -tlnp
echo; echo '== FAILED SERVICES =='; sudo systemctl --failed --no-legend
echo; echo '== LAST 10 LOGINS =='; last -n 10Смежно: если расследование указывает на сеть или порты, отдельные статьи — открытые порты и фаерволы, скорость интернета на VPS, как устроен общий порт 1 Гбит/с в VPS, почему ваш VPS может «показывать» не ту страну.
VPS от€1.99в месяц
Безлимитный трафик, порт 1 Гбит/с и NVMe-хранилище. 12 локаций в Европе и США.