寫給 Linux 初學者的一封信

itread01 2021-01-23 01:55:02
linux 操作系统 itread01 一封信 一封


大家好,我是肖邦。

這篇文章是寫給 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 系列文章。

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

版权声明
本文为[itread01]所创,转载请带上原文链接,感谢
https://www.itread01.com/content/1611335227.html

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云