1.大教堂與集市:
代表了兩種不同的開發(fā)模式:絕大多數(shù)商業(yè)公司所采用的是大教堂模式,而Linux世界所采用的是集市模式。
2.OS的接口有兩類:
GUI:Graphic User Interface
GNome:c, gtk
KDE: c++, qt
CLI:Command Line Interface
bash
zsh
sh
csh
tcsh
ksh
3.API和ABI
API:顧名思義,是編程的接口,換句話說也就是你編寫“應(yīng)用程序”時候調(diào)用的函數(shù)之類的東西。對于內(nèi)核來說,它的“應(yīng)用程序”有兩種:一種是在它之上的,用戶空間的真正的應(yīng)用程序,內(nèi)核給它們提供的是系統(tǒng)調(diào)用這種接口,比如 read(2),write(2);另一種就是內(nèi)核模塊了,它們和內(nèi)核處于同一層,內(nèi)核給它們提供的是導(dǎo)出的內(nèi)核函數(shù),比如 kmalloc(),printk()。這些接口都是你可以在編寫程序的時候直接看到的,可以直接拿來用的。
ABI:應(yīng)用程序二進制接口(ABI-Application Binary Interface)定義了一組在PowerPC系統(tǒng)軟件上編譯應(yīng)用程序所需要遵循的一套規(guī)則。主要包括基本數(shù)據(jù)類型,通用寄存器的使用,參數(shù)的傳遞規(guī)則,以及堆棧的使用等等。ABI 是另一種形式的接口,二進制接口。除非你直接使用匯編語言,這種接口一般是不能直接拿來用的。比如,內(nèi)核系統(tǒng)調(diào)用用哪些寄存器或者干脆用堆棧來傳遞參數(shù),返回值又是通過哪個寄存器傳遞回去,內(nèi)核里面定義的某個結(jié)構(gòu)體的某個字段偏移是多少等等,這些都是二進制層面上的接口。這些接口是直接給編譯好的二進制用的。換句話說,如果 ABI 保持穩(wěn)定的話,你在之前版本上編譯好的二進制應(yīng)用程序、內(nèi)核模塊,完全可以無須重新編譯直接在新版本上運行。
4.常見開源協(xié)定
BSD協(xié)議:BSD 代碼鼓勵代碼共享,但需要尊重代碼作者的著作權(quán)。BSD由于允許使用者修改和重新發(fā)布代碼,也允許使用或在BSD代碼上開發(fā)商業(yè)軟件發(fā)布和銷售,因此是對商業(yè)集成很友好的協(xié)議。而很多的公司企業(yè)在選用開源產(chǎn)品的時候都首選BSD協(xié)議,因為可以完全控制這些第三方的代碼,在必要的時候可以修改或者二次開發(fā)。
Apache Licence 2.0(Apache-2.0):介紹略
GPL:GPL協(xié)議的主要內(nèi)容是只要在一個軟件中使用(“使用”指類庫引用,修改后的代碼或者衍生代碼)GPL 協(xié)議的產(chǎn)品,則該軟件產(chǎn)品必須也采用GPL協(xié)議,既必須也是開源和免費。這就是所謂的”傳染性”。
LGPL:略
MIT:略
MPL (Mozilla Public License 1.1):略
EPL (Eclipse Public License 1.0):EPL允許Recipients任意使用、復(fù)制、分發(fā)、傳播、展示、修改以及改后閉源的二次商業(yè)發(fā)布。

5.鏡像站點
http://mirrors.aliyun.com
http://mirrors.163.com
http://mirrors.sohu.com
6.LINUX的終端
物理終端,控制臺:console
虛擬終端:6個,tty
Ctrl+Alt+F[1-6]
圖形終端:
CentOS 6:
Ctrl+Alt+F7
CentOS 7:
在哪個虛擬終端啟動,即位于哪個虛擬終端;
串行終端:ttyS
偽終端:pty
硬件設(shè)備也通過文件表示;
物理終端:/dev/console
虛擬終端:/dev/tty# [1,6]
串行終端:/dev/ttyS#
偽終端:/dev/pts/#
注意:在啟動設(shè)備之后,在其上關(guān)聯(lián)一個用戶接口程序,即可實現(xiàn)與用戶交互;
查看終端設(shè)備:
~]# tty
查看接口程序:
~]# echo $SHELL
啟動GUI:
在某一虛擬終端接口運行命令:startx
7.LINUX哲學(xué)思想
1、一切皆文件:
把幾乎所有資源統(tǒng)統(tǒng)抽象為文件形式;包括硬件設(shè)備,甚至通信接口等;
open(), read(), write(), close(), delete(), create()
2、 由眾多功能單一的程序組成;一個程序只做一件事,并且做好;
組合小程序完成復(fù)雜任務(wù);
3、盡量避免跟用戶交互;
目標(biāo):易于以編程的方式實現(xiàn)自動化任務(wù);
4、使用文本文件保存配置信息;
8.文件系統(tǒng)
文件系統(tǒng)像一個倒置樹狀結(jié)構(gòu);
/: 原初起點;
/dev/pts/2:
最左側(cè)/: 表示根目錄
其它的/: 表示路徑分隔符
Linux的路徑分隔符是/
Windows的是\
文件的路徑表示:
絕對路徑:從根開始表示出的路徑
相對路徑:從當(dāng)前位置開始表示出的路徑
文件名使用法則:
嚴(yán)格區(qū)分字符大小寫:file1, File1, FILE1
目錄也是文件,在同一路徑下,兩個文件不能同名;
支持使用除/以外的任意字符;
最長不能超過255個字符;
用戶有家目錄:home,
用戶的起始目錄;普通用戶管理文件的位置;
工作目錄:
當(dāng)前所在的目錄,如果命令沒有額外指定路徑,則默認(rèn)為當(dāng)前工作目錄
/etc/sysconfig/network-scripts/ifcfg-eno16777736
basename:最右側(cè)的文件或目錄名;
dirname:basename左側(cè)的路徑;
命令:
~]# basename /PATH/TO/SOMEFILE
SOMEFILE
~]# dirname /PATH/TO/SOMEFILE
/PATH/TO
8.COMMAND
命令的語法通用格式:
# COMMAND OPTIONS ARGUMENTS
COMMAND:
發(fā)起一命令:請求內(nèi)核將某個二進制程序運行為一個進程;
程序 --> 進程
靜態(tài) --> 動態(tài)(有生命周期)
命令本身是一個可執(zhí)行的程序文件:二進制格式的文件,有可能會調(diào)用共享庫文件;
多數(shù)系統(tǒng)程序文件都存放在:/bin, /sbin, /usr/bin, /usr/sbin,/usr/local/bin, /usr/local/sbin
普通命令:/bin, /usr/bin, /usr/local/bin
管理命令:/sbin, /usr/sbin, /usr/local/sbin
共享庫:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
32bits的庫:/lib, /usr/lib, /usr/local/lib
64bits的庫:/lib64, /usr/lib64, /usr/local/lib64
注意:并非所有的命令都有一個在某目錄與之對應(yīng)的可執(zhí)行程序文件
命令必須遵循特定格式規(guī)范:exe, msi, ELF(Linux)
~]# file /bin/ls
命令分為兩類:
由shell程序的自帶的命令:內(nèi)置命令(builtin)
獨立的可執(zhí)行程序文件,文件名即命令名:外部命令
OPTIONS:
指定命令的運行特性;
選項有兩種表現(xiàn)形式:
短選項:-C, 例如-l, -d
注意:有些命令的選項沒有-;
如果同一命令同時使用多個短選項,多數(shù)可合并:-l -d = -ld
長選項:--word, 例如--help, --human-readable
注意:長選項不能合并;
注意:有些選項可以帶參數(shù),此稱為選項參數(shù);
ARGUMENTS:
命令的作用對象;命令對什么生效;
注意:不同的命令的參數(shù);有些命令可同時帶多個參數(shù),多個之間以空白字符分隔;
例如:ls -ld /var /etc