寫給 Linux 初學者的一封信

大家好,我是肖邦

這篇文章是寫給 Linux 初學者的,我會分享一些作爲初學者應該知道的一些東西,這些內容都是本人從事 Linux 開發工作多年的心得體會,相信會對初學者有所幫助。如果你是 Linux 老鳥,那可能就不需要再往下看了

linux
linux

爲啥要學Linux

作爲從事 IT 工作的同學,對 Linux 系統一定不陌生。如今我們在各種領域都能看得到它的身影,比如,手機、服務器、嵌入式、電信設備、大型計算機,以及各種電子類產品都離不開 Linux,它已經滲透到互聯網世界的方方面面了。

包括那些火熱的技術,比如雲計算、虛擬化、容器、大數據、人工智能,幾乎都是基於 Linux 技術的,那些平臺系統,電商、團購、社交、新聞、快遞,都是部署在服務器端,也幾乎都是基於 Linux 技術的。

在編程的世界中,Linux 就是主流,不會 Linux 你就可能會格格不入。如果你想進大公司,想學新技術,Linux 一定是一道繞不過去的砍,只有進入了 Linux 系統這扇大門,你纔可能成爲合格的軟件工程師。

企業服務器環境絕大部分都是 Linux 系統,所以不管你是從事前端、後端、運維、測試中的哪一類工作,Linux 都是你必須掌握的基礎知識,只是不同類型工作需要學習 Linux 的方向不同而已。

經驗與建議

下邊分享的內容是本人從事 Linux 開發多年的一些經驗總結,相信對 Linux 初學者會有所幫助,當然如果有不準確的地方,還請指正。

  • 一定要自己搭建Linux環境。Linux 系統學習是很重實踐的,僅學習理論知識是不能真正掌握 Linux 的。我推薦在個人電腦上安裝虛擬機,虛擬機的方式非常靈活,既可以提供 Linux 環境,也不會影響宿主機的正常使用。對於虛擬機軟件的選擇,可以考慮使用 VMwareVirtualBox 。虛擬機的快照功能一定要用好,尤其是對新手來說,它可以將你不小心搞壞的環境恢復到初始化狀態,就像是重新安裝了操作系統一樣,從此媽媽再也不用擔心我 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 是一門實操性非常強的學科,初學者需要多敲命令,多實踐和練習。與學習其它東西是一樣的,大多時候我們不需要非得先將理論知識學的通透後纔來實踐動手,而是從實踐中發現問題後再深度學習,這樣效果可能會更好。
  • 有效的學習方式。說到學習方式,每個人學習的方式可能不太一樣。我推薦 視頻 + 看書 的方式,視頻教程可以讓你快速上手,快速瞭解相關的概念,而看書可以更加全面的學習具體的細節,會讓你有更多的思考,看書可以作爲視頻的補充和擴展。
  • 思考,總結與歸納。不管以什麼形式來學習,我們都需要對學習中的每個問題和概念認真思考,需要從 whathowwhy 三個角度進行學習,作爲學習的問題模板。學習任何新技術,我們都需要知道這個技術知識點的應用場景,以及能夠解決什麼問題,是否有類似的解決方案,此技術點有什麼優勢
  • 輸出是一種高效學習方法。在學習過程中,必不可少的一個環節就是歸納和總結,總結就要輸出,可以是文檔形式的筆記或者其它。我比較推薦寫博客,有條件的話一定要寫,因爲寫博客可以幫助你更有效地、更系統的總結和學習。寫博客是一種 的形式,如果能夠將自己學到的知識在博客上清晰的講清楚,教會別人,那才說明你是真正的掌握了它。如果博客寫的不錯的話也能爲自己夠積累影響力,對自己將來的求職也會有幫助。另外如果別人從你博客學習到了東西而且覺着不錯的話,會給你點贊、留言、讚賞,這都是對你寫博客和學習的正反饋,同時也能夠刺激你保持學習的興奮和激情,呵呵。
  • 制定明確的學習目標。做任何事,有了目標才能夠走的更遠,少走彎路。我們學習 Linux 也一樣,需要根據自己的實際情況,制定適合自己的學習目標。個人建議目標不要太大,時間週期也不要太長,要切合實際,比如制定三個月的學習目標。有了目標後,就要確定詳細的學習計劃,細化到每週需要完成的任務列表。注意,你需要爲計劃任務指定結果檢驗的方式,比如寫一篇博客文章或是筆記,計劃真實落地纔是最困難的,因爲執行力是一種稀缺資源。
  • 堅持與激情,獲得正反饋。學習是一件逆人性的事情,大部分人在遇到諸多問題後就很容易會放棄。1.合理的學習計劃和結果輸出,能夠讓你繼續保持學習的激情;2.寫博客、討論交流等方式也可以獲得正向的反饋,從而激勵着你繼續向前;3.堅持學習也能夠幫你養成良好的習慣,無形中提高自己的執行力,個人認爲這些收穫可能遠比具體的技術知識更加重要。
  • 如何解決問題。在學習 Linux 技術的時候,初學者肯定會遇到各種 奇怪 的問題,面對這些問題時,我們要學會分析錯誤信息,嘗試以目前學習到的技術來思考找答案,如果解決不了,可以使用搜索引擎,對於初學者遇到的問題,百度一般都能夠解決。如果實在解決不了,可以請教身邊的高手,不過提問問題時,一定要描述清楚問題,帶着謙虛請教的態度。

應該學習的基礎知識

Linux 系統涉及的技術知識點非常廣泛,學習者可以根據自己的實際情況,選擇相應的主題方向進行學習,不可盲目的跟隨他人的學習路線,有可能適得其反,學習效果事倍功半,得不償失,所以選擇適合自己的學習路線非常重要。

因爲每個人將來從事的工作和方向不同,需要重點學習的內容也不一樣,而且本文目標也只是分享給 Linux 初學者一些實用的經驗心得,所以後邊內容中只簡單羅列了最通用和實用的一些技術,這些是學習 Linux 技術的所有同學都應該知道的技術知識點。

  • 學習 vim。在 Linux 系統下,基本沒有什麼可以與之競爭的編輯器(不接受反駁),你只需要花費 1-2 天的時間來熟悉 vim 的基本使用操作即可,無需研究那些高大上的各種插件使用技巧。要知道 vim 的學習是有難度的,不過一旦熟練使用後,就會得心應手,能極大提高編輯效率。這裏推薦陳皓的《簡明 vim 練級攻略》。
  • 簡單的文件管理。這些都是一些非常基礎的操作與文件的管理命令,如:lslessheadtaildudfln 等,當然 find 是查找文件的非常有用的命令,功能非常強大。
  • 基礎的網絡管理。常用的網絡管理命令,一定要學會使用,這對平時工作或學習時的網絡診斷和網絡配置非常有用。比如 ipifconfig 等網絡命令,還有網絡診斷工具 netstatpingtraceroute 等。
  • 學些 shell 腳本編程。我們知道 Linux 特點之一就是命令行,上邊我們說過,命令行就意味着可以自動化,自動化後就能夠規模化。shell 腳本就是我們實現自動化的最有效的方式,因爲 shell 程序是最擅長與 Linux 內核打交道的。我們可以利用 shell 腳本幫我們做很多重複性的工作,來釋放我們工程師的雙手去創造更大的價值。
  • 熟悉作業管理。我們需要經常在命令行終端上管理應用程序,啓動或關閉程序。你需要知道這些概念,如:進程、進程組、會話、終端,學會使用 jobsfgbgkillCtrl-CCtrl-Z,以及信號的相關操作,需要知道 kill -9 到底是在幹什麼。
  • 學習使用軟件包的管理。國內最常用的 Linux 發行版是 ubuntucentos,需要學會使用 apt-getyum 命令來查找和安裝相關的軟件包,當然也要學會試着從源碼編譯方式安裝軟件。
  • 學習簡單的數據處理。我們在工作和學習中也會經常需要處理文本信息,Linux 在這方面提供了很多的工具,組合起來能夠非常方便的實現強大的功能。常見的命令 sortuniqcutsplit,還有 Linux 經典的三劍客 sedawkgrep,這三個工具都是上古神器,功能非常強大,awk 還有專門的書籍來講解它,可見功能之強大與複雜,我們初學者只需要熟練掌握一些常用的功能即可。
  • 學會看文檔。雖然不是具體的技術知識,但它卻非常重要,初學者在學習命令時總是希望能記住所有的參數和選項,其實這些參數我們不需要記憶(大腦是用來思考的而不是存儲的),我們可以通過 Linux 手冊來查看,通常使用 man ifconfig 就能夠查看該命令的官方文檔說明,既準確又清晰。當然在遇到問題時,也可以查看手冊來確認命令的使用方法是否正確。

Linux 系統涉及的技術知識點非常複雜,上述所分享的僅是一些必學基礎知識,如果能夠認真學習並夠掌握好,基本上算是入門 Linux(存活的級別)。如果你是運維方向,至少需要更深入的學習:用戶管理、磁盤管理、系統日常管理、常見服務的搭建、高可用集羣、系統監控等運維知識;如果你是後臺開發方向,至少需要更深入學些 Linux 操作系統、進程與線程、進程間通信、信號、網絡編程、系統調用、Linux 內核等知識;如果你是嵌入式方向,你至少需要深入研究 Linux 內核源碼、設備驅動程序了。

本篇文章到此結束,後邊還會更新 Linux 系列文章,文章內容風格會盡量保持通俗易懂、重實踐和實用性,儘可能地幫助到有需要的同學,如果感興趣的話,可以繼續關注後續 Linux 系列文章。

謝謝大家,我是肖邦,歡迎關注後續的精彩分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章