# Просто список файлов и папок
ls
# Подробный список: размер, дата изменения, права доступа
ls -l
# Показать и скрытые файлы (их имена начинаются с точки)
ls -a
# Отсортировать по размеру (самые большие файлы будут в конце)
ls -lS
# Отсортировать по времени изменения (свежие — сверху)
ls -lt
# Размер файлов показывать в читаемом виде (1K, 234M, 3G)
ls -lh# Хотим быстро посмотреть, какие логи менялись сегодня
ls -lt /var/log/myapp/# Перейти в конкретную папку
cd /var/log
# Подняться на один уровень вверх
cd ..
# Вернуться в домашнюю папку
cd ~
# или просто
cdpwd
# Вывод: /home/user/myproject/logs# Ищем файл с точным именем "app.log"
find /home -name "app.log"
# Ищем все файлы с расширением .log
find /var/log -name "*.log"
# Ищем только обычные файлы (не папки) с именем *.conf
find . -type f -name "*.conf"
# Ищем папки, имя которых начинается на "config"
find . -type d -name "config*"
# Ищем файлы размером больше 100 мегабайт
find /var/log -size +100M
# Ищем файлы, изменённые за последние сутки
find . -mtime -1# Находим все конфиги приложения, в которых упоминается слово "database"
find /etc -name "*.conf" | xargs grep -l "database"
# Ищем логи, изменённые за последний час
find /var/log -mmin -60 -name "*.log"file screenshot.png
# Вывод: PNG image data, 1920 x 1080
file app.log.gz
# Вывод: gzip compressed data
file dump.sql
# Вывод: UTF-8 Unicode text# Показываем последние 10 строк
tail /var/log/app.log
# Хотим увидеть побольше — например, 50 последних строк
tail -n 50 /var/log/app.log
# А это волшебный режим: лог будет обновляться на глазах в реальном времени
tail -f /var/log/app.log# Слушаем лог в реальном времени и показываем только строки с ошибками
tail -f /var/log/app.log | grep -i "error\|exception\|failed"# Ищем слово "ERROR" (регистр не важен)
grep -i "error" /var/log/app.log
# Ищем только целое слово "ERROR", чтобы не цеплять "ERROR_MESSAGE"
grep -w "ERROR" /var/log/app.log
# Показываем 3 строки после найденной — чтобы понять контекст
grep -A 3 "ERROR" /var/log/app.log
# А что было ДО ошибки? Покажем 2 строки перед ней
grep -B 2 "ERROR" /var/log/app.log
# Или всё вместе: 5 строк до и после
grep -C 5 "ERROR" /var/log/app.log
# Ищем сразу несколько ключевых слов (error, warning, fatal)
grep -E "error|warning|fatal" /var/log/app.log# Находим все ошибки типа NullPointerException и видим, что происходило
перед ними
grep -B 5 -A 2 "NullPointerException" /var/log/app.log
# Ищем действия конкретного пользователя по его ID
grep "userId.*12345" /var/log/app.log
# Считаем, сколько раз произошла ошибка "Connection refused"
grep -c "Connection refused" /var/log/app.log# Открываем файл для просмотра
less /var/log/app.log
# Внутри less работают простые клавиши:
# стрелка вниз / j — на строку вниз
# стрелка вверх / k — на строку вверх
# пробел / Page Down — страница вниз
# b / Page Up — страница вверх
# g — в самое начало файла
# G — в самый конец
# /error — начать поиск слова "error" (n — следующее совпадение)
# q — выйти# Открываем большой лог и сразу начинаем искать слово "ERROR"
less -p "ERROR" /var/log/app.log# Сколько всего строк в логе?
wc -l /var/log/app.log
# А сколько раз встретилась ошибка?
grep "ERROR" /var/log/app.log | wc -l# Сколько запросов сделал пользователь за одну сессию?
grep "sessionId.*abc123" /var/log/app.log | wc -l
# Хотим отправить лог разработчику, но сначала узнаем его размер в строках
wc -l /var/log/app.log
# Вывод: 284739 app.log — почти 285 тысяч строк, прилично!# Представим, что лог выглядит так:
# 2024-01-15 10:23:45 ERROR UserService Failed to login
user=test@example.com
# Вытаскиваем первый и третий столбец (дату и уровень)
awk '{print $1, $3}' /var/log/app.log
# Показываем только строки, где упоминается email
awk '/user=.*@/ {print $0}' /var/log/app.log# Лог запросов к API: timestamp, endpoint, status_code, duration_ms
# Показываем только медленные запросы (дольше 1000 мс)
awk '$4 > 1000 {print $0}' /var/log/api.log
# Считаем количество ошибок по каждому коду ответа (например, 404, 500)
awk '$3 >= 400 {print $3}' /var/log/api.log | sort | uniq -c# Заменяем все "old" на "new" и выводим результат на экран
sed 's/old/new/g' app.log
# Удаляем из вывода все строки, где есть слово "DEBUG"
sed '/DEBUG/d' app.log
# Внимание! Эта команда меняет сам файл (осторожно, без отмены)
sed -i 's/old/new/g' app.log# Перед отправкой лога маскируем все email-адреса
sed 's/[a-z]*@[a-z]*\.com/HIDDEN_EMAIL/g' app.log > cleaned.log
# Убираем отладочные строки и сохраняем в новый файл
sed '/DEBUG/d' /var/log/app.log > errors_only.log# Показываем все процессы в подробном формате
ps aux
# Ищем процессы конкретного пользователя
ps aux | grep postgres
# Ищем процесс по части имени (например, java-приложение)
ps aux | grep -i "java"
# Выводим только PID и имя команды (минимально)
ps -eo pid,comm# Узнаём, сколько памяти потребляет наше Java-приложение
ps aux | grep java
# В выводе увидим столбцы %CPU и %MEM — это загрузка процессора и памяти.# Запускаем мониторинг
top
# Выход — клавиша q
# Внутри top можно нажимать:
# M — сортировка по использованию памяти
# P — сортировка по загрузке процессора# Мягкая остановка (процессу даётся шанс сохранить данные)
kill 12345
# Если процесс не реагирует — принудительная остановка (сигнал -9)
kill -9 12345
# Попросить процесс перечитать конфигурацию (работает не для всех)
kill -HUP 12345# Находим PID процесса
ps aux | grep java
# Допустим, PID = 12345
# Мягко завершаем
kill 12345
# Ждём пару секунд
sleep 2
# Проверяем, что процесс действительно исчез
ps aux | grep java
# Запускаем заново (как именно — зависит от приложения)
cd /opt/myapp && ./start.sh# Показываем в мегабайтах (удобно для восприятия)
free -mdf -h
# Ключ -h делает размеры человекочитаемыми (G, M)# Простой GET-запрос
curl https://api.example.com/health
# GET с красивым отображением JSON (если установлена утилита jq)
curl -s https://api.example.com/users/123 | jq .
# Отправляем POST-запрос с телом в формате JSON
curl -X POST -H "Content-Type: application/json" \
-d '{"name":"test","email":"test@example.com"}' \
https://api.example.com/users
# Обновляем данные через PUT
curl -X PUT -H "Content-Type: application/json" \
-d '{"status":"active"}' \
https://api.example.com/users/123
# Удаляем запись через DELETE
curl -X DELETE https://api.example.com/users/123
# Добавляем заголовки авторизации
curl -H "Authorization: Bearer token123" \
-H "Accept: application/json" \
https://api.example.com/profile# Только HTTP-код ответа (200, 404, 500 и т.д.)
curl -s -o /dev/null -w "%{http_code}" https://api.example.com/users/123
# Измеряем время ответа
curl -s -o /dev/null -w "Time: %{time_total}s\n"
https://api.example.com/health# Показываем все слушающие порты с информацией о процессе
ss -tulpn
# Ищем конкретный порт (например, 8080)
ss -tulpn | grep 8080# Пингуем, пока не прервём (Ctrl+C)
ping example.com
# Отправим ровно 4 пакета и остановимся
ping -c 4 example.com# Простая проверка через netcat (nc)
nc -zv example.com 8080
# Вывод: Connection to example.com 8080 port [tcp/http] succeeded!
# Проверить несколько портов сразу
nc -zv example.com 80 443 8080 9090# Скачать файл
wget https://example.com/file.zip
# Скачать с указанием логина и пароля
wget --user=admin --password=secret https://example.com/secure-file.zip# Создать простой архив (без сжатия)
tar -cf logs.tar /var/log/myapp/*.log
# Создать архив и сжать его gzip (расширение .tar.gz)
tar -czf logs.tar.gz /var/log/myapp/*.log
# Распаковать архив
tar -xzf logs.tar.gz
# Распаковать в конкретную папку
tar -xzf logs.tar.gz -C /tmp/extracted/
# Посмотреть содержимое архива, не распаковывая
tar -tzf logs.tar.gz# Ищем ошибку в сжатом логе
zgrep "ERROR" /var/log/archive/app.log.gz
# Просматриваем содержимое сжатого файла постранично
zcat /var/log/archive/app.log.gz | lesscat config.yml
# Объединить несколько файлов в один
cat part1.log part2.log > combined.log# Сортируем по алфавиту
sort file.log
# Сортируем числа по убыванию
sort -nr file.log# Показываем только уникальные строки
sort file.log | uniq
# Сразу считаем количество вхождений каждого значения
sort file.log | uniq -c | sort -nr# Топ-10 самых частых ошибок в логе
grep "ERROR" app.log | awk '{print $NF}' | sort | uniq -c | sort -nr | head
-10# Первые 20 строк
head -n 20 app.log
# Последние 20 строк
tail -n 20 app.log# Даём право на выполнение для всех (+x)
chmod +x script.sh
# Устанавливаем права: владелец может всё, остальные только читать и
выполнять
chmod 755 script.sh# Меняем владельца и группу
chown user:group file.log
# Рекурсивно меняем для всей папки
chown -R user:group /var/log/myapp/# Перезапустить сервис
sudo systemctl restart myapp
# Прочитать защищённый лог
sudo tail /var/log/secure# Смотрим лог, фильтруем ошибки, берём третий столбец, сортируем, считаем
уникальные
cat app.log | grep "ERROR" | awk '{print $3}' | sort | uniq -c | sort -nrhistory
# Ищем команду с curl
history | grep curl
# Повторяем команду под номером 42
!42nohup ./long_script.sh &# 1. Ищем ошибки в логе за последний час
grep "2024-01-15 1[0-9]:.*ERROR" /var/log/app.log
# 2. Нашли ошибку — смотрим, что было до и после неё
grep -B 10 -A 5 "Login failed.*user=test@example.com" /var/log/app.log
# 3. Проверяем, доходил ли запрос до базы данных
grep "database.*test@example.com" /var/log/db.log
# 4. Считаем, сколько всего было неудачных попыток входа
grep -c "Login failed" /var/log/app.log# 1. Находим все запросы, которые выполнялись дольше 2 секунд
awk '$NF > 2000 {print $0}' /var/log/api.log
# 2. Увидели проблемный URL — смотрим детали только по нему
grep "GET /api/users" /var/log/api.log | awk '$NF > 1000'# 1. Находим логи за нужный период (сравниваем с меткой времени)
find /var/log -name "*.log" -newer /tmp/start_marker
# 2. Запаковываем с понятным именем
tar -czf debug_logs_$(date +%Y%m%d_%H%M%S).tar.gz /var/log/myapp/
# 3. Убираем из логов чувствительные данные перед отправкой
sed 's/userId=[0-9]*/userId=HIDDEN/g' debug_logs.tar.gz >
debug_logs_clean.tar.gz