通过/porc伪文件系统获取一下信息

1、通过proc文件系统获取一些信息,用来监控

#coding:utf8

import os
import json

class SystemInfo(object):
    ‘‘‘
    监控的类
    ‘‘‘
    def __init__(self):
        self.proc = ‘/proc‘
        self.loadavg = ‘/proc/loadavg‘
        self.meminfo = ‘/proc/meminfo‘
        self.interface = ‘/proc/net/dev‘
        self.partitions = ‘/proc/partitions‘
        self.reslut = {}

    def getLoadavg(self):
        ‘‘‘
        根据/proc/loadavg文件获取系统的1,5,15分钟负载,类型是浮点数
        ‘‘‘
        with open(self.loadavg) as f:
            loadavg = f.readline().split()[0:3]
            reslut = {
                "Loadavg":{
                    "loadavg_1": float(loadavg[0]),
                    "loadavg_5": float(loadavg[1]),
                    "loadavg_15": float(loadavg[2])
                },
            }
            return reslut

    def getPartitions(self):
        with open(self.partitions) as f:
            reslut = {"partition":{}}
            for line in f:
                if len(line.strip()) == 0 or line.startswith(‘major‘):
                    continue
                reslut["partition"][line.split()[3]] = int(line.split()[2])
        return reslut

    def getMemInfo(self):
        ‘‘‘
        根据/proc/meminfo文件获取内存的信息,类型是整型,单位是KB
        ‘‘‘
        with open(self.meminfo) as f:
            MemTotal = int(f.readline().strip().split()[1])
            MemFree = int(f.readline().strip().split()[1])
            Buffers = int(f.readline().strip().split()[1])
            Cached = int(f.readline().strip().split()[1])
            reslut = {
                "MemInfo":{
                    "MemTotal":MemTotal, #总内存
                    "MemFree":MemFree,   #空余内存
                    "Buffers":Buffers,   #缓冲
                    "Cached":Cached,     #缓存
                    "Available":Buffers + MemFree + Cached, #真正可用内存
                    "MemUse":MemTotal - (MemFree + Buffers + Cached) #真正的使用内存
                    }
            }
        return reslut

    def getTraffic(self):
        ‘‘‘
        根据/proc/net/dev文件获取系统所有接口的流量、发送与接收的包
        计算公式: 所有接口发送与接收的总字节数、总包数
        ‘‘‘
        with open(self.interface) as f:
            T = 0
            P = 0
            lines = [lines.strip().split() for lines in f.readlines()[2:] if lines]
            for line in lines:
                T += int(line[1]) + int(line[9])
                P += int(line[2]) + int(line[10])
            else:
                reslut = {
                    "Network": {
                        "Traffic":T, #总流量
                        "Packet":P   #总包数
                    }
                }
        return reslut

    def getSwapInfo(self):
        ‘‘‘
        通过/proc/meminfo文件获取当前系统的swap的信息
        ‘‘‘
        with open(self.meminfo) as f:
            for line in f:
                if line.startswith(‘SwapCached‘):
                    SwapCached = int(line.split()[1])
                if line.startswith(‘SwapTotal‘):
                    SwapTotal = int(line.split()[1])
                if line.startswith(‘SwapFree‘):
                    SwapFree = int(line.split()[1])
            reslut = {
                "SwapInfo": {
                    "SwapFree":SwapFree,
                    "SwapCached":SwapCached,
                    "SwapTotal":SwapTotal
                }
            }
        return reslut

    def getPids(self):
        ‘‘‘
        获取当前系统所有的pid,返回一个列表
        ‘‘‘
        reslut = {
            "pids": [ pid for pid in os.listdir(self.proc) if pid.isdigit() ]
        }
        return reslut

    def getPidNum(self):
        ‘‘‘
        获取系统当前pid的个数
        ‘‘‘
        pids = self.getPids()
        reslut = {
            "pids": {
                "PidNum":len(pids["pids"])
             }
        }
        return reslut

    def getAll(self):
        ‘‘‘
        得到信息,更新返回一个字典
        ‘‘‘
        for get in self.getLoadavg(),self.getMemInfo(),self.getTraffic(),                   self.getSwapInfo(),self.getPids(),self.getPidNum(),self.getPartitions():
            self.reslut.update(get)
        return self.reslut

if __name__ == ‘__main__‘:
    get = SystemInfo()
    getall = json.dumps(get.getAll(),indent=4)
    print(getall)

monitor

{
    "Loadavg": {
        "loadavg_1": 0.0,
        "loadavg_5": 0.01,
        "loadavg_15": 0.05
    },
    "MemInfo": {
        "Available": 1347188,
        "MemTotal": 1914588,
        "Cached": 66592,
        "MemUse": 567400,
        "MemFree": 1204600,
        "Buffers": 75996
    },
    "Network": {
        "Traffic": 882943,
        "Packet": 11026
    },
    "pids": {
        "PidNum": 89
    },
    "partition": {
        "sda3": 18873344,
        "sda2": 1048576,
        "sda": 20971520,
        "sda1": 1048576
    },
    "SwapInfo": {
        "SwapTotal": 1048572,
        "SwapCached": 0,
        "SwapFree": 1048572
    }
}

结果

2、通过proc文件系统获取当前的分区情况

with open(‘/proc/partitions‘) as f:
    reslut = {}
    for line in f:
        if len(line.strip()) == 0 or line.startswith(‘major‘):
            continue
        reslut[line.split()[3]] = line.split()[2]
    print reslut

结果:

{‘sda3‘: ‘18873344‘, ‘sda2‘: ‘1048576‘, ‘sda‘: ‘20971520‘, ‘sda1‘: ‘1048576‘}
时间: 2024-08-01 04:15:21

通过/porc伪文件系统获取一下信息的相关文章

proc - 进程信息伪文件系统

描述 /proc 是一个伪文件系统, 被用作内核数据结构的接口, 而不仅仅是解释说明 /dev/kmem. /proc里的大多数文件都是只读的, 但也可以通过写一些文件来改变内核变量. 下面对整个 /proc 目录作一个大略的介绍. [number] 在 /proc 目录里, 每个正在运行的进程都有一个以该进程 ID 命名的子目录, 其下包括如下的目录和伪文件. cmdline 该文件保存了进程的完整命令行. 如果该进程已经被交换出内存, 或者该进程已经僵死, 那么就没有任何东西在该文件里, 这

黑客获取数据信息的目的和进攻手段

进入微软.亚马逊,谷歌等美国IT企业工作人才项目,起薪40万,百度搜索(MUMCS) 黑客使用进攻取证获取凭证,如用户名和密码.这些都允许他们访问敏感数据同时能够隐瞒自己的身份,以拖延攻击时被发现的时间并避免暴露自己的行踪.黑客寻找这种以半永久记忆的形式获取存在如 RAM 内存或交换文件中的动态/非静态数据.一旦黑客获得暂时存储在明文中的用户 ID 和密码,他们就可以进入下一个等级的访问,进一步获取资源,如内部网站.文档管理系统和 SharePoint 站点,本文来自网届网. 以下为原文: "一

借助Sigar API获取磁盘信息

Sigar(全称System Information Gatherer And Reporter,即系统信息收集报表器),它提供了一个开源的跨平台的收集计算机硬件和操作系统信息的API(该API底层接口用C语言编写),本文将演示如何借助Sigar API获取磁盘信息: package com.ghj.packageoftest; import org.hyperic.sigar.FileSystem; import org.hyperic.sigar.FileSystemUsage; impor

C# .NET 获取网络适配器信息和路径信息

C# .NET 获取网络适配器信息 1:NetworkInterface 类: 该类位于 System.Net.NetworkInformation 命名空间 该类可以方便的检测本机有多少个网卡(网络适配器),网卡信息,哪些网络连接可用等. 2:常用方法和属性: using System.Net.NetworkInformation; namespace ConsoleApplication1 { class Program { static void Main(string[] args) {

获取css信息

1 一般情况是用style直接获取css信息但是style只能获取到卸载行内的样式外链的和嵌入的样式会获取不到 2 2.5 用下面方法获取外链和嵌入的css样式 3 这种方法只能用于读取 4 window.getComputedStyle(obj,'伪类')[property] 5 6 getComputedStyle方法是ie所不支持的 7 正如上面提到的getComputedStyle方法是只读的,只能获取样式,不能设置:而element.style能读能写,能屈能伸 8 9 10 obj.

delphi R3下 跨进程获取DLL信息 NtQueryInformationProcess

unit APIUnit; { GetProcessModuleHandle API Unit Ring3调用NtQueryInformationProcess实现跨进程获取DLL句柄 } interface USES Winapi.Windows,System.SysUtils; type USHORT = Word; UNICODE_STRING = packed Record Length : USHORT; MaximumLength: USHORT; Buffer : PWideStr

PowerShell_零基础自学课程_6_PS中获取帮助信息详解、管道、格式化输

前些文章陆续的说了一些关于这些主题,但是讨论的都不够深入,今天我们深入的了解一下获取帮助信息.管道以及格式化输出的内容. 一.获取帮助信息 在PS中获取帮助信息,最常用的有: -? .get-command和get-help.这三者获取的信息不是完全一致的,并且由于get-command和get-help是cmdlet:因此具有很多实用 的参数来帮助我们获取我们想要的信息. 1.1  -? 参数 如果我们知道某个cmdlet的拼写,但是不知道他的用户,那么最快速的方法就是用:-? 参数. 例如:

【转】linux C++ 获取文件信息 stat函数详解

stat函数讲解 表头文件:    #include <sys/stat.h>             #include <unistd.h>定义函数:    int stat(const char *file_name, struct stat *buf);函数说明:    通过文件名filename获取文件信息,并保存在buf所指的结构体stat中返回值:      执行成功则返回0,失败返回-1,错误代码存于errno 错误代码:    ENOENT         参数fi

【转】windows c++获取文件信息——_stat函数的使用

_stat函数的功能 _stat函数用来获取指定路径的文件或者文件夹的信息. 函数声明 int _stat( const char *path, struct _stat *buffer ); 参数: path——文件或者文件夹的路径 buffer——获取的信息保存在内存中 返回值: 正确——返回0 错误——返回-1,具体错误码保存在errno中 struct _stat结构体 _stat结构体是文件(夹)信息的结构体,定义如下: struct stat { _dev_t st_dev; //文