Programmering

Extrahera Linux-system och maskinvaruinformation med Python

Extrahera Linux-system och maskinvaruinformation med Python

Att hitta maskinvara och systeminformation i Linux är en praktisk och intressant uppgift. Vi kan extrahera operativsystemdetaljer, användardetaljer, minnesinformation, CPU-detaljer och mycket mer med enkla pythonkoder på Linux. Även om vi kan utföra många av dessa saker med terminal- och bash-skript, är python mycket mer intressant.

Som en pythonälskare vill vi att varje uppgift ska göras med det språket, så att extrahera system- och hårdvaruinformation med python är en fantastisk uppgift. Vi kan också lära oss både Linux och python samtidigt. Den här artikeln kommer att vara ganska lång, så ta dig tid att läsa hela artikeln och köra varje kod för bättre förståelse.

Du kan kopiera var och en av koderna i en python IDE och köra den. Om du inte har en python IDE eller vill jämföra mellan IDE, se vår guide på topp 10 IDE för Linux. Förresten använder jag VS-koden som IDE för att skriva kod. Det är öppen källkod och lätt att använda. Om du vill använda Visual Studio-kod, se vår guide om installation av VS-kod på Linux.

Extrahera systeminformation med Python

I den här artikeln kommer vi att utveckla ett program som extraherar följande detaljer:

För att få dessa detaljer ska vi använda modulerna i Python-standardbiblioteket. Några av de moduler vi kommer att använda är OS, plattform osv. Jag har också lagt källkoden i Github; Du kan se en demo av programmet genom att ladda ner från mitt Github-arkiv och köra det.

För att följa denna handledning rekommenderas att den senaste pythonversionen är installerad i ditt system. Du kan följa vår guide för installation av python på Linux.

Krav

Många av de bibliotek vi använder i den här självstudien finns i python-standardbiblioteket. Vi behöver bara installera paketet psutil. Du kan kontrollera det genom att importera det. Om du inte har installerat psutil kan du enkelt installera det med pip-verktyget. För att installera pip i vårt system måste vi köra följande kommando i terminalen.

pip installera psutil

Få grundläggande systeminformation

Nu när du har installerat psutil, låt oss se hur man använder den för att samla operativsystem med python. Vi använde plattform modul som finns i pythons standardbibliotek för att samla in denna grundläggande systeminformation. Du måste kopiera följande kod i din favorit python IDE och köra den.

# importera de nödvändiga modulerna importplattform # skriva ut arkitekturen för OS-utskriften ("[+] Architecture:", plattform.arkitektur () [0]) # Visar maskinutskrift ("[+] Maskin:", plattform.maskin ()) # utskrift av operativsystemets utgivningsinformation ("[+] Operativsystemutgåva:", plattform.release ()) # skriver ut det systemnamn som för närvarande skrivs ut ("[+] Systemnamn:", plattform.system ()) # Denna rad skriver ut versionen av ditt operativsystems utskrift ("[+] Version av operativsystem:", plattform.version ()) # Detta skriver ut noden eller värdnamnet för ditt operativsystems utskrift ("[+] nod:" + plattform.node ()) # Detta skriver ut din systemplattformsutskrift ("[+] Platform:", platform.platform ()) # Detta skriver ut processorinformationsutskriften ("[+] Processor:", plattform.processor ())

I ovanstående kod importerade vi först plattformsmodulen som finns i python-standardbiblioteket. Efter att ha importerat modulen använder vi plattformsmodulens funktioner för att få den information som krävs. När jag körde koden på min enhet fick jag följande utdata.

grundläggande systeminformation med python

Som vi kan se i utdata visar programmet många viktiga detaljer om operativsystemet som systemarkitektur, plattform och mycket mer.

System Uptime

Vi kan också få systemstarttiden och systemets driftstid i python. Vi måste använda psutil bibliotek som vi har installerat tidigare. Vi kan få systemets driftstid genom att läsa upptidstiden i proc-katalogen i Linux.

Kopiera följande kod i din favorit python IDE och kör den.

från datetime-import datetime-import psutil # Använda psutil-biblioteket för att få starttiden för systemets starttid = datetime.fromtimestamp (psutil.starttid ()) utskrift ("[+] Systemstarttid:", starttid)

Den här koden skriver ut starttiden, vilket betyder den tid då systemet startades. När jag körde programmet på min dator fick jag följande utdata.

systemstarttid med python

Vi kan också se systemets driftstid, vilket är den tid som systemet körs. Vi måste läsa proc-katalogens drifttidsfil, som visas i koden nedan.

# få systemet upp tid från uptime-filen i proc-katalogen med open ("/ proc / uptime", "r") som f: uptime = f.läsa().split ("") [0].strip () uptime = int (float (uptime)) uptime_hours = uptime // 3600 uptime_minutes = (uptime% 3600) // 60 print ("[+] System Uptime:" + str (uptime_hours) + ":" + str ( upptid_minuter) + "timmar")

Jag har följande utdata när jag kör koden.

systemdrifttid med python

Processer

Vi kan också använda python för att få en lista över processer som körs, totalt antal processer. Vi måste köra följande kod.

importera os pids = [] för undermapp i os.listdir ('/ proc'): om subdir.isdigit (): pids.lägg till (underkatalog) utskrift ('Totalt antal processer: 0'.format (len (pids)))

När jag körde koden fick jag utdata, som visas i bilden nedan.

totalt antal processer

användar information

Vi kan också få en lista över alla användare som finns i vår Linux-enhet med hjälp av pwd-biblioteket som finns i python-standardbiblioteket. För att göra detta måste du kopiera följande kod i din python IDE och köra den.

importera pwd-användare = pwd.getpwall () för användare i användare: skriv ut (användare.pw_name, användare.pw_shell)

När du kör ovanstående kod får du alla användare närvarande i din enhet och deras skal.

CPU-information

Vi har samlat in systemdetaljerna nu för att samla in lite information om CPU: n som används av vår maskin. Vi kan samla in CPU-information från vår Linux-maskin på två sätt. Det första och enklaste sättet är att använda psutil modul och det andra sättet är att läsa filen / proc / cpuinfo.

Låt oss se hur vi kan använda psutil-biblioteket för att få CPU-information. Du måste kopiera följande kod till din favorit python IDE och köra den.

# importera de nödvändiga paketen importera psutil # Den här koden kommer att skriva ut antalet CPU-kärnor som är närvarande ("[+] Antal fysiska kärnor:", psutil.cpu_count (logical = False)) print ("[+] Antal kärnor totalt:", psutil.cpu_count (logical = True)) print ("\ n") # Detta skriver ut den maximala, minimala och nuvarande CPU-frekvensen cpu_frequency = psutil.cpu_freq () tryck (f "[+] Max frekvens: cpu_frequency.max:.2f Mhz ") utskrift (f" [+] Min frekvens: cpu_frequency.min:.2f Mhz ") tryck (f" [+] Aktuell frekvens: cpu_frequency.nuvarande:.2f Mhz ") utskrift (" \ n ") # Detta skriver ut användningen av CPU per kärna för i, procent i räknat (psutil.cpu_percent (percpu = True, interval = 1)): print (f "[+] CPU-användning av Core i: percentage%") print (f "[+] Total CPU-användning: psutil.cpu_percent ()% ")

Låt oss se vad som händer i ovanstående program. I första raden importerade vi psutil modul som hjälper till att samla in CPU-detaljerna. I andra och tredje raden använder vi cpu_count () funktion av psutil modul för att räkna antalet CPU-kärnor. Sedan använde vi cpu_freq () -funktionen för att få max-, min- och strömfrekvensen. Äntligen använder vi cpu_percent-funktionen fo psutil för att hitta CPU-användningen. När jag körde koden i min maskin fick jag följande utdata.

CPU-information med psutil

Som vi kan se i utgången att alla CPU-detaljer har skickats ut av programmet i terminalen. Vi kan också få namnet på CPU: n genom att läsa filen / proc / cpuinfo med hjälp av python. För att göra detta måste vi köra följande kod.

# läser cpuinfo-filen för att skriva ut namnet på den CPU som finns med öppen ("/ proc / cpuinfo", "r") som f: file_info = f.readlines () cpuinfo = [x.remsa().split (":") [1] för x i file_info om "modellnamn" i x] för index, objekt i enumerate (cpuinfo): print ("[+] Processor" + str (index) + ":" + item )

Vi kan också samla in annan CPU-information med filen / proc / cpuinfo. Jag läste bara CPU-modellnamnet, men du kan öppna filen och se den andra informationen som finns i filen och kan använda dem i programmet. Här är resultatet.

CPU-information med cpuinfo-fil

Låt oss samla in lite information om minne med python.

Minnesinformation

Liksom CPU-informationen kan vi också få minnesinformation från två platser. En använder psutil-verktyget, och den andra är genom att läsa proc / meminfo-filen. Till att börja med, låt oss börja samla in minnesinformation med psutil-biblioteket. Kopiera följande kod till din favorit python IDE och kör den.

# importera de nödvändiga modulerna importera psutil # skriva en funktion för att konvertera byte till GigaByte def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = rund (gb, 2) returnera gb # Använda funktionen virtual_memory () det returnerar en tuple virtual_memory = psutil.virtual_memory () # Detta kommer att skriva ut den primära minnesinformationens utskrift ("[+] Totalt minne närvarande:", bytes_to_GB (virtual_memory.totalt), "Gb") print ("[+] Totalt tillgängligt minne:", bytes_to_GB (virtual_memory.tillgängligt), "Gb") print ("[+] Totalt minne som används:", bytes_to_GB (virtual_memory.used), "Gb") print ("[+] Procentandel som används:", virtual_memory.procent, "%") utskrift ("\ n") # Detta kommer att skriva ut bytesminnesinformation om tillgänglig swap = psutil.swap_memory () print (f "[+] Totalt swap-minne: bytes_to_GB (swap).totalt) ") skriv ut (f" [+] Gratis swap-minne: bytes_to_GB (swap.gratis) ") print (f" [+] Användt bytminne: bytes_to_GB (swap.används) ") print (f" [+] Procentandel som används: swap.procent%")

Låt oss se vad som händer i ovanstående kod. På första raden importerade vi psutil-biblioteket och använde sedan dess virtual_memory () -funktion, som returnerar en tupel med information om virtuellt minne. Sedan använder vi swap_memory () -funktionen för att få information om swap-minnet. Vi byggde också ett funktionsnamn bytes_to_GB (), som kommer att konvertera bytes till GigaBytes för bättre läsbarhet. Jag fick följande resultat.

minnesinformation med psutil

Vi kan också använda meminfo-filen som finns i Linux proc-katalog för att hämta minnesinformation som totalt minne, använt minne osv. För att göra detta, kör följande kod.

# Samla in minnesinformation från meminfo-filutskrift ("\ nLäs / proc / meminfo-filen: \ n") med öppen ("/ proc / meminfo", "r") som f: linjer = f.readlines () print ("[+]" + rader [0].strip ()) print ("[+]" + rader [1].remsa())

Och här är resultatet:

minnesinformation med meminfo-filen

Diskinformation

Hittills har vi sett några grundläggande systemdetaljer, CPU-detaljer, minnesdetaljer. Låt oss nu se informationen om disken som finns i vår maskin. För att extrahera diskinformation använder vi psutil-modulen för att göra vår uppgift enkel och vi behöver inte uppfinna hjulet på nytt. Titta på koden nedan för att se ett fungerande exempel på koden. Du kan kopiera koden och köra i din favorit pythons IDE.

# importera obligatoriska moduler importera psutil # åtkomst till alla diskpartitioner disk_partitions = psutil.disk_partitions () # skriver en funktion för att konvertera byte till Giga byte def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = rund (gb, 2) returnera gb # som visar partitions- och användningsinformation för partition i disk_partitions: print ("[+] Partition Device:", partition.enhet) skriv ut ("[+] File System:", partition.fstype) print ("[+] Mountpoint:", partition.mountpoint) disk_usage = psutil.disk_usage (partition.mountpoint) print ("[+] Total Disk Space:", bytes_to_GB (disk_användning).totalt), "GB") utskrift ("[+] Ledigt diskutrymme:", bytes_to_GB (disk_användning).gratis), "GB") utskrift ("[+] Användt diskutrymme:", bytes_to_GB (disk_användning).används), "GB") tryck ("[+] Procentandel som används:", disk_användning.procent, "%") # få läs / skriv-statistik sedan start disk_rw = psutil.disk_io_counters () skriv ut (f "[+] Totalt läst sedan start: bytes_to_GB (disk_rw.read_bytes) GB ") utskrift (f" [+] Totalt skrivstartsstart: bytes_to_GB (disk_rw.skriv_bytes) GB ")

I koden har vi först importerat psutil-biblioteket, vilket krävs för att samla in diskinformation. Sedan använde vi dess disk_partitions () funktion för att få listan över diskpartitioner tillgängliga med deras information. Vi använder också funktionen disk_usage () för att få användning av dessa partitioner. Slutligen använder vi disk_io_counters () funktion för att få skivans totala läsning / skrivning sedan start.  Här är ett exempel på utdata.

diskinformation med python

Du kan få lite annan utdata beroende på din disk och partitioner.

Nätverksinformation

Vi kan också samla in nätverksinformation för systemet med psutil-biblioteket. För att göra det, kopiera följande kod till din python IDE och kör den.

# importera nödvändiga moduler importera psutil # skriva en funktion för att konvertera bytes till gigabyte def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = rund (gb, 2) returnera gb # samla alla nätverksgränssnitt virtuellt och fysiskt) från systemet if_addrs = psutil.net_if_addrs () # skriver ut informationen för varje nätverksgränssnitt för gränssnittsnamn, gränssnittsadresser i if_addrs.objekt (): för adress i gränssnittsadresser: skriv ut ("\ n") skriv ut (f "Gränssnitt:", gränssnittsnamn) om str (adress.familj) == 'Adressfamilj.AF_INET ': skriv ut ("[+] IP-adress:", adress.adress) skriv ut ("[+] nätmask:", adress.netmask) print ("[+] Broadcast IP:", adress.sändning) elif str (adress.familj) == 'Adressfamilj.AF_PACKET ': skriv ut ("[+] MAC-adress:", adress.adress) skriv ut ("[+] nätmask:", adress.netmask) print ("[+] Broadcast MAC:", adress.sändning) # få läs- / skrivstatistik för nätverket sedan startutskrift ("\ n") net_io = psutil.net_io_counters () skriver ut ("[+] Totalt antal byten skickade:", bytes_to_GB (net_io.bytes_sent)) print ("[+] Totalt antal mottagna byte:", bytes_to_GB (net_io.bytes_recv))

Här är ett exempel på min testdator.

nätverksinformation med python

Annan hårdvaruinformation

Vi kan också använda psutil bibliotek för att få annan hårdvaruinformation som batteriinformation, fläkters rotationshastighet, olika enhets temperaturinformation, etc. Låt oss se hur vi kan göra detta en efter en.

Om du använder en bärbar dator kan du använda psutil.sensors_battery () för att få information om batteriet. För att göra det, kopiera och kör följande kod i din Python IDE.

importera psutil-batteri = psutil.sensors_battery () print ("[+] Batteriprocent:", rund (batteri.procent, 1), "%") utskrift ("[+] Batteritid kvar:", rund (batteri.secsleft / 3600, 2), "hr") print ("[+] Power Plugged:", batteri.power_plugged)

I ovanstående kod använder vi sensors_battery () funktion för att få information om batteriet, t.ex. batteriprocent, återstående tid, strömförsörjning eller inte. När jag körde koden i min maskin fick jag följande utdata.

batteriinformation med python

Vi kan också använda psutil-biblioteket för att få fläktens varvtal (varv per minut) med funktionen sensors_fan () medan fläkten är igång. Psutilen kan också användas för att få temperaturen på olika enheter. Vi kan göra det med hjälp av sensor_temperatures () -funktionen i psutil. Jag låter detta göras av dig för träning.

Sista skriptet

Låt oss nu kombinera alla koder med att bygga ett slutligt program för att samla alla system- och hårdvaruuppgifter som vi diskuterade. Du kan kopiera följande program och köra det i din python IDE.

# importera de nödvändiga modulerna importplattform från datetime import datetime import psutil import os # Först kommer vi att skriva ut den grundläggande systeminformationen # med plattformsmodulen skriva ut ("\ n \ t \ t \ t Grundläggande systeminformation \ n") utskrift (" [+] Arkitektur: ", plattform.arkitektur () [0]) tryck ("[+] Maskin:", plattform.maskin ()) print ("[+] Operativsystem Release:", plattform.release ()) print ("[+] Systemnamn:", plattform.system ()) print ("[+] Version av operativsystem:", plattform.version ()) print ("[+] Nod:" + plattform.node ()) print ("[+] Platform:", platform.plattform ()) print ("[+] Processor:", plattform.processor ()) # Använda psutil-biblioteket för att få starttiden för systemet boot_time = datetime.fromtimestamp (psutil.boot_time ()) print ("[+] System Boot Time:", boot_time) # får systemet upp tid från uptime-filen i proc-katalogen med öppen ("/ proc / uptime", "r") som f: uptime = f.läsa().split ("") [0].strip () uptime = int (float (uptime)) uptime_hours = uptime // 3600 uptime_minutes = (uptime% 3600) // 60 print ("[+] System Uptime:" + str (uptime_hours) + ":" + str ( uptime_minutes) + "timmar") # får det totala antalet processer som för närvarande kör pids = [] för subdir in OS.listdir ('/ proc'): om subdir.isdigit (): pids.lägg till (underkatalog) utskrift ('Totalt antal processer: 0'.format (len (pids))) # Visar CPU-informationsutskrift ("\ n \ t \ t \ t CPU-information \ n") # Den här koden kommer att skriva ut antalet CPU-kärnor som skrivs ut ("[+] Antal fysiska kärnor: ", psutil.cpu_count (logical = False)) print ("[+] Antal kärnor totalt:", psutil.cpu_count (logical = True)) print ("\ n") # Detta skriver ut den maximala, minimala och nuvarande CPU-frekvensen cpu_frequency = psutil.cpu_freq () tryck (f "[+] Max frekvens: cpu_frequency.max:.2f Mhz ") utskrift (f" [+] Min frekvens: cpu_frequency.min:.2f Mhz ") tryck (f" [+] Aktuell frekvens: cpu_frequency.nuvarande:.2f Mhz ") utskrift (" \ n ") # Detta skriver ut användningen av CPU per kärna för i, procent i räknat (psutil.cpu_percent (percpu = True, interval = 1)): print (f "[+] CPU-användning av kärna i: percentage%") print (f "[+] Total CPU-användning: psutil.cpu_percent ()% ") # läser cpuinfo-filen för att skriva ut namnet på den CPU som finns med öppen (" / proc / cpuinfo "," r ") som f: file_info = f.readlines () cpuinfo = [x.remsa().split (":") [1] för x i file_info om "modellnamn" i x] för index, objekt i enumerate (cpuinfo): print ("[+] Processor" + str (index) + ":" + item ) # att skriva en funktion för att konvertera byte till GigaByte def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = rund (gb, 2) returnera gb # Med funktionen virtual_memory () kommer den att returnera en virtuell minnesupplösning = psutil.virtual_memory () print ("\ n \ t \ t \ t Memory Information \ n") # Detta kommer att skriva ut den primära minnesinformationens utskrift ("[+] Totalt minne närvarande:", bytes_to_GB (virtual_memory.totalt), "Gb") print ("[+] Totalt tillgängligt minne:", bytes_to_GB (virtual_memory.tillgängligt), "Gb") print ("[+] Totalt minne som används:", bytes_to_GB (virtual_memory.used), "Gb") print ("[+] Procentandel som används:", virtual_memory.procent, "%") utskrift ("\ n") # Detta kommer att skriva ut bytesminnesinformation om tillgänglig swap = psutil.swap_memory () print (f "[+] Totalt swap-minne: bytes_to_GB (swap).totalt) ") skriv ut (f" [+] Gratis swap-minne: bytes_to_GB (swap.gratis) ") print (f" [+] Användt bytminne: bytes_to_GB (swap.används) ") print (f" [+] Procentandel som används: swap.procent% ") # Samla in minnesinformation från meminfo-filutskrift (" \ nLäs / proc / meminfo-filen: \ n ") med öppen (" / proc / meminfo "," r ") som f: linjer = f.readlines () print ("[+]" + rader [0].strip ()) print ("[+]" + rader [1].strip ()) # åtkomst till alla diskpartitioner disk_partitions = psutil.disk_partitions () print ("\ n \ t \ t \ t Diskinformation \ n") # visar partitions- och användningsinformation för partition i disk_partitions: print ("[+] Partition Device:", partition.enhet) skriv ut ("[+] File System:", partition.fstype) print ("[+] Mountpoint:", partition.mountpoint) disk_usage = psutil.disk_usage (partition.mountpoint) print ("[+] Total Disk Space:", bytes_to_GB (disk_användning).totalt), "GB") utskrift ("[+] Ledigt diskutrymme:", bytes_to_GB (disk_användning).gratis), "GB") utskrift ("[+] Användt diskutrymme:", bytes_to_GB (disk_användning).används), "GB") utskrift ("[+] Användningsprocent:", disk_användning.procent, "%") # få läs / skriv-statistik sedan start disk_rw = psutil.disk_io_counters () skriv ut (f "[+] Totalt läst sedan start: bytes_to_GB (disk_rw.read_bytes) GB ") utskrift (f" [+] Totalt skrivstartsstart: bytes_to_GB (disk_rw.write_bytes) GB ") # samlar alla nätverksgränssnitt (virtuella och fysiska) från systemet if_addrs = psutil.net_if_addrs () print ("\ n \ t \ t \ t Network Information \ n") # utskrift av information om eah-nätverksgränssnitt för gränssnittsnamn, gränssnittsadresser i if_addrs.objekt (): för adress i gränssnittsadresser: skriv ut (f "Gränssnitt:", gränssnittsnamn) om str (adress.familj) == 'Adressfamilj.AF_INET ': skriv ut ("[+] IP-adress:", adress.adress) skriv ut ("[+] nätmask:", adress.netmask) print ("[+] Broadcast IP:", adress.sändning) elif str (adress.familj) == 'Adressfamilj.AF_PACKET ': skriv ut ("[+] MAC-adress:", adress.adress) skriv ut ("[+] nätmask:", adress.netmask) print ("[+] Broadcast MAC:", adress.sändning) # får läs / skriv-statistiken för nätverket sedan start net_io = psutil.net_io_counters () skriver ut ("[+] Totalt antal byten skickade:", bytes_to_GB (net_io.bytes_sent)) print ("[+] Totalt antal mottagna byte:", bytes_to_GB (net_io.bytes_recv)) # Få batteriet Information batteri = psutil.sensors_battery () print ("\ n \ t \ t \ t Battery Information \ n") print ("[+] Battery Procent:", rund (batteri.procent, 1), "%") utskrift ("[+] Batteritid kvar:", rund (batteri.secsleft / 3600, 2), "hr") print ("[+] Power Plugged:", batteri.power_plugged)

När vi kör den här koden får vi följande utdata.

ett verktyg för att extrahera system- och hårdvaruinformation med hjälp av python

Om du vill förbättra programmet eller vill ladda ner koden kan du göra det från min Github-sida.

Slutsats

Det här är den fullständiga guiden för att samla in intressant system- och hårdvaruinformation med python. Om du har några problem med att kopiera koden kan du också hitta hela källkoden i min Github-repo. Du kanske också vill se vår guide om att arbeta med operativsystem i python för några mer intressanta python-tweaks.

Mus Så här ändrar du muspekare och markörstorlek, färg och schema på Windows 10
Så här ändrar du muspekare och markörstorlek, färg och schema på Windows 10
Muspekaren och markören i Windows 10 är mycket viktiga aspekter av operativsystemet. Detta kan också sägas för andra operativsystem, så i sanning är d...
Gratis och öppen källkodsmotorer för utveckling av Linux-spel
Den här artikeln kommer att täcka en lista över gratis motorer med öppen källkod som kan användas för att utveckla 2D- och 3D-spel på Linux. Det finns...
Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider är det tolfte tillskottet till Tomb Raider-serien - en action-äventyrsspelfranchise skapad av Eidos Montreal. Spelet mottogs...