Полезные команды терминала

Продвинутые команды: 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 — можно убить не тот процесс
  • Путать > и >> при записи в файл

Практика

  1. Найдите все .js файлы в проекте через find
  2. Найдите все TODO-комментарии через grep -rn "TODO" src/
  3. Сделайте GET-запрос к публичному API через curl
  4. Создайте архив проекта через tar
  5. Добавьте путь в $PATH и проверьте через which
  6. Найдите процесс на порту 3000 и завершите его

Связанные темы

Ресурсы