From ac75e3b77a6f8701832ddb2d2aa2a3526268d7f1 Mon Sep 17 00:00:00 2001 From: ilyamak04 Date: Tue, 2 Sep 2025 17:45:18 +0300 Subject: [PATCH] add linux commands --- docs/linux/Команды.md | 215 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 214 insertions(+), 1 deletion(-) diff --git a/docs/linux/Команды.md b/docs/linux/Команды.md index 644b279..f28d9d4 100644 --- a/docs/linux/Команды.md +++ b/docs/linux/Команды.md @@ -459,6 +459,7 @@ openssl x509 -in файл.crt -noout -subject -issuer ```bash mount [OPTIONS] ``` + - `mount /dev/sda1 /mnt` - это монтирует раздел /dev/sda1 в директорию /mnt - `mount -t ext4 /dev/sda1 /mnt` - подключить с указанием типа файловой системы - `df -Th` - информация о файловых системах и их типах @@ -539,7 +540,8 @@ resize2fs /dev/mapper/vg_local-root # или xfs_growfs - `i` - игнорировать регистр - `w` - только целые слова - `x` - совпадение всей строки - + - `o` - выводить только совпадающую часть строки, а не всю строку целиком + - `cat | grep -P "May 2 08:5(3|4|5):"` - ну понятно - `grep --text -A 1000000 "2025-02-23 13:00:00" catalina.out > cut.log` - вывести `1000000` строк после `"2025-02-23 13:00:00"` - `sort file.txt | uniq -d` - вывести дублирующиеся строки в файле @@ -624,3 +626,214 @@ Logrotate - это системная утилита Linux, которая уп - `atop` - мегаtop (-d детализация по дискам, -m детализация по памяти) - `perf` - `smartctl` - инфа по дискам + +### Однострочники + +- `>` - перенаправить stdout в файл (перезаписать) +- `>>` - добавить в файл +- `<` - читать stdin из файла +- `2>` - перенаправить stderr +- `2>&1` - объединить stdout и stderr (`./script.sh > output.log 2>&1`) +- `&>` - объединить stdout и stderr (`./script.sh &> output.log`) +- `|` - передать stdout команды на stdin другой +- `|&` или `2>&1 |` - перенаправляет и stdout, и stderr +- `sort -rn` - числовая сортировка по убыванию +- `uniq -c` - удаляет повторяющиеся строки (`-с` - добавляет счётчик повторов) +- `wc -l` - подсчитать количество строк +- `head -n 10` - числовая сортировка по убыванию +- `ps aux | grep nginx | grep -v grep` +- `sort file.txt | uniq -d` - вывести дублирующиеся строки в файле (`uniq -d` - выводит только повторяющиеся строки) +- `history | awk '{print $2}' | sort | uniq -c | sort -rn | head` - список самых частозапускаемых команд +- `set -o pipefail` - пайплайн падает, если упала любая команда в нём +- `find / -name '*.php' -not -path '/mnt/share'` - Искать все файлы .php везде, кроме директории /mnt/share + +- Запустить скрипт, ошибки записать в отдельный файл, а стандартный вывод передать на вход другой команде (через pipe) +```bash +./script.sh 2> errors.log | grep "success" +``` +- Запустить скрипт, все его ошибки записать в лог, а обычный вывод игнорировать +```bash +./buggy_script.sh > /dev/null 2> errors.log +``` +- Поискать слово в ошибках компиляции +```bash +make build 2>&1 | grep "error" +``` + +- Управление джобами +```bash +command & # фоновый запуск +jobs # список +fg %1 # вернуть в fg +``` +- Топ IP по количеству запросов в логе +```bash +awk '{print $1}' access.log | sort | uniq -c | sort -nr | head +``` + +- Топ больших файлов +```bash +# 1) +du -ah /var 2>/dev/null | sort -rh | head -10 +# 2) +find /var -type f -exec du -h {} + 2>/dev/null | sort -rh | head -10 +``` + +- PID процессов по имени +```bash +# Выводит PID'ы по имени процесса +pgrep nginx +# -C (отбор по имени) +ps -C nginx -o pid= +``` + +- Топ процессов по использованию CPU +```bash +ps -eo pid,comm,%cpu --sort=-%cpu | head -n 6 +``` + +- Выполнение команды n раз +```bash +for i in {1..10}; do command; done +``` + +- `grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' access.log` - извлечь все IP-адреса из лога +- `grep -oE '([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}' file.txt` - извлечь домены из лога + +#### Sed + +- `sed 's/foo/bar/' file` - замена foo на bar, заменяет только первое вхождение, файл на диске не меняется, результат выводится в stdout +- `sed 's/foo/bar/g' file` - заменяет все вхождения, файл на диске не меняется, результат выводится в stdout +- `sed 's/foo/bar/Ig' file` - игнор регистра, файл на диске не меняется, результат выводится в stdout +- `sed '/pattern/d' file` - удалит строки где найден `pattern`, файл на диске не меняется, результат выводится в stdout +- `sed -i 's/foo/bar/g' file` - замена в файле "на месте" + +#### Xargs + +xargs - утилита, которая читает входные данные (обычно список строк из stdin) и превращает их в аргументы для другой команды + +- Базовый синтаксис +```bash +команда_дающая_список | xargs [опции] команда +``` + +- `echo "file1 file2 file3" | xargs rm -f` - удалить файлы перечисленные в списке +- `find . -type f -name "*.log" | xargs rm -f` - удалить файлы найденные в find +- `find . -type f -name "*.log" -exec rm -f {} +` - удалить файлы (\; вместо +, тогда будет один вызов rm на каждый файл) + +### Дебаг процесса + +- `top` - анализируем ситуацию + - `Shift + H` - показывать потоки (треды) вместо процессов + - `c` - показать полную команду запуска + - `M` - сортировать по потреблению памяти + - `P` - сортировать по потреблению CPU + - `1` - показать статистику по каждому ядру CPU + - `E` - единицы измерения памяти в заголовках + - `e` - единицы измерения памяти в строках +- `ps aux` +- `ps -eLf | grep ` - чтобы увидеть все потоки (LWP) этого процесса и количество потоков (NLWP) +- `pgrep nginx` +- `top -H -p ` - анализ потоков процесса +- `strace -p ` - какие системные вызовы делает поток +- `strace -f -p ` - трассировать также и дочерние процессы/потоки (`-f`) +- `strace -t -e trace=open,read,write -p -o strace_log.txt` - трассировать только определенные вызовы записать вывод в файл (`-o`), время (`-t`) +- `vmstat 1` - статистика по памяти, свопу, процессам, прерываниям, контекстным переключениям +- `iotop` +- `lsof -p ` - все открытые файлы процесса +- `lsof -i :80` - какие процессы слушают 80-й порт +- `lsof -i tcp` - все tcp-соединения +- `/proc` + - `cat /proc//cmdline` - как процесс был запущен + - `cat /proc//environ` - переменные окружения процесса + - `ls -la /proc//fd/` - список открытых файловых дескрипторов + - `cat /proc//status` - общая информация: UID, GID, кол-во потоков, использование памяти + - `cat /proc//io` - статистика по I/O (прочитано/записано байт) + - `readlink -f /proc//exe` - полный путь к исполняемому файлу + - `cat /proc//limits` - ulimut'ы процесса + - `/proc/1054764/cgroup` - cgroup'ы процесса + - `ls -l /proc/1054764/ns` - ns'ы процесса + - `ls -l /proc/self/ns` - ns текущей оболочки + - `cat /proc//smaps_rollup` - инфо по памяти + +#### Не запускается бинарник + +- `./binary_name` - пробуем запустить +- `ls -la binary_name` - проверка прав доступа (`chmod +x binary_name` - дать бит на выполнение) +- `file binary_name` - узнать под какую архитектуру скомпилирован бинарник (`uname -m` - архитектура системы) +- `which binary_name` - узнать где находится +- `ldd binary_name` - проверить зависимости () +- Проверить интерпретатор +```bash +# Cмотреть первую строку (shebang), например, #!/usr/bin/env python3 +# Проверить, установлен ли этот интерпретатор, python3 --version +``` +- `strace ./binary_name` +- `ltrace ./binary_name` +- `env` - посмотреть переменные окружения +- `dmesg -T` - смотрим логи ядра +- `sestatus` - статус SELinux +- `aa-status` - статус AppArmor + +#### Анализ лога + +- Анализ лога +```bash +# Посмотреть несколько строк лога, чтобы понять его формат +head -n 5 access.log +# Или для непрерывного лога: +tail -f /var/log/nginx/access.log + +# Посчитать общее количество запросов в логе +wc -l access.log + +# Посмотреть пример одной строки в удобном виде +# Допустим, строка лога выглядит так: +# 192.168.1.1 - - [10/May/2024:12:34:56 +0300] "GET /api/user?id=123 HTTP/1.1" 200 1524 "https://example.com" "Mozilla/5.0" 0.450 +``` + +- Топ URL по количеству запросов (самые популярные endpoints) +```bash +# Базовая версия: считаем все вхождения +cat access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -20 + +# Улучшенная версия: игнорируем файлы (картинки, css, js) и считаем только пути +cat access.log | awk '{print $7}' | grep -E "^(/api/|/news/|/blog/)" | sort | uniq -c | sort -nr | head -20 +``` + +- Tоп самых медленных запросов (по времени выполнения) +```bash +# Извлекаем URL и время, сортируем по времени +cat access.log | awk '{print $7, $(NF)}' | sort -k2 -nr | head -20 + +# Только медленные запросы (например, > 1 секунды) +cat access.log | awk '$(NF) > 1 {print $7, $(NF)}' | sort -k2 -nr | head -20 +``` + +- Статистика по HTTP-статусам (коды ответов) +```bash +# Считаем количество каждого статуса +cat access.log | awk '{print $9}' | sort | uniq -c | sort -nr + +# Топ ошибок 5xx +cat access.log | awk '$9 ~ /5[0-9]{2}/ {print $9, $7}' | sort | uniq -c | sort -nr +``` + +- Топ самых больших запросов (по размеру ответа) +```bash +# Извлекаем URL и размер ответа +cat access.log | awk '{print $7, $10}' | sort -k2 -nr | head -20 + +# Запросы с размером ответа > 1MB +cat access.log | awk '$10 > 1000000 {print $7, $10}' | sort -k2 -nr +``` + +- Топ IP-адресов по количеству запросов (поиск скреймеров) +```bash +cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20 +``` + +- Для CSV-лога +```bash +awk -F',' '{print $2}' log.csv +```