Поиск информации об оборудовании и системе в 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. Нам нужно использовать псутил библиотека, которую мы установили ранее. Мы можем получить время безотказной работы системы, прочитав файл безотказной работы, находящийся в каталоге proc в Linux.
Скопируйте следующий код в свою любимую IDE Python и запустите его.
from datetime import datetime import psutil # Использование библиотеки psutil для получения времени загрузки системы boot_time = datetime.fromtimestamp (psutil.boot_time ()) print ("[+] Время загрузки системы:", boot_time)
Этот код напечатает время загрузки, то есть время, когда система загрузилась. Запустив программу на моем ПК, я получил следующий результат.
Мы также можем видеть время безотказной работы системы, то есть время, в течение которого система работает. Нам нужно прочитать файл работоспособности каталога 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 для получения списка запущенных в данный момент процессов, всего процессов. Нам нужно запустить следующий код.
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, чтобы найти использование ЦП. Запустив код на моем компьютере, я получил следующий результат.
Как мы видим в выводе, все детали процессора были выведены программой в терминале. Мы также можем получить имя процессора, прочитав файл / 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. Я читаю только название модели процессора, но вы можете открыть файл и увидеть другую информацию, представленную в файле, и использовать ее в программе. Вот результат.
Соберем информацию о памяти с помощью 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 (), которая преобразует байты в гигабайты для лучшей читаемости. Я получил следующий результат.
Мы также можем использовать файл meminfo, находящийся в каталоге proc Linux, для получения информации о памяти, такой как общая память, используемая память и т. Д. Для этого запустите следующий код.
# Сбор информации о памяти из файла meminfo print ("\ nЧтение файла / proc / meminfo: \ n") с open ("/ proc / meminfo", "r") как f: lines = f.readlines () print ("[+]" + строки [0].strip ()) print ("[+]" + строки [1].полоска())
И вот результат:
Информация о диске
До сих пор мы видели некоторые основные детали системы, детали процессора, детали памяти. Теперь давайте посмотрим информацию о диске, присутствующем в нашей машине. Чтобы извлечь информацию о диске, мы будем использовать модуль 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 () функция для получения общего числа операций чтения / записи с диска с момента загрузки. Вот пример вывода.
Вы можете получить другой результат в зависимости от вашего диска и разделов.
Сетевая информация
Мы также можем собрать сетевую информацию системы с помощью библиотеки 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.
импортировать psutil battery = psutil.sensor_battery () print ("[+] Процент батареи:", round (батарея.процент, 1), "%") print ("[+] Осталось заряда батареи:", round (батарея.secsleft / 3600, 2), "hr") print ("[+] Power Plugged:", аккумулятор.power_plugged)
В приведенном выше коде мы используем датчики_батареи () функция для получения информации о батарее, такой как процент заряда батареи, оставшееся время, подключено питание или нет. Запустив код на моем компьютере, я получил следующий результат.
Мы также можем использовать библиотеку 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)
Запустив этот код, мы получим следующий вывод.
Если вы хотите улучшить программу или хотите загрузить код, вы можете сделать это на моей странице Github.
Заключение
Это полное руководство по сбору интересной информации о системе и оборудовании с помощью python. Если у вас возникли проблемы с копированием кода, вы также можете найти полный исходный код в моем репозитории Github. Вы также можете ознакомиться с нашим руководством по работе с операционной системой в python, чтобы узнать о некоторых более интересных настройках python.