Å finne maskinvare- og systeminformasjon i Linux er en praktisk og interessant oppgave. Vi kan trekke ut operativsystemdetaljer, brukerdetaljer, minnedetaljer, CPU-detaljer og mye mer ved hjelp av enkle pythonkoder på Linux. Selv om vi kan utføre mange av disse tingene ved hjelp av terminal- og bash-skripting, er python mye mer interessant.
Som en python-elsker vil vi at hver oppgave skal gjøres ved hjelp av det språket, så å hente ut system- og maskinvareinformasjon med python er en flott oppgave. Vi kan også lære både Linux og python samtidig. Denne artikkelen vil være ganske lang, så ta deg god tid til å lese hele artikkelen og kjør hver kode for bedre forståelse.
Du kan kopiere hver av kodene i en python IDE og kjøre den. Hvis du ikke har en python IDE eller ønsker å sammenligne mellom IDE, se vår guide på topp 10 IDE for Linux. Forresten, jeg bruker VS-koden som IDE for å skrive kode. Den er åpen kildekode og enkel å bruke. Hvis du vil bruke Visual Studio Code, se vår guide om installering av VS-kode på Linux.
Pakke ut systeminformasjon ved hjelp av Python
I denne artikkelen vil vi utvikle et program som trekker ut følgende detaljer:
- Grunnleggende systemdetaljer
- CPU-detaljer
- Minneinformasjon
- Diskbruk
- Nettverksinformasjon
- Andre maskinvaredetaljer
For å få disse detaljene, skal vi bruke modulene som er tilstede i Python-standardbiblioteket. Noen av modulene vi skal bruke er OS, plattform osv. Jeg har også lagt kildekoden i Github; du kan se en demo av programmet ved å laste ned fra Github-depotet mitt og kjøre det.
For å følge denne opplæringen anbefales det å ha den siste pythonversjonen installert på systemet ditt. Du kan følge vår guide for installering av python på Linux.
Krav
Mange av bibliotekene vi bruker i denne opplæringen, er til stede i python-standardbiblioteket. Vi trenger bare å installere pakken psutil. Du kan sjekke det ved å importere det. Hvis du ikke har psutil installert, kan du enkelt installere det ved hjelp av pip-verktøyet. For å installere pip i systemet vårt, må vi kjøre følgende kommando i terminalen.
pip installer psutil
Få grunnleggende systemdetaljer
Nå som du har installert psutil, la oss se hvordan du bruker den til å samle OS ved hjelp av python. Vi brukte plattform modul til stede i python standardbiblioteket for å samle inn denne grunnleggende systeminformasjonen. Du må kopiere følgende kode i din favoritt python IDE og kjøre den.
# importerer de nødvendige modulene importplattform # skriver ut arkitekturen til operativsystemet ("[+] arkitektur:", plattform.arkitektur () [0]) # Viser maskinutskrift ("[+] Maskin:", plattform.maskin ()) # utskrift av operativsystemets utgivelsesutskrift ("[+] Operativsystemutgivelse:", plattform.release ()) # skriver ut systemnavnet som skrives ut for øyeblikket ("[+] Systemnavn:", plattform.system ()) # Denne linjen vil skrive ut versjonen av operativsystemutskriften ("[+] Operativsystemversjon:", plattform.versjon ()) # Dette vil skrive ut noden eller vertsnavnet til operativsystemutskriften ("[+] Node:" + plattform.node ()) # Dette vil skrive ut systemplattformens utskrift ("[+] Plattform:", plattform.platform ()) # Dette vil skrive ut prosessorinformasjonsutskriften ("[+] Prosessor:", plattform.prosessor ())
I koden ovenfor importerte vi først plattformsmodulen i python-standardbiblioteket. Etter import av modulen bruker vi plattformmodulens funksjoner for å få den nødvendige informasjonen. Da jeg kjørte koden på enheten min, fikk jeg følgende utdata.
Som vi kan se i utdataene, viser programmet mange viktige detaljer om operativsystemet som systemarkitektur, plattform og mye mer.
System Uptime
Vi kan også få systemstarttiden og systemets oppetid i python. Vi må bruke psutil biblioteket som vi har installert tidligere. Vi kan få system oppetid ved å lese oppetid filen til stede i proc katalogen i Linux.
Kopier følgende kode i din favoritt python IDE og kjør den.
fra datetime import datetime import psutil # Bruke psutil-biblioteket for å få oppstartstiden til systemet boot_time = datetime.fromtimestamp (psutil.boot_time ()) utskrift ("[+] System Boot Time:", boot_time)
Denne koden vil skrive ut oppstartstiden, noe som betyr tidspunktet da systemet ble startet opp. Da jeg kjørte programmet på PCen min, fikk jeg følgende utdata.
Vi kan også se systemets oppetid, som er tiden systemet kjører for. Vi må lese proc-katalogens oppetid-fil, som vist i koden nedenfor.
# få systemet opp tid fra oppetid-filen i proc-katalogen med åpen ("/ proc / oppetid", "r") som f: oppetid = f.lese().split ("") [0].strip () oppetid = int (flyt (oppetid)) oppetid_tid = oppetid // 3600 oppetid_minutter = (oppetid% 3600) // 60 utskrift ("[+] System Uptime:" + str (uptime_hours) + ":" + str ( oppetid_minutter) + "timer")
Jeg har følgende utgang når jeg kjører koden.
Prosesser
Vi kan også bruke python for å få en liste over nåværende prosesser, totalt antall prosesser. Vi må kjøre følgende kode.
importer os pids = [] for undermappe i os.listdir ('/ proc'): hvis undermappe.isdigit (): pids.legge til (undermappe) utskrift ('Totalt antall prosesser: 0'.format (len (pids)))
Da jeg kjørte koden, fikk jeg utdataene, som vist på bildet nedenfor.
brukerinformasjon
Vi kan også få listen over alle brukere som er til stede i Linux-enheten vår ved hjelp av pwd-biblioteket som er til stede i python-standardbiblioteket. For å gjøre dette må du kopiere følgende kode i python IDE og kjøre den.
importer pwd brukere = pwd.getpwall () for bruker i brukere: skriv ut (bruker.pw_name, bruker.pw_shell)
Når du kjører ovennevnte kode, får du alle brukerne til stede på enheten din og deres skall.
CPU-informasjon
Vi har samlet systemdetaljene nå for å samle inn litt informasjon om prosessoren som brukes av maskinen vår. Vi kan samle CPU-informasjon fra Linux-maskinen vår på to måter. Den første og enkleste måten er å bruke psutil modul og den andre måten er ved å lese filen / proc / cpuinfo.
La oss se hvordan vi kan bruke psutil-biblioteket for å få CPU-informasjonen. Du må kopiere følgende kode til din favoritt python IDE og kjøre den.
# importerer nødvendige pakker importerer psutil # Denne koden skriver ut antall CPU-kjerner som er til stede ("[+] Antall fysiske kjerner:", psutil.cpu_count (logical = False)) print ("[+] Antall kjerner totalt:", psutil.cpu_count (logical = True)) print ("\ n") # Dette vil skrive ut maksimum, minimum og gjeldende CPU-frekvens cpu_frequency = psutil.cpu_freq () utskrift (f "[+] Maks frekvens: cpu_frequency.maks:.2f Mhz ") utskrift (f" [+] Min frekvens: cpu_frequency.min:.2f Mhz ") utskrift (f" [+] Nåværende frekvens: cpu_frequency.nåværende:.2f Mhz ") utskrift (" \ n ") # Dette vil skrive ut bruken av CPU per kjerne i, prosent oppregnet (psutil.cpu_percent (percpu = True, interval = 1)): print (f "[+] CPU Use of Core i: percentage%") print (f "[+] Total CPU Usage: psutil.cpu_percent ()% ")
La oss se hva som skjer i programmet ovenfor. I første linje importerte vi psutil modul, som vil hjelpe til med å samle CPU-detaljene. I andre og tredje linje bruker vi cpu_count () funksjon av psutil modul for å telle antall CPU-kjerner. Så brukte vi funksjonen cpu_freq () for å få maks, min og nåværende frekvens. Til slutt bruker vi funksjonen cpu_percent fo psutil for å finne CPU-bruken. Da jeg kjørte koden i maskinen min, fikk jeg følgende utdata.
Som vi kan se i utdataene at alle CPU-detaljene er sendt ut av programmet i terminalen. Vi kan også få navnet på CPU-en ved å lese filen / proc / cpuinfo ved hjelp av python. For å gjøre dette må vi kjøre følgende kode.
# leser cpuinfo-filen for å skrive ut navnet på # CPU til stede med åpen ("/ proc / cpuinfo", "r") som f: file_info = f.readlines () cpuinfo = [x.stripe ().split (":") [1] for x i file_info hvis "modellnavn" i x] for indeks, element i enumerate (cpuinfo): print ("[+] Prosessor" + str (index) + ":" + item )
Vi kan også samle inn annen CPU-informasjon ved hjelp av / proc / cpuinfo-filen. Jeg leser bare navnet på CPU-modellen, men du kan åpne filen og se den andre informasjonen som er tilstede i filen og kan bruke dem i programmet. Her er utdataene.
La oss samle litt informasjon om minne ved hjelp av python.
Minneinformasjon
I likhet med CPU-informasjonen, kan vi også få minneinformasjon fra to steder. Den ene bruker psutil-verktøyet, og den andre er ved å lese proc / meminfo-filen. Til å begynne med, la oss begynne å samle minneinformasjon ved hjelp av psutil-biblioteket. Kopier følgende kode til din favoritt python IDE og kjør den.
# importere de påkrevde modulene importere psutil # skrive en funksjon for å konvertere byte til GigaByte def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = rund (gb, 2) returner gb # Ved hjelp av virtual_memory () det vil returnere en tuple virtual_memory = psutil.virtual_memory () # Dette vil skrive ut den primære minnedetaljutskriften ("[+] Total Memory present:", bytes_to_GB (virtual_memory).totalt), "Gb") utskrift ("[+] Totalt tilgjengelig minne:", bytes_to_GB (virtual_memory.tilgjengelig), "Gb") print ("[+] Total Memory Used:", bytes_to_GB (virtual_memory.brukt), "Gb") print ("[+] Prosentandel brukt:", virtual_memory.prosent, "%") utskrift ("\ n") # Dette skriver ut bytteminnedetaljene hvis tilgjengelig swap = psutil.swap_memory () print (f "[+] Totalt bytteminne: bytes_to_GB (swap).totalt) ") print (f" [+] Gratis bytteminne: bytes_to_GB (bytte.gratis) ") print (f" [+] Brukt byttehukommelse: bytes_to_GB (swap.brukt) ") print (f" [+] Prosentandel brukt: swap.prosent% ")
La oss se hva som skjer i koden ovenfor. I første linje importerte vi psutil-biblioteket, og brukte deretter virtual_memory () -funksjonen, som returnerer en tuple med informasjon om virtuelt minne. Deretter bruker vi swap_memory () -funksjonen for å få informasjon om bytteminnet. Vi bygde også et funksjonsnavn bytes_to_GB (), som vil konvertere byte til GigaBytes for bedre lesbarhet. Jeg fikk følgende utdata.
Vi kan også bruke meminfo-filen som er tilstede i Linux proc-katalog for å hente minneinformasjon som totalt minne, brukt minne osv. For å gjøre dette, kjør følgende kode.
# Samle inn minneinformasjon fra meminfo-filutskrift ("\ nLese / proc / meminfo-filen: \ n") med åpen ("/ proc / meminfo", "r") som f: linjer = f.readlines () print ("[+]" + linjer [0].strip ()) print ("[+]" + linjer [1].stripe ())
Og her er utgangen:
Diskinformasjon
Til nå har vi sett noen grunnleggende systemdetaljer, CPU-detaljer, minnedetaljer. La oss nå se informasjonen om disken som finnes i maskinen vår. For å trekke ut diskinformasjon, bruker vi psutil-modulen for å gjøre oppgaven vår enkel, og vi trenger ikke å finne opp hjulet på nytt. Se på koden nedenfor for å se et fungerende eksempel på koden. Du kan kopiere koden og kjøre i din favoritt pythons IDE.
# importerer nødvendige moduler importerer psutil # tilgang til alle diskpartisjonene disk_partitions = psutil.disk_partitions () # skriver en funksjon for å konvertere byte til Giga byte def bytes_to_GB (byte): gb = bytes / (1024 * 1024 * 1024) gb = rund (gb, 2) returner gb # som viser partisjonen og bruksinformasjonen for partisjon i disk_partitions: print ("[+] Partition Device:", partisjon.enhet) print ("[+] File System:", partisjon.fstype) print ("[+] Mountpoint:", partisjon.mountpoint) disk_usage = psutil.disk_usage (partisjon.mountpoint) print ("[+] Total diskplass:", bytes_to_GB (disk_usage).totalt), "GB") utskrift ("[+] ledig diskplass:", bytes_to_GB (diskbruk).gratis), "GB") print ("[+] Brukt diskplass:", bytes_to_GB (disk_usage).brukt), "GB") utskrift ("[+] Prosentandel brukt:", disk_bruk.prosent, "%") # få lese / skrive statistikk siden oppstartsdisk_rw = psutil.disk_io_counters () utskrift (f "[+] Totalt lest siden oppstart: bytes_to_GB (disk_rw.read_bytes) GB ") print (f" [+] Total Write sice boot: bytes_to_GB (disk_rw).write_bytes) GB ")
I koden har vi først importert psutil-biblioteket, som kreves for å samle diskinformasjonen. Så brukte vi den disk_partitions () funksjon for å få listen over diskpartisjoner tilgjengelig med informasjonen. Vi bruker også disk_usage () -funksjonen for å få bruk av disse partisjonene. Til slutt bruker vi disk_io_counters () funksjon for å få diskens totale lese / skrive siden oppstart. Her er et eksempel på utdata.
Du kan få litt annen utgang, avhengig av disk og partisjoner.
Nettverksinformasjon
Vi kan også samle nettverksinformasjonen til systemet ved hjelp av psutil-biblioteket. For å gjøre det, kopier følgende kode til din python IDE og kjør den.
# importerer nødvendige moduler importerer psutil # skriver en funksjon for å konvertere byte til gigabyte def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = rund (gb, 2) returner gb # samler alle nettverksgrensesnitt virtuelt og fysisk) fra systemet if_addrs = psutil.net_if_addrs () # skriver ut informasjonen til hvert nettverksgrensesnitt for grensesnittnavn, grensesnittadresser i if_addrs.elementer (): for adresse i grensesnittadresser: skriv ut ("\ n") skriv ut (f "Grensesnitt:", grensesnittnavn) hvis str (adresse.familie) == 'Adressefamilie.AF_INET ': utskrift ("[+] IP-adresse:", adresse.adresse) print ("[+] Nettmaske:", adresse.netmask) print ("[+] Broadcast IP:", adresse.kringkasting) elif str (adresse.familie) == 'Adressefamilie.AF_PACKET ': utskrift ("[+] MAC-adresse:", adresse.adresse) print ("[+] Nettmaske:", adresse.netmask) print ("[+] Broadcast MAC:", adresse.kringkasting) # får lese / skrive-statistikk for nettverket siden oppstartsutskrift ("\ n") net_io = psutil.net_io_counters () skriver ut ("[+] Totalt antall sendte bytter:", bytes_to_GB (net_io).bytes_sent)) print ("[+] Totalt antall mottatte byte:", bytes_to_GB (net_io.bytes_recv))
Her er et eksempel på utdata fra min test-PC.
Annen maskinvareinformasjon
Vi kan også bruke psutil biblioteket for å få litt annen maskinvareinformasjon som batteriinformasjon, vifteens rotasjonshastighet, forskjellige enheters temperaturinformasjon, etc. La oss se hvordan vi kan gjøre dette en etter en.
Hvis du bruker en bærbar datamaskin, kan du bruke psutil.sensors_battery () -funksjon for å få batteriinformasjonen. For å gjøre det, kopier og kjør følgende kode i Python IDE.
importere psutil batteri = psutil.sensors_battery () utskrift ("[+] Batteriprosent:", rund (batteri.prosent, 1), "%") utskrift ("[+] Batteritid igjen:", rund (batteri.secsleft / 3600, 2), "hr") print ("[+] Power Plugged:", batteri.power_plugged)
I koden ovenfor bruker vi sensors_battery () funksjon for å få informasjon om batteriet, for eksempel batteriprosent, gjenværende tid, strømtilkobling eller ikke. Da jeg kjørte koden i maskinen min, fikk jeg følgende utdata.
Vi kan også bruke psutil-biblioteket for å få vifteens RPM (revolusjoner per minutt) ved hjelp av funksjonen sensors_fan () mens viften går. Psutil kan også brukes til å få temperaturen til forskjellige enheter. Vi kan gjøre det ved hjelp av sensor_temperatures () -funksjonen til psutil. Jeg lar dette bli gjort av deg for øvelse.
Endelig skript
La oss nå kombinere alle kodene med å bygge et endelig program for å samle alle system- og maskinvaredetaljer som vi diskuterte. Du kan kopiere følgende program og kjøre det i din python IDE.
# importere de nødvendige modulene importplattformen fra datetime import datetime import psutil import os # Først skriver vi ut den grunnleggende systeminformasjonen # ved hjelp av plattformsmodulen print ("\ n \ t \ t \ t Basic System Information \ n") print (" [+] Arkitektur: ", plattform.arkitektur () [0]) print ("[+] Maskin:", plattform.maskin ()) print ("[+] Operativsystemutgivelse:", plattform.release ()) print ("[+] Systemnavn:", plattform.system ()) print ("[+] Operativsystemversjon:", plattform.versjon ()) print ("[+] Node:" + plattform.node ()) print ("[+] Platform:", platform.plattform ()) print ("[+] Prosessor:", plattform.prosessor ()) # Bruke psutil-biblioteket for å få oppstartstiden til systemets boot_time = datetime.fromtimestamp (psutil.boot_time ()) print ("[+] System Boot Time:", boot_time) # får systemet opp tid fra oppetid-filen i proc-katalogen med åpen ("/ proc / uptime", "r") som f: uptime = f.lese().split ("") [0].strip () oppetid = int (flyt (oppetid)) oppetid_tid = oppetid // 3600 oppetid_minutter = (oppetid% 3600) // 60 utskrift ("[+] System Uptime:" + str (uptime_hours) + ":" + str ( oppetid_minutter) + "timer") # får totalt antall prosesser som for tiden kjører pids = [] for undermappe i os.listdir ('/ proc'): hvis undermappe.isdigit (): pids.legge til (undermappe) utskrift ('Totalt antall prosesser: 0'.format (len (pids))) # Viser CPU-informasjonsutskrift ("\ n \ t \ t \ t CPU-informasjon \ n") # Denne koden skriver ut antall CPU-kjerner som er til stede ("[+] Antall fysiske kjerner: ", psutil.cpu_count (logical = False)) print ("[+] Antall kjerner totalt:", psutil.cpu_count (logical = True)) print ("\ n") # Dette vil skrive ut maksimum, minimum og gjeldende CPU-frekvens cpu_frequency = psutil.cpu_freq () utskrift (f "[+] Maks frekvens: cpu_frequency.maks:.2f Mhz ") utskrift (f" [+] Min frekvens: cpu_frequency.min:.2f Mhz ") utskrift (f" [+] Gjeldende frekvens: cpu_frequency.nåværende:.2f Mhz ") utskrift (" \ n ") # Dette vil skrive ut bruken av CPU per kjerne i, prosent oppregnet (psutil.cpu_percent (percpu = True, interval = 1)): print (f "[+] CPU Usage of Core i: percentage%") print (f "[+] Total CPU Usage: psutil.cpu_percent ()% ") # leser cpuinfo-filen for å skrive ut navnet på # CPU til stede med åpen (" / proc / cpuinfo "," r ") som f: file_info = f.readlines () cpuinfo = [x.stripe ().split (":") [1] for x i file_info hvis "modellnavn" i x] for indeks, element i enumerate (cpuinfo): print ("[+] Prosessor" + str (index) + ":" + item ) # å skrive en funksjon for å konvertere byte til GigaByte def bytes_to_GB (bytes): gb = bytes / (1024 * 1024 * 1024) gb = rund (gb, 2) return gb # Ved å bruke virtual_memory () -funksjonen vil den returnere en dobbel virtuell minne = psutil.virtual_memory () print ("\ n \ t \ t \ t Memory Information \ n") #Dette vil skrive ut den primære minnedetaljutskriften ("[+] Total Memory present:", bytes_to_GB (virtual_memory.total), "Gb") print ("[+] Totalt minne tilgjengelig:", bytes_to_GB (virtual_memory.tilgjengelig), "Gb") print ("[+] Totalt minne brukt:", bytes_to_GB (virtual_memory.brukt), "Gb") print ("[+] Prosentandel brukt:", virtual_memory.prosent, "%") utskrift ("\ n") # Dette vil skrive ut detaljene for bytteminnet hvis tilgjengelig swap = psutil.swap_memory () print (f "[+] Totalt bytteminne: bytes_to_GB (swap).totalt) ") print (f" [+] Gratis bytteminne: bytes_to_GB (bytte.gratis) ") print (f" [+] Brukt bytteminne: bytes_to_GB (swap.brukt) ") print (f" [+] Prosentandel brukt: swap.prosent% ") # Samle inn minneinformasjon fra meminfo-filutskrift (" \ nLese / proc / meminfo-filen: \ n ") med åpen (" / proc / meminfo "," r ") som f: linjer = f.readlines () print ("[+]" + linjer [0].strip ()) print ("[+]" + linjer [1].strip ()) # tilgang til alle diskpartisjonene disk_partitions = psutil.disk_partitions () utskrift ("\ n \ t \ t \ t Diskinformasjon \ n") # viser partisjons- og bruksinformasjon for partisjon i disk_partitions: print ("[+] Partition Device:", partition.enhet) print ("[+] File System:", partisjon.fstype) print ("[+] Mountpoint:", partisjon.mountpoint) disk_usage = psutil.disk_usage (partisjon.mountpoint) print ("[+] Total diskplass:", bytes_to_GB (disk_usage).totalt), "GB") utskrift ("[+] ledig diskplass:", bytes_to_GB (diskbruk).ledig), "GB") utskrift ("[+] Brukt diskplass:", bytes_to_GB (diskbruk).brukt), "GB") utskrift ("[+] Prosentandel brukt:", disk_bruk.prosent, "%") # få lese / skrive statistikk siden oppstartsdisk_rw = psutil.disk_io_counters () utskrift (f "[+] Totalt lest siden oppstart: bytes_to_GB (disk_rw).read_bytes) GB ") print (f" [+] Total Write sice boot: bytes_to_GB (disk_rw.write_bytes) GB ") # samler alle nettverksgrensesnitt (virtuelt og fysisk) fra systemet if_addrs = psutil.net_if_addrs () print ("\ n \ t \ t \ t Network Information \ n") # skriver ut informasjonen til eah nettverksgrensesnitt for grensesnittnavn, grensesnittadresser i if_addrs.elementer (): for adresse i grensesnittadresser: skriv ut (f "Grensesnitt:", grensesnittnavn) hvis str (adresse.familie) == 'Adressefamilie.AF_INET ': utskrift ("[+] IP-adresse:", adresse.adresse) print ("[+] Nettmaske:", adresse.netmask) print ("[+] Broadcast IP:", adresse.kringkasting) elif str (adresse.familie) == 'Adressefamilie.AF_PACKET ': utskrift ("[+] MAC-adresse:", adresse.adresse) print ("[+] Nettmaske:", adresse.netmask) print ("[+] Broadcast MAC:", adresse.kringkasting) # får lese / skrive-statistikken til nettverket siden oppstarten net_io = psutil.net_io_counters () skriver ut ("[+] Totalt antall sendte bytter:", bytes_to_GB (net_io).bytes_sent)) print ("[+] Totalt mottatte byte:", bytes_to_GB (net_io.bytes_recv)) # Få batteriet Informasjon batteri = psutil.sensors_battery () utskrift ("\ n \ t \ t \ t Batteriinformasjon \ n") utskrift ("[+] Batteriprosent:", rund (batteri.prosent, 1), "%") utskrift ("[+] Batteritid igjen:", rund (batteri.secsleft / 3600, 2), "hr") print ("[+] Power Plugged:", battery.power_plugged)
Når du kjører denne koden, får vi følgende utdata.
Hvis du vil forbedre programmet eller ønsker å laste ned koden, kan du gjøre det fra Github-siden min.
Konklusjon
Dette er den fulle opplæringen om å samle litt interessant system- og maskinvareinformasjon ved hjelp av python. Hvis du har problemer med å kopiere koden, kan du også finne full kildekode i Github-repoen min. Det kan også være lurt å se vår guide om å jobbe med operativsystem i python for noen mer interessante python-justeringer.