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