Полезные команды терминала
Продвинутые команды: grep, find, curl, ssh, tar, переменные окружения и PATH
Зачем нужно
- Искать текст и файлы мгновенно
- Скачивать файлы и тестировать API
- Работать с удалёнными серверами
- Управлять окружением и архивами
Где используется
- Поиск по логам и коду
- Тестирование API без Postman
- Деплой и администрирование серверов
- Настройка среды разработки
Предпосылки
Поиск
grep — поиск текста в файлах
# Найти строку в файле
grep "error" log.txt
# Рекурсивно по всем файлам
grep -r "TODO" src/
# Игнорировать регистр
grep -i "error" log.txt
# Показать номера строк
grep -n "function" app.js
# Показать контекст (3 строки до и после)
grep -C 3 "error" log.txt
# Инвертировать (строки БЕЗ паттерна)
grep -v "debug" log.txt
# Считать совпадения
grep -c "import" src/index.js
# Только имена файлов
grep -rl "deprecated" src/
# Регулярные выражения
grep -E "error|warning" log.txt
grep -E "^import" app.js # строки начинающиеся с import
grep -E "port=[0-9]+" config.txt # port=число
# Исключить папки
grep -r "TODO" --exclude-dir=node_modules src/
find — поиск файлов
# Найти по имени
find . -name "*.js"
# Игнорировать регистр
find . -iname "readme*"
# Найти папки
find . -type d -name "test"
# Найти файлы (не папки)
find . -type f -name "*.css"
# По размеру
find . -size +10M # больше 10 МБ
find . -size -1k # меньше 1 КБ
# По дате изменения
find . -mtime -7 # изменённые за последние 7 дней
find . -mmin -30 # за последние 30 минут
# Исключить папки
find . -name "*.js" -not -path "*/node_modules/*"
# Выполнить команду для найденных
find . -name "*.tmp" -exec rm {} \;
find . -name "*.js" -exec grep -l "TODO" {} \;
Сетевые команды
curl — HTTP-запросы
# GET-запрос
curl https://api.example.com/users
# С заголовками ответа
curl -i https://api.example.com/users
# Только заголовки
curl -I https://api.example.com
# POST-запрос с JSON
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Ivan", "email": "ivan@mail.com"}'
# PUT-запрос
curl -X PUT https://api.example.com/users/1 \
-H "Content-Type: application/json" \
-d '{"name": "Updated Name"}'
# DELETE-запрос
curl -X DELETE https://api.example.com/users/1
# С авторизацией (Bearer token)
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.example.com/protected
# Скачать файл
curl -O https://example.com/file.zip
# Скачать с новым именем
curl -o myfile.zip https://example.com/file.zip
# Следовать редиректам
curl -L https://short.url/abc
# Тихий режим + вывод в файл
curl -s https://api.example.com/data > data.json
# Красивый вывод JSON (через pipe)
curl -s https://api.example.com/data | python3 -m json.tool
# или (если установлен jq)
curl -s https://api.example.com/data | jq '.'
wget — скачивание файлов
# Скачать файл
wget https://example.com/file.zip
# Скачать с новым именем
wget -O myfile.zip https://example.com/file.zip
# Скачать в фоне
wget -b https://example.com/large-file.zip
Работа с серверами
ssh — подключение к серверу
# Базовое подключение
ssh user@server.com
# С указанием порта
ssh -p 2222 user@server.com
# С указанием ключа
ssh -i ~/.ssh/my_key user@server.com
# Выполнить команду удалённо
ssh user@server.com "ls -la /var/www"
# Копирование файлов (scp)
scp file.txt user@server.com:/path/to/destination/
scp user@server.com:/remote/file.txt ./local/
scp -r folder/ user@server.com:/remote/ # папка
Архивы
tar — работа с архивами
# Создать архив .tar.gz
tar -czf archive.tar.gz folder/
# c=create, z=gzip, f=file
# Распаковать
tar -xzf archive.tar.gz
# x=extract
# Посмотреть содержимое без распаковки
tar -tzf archive.tar.gz
# Распаковать в конкретную папку
tar -xzf archive.tar.gz -C /target/folder/
zip
# Создать zip
zip -r archive.zip folder/
# Распаковать
unzip archive.zip
# Распаковать в папку
unzip archive.zip -d /target/folder/
Переменные окружения
Просмотр и установка
# Посмотреть все
env
printenv
# Посмотреть конкретную
echo $HOME
echo $PATH
echo $USER
echo $SHELL
# Установить для текущей сессии
export NODE_ENV=production
export PORT=3000
# Установить для одной команды
NODE_ENV=test npm test
PORT=4000 node server.js
PATH — пути к исполняемым файлам
# Посмотреть PATH
echo $PATH
# /usr/local/bin:/usr/bin:/bin
# Добавить путь (временно)
export PATH="$PATH:/new/path/bin"
# Добавить навсегда — в ~/.bashrc или ~/.zshrc
echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrc
source ~/.bashrc
# Найти где находится программа
which node
# /usr/local/bin/node
whereis git
# git: /usr/bin/git /usr/share/man/man1/git.1.gz
Файл .env
# .env файл
DATABASE_URL=postgresql://localhost:5432/mydb
API_KEY=abc123
PORT=3000
# Загрузить переменные из .env (простой способ)
export $(cat .env | xargs)
# В Node.js — используйте пакет dotenv
Управление процессами
# Запуск в фоне
node server.js &
# Список процессов
ps aux | grep node
# Убить процесс по PID
kill 12345
# Убить принудительно
kill -9 12345
# Найти процесс на порту
lsof -i :3000 # macOS/Linux
netstat -ano | findstr :3000 # Windows
# Занятость памяти и CPU
top
htop # улучшенный top (нужно установить)
Другие полезные команды
# Размер папки
du -sh node_modules/
# 250M node_modules/
# Свободное место на диске
df -h
# Количество строк/слов/символов
wc -l file.txt # строки
wc -w file.txt # слова
# Сортировка
sort file.txt
sort -r file.txt # обратная
sort -n file.txt # числовая
# Уникальные строки
sort file.txt | uniq
sort file.txt | uniq -c # с подсчётом
# Замена текста
sed 's/old/new/g' file.txt # вывести с заменой
sed -i 's/old/new/g' file.txt # заменить в файле
# Вырезать колонки
cut -d',' -f1,3 data.csv # 1-я и 3-я колонка CSV
# Текущая дата
date
date +"%Y-%m-%d %H:%M:%S"
Частые ошибки
- grep без
--exclude-dir— поиск поnode_modulesзанимает вечность - curl без
-L— не следует редиректам, получаете пустой ответ - Забыть
source ~/.bashrc— изменения PATH не применяются killбез проверки PID — можно убить не тот процесс- Путать
>и>>при записи в файл
Практика
- Найдите все
.jsфайлы в проекте черезfind - Найдите все TODO-комментарии через
grep -rn "TODO" src/ - Сделайте GET-запрос к публичному API через
curl - Создайте архив проекта через
tar - Добавьте путь в
$PATHи проверьте черезwhich - Найдите процесс на порту 3000 и завершите его
Связанные темы
Ресурсы
- tldr pages — упрощённый man для команд
- explainshell.com — разбор любой команды
- The Art of Command Line — справочник (русский)
- Cheat.sh — шпаргалки прямо из терминала