在 Linux 系統管理中 Python腳本 可以完全代替 Bash腳本 嗎?
01-29
在python里有個module叫做
subprocess模塊里有個函數叫做subprocess.call
你help看一下 這個語句可以執行任何linux command。所以替代是可以替代,但是各有各的長處。
比如你tar解壓你一個文件 你說你是tar zxvf xxxx.tar.gz好呢?還是在python里先構造一個tarfile的實例再一些一堆代碼好呢?推薦你看一本書:Python UNIX和Linux系統管理指南
只要你想,當然是可以的。
Python和Ruby都比Bash和Perl完善,也有足夠的表達能力,但是相比較而言:
0. 語法還是繁瑣;1. 沒有充分的可移植性。後者是很致命的,尤其在一天三變的伺服器操作系統世界裡。
各擅勝場,bash對於串接流程,調用,組合小工具和二進位命令上比python方便太多。但是稍微複雜點的數據結構bash就不合適,用python寫更好。很好權衡,那個方便用哪個
Shell腳本寫得太長太複雜了比較難調試,也比較難懂。以我現在的菜鳥水準,只敢寫簡單的Shell腳本,盡量不去嵌套使用循環或者分支語句。腳本里某些較為複雜的操作提取出來用python腳本或者其他高級語言來實現,用Shell腳本把它們粘結起來。
舉例來講,做一個日常資料備份:把指定目錄的下的log文件複製到另一個位置,然後壓縮,最後發email給自己。複製和壓縮用Linux命令直接做比較好,簡單直接;發email較為複雜(因為一些原因沒有用sendmail之類的系統工具,而是要調用smtp伺服器,還得認證),就寫了個python腳本實現。Perl 笑而不語 ( ???)
啥順手用啥
另外 Bash 基本都是 4.x 了,有什麼問題嗎?缺調試?自己拼一個啊。你可以開腦洞把 . 命令改掉,這樣就能提供簡單的 Pseudo-stacktrace 了,諸如此類,特別適合小學生和初二學生。各有優勢。主要還是看你的project需求是啥。bash和python都是sysadmin應該說比較需要的。再加上使用puppet,ganglia,icinga啥的,這個領域就舒服多了。
遍地subprocess還是略顯繁瑣。
如果不想用bash建議嘗試下fish,設計思想相比各種老式sh有巨大的進步。http://fishshell.com/docs/current/理論可行,圖靈等價
那個順手用那個,個人是簡單的bash,複雜一點的用python
推薦閱讀:
※Linux中內核頁表是幹嘛用的,為什麼要有內核頁表?
※linux 怎麼限制使用命令?
※Linux交換空間可以和其他目錄放在不同的硬碟中嗎?
※大家都用linux做什麼?我剛安裝debian9,如何用它學習編程?