本書共分11章,每一章都可以單獨成冊。讀者可以從頭開始閱讀,也可以選擇自己感興趣的章節(jié)閱讀。需要強調的是,本書是一本實戰(zhàn)類的書籍,因此,本書強調實踐的重要性。很多工程師學習Python,學完就忘,忘了再學,循環(huán)往復,就是因為實踐不充分導致的。本書包含了大量的實戰(zhàn)案例,可以很好地作為Python的進階教材,讀者也可以舉一反三,編寫自己的管理程序。
Preface?前言為何寫作本書我第一次接觸Python是在2008年的時候,當時還是一名大學生。有一位非常優(yōu)秀的學長通過《黑客與畫家》這本書了解到Python語言,并且認為Python將在未來幾年迅猛發(fā)展,在各個應用領域都會大有可為。因此,在國內還沒有廣泛使用Python語言時,這位學長便推薦我學習Python,F(xiàn)在的Python語言,流行程度已不用我多言,這一方面證實了PaulGraham(《黑客與畫家》的作者)的遠見卓識,同時,也反映出這位優(yōu)秀學長的聰明睿智。從這件事中,我深切地感受到要多與人交流,尤其是要與那些比自己優(yōu)秀的人交流。正是出于和大家交流的想法,我將這些年的Python使用心得,以及在網易云開發(fā)與運維的經驗匯集成一本書,也就是你現(xiàn)在看到的這本書。
如果大家身處互聯(lián)網,一定能夠切身地感受到Python語言的流行程度。Python語言由于其簡單易學、語法優(yōu)美、應用領域廣泛等諸多優(yōu)點,俘獲了大批的粉絲。通過Google搜索指數(shù)可以看到,Python語言在最近兩年出現(xiàn)了爆發(fā)式的增長,其在編程語言排行榜上的排名,從第8名一躍上升到第4名,并且有繼續(xù)上升的趨勢。越來越多的公司高薪招聘Python工程師,越來越多的世界名校開始講授Python語言,越來越多的項目使用Python語言進行開發(fā)。因此,從各個角度來說,Python都將大有可為,學習Python將是一個正確的選擇。
伴隨著云計算的高速發(fā)展,Python在系統(tǒng)管理領域也表現(xiàn)不俗。著名的云計算平臺OpenStack就是使用Python語言開發(fā)的,各大云計算廠商也選擇使用Python開發(fā)自己的內部系統(tǒng)。并且,由于云計算廠商托管的都是大規(guī)模服務器,為了提高運維效率、節(jié)約人力成本、快速響應需求,各大云計算廠商都不約而同地使用Python進行大規(guī)模服務器的部署和運維。
Python在Linux系統(tǒng)管理中,已經擔任了非常重要的角色。但是,講解Python在Linux系統(tǒng)管理中應用的書籍卻寥寥無幾,更多都是專注于Python語言、Python爬蟲和PythonWeb開發(fā)。難得的幾本也僅僅是介紹Python相關工具的使用而已。由于互聯(lián)網業(yè)務的復雜性和多樣性,這遠不能滿足互聯(lián)網公司的需求,公司更希望工程師能夠靈活地使用Python,根據業(yè)務需求開發(fā)自己的工具和系統(tǒng)。因此,本書不僅會介紹Python語言編寫的系統(tǒng)管理工具,還會講解如何使用Python構建自己的系統(tǒng)管理工具。
主要內容特色本書介紹了Python語言在Linux系統(tǒng)管理中的應用,包括編寫Python腳本管理Linux系統(tǒng),使用Python編寫的自動化工具管理Linux系統(tǒng),以及使用Python打造專屬的管理工具等。
本書以Linux系統(tǒng)管理為線索,以Python語言為載體,介紹了大量Python語言的應用案例。通過學習本書,不但可以使用Python語言管理Linux系統(tǒng),也為Python解決其他領域問題打下了堅實的基礎。書中每一章都會解決某一類問題,并且提供了問題的答案。如Python管理Linux文件和目錄,使用Python監(jiān)控Linux系統(tǒng),使用Python編寫自動化工具,使用Python進行自動化運維等。
通過學習本書,你可以:
掌握Python生態(tài)工具,提高自己的開發(fā)效率;學會如何使用Python構建自己的命令行工具;用Python編寫可維護性更強的文本處理程序;全方位監(jiān)控Linux系統(tǒng);使用Python自動化部署應用;管理操作系統(tǒng)配置;使用Python打造MySQL專家系統(tǒng);通過Python發(fā)送電子郵件。
本書讀者對象本書不是一本講解Python編程語言的書籍,也不是教授如何使用Python運維工具的書籍,而是一本講解Python在Linux系統(tǒng)管理中應用的實戰(zhàn)書籍。如果你還沒學過Python編程語言,建議先學習Python語言以后,再來閱讀本書。如果你從來沒有使用過Linux,書中部分章節(jié)可能會讓你感到困惑,不過依然有很多章節(jié)可以參考。因此,想要更好地學習本書內容,讀者需要具備以下條件:
Python語言基礎知識;Linux使用經驗;了解SSH的使用。
本書雖然主要講解Python在Linux系統(tǒng)管理中的應用,但是,書中很多例子都具有更加廣泛的應用場景。本書的最大特色是提供了大量的實戰(zhàn)案例,無論是剛學完Python語言,正在尋找Python實戰(zhàn)案例的讀者,還是想要學習Python在Linux系統(tǒng)管理中如何應用的讀者,都能從中受益。
綜上所述,本書適合以下幾類讀者:
使用Python語言的運維工程師;想要提高Python技能的開發(fā)工程師;想要了解Python在互聯(lián)網應用的在校學生;所有對Python實戰(zhàn)感興趣的讀者。
如何閱讀本書本書共分11章,每一章都可以單獨成冊。你可以從頭開始閱讀,也可以選擇自己感興趣的章節(jié)閱讀。
第1章介紹了Python語言的優(yōu)缺點和Python在Linux系統(tǒng)管理領域的應用,這一章主要回答“為什么學習Python”這個問題。
第2章介紹了多個Python生態(tài)工具。充分利用這些工具,不但可以有效提高工作效率,還能形成統(tǒng)一的代碼風格。此外,本章還會介紹如何解決Python中的環(huán)境依賴問題,包括如何在一臺服務器上使用不同的Python版本,如何對不同的項目安裝不同的依賴而不相互影響。相信通過學習本章介紹的工具,能夠幫助你解決在學習Python過程中遇到的環(huán)境問題。
第3~7章主要講解使用Python編寫腳本管理Linux,包括如何使用Python構建命令行工具、
網易杭州研究院云平臺開發(fā)工程師,還曾擔任網易的數(shù)據庫內核開發(fā)工程師和高級運維工程師。是網易云數(shù)據庫MySQL云平臺、MongoDB云平臺的核心開發(fā)人員,網易大規(guī)模MySQL系統(tǒng)運維的負責人,獨立完成MySQL存儲引擎的TNT自動化研發(fā)和測試。
精通Python、shell、linux、MySQL、java,有7年linux和Python相關經驗;熟悉MySQL、redis、leveldb源碼,近期關注大數(shù)據相關技術。
大會分享:2016年在全球敏捷運維峰會、PHP China、IMG社區(qū)、Oracle技術嘉年華分享MySQL和Python相關技術。
目 錄?Contents
推薦序一
推薦序二
推薦序三
前 言
第1章 Python語言與Linux系統(tǒng)管理 1
1.1 Python語言有多流行 1
1.2 Python語言為什么流行 3
1.3 Python語言有什么缺點 4
1.4 Python語言的應用場景 4
1.5 為什么Python適合Linux系統(tǒng)管理 5
1.6 使用Python 2還是Python 3 6
第2章 Python生態(tài)工具 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代碼規(guī)范檢查 34
2.6.1 PEP 8編碼規(guī)范介紹 34
2.6.2 使用pycodestyle檢查代碼規(guī)范 36
2.6.3 使用autopep8將代碼格式化 37
2.7 Python工作環(huán)境管理 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獲取命令行參數(shù) 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解析命令行參數(shù) 52
3.3.1 ArgumentParse解析器 52
3.3.2 模仿MySQL客戶端的命令行參數(shù) 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解析命令行參數(shù) 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 字符串函數(shù) 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實戰(zhàn) 108
4.4.4 案例:使用Jinja2生成HTML表格和XML配置文件 112
4.5 本章總結 116
第5章 Linux系統(tǒng)管理 117
5.1 文件讀寫 118
5.1.1 Python內置的open函數(shù) 118
5.1.2 避免文件句柄泄露 119
5.1.3 常見的文件操作函數(shù) 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庫讀取與創(chuàng)建tar包 141
5.6.2 使用tarfile庫讀取與創(chuàng)建壓縮包 142
5.6.3 案例:備份指定文件到壓縮包中 142
5.6.4 使用zipfile庫創(chuàng)建和讀取zip壓縮包 143
5.6.5 案例:暴力破解zip壓縮包的密碼 144
5.6.6 使用shutil創(chuàng)建和讀取壓縮包 146
5.7 Python中執(zhí)行外部命令 148
5.7.1 subprocess模塊簡介 149
5.7.2 subprocess模塊的便利函數(shù) 149
5.7.3 subprocess模塊的Popen類 151
5.8 綜合案例:使用Python部署MongoDB 152
5.9 本章總結 155
第6章 使用Python監(jiān)控Linux系統(tǒng) 156
6.1 Python編寫的監(jiān)控工具 157
6.1.1 多功能系統(tǒng)資源統(tǒng)計工具dstat 157
6.1.2 交互式監(jiān)控工具glances 160
6.2 使用Python打造自己的監(jiān)控工具 163
6.2.1 Linux系統(tǒng)的/proc目錄介紹 163
6.2.2 proc目錄下常用文件介紹 164
6.2.3 進程目錄下常用文件介紹 165
6.2.4 利用/proc目錄找到被刪除的文件 166
6.2.5 使用shell腳本監(jiān)控Linux 168
6.2.6 使用Python監(jiān)控Linux 170
6