有很多關于Linux的書籍,博客。大多數都會比較“粗暴“的將一大堆的命令塞給讀者,,從而使很多.NET程序員望而卻步,。未入其門就路過了。
所以我設想用一種更為平滑的學習方式,, 就是在學習命令時,,先用純語言來介紹Linux背景和動機。 就如同所有的的網絡游戲都要先介紹游戲的歷史觀,,然后再介紹游戲的操作,。
大多數初學者在剛剛接觸Linux都會有非常陌生的感覺。往往會有一些疑惑和問題,。而我們就沿著這些問題,,從遠及近,從宏觀到微觀來理解Linux的簡潔和美麗,。
問題1: Winows有注冊表,,為什么Linux沒有注冊表
注冊表是Windows核心組件,對整個系統(tǒng)進行配置,。Linux是以整個文件系統(tǒng)作為"注冊表“,,Windows注冊表的樹形結構,可以粗略的對應Linux文件系統(tǒng)的樹形結構,。
Linux的配置文件就相當于注冊表的鍵,,或者說Linux采用是的分布式的注冊表。
那么Linux為什么要這樣設計呢?因為Linux是所謂的網絡操作系統(tǒng),,所以單臺電腦不是Linux的界限,,如果是多臺電腦組成的系統(tǒng),那么分布式的管理就有著巨大的優(yōu)勢,。
例如:一個包含配置文件的磁盤的損害不會讓整個系統(tǒng)癱瘓,,而可能只是讓部分功能失效。
問題2:Windows有完善的圖形界面,,而Linux為什么要學命令行,。
首先,命令行絕對要比圖形界面先進的多。命令行是程序員的第一界面,,而圖形界面是普通用戶的第一界面,。
也許很多人會有不同意見,其實我們再向前想一步,,就很清楚了,。
命令行的下一步演化是什么? 很簡單就是語音控制,就是把人類自然語言轉化為命令
圖形界面的的下一步演化是什么? 是姿勢控制,。從目前的Windows系統(tǒng)來說一共只有3種姿勢,, 單擊,雙擊,,拖放,。而更先進的IPad有撥動,畫圈等,。
姿勢控制很簡單,,便于用戶上手,語音控制很復雜,,但是控制精度很高,。
作為程序員我們要求電腦完成的工作要比普通用戶復雜的多,所以使用命令行會非常高效,。
退一步講,,圖形界面本質也是命令行,只不過將姿勢翻譯成命令執(zhí)行而已,。
程序員編程的代碼也都是“命令行”,,一條一條的指令而已。
總之,,只要能打破對Linux命令行的恐懼感,,接下來的事就會非常容易了。這個命令行絕對不是你簡單想像中的命令行,,它是非常智能化的,。
問題3:Linux有那么多目錄,那么多命令,,怎么記得住呢?
首先,,Linux目錄是Linux系統(tǒng)最靈魂的東西,所有的硬件都可以被抽象為文件,,從而實現網絡化,。(Internet只不過是Unix/Linux的進一步的演化而已)
所以只要掌握了Linux目錄的規(guī)律,在理解的基礎上記憶就可以容易的多,。另外Linux的命令行有智能化功能,,可以讓你少打95%以上的字符來完成命令,。
絕非你所想象的傻乎乎的敲一大堆命令,,那些用Linux大牛都是絕頂聰明的人,,怎么可能讓自己辛苦呢?
問題4:Linux的文件夾結構看上去很復雜,怎么理解呢?
我們這里假設,,我們就是設計者,,如果我們設計一個文件系統(tǒng),我們會如何去做呢?
我們需要一個起點,, 這個起點就叫根目錄,,用“/”來表示,然后我們需要啟動Linux,那么我們就會把所有核心的啟動文件(包括Linux核心本身)都放到一個“/boot"目錄下,。
當系統(tǒng)啟動后,,我們需要執(zhí)行一些基本命令在操作系統(tǒng),這些命令都會放到“/bin"目錄下,。然后這些命令可能會用到一些庫,,這些庫就被放到“/lib"下面,而這些庫可能會會用到一些設備驅動文件,,
那么這些驅動文件就會放到“/dev"目錄下,。
/:根目錄
/boot:系統(tǒng)啟動和內核
/bin :系統(tǒng)基本命令 (bin是binary的縮寫)
/lib : 系統(tǒng)庫(不能直接運行的代碼)(lib是libary的縮寫)
/dev : 設備驅動 (dev是device的縮寫)
到目前為止只用5個目錄,很簡單吧,。
問題5: 什么是"/usr" ,,"/etc"和“/var“
當用戶啟動系統(tǒng)以后,要做一些更加復雜的工作,,這時候就會涉及到一個叫“/usr",這個情況稍微有些復雜,,是一個難點。不過也很容易解釋清楚,。
早期的unix系統(tǒng)都有很多塊硬盤,,當時硬盤的容量都很小, 所以往往一個硬盤只放一個目錄,,比如“/boot"可以放在一個單獨的"boot"盤上,,上面提到的5個目錄,是系統(tǒng)運行必不可少的,。
而當系統(tǒng)啟動以后,,我們需要其他一些用于具體工作的程序時,我們就會加載一個“/usr"目錄,,上面放重要的運行程序,。
容易引起疑惑的是"usr"這個名字, 在歷史上,,原來這個確實是user的縮寫,,不過現在和user沒有任何關系了,, 你可以把它看成是"universal software resource"的縮寫。
這個“/usr"有點類似Windows里面的Program Files,。
因此 /bin 和 /usr/bin的區(qū)別,,就是 /bin里面的程序更加核心
這時候,很多人會有疑問,, 我們記住哪些命令在/bin 還是在/usr/bin呢?
放心,,由于所有的bin目錄都會登記到系統(tǒng)變量PATH里面, 因此無論你在任何當前目錄中,,只要輸入命令文件的名稱,,系統(tǒng)都會幫你找到這個命令并運行。
要點:
1,、/usr上面一般都是只讀文件,,數據文件和配置文件不放在上面(放到哪里,后面會講)
2,沒有“/usr",linux系統(tǒng)也能正常運行
2,、/usr可以被多臺電腦共享(這里體現Linux系統(tǒng)的網絡性)
由于/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是個多用戶操作系統(tǒng), 所以系統(tǒng)會有一個以用戶的名字命名的目錄,。
例如:用戶是jack ,那么目錄就是/home/jack ,這個目錄也可以用“~“來表示,。
至此,我們.Net程序員也就基本了解了Linux的組成,。