天天看點

python手機版下載下傳372-學習筆記:Python Linux系統管理與自動化運維

觀其大綱

第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 本章總結

熟知概念