Programação

Extração de sistema Linux e informações de hardware usando Python

Extração de sistema Linux e informações de hardware usando Python

Encontrar hardware e informações do sistema no Linux é uma tarefa útil e interessante. Podemos extrair detalhes do sistema operacional, detalhes do usuário, detalhes da memória, detalhes da CPU e muito mais usando códigos python simples no Linux. Embora possamos realizar muitas dessas coisas usando script de terminal e bash, python é muito mais interessante.

Como um amante do python, queremos que todas as tarefas sejam feitas usando essa linguagem, então extrair informações de sistema e hardware com python é uma grande tarefa. Além disso, podemos aprender Linux e Python simultaneamente. Este artigo será bem longo, então reserve um tempo para ler o artigo inteiro e execute cada código para melhor compreensão.

Você pode copiar cada um dos códigos em um IDE python e executá-lo. Se você não tem um IDE python ou deseja comparar entre IDE, consulte nosso guia sobre os 10 principais IDE para Linux. A propósito, estou usando o VS Code como um IDE para escrever código. É de código aberto e fácil de usar. Se você deseja usar o Visual Studio Code, consulte nosso guia sobre como instalar o código VS no Linux.

Extração de informações do sistema usando Python

Neste artigo, desenvolveremos um programa que extrairá os seguintes detalhes:

Para obter esses detalhes, devemos usar os módulos presentes na biblioteca padrão do Python. Alguns dos módulos que usaremos são sistema operacional, plataforma, etc. Também coloquei o código-fonte no Github; você pode ver uma demonstração do programa baixando do meu repositório Github e executando-o.

Para seguir este tutorial, é recomendado ter a versão mais recente do Python instalada em seu sistema. Você pode seguir nosso guia sobre a instalação de python no Linux.

Requisitos

Muitas das bibliotecas que usamos neste tutorial estão presentes na biblioteca padrão do python. Só precisamos instalar o pacote psutil. Você pode verificar importando-o. Se você não tiver o psutil instalado, poderá instalá-lo facilmente usando a ferramenta pip. Para instalar o pip em nosso sistema, precisamos executar o seguinte comando no terminal.

pip install psutil

Obtendo detalhes básicos do sistema

Agora que você instalou o psutil, vamos ver como usá-lo para reunir o sistema operacional usando o python. Estávamos usando o plataforma módulo presente na biblioteca padrão do python para coletar essas informações básicas do sistema. Você precisa copiar o seguinte código em seu IDE python favorito e executá-lo.

# importar os módulos necessários importar a plataforma # imprimir a arquitetura do sistema operacional imprimir ("[+] Arquitetura:", plataforma.arquitetura () [0]) # Exibindo a impressão da máquina ("[+] Máquina:", plataforma.máquina ()) # imprimindo as informações de versão do sistema operacional imprimir ("[+] Versão do sistema operacional:", plataforma.release ()) # imprime o nome do sistema atualmente em uso print ("[+] Nome do sistema:", plataforma.system ()) # Esta linha irá imprimir a versão do seu sistema operacional print ("[+] Operating System Version:", platform.version ()) # Isso imprimirá o Nó ou nome de host de seu sistema operacional print ("[+] Node:" + platform.node ()) # Isso imprimirá a impressão da plataforma do seu sistema ("[+] Platform:", platform.plataforma ()) # Isso irá imprimir as informações do processador print ("[+] Processador:", plataforma.processador())

No código acima, primeiro importamos o módulo da plataforma presente na biblioteca padrão do python. Depois de importar o módulo, usamos as funções do módulo da plataforma para obter as informações necessárias. Ao executar o código no meu dispositivo, obtive a seguinte saída.

informações básicas do sistema usando python

Como podemos ver na saída, o programa exibe muitos detalhes importantes sobre o sistema operacional, como arquitetura do sistema, plataforma e muito mais.

Tempo de atividade do sistema

Também podemos obter o tempo de inicialização do sistema e o tempo de atividade do sistema em python. Precisamos usar o psutil biblioteca que instalamos anteriormente. Podemos obter o tempo de atividade do sistema lendo o arquivo de tempo de atividade presente no diretório proc no Linux.

Copie o seguinte código em seu IDE python favorito e execute-o.

from datetime import datetime import psutil # Usando a biblioteca psutil para obter o tempo de inicialização do sistema boot_time = datetime.fromtimestamp (psutil.boot_time ()) print ("[+] Tempo de inicialização do sistema:", boot_time)

Este código irá imprimir o tempo de inicialização, ou seja, o tempo em que o sistema foi inicializado. Ao executar o programa no meu PC, obtive o seguinte resultado.

tempo de inicialização do sistema usando python

Também podemos ver o tempo de atividade do sistema, que é o tempo durante o qual o sistema está funcionando. Precisamos ler o arquivo de tempo de atividade do diretório proc, conforme mostrado no código abaixo.

# obter o tempo de atividade do sistema a partir do arquivo de tempo de atividade no diretório proc com open ("/ proc / uptime", "r") como f: uptime = f.leitura().dividir ("") [0].strip () uptime = int (float (uptime)) uptime_hours = uptime // 3600 uptime_minutes = (uptime% 3600) // 60 print ("[+] System Uptime:" + str (uptime_hours) + ":" + str ( uptime_minutes) + "horas")

Eu tenho a seguinte saída sobre a execução do código.

tempo de atividade do sistema usando python

Processos

Também podemos usar o python para obter uma lista dos processos em execução no momento, número total de processos. Precisamos executar o seguinte código.

import os pids = [] para subdir em os.listdir ('/ proc'): if subdir.isdigit (): pids.append (subdir) print ('Número total de processos: 0'.formato (len (pids)))

Ao executar o código, obtive a saída, conforme mostrado na imagem abaixo.

número total de processos

Informação do usuário

Também podemos obter a lista de todos os usuários presentes em nosso dispositivo Linux usando a biblioteca pwd presente na biblioteca padrão python. Para fazer isso, você precisa copiar o seguinte código em seu IDE python e executá-lo.

import pwd users = pwd.getpwall () para usuário em usuários: imprimir (usuário.pw_name, usuário.pw_shell)

Ao executar o código acima, você obterá todos os usuários presentes em seu dispositivo e suas conchas.

Informação da CPU

Reunimos os detalhes do sistema agora para coletar algumas informações sobre a CPU usada por nossa máquina. Podemos coletar informações da CPU de nossa máquina Linux de duas maneiras. A primeira e mais fácil maneira é usar o psutil módulo e a segunda maneira é lendo o arquivo / proc / cpuinfo.

Vamos ver como podemos usar a biblioteca psutil para obter as informações da CPU. Você precisa copiar o seguinte código em seu IDE python favorito e executá-lo.

# importando os pacotes necessários import psutil # Este código imprimirá o número de núcleos da CPU presentes print ("[+] Número de núcleos físicos:", psutil.cpu_count (lógico = Falso)) print ("[+] Número total de núcleos:", psutil.cpu_count (lógico = Verdadeiro)) print ("\ n") # Isso imprimirá a frequência máxima, mínima e atual da CPU cpu_frequency = psutil.cpu_freq () print (f "[+] Freqüência máxima: cpu_frequency.max:.2f Mhz ") print (f" [+] Freqüência mínima: cpu_frequency.min:.2f Mhz ") print (f" [+] Frequência atual: cpu_frequency.atual:.2f Mhz ") print (" \ n ") # Isso imprimirá o uso de CPU por núcleo para i, porcentagem em enumerar (psutil.cpu_percent (percpu = True, intervalo = 1)): print (f "[+] Uso da CPU do núcleo i: porcentagem%") print (f "[+] Uso total da CPU: psutil.cpu_percent ()% ")

Vamos ver o que está acontecendo no programa acima. Na primeira linha, importamos o psutil módulo, que ajudará a reunir os detalhes da CPU. Na segunda e terceira linhas, usamos o cpu_count () função do psutil módulo para contar o número de núcleos de CPU. Em seguida, usamos a função cpu_freq () para obter a frequência máxima, mínima e atual. Por fim, usamos a função cpu_percent para psutil para encontrar o uso da CPU. Ao executar o código em minha máquina, obtive a seguinte saída.

Informações da CPU usando psutil

Como podemos ver na saída, todos os detalhes da CPU foram enviados pelo programa no terminal. Também podemos obter o nome da CPU lendo o arquivo / proc / cpuinfo usando python. Para fazer isso, precisamos executar o seguinte código.

# lendo o arquivo cpuinfo para imprimir o nome da # CPU presente com open ("/ proc / cpuinfo", "r") como f: file_info = f.readlines () cpuinfo = [x.faixa().split (":") [1] para x em file_info if "model name" in x] para index, item in enumerate (cpuinfo): print ("[+] Processor" + str (index) + ":" + item )

Também podemos coletar outras informações da CPU usando o arquivo / proc / cpuinfo. Eu só li o nome do modelo da CPU, mas você pode abrir o arquivo e ver as outras informações presentes no arquivo e pode usá-las no programa. Aqui está o resultado.

Informações da CPU usando o arquivo cpuinfo

Vamos reunir algumas informações sobre memória usando python.

Informação de Memória

Como as informações da CPU, também podemos obter informações da memória de dois lugares. Um é usar a ferramenta psutil e o segundo é ler o arquivo proc / meminfo. Para começar, vamos começar a reunir informações de memória usando a biblioteca psutil. Copie o seguinte código em seu IDE python favorito e execute-o.

# importando os módulos solicitados import psutil # escrevendo uma função para converter bytes em GigaByte def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = round (gb, 2) return gb # Usando a função virtual_memory () ele retornará uma tupla virtual_memory = psutil.virtual_memory () #Isso imprimirá os detalhes da memória primária print ("[+] Memória total presente:", bytes_to_GB (virtual_memory.total), "Gb") print ("[+] Memória total disponível:", bytes_to_GB (virtual_memory.disponível), "Gb") print ("[+] Memória total usada:", bytes_to_GB (virtual_memory.usado), "Gb") print ("[+] Porcentagem usada:", virtual_memory.percent, "%") print ("\ n") # Isto irá imprimir os detalhes da memória swap se disponível swap = psutil.swap_memory () print (f "[+] Memória swap total: bytes_to_GB (swap.total) ") print (f" [+] Memória swap livre: bytes_to_GB (swap.free) ") print (f" [+] Memória swap usada: bytes_to_GB (swap.usado) ") print (f" [+] Porcentagem usada: swap.por cento%")

Vamos ver o que está acontecendo no código acima. Na primeira linha, importamos a biblioteca psutil e, em seguida, usamos sua função virtual_memory (), que retorna uma tupla com informações de memória virtual. Então usamos a função swap_memory () para obter as informações da memória swap. Também construímos um nome de função bytes_to_GB (), que converterá os bytes em GigaBytes para melhor legibilidade. Eu tenho o seguinte resultado.

informações de memória usando psutil

Também podemos usar o arquivo meminfo presente no diretório proc do Linux para recuperar informações de memória como memória total, memória usada, etc. Para fazer isso, execute o seguinte código.

# Coletando informações de memória do arquivo meminfo print ("\ nLendo o arquivo / proc / meminfo: \ n") com open ("/ proc / meminfo", "r") como f: lines = f.readlines () print ("[+]" + linhas [0].strip ()) print ("[+]" + linhas [1].faixa())

E aqui está a saída:

informações de memória usando arquivo meminfo

Informação do disco

Até agora, vimos alguns detalhes básicos do sistema, detalhes da CPU, detalhes da memória. Agora vamos ver as informações sobre o disco presente em nossa máquina. Para extrair as informações do disco, usaremos o módulo psutil para tornar nossa tarefa mais fácil, e não precisamos reinventar a roda. Observe o código abaixo para ver um exemplo funcional do código. Você pode copiar o código e executar em seu IDE de python favorito.

# importing required modules import psutil # acessando todas as partições do disco disk_partitions = psutil.disk_partitions () # escrevendo uma função para converter bytes em bytes Giga def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = round (gb, 2) return gb # exibindo a partição e informações de uso para partição em disk_partitions: print ("[+] Dispositivo de partição:", partição.dispositivo) imprimir ("[+] Sistema de arquivos:", partição.fstype) print ("[+] Mountpoint:", partição.ponto de montagem) disk_usage = psutil.disk_usage (partição.ponto de montagem) print ("[+] Espaço total em disco:", bytes_to_GB (disk_usage.total), "GB") print ("[+] Espaço livre em disco:", bytes_to_GB (disk_usage.free), "GB") print ("[+] Espaço em disco usado:", bytes_to_GB (disk_usage.usado), "GB") print ("[+] Porcentagem usada:", disk_usage.percent, "%") # obter estatísticas de leitura / gravação desde boot disk_rw = psutil.disk_io_counters () print (f "[+] Total de leitura desde o boot: bytes_to_GB (disk_rw.read_bytes) GB ") print (f" [+] Gravação total de inicialização do site: bytes_to_GB (disk_rw.write_bytes) GB ")

No código, importamos primeiro a biblioteca psutil, que é necessária para reunir as informações do disco. Então usamos seu disk_partitions () função para obter a lista de partições de disco disponíveis com suas informações. Também usamos a função disk_usage () para obter o uso dessas partições. Finalmente, usamos o disk_io_counters () função para obter o total de leitura / gravação do disco desde a inicialização.  Aqui está um exemplo de saída.

informações de disco usando python

Você pode obter alguma outra saída dependendo do seu disco e partições.

Informação de rede

Também podemos coletar as informações de rede do sistema usando a biblioteca psutil. Para fazer isso, copie o seguinte código em seu IDE python e execute-o.

# importando os módulos necessários import psutil # escrevendo uma função para converter os bytes em gigabytes def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = round (gb, 2) return gb # reunindo todas as interfaces de rede ( virtual e físico) do sistema if_addrs = psutil.net_if_addrs () # imprimindo as informações de cada interface de rede para interface_name, interface_addresses em if_addrs.items (): para endereço em interface_addresses: print ("\ n") print (f "Interface:", interface_name) if str (endereço.family) == 'AddressFamily.AF_INET ': print ("[+] Endereço IP:", endereço.endereço) imprimir ("[+] Máscara de rede:", endereço.máscara de rede) print ("[+] Broadcast IP:", endereço.transmitir) elif str (endereço.family) == 'AddressFamily.AF_PACKET ': print ("[+] Endereço MAC:", endereço.endereço) imprimir ("[+] Máscara de rede:", endereço.netmask) print ("[+] Broadcast MAC:", endereço.broadcast) # obtendo as estatísticas de leitura / gravação da rede desde o boot print ("\ n") net_io = psutil.net_io_counters () print ("[+] Total de bytes enviados:", bytes_to_GB (net_io.bytes_sent)) print ("[+] Total de bytes recebidos:", bytes_to_GB (net_io.bytes_recv))

Aqui está um exemplo de saída do meu PC de teste.

informações de rede usando python

Outras informações de hardware

Também podemos usar o psutil biblioteca para obter algumas outras informações de hardware como informações da bateria, velocidade de rotação dos ventiladores, informações de temperatura de vários dispositivos, etc. Vamos ver como podemos fazer isso um por um.

Se você estiver usando um laptop, pode usar o psutil.sensores_battery () função para obter as informações da bateria. Para fazer isso, copie e execute o seguinte código em seu IDE Python.

import psutil bateria = psutil.sensores_battery () print ("[+] Porcentagem da bateria:", redondo (bateria.por cento, 1), "%") imprimir ("[+] Tempo restante da bateria:", redondo (bateria.secsleft / 3600, 2), "hr") print ("[+] Power Plugged:", battery.power_plugged)

No código acima, usamos o sensores_battery () função para obter as informações da bateria, como porcentagem da bateria, tempo restante, energia conectada ou não. Ao executar o código em minha máquina, obtive a seguinte saída.

informações da bateria usando python

Também podemos usar a biblioteca psutil para obter o RPM (revoluções por minuto) do ventilador usando a função sensores_fan () enquanto o ventilador está funcionando. O psutil também pode ser usado para obter a temperatura de vários dispositivos. Podemos fazer isso usando a função sensores_temperatures () do psutil. Estou deixando isso para ser feito por você para praticar.

Roteiro Final

Agora vamos combinar todos os códigos com a construção de um programa final para reunir todos os detalhes de sistema e hardware que discutimos. Você pode copiar o programa a seguir e executá-lo em seu IDE python.

# importando a plataforma de importação dos módulos necessários do datetime import datetime import psutil import os # Primeiro, imprimiremos as informações básicas do sistema # usando o módulo da plataforma print ("\ n \ t \ t \ t Informações básicas do sistema \ n") print (" [+] Arquitetura: ", plataforma.arquitetura () [0]) imprimir ("[+] Máquina:", plataforma.máquina ()) imprimir ("[+] Versão do sistema operacional:", plataforma.release ()) print ("[+] Nome do sistema:", plataforma.system ()) print ("[+] Versão do sistema operacional:", plataforma.version ()) print ("[+] Nó:" + plataforma.node ()) print ("[+] Plataforma:", plataforma.plataforma ()) imprimir ("[+] Processador:", plataforma.processador ()) # Usando a biblioteca psutil para obter o tempo de inicialização do sistema boot_time = datetime.fromtimestamp (psutil.boot_time ()) print ("[+] System Boot Time:", boot_time) # obtendo o tempo de atividade do sistema a partir do arquivo uptime no diretório proc com open ("/ proc / uptime", "r") como f: uptime = f.leitura().dividir ("") [0].strip () uptime = int (float (uptime)) uptime_hours = uptime // 3600 uptime_minutes = (uptime% 3600) // 60 print ("[+] System Uptime:" + str (uptime_hours) + ":" + str ( uptime_minutes) + "hours") # obtendo o número total de processos em execução pids = [] para subdir no sistema operacional.listdir ('/ proc'): if subdir.isdigit (): pids.append (subdir) print ('Número total de processos: 0'.format (len (pids))) # Exibindo as informações da CPU imprimir ("\ n \ t \ t \ t Informações da CPU \ n") # Este código imprimirá o número de núcleos da CPU presentes print ("[+] Número de Físico núcleos: ", psutil.cpu_count (lógico = Falso)) print ("[+] Número total de núcleos:", psutil.cpu_count (lógico = Verdadeiro)) print ("\ n") # Isso imprimirá a frequência máxima, mínima e atual da CPU cpu_frequency = psutil.cpu_freq () print (f "[+] Freqüência máxima: cpu_frequency.max:.2f Mhz ") print (f" [+] Freqüência mínima: cpu_frequency.min:.2f Mhz ") print (f" [+] Frequência atual: cpu_frequency.atual:.2f Mhz ") print (" \ n ") # Isso imprimirá o uso de CPU por núcleo para i, porcentagem em enumerar (psutil.cpu_percent (percpu = True, intervalo = 1)): print (f "[+] Uso da CPU do núcleo i: porcentagem%") print (f "[+] Uso total da CPU: psutil.cpu_percent ()% ") # lendo o arquivo cpuinfo para imprimir o nome da # CPU presente com open (" / proc / cpuinfo "," r ") como f: file_info = f.readlines () cpuinfo = [x.faixa().split (":") [1] para x em file_info if "model name" in x] para index, item in enumerate (cpuinfo): print ("[+] Processor" + str (index) + ":" + item ) # escrevendo uma função para converter bytes em GigaByte def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = round (gb, 2) return gb # Usando a função virtual_memory () ela retornará uma tupla virtual_memory = psutil.virtual_memory () print ("\ n \ t \ t \ t Informações de memória \ n") #Isso imprimirá os detalhes da memória primária print ("[+] Total Memory present:", bytes_to_GB (virtual_memory.total), "Gb") print ("[+] Memória total disponível:", bytes_to_GB (virtual_memory.disponível), "Gb") print ("[+] Memória total usada:", bytes_to_GB (virtual_memory.usado), "Gb") print ("[+] Porcentagem usada:", virtual_memory.percent, "%") print ("\ n") # Isto irá imprimir os detalhes da memória swap se disponível swap = psutil.swap_memory () print (f "[+] Memória swap total: bytes_to_GB (swap.total) ") print (f" [+] Memória swap livre: bytes_to_GB (swap.free) ") print (f" [+] Memória swap usada: bytes_to_GB (swap.usado) ") print (f" [+] Porcentagem usada: swap.percent% ") # Coletando informações de memória do arquivo meminfo print (" \ nLendo o arquivo / proc / meminfo: \ n ") com open (" / proc / meminfo "," r ") como f: lines = f.readlines () print ("[+]" + linhas [0].strip ()) print ("[+]" + linhas [1].strip ()) # acessando todas as partições de disco disk_partitions = psutil.disk_partitions () print ("\ n \ t \ t \ t Informações do disco \ n") # exibindo a partição e as informações de uso da partição em disk_partitions: print ("[+] Dispositivo de partição:", partição.dispositivo) imprimir ("[+] Sistema de arquivos:", partição.fstype) print ("[+] Mountpoint:", partição.ponto de montagem) disk_usage = psutil.disk_usage (partição.ponto de montagem) print ("[+] Espaço total em disco:", bytes_to_GB (disk_usage.total), "GB") print ("[+] Espaço livre em disco:", bytes_to_GB (disk_usage.free), "GB") print ("[+] Espaço em disco usado:", bytes_to_GB (disk_usage.usado), "GB") print ("[+] Porcentagem usada:", disk_usage.percent, "%") # obter estatísticas de leitura / gravação desde boot disk_rw = psutil.disk_io_counters () print (f "[+] Total de leitura desde o boot: bytes_to_GB (disk_rw.read_bytes) GB ") print (f" [+] Gravação total de inicialização do site: bytes_to_GB (disk_rw.write_bytes) GB ") # reunindo todas as interfaces de rede (virtuais e físicas) do sistema if_addrs = psutil.net_if_addrs () print ("\ n \ t \ t \ t Network Information \ n") # imprimindo as informações de cada interface de rede para interface_name, interface_addresses em if_addrs.items (): para endereço em interface_addresses: print (f "Interface:", interface_name) if str (endereço.family) == 'AddressFamily.AF_INET ': print ("[+] Endereço IP:", endereço.endereço) imprimir ("[+] Máscara de rede:", endereço.máscara de rede) print ("[+] Broadcast IP:", endereço.transmitir) elif str (endereço.family) == 'AddressFamily.AF_PACKET ': print ("[+] Endereço MAC:", endereço.endereço) imprimir ("[+] Máscara de rede:", endereço.máscara de rede) print ("[+] Broadcast MAC:", endereço.broadcast) # obtendo as estatísticas de leitura / gravação da rede desde boot net_io = psutil.net_io_counters () print ("[+] Total de bytes enviados:", bytes_to_GB (net_io.bytes_sent)) print ("[+] Total de bytes recebidos:", bytes_to_GB (net_io.bytes_recv)) # Obtendo as informações da bateria battery = psutil.sensores_battery () print ("\ n \ t \ t \ t Informações da bateria \ n") print ("[+] Porcentagem da bateria:", redondo (bateria.por cento, 1), "%") imprimir ("[+] Tempo restante da bateria:", redondo (bateria.secsleft / 3600, 2), "hr") print ("[+] Power Plugged:", battery.power_plugged)

Ao executar este código, obteremos a seguinte saída.

uma ferramenta para extrair informações de sistema e hardware usando python

Se você quiser melhorar o programa ou quiser baixar o código, você pode fazer isso na minha página do Github.

Conclusão

Este é o tutorial completo sobre como reunir algumas informações interessantes de sistema e hardware usando python. Se você tiver algum problema para copiar o código, você também pode encontrar o código-fonte completo em meu repositório Github. Você também pode querer ver nosso guia sobre como trabalhar com sistema operacional em python para alguns ajustes mais interessantes de python.

Como mostrar a sobreposição de OSD em aplicativos e jogos Linux em tela cheia
Jogar jogos em tela cheia ou usar aplicativos em modo de tela cheia sem distração pode cortar você das informações relevantes do sistema visíveis em u...
Top 5 cartas de captura de jogos
Todos nós vimos e amamos streaming de jogos no YouTube. PewDiePie, Jakesepticye e Markiplier são apenas alguns dos melhores jogadores que ganharam mil...
Como desenvolver um jogo no Linux
Uma década atrás, poucos usuários de Linux preveriam que seu sistema operacional favorito um dia seria uma plataforma de jogos popular para videogames...