到什麼程度才叫精通 Linux?


簡單點說,比如你發現一個進程總是佔用 100% CPU,通過層層檢查,發現是顯卡驅動中的一個 針對特別硬體的新 bug。

然後你決定修改驅動,同時順便優化了一下 kernel 相關代碼,一夜之後,當黎明的曙光照在顯示屏上時,你決定將修改部分提交到社區。

三天後, Linus 群發郵件,說這將是下一個 kernel 版本的一個重要特性,並感謝你的貢獻。

當然,你並沒有及時看到郵件,因為你正一邊摟著女友,一邊跟她講多年前看過的《暗店街》。


少看知乎多讀書,以下是《Just For Fun》的截圖。注意看中間那段話。

學 Linux 的話,為什麼不看看這本 Linus 的自傳。


Linux 練級攻略:

1.掌握至少50個以上的常用命令。

2.熟悉Gnome/KDE等X-windows桌面環境操作。

3.掌握.tgz、.rpm等軟體包的常用安裝方法。

4.學習添加外設,安裝設備驅動程序(比如網卡)。

5.熟悉Grub/Lilo引導器及簡單的修復操作。

6.熟悉Linux文件系統和目錄結構。

7.掌握vi,gcc,gdb等常用編輯器,編譯器,調試器。

8.理解shell別名、管道、I/O重定向、輸入和輸出以及shell腳本編程。

9.學習Linux環境下的組網。

10. 學習Linux環境下的集群/內核。

這只是針對Linux,學好的定義請樓主自行判斷。我來說一下我的理解(學好linux的理解)

1. 掌握常用命令(包括grep、awk、sed、ps、find等等吧,熟練使用,基礎的選項不用man)

2. 第二項不解釋

3. 毫無壓力的安裝tgz,deb以及rpm包,這是基礎,學好的話理解rpm或是deb包的原理,不是很難的事情

4. 裝驅動,同上一條,主要也就是解決問題吧

5. 這個在你先裝了linux,後來又裝windows的時候就會遇到。了解下grub的代碼,也還好,網上講解的比較多

6. 熟悉文件系統和目錄結構,知道每個目錄都是幹嘛的。最好順帶了解下vfs,ext3文件系統等等,文件系統不屬於內核

7. 不解釋,基礎工具,vim的話熟練使用,不用滑鼠,知道高級技巧,別一味的想著配vimrc,沒意思

8. shell腳本吧,學吧。最好再學個python或是perl

9. 組網,網路的知識,比如神馬netstat、route,ping等等,要是能在深入下了解socket編程最好

10. 內核,終極學習,無窮無盡。學好就是意味著你能對每一種driver熟悉,大概看看其他driver就知道思路。


你去Kernel郵件列表發個帖挑釁Linus

比如

「乃的Kernel對ZFS的支持跟shit一樣」

「乃的驅動對Broadcom網卡的支持跟shit一樣」

如果你把Linus噴贏了

說明你精通Linux

外加噴子技能滿點

「So Nvidia, f**k you」


把這幾個圖的大部分名詞搞明白就算中級了

把邏輯都搞清楚就算高級

精通的話,從源碼上理解吧


我們社群有比較多的Linux愛好者,大家認為資深階段技能是;

第四階段:資深方向進階

1、 大數據方向(需要對hadoop、storm等常見開源大數據系統需要深入了解)

2、 雲計算方向(主要是openstack這套東西,當然像一些kvm等虛擬化技術,也是需要掌握的,現在docker也比較流行)

3、 運維開發(主要是python運維開發)

4、 自動化運維(在之前自動化基礎上做深入)

5、 運維架構師(主要需要廣度,差不多5年左右以上經驗,可以擔當此職位)

下面你可以研究下Linux運維學習階段,需要分為四個階段,linux初級入門-linux中級進階-linux高級提升,和資深方向細化。

第一階段:初級入門

初級階段需要把linux學習路線搞清楚,任何學習都是循序漸進的,所以學linux也是需要有一定的路線。

個人建議學習的路線如下:

初級入門:

1、Linux基礎知識、基本命令(起源、組成、常用命令如cp、ls、file、mkdir等常見操作命令)

2、Linux用戶及許可權基礎

3、Linux系統進程管理進階

4、linux高效文本、文件處理命令(vim、grep、sed、awk、find等命令)

5、shell腳本入門(可邊練習邊學習)

第二階段:中級進階

中級進階需要在充分了解linux原理和基礎知識之後,對上層的應用和服務進行深入學習,其中說到服務肯定涉及到網路的相關知識,是需要花時間學習的。

1、TCP/IP網路基礎(差不多CCNA、NP的知識就夠用)

2、Linux企業常用服務(如dns、http、ftp、mail、nfs等)

3、Linux企業級安全原理和防範技巧(系統性能/安全、安全威脅模型和保護方法

4、 加密/解密原理及數據安全、系統服務訪問控制及服務安全基礎

5、iptables安全策略構建

6、shell腳本進階(主要是結合一些應用,寫一些案例)

7、MySQL應用原理及管理入門(能管理和搭建一個個人博客站點)

學到這裡,掌握的基本技能,已經夠用了,已經能做一些基礎的運維工作和簡單維護了。

第三階段:高級提升

1、http服務代理緩存加速(其中主要學習varnish、nginx緩存系統,要對CDN的知識有所了解。)

2、企業級負載集群(其中主要學習nginx、haproxy、lvs要對主要知識熟練掌握,對負載均衡演算法有清晰認識,)

3、企業級高可用集群 (其中需要對keepalived,heartbeat等進行深入講解)

4、運維監控zabbix詳解(主要是zabbix、cacti、nagios等監控系統,現在用的比較多的是zabbix)

5、運維自動化學習(需要學一些開源運維自動化工具的使用如ansible、puppet、cobbler等運維自動化工具)

能掌握到這裡,基本能處理搞定很多工作了,可以去面試高級運維工程師,差不多薪資能達到12-18K左右

第四階段:資深方向進階

1、 大數據方向(需要對hadoop、storm等常見開源大數據系統需要深入了解)

2、 雲計算方向(主要是openstack這套東西,當然像一些kvm等虛擬化技術,也是需要掌握的,現在docker也比較流行)

3、 運維開發(主要是python運維開發)

4、 自動化運維(在之前自動化基礎上做深入)

5、 運維架構師(主要需要廣度,差不多5年左右以上經驗,可以擔當此職位)

另外我們整理了一個學習知識庫,你可以看一下:

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


我說個真實案例吧,大約是15年前,那時候kernel版本還是2.4,windows伺服器還是windows nt 4。我作為某一廠家的支持人員到了一電信客戶的現場解決問題,其中有一個問題是客戶的suse linux伺服器和windows nt伺服器總是無法建立網路連接,而windows nt和windows nt之間則可以。

記得當時有個intel的大牛在現場,他先用tcpdump抓了windows nt和linux伺服器之間的通訊包,把tcp header頭解析開,對比windows nt之間的通訊包的tcp header,逐欄位的分析,結果發現當時suse linux里某一保留欄位被置為1,而windows里則為0,從而導致windows和linux無法連接。然後他通過rfc定位這一欄位的含義,在系統/proc/sys/net里找到對應的標誌位,把它置為0,然後問題就解決了。

當時作為純寫業務代碼的我,看到了linux居然可以這麼玩,深表震驚。


(1)拋棄windows平台後,不會有 像平時沒有網路時的那種不自在。

(2)得心應手的主導開發一個Linux的小型開源項目。這是一個示例,項目開發平台。


問題不精確,答案也是∶

自己夠用不求人叫熟練掌握,能答疑解惑幫人搞定問題叫精通。


上 Stackoverflow 練練


我自己的理解:

1:熟悉linux命令,能夠使用linux搭建各種環境。

2:熟悉linux下的開發(linux的各種API的熟悉,還有GDB,Makefile,Vim等工具的使用)

3:熟悉內核,對核心模塊的實現機制有深刻的理解。

以上三點層次遞增。


Wolfgang Mauerer, 如他這樣,就應該可以算精通Linux的人了…


有評論讓我說說具體什麼問題,我都說了網路崩潰了,結果還都讓我再具體點,還能怎麼具體啊。

問題就是各種配置一切正常,昨天還在正常運行,今天所有MPI所有ssh均不通,網路崩潰還有別的含義嗎?你問我具體問題出在哪,我不說了么一切文件都正常誰知道哪出問題了。

怎麼解決的,這個真不是一兩條命令一兩個文件的事,沒法貼。

至於解決問題的思路,我不會啊,你們白問了。別說我不會了,那高手帶了一個徒弟全程也是一臉懵逼啊。

-----------------------------------------原答案下--------

之前的集群碰到了問題,infini band崩潰了。

我們自己的隊伍檢查無果,毫無頭緒,於是讓工程師上門,工程師從早干到半夜,敲著各種命令代碼,運行各種腳本,修改各種參數配置服務,在我們成員的幫助下,到凌晨1點的時候,整個集群經過十幾次的重啟,終於,IB問題依舊,i通訊用的千兆網也崩潰了。

第二天打電話換人,此君上來,幾行代碼之後豁然開朗,半小時後千兆網恢復正常,兩個小時後集群恢復正常。還順便幫我們把其他問題也解決了。

所謂精通Linux,大概就是一眼就能透過shell看透核心問題的本領了。


搞個Arch,三個月後更新,不查攻略修好。


把linux弄到一個小眾爛平台,裁剪優化,花1、2個小時用各種小白聽都沒聽過的工具和見都沒見過的方法徒手解決任何遇到的問題,旁邊坐一個看得痴痴獃獃的小白

這樣就算是精通了。


反對vczh的答案。

不知道你要精通Linux那方面?Linux應用編程?Linux內核和驅動?Linux系統管理?Linux圖像編程?


私以為你想使用的功能自己可以輕鬆調用,它只是一個工具而已


窮得買不起Mac和正版Windows,又驕傲得不願意用盜版,長期以往,就精通Linux了


對進程調度精通

對內存管理精通

對常用文件系統精通

對網路層精通

等等吧……


折騰一遍LFS,理解工具鏈的組成與作用,知道最最基本的linux系統由那一些軟體組成。學會編譯內核,精簡內核,知道內核由哪一些模塊組成,了解內核的某個模塊是怎麼初始化的,會添加內核模塊。在lfs的基礎上添加如rpm或是deb包管理工具,將其打造成為一個可用的linux版本,這麼折騰下來,不精通linux都不難了。當然,最好還有linux下的c開發基礎。


推薦閱讀:

elementary OS 號稱最美 Linux ,哪個 Linux 發行版比較好看呢?
相對於其它發行版,選擇 Debian 的理由是什麼?
這裡有多少人脫離 Windows 完全使用 Linux?你花了多少時間適應?
為什麼 Android 要採用 Binder 作為 IPC 機制?
Linux 用戶一打開終端就 sudo su 算是壞習慣嗎?

TAG:編程 | Linux | Ubuntu | Linux軟體 | Linux發行版 |