Linux系統(tǒng)自動化運維(Python版)全套教學(xué)課件_第1頁
Linux系統(tǒng)自動化運維(Python版)全套教學(xué)課件_第2頁
Linux系統(tǒng)自動化運維(Python版)全套教學(xué)課件_第3頁
Linux系統(tǒng)自動化運維(Python版)全套教學(xué)課件_第4頁
Linux系統(tǒng)自動化運維(Python版)全套教學(xué)課件_第5頁
已閱讀5頁,還剩388頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Linux系統(tǒng)自動化運維(Python版)(微課版)工業(yè)和信息化精品系列教材項目1

系統(tǒng)自動運維:從Shell到Python全套可編輯PPT課件能力CAPACITY要求了解系統(tǒng)自動化運維的基本知識。了解Shell編程,掌握系統(tǒng)管理和運維的Shell編程。了解Python編程,掌握使用Python編寫自動化運維程序的流程。掌握使用Python編程執(zhí)行外部命令的方法。任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維任務(wù)1.3使用Python執(zhí)行外部命令任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維任務(wù)說明01OPTION02OPTION03OPTION了解系統(tǒng)自動化運維的基本知識了解Shell及其編程的基本知識準(zhǔn)備系統(tǒng)自動化運維的實驗環(huán)境04OPTION05OPTION掌握系統(tǒng)管理類Shell編程掌握系統(tǒng)運維類Shell編程任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維相關(guān)知識1.1.1初識系統(tǒng)自動化運維傳統(tǒng)運維方式面臨的挑戰(zhàn)

效率低容易失誤被動運維缺乏流程化和標(biāo)準(zhǔn)化的運維機制任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維相關(guān)知識1.1.1初識系統(tǒng)自動化運維系統(tǒng)自動化運維主要工作內(nèi)容系統(tǒng)自動化運維系統(tǒng)預(yù)備安裝操作系統(tǒng)安裝軟件包初始化系統(tǒng)配置管理定制配置文件持續(xù)集成和持續(xù)交付遠(yuǎn)程管理服務(wù)器部署應(yīng)用監(jiān)控報警服務(wù)器可用性監(jiān)控自動報警安全監(jiān)控性能監(jiān)控任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維相關(guān)知識1.1.2Linux系統(tǒng)自動化運維的基本工具——Shell腳本什么是ShellShell提供了用戶和系統(tǒng)交互的接口

。Shell是一個命令解釋器,擁有內(nèi)建的Shell命令集。Shell同時是一種編程語言。Shell腳本的特點Shell具有很多類似C語言和其他編程語言的特征。Shell腳本與批處理文件很相似,可以包含任意輸入的Linux命令,包括命令行工具。Shell腳本是解釋執(zhí)行的,不需要編譯。Shell編程最基本的功能之一就是匯集一些在命令行中輸入的連續(xù)指令。任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維相關(guān)知識1.1.2Linux系統(tǒng)自動化運維的基本工具——Shell腳本Shell腳本與Linux系統(tǒng)運維使用Shell腳本有助于提高運維工程師的工作效率。Linux系統(tǒng)提供了功能強大的文本處理命令行工具。Shell編程具有簡單、便捷的優(yōu)勢,特別適合用來開發(fā)一些常見的系統(tǒng)腳本。Shell編程的步驟編寫Shell腳本執(zhí)行Shell腳本任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維任務(wù)實現(xiàn)任務(wù)1.1.1準(zhǔn)備實驗環(huán)境完成運維工作站的部署在Ubuntu系統(tǒng)中啟用root賬戶(1)為root賬戶設(shè)置密碼。(2)編輯/usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf配置文件。(3)編輯/etc/pam.d/gdm-autologin文件。(4)編輯/etc/pam.d/gdm-password文件。(5)編輯/root/.profile文件。(6)重啟系統(tǒng)就能夠以root賬戶登錄Ubuntu系統(tǒng)。任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維任務(wù)實現(xiàn)任務(wù)1.1.2編寫Shell腳本批量創(chuàng)建Linux用戶賬戶批量添加用戶賬戶的Shell腳本#添加一個名為testers的用戶組groupaddtestersif[$?-eq0];thenecho"添加用戶組testers成功!"fi#創(chuàng)建10個用戶賬戶,命名為tester01至tester10,并將其加入testers組foriin`seq-w110`douseradd-m-Gtesterstester$iif[$?-eq0];thenecho"添加用戶賬戶tester$i成功!"fi#將每個用戶賬戶的初始密碼設(shè)置為其用戶名,這是一種修改密碼的非交互方式

echotester$i:tester$i|chpasswdif[$?-eq0];thenecho"用戶賬戶tester$i的初始密碼:tester$i"fidone任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維任務(wù)實現(xiàn)任務(wù)1.1.2編寫Shell腳本批量創(chuàng)建Linux用戶賬戶批量刪除用戶賬戶的Shell腳本#!/bin/bashforiin`seq-w110`douserdel-rtester$iif[$?-eq0];thenecho"刪除用戶賬戶tester$i成功!"fidonegroupdeltestersif[$?-eq0];thenecho"刪除用戶組testers成功!"fi任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維任務(wù)實現(xiàn)任務(wù)1.1.3編寫Shell腳本批量檢測主機在線狀態(tài)#!/usr/bin/bash#定義3種顏色來區(qū)分主機在線狀態(tài)redFont=""\033[1;31m"greenFont="\e[32m"whiteFont="\e[0m"whilereadhostdoforcountin{1..3}doping-c1-W1$host&>/dev/nullif[$?-eq0];then#echo命令以不同顏色顯示內(nèi)容需要使用-e選項

echo-e"${greenFont}"${host}主機${whiteFont}"正在運行"breakelsefail_count[$count]=$hostfidone任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維任務(wù)實現(xiàn)任務(wù)1.1.3編寫Shell腳本批量檢測主機在線狀態(tài)if[${#fail_count[*]}-eq3];thenecho-e"${redFont}"${host}主機${whiteFont}"停止運行"unsetfail_count[*]fidone<host_listecho-e"${whiteFont}"任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維任務(wù)實現(xiàn)任務(wù)1.1.4編寫Shell腳本一鍵安裝JDK(1)創(chuàng)建安裝目錄。(2)將JDK壓縮包解壓縮到安裝目錄。(3)修改JDK版本的目錄名。(4)檢查/etc/profile文件中是否已有相應(yīng)的環(huán)境變量,以解決腳本重復(fù)執(zhí)行問題。(5)向/etc/profile文件中添加Java環(huán)境變量設(shè)置。(6)加載/etc/profile文件使環(huán)境變量生效。(7)檢查安裝是否成功。任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維任務(wù)實現(xiàn)任務(wù)1.1.5編寫Shell腳本監(jiān)控Linux系統(tǒng)性能了解Linux系統(tǒng)性能數(shù)據(jù)的獲取方法通過Linux系統(tǒng)的/proc偽文件系統(tǒng)來監(jiān)控系統(tǒng)可以兼顧不同Linux發(fā)行版。/proc/stat文件提供系統(tǒng)進程整體的統(tǒng)計信息,包含所有CPU活動的信息。CPU時間=user+nice+system+idle+iowait+irq+softirqCPU使用率=(idle2-idle1)/(cpu2-cpu1)/proc/meminfo文件提供系統(tǒng)內(nèi)存的使用信息。內(nèi)存使用率=(MemTotal–MemFree-Inactive)/MemTotal任務(wù)1.1認(rèn)識Linux和Ubuntu任務(wù)實現(xiàn)任務(wù)1.1.5編寫Shell腳本監(jiān)控Linux系統(tǒng)性能編寫系統(tǒng)性能監(jiān)控腳本#定義獲取CPU使用率的函數(shù)#使用grep'cpu'過濾CPU總的使用情況,輸出第2~第8個字段對應(yīng)的時間#獲取CPU空閑的時間(不包含I/O等待)#合計cpu_time1中各列的值#等5秒之后再測下一次CPU時間#計算CPU總的空閑時間#計算CPU總的使用時間#計算CPU使用率#定義獲取內(nèi)存使用率的函數(shù)#依次執(zhí)行以上兩個函數(shù)#設(shè)置百分比限額#CPU或內(nèi)存使用率超出限制報警任務(wù)1.1認(rèn)識Linux和Ubuntu任務(wù)實現(xiàn)任務(wù)1.1.5編寫Shell腳本監(jiān)控Linux系統(tǒng)性能使用Cron服務(wù)定時運行監(jiān)控任務(wù)(1)為上述Shell腳本文件賦予執(zhí)行權(quán)限。(2)執(zhí)行crontab-e命令,進入Cron服務(wù)配置文件編輯界面。(3)在Cron服務(wù)配置文件編輯界面最后一行輸入以下代碼,然后保存并關(guān)閉該文件。*/2****/autoom/01start/sys_mon.sh(4)執(zhí)行crontab-l命令檢查Cron服務(wù)配置文件的內(nèi)容。(5)驗證監(jiān)控任務(wù)的定時運行。(6)修改sys_mon.sh腳本,在其中添加獲取腳本文件所在的目錄的語句,并修改sysinfo.txt和warning.txt文件的路徑到該目錄下。任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維任務(wù)1.3使用Python執(zhí)行外部命令任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)說明01OPTION02OPTION03OPTION了解系統(tǒng)自動化運維與Python編程了解Python的模塊、包和庫的概念學(xué)會搭建Python開發(fā)環(huán)境04OPTION掌握使用Python編寫系統(tǒng)運維程序的流程任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能相關(guān)知識1.2.1Python簡介Python語法簡潔、清晰,具有豐富和強大的庫。Python最初被設(shè)計用于編寫自動化腳本。Python使用優(yōu)雅的語法,讓編寫的程序易于閱讀。Python是一種解釋型的編程語言。Python是一種面向?qū)ο蟮恼Z言。Python易于擴展。Python是高級編程語言。Python適用面廣。任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能相關(guān)知識1.2.2Python的模塊、包與庫模塊(Module)用來從邏輯上組織Python代碼,將相關(guān)的代碼歸到一個模塊能讓代碼更好用、更易讀。包(Package)定義了一個由模塊和子包組成的Python程序執(zhí)行環(huán)境。包本質(zhì)上就是一個分層次的文件目錄,包括若干模塊和若干子包。庫(Library)是借用自其他編程語言的概念,通常是指具有相關(guān)功能模塊的集合。在Python中,庫可以是模塊的形式,也可以是包的形式,實際是一個具有特定功能的代碼組合,庫中可以包含包、模塊和函數(shù)。任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能相關(guān)知識1.2.3Python與系統(tǒng)自動化運維Python特別適合運維工程師用來編程。Python可以用來開發(fā)復(fù)雜的運維軟件、基于Web的管理工具和自動化運維平臺。Python的標(biāo)準(zhǔn)庫對操作系統(tǒng)的接口進行了封裝,內(nèi)置對POSIX以及其他常規(guī)操作工具的支持。Python程序相對于Shell腳本具有跨平臺的優(yōu)勢。Python擁有大量的用于自動化運維的第三方庫。運維工程師可以通過Python編程系統(tǒng)地整合多種運維工具和軟件,還可以使用Python對運維常用的工具或平臺進行二次開發(fā)。Python具有程序開發(fā)效率高的優(yōu)勢。任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)實現(xiàn)任務(wù)1.2.1搭建Python開發(fā)環(huán)境安裝Python查驗預(yù)裝的版本創(chuàng)建一個python符號鏈接ln-s/usr/bin/python3/usr/bin/python安裝和配置Python包管理器安裝Python包管理器aptinstallpython3-pip更改配置統(tǒng)一指定pip安裝源pipconfigsetglobal.index-url/pypi/simple/pipconfigsetglobal.extra-index-url/simple/任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)實現(xiàn)任務(wù)1.2.1搭建Python開發(fā)環(huán)境創(chuàng)建和管理Python虛擬環(huán)境(1)安裝venv模塊。root@autowks:~#aptinstallpython3.8-venv(2)在當(dāng)前目錄下創(chuàng)建一個虛擬環(huán)境。root@autowks:~#python3-mvenvtest-venv(3)激活虛擬環(huán)境。root@autowks:~#sourcetest-venv/bin/activate(test-venv)root@autowks:~#(4)試用虛擬環(huán)境。(5)關(guān)閉虛擬環(huán)境。在指定虛擬環(huán)境下完成任務(wù)后,可以執(zhí)行以下命令關(guān)閉虛擬環(huán)境。(test-venv)root@autowks:~#deactivateroot@autowks:~#任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)實現(xiàn)任務(wù)1.2.1搭建Python開發(fā)環(huán)境在Ubuntu系統(tǒng)中安裝PyCharmPyCharm版本專業(yè)版PyCharmProfessional社區(qū)版即PyCharmCommunityEditionPyCharm安裝使用Snap安裝PyCharm社區(qū)版簡稱PyCharmCE)任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)實現(xiàn)任務(wù)1.2.1搭建Python開發(fā)環(huán)境PyCharm初始化設(shè)置定制PyCharm選裝功能性插件任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)實現(xiàn)任務(wù)1.2.2編寫Python程序監(jiān)控Linux系統(tǒng)性能實現(xiàn)思路使用Python腳本從/proc偽文件系統(tǒng)讀取性能數(shù)據(jù)。通過/proc/net/dev實時獲取網(wǎng)絡(luò)接口及統(tǒng)計信息。編寫Python腳本從/proc偽文件系統(tǒng)獲取CPU使用率、內(nèi)存使用率和網(wǎng)絡(luò)接口收發(fā)數(shù)據(jù)量。任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)實現(xiàn)任務(wù)1.2.2編寫Python程序監(jiān)控Linux系統(tǒng)性能創(chuàng)建Python項目項目創(chuàng)建新創(chuàng)建的Python項目任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)實現(xiàn)任務(wù)1.2.2編寫Python程序監(jiān)控Linux系統(tǒng)性能編寫Python程序importreimporttime'''菜單函數(shù)'‘’defmenu():'''主函數(shù)'''defmain():'''獲取CPU使用率的函數(shù)'''defget_cpu_usage():'''獲取內(nèi)存使用率的函數(shù)'''defget_mem_usage():'''獲取網(wǎng)絡(luò)接口收發(fā)數(shù)據(jù)量的函數(shù)'''defget_net_data():if__name__=="__main__":main()任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)實現(xiàn)任務(wù)1.2.2編寫Python程序監(jiān)控Linux系統(tǒng)性能運行測試運行Python腳本

實際測試腳本任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維任務(wù)1.3使用Python執(zhí)行外部命令任務(wù)1.3使用Python執(zhí)行外部命令任務(wù)說明01OPTION02OPTION03OPTION了解subprocess模塊的基本用法掌握使用subprocess模塊編程執(zhí)行外部命令的方法編程實現(xiàn)批量檢測主機在線狀態(tài)04OPTION編寫通用的外部命令執(zhí)行函數(shù)任務(wù)1.3使用Python執(zhí)行外部命令相關(guān)知識1.3.1subprocess模塊簡介subprocess模塊替代Python內(nèi)置的OS模塊提供的調(diào)用外部進程的函數(shù)來運行和創(chuàng)建新的系統(tǒng)進程。subprocess模塊可以用于執(zhí)行外部命令,創(chuàng)建一個新的進程讓其去執(zhí)行其他程序。subprocess模塊提供一些管理標(biāo)準(zhǔn)流和管道的工具,從而實現(xiàn)進程間的通信。任務(wù)1.3使用Python執(zhí)行外部命令相關(guān)知識1.3.2subprocess模塊的便利函數(shù)基本用法subprocess.run(args,*,stdin=None,input=None,stdout=None,stderr=None,capture_output=False,shell=False,cwd=None,timeout=None,check=False,encoding=None,errors=None,text=None,env=None,universal_newlines=None,**other_popen_kwargs)該函數(shù)運行由args參數(shù)指定的外部命令。該函數(shù)執(zhí)行后會生成新進程,我們可以連接到新進程的輸入、輸出和錯誤處理管道上,發(fā)送和接收數(shù)據(jù)以及處理錯誤代碼,獲取進程的返回值。執(zhí)行該函數(shù),待命令執(zhí)行完成后返回CompletedProcess對象。任務(wù)1.3使用Python執(zhí)行外部命令相關(guān)知識1.3.3subprocess模塊的Popen類構(gòu)造函數(shù)Popen對象的方法Popen對象的屬性Popen類的用法示例任務(wù)1.3使用Python執(zhí)行外部命令任務(wù)實現(xiàn)任務(wù)1.3.1使用subprocess模塊編程批量檢測主機在線狀態(tài)程序importsubprocess#定義顏色來區(qū)分主機在線狀態(tài),顏色格式:\033[顯示方式;前景色;背景色mredFont="\033[1;31m"#紅色greenFont="\033[1;32m"#綠色defautFont="\033[0m"#結(jié)束顏色格式的輸出withopen("host_list","r")asf:forhostinf:#逐行讀取文本文件中的主機

host=host.strip()#每行末尾有隱藏的換行符\n,使用strip()函數(shù)清除

foriinrange(3):result=subprocess.run(['ping','-c1','-W1',str(host)],stdout=subprocess.PIPE,check=False)ifresult.returncode==0:#判斷返回碼

print(greenFont+host+'主機'+defautFont+'正在運行')breakelse:ifi==2:#連續(xù)3次無法通信,則判定為停止?fàn)顟B(tài)

print(redFont+host+'主機'+defautFont+'停止運行')任務(wù)1.3使用Python執(zhí)行外部命令任務(wù)實現(xiàn)任務(wù)1.3.1使用subprocess模塊編程批量檢測主機在線狀態(tài)運行測試任務(wù)1.3使用Python執(zhí)行外部命令任務(wù)實現(xiàn)任務(wù)1.3.2編寫通用的外部命令執(zhí)行函數(shù)importsubprocess'''定義執(zhí)行外部命令的函數(shù)'''defrun_cmd(cmd):p=subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)stdout,stderr=municate()#執(zhí)行命令并返回結(jié)果

ifp.returncode!=0:#執(zhí)行失敗,以元組形式返回返回碼和錯誤信息

returnp.returncode,stderrreturnp.returncode,stdout#執(zhí)行成功,以元組形式返回返回碼和輸出結(jié)果任務(wù)1.3使用Python執(zhí)行外部命令任務(wù)實現(xiàn)任務(wù)1.3.2編寫通用的外部命令執(zhí)行函數(shù)if__name__=="__main__":#測試上述函數(shù)

res=run_cmd(['piplist'])#獲取的信息需要解碼

ifres[0]!=0:print('未成功執(zhí)行!')print(res[1].decode())else:print('執(zhí)行結(jié)果:')print(res[1].decode())THANKSLinux系統(tǒng)自動化運維(Python版)(微課版)工業(yè)和信息化精品系列教材項目2

監(jiān)控系統(tǒng)與調(diào)度運維任務(wù)能力CAPACITY要求了解系統(tǒng)信息監(jiān)測功能,學(xué)會使用psutil庫編程實現(xiàn)系統(tǒng)信息采集。了解文件系統(tǒng)更改監(jiān)控機制,學(xué)會使用watchdog庫編程實現(xiàn)文件系統(tǒng)更改監(jiān)控。了解Web服務(wù)的響應(yīng)指標(biāo),學(xué)會使用PycURL庫編程實現(xiàn)Web服務(wù)監(jiān)控。了解任務(wù)調(diào)度的概念,學(xué)會使用APScheduler庫編程實現(xiàn)運維任務(wù)調(diào)度。任務(wù)2.2監(jiān)控文件系統(tǒng)更改任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)2.4調(diào)度運維任務(wù)任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)說明01OPTION02OPTION03OPTION了解psutil庫有關(guān)系統(tǒng)信息的便利函數(shù)了解psutil庫有關(guān)進程的便利函數(shù)和類編寫基于psutil庫采集系統(tǒng)信息的Python程序04OPTION05OPTION編寫基于psutil庫管理進程的Python程序掌握系統(tǒng)運維類Shell編程任務(wù)2.1采集系統(tǒng)信息和管理進程相關(guān)知識2.1.1了解psutil庫psutil——processandsystemutilities等同UNIX命令行工具(ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等)安裝psutil庫pipinstallpsutilpsutil庫便利函數(shù)——獲取系統(tǒng)信息常量類——管理進程任務(wù)2.1采集系統(tǒng)信息和管理進程相關(guān)知識2.1.2系統(tǒng)信息相關(guān)函數(shù)CPU信息psutil.cpu_times()內(nèi)存信息psutil.virtual_memory()磁盤信息psutil.disk_usage('/')網(wǎng)絡(luò)信息_io_counters(pernic=True)其他系統(tǒng)信息psutil.boot_time()任務(wù)2.1采集系統(tǒng)信息和管理進程相關(guān)知識2.1.3進程管理功能進程相關(guān)的便利函數(shù)psutil.pids():返回當(dāng)前運行的PID的有序列表。psutil.pid_exists(PID):檢查指定的PID是否存在于當(dāng)前進程列表中。psutil.wait_procs(procs,timeout=None,callback=None):返回進程列表。cess_iter(attrs=None,ad_value=None):返回一個包含Process對象的迭代器。進程相關(guān)的類

>>>p=psutil.Process()>>>()'python'任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)實現(xiàn)任務(wù)2.1.1使用psutil庫采集系統(tǒng)信息importpsutilimportsocket'''通用的字節(jié)轉(zhuǎn)換函數(shù)'''defbytes2human(n):'''獲取CPU信息'''defget_cpu_info():'''獲取內(nèi)存信息'''defget_memory_info():'''獲取磁盤信息'''defget_disk_info():'''獲取網(wǎng)絡(luò)信息'''defget_net_info():'''匯集系統(tǒng)信息'''defgather_monitor_data():'''報告結(jié)果'''defreport():if__name__=='__main__':report()任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)實現(xiàn)任務(wù)2.1.2使用psutil庫實現(xiàn)進程管理importpsutilimportsys'''定義按進程名終止進程的函數(shù)'''defkill_proc_byname(proc_names):proc_list=psutil.pids()try:forpidinproc_list:#循環(huán)讀取進程名,符合條件即終止相應(yīng)的進程

forproc_nameinproc_names:#基于PID創(chuàng)建Process對象

p=psutil.Process(pid)#判斷該Process對象的進程名是否為要終止的進程名

if()==proc_name:p.kill()print(f"已終止名稱為{proc_name},PID為{pid}的進程!")exceptExceptionase:print(str(e))if__name__=='__main__':#從命令行參數(shù)列表中讀取進程名

kill_proc_byname(sys.argv[1:])任務(wù)2.2監(jiān)控文件系統(tǒng)更改任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)2.4調(diào)度運維任務(wù)任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)說明01OPTION02OPTION03OPTION了解pyinotify庫和文件系統(tǒng)更改監(jiān)控的實現(xiàn)機制了解watchdog庫及其基本用法使用pyinotify庫編寫文件系統(tǒng)更改監(jiān)控程序04OPTION05OPTION使用watchdog庫編寫文件系統(tǒng)更改監(jiān)控程序掌握系統(tǒng)運維類Shell編程任務(wù)2.1采集系統(tǒng)信息和管理進程相關(guān)知識2.1.1了解psutil庫傳統(tǒng)運維方式面臨的挑戰(zhàn)

效率低容易失誤被動運維缺乏流程化和標(biāo)準(zhǔn)化的運維機制任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)1.1從Shell編程開始系統(tǒng)自動化運維任務(wù)1.3使用Python執(zhí)行外部命令任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能任務(wù)說明01OPTION02OPTION03OPTION了解系統(tǒng)自動化運維與Python編程了解Python的模塊、包和庫的概念學(xué)會搭建Python開發(fā)環(huán)境04OPTION掌握使用Python編寫系統(tǒng)運維程序的流程任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能相關(guān)知識1.2.1Python簡介Python語法簡潔、清晰,具有豐富和強大的庫。Python最初被設(shè)計用于編寫自動化腳本。Python使用優(yōu)雅的語法,讓編寫的程序易于閱讀。Python是一種解釋型的編程語言。Python是一種面向?qū)ο蟮恼Z言。Python易于擴展。Python是高級編程語言。Python適用面廣。任務(wù)1.2使用Python提升系統(tǒng)自動化運維技能相關(guān)知識1.2.2Python的模塊、包與庫模塊(Module)用來從邏輯上組織Python代碼,將相關(guān)的代碼歸到一個模塊能讓代碼更好用、更易讀。包(Package)定義了一個由模塊和子包組成的Python程序執(zhí)行環(huán)境。包本質(zhì)上就是一個分層次的文件目錄,包括若干模塊和若干子包。庫(Library)是借用自其他編程語言的概念,通常是指具有相關(guān)功能模塊的集合。在Python中,庫可以是模塊的形式,也可以是包的形式,實際是一個具有特定功能的代碼組合,庫中可以包含包、模塊和函數(shù)。任務(wù)2.2監(jiān)控文件系統(tǒng)更改任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)2.4調(diào)度運維任務(wù)任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)說明01OPTION02OPTION03OPTION了解pyinotify庫和文件系統(tǒng)更改監(jiān)控的實現(xiàn)機制了解watchdog庫及其基本用法使用pyinotify庫編寫文件系統(tǒng)更改監(jiān)控程序04OPTION使用watchdog庫編寫文件系統(tǒng)更改監(jiān)控程序任務(wù)2.1采集系統(tǒng)信息和管理進程相關(guān)知識2.2.1了解pyinotify庫安裝pyinotify庫pipinstallpyinotify測試pyinotify庫(1)創(chuàng)建/test目錄,在終端窗口中執(zhí)行以下命令進行該目錄更改的監(jiān)控。(2)打開另一個終端窗口,在/test目錄中創(chuàng)建一個名為newfile的文件。(3)切換回原終端窗口,觀察其中顯示的信息。<Eventdir=Falsemask=0x100maskname=IN_CREATname=newfilepath=/testpathname=/test/newfilewd=1><Eventdir=Falsemask=0x20maskname=IN_OPENname=newfilepath=/testpathname=/test/newfilewd=1>(4)測試完畢按<Ctrl>+<C>組合鍵退出監(jiān)控狀態(tài)。任務(wù)2.1采集系統(tǒng)信息和管理進程相關(guān)知識2.2.1了解pyinotify庫pyinotify庫的文件系統(tǒng)事件事件標(biāo)志含義IN_ACCESS文件被訪問IN_ATTRIB文件的元數(shù)據(jù)(屬性)被修改,如文件的權(quán)限被修改IN_CLOSE文件被關(guān)閉,等同于IN_CLOSE_WRITE|IN_CLOSE_NOWRITEIN_CLOSE_WRITE可寫文件被關(guān)閉IN_CLOSE_NOWRITE不可寫文件被關(guān)閉IN_CREATE文件或目錄在被監(jiān)控目錄中被創(chuàng)建IN_DELETE文件或目錄在被監(jiān)控目錄中被刪除IN_DELETE_SELF自刪除,即一個可執(zhí)行文件在執(zhí)行時刪除自己IN_MODIFY文件被修改IN_MOVE_SELF自移動,即一個可執(zhí)行文件在執(zhí)行時移動自己IN_MOVE文件被移動,等同于IN_MOVED_FROM|IN_MOVED_TOIN_MOVED_FROM文件或目錄被移出被監(jiān)控目錄IN_MOVED_TO文件或目錄被移入被監(jiān)控目錄IN_OPEN文件被打開IN_Q_OVERFLOW事件隊列溢出。此事件不屬于任何特定的監(jiān)控項目IN_UNMOUNT宿主文件系統(tǒng)被卸載任務(wù)2.1采集系統(tǒng)信息和管理進程相關(guān)知識2.2.1了解pyinotify庫pyinotify庫的基本用法(1)創(chuàng)建一個監(jiān)控管理器WatchManager對象。(2)添加需要監(jiān)控的對象??墒褂胊dd_watch(path,mask,rec=True)方法。(3)創(chuàng)建一個事件通知器Notifier對象。(4)持續(xù)監(jiān)聽事件并進行處理。任務(wù)2.1采集系統(tǒng)信息和管理進程相關(guān)知識2.2.2了解watchdog庫觀察者(監(jiān)控器)模型觀察者(Observer)被監(jiān)控對象事件處理器(EventHandler)任務(wù)2.1采集系統(tǒng)信息和管理進程相關(guān)知識2.2.2了解watchdog庫watchdog庫的API定義文件系統(tǒng)事件的類文件系統(tǒng)事件基類watchdog.events.FileSystemMovedEvent(FileSystemEvent)表示被監(jiān)控對象發(fā)生更改時觸發(fā)的文件系統(tǒng)事件。由該基類派生若干子類,表示特定類型的文件系統(tǒng)更改的文件系統(tǒng)事件。文件系統(tǒng)事件處理的類watchdog.events.FileSystemEventHandler是事件處理器的基類,用于處理事件。觀察者的類watchdog.observers.Observer類用于定義觀察者線程。任務(wù)2.1采集系統(tǒng)信息和管理進程相關(guān)知識2.2.2了解watchdog庫安裝watchdog庫pipinstallwatchdogwatchdog庫的基本用法(1)編寫FileSystemEventHandler類的子類,重寫相關(guān)的方法來定制事件處理器,以對發(fā)生的文件系統(tǒng)事件做出響應(yīng)。(2)創(chuàng)建一個Observer對象作為觀察者負(fù)責(zé)啟動監(jiān)控任務(wù)。(3)將事件處理器關(guān)聯(lián)到被監(jiān)控目錄。(4)啟動Observer線程,在不阻塞主線程的前提下等待事件生成,以便持續(xù)監(jiān)控文件系統(tǒng)更改,并做出相應(yīng)的響應(yīng)。任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)實現(xiàn)任務(wù)2.2.1基于pyinotify庫編寫文件系統(tǒng)更改監(jiān)控程序importsysimportpyinotify'''定制事件處理類'''classEventHandler(pyinotify.ProcessEvent):#定制所需的事件處理函數(shù)

defprocess_IN_CREATE(self,event):defprocess_IN_DELETE(self,event):defprocess_IN_MODIFY(self,event):'''文件系統(tǒng)更改監(jiān)控函數(shù),參數(shù)path為要監(jiān)控的文件或目錄路徑'''deffs_monitor(path):if__name__=='__main__':#被監(jiān)控目錄可以由命令行參數(shù)指定,如果不指定則監(jiān)控當(dāng)前目錄

path=sys.argv[1]iflen(sys.argv)>1else'.'fs_monitor(path)任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)實現(xiàn)任務(wù)2.2.2基于watchdog庫編寫文件系統(tǒng)更改監(jiān)控程序通用的文件系統(tǒng)更改監(jiān)控程序fromwatchdog.observersimportObserverfromwatchdog.eventsimportFileSystemEventHandlerimportsysimporttime'''定制事件處理器'''classFSEventHandler(FileSystemEventHandler):def__init__(self):FileSystemEventHandler.__init__(self)defon_moved(self,event):defon_created(self,event):defon_deleted(self,event):defon_modified(self,event):if__name__=="__main__":path=sys.argv[1]iflen(sys.argv)>1else'.'observer=Observer()event_handler=FSEventHandler()observer.schedule(event_handler,path,True)observer.start()try:whileTrue:time.sleep(1)exceptKeyboardInterrupt:observer.stop()observer.join()任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)實現(xiàn)任務(wù)2.2.2基于watchdog庫編寫文件系統(tǒng)更改監(jiān)控程序通用的文件系統(tǒng)更改監(jiān)控程序if__name__=="__main__":path=sys.argv[1]iflen(sys.argv)>1else'.'observer=Observer()event_handler=FSEventHandler()observer.schedule(event_handler,path,True)observer.start()try:whileTrue:time.sleep(1)exceptKeyboardInterrupt:observer.stop()observer.join()任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)實現(xiàn)任務(wù)2.2.2基于watchdog庫編寫文件系統(tǒng)更改監(jiān)控程序監(jiān)控特定文件類型的文件系統(tǒng)更改fromwatchdog.eventsimportPatternMatchingEventHandler…classFSEventHandler(PatternMatchingEventHandler):#定義初始化方法,需要兼顧其父類FileSystemEventHandlerdef__init__(self,patterns=None,ignore_patterns=None,ignore_directories=False,case_sensitive=False):super().__init__()self._patterns=patternsself._ignore_patterns=ignore_patternsself._ignore_directories=ignore_directoriesself._case_sensitive=case_sensitive…if__name__=="__main__":…#patterns參數(shù)指定匹配的模式,ignore_directories參數(shù)用于忽略目錄

event_handler=FSEventHandler(patterns=["*.txt","*.py","*.html"],ignore_directories=True)…任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)實現(xiàn)任務(wù)2.2.2基于watchdog庫編寫文件系統(tǒng)更改監(jiān)控程序自動備份新上傳的文件'''自定義事件處理器'''classFSEventHandler(FileSystemEventHandler):def__init__(self):FileSystemEventHandler.__init__(self)defon_created(self,event):ifnotevent.is_directory:bak_file(event.src_path)defon_modified(self,event):ifnotevent.is_directory:bak_file(event.src_path)'''備份文件的函數(shù)'''defbak_file(src):p=subprocess.Popen("cp"+src+"/bak/",shell=True,stdout=subprocess.PIPE)municate()ifp.returncode==0:print("備份上傳文件:",src)#returncode==0表示運行成功任務(wù)2.2監(jiān)控文件系統(tǒng)更改任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)2.4調(diào)度運維任務(wù)任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)說明01OPTION02OPTION03OPTION了解PycURL庫及其用途掌握PycURL庫的基本用法使用PycURL庫編寫Web服務(wù)監(jiān)控程序任務(wù)2.3監(jiān)控Web服務(wù)相關(guān)知識2.3.1PycURL庫簡介PycURL庫是用C語言編寫的Python第三方庫,是多協(xié)議文件傳輸庫libcurl的Python接口。PycURL庫可用于從Python程序中獲取指定URL的響應(yīng)對象,除了簡單的提取操作之外,還實現(xiàn)了libcurl庫的大部分功能。可以利用PycURL庫對網(wǎng)站進行抓包分析,監(jiān)測Web服務(wù)質(zhì)量。任務(wù)2.3監(jiān)控Web服務(wù)相關(guān)知識2.3.2PycURL庫的基本用法安裝PycURL庫sudoaptinstalllibcurl4-gnutls-devsudoaptinstalllibghc-gnutls-devpipinstallpycurl任務(wù)2.3監(jiān)控Web服務(wù)相關(guān)知識2.3.2PycURL庫的基本用法使用PycURL庫的API(1)創(chuàng)建Curl對象。c=pycurl.Curl()(2)使用Curl對象的setopt(option,value)方法設(shè)置Curl會話選項。(3)執(zhí)行請求任務(wù),使用perform()方法發(fā)起會話。(4)獲取返回的信息,使用getinfo(option)方法從Curl會話中提取并返回信息,采用調(diào)用該方法時Python的默認(rèn)編碼來對返回的字符串?dāng)?shù)據(jù)進行解碼。(5)執(zhí)行close()方法關(guān)閉、回收Curl對象,并結(jié)束Curl會話。任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)實現(xiàn)基于PycURL庫編寫Web服務(wù)監(jiān)控程序程序代碼importosimportsysimportpycurlWeb_URL=""c=pycurl.Curl()c.setopt(pycurl.URL,Web_URL)#設(shè)置要連接的URL┄┄#打開一個文件用來存儲返回的網(wǎng)頁頭部head_file=open(os.path.dirname(os.path.realpath(__file__))+"/head.txt","wb")c.setopt(pycurl.WRITEHEADER,head_file)#將返回的網(wǎng)頁內(nèi)容輸出到空設(shè)備文件,以免其輸出到控制臺fnull=open('/dev/null','wb')c.setopt(pycurl.WRITEDATA,fnull)任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)實現(xiàn)基于PycURL庫編寫Web服務(wù)監(jiān)控程序程序代碼#發(fā)起會話以執(zhí)行傳輸任務(wù)try:c.perform()exceptExceptionase:print("鏈接錯誤connecionerror:"+str(e))head_file.close()fnull.close()c.close()sys.exit()'''匯集返回的信息'''defgather_data():effective_url=c.getinfo(pycurl.EFFECTIVE_URL)┄┄任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)實現(xiàn)基于PycURL庫編寫Web服務(wù)監(jiān)控程序程序代碼'''輸出報告'''defreport():data=gather_data()print("網(wǎng)頁地址:%s"%(data["effective_url"]))print("HTTP狀態(tài)碼:%s"%(data["http_code"]))┄┄print("HTTP頭部大小:%.2fMB"%(data["header_size"]/1204))print("下載內(nèi)容長度:%.2fMB"%(data["content_length_download"]/1204))print("平均下載速度:%.2fMB/s"%(data["speed_download"]/1024))if__name__=='__main__':report()任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)實現(xiàn)基于PycURL庫編寫Web服務(wù)監(jiān)控程序Web服務(wù)監(jiān)測結(jié)果任務(wù)2.2監(jiān)控文件系統(tǒng)更改任務(wù)2.1采集系統(tǒng)信息和管理進程任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)2.4調(diào)度運維任務(wù)任務(wù)2.4調(diào)度運維任務(wù)任務(wù)說明01OPTION02OPTION03OPTION了解APScheduler庫的組件掌握APScheduler庫的基本用法使用Cron服務(wù)調(diào)度運維任務(wù)04OPTION使用APScheduler庫編寫程序調(diào)度運維任務(wù)任務(wù)2.4調(diào)度運維任務(wù)相關(guān)知識2.4.1APScheduler庫的組件觸發(fā)器(Trigger)任務(wù)存儲器(JobStore)執(zhí)行器(Executor)調(diào)度器(Scheduler)任務(wù)2.4調(diào)度運維任務(wù)相關(guān)知識2.4.2APScheduler庫的基本用法使用APScheduler庫編寫調(diào)度程序的基本步驟(1)根據(jù)應(yīng)用場景選擇合適的調(diào)度器、任務(wù)存儲器、執(zhí)行器和觸發(fā)器(2)準(zhǔn)備要調(diào)度的任務(wù)程序(3)創(chuàng)建一個調(diào)度器(4)添加一個調(diào)度任務(wù)(5)運行調(diào)度任務(wù)任務(wù)2.4調(diào)度運維任務(wù)相關(guān)知識2.4.2APScheduler庫的基本用法簡單的APScheduler庫使用示例fromapscheduler.schedulers.blockingimportBlockingSchedulerfromdatetimeimportdatetime#定義要調(diào)度的任務(wù)程序defmyjob1():print("當(dāng)前時間:%s"%datetime.now())defmyjob2():print("Hello!")#創(chuàng)建調(diào)度器scheduler=BlockingScheduler()#添加任務(wù),每隔10秒執(zhí)行一次myjob1()函數(shù)scheduler.add_job(myjob1,'interval',seconds=10)#添加任務(wù),每分鐘執(zhí)行一次myjob2()函數(shù)scheduler.add_job(myjob2,'cron',minute='*')scheduler.start()任務(wù)2.4調(diào)度運維任務(wù)相關(guān)知識2.4.2APScheduler庫的基本用法配置調(diào)度器fromapscheduler.schedulers.blockingimportBlockingSchedulerimportdatetimefromapscheduler.executors.poolimportThreadPoolExecutor,ProcessPoolExecutorfromtores.sqlalchemyimportSQLAlchemyJobStoredefmyjob(id='myjob'):print(id,'-->',datetime.datetime.now())#自定義任務(wù)存儲器jobstores={'default':SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')}#自定義執(zhí)行器executors={'default':ThreadPoolExecutor(20),#最大線程數(shù)為20(默認(rèn)為10)

'processpool':ProcessPoolExecutor(10)#進程池中最多有10個進程}任務(wù)2.4調(diào)度運維任務(wù)相關(guān)知識2.4.2APScheduler庫的基本用法配置調(diào)度器#創(chuàng)建自定義的調(diào)度器scheduler=BlockingScheduler(jobstores=jobstores,executors=executors,job_defaults=job_defaults)scheduler.add_job(myjob,args=['job_interval',],id='job_interval',trigger='interval',seconds=5,replace_existing=True)try:scheduler.start()except(KeyboardInterrupt,SystemExit):exit()任務(wù)2.4調(diào)度運維任務(wù)相關(guān)知識2.4.2APScheduler庫的基本用法調(diào)度程序事件#定義事件監(jiān)聽器defmy_listener(event):ifevent.exception:print('任務(wù)運行出錯:')else:print('任務(wù)正常運行:')#將事件監(jiān)聽器附加到調(diào)度器,監(jiān)聽任務(wù)執(zhí)行完畢和任務(wù)出錯事件scheduler.add_listener(my_listener,EVENT_JOB_EXECUTED|EVENT_JOB_ERROR)任務(wù)2.4調(diào)度運維任務(wù)任務(wù)實現(xiàn)任務(wù)2.4.1使用Cron服務(wù)調(diào)度運維任務(wù)(1)準(zhǔn)備要執(zhí)行的Python程序。(2)執(zhí)行crontab-e命令,輸入以下代碼。*/5****/autoom/02sysmon/venv/bin/python/autoom/02sysmon/webmon_bypycurl.py>>/test/test.log2>&1(3)執(zhí)行crontab-l命令檢查Cron配置文件的內(nèi)容。(4)打開/test/test.log文件,查看內(nèi)容以驗證運維任務(wù)的調(diào)度。任務(wù)2.4調(diào)度運維任務(wù)任務(wù)實現(xiàn)任務(wù)2.4.2基于APScheduler庫編程調(diào)度運維任務(wù)fromdatetimeimportdatetimeimportosfromapscheduler.schedulers.blockingimportBlockingScheduler#從sysinfo_bypsutil.py文件導(dǎo)入report()函數(shù)fromsysinfo_bypsutilimportreport'''定義要執(zhí)行的任務(wù)'''defmonjob():print('監(jiān)測時間:%s'%datetime.now())report()任務(wù)2.4調(diào)度運維任務(wù)任務(wù)實現(xiàn)任務(wù)2.4.2基于APScheduler庫編程調(diào)度運維任務(wù)if__name__=='__main__':scheduler=BlockingScheduler()scheduler.add_job(monjob,'interval',minutes=5)#給出強制退出的組合鍵,兼顧Linux和Windows平臺

print('按Ctrl+{0}鍵退出'.format('Break'if=='nt'else'C'))#先運行一次定義的任務(wù),再啟動調(diào)度器

monjob()try:scheduler.start()except(KeyboardInterrupt,SystemExit):print('已退出!')exit()THANKSLinux系統(tǒng)自動化運維(Python版)(微課版)工業(yè)和信息化精品系列教材項目2

處理文件內(nèi)容與配置文件能力CAPACITY要求了解文件內(nèi)容處理,學(xué)會文件內(nèi)容處理的Python編程。了解配置文件的常用格式,掌握配置文件操作的Python編程。了解模板,學(xué)會使用Jinja2模板編程處理文本文件。學(xué)會使用內(nèi)置模塊編程比對文件和目錄內(nèi)容。任務(wù)3.2操作配置文件任務(wù)3.1解析和處理文件內(nèi)容任務(wù)3.3使用模板高效處理文本文件任務(wù)3.4比對文件和目錄內(nèi)容任務(wù)3.1解析和處理文件內(nèi)容任務(wù)說明01OPTION02OPTION03OPTION了解字符串操作方法了解文本文件的讀寫方法掌握編碼和解碼的基本知識和實現(xiàn)方法04OPTION05OPTION掌握正則表達式的使用方法學(xué)會編程解析和處理文件內(nèi)容任務(wù)3.1解析和處理文件內(nèi)容相關(guān)知識3.1.1字符串及其操作字符串的形式字符串運算符字符串格式化Python內(nèi)置的字符串函數(shù)任務(wù)3.1解析和處理文件內(nèi)容相關(guān)知識3.1.2文本文件的讀寫文件操作的基本流程(1)打開文件(2)對打開的文件進行操作(3)關(guān)閉文件文本文件的讀取read():一次性讀取全部文件內(nèi)容readline():每次讀取一行的內(nèi)容,包括末尾的換行符(\n)readlines():一次性讀取全部內(nèi)容,以列表形式返回結(jié)果。文本文件的寫入write():將字符串寫入文件中,返回的是寫入的字符串長度。writelines():將一個字符串列表寫入文件任務(wù)3.1解析和處理文件內(nèi)容相關(guān)知識3.1.3編碼和解碼編碼標(biāo)準(zhǔn)ASCIIUTF-8GBKPython腳本文件的編碼格式Python3編碼默認(rèn)使用的是UTF-8使用PyCharm創(chuàng)建腳本文件默認(rèn)采用UTF-8格式編碼任務(wù)3.1解析和處理文件內(nèi)容相關(guān)知識3.1.3編碼和解碼讀寫文本文件的編碼格式在Linux系統(tǒng)中使用Python打開文本文件時,默認(rèn)編碼是UTF-8在Windows系統(tǒng)中文版中使用Python打開文本文件時,默認(rèn)編碼是GBKfile=open('文本文件','r',encoding='utf-8')字符串編碼轉(zhuǎn)換編碼使用字符串對象的encode()方法實現(xiàn)encode(encoding='UTF-8',errors='strict’)解碼使用字節(jié)碼對象的decode()方法實現(xiàn)bytes.decode(encoding='utf-8',errors='strict')任務(wù)3.1解析和處理文件內(nèi)容相關(guān)知識3.1.4正則表達式正則表達式的構(gòu)成普通字符元字符正則表達式類型基本正則表達式(BasicRegularExpression,BRE)擴展正則表達式(ExtendedRegularExpression,ERE)Perl正則表達式(PerlRegularExpression,PRE)任務(wù)3.1解析和處理文件內(nèi)容相關(guān)知識3.1.4正則表達式使用內(nèi)置的re模塊處理正則表達式匹配方法——findall()

re.findall(pattern,string,flags=0)替換方法——sub()

re.sub(pattern,repl,string,count=0,flags=0)分割方法——split()re.split(pattern,string[,maxsplit=0,flags=0])編譯正則表達式的方法re模塊提供compile()方法來編譯正則表達式,生成一個正則表達式對象供findall()、match()、search()等方法使用任務(wù)3.1解析和處理文件內(nèi)容任務(wù)實現(xiàn)任務(wù)3.1.1統(tǒng)計用戶賬戶withopen("/etc/passwd",mode="r")asf:#打開/etc/passwd文件

counts={"system":0,"regular":0} #計數(shù)用字典

regulars=[] #普通用戶列表

foriteminf:li=item.strip().split(":") #將讀取的每行數(shù)據(jù)去除換行符再分割為列表

user=dict( #使用字典保存用戶賬戶的主要信息

name=li[0],uid=li[2],gid=li[3],home=li[5],shell=li[6])uid=int(user["uid"])#通過UID判斷系統(tǒng)用戶和普通用戶

ifuidinrange(1000)oruid==65534:counts["system"]+=1elifuid>=1000:counts["regular"]+=1regulars.append(user)任務(wù)3.1解析和處理文件內(nèi)容任務(wù)實現(xiàn)任務(wù)3.1.1統(tǒng)計用戶賬戶print("系統(tǒng)用戶數(shù):",counts["system"])print("普通用戶數(shù):",counts["regular"])print("普通用戶列表")print("-"*80)#格式化輸出用戶列表print(format("用戶名","<20"),format("UID","^6"),format("GID","^6"),format("主目錄","<20"),format("Shell","<30"))foruserinregulars:print(format(user["name"],"<20"),format(user["uid"],">6"),format(user["gid"],">6"),format(user["home"],"<20"),format(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論