觀其大綱
第1章 Python語言與Linux系統管理
第2章 Python生态工具
第3章 打造指令行工具
第4章 文本處理
第5章 Linux系統管理
第6章 使用Python監控Linux系統
第7章 文檔與報告
第8章 網絡
第9章 Python自動化管理
第10章 深入淺出Ansible
第11章 使用Python打造MySQL專家系統
大綱細節
第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 3 6
第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與POP3 217
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 利用call方法實作可調用對象 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 本章總結
熟知概念