Полезные команды и приемы в 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
Полезный с утилитами для диагностики репозиторий с утилитами для диагностики

Откуда запущен процесс:

#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. Репозиторий. Больше примеров тут.
./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 <interface> 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? как на скриншоте ниже

Работа со службами

Информация о службах

Вывести список всех служб

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
main/linux/bash.txt · Последнее изменение: 2024/10/28 08:41 — davlanas
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0