Программирование

Извлечение информации о системе и оборудовании Linux с помощью Python

Извлечение информации о системе и оборудовании Linux с помощью Python

Поиск информации об оборудовании и системе в Linux - удобная и интересная задача. Мы можем извлекать сведения об операционной системе, сведения о пользователях, сведения о памяти, сведения о процессоре и многое другое, используя простые коды Python в Linux. Хотя мы можем выполнять многие из этих вещей с помощью сценариев терминала и bash, Python намного интереснее.

Как любители python, мы хотим, чтобы каждая задача выполнялась с использованием этого языка, поэтому извлечение информации о системе и оборудовании с помощью python - отличная задача. Также мы можем изучать Linux и Python одновременно. Эта статья будет довольно длинной, поэтому не торопитесь, чтобы прочитать всю статью и запустить каждый код для лучшего понимания.

Вы можете скопировать каждый из кодов в IDE Python и запустить его. Если у вас нет IDE Python или вы хотите сравнить IDE, ознакомьтесь с нашим руководством по 10 лучшим IDE для Linux. Кстати, я использую VS Code как IDE для написания кода. Это открытый исходный код и простой в использовании. Если вы хотите использовать код Visual Studio, см. Наше руководство по установке кода VS в Linux.

Извлечение системной информации с помощью Python

В этой статье мы разработаем программу, которая извлечет следующие детали:

Чтобы получить эти сведения, мы будем использовать модули, присутствующие в стандартной библиотеке Python. Некоторые из модулей, которые мы будем использовать, - это ОС, платформа и т. Д. Я также поместил исходный код в Github; вы можете увидеть демонстрацию программы, загрузив ее из моего репозитория Github и запустив ее.

Чтобы следовать этому руководству, рекомендуется, чтобы в вашей системе была установлена ​​последняя версия python. Вы можете следовать нашему руководству по установке python в Linux.

Требования

Многие из библиотек, которые мы используем в этом руководстве, присутствуют в стандартной библиотеке python. Нам нужно только установить пакет псутил. Вы можете проверить это, импортировав. Если у вас не установлен psutil, вы можете легко установить его с помощью инструмента pip. Чтобы установить pip в нашу систему, нам нужно запустить следующую команду в терминале.

pip install psutil

Получение основных сведений о системе

Теперь, когда вы установили psutil, давайте посмотрим, как его использовать для сбора ОС с помощью python. Мы использовали Платформа модуль, присутствующий в стандартной библиотеке Python, для сбора этой базовой системной информации. Вам нужно скопировать следующий код в вашу любимую среду разработки Python и запустить его.

# импорт необходимых модулей import platform # печать архитектуры ОС print ("[+] Architecture:", platform.architecture () [0]) # Отображение машины print ("[+] Machine:", platform.machine ()) # печать информации о выпуске операционной системы print ("[+] Версия операционной системы:", platform.release ()) # выводит текущее имя системы print ("[+] System Name:", platform.system ()) # В этой строке будет напечатана версия вашей операционной системы print ("[+] Operating System Version:", platform.version ()) # Будет напечатан узел или имя хоста вашей операционной системы print ("[+] Узел:" + платформа.node ()) # Это напечатает вашу системную платформу print ("[+] Platform:", platform.platform ()) # Будет напечатана информация о процессоре print ("[+] Processor:", platform.процессор ())

В приведенном выше коде мы сначала импортировали модуль платформы, присутствующий в стандартной библиотеке python. После импорта модуля мы используем функции модуля платформы для получения необходимой информации. Запустив код на моем устройстве, я получил следующий результат.

базовая системная информация с использованием Python

Как мы видим в выходных данных, программа отображает множество важных деталей об операционной системе, таких как архитектура системы, платформа и многое другое.

Время работы системы

Мы также можем получить время загрузки системы и время безотказной работы системы в python. Нам нужно использовать псутил библиотека, которую мы установили ранее. Мы можем получить время безотказной работы системы, прочитав файл безотказной работы, находящийся в каталоге proc в Linux.

Скопируйте следующий код в свою любимую IDE Python и запустите его.

from datetime import datetime import psutil # Использование библиотеки psutil для получения времени загрузки системы boot_time = datetime.fromtimestamp (psutil.boot_time ()) print ("[+] Время загрузки системы:", boot_time)

Этот код напечатает время загрузки, то есть время, когда система загрузилась. Запустив программу на моем ПК, я получил следующий результат.

время загрузки системы с использованием Python

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

# получение времени работы системы из файла uptime в каталоге proc с помощью open ("/ proc / uptime", "r") как f: uptime = f.читать().split ("") [0].strip () uptime = int (float (uptime)) uptime_hours = uptime // 3600 uptime_minutes = (uptime% 3600) // 60 print ("[+] Время работы системы:" + str (uptime_hours) + ":" + str ( uptime_minutes) + "часы")

Я получил следующий результат при запуске кода.

время безотказной работы системы с использованием Python

Процессы

Мы также можем использовать python для получения списка запущенных в данный момент процессов, всего процессов. Нам нужно запустить следующий код.

import os pids = [] для подкаталога в ОС.listdir ('/ proc'): если подкаталог.isdigit (): pids.append (subdir) print ('Общее количество процессов: 0'.формат (len (pids)))

Выполнив код, я получил результат, как показано на изображении ниже.

общее количество процессов

информация о пользователе

Мы также можем получить список всех пользователей, присутствующих на нашем устройстве Linux, используя библиотеку pwd, присутствующую в стандартной библиотеке python. Для этого вам нужно скопировать следующий код в вашу среду разработки Python и запустить его.

импортировать pwd users = pwd.getpwall () для пользователя в пользователях: print (user.pw_name, пользователь.pw_shell)

Запустив приведенный выше код, вы получите всех пользователей, присутствующих на вашем устройстве, и их оболочки.

Информация о процессоре

Мы собрали сведения о системе, чтобы собрать некоторую информацию о процессоре, используемом на нашей машине. Мы можем собрать информацию о процессоре с нашей Linux-машины двумя способами. Первый и самый простой способ - использовать псутил модуль, а второй способ - прочитать файл / proc / cpuinfo.

Давайте посмотрим, как мы можем использовать библиотеку psutil для получения информации о процессоре. Вам нужно скопировать следующий код в вашу любимую IDE Python и запустить его.

# импорт необходимых пакетов import psutil # Этот код напечатает количество имеющихся ядер ЦП print ("[+] Количество физических ядер:", psutil.cpu_count (logical = False)) print ("[+] Общее количество ядер:", psutil.cpu_count (logic = True)) print ("\ n") # Это напечатает максимальную, минимальную и текущую частоту процессора cpu_frequency = psutil.cpu_freq () print (f "[+] Макс. частота: cpu_frequency.Максимум:.2f Mhz ") print (f" [+] Мин. Частота: cpu_frequency.мин:.2f Mhz ") print (f" [+] Текущая частота: cpu_frequency.Текущий:.2f Mhz ") print (" \ n ") # Будет напечатано использование ЦП на ядро ​​для i, процент в enumerate (psutil.cpu_percent (percpu = True, interval = 1)): print (f "[+] Использование ЦП ядра i: процент%") print (f "[+] Общее использование ЦП: psutil.cpu_percent ()% ")

Давайте посмотрим, что происходит в приведенной выше программе. В первой строке мы импортировали псутил модуль, который поможет собрать детали процессора. Во второй и третьей строках мы используем cpu_count () функция псутил модуль для подсчета количества ядер процессора. Затем мы использовали функцию cpu_freq (), чтобы получить максимальную, минимальную и текущую частоту. Наконец, мы используем функцию cpu_percent fo psutil, чтобы найти использование ЦП. Запустив код на моем компьютере, я получил следующий результат.

Информация о процессоре с использованием psutil

Как мы видим в выводе, все детали процессора были выведены программой в терминале. Мы также можем получить имя процессора, прочитав файл / proc / cpuinfo с помощью python. Для этого нам нужно запустить следующий код.

# чтение файла cpuinfo для вывода имени # ЦП с open ("/ proc / cpuinfo", "r") как f: file_info = f.readlines () cpuinfo = [x.полоска().split (":") [1] для x в file_info, если "имя модели" в x] для индекса, элемент в перечислении (cpuinfo): print ("[+] Processor" + str (index) + ":" + item )

Мы также можем собирать другую информацию о процессоре, используя файл / proc / cpuinfo. Я читаю только название модели процессора, но вы можете открыть файл и увидеть другую информацию, представленную в файле, и использовать ее в программе. Вот результат.

Информация о процессоре с использованием файла cpuinfo

Соберем информацию о памяти с помощью Python.

Информация о памяти

Как и информация о процессоре, мы также можем получить информацию о памяти из двух мест. Один из них использует инструмент psutil, а второй - чтение файла proc / meminfo. Для начала приступим к сбору информации о памяти с помощью библиотеки psutil. Скопируйте следующий код в свою любимую IDE Python и запустите его.

# импорт необходимых модулей import psutil # запись функции преобразования байтов в GigaByte def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = round (gb, 2) return gb # Использование функции virtual_memory () он вернет кортеж virtual_memory = psutil.virtual_memory () # Это напечатает детали первичной памяти print ("[+] Всего присутствует память:", bytes_to_GB (virtual_memory.всего), «Гб») print («[+] Всего доступной памяти:», bytes_to_GB (virtual_memory.доступно), "Гб") print ("[+] Общий объем используемой памяти:", bytes_to_GB (virtual_memory.использовано), "Гб") print ("[+] Используемый процент:", virtual_memory.процент, "%") print ("\ n") # Будет напечатана информация о памяти подкачки, если она доступна swap = psutil.swap_memory () print (f "[+] Общий объем памяти подкачки: bytes_to_GB (swap.total) ") print (f" [+] Свободная память подкачки: bytes_to_GB (swap.бесплатно) ") print (f" [+] Используемая память подкачки: bytes_to_GB (swap.used) ") print (f" [+] Используемый процент: swap.процентов%")

Давайте посмотрим, что происходит в приведенном выше коде. В первой строке мы импортировали библиотеку psutil, а затем использовали ее функцию virtual_memory (), которая возвращает кортеж с информацией о виртуальной памяти. Затем мы используем функцию swap_memory (), чтобы получить информацию о памяти подкачки. Мы также создали функцию с именем bytes_to_GB (), которая преобразует байты в гигабайты для лучшей читаемости. Я получил следующий результат.

информация о памяти с помощью psutil

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

# Сбор информации о памяти из файла meminfo print ("\ nЧтение файла / proc / meminfo: \ n") с open ("/ proc / meminfo", "r") как f: lines = f.readlines () print ("[+]" + строки [0].strip ()) print ("[+]" + строки [1].полоска())

И вот результат:

информация о памяти с использованием файла meminfo

Информация о диске

До сих пор мы видели некоторые основные детали системы, детали процессора, детали памяти. Теперь давайте посмотрим информацию о диске, присутствующем в нашей машине. Чтобы извлечь информацию о диске, мы будем использовать модуль psutil, чтобы упростить нашу задачу, и нам не нужно изобретать колесо. Посмотрите на приведенный ниже код, чтобы увидеть рабочий пример кода. Вы можете скопировать код и запустить его в своей любимой среде IDE на Python.

# импорт необходимых модулей import psutil # доступ ко всем разделам диска disk_partitions = psutil.disk_partitions () # запись функции для преобразования байтов в гигабайты def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = round (gb, 2) return gb # отображение раздела и информации об использовании раздела в disk_partitions: print ("[+] Partition Device:", раздел.устройство) print ("[+] Файловая система:", раздел.fstype) print ("[+] Mountpoint:", раздел.точка монтирования) disk_usage = psutil.disk_usage (раздел.точка монтирования) print ("[+] Общее дисковое пространство:", bytes_to_GB (disk_usage.всего), «ГБ») print («[+] Свободное место на диске:», bytes_to_GB (disk_usage.бесплатно), «ГБ») print («[+] Используемое дисковое пространство:», bytes_to_GB (disk_usage.использовано), "ГБ") print ("[+] Используемый процент:", disk_usage.проценты, "%") # получаем статистику чтения / записи с момента загрузки disk_rw = psutil.disk_io_counters () print (f "[+] Всего чтения с момента загрузки: bytes_to_GB (disk_rw.read_bytes) ГБ ") print (f" [+] Общая загрузка sice записи: bytes_to_GB (disk_rw.write_bytes) ГБ ")

В коде мы сначала импортировали библиотеку psutil, которая требуется для сбора информации о диске. Затем мы использовали его disk_partitions () функция для получения списка доступных разделов диска с их информацией. Мы также используем функцию disk_usage (), чтобы узнать об использовании этих разделов. Наконец, мы используем disk_io_counters () функция для получения общего числа операций чтения / записи с диска с момента загрузки.  Вот пример вывода.

информация о диске с использованием Python

Вы можете получить другой результат в зависимости от вашего диска и разделов.

Сетевая информация

Мы также можем собрать сетевую информацию системы с помощью библиотеки psutil. Для этого скопируйте следующий код в свою IDE python и запустите его.

# импорт необходимых модулей import psutil # запись функции для преобразования байтов в гигабайты def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = round (gb, 2) return gb # сбор всех сетевых интерфейсов ( виртуальный и физический) из системы if_addrs = psutil.net_if_addrs () # вывод информации о каждом сетевом интерфейсе для interface_name, interface_addresses в if_addrs.items (): для адреса в interface_addresses: print ("\ n") print (f "Interface:", interface_name) if str (address.family) == 'AddressFamily.AF_INET ': print ("[+] IP-адрес:", адрес.адрес) print ("[+] Сетевая маска:", адрес.netmask) print ("[+] IP-адрес трансляции:", адрес.трансляция) elif str (адрес.family) == 'AddressFamily.AF_PACKET ': print ("[+] MAC-адрес:", адрес.адрес) print ("[+] Сетевая маска:", адрес.netmask) print ("[+] MAC широковещательной рассылки:", адрес.broadcast) # получение статистики чтения / записи сети с момента загрузки print ("\ n") net_io = psutil.net_io_counters () print ("[+] Всего отправлено байт:", bytes_to_GB (net_io.bytes_sent)) print ("[+] Всего получено байтов:", bytes_to_GB (net_io.bytes_recv))

Вот пример вывода с моего тестового ПК.

сетевая информация с использованием Python

Другая информация об оборудовании

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

Если вы используете ноутбук, вы можете использовать псутил.датчики_батареи () для получения информации о батарее. Для этого скопируйте и запустите следующий код в своей среде разработки Python.

импортировать psutil battery = psutil.sensor_battery () print ("[+] Процент батареи:", round (батарея.процент, 1), "%") print ("[+] Осталось заряда батареи:", round (батарея.secsleft / 3600, 2), "hr") print ("[+] Power Plugged:", аккумулятор.power_plugged)

В приведенном выше коде мы используем датчики_батареи () функция для получения информации о батарее, такой как процент заряда батареи, оставшееся время, подключено питание или нет. Запустив код на моем компьютере, я получил следующий результат.

информация о батарее с использованием Python

Мы также можем использовать библиотеку psutil для получения скорости вращения вентилятора (оборотов в минуту) с помощью функции sensor_fan () во время работы вентилятора. Psutil также можно использовать для измерения температуры различных устройств. Мы можем сделать это с помощью функции sensor_temperatures () модуля psutil. Я оставляю это делать вам для практики.

Окончательный сценарий

Теперь давайте объединим все коды с построением окончательной программы, чтобы собрать все детали системы и оборудования, которые мы обсуждали. Вы можете скопировать следующую программу и запустить ее в своей среде разработки Python.

# импорт необходимых модулей import platform from datetime import datetime import psutil import os # Сначала мы распечатаем основную системную информацию # с помощью модуля платформы print ("\ n \ t \ t \ t Основная информация о системе \ n") print (" [+] Архитектура: ", платформа.архитектура () [0]) print ("[+] Машина:", платформа.machine ()) print ("[+] Выпуск операционной системы:", платформа.release ()) print ("[+] Имя системы:", платформа.system ()) print ("[+] Версия операционной системы:", платформа.version ()) print ("[+] Узел:" + платформа.node ()) print ("[+] Платформа:", платформа.платформа ()) print ("[+] Процессор:", платформа.processor ()) # Использование библиотеки psutil для получения времени загрузки системы boot_time = datetime.fromtimestamp (psutil.boot_time ()) print ("[+] System Boot Time:", boot_time) # получение времени работы системы из файла uptime в каталоге proc с open ("/ proc / uptime", "r") как f: uptime = ж.читать().split ("") [0].strip () uptime = int (float (uptime)) uptime_hours = uptime // 3600 uptime_minutes = (uptime% 3600) // 60 print ("[+] Время работы системы:" + str (uptime_hours) + ":" + str ( uptime_minutes) + "hours") # получение общего количества процессов, запущенных в данный момент pids = [] для subdir в os.listdir ('/ proc'): если подкаталог.isdigit (): pids.append (subdir) print ('Общее количество процессов: 0'.format (len (pids))) # Отображение информации о процессоре print ("\ n \ t \ t \ t CPU Information \ n") # Этот код напечатает количество имеющихся ядер процессора print ("[+] Number of Physical ядра: ", psutil.cpu_count (logical = False)) print ("[+] Общее количество ядер:", psutil.cpu_count (logic = True)) print ("\ n") # Это напечатает максимальную, минимальную и текущую частоту процессора cpu_frequency = psutil.cpu_freq () print (f "[+] Макс. частота: cpu_frequency.Максимум:.2f Mhz ") print (f" [+] Мин. Частота: cpu_frequency.мин:.2f Mhz ") print (f" [+] Текущая частота: cpu_frequency.Текущий:.2f Mhz ") print (" \ n ") # Будет напечатано использование ЦП на ядро ​​для i, процент в enumerate (psutil.cpu_percent (percpu = True, interval = 1)): print (f "[+] Использование ЦП ядра i: процент%") print (f "[+] Общее использование ЦП: psutil.cpu_percent ()% ") # чтение файла cpuinfo для вывода имени # ЦП с open (" / proc / cpuinfo "," r ") как f: file_info = f.readlines () cpuinfo = [x.полоска().split (":") [1] для x в file_info, если "имя модели" в x] для индекса, элемент в перечислении (cpuinfo): print ("[+] Processor" + str (index) + ":" + item ) # написание функции для преобразования байтов в GigaByte def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = round (gb, 2) return gb # Использование функции virtual_memory () вернет кортеж virtual_memory = psutil.virtual_memory () print ("\ n \ t \ t \ t Memory Information \ n") # Это распечатает детали первичной памяти print ("[+] Total Memory present:", bytes_to_GB (virtual_memory.всего), «Гб») print («[+] Всего доступной памяти:», bytes_to_GB (virtual_memory.доступно), "Гб") print ("[+] Общий объем используемой памяти:", bytes_to_GB (virtual_memory.использовано), "Гб") print ("[+] Используемый процент:", virtual_memory.процент, "%") print ("\ n") # Будет напечатана информация о памяти подкачки, если она доступна swap = psutil.swap_memory () print (f "[+] Общий объем памяти подкачки: bytes_to_GB (swap.total) ") print (f" [+] Свободная память подкачки: bytes_to_GB (swap.бесплатно) ") print (f" [+] Используемая память подкачки: bytes_to_GB (swap.used) ") print (f" [+] Используемый процент: swap.процент% ") # Сбор информации о памяти из файла meminfo print (" \ nЧтение файла / proc / meminfo: \ n ") с open (" / proc / meminfo "," r ") как f: lines = f.readlines () print ("[+]" + строки [0].strip ()) print ("[+]" + строки [1].strip ()) # доступ ко всем разделам диска disk_partitions = psutil.disk_partitions () print ("\ n \ t \ t \ t Disk Information \ n") # отображение раздела и информации об использовании для раздела в disk_partitions: print ("[+] Partition Device:", partition.устройство) print ("[+] Файловая система:", раздел.fstype) print ("[+] Mountpoint:", раздел.точка монтирования) disk_usage = psutil.disk_usage (раздел.точка монтирования) print ("[+] Всего на диске:", bytes_to_GB (disk_usage.всего), «ГБ») print («[+] Свободное место на диске:», bytes_to_GB (disk_usage.бесплатно), «ГБ») print («[+] Используемое дисковое пространство:», bytes_to_GB (disk_usage.использовано), "ГБ") print ("[+] Используемый процент:", disk_usage.проценты, "%") # получаем статистику чтения / записи с момента загрузки disk_rw = psutil.disk_io_counters () print (f "[+] Всего чтения с момента загрузки: bytes_to_GB (disk_rw.read_bytes) ГБ ") print (f" [+] Общая загрузка sice записи: bytes_to_GB (disk_rw.write_bytes) GB ") # сбор всех сетевых интерфейсов (виртуальных и физических) из системы if_addrs = psutil.net_if_addrs () print ("\ n \ t \ t \ t Network Information \ n") # выводит информацию о сетевых интерфейсах eah для interface_name, interface_addresses в if_addrs.items (): для адреса в interface_addresses: print (f "Интерфейс:", interface_name) if str (address.family) == 'AddressFamily.AF_INET ': print ("[+] IP-адрес:", адрес.адрес) print ("[+] Сетевая маска:", адрес.netmask) print ("[+] IP-адрес трансляции:", адрес.трансляция) elif str (адрес.family) == 'AddressFamily.AF_PACKET ': print ("[+] MAC-адрес:", адрес.адрес) print ("[+] Сетевая маска:", адрес.netmask) print ("[+] MAC широковещательной рассылки:", адрес.broadcast) # получение статистики чтения / записи сети с момента загрузки net_io = psutil.net_io_counters () print ("[+] Всего отправлено байт:", bytes_to_GB (net_io.bytes_sent)) print ("[+] Всего получено байтов:", bytes_to_GB (net_io.bytes_recv)) # Получение информации о батарее battery = psutil.sensor_battery () print ("\ n \ t \ t \ t Информация о батарее \ n") print ("[+] Процент батареи:", round (батарея.процент, 1), "%") print ("[+] Осталось заряда батареи:", round (батарея.secsleft / 3600, 2), "hr") print ("[+] Power Plugged:", аккумулятор.power_plugged)

Запустив этот код, мы получим следующий вывод.

инструмент для извлечения информации о системе и оборудовании с помощью Python

Если вы хотите улучшить программу или хотите загрузить код, вы можете сделать это на моей странице Github.

Заключение

Это полное руководство по сбору интересной информации о системе и оборудовании с помощью python. Если у вас возникли проблемы с копированием кода, вы также можете найти полный исходный код в моем репозитории Github. Вы также можете ознакомиться с нашим руководством по работе с операционной системой в python, чтобы узнать о некоторых более интересных настройках python.

SuperTuxKart для Linux
SuperTuxKart - отличная игра, созданная для того, чтобы бесплатно познакомить вас с Mario Kart в вашей системе Linux. Играть в нее довольно сложно и в...
Учебник Battle for Wesnoth
Битва за Веснот - одна из самых популярных стратегических игр с открытым исходным кодом, в которую вы можете играть сейчас. Эта игра не только очень д...
0 А.D. Руководство
Из множества существующих стратегических игр 0 A.D. удается выделиться как всеобъемлющее название и очень глубокая тактическая игра, несмотря на то, ч...