python----linux系统管理
1.调用系统命令
1.1 os.system
system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果。
例一:
import os cmd = "ps -ef | grep 80" a = os.system(cmd) print(a)
> 0 #上程序把命令的运行结果返回给a,0代表执行成功。
例二:
import os cmd = "lsof -i:81" a = os.system(cmd) print(a)
> 256 #上程序把命令的运行结果返回给a,256代表返回空值。
例三:
import os cmd = "abc" a = os.system(cmd) print(a)
> 32512 #上程序把命令的运行结果返回给a,32512代表命令执行错误。
1.2 os.popen
该方法将命令的返回结果以一个类似文件的格式传递出来。
例:
import os cmd = "ls /scripts/test | grep 2 | awk '{print i$0}' i='/scripts/test/'" #将文件名ls出来,并通过awk拼接出文件的全路径。 delete_file = os.popen(cmd) #将ls命令的结果以类似文件的形式传递给delete_file for file in delete_file.readlines(): #delete_file的内容变成列表,再将列表的元素逐个传递给file。 file = file.strip('\n') #因为列表每个元素都有个换行符,因此这里稍作处理。 os.remove(file) #根据文件的全路径删除文件。 print(file+" is deleted!!!") #打印删除文件的信息。
ps:
read() 显示文件的全部内容
readline() 逐行显示文件的内容
readlines() 逐行将文件的内容变成列表
1.3 常用的os命令
os.remove():删除文件
os.rename():重命名文件
os.walk():生成目录树下的所有文件名
os.chdir():改变目录
os.mkdir/makedirs:创建目录/多层目录
os.rmdir/removedirs:删除目录/多层目录
os.listdir():列出指定目录的文件
os.getcwd():取得当前工作目录
os.chmod():改变目录权限
os.path.basename():去掉目录路径,返回文件名
os.path.dirname():去掉文件名,返回目录路径
os.path.join():将分离的各部分组合成一个路径名
os.path.getsize():返回文件大小
os.path.exists():是否存在
os.path.isabs():是否为绝对路径
os.path.isdir():是否为目录
os.path.isfile():是否为文件
2. 读取系统状态
2.1 psutil
2.1.1 cpu模块
import psutil cpu = psutil.cpu_times() print(cpu) print("user: " + str(cpu[0])) print("nice: " + str(cpu[1])) print("system: " + str(cpu[2]))
psutil.cpu_times()可以把cpu的所有信息都显示出来。返回的信息是以一种类似于字典的模式显示出来的。因此当我们取cpu[0]的值得时候。他只会显示8.55这一个数值,如果想显示的比较完整,则需要自己编辑一下,把user也加上去。
2.2.2 内存模块
import psutil memory = psutil.virtual_memory()
print(memory) print(str(memory.total/1024/1024) + ' Mb') #显示总内存 print(str(memory.used/1024/1024) + ' Mb') #显示已使用内存 print(str(memory.free/1024/1024) + ' Mb') #显示空闲内存
memory = psutil.virtual_memory()也会把一个类似于字典的数据传达给变量,其用法与cpu模块详细。其中可以对其使用.total,.used,.free等方法获取指定的内存参数。
2.2.3 磁盘模块
import psutil disk = psutil.disk_partitions() print(disk,"\n") #获取磁盘的详细信息 print(psutil.disk_usage('/'),psutil.disk_usage('/boot'),"\n") #获取分区的使用情况 print(psutil.disk_io_counters(),"\n") #获取磁盘的总io个数,读写信息。
psutil.disk_partitions()可以获取磁盘信息,与其他模块不同的是,这里的信息最外层是以列表的形式显示的,然后列表中的元素就是与其他模块一样是一种类似字典的数据,其中每个元素代表一个分区。
2.2.4 网络模块
import psutil network = psutil.net_io_counters() network_all = psutil.net_io_counters(pernic=True) print(network,'\n') print(network_all,'\n') for k,v in network_all.items(): print(str(k) + ':' + str(v),'\n')
可以看到,psutil.net_io_counters()可以获取机器现在网络的总信息,psutil.net_io_counters(pernic=True)可以获取每个接口的信息,而这个信息则完全以字典的形式展示出来。
2.2.5 进程模块
import psutil,datetime pids = psutil.pids() #获取当前系统所有的进程号 for pid in pids: process = psutil.Process(pid) #把进程号传输给Process,获得一个进程实例 #print(process.name()) #进程的名字 #print(process.cwd()) #进程工作目录的绝对路径 #print(process.exe()) #进程bin目录的路径 #print(process.status()) #进程的状态 #print(datetime.datetime.fromtimestamp(process.create_time()).strftime("%Y-%m-%d %H:%M:%S")) #进程启动时>间 #print(process.uids()) #进程的uid #print(process.gids()) #进程的gid #print(process.cpu_times()) #进程的cpu时间 #print(process.cpu_affinity()) #进程的cpu亲和度 #print(process.memory_percent()) #进程的内存使用情况 #print(process.io_counters()) #进程的io使用情况
进程模块要注意的地方就是,需要先获取进程的进程号,然后将进程后传输给Process()这个方法,得到一个进程实例后,才能对其进行操作。
2.2.6 其他
import psutil import datetime print(psutil.users(),'\n') boot_time1 = psutil.boot_time() boot_time2 = datetime.datetime.fromtimestamp(boot_time1).strftime("%Y-%m-%d %H:%M:%S") print(boot_time2)
psutil.users() 返回当前登录用户的信息
psutil.boot_time() 返回系统登录时间