Зачем знать CLI в эпоху GUI
Когда сервер упал в 3 ночи, у вас нет времени искать GUI-инструменты. Terminal — единственный инструмент, который всегда работает. Эти 10 команд я использую каждую неделю уже 10 лет, и они буквально спасали ситуации.
Команды
1. strace — следим за системными вызовами
Когда приложение зависает и вы не знаете почему, strace покажет какие системные вызовы оно делает прямо сейчас.
bash# Отслеживаем системные вызовы процесса по PID
strace -p 1234 -e trace=network,file
# Запускаем программу и смотрим все вызовы с временными метками
strace -tt -T ./myapp
# Только открытие файлов — найти что приложение читает
strace -e openat ls /tmp 2>&1 | grep -v ENOENT
2. awk — швейцарский нож для текста
Мощнее чем grep и cut вместе взятые. Незаменим для обработки логов и вывода команд.
bash# Сумма чисел в третьей колонке
awk '{sum += $3} END {print sum}' access.log
# Вывести строки где 4-я колонка > 1000 (медленные запросы)
awk '$4 > 1000 {print $0}' query.log
# Посчитать уникальные IP с количеством запросов
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20
3. ss — замена netstat
ss быстрее netstat и предоставляет больше информации о сокетах и соединениях.
bash# Все TCP соединения с именами процессов
ss -tulnp
# Соединения на порту 5432 (PostgreSQL)
ss -tnp sport = :5432
# Показать established соединения с таймерами
ss -to state established
4. jq — парсинг JSON в терминале
Если вы работаете с API или читаете JSON-логи, jq — must-have.
bash# Получить все поля "error" из JSON-лога
cat app.log | jq -r 'select(.level=="error") | .message'
# Форматировать JSON от API
curl -s https://api.example.com/data | jq '.'
# Извлечь конкретные поля
curl -s https://api.github.com/users/torvalds | jq '{name, company, blog}'
5. tmux — мультиплексор терминала
SSH-сессии падают. С tmux ваши процессы продолжат работать. Это спасало меня при долгих деплоях не раз.
bash# Создать именованную сессию
tmux new -s deploy
# Отключиться (процессы остаются)
Ctrl+B, D
# Подключиться обратно
tmux attach -t deploy
# Разделить окно горизонтально
Ctrl+B, %
6. lsof — кто держит файл или порт
bash# Кто использует порт 8080
lsof -i :8080
# Какие файлы открыты процессом
lsof -p 1234
# Найти удалённые файлы, которые ещё занимают место
lsof | grep deleted
7. watch — периодическое выполнение команды
bash# Обновлять каждые 2 секунды, подсвечивать изменения
watch -n 2 -d 'docker stats --no-stream'
# Мониторинг очереди задач
watch -n 5 'redis-cli llen myqueue'
8. pv — прогресс-бар для пайпов
bash# Дамп БД с прогресс-баром
pg_dump mydb | pv | gzip > backup.sql.gz
# Копирование с прогрессом
pv bigfile.tar.gz | ssh user@remote 'cat > bigfile.tar.gz'
9. xargs — параллельное выполнение
bash# Параллельное сжатие файлов (4 потока)
find . -name "*.log" | xargs -P 4 -I{} gzip {}
# Удалить файлы старше 30 дней
find /var/log -mtime +30 | xargs rm -f
10. curl с флагами для отладки
Большинство используют curl примитивно. Вот что он реально умеет:
bash# Показать время каждого этапа запроса
curl -w "\nDNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" \
-o /dev/null -s https://example.com
# Следовать редиректам, показать заголовки
curl -Lv https://example.com 2>&1 | grep -E "^[<>]"
# POST с JSON и Bearer-токеном
curl -X POST https://api.example.com/data \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"key": "value"}'
Добавьте в ~/.bashrc алиасы для часто используемых команд. Это экономит секунды, которые складываются в часы за год.
Добавлю
fzf— fuzzy finder. Меняет отношение к истории команд.Ctrl+Rс fzf — это уже не то же самое, что без него.Про
tmux— абсолютно согласен. На продакшн-серверах это первое что устанавливаю. Добавлю к немуtmux-resurrect— плагин для восстановления сессий после перезагрузки сервера.Не хватает
htop/btopдля мониторинга ресурсов,ncduдля анализа диска иmtrдля диагностики сети. Но из тех что в списке — все топ.pv— недооценённая команда. Когда заливаешь дамп на 50 ГБ и не знаешь сколько ещё ждать, прогресс-бар очень успокаивает 😄