大多數初學者在剛剛接觸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,這個目錄也可以用「~「來表示。
Linux下禁止ping最簡單的方法
ping是乙個通訊協議,是ip協議的一部分,tcp ip 協議的一部分。利用它可以檢查網路是否能夠連通,用好它可以很好地幫助我們分析判定網路故障。應用格式為 ping ip位址。但服務啟用ping有時候會造成很多麻煩。因此有時候根據需要 如防止攻擊 linux伺服器管理員可限 務器禁止其它使用者pi...
公升級R最簡單最直接的方法
公升級r一直是一件比較痛苦的事情,你需要先安裝新的r,然後在逐一安裝以前裝過的包。最快的辦法也是把以前的包資料夾拷到新的r中,然後在新的版本中執行包更新。由於官方的源一般都提供最新r版本的二進位制檔案,所以為了更好的穩定性一般也要跟著公升級。所以這是一件相對痛苦又不得不做的事情。現在installr...
Android學習MVP架構的最簡單方法
最近總是聽說到mvp,自己便開始研究起來,看了兩三篇部落格,大明其意。學習mvp最簡單的方法,就是寫demo。關於mvp和mvc的區別和分析,我就不多說了,看以下兩篇部落格,十分清晰明了。鴻洋大神 mvp 殘劍大神的demo不錯 貼一下我的專案結構 專案執行效果圖 model層 主要分為bean物件...