關(guān)于我們
書單推薦
新書推薦
|
Linux編程基礎(chǔ)
本書主要講解了Linux平臺(tái)的基本命令與開發(fā)工具、Shell編程基礎(chǔ)、Linux文件系統(tǒng)以及與高并發(fā)服務(wù)器相關(guān)的基本知識(shí)與技術(shù)。其中基本命令部分包含文件管理、權(quán)限操作等命令; 開發(fā)工具部分包含Vi、GCC、GDB工具的使用; Shell編程基礎(chǔ)部分主要包含變量、語句、循環(huán)及函數(shù); 文件系統(tǒng)部分包含文件系統(tǒng)邏輯結(jié)構(gòu)、操作方式等知識(shí); 高并發(fā)服務(wù)器部分包含進(jìn)程、信號(hào)、進(jìn)程通信、線程、socket網(wǎng)絡(luò)編程以及幾種常見的服務(wù)器模型。
序
傳智播客和“黑馬程序員”
江蘇傳智播客教育科技股份有限公司(簡稱“傳智播客”)是一家專門致力于培養(yǎng)高素質(zhì)軟件開發(fā)人才的科技公司,“黑馬程序員”是傳智播客旗下的高端IT教育品牌。
“黑馬程序員”的學(xué)員多為大學(xué)畢業(yè)后想從事IT行業(yè),但各方面條件還不成熟的年輕人!昂隈R程序員”的學(xué)員篩選制度非常嚴(yán)格,包括嚴(yán)格的技術(shù)測試、自學(xué)能力測試以及性格測試、壓力測試、品德測試等。百里挑一的殘酷篩選制度確保了學(xué)員質(zhì)量,并降低了企業(yè)的用人風(fēng)險(xiǎn)。
自“黑馬程序員”成立以來,教學(xué)研發(fā)團(tuán)隊(duì)一直致力于打造精品課程資源,不斷在產(chǎn)、學(xué)、研三個(gè)層面創(chuàng)新自己的執(zhí)教理念與教學(xué)方針,并集中“黑馬程序員”的優(yōu)勢力量,有針對(duì)性地出版了計(jì)算機(jī)系列教材五十多種,制作了教學(xué)視頻數(shù)十套,并發(fā)表了各類技術(shù)文章數(shù)百篇。
“黑馬程序員”不僅斥資研發(fā)IT系列教材,還為高校師生提供以下配套學(xué)習(xí)資源與服務(wù)。
為大學(xué)生提供的配套服務(wù):
(1) 專業(yè)的輔助學(xué)習(xí)平臺(tái)“博學(xué)谷”(http://yx.boxuegu.com),有專業(yè)老師在線為您答疑解惑。
(2) 針對(duì)高校學(xué)生在學(xué)習(xí)過程中存在的壓力等問題,我們還面向大學(xué)生量身打造了“播妞”。播妞不僅致力推行快樂學(xué)習(xí),還會(huì)有定期的助學(xué)紅包雨。有興趣的同學(xué)可添加播妞微信/QQ: 208695827。
(3) 高校學(xué)生也可掃描右方二維碼,加入播妞粉絲團(tuán),獲取最新學(xué)習(xí)資源,與播妞一起快樂學(xué)習(xí)。
為IT教師提供的配套服務(wù):
針對(duì)高校教學(xué),“黑馬程序員”為IT系列教材精心設(shè)計(jì)了“教案+授課資源+考試系統(tǒng)+題庫+教學(xué)輔助案例”的系列教學(xué)資源。高校老師請(qǐng)關(guān)注碼大牛老師微信/QQ: 2011168841,獲取教材配套資源,也可以掃描右方二維碼,加入專為IT教師打造的師資服務(wù)平臺(tái)——“教學(xué)好助手”,獲取“黑馬程序員”最新教師教學(xué)輔助資源相關(guān)動(dòng)態(tài)。
前言
隨著互聯(lián)網(wǎng)的發(fā)展,計(jì)算機(jī)新技術(shù)如雨后春筍,層出不窮,這也促使越來越多的學(xué)子投入到計(jì)算機(jī)的學(xué)習(xí)與研發(fā)中;而二十多年來,Linux操作系統(tǒng)已逐漸被越來越多的人接受和認(rèn)可,并被眾多企業(yè)廣泛應(yīng)用到服務(wù)器以及嵌入式開發(fā)等領(lǐng)域。因此,Linux操作系統(tǒng)的使用以及基于Linux的應(yīng)用開發(fā)成為計(jì)算機(jī)專業(yè)學(xué)子應(yīng)掌握的必備技能。
然而,黑馬程序員在近些年的觀察和研究中發(fā)現(xiàn): 面臨就業(yè)的高校學(xué)子雖已經(jīng)學(xué)習(xí)了編程語言與操作系統(tǒng)等的相關(guān)課程,但缺乏動(dòng)手能力,難以將理論聯(lián)系到實(shí)際。這皆因他們所用教材不是體系結(jié)構(gòu)不夠系統(tǒng),就是知識(shí)不夠全面,再加上講解的知識(shí)較深?yuàn)W,以至于學(xué)子難以掌握切實(shí)可用的實(shí)質(zhì)。
針對(duì)這種現(xiàn)象,黑馬程序員決定推出一本更符合學(xué)生實(shí)際需求的教材。為保障學(xué)生在學(xué)習(xí)的過程中能學(xué)有所得,在學(xué)習(xí)之后能學(xué)以致用,黑馬程序員經(jīng)過大量調(diào)研與長期編寫,推出了本書,作為Linux課程的初級(jí)教材。
為什么要學(xué)習(xí)本書
Linux操作系統(tǒng)自誕生至今逐步發(fā)展并日漸完善,因其開源、安全、穩(wěn)定等特性,成為眾多企業(yè)與政府部門搭建服務(wù)器的首選平臺(tái)。此外,Linux在移動(dòng)應(yīng)用與嵌入式開發(fā)領(lǐng)域也被廣泛采用,因此掌握Linux系統(tǒng)的使用與Linux平臺(tái)下的程序開發(fā)方法成為眾多計(jì)算機(jī)從業(yè)人員需要掌握的必備技能。
本書在大綱制定上參照了傳智播客C/C++學(xué)院數(shù)年來結(jié)合計(jì)算機(jī)發(fā)展趨勢及企業(yè)需求所研發(fā)課程體系中的Linux系統(tǒng)編程部分,涵蓋了Linux基本操作、常用工具、系統(tǒng)管理與程序開發(fā)等使用Linux系統(tǒng)以及在Linux環(huán)境下進(jìn)行開發(fā)所需的必要知識(shí);在內(nèi)容安排上,由Linux環(huán)境搭建入手,逐步講解了Linux的基本操作、常用工具、系統(tǒng)管理以及程序開發(fā)等知識(shí),由淺入深,由易到難,循序漸進(jìn);在講解方式上,將理論與實(shí)踐相結(jié)合,為大多知識(shí)點(diǎn)都配備相應(yīng)案例,保障讀者能將理論與實(shí)踐結(jié)合,在掌握理論知識(shí)的同時(shí)強(qiáng)化動(dòng)手能力。
如何使用本書
本書以與企業(yè)中所用環(huán)境(Red Hat Enterprise Linux)較為接近的Linux版本(CentOS 6.8)為開發(fā)環(huán)境,主要介紹Linux系統(tǒng)的使用與Linux環(huán)境下的程序開發(fā)。本書中涉及的命令、語法與系統(tǒng)調(diào)用都配備了具體的案例,旨在讓讀者了解Linux平臺(tái)下的常用服務(wù)器前言Linux編程基礎(chǔ)模型。
若本書用于課堂教學(xué),建議教師在講解理論知識(shí)后,先引導(dǎo)學(xué)生自主動(dòng)手實(shí)現(xiàn)教材中提供的案例,培養(yǎng)學(xué)生思考問題、分析問題、解決問題的能力,以期學(xué)生可更深刻地理解、掌握相應(yīng)知識(shí)。
若讀者為自主學(xué)習(xí)者,建議您勤思考、勤練習(xí)、勤總結(jié),盡量完成并熟練掌握教材中配備的案例,并通過章節(jié)配套測試題進(jìn)行自我檢測和查漏補(bǔ)缺。若您在學(xué)習(xí)的過程中遇到困難或者有疑惑,可向問答精靈咨詢。
本教材共分11章,每章的大體內(nèi)容如下。
第1章首先介紹Linux系統(tǒng)的背景,包括Linux的起源、發(fā)展、應(yīng)用領(lǐng)域、常用版本,以及GNU項(xiàng)目計(jì)劃和POSIX版本;之后介紹Linux環(huán)境搭建過程;最后介紹VMware虛擬網(wǎng)絡(luò)配置、Linux的遠(yuǎn)程終端訪問和遠(yuǎn)程文件管理。通過本章的學(xué)習(xí),讀者可對(duì)Linux系統(tǒng)的背景有所了解,并能順利搭建Linux環(huán)境,掌握Linux的遠(yuǎn)程終端訪問方式及遠(yuǎn)程文件的管理。
第2章講解Linux系統(tǒng)中的基本命令與開發(fā)工具,其中基本命令部分介紹與文件、網(wǎng)絡(luò)、通信、壓縮解壓及幫助相關(guān)的命令,開發(fā)工具部分介紹vi編輯器、GCC編譯器與GDB調(diào)試工具。掌握本章所講的知識(shí),可提高Linux系統(tǒng)使用與Linux環(huán)境開發(fā)的效率。
第3章講解Linux系統(tǒng)中與用戶、用戶組管理相關(guān)的知識(shí)。Linux是一個(gè)支持多用戶的操作系統(tǒng),通過本章的學(xué)習(xí),讀者應(yīng)能掌握Linux系統(tǒng)中管理用戶、用戶組的命令,以及用戶切換的方法。
第4章講解Linux的內(nèi)核——Shell的相關(guān)知識(shí)、Shell應(yīng)用技巧以及Shell腳本編程的相關(guān)語法。其中Shell編程語法包括Shell變量、條件語句、循環(huán)語句、函數(shù),4.6節(jié)還給出了Shell腳本的調(diào)試方法。
第5章講解磁盤與目錄、Linux文件系統(tǒng)、Linux文件類型與文件操作,其中重點(diǎn)為磁盤的邏輯分區(qū)方式、文件系統(tǒng)的結(jié)構(gòu)、文件操作。通過本章的學(xué)習(xí),讀者應(yīng)掌握以上重點(diǎn)知識(shí),并熟悉磁盤分區(qū)、掛載、卸載的方式與創(chuàng)建文件系統(tǒng)的方法。
第6章講解Linux進(jìn)程管理相關(guān)的知識(shí),包括進(jìn)程處理機(jī)制、進(jìn)程屬性、進(jìn)程控制以及進(jìn)程管理命令。通過本章的學(xué)習(xí),讀者應(yīng)熟練掌握進(jìn)程的處理機(jī)制,以及控制進(jìn)程的方法,包括創(chuàng)建進(jìn)程、退出進(jìn)程與進(jìn)程同步等。
第7章講解Linux系統(tǒng)中的信號(hào)機(jī)制,包括信號(hào)來源、產(chǎn)生方式、信號(hào)阻塞、信號(hào)捕獲和時(shí)序競態(tài)等知識(shí)。通過本章的學(xué)習(xí),讀者應(yīng)能在終端與程序中使用信號(hào)管理和控制進(jìn)程。
第8章講解進(jìn)程間通信的方式,包括管道通信、消息隊(duì)列通信、信號(hào)量通信與共享內(nèi)存通信。通過本章的學(xué)習(xí),讀者應(yīng)熟悉Linux系統(tǒng)中進(jìn)程通信的這幾種機(jī)制,并能在程序中使用這些機(jī)制實(shí)現(xiàn)進(jìn)程通信。
第9章主要講解Linux系統(tǒng)中的線程,包括線程的定義、線程相關(guān)操作、線程的屬性,以及實(shí)現(xiàn)線程同步的機(jī)制。線程操作包括創(chuàng)建線程、退出線程、終止線程、掛起線程和線程分離,通過設(shè)置線程的屬性亦可實(shí)現(xiàn)其中的部分操作。線程同步可通過互斥鎖、條件變量、信號(hào)量實(shí)現(xiàn)。學(xué)習(xí)本章之后,讀者應(yīng)能在Linux環(huán)境開發(fā)中熟練操作線程、掌握線程同步機(jī)制,并熟悉線程的屬性、可通過線程屬性設(shè)置線程的狀態(tài)。
第10章主要講解socket編程,即Linux系統(tǒng)中的網(wǎng)絡(luò)編程。其中首先簡述計(jì)算機(jī)網(wǎng)絡(luò)的協(xié)議與體系結(jié)構(gòu),之后講解了socket編程中用到的系統(tǒng)調(diào)用、基于TCP和UDP兩種協(xié)議的通信流程并補(bǔ)充網(wǎng)絡(luò)編程中所需的知識(shí),通過實(shí)際案例展示了不同協(xié)議下基于C/S模型的通信方式,最后對(duì)socket本地通信作了簡單介紹。
第11章對(duì)Linux系統(tǒng)中涉及的幾種并發(fā)服務(wù)器模型作了講解,包括多進(jìn)程并發(fā)服務(wù)器、多線程并發(fā)服務(wù)器、I/O多路轉(zhuǎn)接服務(wù)器、線程池,最后對(duì)epoll的工作模式進(jìn)行了補(bǔ)充。通過本章的學(xué)習(xí),讀者應(yīng)對(duì)Linux系統(tǒng)中的服務(wù)器有所了解。
讀者若不能完全理解教材中所講知識(shí),可登錄博學(xué)谷平臺(tái),配合平臺(tái)中的教學(xué)視頻進(jìn)行學(xué)習(xí)。此外讀者在學(xué)習(xí)的過程中,務(wù)必要勤于練習(xí),確保真正掌握所學(xué)知識(shí)。若在學(xué)習(xí)的過程中遇到無法解決的困難,建議讀者莫要糾結(jié)于此,繼續(xù)往后學(xué)習(xí),或可豁然開朗。
致謝
本教材的編寫和整理工作由傳智播客教育科技股份有限公司完成,主要參與人員有呂春林、高美云、薛蒙蒙、鄭瑤瑤、韓冬、王曉娟、劉傳梅、朱景堯、王保明、劉宗偉等。全體人員在這近一年的編寫過程中付出了很多辛勤的汗水。
意見反饋
盡管我們盡了最大的努力,但教材中難免會(huì)有不妥之處,歡迎各界專家和讀者朋友們來信來函給予寶貴意見,我們將不勝感激。您在閱讀本書時(shí),如發(fā)現(xiàn)任何問題或有不認(rèn)同之處,可以通過電子郵件與我們?nèi)〉寐?lián)系。
黑馬程序員
2017年6月于北京
第1章初識(shí)Linux1
1.1Linux概述1
1.1.1Linux的起源與發(fā)展1
1.1.2Linux的特點(diǎn)2
1.1.3GNU項(xiàng)目計(jì)劃4
1.2安裝Linux5
1.2.1前期準(zhǔn)備5
1.2.2安裝CentOS7
1.3網(wǎng)絡(luò)配置11
1.4遠(yuǎn)程終端訪問18
1.5本章小結(jié)22
1.6本章習(xí)題22
第2章命令與開發(fā)工具24
2.1Linux常用命令24
2.1.1命令格式24
2.1.2文件操作命令25
2.1.3網(wǎng)絡(luò)管理與通信命令36
2.1.4壓縮解壓命令38
2.1.5幫助命令39
2.2Linux常用開發(fā)工具41
2.2.1vi編輯器41
2.2.2GCC編譯器45
2.2.3GDB調(diào)試工具48
2.3本章小結(jié)52
2.4本章習(xí)題52
第3章用戶與用戶組管理54
3.1概述54
3.2用戶和用戶組管理55目錄Linux編程基礎(chǔ)3.2.1用戶管理55
3.2.2用戶組管理59
3.3用戶切換61
3.3.1su61
3.3.2sudo62
3.4本章小結(jié)65
3.5本章習(xí)題65
第4章Shell編程68
4.1Shell概述68
4.1.1Shell的分類68
4.1.2Shell的功能69
4.1.3Shell命令執(zhí)行流程69
4.2Shell應(yīng)用技巧70
4.3Shell編程74
4.3.1第一個(gè)Shell程序74
4.3.2Shell中的變量75
4.4Shell中的條件語句81
4.4.1條件判斷81
4.4.2if條件語句83
4.4.3select語句85
4.4.4case語句85
4.5Shell中的循環(huán)語句87
4.5.1for循環(huán)87
4.5.2while循環(huán)88
4.5.3until循環(huán)88
4.6Shell腳本調(diào)試89
4.7Shell中的函數(shù)90
4.8本章小結(jié)93
4.9本章習(xí)題93
第5章Linux文件系統(tǒng)與操作96
5.1磁盤與目錄96
5.1.1磁盤與磁盤分區(qū)96
5.1.2目錄結(jié)構(gòu)99
5.1.3inode與dentry100
5.2Linux文件系統(tǒng)101
5.2.1Linux文件系統(tǒng)版本101
5.2.2fdisk/mke2fs102
5.2.3ext2/ext3文件系統(tǒng)105
5.2.4虛擬文件系統(tǒng)109
5.2.5掛載110
5.3Linux文件類型112
5.3.1文件類型概述112
5.3.2鏈接文件113
5.3.3設(shè)備文件114
5.4文件操作115
5.4.1文件描述符115
5.4.2文件I/O116
5.4.3文件操作121
5.5本章小結(jié)123
5.6本章習(xí)題123
第6章Linux進(jìn)程管理125
6.1進(jìn)程概述125
6.1.1進(jìn)程處理機(jī)制125
6.1.2進(jìn)程屬性126
6.2進(jìn)程控制129
6.2.1創(chuàng)建進(jìn)程129
6.2.2exec函數(shù)族135
6.2.3進(jìn)程退出138
6.2.4進(jìn)程同步138
6.3進(jìn)程管理命令144
6.4本章小結(jié)150
6.5本章習(xí)題150
第7章信號(hào)153
7.1信號(hào)及信號(hào)來源153
7.2信號(hào)的產(chǎn)生156
7.2.1系統(tǒng)調(diào)用156
7.2.2軟件條件158
7.2.3kill命令160
7.3信號(hào)阻塞161
7.4信號(hào)捕獲164
7.5時(shí)序競態(tài)168
7.6SIGCHLD信號(hào)170
7.7本章小結(jié)173
7.8本章習(xí)題174
第8章進(jìn)程間通信176
8.1管道176
8.1.1匿名管道177
8.1.2popen()/pclose()181
8.1.3命名管道182
8.2消息隊(duì)列185
8.3信號(hào)量190
8.4共享內(nèi)存195
8.5本章小結(jié)201
8.6本章習(xí)題201
第9章線程203
9.1線程概述203
9.2線程操作205
9.2.1創(chuàng)建線程205
9.2.2線程退出207
9.2.3線程終止209
9.2.4線程掛起210
9.2.5線程分離213
9.3線程屬性215
9.4線程同步220
9.4.1互斥鎖221
9.4.2條件變量225
9.4.3信號(hào)量229
9.5本章小結(jié)232
9.6本章習(xí)題232
第10章socket編程235
10.1計(jì)算機(jī)網(wǎng)絡(luò)概述235
10.1.1協(xié)議與體系結(jié)構(gòu)235
10.1.2網(wǎng)絡(luò)結(jié)構(gòu)模式239
10.2socket編程基礎(chǔ)239
10.2.1socket編程接口240
10.2.2socket通信流程244
10.2.3網(wǎng)絡(luò)編程相關(guān)知識(shí)245
10.3socket網(wǎng)絡(luò)編程實(shí)例247
10.3.1基于TCP的網(wǎng)絡(luò)通信247
10.3.2基于UDP的網(wǎng)絡(luò)通信249
10.4socket本地通信251
10.5本章小結(jié)259
10.6本章習(xí)題259
第11章高并發(fā)服務(wù)器261
11.1多進(jìn)程并發(fā)服務(wù)器261
11.2多線程并發(fā)服務(wù)器265
11.3I/O多路轉(zhuǎn)接服務(wù)器268
11.3.1select268
11.3.2poll273
11.3.3epoll277
11.4epoll的工作模式283
11.5本章小結(jié)286
11.6本章習(xí)題287
第5章Linux文件系統(tǒng)與操作學(xué)習(xí)目標(biāo)
了解磁盤分區(qū)與目錄結(jié)構(gòu)
掌握ext2文件系統(tǒng)布局
掌握數(shù)據(jù)塊尋址方式
熟悉Linux系統(tǒng)中的文件類型
掌握Linux系統(tǒng)中實(shí)現(xiàn)I/O操作的方法計(jì)算機(jī)之所以能運(yùn)行,是因?yàn)樵跈C(jī)器硬件上配備了完整的操作系統(tǒng)。操作系統(tǒng)規(guī)定了計(jì)算機(jī)的運(yùn)行方式和處理請(qǐng)求的方式,是計(jì)算機(jī)不可分割的一部分。在操作系統(tǒng)安裝時(shí),安裝程序會(huì)為計(jì)算機(jī)安裝一個(gè)文件系統(tǒng)。文件系統(tǒng)與操作系統(tǒng)類似,都相當(dāng)于一個(gè)程序,存在于存儲(chǔ)設(shè)備上,但文件系統(tǒng)用于規(guī)定文件的存取和操作方式。存儲(chǔ)設(shè)備的正常使用離不開文件系統(tǒng),本章將會(huì)結(jié)合磁盤結(jié)構(gòu)對(duì)文件系統(tǒng)和Linux系統(tǒng)中的文件進(jìn)行講解。
5.1磁盤與目錄
磁盤是文件系統(tǒng)的底層支持,目錄是文件系統(tǒng)的具體表現(xiàn),磁盤與目錄都和文件系統(tǒng)密不可分。本節(jié)先對(duì)磁盤的結(jié)構(gòu)進(jìn)行講解,再講解目錄結(jié)構(gòu)(即文件的組織方式),以及存取文件時(shí)涉及的關(guān)鍵結(jié)構(gòu)——inode和dentry。
5.1.1磁盤與磁盤分區(qū)
磁盤是計(jì)算機(jī)中的主要存儲(chǔ)設(shè)備,一般由主軸、盤片和讀寫磁頭組成,如圖51所示。磁盤中包含多張盤片,每張盤片包含上下兩個(gè)盤面,盤片固定在磁盤的主軸上,盤片的每個(gè)盤面都有一個(gè)固定在動(dòng)臂上的讀寫磁頭;計(jì)算機(jī)中的數(shù)據(jù)存儲(chǔ)在磁盤的盤面上,盤片隨主軸的旋轉(zhuǎn)而轉(zhuǎn)動(dòng),固定在動(dòng)臂上的讀寫磁頭在盤片轉(zhuǎn)動(dòng)的同時(shí)讀取盤面上存儲(chǔ)的信息。
圖51磁盤結(jié)構(gòu)示意圖
磁盤的盤片又可細(xì)分: 圖51中盤片上的圓環(huán)稱為磁道,每張盤片上有許多磁道。多張盤片上半徑相同的磁道組成的圓柱面稱為柱面,一張盤片有多少磁道,磁盤就有多少柱面。磁道是讀寫磁頭讀寫的軌跡,讀寫磁頭可以在動(dòng)臂的帶動(dòng)下切換訪問的柱面。由內(nèi)及外,扇區(qū)中的磁道逐漸增大。較大的磁道能夠存儲(chǔ)更多的數(shù)據(jù),但因?yàn)榇诺乐心艽鎯?chǔ)的數(shù)據(jù)量不同,所以以磁道作為存儲(chǔ)單位顯然會(huì)為數(shù)據(jù)存儲(chǔ)帶來麻煩。
磁盤上的盤片被細(xì)分為多個(gè)大小相同的扇區(qū),扇區(qū)是磁盤空間的基本單位。一般來說,一個(gè)扇區(qū)的大小為512字節(jié)。磁盤中第一個(gè)扇區(qū)非常重要,其中存儲(chǔ)了與磁盤正常使用相關(guān)的重要信息,分別為: 主引導(dǎo)記錄、磁盤分區(qū)表和魔數(shù)。第5章Linux文件系統(tǒng)與操作Linux編程基礎(chǔ) 主引導(dǎo)記錄(MBR,Master Boot Record)占用446個(gè)字節(jié),其中包含一段被稱為引導(dǎo)加載流程(Boot Loader)的程序。計(jì)算機(jī)啟動(dòng)后,會(huì)到磁盤0扇面的0扇區(qū)去讀取MBR中的內(nèi)容,只有MBR中的程序正確無誤,計(jì)算機(jī)才能正常開機(jī)。
磁盤分區(qū)表(partition table)占用64個(gè)字節(jié),其中記錄整塊磁盤的分區(qū)狀態(tài)。每個(gè)分區(qū)的信息需要16個(gè)字節(jié),因此磁盤分區(qū)表若只記錄分區(qū)信息,便最多只能存儲(chǔ)4個(gè)分區(qū)的分區(qū)信息。
魔數(shù)(magic number)占用兩個(gè)字節(jié),用來標(biāo)識(shí)MBR是否有效。
在計(jì)算機(jī)誕生伊始,其存儲(chǔ)空間是極其有限的,但隨著計(jì)算機(jī)硬件與軟件的發(fā)展,普通計(jì)算機(jī)中配備磁盤的存儲(chǔ)空間已能用T來計(jì)算,這表示磁盤中能夠存儲(chǔ)的數(shù)據(jù)也有了極大的提升。為了更好地組織文件,并提高磁盤的讀寫效率,為磁盤分區(qū)是一個(gè)明智的選擇。
若要為現(xiàn)實(shí)中的空間分區(qū),如為一間房間分區(qū),可以通過在房間中添加格檔來實(shí)現(xiàn),但對(duì)于磁盤來說,這種方法顯然行不通。在對(duì)磁盤結(jié)構(gòu)分區(qū)時(shí),我們提到,磁盤的第一個(gè)扇區(qū)中存儲(chǔ)著一張“磁盤分區(qū)表”,其實(shí)利用這張表便能為磁盤分區(qū)。
磁盤由若干個(gè)柱面組成,假設(shè)一個(gè)磁盤有500個(gè)柱面,將磁盤分為4個(gè)扇區(qū),那么只需要將磁盤的分區(qū)信息記錄在磁盤分區(qū)表中即可。按上述方式,磁盤分區(qū)與分區(qū)表的關(guān)系應(yīng)如圖52所示(每個(gè)分區(qū)的柱面數(shù)可不相同)。
圖52分區(qū)表與磁盤分區(qū)
Linux系統(tǒng)中遵循“一切皆文件”的思想,Linux下的設(shè)備也會(huì)被視為文件。硬盤作為設(shè)備的一種,其對(duì)應(yīng)的文件被存儲(chǔ)于系統(tǒng)的/dev目錄下。若磁盤為SATA類型,則磁盤路徑名為/dev/sda,圖52所示的四個(gè)分區(qū)在/dev目錄下對(duì)應(yīng)的文件名如下所示:
P1: /dev/sda1
P2: /dev/sda2
P3: /dev/sda3
P4: /dev/sda4
設(shè)備的文件名由路徑、設(shè)備名與分區(qū)編號(hào)構(gòu)成,若要在P2分區(qū)中存儲(chǔ)數(shù)據(jù),則相應(yīng)的數(shù)據(jù)會(huì)被寫到磁盤中編號(hào)為101~200的磁道上。
Linux和Windows系統(tǒng)中磁盤分區(qū)的方式是相同的,也就是說Windows系統(tǒng)中也有一個(gè)64字節(jié)的分區(qū)表。前文講到,分區(qū)表中最多只能記錄4個(gè)分區(qū)的屬性信息,但是熟悉Windows系統(tǒng)的用戶應(yīng)該知道,Windows系統(tǒng)中可以有不止4個(gè)分區(qū),這是為什么呢?
原來磁盤除可以劃分出主分區(qū)外,還可以劃分出一個(gè)擴(kuò)展分區(qū),而擴(kuò)展分區(qū)可以再次劃分,由擴(kuò)展分區(qū)劃分出的分區(qū)被稱為邏輯分區(qū)。邏輯分區(qū)中的信息同樣需要存儲(chǔ),通常這些信息會(huì)被存儲(chǔ)在由擴(kuò)展分區(qū)劃分出的第一個(gè)邏輯分區(qū)的第一個(gè)扇區(qū)中。
若磁盤中包含500個(gè)磁道,磁盤被分為一個(gè)主分區(qū)和一個(gè)擴(kuò)展分區(qū),且擴(kuò)展分區(qū)又被劃分為4個(gè)邏輯分區(qū),那么主分區(qū)表和邏輯分區(qū)表中的分區(qū)與磁盤的對(duì)應(yīng)關(guān)系如圖53所示。
圖53主分區(qū)與邏輯分區(qū)
圖53的磁盤中有兩個(gè)分區(qū)表(分別用黑色扇形和方塊表示)。存在于分區(qū)P1中的分區(qū)表為主分區(qū)表,共占64字節(jié),其中只記錄了兩個(gè)分區(qū): P1和P2。分區(qū)P1為主分區(qū),分區(qū)P2為擴(kuò)展分區(qū),分區(qū)P2又被劃分為4個(gè)邏輯分區(qū)L1~L4,其分區(qū)信息存儲(chǔ)于第101個(gè)柱面的扇區(qū)中。若Linux系統(tǒng)按圖53所示的方式分區(qū),/dev目錄下將會(huì)有6個(gè)設(shè)備文件,文件的路徑名分別如下:
P1: /dev/sda1
P2: /dev/sda2
L1: /dev/sda5
L2: /dev/sda6
L3: /dev/sda7
L4: /dev/sda8
……
你還可能感興趣
我要評(píng)論
|