運維工程師必須掌握的基礎技能有哪些?


最後更新:2015-08-27

這個問題挺好的,回答這個問題也是對自身的審查,看看自己還欠缺哪些。(所以我估計得好好思考下,也許下一刻我就會突然驚醒,發現我還是戰⑤渣)

首先限定在Linux運維工程師

回答僅代表我想到,不代表我都會 :(

技能

1. Linux基礎

包括對Linux整體的理解/使用和基本命令:

  • 了解Linux FHS : Filesystem Hierarchy Standard,國人寫的這本書不錯 Linux系統架構與目錄解析 (豆瓣)
  • 入門Linux:鳥哥的Linux私房菜.基礎學習篇(第三版) (豆瓣) 個人認為鳥哥的這本書是一本非常好的入門書
  • 基本操作命令:Google,如Linux command cheat sheet
  • 熟悉至少一個內置編輯器: vi, nano
  • 至少熟悉一個發行版(或系列),建議作為伺服器常用的如Centos, Debian, Ubuntu,可以了解多個常用發行版
  • 個人使用/開發盡量在Linux上,比如我前期選擇了 Gentoo Welcome – Gentoo Linux ,非常Cool的一個Linux發行版,配合官方的 Handbook Handbook:Main Page,可以學到很多東西

2. 運維的命令:

運維相關的工具(命令),了解它能解決很多問題。

前幾天剛回答了一個問題:如何才能更深入的學習linux?

裡面的圖在這裡也可以用到:

可以對著圖對學習了解這些命令 (&抱歉圖片的原始來源我沒有搜到,如果有朋友知道,麻煩告訴我,謝謝& 感謝 @jeremy yang 的提示,已經搜到來源 http://www.brendangregg.com/linuxperf.htmlhttp://www.slideshare.net/brendangregg/linux-performance-analysis-and-tools)。

另外我個人也會對平時用到的這些工具做一個整理和記錄,總結到我的個人維基上:Wiki · Tanky Woo

3. 基礎服務:

  • LAMP或LNMP :Apache/Nginx,MySQL,PHP/Python/Perl LAMP (software bundle)
  • FTP
  • DNS
  • SAMBA
  • EMAIL
  • NTP
  • DHCP
  • ...

可以本地搭建練練手

這裡推薦鳥哥另外一本書 伺服器架設篇: 鳥哥的Linux私房菜 (豆瓣)

4. 運維平台工具:

也在這個問題 如何才能更深入的學習linux? 里提到了:

  • Nagios
  • Puppet
  • Zabbix
  • Cacti
  • SaltStack
  • ....

可以選擇性的折騰下,因為這個涉及到業務,沒有實際環境,很難去理解他們的功能和特點。

5. 腳本:

  • 必備:Shell
  • 額外:Python,Perl...

6. 底層:

  • Linux C,內核

7. 網路:

網路是非常重要的一塊

  • 把《TCP/IP協議詳解》多看幾遍,理解。
  • 熟練使用tcpdump等抓包工具

8. 安全:

  • 防火牆配置,如 iptables, ipset

9. 硬體:

  • 介面類型
  • 查看硬體信息
  • 知道各類型伺服器,如塔式、機架式、刀片式

10. 其它:

了解更多特定技能要求的方式:

Google搜"Linux運維工程師 招聘",看看他們的需求。

最後推薦一本書:Unix/Linux系統管理技術手冊 UNIX/Linux 系統管理技術手冊 (豆瓣)

後續想到再做補充

素養/處理方式

除了技能,我覺得素養(態度)也可以談談

這個正好看到右邊相關問題:運維工程師需要具備哪些性格特質?

1. 安全

運維人員的許可權很大,所以一定要保證帳號/私鑰的安全。

  • 最好使用加密工具存儲。比如truecrypt,1password
  • 基於本地存儲。切勿用網盤,也不建議用lastpass等
  • ssh私鑰添加密碼

以上任何一點都很重要,否則弄丟了,風險會非常大。

2. 責任心

如上面那個帖子里 @山大 提到的 Owner 意識

  • 遇到報警,第一時間處理,而不要等著他人去處理
  • 如果無法處理,應該第一時間讓同事協助幫忙,而不要禁止報警,讓問題掩蓋

3. 細心

你的任何一個操作,都可能造成系統的損壞、業務出問題。所以敲命令時一定要細心、再三確認。你敲的再快,也就節省那麼一點時間,出了問題才是大事。

4. 推進/改善

如果代碼有問題,導致系統開銷很大,比如負載,io等。應該第一時間和開發部門確認,要求優化代碼。

5. 進取心/不斷學習

運維的知識範圍很廣,要不斷學習。遇到問題,做好分析記錄,事後還可以在部門內分享交流。

這也是我為什麼熱衷於寫技術博客和維基的原因,好記性不如爛筆頭。記錄整理的過程也是一個思考升華的過程。

再給一個乾貨,我們公司(知道創宇)的技能表:http://blog.knownsec.com/Knownsec_RD_Checklist/v3.0.html,裡面的技能點非常全面,也包含了運維相關


歡迎評論補充

其它的一些回答都非常棒,強烈建議也看看!


創宇的Tanky Woo兄弟已經概括的很好很全面了, 下面根據工作常用內容再補充細化一下,分兩個層面吧,從技能上,以及意識上寫一寫(高手見笑):
l 技能篇
一、
基礎工具(操作流):

  1. vi ,這個是必須的,因為伺服器的運維多用遠程登錄,沒有GUI。一些對伺服器資源佔用要求嚴格的公司會在安裝時就要求最小化安裝,然後再按需安裝業務程序的依賴軟體。這種情況默認桌面環境甚至Xserver是不安裝的。不會用vi,會很痛苦。vi較常用的:查找,精確複製粘貼,精準定位至要編輯的行,表達式作字元串替換。
  2. 熟悉windows與linux之間相連接的工具。(Secure CRT, vnc, rdesktop,winscp),提到上面幾個工具是因為你有可能在你的同事或者客戶的windows機器上連linux server
  3. 此條多是照搬rhct的內容: 懂fdisk/parted分區工具,管理swap,管理用戶,查看主機配置(主機型號,cpu型號,物理內存數量(比如看到有16條單根8G的內存),如果是代客戶運維,這些東西與客戶採購與系統擴容聯繫緊密,扯遠了),lvm管理,文件系統管理,網路配置管理/多網卡綁定,各發行版上
    二進位/源代碼包的安裝,軟體包依賴關係解決,查看系統當前負載(內存佔用top 10進程列表,cpu佔用top10進程列表,IO負載),熟悉常用系統日誌的查看方法
  4. 伺服器配置安裝部分:熟悉最常用
    的ftp,http,nfs,samba,dns,dhcp,mail的一般配置方法。
  5. 熟悉系統常用中間件/資料庫的安裝(tomcat,jboss,was,oracle),可以不熟悉它們的配置
  6. 理解「環境變數」及其作用,能寫shell script ,知道一點expect/sed/awk, 會使工作有效率

二、
進階篇(分析流)

  1. 熟悉HA集群以及負載均衡(lvs)集群的配置
  2. 熟悉多路徑(multipath)的配置和管理,熟悉san/nas的概念與區別
  3. 熟悉各發行版二進位包的製作過程與二進位包的安裝原理或過程
  4. 分析系統性能瓶頸點(IO/memory/cpu,常用工具,top命令中shift組合鍵的特殊用法,Sar/vmstat/iostat/ipcs)
  5. 理解Xwindow大致原理,用ssh或
    定義DISPLAY 作x server的任意跳轉
  6. 熟悉PXE+kickstat作無人值守的批量部署
  7. 熟悉以源代碼方式安裝硬體驅動

三、
深入進階篇

  1. 分析部分程序不能運行或沒有按預想結果運行的原因,strace對程序運行跟蹤,查看系統調用的過程,
  2. 較深入的系統瓶頸點分析(swap使用頻率,硬體驅動的中斷請求在各core的分布,高手見笑,我只用過這兩個)
  3. 熟悉kdump的大致原理,nmi的大致原理,分析系統crash時dump出的文件。(如果能看到dump文件的話,裡面記錄的還是比較清晰的,日誌會記錄到crash時每個core上運行的進程正在執行的系統調用,有遇到過:幾次系統總是在某個系統調用發生時crash,後來百度了資料,才知道這個系統調用存在bug,最後單升級kernel就好了。 現在讓我很蛋疼的是很多時候機器hang掉,不會產生kdump文件,儘管設置了內核的oops/nmi相關參數,如果有高手碰巧看到,希望能請教一下)

l B,意識篇

1)
安全意識:關於這個,有創宇的兄弟在,不敢班門弄斧


2)
磨刀意識:關於任何操作配置,最好先搞明白操作或配置的原理,然後再去操作。應一句話叫做「磨刀不誤砍柴功」,而且對於類似的操作可以舉一反三。


3)
計劃意識:複雜的變更操作比如多台主機以及牽涉到san存儲,最好先作
操作計劃,寫計劃文檔,詳細緻每條命令,然後請高手幫忙審核。
這樣能最大程度使整個操作過程安全。如果是重要的客戶業務系統,操作最好有回退方案,而一旦變更失敗,客戶可以在短時間內將業務回退。


4)
記錄分享意識:遇到自己認為較特殊的案例時,記得要寫 案例過程及分析的文檔。也方便自己以後翻看,或者和其他兄弟分享,作知識的傳播以便於大家以後都能少走彎路。


5)
監控意識:運維來說,監控是非常重要的,監控是發現系統各種異常的眼睛,所以運維應該和監控緊密配合。


6)
業務意識:盡量了解維護的各主機上業務類型,以及各主機業務之間的關聯性。因為任何維護工作都是為主機能提供業務服務的,當某業務中斷,能最快的知道與此業務相關的主機群,從而縮小故障排查範圍,最快定位故障。


謝邀,問題很好,。樓上那位已經回答的很全面了,我補充一點點:
1.關於運維工程師
百度百科給出的說法是運維工程師,集合網路、系統、開發工作於一身的「複合性人才」。
實際上也差不多
隨著IT信息系統的發展,運維崗位進一步細分
A.根據面向對象的不同有:
基礎運維 應用運維 系統運維 虛擬化運維 存儲運維 linux運維 網路運維/IDC運維
B.根據職業發展層次的不同階段又有:
桌面運維--&>系統運維---&>開發型運維---&>系統架構師

所以必須掌握的基礎技能也有大概的幾個方向:路由交換/系統平台/腳本開發/系統架構/信息安全
分別由淺入深,類比一些認證所代表的知識層次(在這裡證書不代表能力,只是作為一個參照物):
路由交換:
參照cisco的基準 CCNA--&>CCNP--&>CCIE
系統平台:
WIN參照微軟 MCTS--&>MCSE/MCITP Linux參照redhat RHCE---&>RHCA
虛擬化有商業上的思傑/VMware 開源有openstack/cloudstack
腳本開發:bashshell /powershell / VB /python/Ruby / C /c++ / Go #開發語言我就列出看到過有運維人在用的,偶爾看到有BT用lisp。。。
信息安全:ISO27001你得知道是什麼。烏雲得經常去逛逛。
------------------
對於軟體的使用,得仁得智,我個人是擁抱開源的,商業化產品過於追逐利益。
運維工程師 是從一個呆逼進化為苦逼再成長為牛逼的過程(請寬恕我的用詞),前提在於你要能忍能幹能拼,還要具有敏銳的嗅覺感知前方潮流變化。
不要過於在意商業產品的部署和企業方面的技術認證,這玩意變化太快。
關鍵是通過前期的廣泛吸收打好基礎,進而找到今後要走的路,從而抓住一個方向深入。最終要成為一個方面的專家而不是什麼都會什麼都不精通的普工!
雖然操不著系統架構師的心,但也要有盡量靠齊的大局觀和視角。以項目來促進成長,以壓力為動力繼續前行~!做一個有價值,有成就,有原則,有妹子的四有運維工程師!!

《海量運維》這本書裡面整理了一個大概的運維體系框架,我很喜歡,借用一下:

相關書籍:
路由交換:
《TCP/IP協議》 第三卷 | cisco教材
linux:
(鳥哥 全套) | Linuxshell腳本攻略 | 深入理解linux內核 | linux內核完全注釋
win:
教材/白皮書/google
服務部署:
構建高性能WEB站點 |高性能網站建設指南 -steve souders | puppet實戰 | 大話存儲 2 |Mysql 性能調優與架構設計 - 簡朝陽
信息安全:
Web前端黑客技術揭秘 | 白帽子講web安全 |
腳本開發:
深入理解計算機系統 | 編寫可讀代碼的藝術 | Python核心編程 | 笨辦法學Python
啟發思路:
淘寶十年 | 海量運維 |大數據時代 | 思科九年 |我這一代京東人


linux運維人員常用工具介紹

1.很多地方經常會用到的rsync工具 實施幾台伺服器的同步效果

我們公司就是使用這個工具完成伺服器的遊戲的服務端和客戶端同步,有幾個文章例子

rsync 強化技術(手動修改埠開啟防火牆的情況下)並且通過腳本只同步需要的伺服器

inotify+rsync+mutt+msmtp 實現linux文件或者目錄自動更新並且實現發郵件給管理員

2、網路服務,服務有很多種,每間公司都會用到不同的,但基礎的服務肯定要掌握,如FTP, DNS,SAMBA, 郵件, 這幾個大概學一下就行,LAMP和LNMP是必須要熟練,我所指的不是光光會搭建,而是要很熟悉裡面的相當配置才行,因為公司最關鍵的絕對是WEB伺服器,所以nginx和apache要熟悉,特別是nginx一定要很熟悉才行,至少有些公司還會用tomcat,這個也最好學一下。其實網路服務方面不用太擔心,一般公司的環境都已經搭建好,就算有新伺服器或讓你整改,公司會有相應的文檔讓你參照來弄,不會讓你亂來的,但至少相關的配置一定要學熟,而且肯定是編譯安裝多,那些模塊要熟悉一下他的作用,特別是PHP那些模塊。這面2點只是基礎,也是必要條件,不能說是工具,下以才是真正的要掌握的工具。

Samba文件共享服務(共享腳本 讓你工作更輕鬆)

Linux web服務安裝apache 思路 (源碼編譯,自己定義服務)

FTP(持虛擬用戶,並且每個虛擬用戶可以具有獨立的屬性配置)

linux 下構建DHCP伺服器

3、shell腳本和另一個腳本語言,shell是運維人員必須具備的,不懂這個連入職都不行,至少也要寫出一些系統管理腳本,最簡單也得寫個監控CPU,內存比率的腳本吧,這是最最最基本了,別以為會寫那些猜數字和計算什麼數的,這些沒什麼作用,只作學習意義,寫系統腳本才是最有意義,而另一個腳本語言是可選的,一般是3P,即python, perl和php,php就不需要考慮了,除非你要做開發,我個人建議學python會比較好,難實現自動化運維,perl是文本處理很強大,反正這兩個學一個就行了。

Shell(一) 入門到複雜 自己做的各種腳本實例與解釋

Shell(二)入門到複雜 腳本實例(計算器)

4、sed和awk工具,必須要掌握,在掌握這兩個工具同時,還要掌握正則表達式,這個就痛苦了,正則是最難學的表達式,但結合到sed和awk中會很強大,在處理文本內容和過濾WEB內容時十分有用,不過在學shell的同時一般會經常結合用到的,所以學第3點就會順便學第4點。

sed 簡明教程

5、文本處理命令,sort , tr , cut, paste, uniq, tee等,必學,也是結合第3點時一併學習的。

6、資料庫,首選mysql,別問我為什麼不學sqlserver和oracle,因為linux用得最多絕對是mysql,增刪改查必學,特別要學熟查,其它方面可能不太需要,因為運維人員使用最多還是查,哪些優化和開發語句不會讓你弄的。

Mysql(手動編譯詳細思路,以及增刪改查,授權,備份還原)

7、防火牆,不學不行,防火牆也算是個難點,說難不難,說易不易,最重要弄懂規則,如果學過CCNA的朋友可能會比較好學,因為iptables也有NAT表,原理是一樣的,而FILTER表用得最多,反正不學就肯定不合格。防火牆(一)主機型防火牆

防火牆(二)SNAT和DNAT

8、監控工具,十分十分重要,我個人建議,最好學這3個,cacti,nagios,zibbix,企業用得最多應該是nagios和 zibbix,反正都學吧,但nagios會有點難,因為會涉及到用腳本寫自動監控,那個地方很難。

CentOS 6.2+Nginx+Nagios,手機簡訊和qq郵箱提醒

伺服器集中檢測Cacti

9、集群和熱備,這個很重要,肯定要懂的,但到了公司就不會讓你去弄,因為新手基本不讓你碰,集群工具有很多,最好學是LVS,這是必學,最好也學學nginx集群,反向代理,還有熱備,這個就更多工具能實現了,像我公司是自己開發熱備工具的,mysql熱備也要學,就是主從複製,這個別告訴我容易,其實不容易的,要學懂整個流程一點也不容易,只照著做根本沒意思。

mysql 主從同步,雙主同步,如果伺服器意外掛機,不同步怎麼辦

mysql 高性能壓力測試(總結了好久)

nginx 緩存配置及報錯解決

10、數據備份,不學不行,工具有很多,但至少要把RAID的原理弄懂,特別是企業最常用的1+0或0+1,自己做實驗也要弄出來,備份工具有很多,如tar, dump,最好多了解一下。算了,說到這10點已經夠你受了,應該可以入門了,因為有些技術會比較難學,例如apache和nginx中還有些很重要的技術,如系統調優和服務優化,還有程序優化,這些在沒接觸工作前很難學習到的,所以先把這10點學了吧,估計要學熟至少3個月不止,就腳本那部分已經讓你很吃力了,我建議是先學熟shell,等工作後再學另一門腳本語言,這樣會比較好。

常見的MySQL命令大全

以上就是踏入linux運維工程師需要掌握的工具,其實還有很多工具要掌握的,但你在學習環境中是很難學到,最後我再提醒一下,這裡所指的工具相當於技能,而不是像windows或ubuntu那些圖形化工具,那些工具沒用的,還有,學linux就別裝圖形界面,這樣虛擬機就不用吃太多內存,而且絕對不建議在真機上裝linux,根本達不到學習效果。

————————————————

在Linux系統下,說到工具,在行外可以說是技能,在行內我們一般稱為工具,就是運維必須要掌握的工具。那麼Linux系統運維工程師的基本技能有哪些?

下面跟湯哥一起來看看!

1.Linux系統基礎

這個不用說了,是基礎中的基礎,參考書籍,至少要掌握這書60%內容,沒必要全部掌握,但基本命令總得會!

言歸正傳,linux基礎包括了些什麼內容?筆者認為有如下幾方面。

- Linux命令大全

- Linux文件系統標準(FilesystemHierarchy Standard)。

- 至少熟悉一個內置編輯器:vi、nano、vim。

- 至少熟悉一個linux發行版:Redhat、Ubuntu、Suse等。

- 至少熟悉一個遠程登錄linux工具:putty、xshell等

- Linux服務,伺服器配置安裝:ftp、http、nfs、dns、samba、DHCP、mail等

- 至少熟悉一種腳本語言:shellscript、perl、Python等

- 防火牆:iptables、ipset、firewalld等

2.網路服務

服務有很多種,每間公司都會用到不同的,但基礎的服務肯定要掌握,如FTP, DNS,SAMBA, 郵件,這幾個大概學一下就行,LAMP和LNMP是必須要熟練,所指的不是光光會搭建,而是要很熟悉裡面的相當配置才行,因為公司最關鍵的絕對是Web伺服器,所以nginx和apache要熟悉,特別是nginx一定要很熟悉才行,至少有些公司還會用tomcat,這個也最好學一下。其實網路服務方面不用太擔心,一般公司的環境都已經搭建好,就算有新伺服器或讓你整改,公司會有相應的文檔讓你參照來弄,不會讓你亂來的,但至少相關的配置一定要學熟,而且肯定是編譯安裝多,那些模塊要熟悉一下他的作用,特別是PHP那些模塊。

這2點只是基礎,也是必要條件,不能說是工具,以下才是真正要掌握的工具。

3.shell腳本和另一個腳本語言

shell是運維人員必須具備的,不懂這個連入職都不行,至少也要寫出一些系統管理腳本,最簡單也得寫個監控CPU,內存比率的腳本吧!這是最最最基本了,別以為會寫那些猜數字和計算什麼數的,這些沒什麼作用,只作學習意義,寫系統腳本才是最有意義,而另一個腳本語言是可選的,一般是3P,即python, perl和php,php就不需要考慮了,除非你要做開發,個人建議學python會比較好,難實現自動化運維,perl是文本處理很強大,反正這兩個學一個就行了Linux系統運維工程師基本技能點匯總Linux系統運維工程師基本技能點匯總。

4.sed和awk工具

必須要掌握,在掌握這兩個工具同時,還要掌握正則表達式,這個就痛苦了,正則是最難學的表達式,但結合到sed和awk中會很強大,在處理文本內容和過濾Web內容時十分有用,不過在學shell的同時一般會經常結合用到的,所以學第3點就會順便學第4點。

5.文本處理命令

sort , tr , cut, paste, uniq, tee等,必學,也是結合第3點時一併學習的。

6.資料庫

首選MySQL,別問我為什麼不學SQL Server和Oracle,因為linux用得最多絕對是MySQL,增刪改查必學,特別要學熟查,其它方面可能不太需要,因為運維人員使用最多還是查,哪些優化和開發語句不會讓你弄的Linux系統運維工程師基本技能點匯總文章Linux系統運維工程師基本技能點匯總出自http://www.gkstk.com/article/wk-78500000841939.html,轉載請保留此鏈接!。

7.防火牆

防火牆也算是個難點,說難不難,說易不易,最重要弄懂規則,如果學過CCNA的朋友可能會比較好學,因為iptables也有NAT表,原理是一樣的,而FILTER表用得最多,反正不學就肯定不合格。

8.監控工具

十分十分重要,個人建議,最好學這3個,cacti,nagios,zibbix,企業用得最多應該是nagios和 zibbix

璧合但nagios會有點難,因為會涉及到用腳本寫自動監控,那個地方很難。

9.集群和熱備

這個很重要,肯定要懂的,但到了公司就不會讓你去弄,因為新手基本不讓你碰,集群工具有很多,最好學是LVS,這是必學,最好也學學nginx集群,反向代理,還有熱備,這個就更多工具能實現了Linux系統運維工程師基本技能點匯總Linux認證。

10.數據備份

不學不行,工具有很多,但至少要把RAID的原理弄懂,特別是企業最常用的1+0或0+1,自己做實驗也要弄出來,備份工具有很多,如tar, dump, rsync等,最好多了解一下。

有些技術會比較難學,例如apache和nginx中還有些很重要的技術,如系統調優和服務優化,還有程序優化,這些在沒接觸工作前很難學習到的,所以先把這10點學了吧!建議是先學熟shell,等工作後再學另一門腳本語言,這樣會比較好。

以上就是踏入Linux運維工程師需要掌握的工具,其實還有很多工具要掌握的,但你在學習環境中是很難學到,最後再提醒一下,這裡所指的工具相當於技能,而不是像Windows或ubuntu那些圖形化工具,學Linux就別裝圖形界面,這樣虛擬機就不用吃太多內存。

你想更深入了解學習Linux知識體系,你可以看一下我們花費了一個多月整理了上百小時的幾百個知識點體系內容:

【超全整理】《Linux雲計算從入門到精通》系列實戰筆記全放送


限定在linux運維
1:第一名的列的那張圖上的命令基本過一遍,能知曉用處,基本上對著系統就不會發怵了。
2:無論如何,要有一個你自己的測試機器(建議裝centos,更貼近企業現狀),從頭到腳的折騰。
3:英語要好,如果man一下都看不懂的話,我覺得接下來很多解決方案你會找不到。
4:要有一顆平常心,面試的時候和你談架構,談大數據,最後發現90%的時間是在做一些基礎的東西,而這恰恰是最重要的。我見過很多基礎做著做著就煩了,就迷失然後日復一日做無用功。
5:一個健壯的身體,來應付7*24可能出現的報警。
6:一顆偷懶的心,能用腳本堅決就用腳本,能自動化跑的就設法實現自動化。

智聯上搜了下運維,發現被阿里刷屏了,截取一個比較通用的要求
1、大學本科及以上學歷,計算機或者相關專業。
2、熟悉Linux以及主要Unix系統,了解網路基本技術,熟悉TCP/IP協議工作原理;
3、熟悉WEB相關技術,包括apache/nginx,tomcat/jboss等應用的管理、配置和優化;
4、熟悉shell,perl,python,java,php腳本或開發語言一種以上。
5、具有較強的故障定位排錯和應用優化能力。
6、責任心強,積極主動,熱愛學習和分享,有良好的溝通能力和團隊合作能力。
7、具有大型網站的運維經驗;有參與開源項目等優先;有java,C++開發經驗優先。

這個點回復問題,可以肯定我是一個合格的運維人員....


基礎知識其他答案都很詳細了,我補充一些進階的東西,可能需要一定的工作經驗才能理解,做運維所需要的一些大局觀。
假如把運維粗放式分為初級、高級、資深、專家四個階段的話,只專註學習技術你能達到資深工程師級別,但要升上專家級,需要提升的就不僅僅是技術而已,需要更多關注業務、流程化、成本控制、資源優化等方面。


首發於本人的csdn博客,現在搬運過來知乎
http://blog.csdn.net/jeffreynicole/article/details/47618305

1 拒絕重複勞動,能用程序幹活的,堅決程序化、平台化;

比如一些機械性重複性的工作,真正的運維工程師絕不能允許自己重複做三遍以上。

如果不能一步到位自動化的話,可以先嘗試半自動解決,然後到全自動甚至到智能化的完美方案。


2 拒絕重複犯錯;

人難免會犯錯,這是無法避免的

但是能根據已有的犯錯經驗,總結犯錯的原因以及如何避免同類情況再次發生

把一些典型的錯誤在團隊中分享,把一個人的犯錯得到的經驗傳播於整個團隊


3 凡事有備份、可回退,有plan B;

運維工作中經常有一些發布、遷移、備份等複雜操作,事前最好做全面的操作計劃,思考每一步可能的回退與備份

對每條執行的命令必須double check


4 用技術來解決流程問題;

盡量減少需要人為注意的事件,比如發布文件的打包格式,不能依賴人來維護,必須用程序或腳本等技術來解決


5 通過每一次故障進行學習和提升,再回到第2條;

把錯誤當作經驗值的增加,以及一次團隊分享的機會


6 運維部門做到服務化,不要把自己當作邊緣部門或純技術論;

別整天喊苦逼、沒地位,埋怨沒有意義,應該擴大運維部門的影響力

運維能力的提升不是鑽研系統內核、源碼就能提升,這是純技術論,給不了整個公司創造價值的技術是無用的


7 對身邊同事要有激勵和正反饋;

凡事有正能量,不解釋了


8 深入了解所運維的產品,拒絕黑盒運維;

熱愛自己的產品,才能更好的了解它

深入體驗自己運維的產品,知道有哪些細緻的體驗或者數據可以反映產品的運營質量,這是技術運營需要懂的


基礎如@Tanky Woo所說.我來補充一點
1.對業務的了解
不了解業務,當出了問題,你什麼都做不了,當你對業務足夠了解時,你就能很快troubleshooting,瓶頸定位
2.系統的思維
也就是操作系統,計算機原理的深入理解,只有這樣才能把業務邏輯和系統融合在一起.這樣能對付,當業務上線時,就能很好的評估和預測將來會出現什麼問題,當出現時應該怎麼處理.而不是當出現問題時無從下手
3.對應用的了解
也就是對FTP,DNS等原理的熟悉,一樣是為troubleshooting準備,只是部署上線是不夠的
4.擴充眼界,修鍊基本功
基本功一定要紮實,多修鍊內功.就想張無忌的九陽神功一樣,楊鼎天沒有九陽神功護體,練乾坤大挪移把自己練死了.說白了就是,有些人之修鍊各種招式,如docker,openstack,saltstatck,而不明白底層原理,早晚會把自己玩死


要學會以下內容

負載均衡
冷備
熱備
高可用
異地容災
故障監控
確保備份可用
避免單點

要確保你女友或者老婆不知道你學會了以上這些內容


好多高票答案都挺老的了,14年15年的。到了今天,運維的技能標準又發生了一些變化,整個行業的大環境也發生了一些變化。今天我們不談「術」,術會更新、會過期、會淘汰,所以我們來談談「道」。

運維必須掌握的基礎技能有哪些?這個問題可以有無數種回答,因為運維職業本來涉及的知識面就非常之廣,要單個羅列恐怕要累死。但是,如果我們說最重要的一項,那必然是學習能力無疑。

先看一篇短文,運維再不學習,可能你連蹲機房的機會都沒有了! - 運維派

之前運維派整理過一份運維頭銜大全,羅列了30多個運維領域的崗位,其中最明顯的變化就是各個企業對「運維開發」這個職位的需求多起來了,同樣對運維人員的技術棧也有了新的要求,最直接的就是運維必須會Python開發,有些甚至還需要會JAVA,但小編我的建議是:運維要學編程,還是先從Python下手吧,會寫Shell再學Python,沒你想像那麼難。
鋪墊了這麼多,就是想提醒廣大運維的兄弟姐妹們要保持持續學習的態度。之所以要提這事,是小編我看到一篇16年的老新聞,說是中國電信的機房運維都已經推出了「機器人管理員」,據說這個「機器人管理員」的長手臂還能進行插拔設備網線等操作。這不擺明了要搶咱們機房運維兄弟們的飯碗嗎?

這個「機器人管理員」擁有多個感測器,可以對設備機房的溫度、濕度宏觀調控。同時,將機房分為熱通道和冷通道兩個氣流傳輸通道,分別監測兩個通道的溫度。這樣,可以比傳統的溫度監測節省能源消耗。
試驗室設備很多,如果設備過熱,實驗室很有可能遭遇火災危險。「機器人管理員」還可以及時探測到火情,然後迅速切斷電源,之後應急燈會點亮,同時開啟水霧滅火設備做到水霧滅火從而將機房損失降到最低。
這些機器人除了越來越聰明,能替代一些運維工作外,更要命的是機器人是不知疲倦的,所以時代變化比我們想像要快,趁年輕抓緊學習吧!

不知道大家看到這條消息怎麼想。雖然這個機器人目前還只能做一些機房管理員的工作,但是Alpha Go的進展大家也都看到了,人工智慧正在快速成長,重複性工作被消滅的時間點可能會比我們想像的提前很多。一旦人工智慧取得突破,非創造性的工作崗位會被快速消滅。

所以,運維最要緊的,就是從事創造性的、機器無法取代的、有價值的工作,這就對運維人員的學習能力提出了很高要求。

到底怎麼學?一些常見套路就不說了,這裡放一下我的四個習慣,也許不是普適性的,給大家個參考吧:

攻擊觀點

這裡的攻擊不是讓你對觀點作者進行人身攻擊,也不是單純放嘴炮,而是要對一個問題進行自己的思考,並且沿著邏輯線深入下去。

先問你一個問題,你懂什麼,「什麼都不懂」,好,你懂不懂IP地址怎麼寫嗎?OK,寫出來,請問「為什麼要用IP地址?」。

不斷思考

收到一個報文後,怎麼解封裝?發送一個報文,如何封裝?

單純的概念記憶毫無用處,只會操作又流於表面。

你必須通過思考把流程理順,把具象的信息轉換成抽象的信息存儲在大腦里,並且邏輯和系統同步,不斷訓練思考才能做到。

嘗試忘卻

都看過倚天屠龍記,張無忌學會太極拳的標誌是什麼?「全忘了。」

大牛回答問題時,經常會說:「這個問題我沒遇到過、這個問題我不清楚、這個問題我不懂。」但是後面半句話,大牛從來不說出來,「只要我想去了解和解決,只需要5-10分鐘就能找到答案。」

幾乎所有對套路、案例的記憶都有著極強的環境限制,換一套生產環境立刻歇菜。大腦里只保存思路和方法,而不是細節,可以迅速解決任何問題,問問題的人,只記住很多具體的解決方法,超出這個範圍就不會了。

真正的忘卻不是因為記憶的衰退,而是放下來,問題本身已經完全被粉碎於無形之中。

聯繫表達

很多時候,我們研究一個案例之後,自認為早已對其中關節掌握的清清楚楚。然而在給別人講解的時候,卻說了個稀里糊塗。

自認為學會了不是真正的學會,真正的學會,在於能夠講出來,使一個初學者也能夠聽得明白,才能算是學會了,不會表達,永遠學不會。懂了,卻舉不出例子來,怎麼能夠叫做懂了呢?


你想更深入了解學習Linux知識體系,你可以看一下我們花費了一個多月整理了上百小時的幾百個知識點體系內容:

【超全整理】《Linux雲計算從入門到精通》系列實戰筆記全放送


運維的傢伙們,趕緊學python開發吧,這是我跟好幾個企鵝資深運維工程師聊天得出的結論。未來越來越多的業務會在雲上docker上,那種傳統干運維的方式,比如收到問題單後登上伺服器敲幾個命令或者寫幾個腳本的方式已經越來越不適應時代了,未來的運維一定是大量工具化和自動化的,運維工程師,會轉變為運維開發工程師,運維經理,會轉變為運維軟體開發經理。企鵝每天上萬的告警,大量都是自動化處理的。


依次為:
《鳥哥的linux私房菜》
《**腳本從入門到精通》
《**腳本編程指南》
《計算機網路基礎》
《nginxapacheIIS調優指南》
《Linux內核入門》
《Linux內核調優指南》
《西藏自由行手冊》
《論佛經與故障處理》
《抑鬱症的自我康復》


操作系統:Centos,Ubuntu,Redhat,suse,Freebsd
網站服務:nginx,apache,lighttpd,php,tomcat,resin
資料庫:MySQL,Mysql-proxy,MariaDB,PostgreSQL
DB中間件:MyCat,atlas,cobar,amoeba,MySQL-proxy
代理相關:lvs,keepalived,haproxy,nginx,heartbeat
網站緩存:squid,nginx,varnish
NOSQL庫:memcached,memcachedb,MongoDB,Cassandra,redis,CouchDB
存儲相關:Nfs,Moosefs(mfs),Hadoop,glusterfs,lustre,FastDFS
版本管理:svn,git
監控報警:nagios,cacti,zabbix,munin,hyperic,mrtg,graphite
域名解析:bind,powerdns,dnsmasq
同步軟體:scp,rsync,inotify,sersync,drbd,csync2,union,lsyncd
批量管理:Ssh Key,Saltstack,expect,puppet,ansible,cfengine
虛擬化:kvm,xen
雲計算:openstack,docker,cloudstack
內網軟體:iptables,zebra,iftraf,ntop,tc,iftop
郵件軟體:qmail,posfix,sendmail,zimbra
遠程撥號:openvpn,pptp,openswan,ipip
統一認證:openldap
隊列工具:ActiveMQ,RabbitMQ,Metaq,MemcacheQ,Zeromq
打包發布:mvn,ants,jenkins,svn
測試軟體:ab,JMeter,Webbench,LoadRunner,http_load,tcpcopy
帶寬測試:smokeping,iozone 磁碟測試 iozone
性能測試:dd IOPS測試 fio
日誌相關:rsyslog,Awstats,flume,storm,ELK(Elasticsearch+Logstash+Kibana)
搜索軟體:Sphinx,Xapian,Solr
無人值守:kickstart,cobbler
軟體安裝:rpm,yum(設計rpm包定製及yum倉庫構建)
大數據:HDFS,Hive,Hbase,Zookeeper,Pig,Spark,Mahout
開發語言:Shell,Python
-------來源2016年linux運維人員必會開源運維工具體系
感覺這個還是很完善的,其中有一部分是新手必須會的。


以下是針對剛剛入門的運維工程師說的:

  • 首先要對操作系統有所了解(含Windows和linux,也可能需要aix等系統)
  • 至少掌握簡單的shell腳本,學有餘力最好掌握python。
  • 能處理簡單的系統故障,以及分析問題的能力。
  • 學習能力,能在最短時間內掌握應用的布署和簡單操作。
  • 至少懂得一種監控平台的使用(cacti/nagios/centreon等)

剩下的就是在工作中慢慢積累經驗了



1。備份!備份!備份!
2。永遠要有B方案
3。善於編寫故障分析報告


我始終認為運維人員的溝通和表達能力很重要,當出現故障時或解決故障後,能夠清晰有效的彙報;當搞不定時,能夠清晰有效的描述求援;當閑的沒事時,能夠向前輩和領導請教學習;這些都需要溝通。


留下回答得很好


做運維的,沒出事:我花錢請你幹嘛!
出事:我花錢請你幹嘛!


樓上說的太全、太多了,個人覺得並不適合新手入門——一下子給那麼多條路,正常人都選不過來的...
還是先入門吧——RHCE培訓的三本教材入門:
《RH124》《RH134》《RH254》
看完以後就算入門了,可以看得懂《鳥哥的私房菜》了——兩本必學,特別是第二本,上面的伺服器最好都能過一遍,非常非常實用。
都學會了,再考慮其他大神的不遲。


粗略看了上面的回答,大多都在說。要學這個,要學那個。
運維工程師,踏實的學好 linux 已經不錯了。
如果,你對 Linux 系統本身非常熟悉的話。大多解決方案都可以從 Linux 系統設計和實現找到。


推薦閱讀:

Linux 如何才能吸引軟體廠商為之開發軟體?
請問在kali linux 虛擬機安裝vm tools的具體步驟是怎樣? 謝謝。?
你最常用的一個 linux 命令是什麼?為什麼?

TAG:Linux | 運維 | 運維工程師 | Linux運維 | SRESiteReliabilityEngineer |