30 утилит Linux для админа: аудит инструментов ДатаХост

Задача: стандартизация рабочего окружения

Хостинговая компания «ДатаХост» управляла парком из 200 серверов: 120 выделенных серверов для клиентов, 50 VPS-нод, 30 серверов внутренней инфраструктуры. Команда из 12 системных администраторов работала в три смены, и каждый использовал свой набор инструментов.

Клиент обратился к нам в itfresh.ru с конкретной проблемой: «Когда дежурный берёт сервер, который настраивал другой человек, он тратит 30 минут, чтобы разобраться, какие утилиты стоят и как ими пользоваться». Плюс половина команды работала стандартными инструментами из 2005 года — top, find, grep, du — тратя время на задачи, которые современные альтернативы решают в 3-5 раз быстрее.

Мы провели аудит рабочих процессов и составили стандартный набор из 30 утилит, разбитых на 7 категорий. Затем написали Ansible-роль для автоматической установки на все серверы и провели трёхдневный тренинг.

Мониторинг системы: видеть всё в реальном времени

Первая категория — замена стандартных средств мониторинга.

htop — интерактивный просмотр процессов. Все знали про него, но мало кто использовал возможности на полную:

# Установка
sudo apt install htop   # Debian/Ubuntu
sudo dnf install htop   # AlmaLinux/RHEL

# Полезные горячие клавиши:
# F5 — древовидный режим (видно, кто породил процесс)
# F6 — сортировка по столбцу
# F4 — фильтр по имени процесса
# u  — фильтр по пользователю
# H  — скрыть/показать потоки ядра

glances — комплексный мониторинг в одном окне. Показывает CPU, RAM, диск, сеть, процессы, контейнеры Docker, температуру — всё сразу:

# Установка
pip3 install glances[all]

# Запуск в веб-режиме — мониторинг через браузер
glances -w -p 61208

# Запуск с выводом для Docker-контейнеров
glances --enable-plugin docker

bottom (btm) — TUI-монитор с графиками прямо в терминале. Особенно полезен для быстрой визуальной оценки нагрузки за последние 5-10 минут:

# Установка
curl -LO https://github.com/ClementTsang/bottom/releases/latest/download/bottom_amd64.deb
sudo dpkg -i bottom_amd64.deb

# Запуск
btm

bandwhich — мониторинг сетевого трафика с разбивкой по процессам. Незаменим при расследовании «кто съел весь канал»:

# Установка
cargo install bandwhich
# или
sudo snap install bandwhich

# Запуск (требует root для перехвата пакетов)
sudo bandwhich

В «ДатаХост» был случай: клиент жаловался на медленную сеть. Стандартными средствами инженер потратил бы 20 минут на ss, iftop, nethogs. С bandwhich за 10 секунд увидели, что backup-скрипт забил канал 800 Мбит/с.

Работа с файлами: быстро искать, удобно просматривать

Вторая категория — инструменты для повседневной работы с файловой системой.

bat — замена cat с подсветкой синтаксиса, нумерацией строк и интеграцией с Git (показывает изменённые строки):

# Установка
sudo apt install bat   # В Ubuntu пакет называется batcat
# Создаём алиас
echo 'alias bat="batcat"' >> ~/.bashrc

# Просмотр конфига с подсветкой
bat /etc/nginx/nginx.conf

# Вывод только изменённых строк (Git diff в контексте файла)
bat --diff /etc/nginx/nginx.conf

fd — быстрая замена find. Работает в 5-8 раз быстрее, синтаксис интуитивный, автоматически игнорирует .git и скрытые файлы:

# Установка
sudo apt install fd-find
echo 'alias fd="fdfind"' >> ~/.bashrc

# Найти все .conf файлы
fd '.conf$'

# Найти файлы больше 100MB
fd --size +100m

# Найти и удалить все .log старше 30 дней
fd '.log$' /var/log --changed-before '30d' --exec rm {}

# Найти файлы и передать в другую команду
fd '.yml$' /etc/ansible | xargs bat

ripgrep (rg) — поиск по содержимому файлов. В 10-30 раз быстрее grep -r, автоматически пропускает бинарные файлы и .gitignore:

# Установка
sudo apt install ripgrep

# Найти строку в конфигах
rg 'listen 443' /etc/nginx/

# Поиск IP-адреса по всем логам
rg '192\.168\.1\.100' /var/log/ --glob '*.log'

# Поиск с контекстом (2 строки до и после)
rg -C 2 'error|critical' /var/log/syslog

# Подсчёт совпадений по файлам
rg -c 'Failed password' /var/log/auth.log

ncdu — интерактивный анализ дискового пространства. Показывает дерево каталогов с размерами, позволяет удалять прямо из интерфейса:

# Установка
sudo apt install ncdu

# Анализ корневого раздела
sudo ncdu /

# Экспорт результата в файл (для быстрого повторного открытия)
sudo ncdu -o /tmp/disk_scan.json /
ncdu -f /tmp/disk_scan.json

duf — красивая замена df с цветной таблицей и процентным заполнением:

# Установка
sudo apt install duf

# Показать все диски
duf

# Только локальные файловые системы
duf --only local

Терминальная продуктивность: tmux, mosh, fzf

Третья категория — инструменты, которые меняют сам процесс работы в терминале.

tmux — мультиплексор терминала. 8 из 12 инженеров «ДатаХост» уже использовали его, но неэффективно. Мы стандартизировали конфигурацию:

# ~/.tmux.conf — стандартный конфиг для всех инженеров
# Меняем префикс на Ctrl+a (привычнее для бывших пользователей screen)
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# Разделение окна
bind | split-window -h -c '#{pane_current_path}'
bind - split-window -v -c '#{pane_current_path}'

# Навигация между панелями через Alt+стрелки
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Мышь для скроллинга и выделения
set -g mouse on

# 50000 строк истории
set -g history-limit 50000

# Нумерация окон с 1
set -g base-index 1
setw -g pane-base-index 1

# Статус-бар с полезной информацией
set -g status-right '#H | %Y-%m-%d %H:%M'

mosh — мобильный shell. При работе с серверами через нестабильное соединение (мобильный интернет, WiFi) SSH рвётся при смене IP или потере пакетов. Mosh работает поверх UDP и переживает любые разрывы:

# Установка на сервере и клиенте
sudo apt install mosh

# Подключение (mosh сам установит SSH-туннель и перейдёт на UDP)
mosh user@server.example.com

# С указанием порта SSH
mosh --ssh="ssh -p 2222" user@server.example.com

fzf — fuzzy finder. Это инструмент, который больше всех удивил команду клиента. Интерактивный поиск по любым спискам:

# Установка
sudo apt install fzf

# Интеграция с bash
echo 'source /usr/share/doc/fzf/examples/key-bindings.bash' >> ~/.bashrc

# Ctrl+R — fuzzy-поиск по истории команд (вместо стандартного reverse-search)
# Ctrl+T — вставить путь к файлу с интерактивным поиском
# Alt+C — cd в директорию с fuzzy-поиском

# Комбинация с другими инструментами:
# Открыть файл в vim с fuzzy-поиском
vim $(fzf)

# Убить процесс интерактивно
ps aux | fzf | awk '{print $2}' | xargs kill

# SSH на сервер из списка
ssh $(grep 'Host ' ~/.ssh/config | awk '{print $2}' | fzf)

После внедрения fzf среднее время поиска нужного файла или команды в истории сократилось с 15-20 секунд до 3-4 секунд. На 200 серверах за смену это экономит около часа рабочего времени.

Контейнеры: lazydocker, ctop, dive

70 из 200 серверов «ДатаХост» использовали Docker. Для работы с контейнерами мы добавили три инструмента.

lazydocker — полноценный TUI для Docker. Заменяет десятки команд docker ps, docker logs, docker stats одним интерфейсом:

# Установка
curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash

# Запуск
lazydocker

# Что видим в интерфейсе:
# - Список контейнеров с цветовым статусом
# - Логи выбранного контейнера в реальном времени
# - CPU/RAM/Network графики
# - Быстрые действия: restart, stop, remove, exec shell
# - Docker-compose сервисы с зависимостями

ctop — top для контейнеров. Минималистичный мониторинг всех запущенных контейнеров:

# Установка
sudo wget https://github.com/bcicen/ctop/releases/latest/download/ctop-linux-amd64 \
  -O /usr/local/bin/ctop && sudo chmod +x /usr/local/bin/ctop

# Запуск
ctop

# Сортировка по потреблению CPU
ctop -s cpu

# Фильтр по имени
ctop -f "nginx"

dive — анализ слоёв Docker-образа. Показывает, что именно добавляет каждый слой, и помогает оптимизировать размер:

# Установка
wget https://github.com/wagoodman/dive/releases/latest/download/dive_linux_amd64.deb
sudo dpkg -i dive_linux_amd64.deb

# Анализ образа
dive nginx:latest

# CI-режим — автоматическая проверка на раздутые образы
CI=true dive myapp:latest --highestUserWastedPercent 0.1

С помощью dive мы обнаружили, что один из клиентских образов весил 1.8 GB из-за того, что в слое RUN apt-get update остался кеш пакетов на 600 MB. После оптимизации образ уменьшился до 340 MB.

HTTP-клиенты и работа с данными

Пятая категория — инструменты для работы с API и структурированными данными.

HTTPie — человекочитаемый HTTP-клиент. Вместо запутанных команд curl с десятком флагов — простой синтаксис:

# Установка
sudo apt install httpie

# GET-запрос с красивым выводом
http https://api.example.com/status

# POST с JSON (автоматически ставит Content-Type: application/json)
http POST https://api.example.com/users name="John" email="john@example.com"

# С авторизацией
http -a admin:password GET https://api.example.com/admin/users

# Загрузка файла с прогресс-баром
http --download https://example.com/large-file.tar.gz

# Сохранение сессии (cookies, auth)
http --session=myapi POST https://api.example.com/login username=admin password=secret
http --session=myapi GET https://api.example.com/dashboard

jq — процессор JSON из командной строки. Незаменим при работе с API и конфигурациями:

# Установка
sudo apt install jq

# Красивый вывод JSON
curl -s https://api.example.com/servers | jq .

# Извлечение конкретных полей
curl -s https://api.example.com/servers | jq '.[] | {name: .hostname, ip: .ip_address}'

# Фильтрация
curl -s https://api.example.com/servers | jq '[.[] | select(.status == "active")]'

# Подсчёт
curl -s https://api.example.com/servers | jq '[.[] | select(.cpu_usage > 80)] | length'

# Преобразование в CSV
curl -s https://api.example.com/servers | jq -r '.[] | [.hostname, .ip, .status] | @csv'

yq — аналог jq для YAML. Критически важен при работе с Kubernetes, Ansible, docker-compose:

# Установка
sudo wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 \
  -O /usr/local/bin/yq && sudo chmod +x /usr/local/bin/yq

# Чтение значения из YAML
yq '.services.nginx.image' docker-compose.yml

# Изменение значения
yq -i '.services.nginx.image = "nginx:1.25"' docker-compose.yml

# Конвертация YAML → JSON
yq -o json docker-compose.yml

Сетевая диагностика и безопасность

Шестая категория — инструменты для диагностики сети и аудита безопасности.

mtr — комбинация traceroute и ping. Показывает маршрут пакетов и потери на каждом хопе в реальном времени:

# Установка
sudo apt install mtr-tiny

# Интерактивный режим
mtr example.com

# Отчёт (10 пакетов и выход)
mtr -r -c 10 example.com

# TCP вместо ICMP (если ICMP блокируется)
mtr -T -P 443 example.com

dog — красивый DNS-клиент с поддержкой DNS-over-HTTPS и DNS-over-TLS:

# Установка
sudo apt install dog-dns

# Обычный запрос
dog example.com A

# Через DNS-over-HTTPS
dog example.com A --https @https://dns.google/dns-query

# Все записи
dog example.com ANY

termshark — анализ сетевого трафика в терминале (TUI-версия Wireshark):

# Установка
sudo apt install termshark

# Захват трафика на интерфейсе
sudo termshark -i eth0

# Анализ сохранённого pcap-файла
termshark -r capture.pcap

# С фильтром
sudo termshark -i eth0 -f "port 443"

gitleaks — сканер секретов в Git-репозиториях. Находит пароли, API-ключи, приватные ключи, случайно закоммиченные в код:

# Установка
sudo apt install gitleaks

# Сканирование репозитория
gitleaks detect --source /path/to/repo

# Проверка только новых коммитов (для CI/CD)
gitleaks protect --staged

# Отчёт в JSON
gitleaks detect --source . --report-format json --report-path leaks.json

При аудите репозиториев «ДатаХост» gitleaks нашёл 23 захардкоженных пароля и 8 приватных SSH-ключей. Все были немедленно отозваны и заменены.

Внедрение и результаты

Для автоматической установки всех утилит мы написали Ansible-роль admin-toolkit:

# roles/admin-toolkit/tasks/main.yml
---
- name: Install packages from system repos
  ansible.builtin.package:
    name:
      - htop
      - tmux
      - mosh
      - jq
      - ncdu
      - mtr-tiny
      - ripgrep
    state: present

- name: Install bat (Ubuntu)
  ansible.builtin.apt:
    name: bat
    state: present
  when: ansible_distribution == "Ubuntu"

- name: Install fd-find
  ansible.builtin.apt:
    name: fd-find
    state: present
  when: ansible_os_family == "Debian"

- name: Install fzf
  ansible.builtin.apt:
    name: fzf
    state: present

- name: Download and install ctop
  ansible.builtin.get_url:
    url: "https://github.com/bcicen/ctop/releases/latest/download/ctop-linux-amd64"
    dest: /usr/local/bin/ctop
    mode: '0755'
  when: docker_installed | default(false)

- name: Deploy standard tmux config
  ansible.builtin.template:
    src: tmux.conf.j2
    dest: /etc/tmux.conf
    mode: '0644'

- name: Deploy standard bashrc additions
  ansible.builtin.template:
    src: bashrc_toolkit.j2
    dest: /etc/profile.d/toolkit.sh
    mode: '0644'

Роль деплоилась на все 200 серверов через AWX за 18 минут. Результаты через месяц:

МетрикаДоПосле
Среднее время диагностики инцидента25 минут10 минут
Время поиска файла/лога на сервере15-20 секунд3-4 секунды
Использование одинакового инструментария30%95%
Удовлетворённость инженеров (опрос)6.2/108.7/10

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

Если вашей команде нужна помощь со стандартизацией инструментария — специалисты itfresh.ru проведут аудит и подберут оптимальный набор под ваш стек.

Часто задаваемые вопросы

Все утилиты из нашего списка — open-source проекты с тысячами звёзд на GitHub и активным сообществом. Устанавливайте из официальных репозиториев дистрибутива, а не из случайных скриптов. Для продакшена рекомендуем скачивать бинарники один раз, проверять чексуммы и распространять через свой репозиторий пакетов.
Да, но аккуратно. Мы рекомендуем создавать алиасы только для интерактивной работы (в .bashrc), но не переопределять утилиты в скриптах. Например, alias cat=bat удобен в терминале, но может сломать скрипт, который парсит вывод cat.
Топ-5 для немедленного эффекта: fzf (fuzzy search по истории и файлам), ripgrep (быстрый поиск по содержимому), bat (подсветка синтаксиса), ncdu (анализ диска), htop (мониторинг процессов). Установка занимает 2 минуты, эффект ощущается сразу.
Большинство доступны в репозиториях Ubuntu 22+, Debian 12+, AlmaLinux 9+, Fedora 38+. Для старых дистрибутивов можно скачать статические бинарники с GitHub. Все утилиты из списка работают на x86_64 и ARM64.
Мы рекомендуем формат «утилита дня»: каждый день в рабочем чате публикуется одна команда с примером использования. Через месяц команда освоит весь набор естественным путём, без формальных тренингов.

Нужна помощь с проектом?

Специалисты АйТи Фреш помогут с архитектурой, DevOps, безопасностью и разработкой — 15+ лет опыта

📞 Связаться с нами
#linux утилиты#системное администрирование#htop#ncdu#ripgrep#fzf#lazydocker#tmux
Комментарии 0

Оставить комментарий

загрузка...