linux 脚本 os信息,获取linux系统信息的一个python脚本

其实获取系统信息,如果使用python的psutil的模块,更加的简洁好用。自己写的这个脚本算是一个python练习。

#!/usr/bin/env python2.7

# -*- coding:utf-8 -*-

import os

import subprocess

import re

import hashlib

#对字典取子集

def sub_dict(form_dict, sub_keys, default=None):

return dict([(k, form_dict.get(k.strip(), default)) for k in sub_keys.split(',')])

#读取cpuinfo信息

# dmidecode -t 4

def read_cpuinfo():

cpu_stat = []

with open('/proc/cpuinfo', 'r') as f:

data = f.read()

for line in data.split('\n\n'):

cpu_stat.append(line)

return cpu_stat[-2]

#读取fdisk信息

def read_fdisk():

p = subprocess.Popen('fdisk -l', stdout=subprocess.PIPE, shell=True)

out = p.communicate()[0]

info = []

for i in out.split('\n\n'):

for x in i.splitlines():

if x:

info.append(x)

return info

#读取dmidecode信息

def read_dmidecode():

p = subprocess.Popen('dmidecode -t 1', stdout=subprocess.PIPE, shell=True)

return p.communicate()[0]

#读取ifconfig信息

def read_ifconfig():

p = subprocess.Popen('ifconfig', stdout=subprocess.PIPE, shell=True)

return p.communicate()[0]

#返回cpu信息:CPU型号、颗数、核数

def get_cpuinfo(data):

cpu_info = {}

for i in data.splitlines():

k, v = [x.strip() for x in i.split(':')]

cpu_info[k] = v

cpu_info['physical id'] = str(int(cpu_info.get('physical id')) + 1)

return sub_dict(cpu_info, 'model name,physical id,cpu cores')

#返回每块硬盘大小

def get_diskinfo(data):

disk_info = {}

m_disk = re.compile(r'^Disk\s/dev')

for i in data:

if m_disk.match(i):

i = i.split(',')[0]

k, v = [x for x in i.split(':')]

disk_info[k] = v

return disk_info

#返回硬件信息:品牌、型号

def get_dmiinfo(data):

dmi_info = {}

line_in = False

for line in data.splitlines():

if line.startswith('System Information'):

line_in = True

continue

if line.startswith('\t') and line_in:

k, v = [i.strip() for i in line.split(':')]

dmi_info[k] = v

else:

line_in = False

return sub_dict(dmi_info, 'Manufacturer,Product Name,Serial Number')

#返回网卡及ip信息:网卡、IP址、MAC地址

def get_ipinfo(data):

data = (i for i in data.split('\n\n') if i and not i.startswith('lo'))

ip_info = []

ifname = re.compile(r'(eth[\d:]*|wlan[\d:]*)')

ipaddr = re.compile(r'(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})){3}')

macaddr = re.compile(r'[A-F0-9a-f:]{17}')

for i in data:

x = {}

if ifname.match(i):

device = ifname.match(i).group()

x['Adapter'] = device

if macaddr.search(i):

mac = macaddr.search(i).group()

x['MAC'] = mac

if ipaddr.search(i):

ip = ipaddr.search(i).group()

x['IP'] = ip

else:

x['IP'] = None

ip_info.append(x)

return ip_info

#返回内存及swap大小

def get_meminfo():

mem_info = {}

with open('/proc/meminfo', 'r') as f:

data = f.readlines()

for i in data:

k, v = [x.strip() for x in i.split(':')]

mem_info[k] = int(v.split()[0])

return sub_dict(mem_info, 'MemTotal,SwapTotal')

#返回操作信息

def get_osinfo():

os_info = {}

i = os.uname()

os_info['os_type'] = i[0]

os_info['node_name'] = i[1]

os_info['kernel'] = i[2]

return os_info

#唯一标识符

def get_indentity(data):

match_serial = re.compile(r"Serial Number: .*", re.DOTALL)

match_uuid = re.compile(r"UUID: .*", re.DOTALL)

if match_serial.search(data):

serial = match_serial.search(data).group()

if match_uuid.search(data):

uuid = match_uuid.search(data).group()

if serial:

serial_md5 = hashlib.md5(serial).hexdigest()

return serial_md5

elif uuid:

uuid_md5 = hashlib.md5(uuid).hexdigest()

return uuid_md5

if __name__ == "__main__":

ipinfo = get_ipinfo(read_ifconfig())

dmiinfo = get_dmiinfo(read_dmidecode())

cpuinfo = get_cpuinfo(read_cpuinfo())

diskinfo = get_diskinfo(read_fdisk())

meminfo = get_meminfo()

osinfo = get_osinfo()

identity = get_indentity(read_dmidecode())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值