老曹眼中的Linux基礎
Linux 幾乎無處不在,不論是服務器構建,還是客戶端開發,對操作系統的基本理解和基礎技能的掌握對全棧來說都是必備的。
系統的選擇
Linux發行版本大體分為兩類,一類是商業公司維護的發行版本,一類是社區維護的發行版本,前者以著名的Redhat(RHEL)為代表,后者以Debian為代表。
Redhat,可稱為Redhat系列,包括RHEL、Fedora、CentOS(RHEL的社區克隆版本,免費)。Ubuntu嚴格來說不能算一個獨立的發行版本,Ubuntu是基于Debian加強而來,一個擁有Debian所有的優點,以及自己所加強優點的近乎***的Linux桌面系統。Ubuntu社區認為實用性和創新性高于一切。
如果你需要一個比較穩定的服務器系統而已,那么***的選擇就是CentOS了,安裝完成后,經過簡單配置就能提供非常穩定的服務了。但是對云計算而言,unbantu也許不錯,hadoop最早就是在ubantu上開發的。
體系結構
了解體系結構,可以有一個較好的方向感。
Linux 的分層體系
Linux 有kernel和user兩種模式,內核、shell和文件系統一起形成了基本的操作系統結構,Linux 內核由如下幾部分組成:內存管理、進程管理、設備驅動程序、文件系統和網絡管理等。
Linux內核
了解linux內核,可以充分利用資源,在系統調優時有目標感。
Linux 將內存劃分為容易處理的內存頁,提供了對 4KB 緩沖區的抽象,例如 slab 分配器。進程實際是某特定應用程序的一個運行實體,進程調度來控制進程對CPU的訪問。Linux 中常見的進程間通訊機制有信號、管道、共享內存、信號量和套接字等。 內核通過 SCI 提供了一個API來創建一個新進程(fork、exec 或 POSⅨ),停止進程(kill、exit),并在它們之間進行通信和同步(signal 或者 POSⅨ 機制)。Linux 操作系統將獨立的文件系統組合成了一個層次化的樹形結構,并且由一個單獨的實體代表這一文件系統。由于 Linux 支持許多不同的文件系統,并且將它們組織成了一個統一的虛擬文件系統.設備驅動程序提供一組操作系統可理解的抽象接口完成和操作系統之間的交互,而與硬件相關的具體操作細節由設備驅動程序完成。Linux內核的網絡部分由BSD套接字、網絡協議層和網絡設備驅動程序組成。 網絡設備驅動程序負責與硬件設備通訊,每一種可能的硬件設備都有相應的設備驅動程序。
linux 文件系統
Linux系統能支持多種目前流行的文件系統,推薦用EXT4。Linux的文件類型主要有:
1) 普通文件,分為純文本和二進制。
2) 目錄文件,存儲文件的地方。
3) 鏈接文件,指向同一個文件或目錄的的文件。
4) 設備文件,分為塊設備和字符設備。
5)管道文件,提供進程間通信
6)套接字文件,與網絡通信有關
Linux使用標準的目錄結構,安裝程序已經為用戶創建了文件系統和完整而固定的目錄組成形式,并指定了每個目錄的作用和其中的文件類型。
Linux Shell 及命令
shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。shell接收用戶輸入的命令并把它送入內核去執行,是一個命令解釋器。shell 有很多類型,這里推薦BASH。BASH是GNU的Bourne Again Shell,是GNU操作系統上默認的shell,大部分linux發行套件使用的都是這種shell。
Linux 的命令很多,下面給出了一個簡單的分類。
常用命令
在shell 中組織linux 命令來完成一系列的任務,就是shell 編程了。Shell,Perl和Python 是Linux 上最常用的腳本語言,我還是推薦使用Python。
Linux 應用
標準的Linux系統一般都有一套都有稱為應用程序的程序集,它包括文本編輯器、編程語言、X Window、Internet工具和數據庫等。
對于文本編輯而言,Emacs 和vim 各有千秋,通過插件配合甚至可以作為IDE使用。 個人感覺,VIM 還應該是必備技能。vim的命令也很多,整理如下:
vi命令集
就應用的管理而言,ubantu 需熟知apt命令,centos 則是yum命令。當然了,源代碼編譯安裝是必須的,makefile的寫法,configure/autoconfig/make 的用法要手到擒來才好。
【本文來自51CTO專欄作者老曹的原創文章,作者微信公眾號:喔家ArchiSelf,id:wrieless-com】