Какие утилиты командной строки в Linux ты используешь для диагностики и устранения неполадок (troubleshooting)?

«Какие утилиты командной строки в Linux ты используешь для диагностики и устранения неполадок (troubleshooting)?» — вопрос из категории Linux, который задают на 26% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для эффективного troubleshooting в Linux-окружении DevOps-инженер должен владеть набором стандартных и специализированных утилит. Вот ключевые из них, которые я использую регулярно.

1. Диагностика сети и подключений

  • ss / netstat: Просмотр сетевых соединений, сокетов, статистики. ss — современная замена netstat.
    # Показать все слушающие TCP-порты и процессы, которые их используют
    ss -tlnp
  • curl / wget: Тестирование HTTP/HTTPS-эндпоинтов, проверка заголовков, таймаутов.
    # Проверить доступность и время ответа эндпоинта здоровья
    curl -o /dev/null -s -w 'HTTP Code: %{http_code}, Time: %{time_total}sn' http://localhost:8080/health
  • dig / nslookup: Диагностика DNS. dig дает более детальный вывод.
    # Получить A-запись и проверить время разрешения
    dig +short A example.com
  • tcpdump: Глубокий анализ сетевого трафика.
    # Перехватить пакеты на интерфейсе eth0, идущие на порт 80
    tcpdump -i eth0 -n 'tcp port 80'
  • nc (netcat): Проверка доступности TCP/UDP портов, создание простых серверов для тестов.
    # Проверить, открыт ли порт 5432 на удаленном хосте
    nc -zv db-host 5432

2. Анализ производительности системы

  • htop / top: Мониторинг использования CPU и памяти процессами в реальном времени.
  • vmstat / mpstat / iostat: Утилиты пакета sysstat для детального анализа загрузки CPU, памяти, дискового ввода/вывода и свопинга.
    # Показать статистику по CPU каждую секунду
    mpstat 1
    # Показать статистику по дискам
    iostat -xz 1
  • free -h: Быстрая проверка использования оперативной памяти и свопа.

3. Работа с процессами и файлами

  • ps: Поиск процессов по различным критериям.
    # Найти PID процесса Java
    ps aux | grep java
  • lsof: Показать все файлы и сетевые соединения, открытые процессом.
    # Узнать, какой процесс использует порт 8080
    lsof -i :8080
  • strace / ltrace: Трассировка системных вызовов и библиотечных вызовов процесса. Незаменимы для отладки "зависших" или падающих процессов.
    # Отследить системные вызовы процесса при его запуске
    strace -f -o trace.log ./my_binary

4. Анализ логов

  • journalctl: Просмотр и фильтрация логов systemd (основной источник системных логов в современных дистрибутивах).
    # Показать логи конкретного сервиса за последний час
    journalctl -u nginx --since "1 hour ago" -f
  • tail, grep, awk, jq: Классическая связка для фильтрации и анализа текстовых и JSON-логов.
    # Искать ошибки в лог-файле и выводить 5 строк контекста
    tail -f /var/log/app/error.log | grep -A5 -B5 "CRITICAL"
    # Анализировать JSON-логи и извлекать конкретные поля
    cat app.log | jq '. | select(.level == "ERROR") | {timestamp, message}'

5. Проверка дискового пространства

  • df -h: Показать свободное место на смонтированных файловых системах.
  • du -sh *: Найти, какие директории занимают больше всего места.

Комбинируя эти утилиты, можно локализовать большинство проблем: от сетевой недоступности и нехватки ресурсов до ошибок в конфигурации приложений.