add linux commands
All checks were successful
Build MkDocs / build-and-deploy (push) Successful in 23s
All checks were successful
Build MkDocs / build-and-deploy (push) Successful in 23s
This commit is contained in:
parent
9a659fa3fe
commit
ac75e3b77a
@ -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,7 +540,8 @@ 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"`
|
||||
- `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 <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
|
||||
```
|
||||
|
Loading…
x
Reference in New Issue
Block a user