天天看點

Shell運維的重要性_python的作用

Linux 運維人員就是負責 Linux 伺服器的運作和維護。随着網際網路的爆發,Linux 運維在最近幾年也迎來了春天,出現了大量的職位需求,催生了一批 Linux 運維教育訓練班。

如今的 IT 伺服器領域是 Linux、UNIX、Windows 三分天下,Linux 系統可謂後起之秀,特别是“網際網路熱”以來,Linux 在伺服器端的市場佔有率不斷擴大,每年增長勢頭迅猛,開始對 Windows 和 UNIX 的地位構成嚴重威脅。

下圖是2016年初國内伺服器端各個作業系統的市場佔有率:

Shell運維的重要性_python的作用

可以看出來,Linux 占 80% 左右(包括 CentOS、Ubuntu 等),Windows 占 12.8%,Solaris 占 6.2%。在未來的伺服器領域,Linux 是大勢所趨。

Linux 在伺服器上的應用非常廣泛,可以用來搭建Web伺服器、資料庫伺服器、負載均衡伺服器(CDN)、郵件伺服器、DNS伺服器、反向代理伺服器、VPN伺服器、路由器等。用 Linux 作為伺服器系統不但非常高效和穩定,還不用擔心版權問題,不用付費。

正是由于 Linux 伺服器的大規模應用,才需要一批專業的人才去管理,這群人就是  Linux 運維工程師(OPS) 。

OPS 的主要工作就是搭建起運作環境,讓程式員寫的代碼能夠高效、穩定、安全地在伺服器上運作,他們屬于後勤部門。OPS 的要求并不比程式員低,優秀的 OPS 擁有架設伺服器叢集的能力,還會程式設計開發常用的工具。

OPS 這項工作的細節内容包括:

  • 安裝作業系統,例如 CentOS、Ubuntu 等。
  • 部署代碼運作環境,例如網站背景語言采用 PHP,就需要安裝 Nginx、Apache、MySQL、PHP運作時等。
  • 及時修複漏洞,防止伺服器被攻擊,這包括Linux本身漏洞以及各個軟體的漏洞。
  • 根據項目需求更新軟體,例如 PHP 7.0 在性能方面獲得了重大突破,如果現在伺服器壓力比較大,就可以考慮将舊版的 PHP 5.x 更新到 PHP 7.0。
  • 監控伺服器壓力,别讓伺服器當機。例如淘寶雙十一的時候就會瞬間湧入大量使用者,導緻部分伺服器當機,網頁沒法通路,甚至連支付寶都不能使用。
  • 分析日志,及時發現代碼或者環境的問題,通知相關人員修複。

這些任務隻要登入遠端伺服器,或者去機房連接配接伺服器(下圖所示)就能夠完成,為什麼要用 Shell 程式設計呢?

Shell運維的重要性_python的作用

圖:OPS 在機房中用筆記本連接配接伺服器

因為 OPS 面對的是成千上萬台的伺服器,不是十台八台,你總不能把同樣的工作重複成千上萬遍吧,那時估計黃花菜都涼了,市場也成一片紅海了。

伺服器一旦多了,這些人力工作都需要自動化起來,跑一段代碼就能在成千上萬台伺服器上完成相同的工作,例如服務的監控、代碼快速部署、服務啟動停止、資料備份、日志分析等。

Shell 腳本很适合處理純文字類型的資料,而 Linux 中幾乎所有的配置檔案、日志檔案(如 NFS、Rsync、Httpd、Nginx、MySQL 等),以及絕大多數的啟動檔案都是純文字類型的檔案。

下面的手鍊形象地展示了 Shell 在運維工作中的地位:

Shell運維的重要性_python的作用

運維“手鍊”的組成:每顆“珍珠”都是一項服務,将珍珠穿起來的“線”就是 Shell。

Shell 腳本是實作 Linux 系統自動管理以及自動化運維所必備的工具,Linux 的底層以及基礎應用軟體的核心大都涉及 Shell 腳本的内容。每一個合格的 Linux 系統管理者或運維工程師,都應該能夠熟練的編寫 Shell 腳本,隻要這樣才能提升運維人員的工作效率,減少不必要的重複勞動,為個人的職場發展奠定較好的基礎。

Shell、Python 和 Perl

除了 Shell,能夠用于 Linux 運維的腳本語言還有 Python 和 Perl。

1) Perl 語言

Perl 比 Shell 強大很多,在 2010 年以前很流行,它的文法靈活、複雜,在實作不同的功能時可以用多種不同的方式,缺點是不易讀,團隊協作困難。

Perl 腳本已經成為曆史了,現在的 Linux 運維人員幾乎不需要了解 Perl 了,最多可以了解一下 Perl 的安裝環境。

2) Python 語言

Python 是近幾年非常流行的語言,它不但可以用于腳本程式開發,也可以實作 Web 程式開發(知乎、豆瓣、YouTube、Instagram 都是用 Python 開發),甚至還可以實作軟體的開發(大名鼎鼎的 OpenStack、SaltStack 都是 Python 語言開發)、遊戲開發、大資料開發、移動端開發。

現在越來越多的公司要求運維人員會 Python 自動化開發,Python 也成了運維人員必備的技能,每一個運維人員在熟悉了 Shell 之後,都應該再學習 Python 語言。

3) Shell

Shell 腳本的優勢在于處理偏作業系統底層的業務,例如,Linux 内部的很多應用(有的是應用的一部分)都是使用 Shell 腳本開發的,因為有 1000 多個 Linux 系統指令為它作支撐,特别是 Linux 正規表達式以及三劍客 grep、awk、sed 等指令。

對于一些常見的系統腳本,使用 Shell 開發會更簡單、更快速,例如,讓軟體一鍵自動化安裝、優化,監控報警腳本,軟體啟動腳本,日志分析腳本等,雖然 Python 也能做到這些,但是考慮到掌握難度、開發效率、開發習慣等因素,它們可能就不如 Shell 腳本流行以及有優勢了。對于一些常見的業務應用,使用 Shell 更符合 Linux 運維 簡單、易用、高效 的三大原則。

Python 語言的優勢在于開發 複雜的運維軟體 、Web 頁面的管理工具和Web業務的開發(例如 CMDB 自動化運維平台、跳闆機、批量管理軟體 SaltStack、雲計算 OpenStack 軟體)等。

我們在開發一個應用時,應該根據業務需求,結合不同語言的優勢以及自己擅長的語言來選擇,揚長避短,進而達到高效開發、易于自己維護的目的。