寫給 Linux 初學者的一封信
小牛肉 PS:文章開始前就想問一下大家我這個封面圖設計得怎么樣!!!哈哈哈,整了很長時間
大家好,我是肖邦。
這篇文章是寫給 Linux 初學者的,我會分享一些作為初學者應該知道的一些東西,這些內容都是本人從事 Linux 開發(fā)工作多年的心得體會,相信會對初學者有所幫助。如果你是 Linux 老鳥,那可能就不需要再往下看啦

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