====== Полезные команды и приемы в Bash ======
===== Кто занимает ресурсы =====
==== Оперативная память ====
**Сколько памяти занимает процесс. На примере mysqld.**
ps -o vsz,rss,cmd --pid $(pgrep mysqld)
**Список процессов с сортировкой по занимаемой памяти.**
ps aux --sort -rss
ps aux --sort -vsz
==== Нагрузка на CPU ====
**Посмотреть информацию о процессоре.**
lscpu
**Список процессов с сортировкой по нагрузке на CPU.**
ps aux --sort -pcpu
Этот список можно ограничить только десятью самыми прожорливыми процессами. ps aux --sort=-pcpu,+pmem | head -n 11
**Информация о загрузке каждого ядра процессора.**\\
Утилита mpstat входит в состав пакета sysstat. Обычно в системных репах она есть.
mpstat -P ALL
**Загрузка процессора в %.**\\
top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}'
awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else print ($2+$4-u1) * 100 / (t-t1) "%"; }' <(grep 'cpu ' /proc/stat) <(sleep 1;grep 'cpu ' /proc/stat)
**Текстовый вывод нагрузки на процессор в консоль.**
sar 1 60
Утилита есть в пакете sysstat.
==== Наблюдение за процессами ====
**Наблюдаем через top за конкретным процессом.**
top -c -p $(pgrep -d',' -f mysqld)
**Определить, кто родитель процесса.**\\
Например, если указать pid worker процесса nginx, команда ниже покажет pid процесса master. В случае с nginx это не имеет большого смысла, но иногда нужно.
ps -o ppid= -p 5606
Полезный с утилитами для диагностики [[https://github.com/brendangregg/perf-tools|репозиторий]] с утилитами для диагностики
Откуда запущен процесс:
#ls -l /proc/Process-PID/cwd
==== Дисковая подсистема ====
**Сводная информация по нагрузке на диск.**
Необходим iostat
iostat -xk -t 2
Выводит информация в консоль каждые 2 секунды. С помощью этого вывода можно бегло оценить, что в целом происходит с каждым конкретным диском.\\
**Дисковая активность всех процессов.**
Необходим pidstat
pidstat -d 1
Выводит каждую секунду в консоль информацию о дисковой активности всех процессов.
**Дисковая активность конкретного процесса.**
pidstat -p PID -d 1
**Что пишет процесс.**
strace -e trace=write -p PID
**Анализ I/O дисков, в том числе latency.**
Необходима утилита iosnoop. [[https://github.com/brendangregg/perf-tools|Репозиторий]]. Больше примеров [[https://github.com/brendangregg/perf-tools/blob/master/examples/iosnoop_example.txt|тут]].
./iosnoop
./iosnoop -p PID
**Список удаленных открытых файлов.**
Полезная команда, которая позволяет решить популярную проблему, когда казалось бы места свободного должно быть много, но его реально нет. Принудительно удален какой-то открытый файл, поэтому место не освободилось.\\
lsof +L1
lsof | grep '(deleted)'
**Список открытых файлов в конкретной директории.**
lsof +D /var/log
Утилита iotop. С ее помощью можно в реальном времени посмотреть дисковую активность.
Утилита dstat (dnf install dstat). С крайне удобным выводом общей нагрузки системы, в том числе и дисков.
**Популярные метрики dstat**\\
dstat -tldnpms 10
Только диски по read_bytes / write_bytes (нагрузка на "железо"):
dstat --top-bio
Диски по rchar/wchar (нагрузка на "по", т.е. включая обращения ко всяким виртуальным ФС):
dstat --top-io
===== Сетевая активность =====
Утилита **nethogs** дает интерфейс на подобии **top**.
Содержится в epel-release
dnf install nethogs
apt install nethogs
==== Проверить какие порты прослушиваются в системе и кем ====
# lsof -i -P -n | grep LISTEN
# netstat -tulpn | grep LISTEN
# nmap -sTU -O IP-address-Here
==== Работа с tcpdump ====
=== Отфильтровать все запросы из локальных сетей к DNS-серверу по 53-му порту ===
tcpdump -i port 53 | grep "src net 192.168.0.0/16\|10.0.0.0/8\|172.16.0.0/12"
===== Установить нужный часовой пояс =====
timedatectl set-timezone Asia/Novokuznetsk
===== Узнать IP NAT =====
Вернет IP-адрес NAT
curl ifconfig.me
Отобразит цепочку IP-адресов
curl ifconfig.me/forwarded
===== Информация о службах =====
Вывести список всех служб:
#systemctl list-unit-files --type=service
Вывести список только включенных служб:
#systemctl list-unit-files --type=service --state=enabled --all
===== Изменение программ по умолчанию =====
==== Изменить редактор по умолчанию ====
Определяем путь до исполняемого файла желаемого редактора:
which vim
Получаем примерно следующий вывод:
# which vim
/usr/bin/vim
Изменяем редактор:
export EDITOR=/usr/bin/vim
===== Работа с ВМ =====
==== Узнать номера дисков ====
Чтобы узнать сопоставление дисков с их номерами на ESXi необходимо выполнить следующее:
# cat /sys/class/scsi_host/*/proc_name
Примерный вывод:
[root@portal18 k.guskov]# cat /sys/class/scsi_host/*/proc_name
vmw_pvscsi
ahci
ahci
ahci
ahci
ahci
ahci
ahci
ahci
ahci
ahci
ata_piix
ahci
ahci
ahci
ahci
ahci
ahci
ahci
ahci
ahci
ahci
ata_piix
ahci
ahci
ahci
iscsi_tcp
ahci
ahci
ahci
ahci
ahci
ahci
ahci
Необходимо найти **vmw_pvscsi** и запомнить его индекс. В данном примере строчка 1, так что индекс будет **0**
Затем выполняем:
ll /sys/class/scsi_host/host0/device/target*/*/block/
**host0** означает что контроллер был 1 и его индекс **0**, если контроллеров больше, то необходимо подставить индекс интересующего
Примерный вывод:
# ll /sys/class/scsi_host/host0/device/target*/*/block/
/sys/class/scsi_host/host0/device/target0:0:0/0:0:0:0/block/:
итого 0
drwxr-xr-x 10 root root 0 июн 7 16:59 sda
/sys/class/scsi_host/host0/device/target0:0:1/0:0:1:0/block/:
итого 0
drwxr-xr-x 8 root root 0 июн 7 16:59 sdb
/sys/class/scsi_host/host0/device/target0:0:2/0:0:2:0/block/:
итого 0
drwxr-xr-x 10 root root 0 июн 7 16:59 sdc
/sys/class/scsi_host/host0/device/target0:0:3/0:0:3:0/block/:
итого 0
drwxr-xr-x 8 root root 0 июн 7 16:59 sdd
/sys/class/scsi_host/host0/device/target0:0:4/0:0:4:0/block/:
итого 0
drwxr-xr-x 8 root root 0 июн 7 16:59 sde
/sys/class/scsi_host/host0/device/target0:0:5/0:0:5:0/block/:
итого 0
drwxr-xr-x 8 root root 0 июн 7 16:59 sdf
/sys/class/scsi_host/host0/device/target0:0:6/0:0:6:0/block/:
итого 0
drwxr-xr-x 8 root root 0 авг 1 13:56 sdh{{ :main:virtualization:vmware:scsi-disk:1.png?600 |}}
Необходимо найти интересующий вас диск и обратить внимание на секцию **target** последние 2 цифры - ID диска в ESXi.
**target0:0:6** Соответствует диску SCSI с ID 0:6? как на скриншоте ниже
{{ :main:virtualization:vmware:scsi-disk:1.png?800 |}}
===== Работа со службами =====
==== Информация о службах ====
=== Вывести список всех служб ===
systemctl list-units --type service
Пример вывода:
UNIT LOAD ACTIVE SUB DESCRIPTION
blk-availability.service loaded active exited Availability of block devices
chrony.service loaded active running chrony, an NTP client/server
clamav-daemon.service loaded active running Clam AntiVirus userspace daemon
clamav-freshclam.service loaded active running ClamAV virus database updater
console-setup.service loaded active exited Set console font and keymap
cron.service loaded active running Regular background program processing daemon
dbus.service loaded active running D-Bus System Message Bus
fetchmail.service loaded active exited LSB: init-Script for system wide fetchmail daemon
getty@tty1.service loaded active running Getty on tty1
ifupdown2-pre.service loaded active exited Helper to synchronize boot up for ifupdown
keyboard-setup.service loaded active exited Set the console keyboard layout
kmod-static-nodes.service loaded active exited Create List of Static Device Nodes
lvm2-monitor.service loaded active exited Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling
networking.service loaded active exited Network initialization
pmg-smtp-filter.service loaded active running Proxmox SMTP Filter Daemon
pmgbanner.service loaded active exited Proxmox Mail Gateway Login Banner
pmgdaemon.service loaded active running Proxmox Mail Gateway's privileged loopback API daemon
pmgnetcommit.service loaded active exited Commit Proxmox network changes
pmgpolicy.service loaded active running Proxmox Mail Gateway Policy Daemon
pmgproxy.service loaded active running Proxmox Mail Gateway's unprivileged API and API-proxy daemon
pmgsync.service loaded active exited Sync Proxmox Configuration
postfix.service loaded active exited Postfix Mail Transport Agent
postfix@-.service loaded active running Postfix Mail Transport Agent (instance -)
=== Вывести запущенные сервисы ===
systemctl list-units --type service --state running
Пример вывода:
# systemctl list-units --type service --state running
UNIT LOAD ACTIVE SUB DESCRIPTION
chrony.service loaded active running chrony, an NTP client/server
clamav-daemon.service loaded active running Clam AntiVirus userspace daemon
clamav-freshclam.service loaded active running ClamAV virus database updater
cron.service loaded active running Regular background program processing daemon
dbus.service loaded active running D-Bus System Message Bus
getty@tty1.service loaded active running Getty on tty1
pmg-smtp-filter.service loaded active running Proxmox SMTP Filter Daemon
pmgdaemon.service loaded active running Proxmox Mail Gateway's privileged loopback API daemon
pmgpolicy.service loaded active running Proxmox Mail Gateway Policy Daemon
pmgproxy.service loaded active running Proxmox Mail Gateway's unprivileged API and API-proxy daemon
postfix@-.service loaded active running Postfix Mail Transport Agent (instance -)
postgresql@15-main.service loaded active running PostgreSQL Cluster 15-main
rpcbind.service loaded active running RPC bind portmap service
rrdcached.service loaded active running LSB: start or stop rrdcached
rsyslog.service loaded active running System Logging Service
ssh.service loaded active running OpenBSD Secure Shell server
systemd-journald.service loaded active running Journal Service
systemd-logind.service loaded active running User Login Management
systemd-udevd.service loaded active running Rule-based Manager for Device Events and Files
user@0.service loaded active running User Manager for UID 0
zfs-zed.service loaded active running ZFS Event Daemon (zed)
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
21 loaded units listed.
=== Вывести завершившиеся ошибкой ===
systemctl list-units --type service --state failed
=== Просмотреть все службы ===
systemctl list-unit-files
Пример вывода:
ystemctl list-unit-files
UNIT FILE STATE PRESET
proc-sys-fs-binfmt_misc.automount static -
-.mount generated -
dev-hugepages.mount static -
dev-mqueue.mount static -
proc-fs-nfsd.mount static -
proc-sys-fs-binfmt_misc.mount disabled disabled
run-rpc_pipefs.mount generated -
sys-fs-fuse-connections.mount static -
sys-kernel-config.mount static -
sys-kernel-debug.mount static -
sys-kernel-tracing.mount static -
var-lib-nfs-rpc_pipefs.mount static -
postfix-resolvconf.path disabled enabled
systemd-ask-password-console.path static -
systemd-ask-password-wall.path static -
session-1.scope transient -
session-3.scope transient -
apt-daily-upgrade.service static -
apt-daily.service static -
auth-rpcgss-module.service static -
autovt@.service alias -
blk-availability.service enabled enabled
chrony-dnssrv@.service static -
chrony-wait.service disabled enabled
chrony.service enabled enabled
chronyd.service alias -
clamav-clamonacc.service disabled enabled
clamav-daemon.service enabled enabled
clamav-freshclam.service enabled enabled
console-getty.service disabled disabled
console-setup.service enabled enabled
container-getty@.service static -
cron.service enabled enabled
cryptdisks-early.service masked enabled
cryptdisks.service masked enabled
dbus-org.freedesktop.hostname1.service alias -
dbus-org.freedesktop.locale1.service alias -
dbus-org.freedesktop.login1.service alias -
dbus-org.freedesktop.timedate1.service alias -
dbus.service static -
debug-shell.service disabled disabled
=== Вывести только службы Linux ===
systemctl list-unit-files --type service
Пример вывода:
UNIT FILE STATE PRESET
proc-sys-fs-binfmt_misc.automount static -
-.mount generated -
dev-hugepages.mount static -
dev-mqueue.mount static -
proc-fs-nfsd.mount static -
proc-sys-fs-binfmt_misc.mount disabled disabled
run-rpc_pipefs.mount generated -
sys-fs-fuse-connections.mount static -
sys-kernel-config.mount static -
sys-kernel-debug.mount static -
sys-kernel-tracing.mount static -
var-lib-nfs-rpc_pipefs.mount static -
postfix-resolvconf.path disabled enabled
systemd-ask-password-console.path static -
systemd-ask-password-wall.path static -
session-1.scope transient -
session-3.scope transient -
apt-daily-upgrade.service static -
apt-daily.service static -
auth-rpcgss-module.service static -
autovt@.service alias -
blk-availability.service enabled enabled
chrony-dnssrv@.service static -
chrony-wait.service disabled enabled
chrony.service enabled enabled
chronyd.service alias -
clamav-clamonacc.service disabled enabled
clamav-daemon.service enabled enabled
clamav-freshclam.service enabled enabled
console-getty.service disabled disabled
console-setup.service enabled enabled
container-getty@.service static -
cron.service enabled enabled
cryptdisks-early.service masked enabled
cryptdisks.service masked enabled
dbus-org.freedesktop.hostname1.service alias -
dbus-org.freedesktop.locale1.service alias -
dbus-org.freedesktop.login1.service alias -
dbus-org.freedesktop.timedate1.service alias -
dbus.service static -
debug-shell.service disabled disabled
dm-event.service static -
dpkg-db-backup.service static -
e2scrub@.service static -
e2scrub_all.service static -
e2scrub_fail@.service static -
e2scrub_reap.service enabled enabled
==== Поиск службы ====
=== По имени ===
systemctl list-unit-files 'networking*'
Пример вывода:
# systemctl list-unit-files 'networking*'
UNIT FILE STATE PRESET
networking.service enabled enabled