# Сбор системных данных в Linux

В процессе работы с сервером часто возникают ситуации, когда нужно получить дополнительные сведения о системе — посмотреть открытые порты, проверить загрузку процессора или найти процесс, выполнение которого отнимает слишком много серверных ресурсов.

В этой статье мы расскажем о встроенных командах и небольших устанавливаемых утилитах, которые помогут получить дополнительные сведения о функционировании системы, помогут просканировать открытые или прослушиваемые порты, приведут список выполняемых процессов и т.д.

# Версия операционной системы

Начнём с самого базового элемента — версия установленной на сервере операционной системы. Получить информацию о ней можно при помощи нескольких команд.

Вводим команду:

uname

Она выведет в консоль только общее название системы:

# Output

Linux

Если добавить к этой команде флаг -a, то на экран будет выведена полная информация о системе: имя хоста, имя и версия ядра Kernel, а также разрядность самой операционной системы.

Вводим команду:

lsb_release -a

Она выведет на экран информацию об установленных модулях LSB и основную информацию об операционной системе:

# Output

No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

# Информация об аппаратной части

Получить общие данные об аппаратной части вашего компьютера — вне зависимости от того, локальная это машина или сервер — можно с помощью утилиты lshw.

Если она не установлена по умолчанию, установите её стандартным способом:

# Ubuntu / Debian
sudo apt install lshw

# CentOS
sudo dnf install lshw

После завершения установки можно переходить непосредственно к работе с программой. Вводим команду:

sudo lshw

Она соберёт общую информацию о вашем «железе»: имя хоста, количество ядер процессора и объём RAM:

# Output
 host_name
 description: Computer
    width: 64 bits
    capabilities: smp vsyscall32
  *-core
       description: Motherboard
       physical id: 0
     *-memory
          description: System memory
          physical id: 0
          size: 4GiB
     *-cpu
          product: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
          vendor: Intel Corp.
          physical id: 1
          bus info: cpu@0
          width: 64 bits

Флаг -short позволит сделает выдачу не такой развёрнутой:

# Output

H/W path  Device  Class      Description
========================================
                  system     Computer
/0                bus        Motherboard
/0/0              memory     4GiB System memory
/0/1              processor  Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz

Получить сведения об установленном процессоре или о подключённых к машине дисковых накопителях (жёсткие диски, флэшки и т.д.) помогут вариации этой команды: lscpu и lsblk.

# Диспетчер задач

Для мониторинга процессов, выполняемых сервером, удобно использовать простой и наглядный диспетчер задач htop:

sudo apt install htop

После установки диспетчер запускается командой:

sudo htop

Команда запускает сам диспетчер, выводящий в консоль список всех исполняемых процессов в данный момент:

«htop»

В столбцах приведена следующая информация:

  • PID — идентификатор процесса.
  • USER — пользователь, запустивший процесс.
  • PRI — приоритет при выполнении процесса. По умолчанию для всех процессов установлено значение 20. Чем меньше цифра, тем выше приоритет процесса и тем больше системных ресурсов он может задействовать.
  • NI — величина, понижающая или увеличивающая значение приоритета. Изменением этой величины (клавиши F7 и F8) можно понижать и повышать приоритет выполнения указанных процессов.
  • VIRT — объём виртуальной памяти, выделенной системой этому процессу. Здесь указывается не используемый объём памяти, а именно выделенный.
  • RES — объём непосредственно используемой процессом памяти.
  • SHR — объём памяти, которую могут использовать другие приложения.
  • S — столбец, описывающий состояние процесса (S — спящий процесс, R — процесс выполняется, D — процесс ожидает выполнения).
  • CPU% — использование процессорных мощностей в процентном соотношении.
  • MEM% — процент использования процессом общей системной памяти.
  • TIME+ — аптайм процесса.
  • Command — команда, которой был запущен процесс.

В нижней части экрана расположены подсказки, которые помогут с навигацией по меню диспетчера задач. Они позволят настроить приоритет или полностью остановить выполнение процесса, настроить фильтр для поиска нужных процессов и попасть в окно общих настроек диспетчера.

# Диспетчер сетевых интерфейсов

Помимо наблюдения за использованием системных ресурсов полезным в работе с сервером бывает и мониторинг использования сетевых интерфейсов. Для этого отлично подойдёт простой, но функциональный инструмент iftop.

sudo apt install iftop

Он запускается командой:

sudo iftop

Инструмент выводит на экран всю информацию о загрузке сетевых интерфейсов вашей машины.

iftop позволяет мониторить работу отдельно взятого сетевого интерфейса:

sudo iftop -i interface_name

Анализирует трафик, приходящий на сетевой интерфейс из внутренней сети:

sudo iftop -F 192.168.2.0/24

Сортирует трафик, приходящий из определённого источника:

sudo iftop -o source

Сортирует трафик, идущий к определённому адресу:

sudo iftop -o destination

# Сетевые инструменты

Очень полезным в повседневной работе с сервером будет набор инструментов для работы с сетью net-tools. Он включает в себя такие популярные инструменты, как ifconfig, netstat, route и другие. Как правило этот набор инструментов уже установлен на сервере. Если какой-то из команд, входящих в его состав, нет, то его легко установить стандартной командой:

sudo apt install net-tools

После завершения установки можно использовать любые из входящих в набор инструментов.

# netstat

Для работы с портами на сервере используется команда netstat с различной комбинацией флагов. Например, можно вывести список всех открытых портов на сервере:

netstat -a

Вы можете также выбрать только прослушиваемые порты:

netstat -l

Если добавить к команде netstat флаг -p, то при выводе выбранных параметров в консоль будет добавлена информация о том, какое именно приложение с каким PID использует данный порт.

Флаги команды можно комбинировать, чтобы вывести на экран определённую комбинацию значений. Например, полезной бывает комбинация флагов -tulpn, которая выводит на экран все прослушиваемые порты на сервере с указанием конкретных процессов, занимающих порт.

# ifconfig

Команда ifconfig работает с сетевыми интерфейсами. Введите её в консоли, чтобы она вывела на экран основную информацию о работающих на сервере сетевых интерфейсах:

sudo ifconfig

# Output
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

venet0: flags=211<UP,BROADCAST,POINTOPOINT,RUNNING,NOARP>  mtu 1500
        inet 127.0.0.1  netmask 255.255.255.255  broadcast 0.0.0.0  destination 127.0.0.1
        inet6 2001:1bb0:e000:1e::522  prefixlen 64  scopeid 0x0<global>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 0  (UNSPEC)
        RX packets 6225  bytes 1302040 (1.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7250  bytes 1044773 (1020.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

venet0:0: flags=211<UP,BROADCAST,POINTOPOINT,RUNNING,NOARP>  mtu 1500
        inet 10.100.16.199  netmask 255.255.0.0  broadcast 10.100.255.255  destination 10.100.16.199
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 0  (UNSPEC)

Если добавить после команды имя конкретного сетевого интерфейса, то на экран будет выведена информация только о нём. Чтобы минимизировать выдачу, можно использовать флаг -s.

Команды up и down после имени интерфейса позволяют включить или отключить его:

sudo ifconfig eth0 up
sudo ifconfig eth0 down

Сетевому интерфейсу можно назначить IP-адрес, просто добавив его после имени интерфейса:

sudo ifconfig eth0 192.168.0.1

# route

В общем случае для полноценной настройки сети на сервере помимо команды ifconfig понадобится настройка маршрутизации, которая осуществляется при помощи команды route, также входящей в состав пакета net-tools.

Общий синтаксис команды route выглядит следующим образом:

route add [-net|-host] <IP/Net> netmask gw <Gateway IP> dev <Int>X

Здесь параметры -net и -host описывают сеть или отдельный хост, netmask определяет подсеть, а dev — сетевой интерфейс.

Кроме команды add в route используется del для удаления определённого маршрута.

Подробнее о настройке сетевых соединений при помощи встроенных утилит мы расскажем в отдельном материале.