# Сбор системных данных в 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
Команда запускает сам диспетчер, выводящий в консоль список всех исполняемых процессов в данный момент:
В столбцах приведена следующая информация:
- PID — идентификатор процесса.
- USER — пользователь, запустивший процесс.
- PRI — приоритет при выполнении процесса. По умолчанию для всех процессов установлено значение 20. Чем меньше цифра, тем выше приоритет процесса и тем больше системных ресурсов он может задействовать.
- NI — величина, понижающая или увеличивающая значение приоритета. Изменением этой величины (клавиши и ) можно понижать и повышать приоритет выполнения указанных процессов.
- 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
для удаления определённого маршрута.
Подробнее о настройке сетевых соединений при помощи встроенных утилит мы расскажем в отдельном материале.