寫給 Linux 初學者的一封信
大家好,我是肖邦。
這篇文章是寫給 Linux 初學者的,我會分享一些作為初學者應該知道的一些東西,這些內容都是本人從事 Linux 開發工作多年的心得體會,相信會對初學者有所幫助。如果你是 Linux 老鳥,那可能就不需要再往下看了
為啥要學Linux
作為從事 IT 工作的同學,對 Linux 系統一定不陌生。如今我們在各種領域都能看得到它的身影,比如,手機、伺服器、嵌入式、電信裝置、大型計算機,以及各種電子類產品都離不開 Linux,它已經滲透到網際網路世界的方方面面了。
包括那些火熱的技術,比如雲計算、虛擬化、容器、大資料、人工智慧,幾乎都是基於 Linux 技術的,那些平臺系統,電商、團購、社交、新聞、快遞,都是部署在伺服器端,也幾乎都是基於 Linux 技術的。
在程式設計的世界中,Linux 就是主流,不會 Linux 你就可能會格格不入。如果你想進大公司,想學新技術,Linux 一定是一道繞不過去的砍,只有進入了 Linux 系統這扇大門,你才可能成為合格的軟體工程師。
企業伺服器環境絕大部分都是 Linux 系統,所以不管你是從事前端、後端、運維、測試中的哪一類工作,Linux 都是你必須掌握的基礎知識,只是不同型別工作需要學習 Linux 的方向不同而已。
經驗與建議
下邊分享的內容是本人從事 Linux 開發多年的一些經驗總結,相信對 Linux 初學者會有所幫助,當然如果有不準確的地方,還請指正。
- 一定要自己搭建Linux環境。Linux 系統學習是很重實踐的,僅學習理論知識是不能真正掌握 Linux 的。我推薦在個人電腦上安裝虛擬機器,虛擬機器的方式非常靈活,既可以提供 Linux 環境,也不會影響宿主機的正常使用。對於虛擬機器軟體的選擇,可以考慮使用
VMware
VirtualBox
。虛擬機器的快照功能一定要用好,尤其是對新手來說,它可以將你不小心搞壞的環境恢復到初始化狀態,就像是重新安裝了作業系統一樣,從此媽媽再也不用擔心我rm -rf /*
了。 - Linux發行版的選擇。由於 Linux 的強大,目前存在太多的發行版本了,有些同學在選擇上可能會有些糾結。這裡我推薦選擇使用 CentOS 就行,由於免費且穩定,國內企業伺服器使用最多的就是 CentOS 了,使用上和 RedHat 幾乎沒有什麼區別。當然你可以選擇 Ubuntu 系統,國內伺服器使用份額僅次於 CentOS。其實所有發行版都是基於 Linux 核心的,只是擴充套件了相關的系統元件和軟體庫,本質上都是 Linux 系統,學會了 CentOS 後就很容易上手其它版本的系統了,所以無需太關注和糾結這個問題。
- 一定要使用命令列。大部分初學者經常喜歡安裝圖形桌面,因為我們之前都習慣了 win 或 mac 的圖形操作。但我強烈建議,安裝系統時不要安裝桌面,平時的操作和學習都堅持使用命令列。學習前期可能會比較痛苦,但熬過了陣痛期,熟練使用之後,就能享受到命令列帶來的強大功能。命令列不僅功能強大,而且可以極大的提高效率,因為命令列就意味著能夠自動化,自動化能為你釋放很多重複性的工作,讓你有充足的時間去學習更有價值的知識。另外,圖形介面在 linux 系統上作為一個獨立軟體存在,會額外消耗伺服器的資源,企業的伺服器一定是不會安裝圖形的,所以需要你一定要在 Linux 世界中忘掉 windows 的思維方式。
- Linux 是開源的。開源意味著你能夠檢視 Linux 原始碼,可以從程式碼層面理解系統實現的原理,這些可以讓你達到一通百通、醍醐灌頂的效果,而不是簡單的使用它。
- 養成安全嚴謹的良好習慣。對於初學者來說,雖然大部分時間是在虛擬機器上操作,有快照的加持,可以毫無顧忌的進行各種實驗性的操作。但我還是強烈建議初學者一定要養成良好的操作習慣:1.經常備份重要的資料;2.少用 root 使用者進行各種操作;3.敲命令不是越快越好;4.伺服器密碼儘可能的複雜些,不要使用
123456
這類弱密碼,伺服器很可能被侵入當肉雞;5.伺服器密碼不要簡單記錄在文件上或 U 盤之類的移動裝置上;6.對生產環境一定要有敬畏心。
如何學習?
高效的學習方法往往能夠幫助你事半功倍,下邊是我分享的一些自己的學習心得和方法,希望對大家有幫助。
- 一定要多實踐。Linux 是一門實操性非常強的學科,初學者需要多敲命令,多實踐和練習。與學習其它東西是一樣的,大多時候我們不需要非得先將理論知識學的通透後才來實踐動手,而是從實踐中發現問題後再深度學習,這樣效果可能會更好。
- 有效的學習方式。說到學習方式,每個人學習的方式可能不太一樣。我推薦 視訊 + 看書 的方式,視訊教程可以讓你快速上手,快速瞭解相關的概念,而看書可以更加全面的學習具體的細節,會讓你有更多的思考,看書可以作為視訊的補充和擴充套件。
- 思考,總結與歸納。不管以什麼形式來學習,我們都需要對學習中的每個問題和概念認真思考,需要從 what、how、why 三個角度進行學習,作為學習的問題模板。學習任何新技術,我們都需要知道這個技術知識點的應用場景,以及能夠解決什麼問題,是否有類似的解決方案,此技術點有什麼優勢。
- 輸出是一種高效學習方法。在學習過程中,必不可少的一個環節就是歸納和總結,總結就要輸出,可以是文件形式的筆記或者其它。我比較推薦寫部落格,有條件的話一定要寫,因為寫部落格可以幫助你更有效地、更系統的總結和學習。寫部落格是一種 教 的形式,如果能夠將自己學到的知識在部落格上清晰的講清楚,教會別人,那才說明你是真正的掌握了它。如果部落格寫的不錯的話也能為自己夠積累影響力,對自己將來的求職也會有幫助。另外如果別人從你部落格學習到了東西而且覺著不錯的話,會給你點贊、留言、讚賞,這都是對你寫部落格和學習的正反饋,同時也能夠刺激你保持學習的興奮和激情,呵呵。
- 制定明確的學習目標。做任何事,有了目標才能夠走的更遠,少走彎路。我們學習 Linux 也一樣,需要根據自己的實際情況,制定適合自己的學習目標。個人建議目標不要太大,時間週期也不要太長,要切合實際,比如制定三個月的學習目標。有了目標後,就要確定詳細的學習計劃,細化到每週需要完成的任務列表。注意,你需要為計劃任務指定結果檢驗的方式,比如寫一篇部落格文章或是筆記,計劃真實落地才是最困難的,因為執行力是一種稀缺資源。
- 堅持與激情,獲得正反饋。學習是一件逆人性的事情,大部分人在遇到諸多問題後就很容易會放棄。1.合理的學習計劃和結果輸出,能夠讓你繼續保持學習的激情;2.寫部落格、討論交流等方式也可以獲得正向的反饋,從而激勵著你繼續向前;3.堅持學習也能夠幫你養成良好的習慣,無形中提高自己的執行力,個人認為這些收穫可能遠比具體的技術知識更加重要。
- 如何解決問題。在學習 Linux 技術的時候,初學者肯定會遇到各種 奇怪 的問題,面對這些問題時,我們要學會分析錯誤資訊,嘗試以目前學習到的技術來思考找答案,如果解決不了,可以使用搜索引擎,對於初學者遇到的問題,百度一般都能夠解決。如果實在解決不了,可以請教身邊的高手,不過提問問題時,一定要描述清楚問題,帶著謙虛請教的態度。
應該學習的基礎知識
Linux 系統涉及的技術知識點非常廣泛,學習者可以根據自己的實際情況,選擇相應的主題方向進行學習,不可盲目的跟隨他人的學習路線,有可能適得其反,學習效果事倍功半,得不償失,所以選擇適合自己的學習路線非常重要。
因為每個人將來從事的工作和方向不同,需要重點學習的內容也不一樣,而且本文目標也只是分享給 Linux 初學者一些實用的經驗心得,所以後邊內容中只簡單羅列了最通用和實用的一些技術,這些是學習 Linux 技術的所有同學都應該知道的技術知識點。
- 學習 vim。在 Linux 系統下,基本沒有什麼可以與之競爭的編輯器(不接受反駁),你只需要花費
1-2
天的時間來熟悉 vim 的基本使用操作即可,無需研究那些高大上的各種外掛使用技巧。要知道 vim 的學習是有難度的,不過一旦熟練使用後,就會得心應手,能極大提高編輯效率。這裡推薦陳皓的《簡明 vim 練級攻略》。 - 簡單的檔案管理。這些都是一些非常基礎的操作與檔案的管理命令,如:
ls
、less
、head
、tail
、du
、df
、ln
等,當然find
是查詢檔案的非常有用的命令,功能非常強大。 - 基礎的網路管理。常用的網路管理命令,一定要學會使用,這對平時工作或學習時的網路診斷和網路配置非常有用。比如
ip
或ifconfig
等網路命令,還有網路診斷工具netstat
、ping
、traceroute
等。 - 學些 shell 指令碼程式設計。我們知道 Linux 特點之一就是命令列,上邊我們說過,命令列就意味著可以自動化,自動化後就能夠規模化。shell 指令碼就是我們實現自動化的最有效的方式,因為 shell 程式是最擅長與 Linux 核心打交道的。我們可以利用 shell 指令碼幫我們做很多重複性的工作,來釋放我們工程師的雙手去創造更大的價值。
- 熟悉作業管理。我們需要經常在命令列終端上管理應用程式,啟動或關閉程式。你需要知道這些概念,如:程序、程序組、會話、終端,學會使用
jobs
、fg
、bg
、kill
、Ctrl-C
、Ctrl-Z
,以及訊號的相關操作,需要知道kill -9
到底是在幹什麼。 - 學習使用軟體包的管理。國內最常用的 Linux 發行版是
ubuntu
、centos
,需要學會使用apt-get
、yum
命令來查詢和安裝相關的軟體包,當然也要學會試著從原始碼編譯方式安裝軟體。 - 學習簡單的資料處理。我們在工作和學習中也會經常需要處理文字資訊,Linux 在這方面提供了很多的工具,組合起來能夠非常方便的實現強大的功能。常見的命令
sort
、uniq
、cut
、split
,還有 Linux 經典的三劍客sed
、awk
、grep
,這三個工具都是上古神器,功能非常強大,awk 還有專門的書籍來講解它,可見功能之強大與複雜,我們初學者只需要熟練掌握一些常用的功能即可。 - 學會看文件。雖然不是具體的技術知識,但它卻非常重要,初學者在學習命令時總是希望能記住所有的引數和選項,其實這些引數我們不需要記憶(大腦是用來思考的而不是儲存的),我們可以通過 Linux 手冊來檢視,通常使用
man ifconfig
就能夠檢視該命令的官方文件說明,既準確又清晰。當然在遇到問題時,也可以檢視手冊來確認命令的使用方法是否正確。
Linux 系統涉及的技術知識點非常複雜,上述所分享的僅是一些必學基礎知識,如果能夠認真學習並夠掌握好,基本上算是入門 Linux(存活的級別)。如果你是運維方向,至少需要更深入的學習:使用者管理、磁碟管理、系統日常管理、常見服務的搭建、高可用叢集、系統監控等運維知識;如果你是後臺開發方向,至少需要更深入學些 Linux 作業系統、程序與執行緒、程序間通訊、訊號、網路程式設計、系統呼叫、Linux 核心等知識;如果你是嵌入式方向,你至少需要深入研究 Linux 核心原始碼、裝置驅動程式了。
本篇文章到此結束,後邊還會更新 Linux 系列文章,文章內容風格會盡量保持通俗易懂、重實踐和實用性,儘可能地幫助到有需要的同學,如果感興趣的話,可以繼續關注後續 Linux 系列文章。
謝謝大家,我是肖邦,歡迎關注後續的精彩分享。