第一章:初識Linux shellshell
Linux內核負責如下4個主要功能:編程
1.系統內存管理緩存
2.軟件程序管理服務器
3.硬件設備管理網絡
4.文件系統管理app
1.系統內存管理性能
內核不只管理服務器上的可用物理內存,還能夠建立和管理虛擬內存測試
內核經過硬盤上的存儲空間來實現虛擬內存,這塊區域稱爲交換空間(swap space)spa
內核不斷的在交換空間和實際物理內存之間反覆交換虛擬內存存儲單元的內容 (這使得系統覺得它擁有比物理內存更多的可用內存)操作系統
下面是書中的圖片(實際上和書中有點出入,爲了省事),讓我有些不解
關於上面的圖讓我有些迷惑,因此我就把虛擬內存和交換空間做爲關鍵詞查了一下
中文wiki上的解釋:虛擬內存 (查看:Linux操做系統下虛擬內存實現)
也就是說,交換空間實現了虛擬內存。虛擬內存存在於交換空間之上,個人理解是這樣的
內存存儲單元會被按組分紅不少塊,這些塊稱爲頁面(page)
內核會將每一個內存頁面放在物理內存或者交換空間。內核會維護一個內存頁面表,指明那些頁面位於物理內存,哪些頁面位於交換空間
內核會記錄哪些頁面正在使用,並自動把一段時間未訪問的內存頁面複製到交換空間區域(稱之爲換出,swapping out),即便還有可用內存
當程序要訪問一個已被喚出的內存頁面時,內核必須從物理內存喚出另一個內存頁面讓出空間,而後從交換空間換入請求的頁面(swapping in)。 這個過程使得運行中的進程變慢
查看/proc/meminfo文件能夠看到虛擬內存的當前狀態
cat /proc/meminfo
MemTotal: 3954168 kB
MemFree: 454136 kB
Buffers: 78916 kB
Cached: 1120528 kB
SwapCached: 17144 kB
Active: 1879656 kB
Inactive: 1367204 kB
Active(anon): 1569708 kB
Inactive(anon): 681008 kB
Active(file): 309948 kB
Inactive(file): 686196 kB
Unevictable: 52 kB
Mlocked: 52 kB
SwapTotal: 2899696 kB
SwapFree: 2844256 kB
MemTotal總內存
MemFree空閒內存
SwapTotal虛擬內存
默認狀況下,運行在Linux系統上的每一個進程都有各自的內存頁面,進程不能訪問其餘進程正在使用的內存頁面
用戶進程不能訪問內核進程使用的內存
爲了方便共享數據,能夠建立一些共享內存頁面,多個進程可在同一塊共用內存區域進行讀取和寫入操做
內核負責維護和管理這塊共用內存區域並控制每一個進程訪問這塊共享區域
ipcs
做用:查看系統上的當前內存共享頁面
$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 65536 su1216 600 393216 2 dest
0x00000000 98305 su1216 600 393216 2 dest
0x00000000 131074 su1216 600 393216 2 dest
0x00000000 163843 su1216 600 393216 2 dest
0x00000000 196612 su1216 600 393216 2 dest
0x00000000 229381 su1216 600 393216 2 dest
每一個共享內存段都有個全部者,是建立它的用戶
每一個段也都有標準的Linux權限設置來設定其餘用戶是否能夠訪問該段
2.軟件程序管理
一些Linux發行版使用一個表來管理在系統開機時要啓動的進程。
在Linux上這個表一般位於/etc/inittab (見#1 )
另外一些系統(如Ubuntu發行版)則採用/etc/init.d目錄 (見#2 ),將開機時啓動或中止某個應用的腳本放到此目錄下
這些腳本經過/etc/rcX.d目錄下的入口啓動(其中X表示運行級別,run level) (見#1 )。這些入口實際是到/etc/init.d的符號連接(見軟連接,soft link #3 )
3.硬件設備管理
Linux中兩種方法用來插入設備驅動代碼
1.編譯進內核的設備驅動代碼
2.可插入內核的設備驅動模塊
Linux系統將硬件設備當成特殊文件,稱爲設備文件 (見#4 ,這裏只提到了下面的前兩種)
設備文件有3種
字符型設備文件
塊設備文件
網絡設備文件
網絡設備是指採用數據包發送和接收數據的設備,包括各類網卡和一個特殊的迴環設備。這個迴環設備容許Linux系統使用通用的網絡編程協議同本身通訊
Linux爲每一個設備都建立一種特殊的文件稱爲「節點」。與設備的全部通訊都是經過設備節點完成的。每一個節點都有一個惟一的數值對做爲標識
數值對包括一個主設備號和一個次設備號
相似的設備具備一樣的主設備號,次設備號用於標識同一主設備號下的某個特殊設備
$ cd /dev; ls -al sda* ttyS*
brw-rw---- 1 root disk 8, 0 2012-11-22 09:33 sda
brw-rw---- 1 root disk 8, 1 2012-11-22 09:33 sda1
brw-rw---- 1 root disk 8, 2 2012-11-22 09:33 sda2
brw-rw---- 1 root disk 8, 5 2012-11-22 09:33 sda5
brw-rw---- 1 root disk 8, 6 2012-11-22 09:33 sda6
brw-rw---- 1 root disk 8, 7 2012-11-22 09:33 sda7
crw-rw---- 1 root dialout 4, 64 2012-11-22 09:33 ttyS0
crw-rw---- 1 root dialout 4, 65 2012-11-22 09:33 ttyS1
crw-rw---- 1 root dialout 4, 66 2012-11-22 09:33 ttyS2
crw-rw---- 1 root dialout 4, 67 2012-11-22 09:33 ttyS3
(其中第5列是主設備號,第6列是次設備號)
4.文件系統管理
Linux支持多種文件系統(自身的和其餘操做系統的)來從硬盤中讀取或寫入數據
Linux系統用來讀寫數據的標準文件系統
文件系統 | 描述 |
ext | Linux擴展文件系統,最先的Linux文件系統 |
ext2 | 第二擴展文件系統,在ext的基礎上提供了更多功能 |
ext3 | 第三擴展文件系統,支持日誌功能 |
ext4 | 第四擴展文件系統,支持高級日誌功能 |
hpfs | OS/2高性能文件系統 |
jfs | IBM日誌文件系統 |
iso9660 | ISO 9660文件系統(CD-ROM) |
minix | MINIX文件系統 |
msdos | 微軟的FAT16 |
ncp | Netware文件系統 |
nfs | 網絡文件系統 |
ntfs | 支持Microsoft NT文件系統 |
proc | 訪問系統信息 |
ReiserFS | 高級Linux文件系統,能提供更好的性能和硬盤恢復功能 |
smb | 支持網絡訪問的Samba SMB文件系統 |
sysv | 較早期的Unix文件系統 |
ufs | BSD文件系統 |
umsdos | 貯存在msdos上的類Unix文件系統 |
vfat | Window 95文件系統(FAT32) |
XFS | 高性能64位日誌文件系統 |
任何供Linux服務器訪問的硬盤都必須格式化成上面文件系統類型的一種
Linux內核採用虛擬文件系統(Virtual File System,VFS)做爲和每一個文件系統交互的接口
這爲Linux內核同任何文件系統通訊提供了標準接口。當每一個文件系統被掛載和使用時,VFS將信息都緩存到內存中
Linux發行版
Linux發行版一般能夠歸類爲如下3種
完整的核心Linux發行版
專業發行版
LiveCD測試發行版
核心Linux發行版
核心Linux發行版含有內核、一個或多個圖形化桌面環境以及預編譯好的幾乎全部能見到的Linux應用,它提供了一站式的完整Linux安裝
下面是一些較流行的核心Linux發行版
發行版 | 描述 |
Slackware | 最先的Linux發行版中的一員,在Linux極客中比較流行 |
Red Hat | 一個主要用於Internet服務器的商業發行版 |
Fedora | 從Red Hat分離出的家用發行版 |
Gentoo | 爲高級Linux用戶設計的發行版,僅包含Linux源代碼 |
Mandriva | 主要是家用(以前叫Mandrake) |
openSuSE | 用於商用和家用的發行版 |
Debian | 在Linux專家和商用Linux產品中流行的發行版 |
專業Linux發行版
除了提供專業軟件以外,專業發行版還嘗試經過自動檢測和自動配置來幫助新手安裝Linux
下面是一小部分專業Linux發行版以及他們的專長
發行版 | 描述 |
Xandros | 一個爲新手配置的商業Linux發行版 |
SimplyMEPIS | 一個免費的家用Linux發行版 |
Ubuntu | 一個免費的學校和家庭用的Linux發行版 |
PCLinuxOS | 一個免費的家庭和辦公用的Linux發行版 |
Mint | 一個免費的家庭娛樂用的Linux發行版 |
dyne:bolic | 一個免費的包含音頻和MIDI應用程序的Linux發行版 |
Puppy Linux | 一個免費的使用於早期PC的小型Linux發行版 |
Linux LiveCD
可引導啓動的Linux發行版,經過CD啓動PC而無需在硬盤上安裝任何東西
缺點:
運行速度慢
沒法將數據寫入cd
對Linux的更改在重啓以後所有失效
發行版 | 描述 |
Knoppix | 一個德語Linux發行版,最先的LiveCD Linux |
SimplyMEPIS | 爲家庭用戶設計的Linux發行版 |
PCLinuxOS | 成熟的LiveCD上的Linux發行版 |
Ubuntu | 爲多種語言設計的世界級項目 |
Slax | 基於Slackware Linux的LiveCD Linux |
Puppy Linux | 爲早期PC設計的全功能Linux |
第二章:走進shell
啞終端(dumb terminal):一般是由通訊電纜鏈接到Unix系統上的顯示器和鍵盤(後來出現鼠標)。這個簡單的組合提供了向Unix系統輸入文本數據和顯示文本結果的一條捷徑
字符集
字符集是一組二進制命令
下面列舉一些常見字符集,具體介紹請點擊其中的連接(大部分爲英文wiki,中文wiki不給力啊)
ASCII :美國信息交換標準碼
ISO-8859-1 (Latin-1):ASCII字符集的一個擴展,ISO字符集,採用8位碼來支持標準ASCII字符,以及大多數西歐語言中的特殊外語字符
ISO-8859-2 :ISO字符集,支持東歐語言字符
ISO-8859-6 :ISO字符集,支持阿拉伯語字符
ISO-8859-7 :ISO字符集,支持希臘語字符
ISO-8859-8 :ISO字符集,支持希伯來語字符
ISO-10646 (Unicode ):ISO雙字節字符集,包含大部分英語和非英語語言的代碼。這個字符集包含全部ISO-8869-x系列字符集中定義的全部字符。
英語國家最經常使用的字符集爲Latin-1
控制碼
控制碼是未在字符集中使用的特殊代碼,它會發出信號給終端來執行特殊的非打印操做 (回車、換行、方向鍵、翻頁鍵……)
控制碼也能夠用來控制啞終端的通訊功能 (代碼XON爲開啓終端數據傳輸,XOFF爲中止到終端的數據傳輸)
塊模式圖形
DEC VT100終端是第一個支持完整ANSI字符集的終端
ANSI字符集包含的代碼不但容許顯示器顯示文本,並且容許顯示基本的圖形符號,好比:框、線和塊
矢量圖形
矢量圖形是基於DEC的塊模式設計的,它將全部的屏幕圖像(包括字符)變成一系列的線段(矢量)(這裏應該是向量吧?)
因爲矢量圖不用點建立線,它能用相比其餘基於點的圖形終端更高的精度來繪製幾何形狀
顯示緩衝
滾動區域(scroll region):在主顯示窗口中翻屏時緩衝數據(該數據稱爲歷史)。滾動區域是終端擁有的內存數量,它使得終端能在翻屏時「記住」數據
替代屏幕(alternative screen):控制碼用來發送信號給終端,向替代屏幕而不是當前顯示屏幕寫數據,那部分數據會保留在內存中。另外一個控制碼會發信號給終端,幾乎當即在普通屏幕數據和替代屏幕數據之間切換顯示器顯示
鍵盤
中斷(Break):給主機發送一串0,一般用來中斷shell中當前正在執行的程序
滾動鎖定(Scroll Lock):也叫禁止滾動(No Scroll)。它會中止顯示上的輸出
重複(Repeat):按下此鍵和其餘鍵時,它會讓終端反覆地向主機發送另外一個鍵的鍵值
(其餘見P24)
terminfo
P25,不打算細讀,參看以前的簡略筆記(#1 )
一些終端介紹,這裏就不細記錄了,須要的時候翻閱書本吧
xterm終端(P29)
Konsole終端(P36)
GNOME Terminal(P43)