Python Linux 系統管理與自動化運維
內容描述
本書共分11章,每一章都可以單獨成冊。
讀者可以從頭開始閱讀,也可以選擇自己感興趣的章節閱讀。
需要強調的是,本書是一本實戰類的書籍,因此,本書強調實踐的重要性。
很多工程師學習Python,學完就忘,忘了再學,循環往復,就是因為實踐不充分導致的。
本書包含了大量的實戰案例,可以很好地作為Python的進階教材,讀者也可以舉一反三,編寫自己的管理程序。
目錄大綱
推薦序一
推薦序二
推薦序三
前言
第1章Python語言與Linux系統管理1
1.1 Python語言有多流行1
1.2 Python語言為什麼流行3
1.3 Python語言有什麼缺點4
1.4 Python語言的應用場景4
1.5為什麼Python適合Linux系統管理5
1.6使用Python 2還是Python 36
第2章Python生態工具9
2.1 Python內置小工具9
2.1.1 1秒鍾啟動一個下載服務器10
2.1.2字符串轉換為JSON 10
2.1.3檢查第三方庫是否正確安裝11
2.2 pip高級用法12
2.2.1 pip介紹12
2.2.2 pip常用命令12
2.2.3加速pip安裝的技巧14
2.3 Python編輯器15
2.3.1編寫Python的vim插件15
2.3.2 Windows下Python編輯器PyCharm介紹17
2.4 Python編程輔助工具18
2.4.1 Python交互式編程18
2.4.2使用IPython交互式編程20
2.4.3 jupyter的使用29
2.5 Python調試器31
2.5.1標準庫的pdb 32
2.5.2開源的ipdb 34
2.6 Python代碼規範檢查34
2.6.1 PEP 8編碼規範介紹34
2.6.2使用pycodestyle檢查代碼規範36
2.6.3使用autopep8將代碼格式化37
2.7 Python工作環境管理39
2.7.1使用pyenv管理不同的Python版本39
2.7.2使用virtualenv管理不同的項目42
2.8本章總結43
第3章打造命令行工具44
3.1與命令行相關的Python語言特性44
3.1.1使用sys.argv獲取命令行參數45
3.1.2使用sys.stdin和fileinput讀取標準輸入46
3.1.3使用SystemExit異常打印錯誤信息48
3.1.4使用getpass庫讀取密碼49
3.2使用ConfigParse解析配置文件49
3.3使用argparse解析命令行參數52
3.3.1 ArgumentParse解析器52
3.3.2模仿MySQL客戶端的命令行參數54
3.4使用logging記錄日誌55
3.4.1日誌的作用55
3.4.2 Python的logging模塊56
3.4.3配置日誌格式56
3.5與命令行相關的開源項目59
3.5.1使用click解析命令行參數59
3.5.2使用prompt_toolkit打造交互式命令行工具61
3.6本章總結64
第4章文本處理65
4.1字符串常量66
4.1.1定義字符串66
4.1.2字符串是不可變的有序集合68
4.1.3字符串函數71
4.1.4案例:使用Python分析Apache的訪問日誌79
4.1.5字符串格式化83
4.2正則表達式85
4.2.1正則表達式語法86
4.2.2利用re庫處理正則表達式87
4.2.3常用的re方法90
4.2.4案例:獲取HTML頁面中的所有超鏈接94
4.3字符集編碼94
4.3.1編碼歷史95
4.3.2 UTF—8編碼96
4.3.3從字符集的問題說起98
4.3.4 Python 2和Python 3中的Unicode 99
4.4 Jinja2模板101
4.4.1模板介紹102
4.4.2 Jinja2語法入門102
4.4.3 Jinja2實戰108
4.4.4案例:使用Jinja2生成HTML表格和XML配置文件112
4.5本章總結116
第5章Linux系統管理117
5.1文件讀寫118
5.1.1 Python內置的open函數118
5.1.2避免文件句柄洩露119
5.1. 3常見的文件操作函數120
5.1.4 Python的文件是一個可迭代對象121
5.1.5案例:將文件中所有單詞的首字母變成大寫122
5.2文件與文件路徑管理123
5.2.1使用os.path進行路徑和文件管理123
5.2.2使用os模塊管理文件和目錄126
5.2.3案例:打印常用的10條Linux命令128
5.3查找文件129
5.3.1使用fnmatch找到特定的文件129
5.3.2使用glob找到特定的文件130
5.3.3使用os.walk遍歷目錄樹131
5.3.4案例:找到目錄下大(或老)的十個文件132
5.4高級文件處理接口shutil 134
5.4.1複製文件和文件夾135
5.4 .2文件和文件夾的移動與改名135
5.4.3刪除目錄136
5.5文件內容管理136
5.5.1目錄和文件比較137
5.5.2 MD5校驗和比較139
5.5.3案例:找到目錄下的重複文件139
5.6使用Python管理壓縮包141
5.6.1使用tarfile庫讀取與創建tar包141
5.6.2使用tarfile庫讀取與創建壓縮包142
5.6.3案例:備份指定文件到壓縮包中142
5.6.4使用zipfile庫創建和讀取zip壓縮包143
5.6.5案例:暴力破解zip壓縮包的密碼144
5.6.6使用shutil創建和讀取壓縮包146
5.7 Python中執行外部命令148
5.7.1 subprocess模塊簡介149
5.7.2 subprocess模塊的便利函數149
5.7.3 subprocess模塊的Popen類151
5.8綜合案例:使用Python部署MongoDB 152
5.9本章總結155
第6章使用Python監控Linux系統156
6.1 Python編寫的監控工具157
6.1.1多功能係統資源統計工具dstat 157
6.1.2交互式監控工具glances 160
6.2使用Python打造自己的監控工具163
6.2.1 Linux系統的/proc目錄介紹163
6.2. 2 proc目錄下常用文件介紹164
6.2.3進程目錄下常用文件介紹165
6.2.4利用/proc目錄找到被刪除的文件166
6.2.5使用shell腳本監控Linux 168
6.2.6使用Python監控Linux 170
6.3使用開源庫監控Linux 172
6.3.1 psutil介紹172
6.3.2 psutil提供的功能函數172
6.3.3綜合案例:使用psutil實現監控程序177
6.3.4 psutil進程管理180
6.4使用pyinotify監控文件系統變化181
6.4.1 pyinotify模塊介紹181
6.4.2 pyinotify模塊API 182
6.4.3事件標誌與事件處理器182
6.5監控應用程序184
6.5.1使用Python監控MySQL 184
6.5.2使用Python監控MongoDB 185
6.6本章總結185
第7章文檔與報告186
7.1使用Python處理Excel文檔187
7.1.1 openpyxl簡介與安裝187
7.1.2使用openpyxl讀取Excel文檔187
7.1.3使用openpyxl修改Excel文檔192
7.1.4案例:合併多個Excel文檔到一個Excel文檔195
7.2使用Python操作PDF文檔197
7.2.1 PyPDF2安裝與介紹197
7.2.2使用PdfFileReader讀取PDF文件198
7.2.3使用PdfFileWriter創建PDF文件199
7.2.4修改PDF頁面201
7.2.5使用PdfFileMerger合併多個PDF文件203
7.3使用Python歸檔圖片205
7.3.1 Exif信息介紹205
7.3.2在Python使用PIL查看圖片元信息207
7.4發送報告210
7.4.1 SMTP協議211
7.4.2郵箱設置(以QQ郵箱為例)212
7.4.3使用標準庫的smtplib與mime發送郵件212
7.4.4使用開源的yagmail發送郵件216
7.5接收郵件217
7.5.1接收郵件協議IMAP與POP3217
7.5.2使用開源從imapclient接收郵件217
7.5.3使用pyzmail解析郵件219
7.5.4使用imapclient刪除郵件219
7.6綜合案例:使用Python打造一個geek的郵件客戶端220
7.6.1 emcli的功能設計220
7.6.2 emcli的功能實現221
7.6.3使用setuptools打包源碼223
7.6.4使用twine上傳到PyPi 224
7.7本章總結225
第8章網絡226
8.1列出網絡上所有活躍的主機226
8.1.1使用ping命令判斷主機是否活躍227
8.1.2使用Python判斷主機是否活躍228
8.1.3使用生產者消費者模型減少線程的數量229
8.2端口掃描231
8.2.1使用Python編寫端口掃描器232
8.2.2使用nmap掃描端口234
8.2.3使用python—nmap進行端口掃描237
8.3使用IPy進行IP地址管理238
8.3.1 IPy模塊介紹239
8.3.2 IPy模塊的基本使用239
8.3.3網段管理241
8.4使用dnspython解析DNS 242
8.4.1 dnspython簡介與安裝242
8.4.2使用dnspython進行域名解析242
8.5網絡嗅探器Scapy 244
8.5. 1 Scapy簡介與安裝245
8.5.2 Scapy的基本使用245
8.5.3使用Scapy發送數據報247
8.5.4使用Scapy構造DNS查詢請求248
8.5.5使用Scapy進行網絡嗅探251
8.5.6案例:使用Scapy嗅探信用卡信息251
8.6本章總結252
第9章Python自動化管理253
9.1使用SSH協議訪問遠程服務器254
9.1.1 SSH協議254
9.1.2 OpenSSH實現254
9.1.3使用密鑰登錄遠程服務器256
9.1.4使用ssh—agent管理私鑰257
9.2使用Polysh批量管理服務器258
9.2.1批量修改密碼259
9.2.2 Polysh的使用260
9.3 SSH協議的Python實現paramiko 261
9.3.1 paramiko的安裝261
9.3.2 SSHClient類與SFTPClient類261
9.3.3 paramiko的基本使用262
9.3.4使用paramiko部署監控程序264
9.4自動化部署工具Fabric 264
9.4.1 Fabric安裝265
9.4.2 Fabric使用入門265
9.4.3 fab的命令行參數267
9.4.4 Fabric的env字典267
9.4.5 Fabric提供的命令269
9.4.6 Fabric提供的上下文管理器271
9.4.7 Fabric提供的裝飾器273
9.4.8其他功能函數277
9.4.9使用Fabric源碼安裝redis 279
9.4.10綜合案例:使用Fabric部署Flask應用280
9.5本章總結284
第10章深入淺出Ansible 286
10.1 Ansible介紹287
10.1.1 Ansible的優點287
10.1.2 Ansible與Fabric之間比較288
10.1.3 Ansible與SaltStack之間比較289
10.2 Ansible使用入門290
10.2.1安裝Ansible 290
10.2.2 Ansible的架構290
10.2.3 Ansible的運行環境291
10.2.4 Ansible的ad—hoc模式292
10.2.5使用playbook控制服務器293
10.3 Inventory管理294
10.3.1 hosts文件位置294
10.3.2靈活定義hosts文件內容295
10.3.3靈活匹配hosts文件內容296
10.3.4動態Inventory獲取297
10.3.5 Inventory行為參數302
10.3.6定義服務器變量303
10.4 YAML語法304
10.5 Ansible模塊308
10.5.1 Ansible的模塊工作原理308
10.5.2模塊列表與幫助信息309
10.5.3常用的Ansible模塊309
10.5.4模塊的返回值318
10.6 Playbook 319
10.6.1 Playbook的定義319
10.6.2使用ansible—playbook執行Playbook 322
10.6.3 Playbook的詳細語法324
10.6.4使用Playbook部署nginx 331
10.6.5使用Playbook部署MongoDB 334
10.6.6 Playbook中的高級語法335
10.7 role的定義與使用341
10.7.1 role的概念341
10.7.2使用ansible—galaxy命令管理role 342
10.7.3如何使用role 343
10.7.4使用role改造部署MongoDB的例子344
10.8 Ansible的配置文件345
10.8.1配置文件的查找路徑345
10.8.2 Ansible中的常用配置345
10.9 Ansible的佳實踐346
10.9.1 Ansible的文件組織346
10.9.2 Ansible佳實踐348
10.9.3使用role部署LAMP應用349
10.10本章總結352
第11章使用Python打造MySQL專家系統354
11.1 Python語言高級特性354
11.1.1深入淺出Python生成器355
11.1.2深入淺出Python裝飾器360
11.1.3 Python上下文管理器368
11.2 MySQL數據庫372
11.2.1 MySQL數據庫介紹372
11.2.2 Python連接數據庫373
11.2. 3使用MySQLdb訪問MySQL數據庫375
11.2.4使用上下文管理器對數據庫連接進行管理378
11.2.5案例:從csv文件導入數據到MySQL 379
11.3 Python並發編程381
11.3.1 Python中的多線程381
11.3.2線程同步與互斥鎖384
11.3.3線程安全隊列Queue 386
11.3.4案例:使用Python打造一個MySQL壓測工具387
11.4專家系統設計390
11.4.1專家系統使用391
11.4.2專家系統檢查內容391
11.4 .3如何進行數據庫檢查392
11.4.4專家系統評分體系394
11.5 MySQL專家系統整體架構396
11.5.1專家系統架構設計396
11.5.2專家系統文件組織398
11.6數據庫專家系統的客戶端設計400
11.6.1實現數據庫連接池400
11.6.2使用裝飾器檢查參數402
11.6.3利用Python的動態語言特性執行命令403
11.6.4利用方法實現可調用對象405
11.6.5 Python的property 407
11.7數據庫專家系統服務端設計408
11.7.1將相同的操作提升到父類中408
11.7.2在Python中實現map—reduce模型409
11.7.3利用動態語言特性實現工廠模式411
11.8本章總結412
作者介紹
網易杭州研究院雲平台開發工程師,還曾擔任網易的數據庫內核開發工程師和高級運維工程師。
是網易云數據庫MySQL雲平台、MongoDB雲平台的核心開發人員,網易大規模MySQL系統運維的負責人,獨立完成MySQL存儲引擎的TNT自動化研發和測試。
精通Python、shell、linux、MySQL、java,有7年linux和Python相關經驗;熟悉MySQL、redis、leveldb源碼,近期關注大數據相關技術。
大會分享:2016年在全球敏捷運維峰會、PHP China、IMG社區、Oracle技術嘉年華分享MySQL和Python相關技術。