1. 程式人生 > >python----linux系統管理

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() 返回系統登入時間