Python 在 Linux 系統營運中都有哪些應用?

來源:互聯網
上載者:User
自學了一段時間python,感覺可能是我學習的姿勢不太對。總是感覺python相比於shell和perl更偏向於web開發。而對linux的營運管理偏弱。
拋開fabric等這類用python開發的營運工具不談。自己在日常營運中運用python能做些什嗎?比shell指令碼便捷或效率高的地方又體現在哪裡?
現在只用python寫過部分日誌分析指令碼和從頁面中提取uid產生連結然後測試播放等動作的簡單指令碼。
其他的就不知道做些什麼好了。
想請知乎上的前輩多給些指點,如果能有些具體執行個體就更好不過了。

相同問題也在v2ex上發表了提問 http://www.v2ex.com/t/75193

多謝大家

回複內容:

我更喜歡用“系統管理”來形容“營運”這項工作。營運聽起來是偏執行的一項工作。python在系統管理上的優勢在與強大的開發能力和完整的工具鏈。python的工程開發能力強大,遠強於各種shell和perl。易讀易寫,兼具物件導向和函數式風格,還有不錯元編程能力。通過系統化的將各種管理工具結合,對上述的各類工具進行二次開發,形成統一的伺服器管理系統。
和python類似的ruby也很適合編寫系統管理軟體,但是在相關庫和工具上,比python差太多。

舉個栗子: 某牛人,精通 bash,python,perl,ruby ,在工作中寫了數百個單一功能的指令碼(任何語言)來進行日常操作,涵蓋了監控,部署,網路設定,日誌分析,安全檢測 等等許許多多的方面,無所不包。他所作的,只是操作,並沒有把系統管理這項工作做好。再多的指令碼,也只是把“操作”這個行為做到極致。寫再多的指令碼,也不能轉化為公司在系統管理上的寶貴資產。

讓系統易於管理,是一個工程。只有像puppet(ruby),saltstack(python) 這樣的自動化管理工具,才能完整的描述整個系統,並且讓系統管理的方方面面納入統一的體系,而不是一堆指令碼。
python在伺服器管理工具上非常豐富,組態管理(saltstack) 批量執行( fabric, saltstack) 監控(Zenoss, nagios 外掛程式) 虛擬化管理( python-libvirt) 進程管理 (supervisor) 雲端運算(openstack) ...... 還有大部分系統C庫都有python綁定。
對於流程確定的事情,最終一定是納入系統管理的體系,寫成程式,成為系統的一部分。而不是無法複用游離與整體的各種指令碼。
隨著雲端運算時代的來臨,中小型公司,不需要營運了。大型公司,沒有工程開發能力的營運,是沒有競爭力的。現在不用 perl 了?謝邀。你說的對,Python對日常營運工作來說比Perl和Bash都弱。Python做Web開發也比PHP麻煩很多。我個人的感覺Python更像Java,不適合與Perl/Bash比較。
我個人常用的營運工具是Bash為主,Python主要用來做一些演算法演算。因為我的日常維護任務以檔案系統維護為主,比較語言要結合情境。

絕大部分的應用需求,所有語言都能完成,但是難易程度不同,選擇語言要看開發人員的熟練程度和需求的複雜程度。
如果只是“grep”需求,你選Bash執行grep最簡單,如果稍複雜就用awk,再複雜就用perl。用更通用的語言就是費力不討好。
如果是個矩陣計算需求,perl的數組能把你折騰死,bash的管道能把機器折騰死。

我下面這個觀點一定會有爭議(尤其是PHPer),我傾向於把進階語言分成三類:
1) 底層的C/C++
這是可以寫作業系統,操作硬體的。可以解決一切問題,但是絕大多數互連網項目不應該用。
2) 中性的Java/Python/Ruby/.NET系列
這是做項目的主要語言,平衡開發效率和執行效率。沒有明顯的亮點,亦沒有明顯的缺點。
3) 特長的PHP/Bash/Perl
在某些特定領域,應該選擇這些有特長的語言。隨著需求越來越全面,語言的短板越用越多,應該控制擴散。如果撇開 fabric 和 func 這種大殺器再說……我目前的感覺是,任何不是“閱後即焚”的一次性指令碼,尤其可能需要日後修改調整的、稍有邏輯處理的指令碼,都應該用 Python 代替 Bash。想想“我有一堆主機,我要分別……”這種數組操作吧。想想偉大的 bash 字串替換。想想 quoting。Bash 完美繼承了 Perl 的 “Write-only”屬性。

非營運,自己實驗室有一摞小機器的人路過。

@馮偉剛 執行效率 Bash 高?您的簽名裡“軟體工程師”是開玩笑的吧?

python_vs_bash_benchmark.zip


  • The Python program in this example is about 6 times faster than the BASH program.
  • Python is a little slower in this example as it is only 3 times faster than BASH
  • Python is roughly 5.5 times faster than BASH in this test.
  • With Python lists being 29 times faster and Python dictionaries being 23.7 times faster using BASH forany kind of sequential data manipulation is unacceptable (unless it is very small amounts of data).
  • Since in this simple function calling program Python is 11.77 times faster than BASH, BASH is thereforerestricted to linear program whereas Python is only 48% (verses the 476% of BASH) slower than the non function calling program and for that reason is a very good structured programming language (keep inmind that 10000 function calls were made in both programs).


其實根本不需要看任何測試。一個大量操作依賴處理序間通訊,沒有 JIT 和中間碼最佳化,對複雜資料結構的支援約等於零的 Bash,要和 Python 在功能和效率上進行任何比較的方法,就是執行 ./xxx.py 或者乾脆寫成 C 程式吧。bash用的熟的話固然不錯,但python的優點在於有很多web架構可視化營運過程和結果
這個從方便使用度上是沒法比的
你一個月寫幾個營運指令碼?維護幾個營運指令碼?這倆加起來少於10個的話,用bash和python都沒啥區別。

P.S. Python偏向web?太榮幸了…我以為會說PHP的…不會py的sa不是合格的sa, 曾經用expect管理了兩百台伺服器, 現在覺得太二了.

前兩天剛把miller的核心網卡中斷補丁指令碼用不到10行py搞定仍salt裡了. 可見py的簡潔.

營運自動化配置目前還是py和ruby為主如果拋開fabric,甚至saltstack、ansible這種營運工具的話,很難體現出python的強大。
可以讀一下 《Python UNIX 和Linux 系統管理指南》, 體會一下。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.