Linux编程:使用python或者shell获取系统信息

0. 概要

在日常的系统管理和性能监控中,获取系统信息是一个非常常见的需求。
本文将介绍如何使用Python和Shell脚本来获取这些系统信息。

1. 使用Python获取系统信息

使用psutil库来获取系统的CPU、内存、磁盘和网络信息。

1.1 安装psutil库

首先,我们需要安装psutil库:

sudo apt install python3-psutil
或者
pip3 install psutil

1.2 Python脚本

以下是一个完整的Python脚本,用于获取系统信息:

# -*- coding: utf-8 -*-import psutil
import platform
from datetime import datetimedef get_system_info():# 获取系统信息uname = platform.uname()system_info = {"System": uname.system,"Node Name": uname.node,"Release": uname.release,"Version": uname.version,"Machine": uname.machine,"Processor": uname.processor,}# 获取CPU信息cpu_info = {"Physical cores": psutil.cpu_count(logical=False),"Total cores": psutil.cpu_count(logical=True),"Max Frequency": f"{psutil.cpu_freq().max:.2f}Mhz","Min Frequency": f"{psutil.cpu_freq().min:.2f}Mhz","Current Frequency": f"{psutil.cpu_freq().current:.2f}Mhz","CPU Usage Per Core": [f"{x}%" for x in psutil.cpu_percent(percpu=True, interval=1)],"Total CPU Usage": f"{psutil.cpu_percent()}%",}# 获取内存信息svmem = psutil.virtual_memory()memory_info = {"Total": f"{svmem.total / (1024 ** 3):.2f}GB","Available": f"{svmem.available / (1024 ** 3):.2f}GB","Used": f"{svmem.used / (1024 ** 3):.2f}GB","Percentage": f"{svmem.percent}%",}# 获取交换分区信息swap = psutil.swap_memory()swap_info = {"Total": f"{swap.total / (1024 ** 3):.2f}GB","Free": f"{swap.free / (1024 ** 3):.2f}GB","Used": f"{swap.used / (1024 ** 3):.2f}GB","Percentage": f"{swap.percent}%",}# 获取磁盘信息partitions = psutil.disk_partitions()disk_info = {}for partition in partitions:partition_usage = psutil.disk_usage(partition.mountpoint)disk_info[partition.device] = {"Mountpoint": partition.mountpoint,"File system type": partition.fstype,"Total Size": f"{partition_usage.total / (1024 ** 3):.2f}GB","Used": f"{partition_usage.used / (1024 ** 3):.2f}GB","Free": f"{partition_usage.free / (1024 ** 3):.2f}GB","Percentage": f"{partition_usage.percent}%",}# 获取网络信息net_io = psutil.net_io_counters()network_info = {"Total Bytes Sent": f"{net_io.bytes_sent / (1024 ** 2):.2f}MB","Total Bytes Received": f"{net_io.bytes_recv / (1024 ** 2):.2f}MB",}# 获取启动时间boot_time_timestamp = psutil.boot_time()bt = datetime.fromtimestamp(boot_time_timestamp)boot_time = f"{bt.year}-{bt.month}-{bt.day} {bt.hour}:{bt.minute}:{bt.second}"return {"System Information": system_info,"CPU Information": cpu_info,"Memory Information": memory_info,"Swap Information": swap_info,"Disk Information": disk_info,"Network Information": network_info,"Boot Time": boot_time,}def print_system_info(info):for key, value in info.items():print(f"{key}:")if isinstance(value, dict):for sub_key, sub_value in value.items():print(f"  {sub_key}: {sub_value}")else:print(f"  {value}")print()if __name__ == "__main__":system_info = get_system_info()print_system_info(system_info)

运行下输出:

在这里插入图片描述

2.使用Shell脚本获取系统信息

以下是一个示例Shell脚本:

#!/bin/bash# 获取系统信息
get_system_info() {echo "System Information:"echo "-------------------"echo "System: $(uname -s)"echo "Node Name: $(uname -n)"echo "Release: $(uname -r)"echo "Version: $(uname -v)"echo "Machine: $(uname -m)"echo "Processor: $(uname -p)"echo
}# 获取CPU信息
get_cpu_info() {echo "CPU Information:"echo "----------------"echo "Physical cores: $(grep -c ^processor /proc/cpuinfo)"echo "Total cores: $(nproc)"echo "CPU Usage:"mpstat -P ALL 1 1 | awk '/^Average:/ && $2 ~ /[0-9]/ {print "Core "$2": "$3"%"}'echo
}# 获取内存信息
get_memory_info() {echo "Memory Information:"echo "-------------------"free -h | awk '/^Mem:/ {print "Total: "$2 "\nUsed: "$3 "\nFree: "$4 "\nShared: "$5 "\nBuffers: "$6 "\nCached: "$7}'echo
}# 获取交换分区信息
get_swap_info() {echo "Swap Information:"echo "-----------------"free -h | awk '/^Swap:/ {print "Total: "$2 "\nUsed: "$3 "\nFree: "$4}'echo
}# 获取磁盘信息
get_disk_info() {echo "Disk Information:"echo "-----------------"df -h | awk 'NR==1 {print $0} NR>1 {print $0}'echo
}# 获取网络信息
get_network_info() {echo "Network Information:"echo "--------------------"echo "Total Bytes Sent: $(cat /proc/net/dev | awk 'NR>2 {sent+=$10} END {print sent/1024/1024 " MB"}')"echo "Total Bytes Received: $(cat /proc/net/dev | awk 'NR>2 {recv+=$2} END {print recv/1024/1024 " MB"}')"echo
}# 获取启动时间
get_boot_time() {echo "Boot Time:"echo "----------"echo "System Boot Time: $(who -b | awk '{print $3, $4}')"echo
}# 运行所有信息收集函数
get_system_info
get_cpu_info
get_memory_info
get_swap_info
get_disk_info
get_network_info
get_boot_time

将上述脚本保存为system_info.sh,这个Shell脚本将获取并显示系统的基本信息、CPU信息、内存信息、交换分区信息、磁盘信息、网络信息以及系统启动时间。
运行输出:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盗梦空间续集(InceptionNeXt):使用Inception优化加速ConvNeXt实现ImageNet-1K的最佳精度

Abstract 灵感来自ViT的长距离建模能力,大核卷积最近被广泛研究和采用,以扩大感受野并提高模型性能,例如显著的工作ConvNeXt采用77深度卷积。虽然这种深度算子只消耗少量的FLOPs,但由于高内存访问成本,它在强大计算设…

java实战项目--拼图小游戏(附带全套源代码)

个人主页VON 所属专栏java实战项目游戏参考黑马程序员 一、效果展示 二、功能介绍 游戏中所有的图片以及代码均已打包,玩家直接安装游戏即可,不用idea也可以畅玩。 游戏功能比较单一,只有简单的拼图功能。 a:展示原图重新游戏&a…

《汇编语言 基于x86处理器》- 读书笔记 - 第3章-汇编语言基础

《汇编语言 基于x86处理器》- 读书笔记 - 第3章-汇编语言基础 3.1 基本语言元素3.1.1 第一个汇编语言程序常见汇编语言调用规范 3.1.2 整数常量(基数、字面量)3.1.3 整型常量表达式3.1.4 实数常量十进制实数十六进制实数(编码实数&#xff09…

USB 2.0 协议专栏之 USB 2.0 概述(一)

前言:本篇博客为手把手教学的 USB 2.0 协议栈类精品博客,该专栏博客侧重针对 USB 2.0 协议进行讲解。Universal Serial Bus 作为如今最常见的通信接口,被广泛应用于:Keyboard、Mouse、Communication Device Class 和 Mass Storage…

“论企业集成架构设计及应用”写作框架,软考高级论文,系统架构设计师论文

原创范文 论企业集成架构设计及应用企业集成架构(Enterprise Integration Arhitecture,EIA) 是企业集成平台的核心,也是解决企业信息孤岛问题的关键。企业集成架构设计包括了企业信息、业务过程、应用系统集成架构的设计。实现企业集成的技术多种多样&a…

什么是 Windows 服务

什么是 Windows 服务 Windows 服务是 Windows 操作系统的核心。它们控制着操作系统的运行,定义了图形用户界面(GUI)与系统硬件之间的通信以及其他许多功能。没有这些服务,Windows 操作系统将无法正常运行。 对普通用户而言&…

【人工智能】人工智能概述(二)人工智能的关键技术

文章目录 一. 机器学习与深度学习1. 机器学习2. 深度学习 二. 计算机视觉1. 基本概念和分类2. 未来计算机视觉面临的主要挑战 三. 自然语言处理1. 基本概念与分类2. 自然语言处理面临的四大挑战 四. 知识图谱1. 基本概念2. 应用场景 五. SLAM技术1. 基本概念2. 主要分类 六. 人…

DSP教学实验箱_数字图像处理操作_案例分享:5-13 灰度图像二值化

一、实验目的 学习灰度图像二值化的原理,掌握图像的读取方法,并实现在LCD上显示二值化前后的图像。 二、实验原理 图像二值化 图像的二值化处理就是将图像上的点的灰度置为 0 或 255,也就是将整个图像呈现出明显的黑白效果。即将 256 个亮…

AJAX(1)——axios库的使用

什么是AJAX? AJAX是异步的JavaScript和XML。简单来说,就是使用XMLHttpRequest对象与服务器通信。它可以使用JSON,XML,HTML和text文本等格式发送和接收数据。AJAX最吸引人的就是它异步的特性,也就是说它可以在不重新刷新页面的情况下与服务器通信&#…

昇思25天学习打卡营第25天|LLM应用-基于MindNLP+MusicGen生成自己的个性化音乐

打卡 目录 打卡 应用任务简介 生成音乐 预训练权重模型下载 无提示生成 文本提示生成 音频提示生成 生成配置 应用任务简介 MusicGen 来自 Meta AI 的 Jade Copet 等人提出的基于单个语言模型(LM)的音乐生成模型,能够根据文本描述或…

NFS服务器环境搭建

1、什么是NFS ● 定义: NFS是一种在计算机系统之间共享文件和目录的协议,最初由Sun Microsystems开发,现在已经成为广泛使用的网络文件系统之一。 ● 核心功能: 通过网络(特别是TCP/IP网络)实现文件共享…

微信小程序配置访问服务器失败所发现的问题及解决方案

目录 事前现象问题1:问题现象:问题分析: 问题2:问题现象:问题分析:解决方案: 事后现象 事前现象 问题1: 问题现象: 在本地调试时,一切顺利,但一…

Flink Doirs Connector 常见问题:Doris目前不支持流读

常见问题 Doris Source 在数据读取完成后,流为什么就结束了? 目前 Doris Source 是有界流,不支持 CDC 方式读取。 问题:对于 Flink Doris DataStream,Flink 想要在 流式读取 Doirs / 实时读 Doris,目前读…

03--KVM虚拟化

前言:这里开始涉及到云计算内容,虚拟化使云计算发展,云计算推动虚拟化进步,两者相辅相成,这一章总结一下kvm虚拟化的解决方案。 1、基础概念 1.1、云计算 以前要完成信息处理, 是需要在一个客观存在的计算机上完成的…

Node.js版本管理工具之NVM

目录 一、NVM介绍二、NVM的下载安装1、NVM下载2、卸载旧版Node.js3、安装 三、NVM配置及使用1、设置nvm镜像源2、安装Node.js3、卸载Node.js4、使用或切换Node.js版本5、设置全局安装路径和缓存路径 四、常用命令技术交流 博主介绍: 计算机科班人,全栈工…

卷积神经网络(一)---原理和结构

在介绍卷积神经网络之前,先提出三个观点,正是这三个观点使得卷积神经网络能够真正起作用。 1. 局部性 对于一张图片而言,需要检测图片中的特征来决定图片的类别,通常情况下这些特征都不是由整张图片决定的,而是由一些…

vscode 环境

这张截图显示的是在VS Code(Visual Studio Code)中选择Python解释器的界面。不同的Python解释器及其虚拟环境列出了可选项,用户可以根据需要选择合适的解释器来运行Python代码。以下是对截图中信息的详细解释: 解释器选择界面 当…

Chrome浏览器设置暗黑模式 - 护眼模式 - 亮度调节 - DarkReader - 地址栏和书签栏设置为黑色背景

效果图 全黑 浅灰 (DarkReader设置开启亮色亮度-25) 全白 前言 主要分两部分需要操作, 1)地址栏和书签栏 》 需要修改浏览器的外观模式 2)页面主体 》 需要安装darkreader插件进行设置 步骤 1)地址栏和…

AOP面向切面编程和log4j的使用(Java版)

什么是面向切面编程 在传统的面向对象编程中,程序的功能被模块化成各个类和方法,这些类和方法分别处理特定的功能。然而,有些功能可能涉及到多个类、多个方法,例如日志记录、事务管理、性能监控等,这些功能可能在不同…

橙单后端项目下载编译遇到的问题与解决

今天下载orange-admin项目&#xff0c;不过下载下来运行出现一些问题。 1、涉及到XMLStreamException的几个类都出现下面的错误 The package javax.xml.stream is accessible from more than one module: <unnamed>, java.xml ctrl-shift-t 可以找到这个引入是哪些包里…