以最簡單方式學習Linux
有很多關於Linux的書籍,博客。大多數都會比較「粗暴「的將一大堆的命令塞給讀者,從而使很多.NET程序員望而卻步。未入其門就路過了。
所以我設想用一種更為平滑的學習方式, 就是在學習命令時,先用純語言來介紹Linux背景和動機。 就如同所有的的網路遊戲都要先介紹遊戲的歷史觀,然後再介紹遊戲的操作。
大多數初學者在剛剛接觸Linux都會有非常陌生的感覺。往往會有一些疑惑和問題。而我們就沿著這些問題,從遠及近,從宏觀到微觀來理解Linux的簡潔和美麗。
問題1: Winows有註冊表,為什麼Linux沒有註冊表
註冊表是Windows核心組件,對整個系統進行配置。Linux是以整個文件系統作為"註冊表「,Windows註冊表的樹形結構,可以粗略的對應Linux文件系統的樹形結構。
Linux的配置文件就相當於註冊表的鍵,或者說Linux採用是的分散式的註冊表。
那麼Linux為什麼要這樣設計呢?因為Linux是所謂的網路操作系統,所以單台電腦不是Linux的界限,如果是多台電腦組成的系統,那麼分散式的管理就有著巨大的優勢。
例如:一個包含配置文件的磁碟的損害不會讓整個系統癱瘓,而可能只是讓部分功能失效。
問題2:Windows有完善的圖形界面,而Linux為什麼要學命令行。
首先,命令行絕對要比圖形界面先進的多。命令行是程序員的第一界面,而圖形界面是普通用戶的第一界面。
也許很多人會有不同意見,其實我們再向前想一步,就很清楚了。
命令行的下一步演化是什麼? 很簡單就是語音控制,就是把人類自然語言轉化為命令
圖形界面的的下一步演化是什麼? 是姿勢控制。從目前的Windows系統來說一共只有3種姿勢, 單擊,雙擊,拖放。而更先進的IPad有撥動,畫圈等。
姿勢控制很簡單,便於用戶上手,語音控制很複雜,但是控制精度很高。
作為程序員我們要求電腦完成的工作要比普通用戶複雜的多,所以使用命令行會非常高效。
退一步講,圖形界面本質也是命令行,只不過將姿勢翻譯成命令執行而已。
程序員編程的代碼也都是「命令行」,一條一條的指令而已。
總之,只要能打破對Linux命令行的恐懼感,接下來的事就會非常容易了。這個命令行絕對不是你簡單想像中的命令行,它是非常智能化的。
問題3:Linux有那麼多目錄,那麼多命令,怎麼記得住呢?
首先,Linux目錄是Linux系統最靈魂的東西,所有的硬體都可以被抽象為文件,從而實現網路化。(Internet只不過是Unix/Linux的進一步的演化而已)
所以只要掌握了Linux目錄的規律,在理解的基礎上記憶就可以容易的多。另外Linux的命令行有智能化功能,可以讓你少打95%以上的字元來完成命令。
絕非你所想像的傻乎乎的敲一大堆命令,那些用Linux大牛都是絕頂聰明的人,怎麼可能讓自己辛苦呢?
問題4:Linux的文件夾結構看上去很複雜,怎麼理解呢?
我們這裡假設,我們就是設計者,如果我們設計一個文件系統,我們會如何去做呢?
我們需要一個起點, 這個起點就叫根目錄,用「/」來表示,然後我們需要啟動Linux,那麼我們就會把所有核心的啟動文件(包括Linux核心本身)都放到一個「/boot"目錄下。
當系統啟動後,我們需要執行一些基本命令在操作系統,這些命令都會放到「/bin"目錄下。然後這些命令可能會用到一些庫,這些庫就被放到「/lib"下面,而這些庫可能會會用到一些設備驅動文件,
那麼這些驅動文件就會放到「/dev"目錄下。
/:根目錄
/boot:系統啟動和內核/bin :系統基本命令 (bin是binary的縮寫)/lib : 系統庫(不能直接運行的代碼)(lib是libary的縮寫)/dev : 設備驅動 (dev是device的縮寫)到目前為止只用5個目錄,很簡單吧。
問題5: 什麼是"/usr" ,"/etc"和「/var「
當用戶啟動系統以後,要做一些更加複雜的工作,這時候就會涉及到一個叫「/usr",這個情況稍微有些複雜,是一個難點。不過也很容易解釋清楚。
早期的unix系統都有很多塊硬碟,當時硬碟的容量都很小, 所以往往一個硬碟只放一個目錄,比如「/boot"可以放在一個單獨的"boot"盤上,上面提到的5個目錄,是系統運行必不可少的。
而當系統啟動以後,我們需要其他一些用於具體工作的程序時,我們就會載入一個「/usr"目錄,上面放重要的運行程序。
容易引起疑惑的是"usr"這個名字, 在歷史上,原來這個確實是user的縮寫,不過現在和user沒有任何關係了, 你可以把它看成是"universal software resource"的縮寫。
這個「/usr"有點類似Windows裡面的Program Files。
因此 /bin 和 /usr/bin的區別,就是 /bin裡面的程序更加核心
這時候,很多人會有疑問, 我們記住哪些命令在/bin 還是在/usr/bin呢?
放心,由於所有的bin目錄都會登記到系統變數PATH裡面, 因此無論你在任何當前目錄中,只要輸入命令文件的名稱,系統都會幫你找到這個命令並運行。
要點:
1、/usr上面一般都是只讀文件,數據文件和配置文件不放在上面(放到哪裡,後面會講)
2,沒有「/usr",linux系統也能正常運行
2、/usr可以被多台電腦共享(這裡體現Linux系統的網路性)
由於/usr只放只讀文件,那麼配置文件和數據文件放哪裡呢?這裡就出現了2個新的目錄「/etc"和「/var"
這裡容易初學者迷惑的就是這個2個目錄的名字。
在歷史上 "etc「是 「etcetera」,中文意為「其他」, 現在這個和「其他」沒有任何關係, 就是專門存放配置文件的地方,可以理解為「editable text configuration"的縮寫
比如 /etc/mysql就是放mysql的配置文件 /ect/apache2/就是apache2的配置文件
在歷史上「var" 是 「variable",中文意為「變動」,現在主要用來存放log,lock等文件。
例如 /var/mysql就是用來存放mysql的log
問題6:用戶自己產生的數據放到哪裡?
當我們運行程序後,會產生很多自己的成果,這些成果放哪裡呢? 這裡就出現了一個「/home"目錄,不過你不能直接放到「/home"目錄下, 因為Linux是個多用戶操作系統, 所以系統會有一個以用戶的名字命名的目錄。
例如:用戶是jack ,那麼目錄就是/home/jack ,這個目錄也可以用「~「來表示。
至此,我們.Net程序員也就基本了解了Linux的組成。
你想更深入了解學習Linux知識體系,你可以看一下我們花費了一個多月整理了上百小時的幾百個知識點體系內容:
【超全整理】《Linux雲計算從入門到精通》系列實戰筆記全放送
推薦閱讀:
※Linux 伺服器安全簡明指南
※Linux 1.0 之旅:回顧這一切的開始
※Linux下Anaconda的安裝使用與卸載
※拯救者 Linux:我是如何給我的團隊引入 Linux 的