第6章 Linux操作系統(tǒng)_第1頁
第6章 Linux操作系統(tǒng)_第2頁
第6章 Linux操作系統(tǒng)_第3頁
第6章 Linux操作系統(tǒng)_第4頁
第6章 Linux操作系統(tǒng)_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第六章 Linux操作系統(tǒng)實(shí)例分析 本章主要內(nèi)容 6.1 Linux的基本結(jié)構(gòu) 6.2 Linux的進(jìn)程管理 6.3 Linux的存儲管理 6.4 Linux的文件管理 6.5 Linux的設(shè)備管理 6.6 Linux的Shell 6.7 Linux的安全機(jī)制 6.1 Linux的基本結(jié)構(gòu) Linux體系結(jié)構(gòu)屬于層次結(jié)構(gòu),可分為5層。 用戶應(yīng)用程序操作系統(tǒng)服務(wù)系統(tǒng)調(diào)用接口進(jìn)程通信機(jī)制內(nèi)存管理進(jìn)程調(diào)度虛擬文件系統(tǒng)VFS虛擬文件系統(tǒng)VFS網(wǎng)絡(luò)支持中斷處理I/O子系統(tǒng)硬件平臺Linux內(nèi)核Linux的體系結(jié)構(gòu)的體系結(jié)構(gòu)Linux內(nèi)核源代碼組織結(jié)構(gòu)內(nèi)核源代碼組織結(jié)構(gòu)Arch包含體系結(jié)構(gòu)相關(guān)的代碼。Bl

2、ockBlock I/O層代碼,包含多種磁盤I/O調(diào)度算法。Crypto各種加密算法。Documentation與內(nèi)核相關(guān)的文檔。Drivers各種設(shè)備驅(qū)動程序。Fs內(nèi)核支持的各種文件系統(tǒng),如EXT3、NTFS等。Include包含了絕大部分內(nèi)核頭文件。Init內(nèi)核啟動和初始化代碼。Ipc進(jìn)程間通信代碼。Kernel最核心部分,包括進(jìn)程管理、同步原語的實(shí)現(xiàn)等。Lib內(nèi)核的輔助函數(shù)。Mm存儲管理子系統(tǒng),與平臺相關(guān)的部分在arch/*/mm目錄下。Net網(wǎng)絡(luò)子系統(tǒng),包含多種網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)。Scripts包含構(gòu)建內(nèi)核的腳本文件。Securitv包含SELinux的實(shí)現(xiàn)。Sound音頻子系統(tǒng)。UsrE

3、arlyUserSpace特性的相關(guān)代碼。6.2 Linux的進(jìn)程管理 進(jìn)程管理是負(fù)責(zé)創(chuàng)建程序員使用的進(jìn)程抽象并提供措施以便于一個(gè)進(jìn)程的創(chuàng)建、撤銷、同步和保護(hù)其他進(jìn)程。在Linux為了便于進(jìn)程的管理和調(diào)度,進(jìn)程的狀態(tài)分為核心態(tài)和用戶態(tài)兩種。 (1)硬件層。 (2)進(jìn)程管理程序?qū)印?(3)應(yīng)用程序?qū)印?Linux的進(jìn)程和線程管理的進(jìn)程和線程管理 1進(jìn)程和進(jìn)程狀態(tài) (1)可運(yùn)行狀態(tài)(2)可中斷阻塞狀態(tài) (3)不可中斷阻塞狀態(tài) (4)僵死狀態(tài) (5)暫停狀態(tài) (6)交換狀態(tài) 2Linux線程 Linux提供一種不區(qū)分進(jìn)程和線程的解決方案,通過使用一種類似于Solaris輕量級進(jìn)程的方法,用戶級線程被

4、映射到內(nèi)核級進(jìn)程上。組成一個(gè)用戶級進(jìn)程的多個(gè)用戶級線程被映射到共享同一組ID的多個(gè)Linux內(nèi)核級進(jìn)程上。這使得這些進(jìn)程可以共享文件和內(nèi)存等資源,使得同一組中的進(jìn)程調(diào)度切換時(shí)不需要切換上下文。 Linux的進(jìn)程調(diào)度的進(jìn)程調(diào)度 Linux中的內(nèi)核線程采取了與進(jìn)程一樣的表示和管理方式,Linux使用進(jìn)程調(diào)度統(tǒng)一處理進(jìn)程和內(nèi)核線程,所以通過進(jìn)程調(diào)度就可以得知線程調(diào)度的具體情況。 進(jìn)程調(diào)度機(jī)制主要涉及調(diào)度方式、調(diào)度時(shí)機(jī)和調(diào)度算法。 1調(diào)度方式 Linux系統(tǒng)中的調(diào)度策略基本上是以優(yōu)先級為基礎(chǔ)的調(diào)度策略。 2調(diào)度時(shí)機(jī) 調(diào)度時(shí)機(jī)是指重新進(jìn)行進(jìn)程調(diào)度,即重新分配CPU的時(shí)機(jī)。 3調(diào)度算法 Linux的進(jìn)程調(diào)

5、度是將優(yōu)先級調(diào)度、輪轉(zhuǎn)調(diào)度、先來先服務(wù)調(diào)度以及多級反饋輪轉(zhuǎn)調(diào)度綜合起來的一種高效調(diào)度算法。對于實(shí)時(shí)進(jìn)程采用了基于優(yōu)先級的輪轉(zhuǎn)調(diào)度算法和基于優(yōu)先級的先來先服務(wù)調(diào)度算法,而對于普通進(jìn)程則采用了基于優(yōu)先級的輪轉(zhuǎn)調(diào)度算法。 Linux進(jìn)程間的通信進(jìn)程間的通信 1消息隊(duì)列 消息隊(duì)列本身是操作系統(tǒng)核心為通信雙方進(jìn)程建立的數(shù)據(jù)結(jié)構(gòu),兩個(gè)用戶進(jìn)程間通過發(fā)送和接收系統(tǒng)調(diào)用來借助消息隊(duì)列傳遞和交換消息,這樣通信進(jìn)程間不再需要共享變量。 Linux 消息傳遞機(jī)制的系統(tǒng)調(diào)用有四個(gè): 建立一個(gè)消息隊(duì)列msgget 向消息隊(duì)列發(fā)送消息msgsnd 從消息隊(duì)列接收消息msgrcv 取或送消息隊(duì)列控制信息msgctl 2共享

6、內(nèi)存 Linux 與共享存儲有關(guān)的系統(tǒng)調(diào)用有四個(gè):shmget、shmat、Shmdt、Shmctl 3信號量 在Linux 中,有兩類信號量:內(nèi)核信號量、信號量集。內(nèi)核信號量的定義如下: struct semaphore atomic-t count; int waking; struct wait-queue *wait; ; 信號量集定義了以下主要數(shù)據(jù)結(jié)構(gòu): struct sem int semval; int sempid; ; 在信號量集上定義的系統(tǒng)調(diào)用主要有:semget、semop和semctl。Semget用于創(chuàng)建和打開一個(gè)信號量集;semop用于對信號量用操作值(加或減的數(shù)值

7、)進(jìn)行操作,決定是否阻塞或喚醒;semctl 用于獲取、設(shè)置或刪除某信號量集的信息。 6.3 Linux的存儲管理Linux虛擬內(nèi)存的抽象模型 Linux中的每個(gè)用戶進(jìn)程可以訪問4GB的線性虛擬內(nèi)存地址空間。其中從0 到3GB的虛擬內(nèi)存地址是用戶空間,用戶進(jìn)程獨(dú)占并可以直接對其進(jìn)行訪問。從3GB到4GB的虛擬內(nèi)存地址是內(nèi)核態(tài)空間,由所有核心態(tài)進(jìn)程共享,存放僅供內(nèi)核態(tài)訪問的代碼和數(shù)據(jù),用戶進(jìn)程處于用戶態(tài)時(shí)不能訪問。當(dāng)中斷或系統(tǒng)調(diào)用發(fā)生,用戶進(jìn)程進(jìn)行模式切換(處理器特權(quán)級別從3 轉(zhuǎn)為0),即操作系統(tǒng)把用戶態(tài)切換到內(nèi)核態(tài)。 用戶進(jìn)程內(nèi)核態(tài)0GB1GB2GB3GB3GB+4MB4GB0GB4MB內(nèi)存用

8、戶態(tài)用戶態(tài)用戶態(tài) Linux 采用請求頁式虛擬存儲管理。頁表分為三層:頁目錄PGD、中間頁目錄PMD和頁表PT。 Linux的高速緩存的高速緩存 Linux 虛存管理的緩沖機(jī)制主要包括:kmalloc cache 、swap cache 和page cache。 1swap cache swap cache實(shí)質(zhì)上是關(guān)于頁表項(xiàng)的一個(gè)列表,表的首地址為:unsigned long *swap-cache;每一物理頁框都在swap-cache 中占有一個(gè)表項(xiàng),該表項(xiàng)的總數(shù)就是物理頁框總數(shù)。 2page cache 頁緩沖的作用是加快對磁盤文件的訪問速度。文件被映射到內(nèi)存中,每次讀取一頁,而這些頁就保

9、存到page cache中。 3kmalloc cache 管理內(nèi)存空間的數(shù)據(jù)結(jié)構(gòu)管理內(nèi)存空間的數(shù)據(jù)結(jié)構(gòu) 在Linux 操作系統(tǒng)下,物理內(nèi)存劃分成頁框,由men-map表描述,其定義為:typedef struct page struct page *next,*prev;struct inode *inode;unsigned long offset;struct page *next_hash;atomic_t count;unsigned flags;unsigned dirty;unsigned age ;struct wait_queue *wait; struct page *pr

10、ev_hash;struct buffer_head *buffers;unsigned long swap_unlock_entry;unsigned long map_nr;mem_map_t; 內(nèi)存區(qū)的分配和頁面淘汰策略內(nèi)存區(qū)的分配和頁面淘汰策略 用戶進(jìn)程可以使用vmalloc( )和vfree( )函數(shù)申請和釋放大塊存儲空間,分配的存儲空間在進(jìn)程的虛地址空間中是連續(xù)的,但它對應(yīng)的物理頁框仍需經(jīng)缺頁中斷后,由缺頁中斷處理例程分配,所分配的頁框也不是連續(xù)的。 可分配的虛地址空間在3GBhigh_memoryHOLE_8M以上的端,由vmlist表管理。 vmlist 鏈表的節(jié)點(diǎn)類型vm_s

11、truct 定義為:struct vm-struct unsigned long flags; void *addr; unsigned long size; struct vm-struct *next ;static struct vm-struct *vmlist=NULL; 用戶進(jìn)程申請和釋放塊連續(xù)虛擬內(nèi)存分別使用vmalloc( )和vfree( )函數(shù),其執(zhí)行進(jìn)程大致如下:申請時(shí)需給出申請的長度,然后,調(diào)用set-vm-area內(nèi)部函數(shù)向vmlist 索取虛存空間。如果申請成功,將會在vmlist中插入一個(gè)vm-struct結(jié)構(gòu),并返回首地址,當(dāng)申請到的虛地址空間更改頁目錄和頁表。

12、釋放時(shí)需給出虛擬空間首地址,找到表示該虛擬內(nèi)存塊的vm-struct 結(jié)構(gòu),并從vmlist 表中刪除,同時(shí)清除與釋放虛存空間有關(guān)的目錄項(xiàng)和頁表項(xiàng)。 Linux采用兩種方式保存換出的頁面。一是使用整個(gè)塊設(shè)備,如硬盤的一個(gè)分區(qū),稱作交換設(shè)備;另一種是使用文件系統(tǒng)的一個(gè)固定長度的文件,稱作交換文件。兩者統(tǒng)稱為交換空間。 Linux 使用最少使用頻率替換策略,頁替換算法在clock算法基礎(chǔ)上作了改進(jìn),使用位被一個(gè)8位的age變量所取代。每當(dāng)一頁被訪問時(shí),age 增加1。在后臺由存儲管理程序周期性地掃描全局頁面池,并且當(dāng)它在主存中所有頁間循環(huán)時(shí),對每個(gè)頁的age變量減1。Age 為0 的頁是一個(gè)“老”

13、頁, 己有些時(shí)候沒有被使用,因而,可用作頁替換的候選者。Age值越大,該頁最近被使用的頻率越高,也就越不適宜于替換。 6.4 Linux的文件管理Linux文件系統(tǒng)的構(gòu)成 Linux目錄采用多級樹形結(jié)構(gòu),但只有一個(gè)根目錄。 Linux是一個(gè)多用戶系統(tǒng),操作系統(tǒng)本身的駐留程序存放在以根目錄開始的專用目錄中,有時(shí)被指定為系統(tǒng)目錄。 Linux 操作系統(tǒng)不通過設(shè)備標(biāo)識訪問某個(gè)具體文件系統(tǒng),而是通過mount命令把它安裝到文件系統(tǒng)樹形目錄結(jié)構(gòu)的某一個(gè)目錄節(jié)點(diǎn),直到用umount命令顯式的撤卸該文件系統(tǒng)。 文件管理接收mount 命令的處理過程是:步驟1:如果文件系統(tǒng)類型注冊表中存在對應(yīng)的文件系統(tǒng)類型,

14、轉(zhuǎn)步驟3 。步驟2:如果文件系統(tǒng)類型不合法, 則出錯(cuò)返回; 否則在文件系統(tǒng)類型注冊表注冊對應(yīng)的文件系統(tǒng)類型。 步驟3:如果該文件系統(tǒng)對應(yīng)的物理設(shè)備不存在或已經(jīng)被安裝, 則出錯(cuò)返回。步驟4:如果文件系統(tǒng)安裝目錄不存在或已經(jīng)安裝有其他文件系統(tǒng),則出錯(cuò)返回。步驟5:向內(nèi)存超級塊數(shù)組super_bl ocks申請一個(gè)空閑的內(nèi)存超級塊。 步驟6:調(diào)用文件系統(tǒng)類型節(jié)點(diǎn)提供的read_super函數(shù)讀入安裝文件系統(tǒng)的外存超級塊,寫入內(nèi)存超級塊。步驟7:申請一個(gè)vfsmount節(jié)點(diǎn),填充正確內(nèi)容后,假如文件系統(tǒng)注冊表。EXT2對磁盤的組織對磁盤的組織 在EXT2 中,文件系統(tǒng)組織成數(shù)據(jù)塊的序列,這些數(shù)據(jù)塊的長

15、度相同,塊大小在創(chuàng)建時(shí)被固定下來。EXT2 把它所占用的磁盤除引導(dǎo)塊外,邏輯分區(qū)劃分為塊組,每一個(gè)塊組依次包括超級塊、組描述符表、塊位圖、inode位圖、inode表以及數(shù)據(jù)塊區(qū)。 1EXT2的超級塊 EXT2的超級塊用來描述目錄和文件在磁盤上的靜態(tài)分布,包括尺寸和結(jié)構(gòu)。 2EXT2的組描述符 所有的組描述符一個(gè)接一個(gè)存放,構(gòu)成了組描述符表。 3EXT2的inode inode 用于描述文件,一個(gè)inode 對應(yīng)一個(gè)文件,一個(gè)子目錄是一個(gè)特殊的文件。 4EXT2 的目錄文件struct ext2_dir_entry _u32 inode; _u16 rec_len; _u16 name_len

16、; charnameEXT2_NAME_LEN; ; 5數(shù)據(jù)塊分配策略 操作系統(tǒng)能夠通過分配策略避免碎片的發(fā)生則更加重要,EXT2采用了兩個(gè)策略來減少文件碎片:原地先查找策略 、預(yù)分配策略。 EXT2文件的物理結(jié)構(gòu)文件的物理結(jié)構(gòu) EXT2采用一種巧妙的方法實(shí)現(xiàn)了一種多重索引結(jié)構(gòu),保持了讀寫的速度和文件的最大容量。 EXT3文件系統(tǒng) 以EXT2文件系統(tǒng)為基礎(chǔ)加上日志支持的新版本就是EXT3文件系統(tǒng),它和EXT2文件系統(tǒng)在硬盤布局上是完全一樣的,其差別僅僅是:EXT3文件系統(tǒng)在硬盤上多出了一個(gè)特殊的journal inode,用來記錄文件系統(tǒng)的日志,這種文件系統(tǒng)叫作日志文件系統(tǒng)。 1關(guān)于日志式文件

17、系統(tǒng) 日志式文件系統(tǒng)在強(qiáng)調(diào)數(shù)據(jù)完整性的企業(yè)級服務(wù)器中有著重要的需求,是文件系統(tǒng)發(fā)展的方向。 2EXT2文件系統(tǒng)的不足 為了避免磁盤訪問瓶頸效應(yīng),一般文件系統(tǒng)大都以異步方式工作。 3日志文件系統(tǒng)的工作原理 日志文件系統(tǒng)的設(shè)計(jì)思想是跟蹤文件系統(tǒng)的變化而不是文件系統(tǒng)的內(nèi)容。 4EXT3日志文件系統(tǒng)的具體實(shí)現(xiàn) EXT3在EXT2的基礎(chǔ)上加入了記錄元數(shù)據(jù)的日志功能,努力保持向前和向后的兼容性。 5EXT3文件系統(tǒng)的額外開銷 更多的磁盤I/O操作、更容易產(chǎn)生碎片。 虛擬文件系統(tǒng)VFS Linux系統(tǒng)可以支持多種文件系統(tǒng),為此,必須使用一種統(tǒng)一的接口,這就是虛擬文件系統(tǒng)(VFS)。VFS 只是一種存在于內(nèi)存

18、的文件系統(tǒng),擁有關(guān)于各種特殊文件系統(tǒng)的公共接口。VFS 在操作系統(tǒng)自舉時(shí)建立,在系統(tǒng)關(guān)閉時(shí)消亡。 1VFS系統(tǒng)結(jié)構(gòu) VFS的主要功能包括:記錄可用的文件系統(tǒng)的類型;把設(shè)備與對應(yīng)的文件系統(tǒng)聯(lián)系起來;處理一些面向文件的通用操作;涉及到針對具體文件系統(tǒng)的操作時(shí),把它們映射到與控制文件、目錄以及inode 相關(guān)的物理文件系統(tǒng)。 2文件系統(tǒng)的安裝與卸載 Linux文件系統(tǒng)可以根據(jù)需要隨時(shí)裝卸,從而實(shí)現(xiàn)文件存儲空間的動態(tài)擴(kuò)充。在系統(tǒng)初啟時(shí),往往只有一個(gè)文件系統(tǒng)安裝上,即根文件系統(tǒng),。根文件系統(tǒng)一旦安裝上,則在整個(gè)系統(tǒng)運(yùn)行過程中都無法卸載,它是系統(tǒng)的基本部分。其他的文件系統(tǒng)可以根據(jù)需要將其作為子系統(tǒng)動態(tài)地安

19、裝到主系統(tǒng)中。 卸載文件系統(tǒng)的過程基本上與安裝文件系統(tǒng)的過程相反。在執(zhí)行一系列驗(yàn)證后,若符合卸載條件,則釋放對應(yīng)的VFS超級塊和安裝點(diǎn),從而卸載該文件系統(tǒng)。 6.5 Linux的設(shè)備管理Linux設(shè)備管理概述 Linux采用了虛擬文件系統(tǒng)(VFS)進(jìn)行設(shè)備管理,向用戶提供設(shè)備文件的系統(tǒng)調(diào)用,向下硬件設(shè)備內(nèi)核將控制權(quán)交給設(shè)備驅(qū)動程序,由其完成底層的設(shè)備驅(qū)動。系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核和應(yīng)用程序之間的接口,設(shè)備驅(qū)動程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口。 為了解決查詢方式的低效率,Linux專門引入了系統(tǒng)定時(shí)器,以便每隔一段時(shí)間才查詢一次設(shè)備的狀態(tài),從而,解決忙式查詢帶來的效率下降問題。 Linux中

20、的設(shè)備驅(qū)動 Linux 的設(shè)備驅(qū)動程序與外界的接口可分為三部分:驅(qū)動程序與內(nèi)核的接口、驅(qū)動程序與系統(tǒng)引導(dǎo)的接口、驅(qū)動程序與設(shè)備的接口。 系統(tǒng)引導(dǎo)時(shí),通過sys-setup() 進(jìn)行系統(tǒng)初始化,而sys-setup() 又調(diào)用device-setup() 進(jìn)行設(shè)備初始化。 打開設(shè)備是由open() 完成的。 字符設(shè)備使用各自的read()和write()對設(shè)備進(jìn)行數(shù)據(jù)讀寫,塊設(shè)備則使block-read() 和block-write()來進(jìn)行數(shù)據(jù)讀寫。 設(shè)備管理實(shí)例 1硬盤管理 一個(gè)典型的Linux系統(tǒng)一般包括一個(gè)DOS分區(qū)、一個(gè)EXT2分區(qū)、一個(gè)Linux交換分區(qū)、以及零個(gè)或多個(gè)擴(kuò)展用戶分區(qū)。

21、 初始化時(shí),Linux系統(tǒng)在CMOS中查找關(guān)于硬盤的信息,并依次為依據(jù)構(gòu)造上面的數(shù)據(jù)結(jié)構(gòu)。Linux系統(tǒng)將按照查找到的順序給IDE 硬盤命名。 SCSI總線是一種高效率的數(shù)據(jù)總線,每條SCSI 總線最多可以掛接八個(gè)SCSI設(shè)備。每個(gè)設(shè)備有唯一的標(biāo)識符,并且這些標(biāo)識符可以通過設(shè)備上的跳線來攝制。 Linux SCSI子系統(tǒng)包括兩個(gè)基本組成部分,其數(shù)據(jù)結(jié)構(gòu)分別用host和device來表示。 2網(wǎng)絡(luò)設(shè)備 在系統(tǒng)自舉或網(wǎng)絡(luò)初始化時(shí),網(wǎng)絡(luò)設(shè)備驅(qū)動程序向Linux 內(nèi)核注冊。網(wǎng)絡(luò)設(shè)備用device 數(shù)據(jù)結(jié)構(gòu)描述,該數(shù)據(jù)結(jié)構(gòu)包含一些設(shè)備信息以及一些操作例程,這些例程用來支持各種網(wǎng)絡(luò)協(xié)議,可以用于傳送和接收

22、數(shù)據(jù)包。 Device 數(shù)據(jù)結(jié)構(gòu)包括以下幾個(gè)方面的內(nèi)容:名稱、總線信息、接口標(biāo)志、協(xié)議信息、包隊(duì)列、支持函數(shù)。6.6 Linux的Shell Shell的工作原理 shell是一個(gè)命令語言解釋器,它擁有自己內(nèi)建的shell命令集,shell也能被系統(tǒng)中其他應(yīng)用程序所調(diào)用。用戶在提示符下輸入的命令都由shell先解釋然后傳給Linux核心。 shell的另一個(gè)重要特性是它自身就是一個(gè)解釋型的程序設(shè)計(jì)語言,shell程序設(shè)計(jì)語言支持絕大多數(shù)在高級語言中能見到的程序元素。 Shell的種類 Linux中的Shell有多種類型,其中最常用的幾種是Bourne Shell(sh)、C Shell(csh

23、)和Korn Shell(ksh)。 Bourne Shell是UNIX最初使用的Shell,并且在每種UNIX上都可以使用。Bourne Shell在Shell編程方面相當(dāng)優(yōu)秀,但在處理與用戶的交互方面做得不如其他幾種Shell。 C Shell是一種比Bourne Shell更適于編程的Shell,它的語法與C語言很相似。 Korn Shell集合了C Shell和Bourne Shell的優(yōu)點(diǎn)并且和Bourne Shell完全兼容。 Bash Shell的命令 Bash Shell命令分為兩類:Shell內(nèi)部命令和Shell外部命令。 Linux命令的格式: 命令體 選項(xiàng) 命令的參數(shù),命

24、令的對象 如何獲得命令的幫助:(1)命令-h 或 命令h(2)man命令(3)info info是GNU的超文本幫助系統(tǒng)(4)help命令 1命令選項(xiàng)和參數(shù) 用戶登錄到Linux系統(tǒng)時(shí),可以看到一個(gè)Shell提示符,標(biāo)識了命令行的開始。用戶可以在提示符后面輸入任何命令及參數(shù)。 (1) $ date二 10 10 01:34:58 CST 2010$ (2) $ Command Option Arguments (3) $ ls (4) $ ls -l (5) $ ls -l text 2Shell變量 Shell變量分為兩類,即標(biāo)準(zhǔn)Shell變量和用戶自定義的變量。 常用的Shell環(huán)境變量有

25、:(1)HOME 用于保存注冊目錄的完全路徑名。(2)PATH 用于保存用冒號分隔的目錄路徑名。(3)TERM 終端的類型。(4)UID 當(dāng)前用戶的識別字。(5)PWD 當(dāng)前工作目錄的絕對路徑名。(6)PS1 主提示符。(7)PS2 輔助提示符。 常用的Shell預(yù)定義變量有:(1)$# 位置參數(shù)的數(shù)量。(2)$* 所有位置參數(shù)的內(nèi)容。(3)$? 命令執(zhí)行后返回的狀態(tài)。(4)$ 當(dāng)前進(jìn)程的進(jìn)程號。(5)$! 后臺運(yùn)行的最后一個(gè)進(jìn)程號。(6)$0 當(dāng)前執(zhí)行的進(jìn)程名 3命令行特征 命令行實(shí)際上是可以編輯的一個(gè)文本緩沖區(qū),在按回車之前,可以對輸入的文本進(jìn)行編輯。 Shell中除使用普通字符外,還可以

26、使用一些具有特殊含義和功能的特殊字符。 (1)元字符 元字符用于模式匹配。常用的元字符有*、?和括在方括號 中的字符序列。 (2)引號 在Shell中引號分為:單引號,雙引號和反引號。 單引號 由單引號括起來的字符都作為普通字符出現(xiàn)。 雙引號 ” 除$、和”這幾個(gè)字符仍是特殊字符并保留其特殊功能外,其余字符仍作為普通字符對待。 反引號 反引號括起來的字符串被Shell解釋為命令行。 (3)注釋符 在Shell中以字符“#”開頭的正文行表示注釋行。 4Shell常用命令(1)安裝和登錄命令:login、shutdown、halt、reboot、mount、umount、chsh。(2)文件處理命

27、令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln。(3)系統(tǒng)管理相關(guān)命令:df、top、free、quota、at、lp、adduser、groupadd kill、crontab、 tar、unzip、gunzip、last。(4)網(wǎng)絡(luò)操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin rcp、finger、mail、nslookup。(5)系統(tǒng)安全相關(guān)命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo、pswho。Bash Shell編程 Shell提

28、供了用來控制程序執(zhí)行流程的命令,包括條件分支和循環(huán)結(jié)構(gòu),Shell用于指定條件值的是是命令和字串。 1測試命令 (1)數(shù)值測試 -eq 等于則為真。-ne 不等于則為真。-gt 大于則為真。-ge 大于等于則為真。-lt 小于則為真。-le 小于等于則為真。 (2)字串測試= 等于則為真。!= 不相等則為真。-z字串 字串長度偽則為真。-n字串 字串長度不偽則為真。 (3)文件測試-e文件名 如果文件存在則為真。-r文件名 如果文件存在且可讀則為真。-w文件名 如果文件存在且可寫則為真。-x文件名 如果文件存在且可執(zhí)行則為真。-s文件名 如果文件存在且至少有一個(gè)字符則為真。-d文件名 如果文件

29、存在且為目錄則為真。-f文件名 如果文件存在且為普通文件則為真。-c文件名 如果文件存在且為字符型特殊文件則為真。-b文件名 如果文件存在且為塊特殊文件則為真。 2if條件語句 Shell程序中的條件分支是通過if條件語句來實(shí)現(xiàn)的,其一般格式為:if 條件命令串then 條件為真時(shí)的命令串else 條件為假時(shí)的命令串fi 3for循環(huán) for循環(huán)對一個(gè)變量的可能的值都執(zhí)行一個(gè)命令序列。賦給變量的幾個(gè)數(shù)值既可以在程序內(nèi)以數(shù)值列表的形式提供,也可以在程序以外以位置參數(shù)的形式提供。for循環(huán)的一般格式為:for變量名 in數(shù)值列表do 若干個(gè)命令行done 4while和until循環(huán) while和

30、until命令都是用命令的返回狀態(tài)值來控制循環(huán)的。While循環(huán)的一般格式為:while 若干個(gè)命令行1do 若干個(gè)命令行2done until命令是另一種循環(huán)結(jié)構(gòu),它和while命令相似,其格式如下:until 若干個(gè)命令行1do 若干個(gè)命令行2done 5case條件選擇 case條件選擇為用戶提供了根據(jù)字串或變量的值從多個(gè)選項(xiàng)中選擇一項(xiàng)的方法,其格式如下:case string inexp-1)若干個(gè)命令行1;exp-2)若干個(gè)命令行2;*)其他命令行esac 6無條件控制語句break和continue break立即終止當(dāng)前循環(huán)的執(zhí)行,contiune不執(zhí)行循環(huán)中后面的語句而立即開始

31、下一個(gè)循環(huán)的執(zhí)行。這兩個(gè)語句只有放在do和done之間才有效。 7函數(shù)定義 函數(shù)是由若干條Shell命令組成,它不是一個(gè)單獨(dú)的進(jìn)程,而是Shell程序的一部分。函數(shù)定義的基本格式為:functionname 若干命令行 調(diào)用函數(shù)的格式為:functionname param1 param26.7 Linux的安全機(jī)制 Linux的安全性是借助以下4種方式提供的。 系統(tǒng)調(diào)用:用戶進(jìn)程通過Linux系統(tǒng)調(diào)用接口,顯式地從內(nèi)核獲得服務(wù),內(nèi)核根據(jù)調(diào)用進(jìn)程的要求執(zhí)行用戶請求。 異常:進(jìn)程的某些不正常操作,如除數(shù)為0、用戶堆棧溢出等將引起硬件異常,異常發(fā)生后內(nèi)核將干預(yù)并處理之。 中斷:內(nèi)核通過中斷機(jī)制管理

32、外圍設(shè)備及其IO操作。 特殊系統(tǒng)進(jìn)程:Linux通過一組特殊的系統(tǒng)進(jìn)程執(zhí)行系統(tǒng)級的任務(wù),從而防止用戶非法控制。 標(biāo)識與鑒別 當(dāng)用戶創(chuàng)建賬戶時(shí),系統(tǒng)管理員為其分配一個(gè)唯一的用戶號(UID)和一個(gè)用戶組號(GID),并為用戶建立一個(gè)主目錄。系統(tǒng)中超級用戶(root)的UID為0。每個(gè)用戶可以屬于一個(gè)或多個(gè)用戶組,每個(gè)用戶組有唯一的GID。 系統(tǒng)使用DES或MD5算法對用戶口令進(jìn)行加密后存儲在/etc/password文件中。用戶登錄系統(tǒng)時(shí),需要輸入其口令。系統(tǒng)對輸入的口令采用同樣算法加密,并與存儲在/etc/password文件中的口令密文進(jìn)行比較,鑒別用戶的真實(shí)身份。 存取控制 Linux中實(shí)現(xiàn)了粗粒

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論