add linux commands
All checks were successful
Build MkDocs / build-and-deploy (push) Successful in 23s

This commit is contained in:
Илья Макаров 2025-09-02 17:45:18 +03:00
parent 9a659fa3fe
commit ac75e3b77a

View File

@ -459,6 +459,7 @@ openssl x509 -in файл.crt -noout -subject -issuer
```bash
mount [OPTIONS] <DEVICE> <MOUNTPOINT>
```
- `mount /dev/sda1 /mnt` - это монтирует раздел /dev/sda1 в директорию /mnt
- `mount -t ext4 /dev/sda1 /mnt` - подключить с указанием типа файловой системы
- `df -Th` - информация о файловых системах и их типах
@ -539,6 +540,7 @@ resize2fs /dev/mapper/vg_local-root # или xfs_growfs
- `i` - игнорировать регистр
- `w` - только целые слова
- `x` - совпадение всей строки
- `o` - выводить только совпадающую часть строки, а не всю строку целиком
- `cat <filename> | 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"`
@ -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 <PID>` - чтобы увидеть все потоки (LWP) этого процесса и количество потоков (NLWP)
- `pgrep nginx`
- `top -H -p <PID>` - анализ потоков процесса
- `strace -p <LWP>` - какие системные вызовы делает поток
- `strace -f -p <PID>` - трассировать также и дочерние процессы/потоки (`-f`)
- `strace -t -e trace=open,read,write -p <PID> -o strace_log.txt` - трассировать только определенные вызовы записать вывод в файл (`-o`), время (`-t`)
- `vmstat 1` - статистика по памяти, свопу, процессам, прерываниям, контекстным переключениям
- `iotop`
- `lsof -p <PID>` - все открытые файлы процесса
- `lsof -i :80` - какие процессы слушают 80-й порт
- `lsof -i tcp` - все tcp-соединения
- `/proc`
- `cat /proc/<PID>/cmdline` - как процесс был запущен
- `cat /proc/<PID>/environ` - переменные окружения процесса
- `ls -la /proc/<PID>/fd/` - список открытых файловых дескрипторов
- `cat /proc/<PID>/status` - общая информация: UID, GID, кол-во потоков, использование памяти
- `cat /proc/<PID>/io` - статистика по I/O (прочитано/записано байт)
- `readlink -f /proc/<PID>/exe` - полный путь к исполняемому файлу
- `cat /proc/<PID>/limits` - ulimut'ы процесса
- `/proc/1054764/cgroup` - cgroup'ы процесса
- `ls -l /proc/1054764/ns` - ns'ы процесса
- `ls -l /proc/self/ns` - ns текущей оболочки
- `cat /proc/<PID>/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
```