(第五篇)Linux操作系统基本结构介绍
Linux操作系統(tǒng)基本結(jié)構(gòu)介紹
Linux系統(tǒng)一般有4個(gè)主要部分:內(nèi)核、shell、文件系統(tǒng)和應(yīng)用程序。內(nèi)核、shell和文件系統(tǒng)一起形成了基本的操作系統(tǒng)結(jié)構(gòu),它們使得用戶可以運(yùn)行程序、管理文件并使用系統(tǒng)。
1、?內(nèi)核
內(nèi)核是操作系統(tǒng)的核心,具有很多最基本功能,如虛擬內(nèi)存、多任務(wù)、共享庫、需求加載、可執(zhí)行程序和TCP/IP網(wǎng)絡(luò)功能。Linux內(nèi)核的模塊分為以下幾個(gè)部分:存儲(chǔ)管理、CPU和進(jìn)程管理、文件系統(tǒng)、設(shè)備管理和驅(qū)動(dòng)、網(wǎng)絡(luò)通信、系統(tǒng)的初始化和系統(tǒng)調(diào)用等。
?
1. 內(nèi)存管理
????????對任何一臺(tái)計(jì)算機(jī)而言,其內(nèi)存以及其它資源都是有限的。為了讓有限的物理內(nèi)存滿足應(yīng)用程序?qū)?nèi)存的大需求量,Linux ?采用了稱為“虛擬內(nèi)存”的內(nèi)存管理方式。Linux ?將內(nèi)存劃分為容易處理的“內(nèi)存頁”(對于大部分體系結(jié)構(gòu)來說都是 4KB)。Linux 包括了管理可用內(nèi)存的方式,以及物理和虛擬映射所使用的硬件機(jī)制。不過內(nèi)存管理要管理的可不止 4KB 緩沖區(qū)。Linux 提供了對 4KB 緩沖區(qū)的抽象,例如 slab 分配器。這種內(nèi)存管理模式使用 4KB 緩沖區(qū)為基數(shù),然后從中分配結(jié)構(gòu),并跟蹤內(nèi)存頁使用情況,比如哪些內(nèi)存頁是滿的,哪些頁面沒有完全使用,哪些頁面為空。這樣就允許該模式根據(jù)系統(tǒng)需要來動(dòng)態(tài)調(diào)整內(nèi)存使用。為了支持多個(gè)用戶使用內(nèi)存,有時(shí)會(huì)出現(xiàn)可用內(nèi)存被消耗光的情況。由于這個(gè)原因,頁面可以移出內(nèi)存并放入磁盤中。這個(gè)過程稱為交換,因?yàn)轫撁鏁?huì)被從內(nèi)存交換到硬盤上。內(nèi)存管理的源代碼可以在 ./linux/mm 中找到。
?
2 .進(jìn)程管理
???????進(jìn)程實(shí)際是某特定應(yīng)用程序的一個(gè)運(yùn)行實(shí)體。在 Linux ?系統(tǒng)中,能夠同時(shí)運(yùn)行多個(gè)進(jìn)程,Linux ?通過在短的時(shí)間間隔內(nèi)輪流運(yùn)行這些進(jìn)程而實(shí)現(xiàn)“多任務(wù)”。這一短的時(shí)間間隔稱為“時(shí)間片”,讓進(jìn)程輪流運(yùn)行的方法稱為“進(jìn)程調(diào)度” ,完成調(diào)度的程序稱為調(diào)度程序。
???????進(jìn)程調(diào)度控制進(jìn)程對CPU的訪問。當(dāng)需要選擇下一個(gè)進(jìn)程運(yùn)行時(shí),由調(diào)度程序選擇最值得運(yùn)行的進(jìn)程。可運(yùn)行進(jìn)程實(shí)際上是僅等待CPU資源的進(jìn)程,如果某個(gè)進(jìn)程在等待其它資源,則該進(jìn)程是不可運(yùn)行進(jìn)程。Linux使用了比較簡單的基于優(yōu)先級的進(jìn)程調(diào)度算法選擇新的進(jìn)程。
????????通過多任務(wù)機(jī)制,每個(gè)進(jìn)程可認(rèn)為只有自己獨(dú)占計(jì)算機(jī),從而簡化程序的編寫。每個(gè)進(jìn)程有自己單獨(dú)的地址空間,并且只能由這一進(jìn)程訪問,這樣,操作系統(tǒng)避免了進(jìn)程之間的互相干擾以及“壞”程序?qū)ο到y(tǒng)可能造成的危害。 為了完成某特定任務(wù),有時(shí)需要綜合兩個(gè)程序的功能,例如一個(gè)程序輸出文本,而另一個(gè)程序?qū)ξ谋具M(jìn)行排序。為此,操作系統(tǒng)還提供進(jìn)程間的通訊機(jī)制來幫助完成這樣的任務(wù)。Linux 中常見的進(jìn)程間通訊機(jī)制有信號(hào)、管道、共享內(nèi)存、信號(hào)量和套接字等。
???????內(nèi)核通過 SCI 提供了一個(gè)應(yīng)用程序編程接口(API)來創(chuàng)建一個(gè)新進(jìn)程(fork、exec 或 Portable Operating System Interface [POSⅨ] 函數(shù)),停止進(jìn)程(kill、exit),并在它們之間進(jìn)行通信和同步(signal 或者 POSⅨ 機(jī)制)。
?
3. 文件系統(tǒng)
???????和 DOS 等操作系統(tǒng)不同,Linux 操作系統(tǒng)中單獨(dú)的文件系統(tǒng)并不是由驅(qū)動(dòng)器號(hào)或驅(qū)動(dòng)器名稱(如 A: ?或 C: ?等)來標(biāo)識(shí)的。相反,和 UNIX ?操作系統(tǒng)一樣,Linux 操作系統(tǒng)將獨(dú)立的文件系統(tǒng)組合成了一個(gè)層次化的樹形結(jié)構(gòu),并且由一個(gè)單獨(dú)的實(shí)體代表這一文件系統(tǒng)。Linux ?將新的文件系統(tǒng)通過一個(gè)稱為“掛裝”或“掛上”的操作將其掛裝到某個(gè)目錄上,從而讓不同的文件系統(tǒng)結(jié)合成為一個(gè)整體。Linux ?操作系統(tǒng)的一個(gè)重要特點(diǎn)是它支持許多不同類型的文件系統(tǒng)。Linux 中最普遍使用的文件系統(tǒng)是?Ext2,它也是 Linux ?土生土長的文件系統(tǒng)。但 Linux ?也能夠支持 FAT、VFAT、FAT32、MINIX 等不同類型的文件系統(tǒng),從而可以方便地和其它操作系統(tǒng)交換數(shù)據(jù)。由于 Linux ?支持許多不同的文件系統(tǒng),并且將它們組織成了一個(gè)統(tǒng)一的虛擬文件系統(tǒng).
???????虛擬文件系統(tǒng)(VirtualFileSystem,VFS):隱藏了各種硬件的具體細(xì)節(jié),把文件系統(tǒng)操作和不同文件系統(tǒng)的具體實(shí)現(xiàn)細(xì)節(jié)分離了開來,為所有的設(shè)備提供了統(tǒng)一的接口,VFS提供了多達(dá)數(shù)十種不同的文件系統(tǒng)。虛擬文件系統(tǒng)可以分為邏輯文件系統(tǒng)和設(shè)備驅(qū)動(dòng)程序。邏輯文件系統(tǒng)指Linux所支持的文件系統(tǒng),如ext2,fat等,設(shè)備驅(qū)動(dòng)程序指為每一種硬件控制器所編寫的設(shè)備驅(qū)動(dòng)程序模塊。
?
???????虛擬文件系統(tǒng)(VFS)是 Linux 內(nèi)核中非常有用的一個(gè)方面,因?yàn)樗鼮槲募到y(tǒng)提供了一個(gè)通用的接口抽象。VFS 在 SCI 和內(nèi)核所支持的文件系統(tǒng)之間提供了一個(gè)交換層。即VFS 在用戶和文件系統(tǒng)之間提供了一個(gè)交換層。
?
在?VFS 上面,是對諸如 open、close、read 和 write 之類的函數(shù)的一個(gè)通用 API 抽象。在 VFS 下面是文件系統(tǒng)抽象,它定義了上層函數(shù)的實(shí)現(xiàn)方式。它們是給定文件系統(tǒng)(超過 50 個(gè))的插件。文件系統(tǒng)的源代碼可以在 ./linux/fs 中找到。
文件系統(tǒng)層之下是緩沖區(qū)緩存,它為文件系統(tǒng)層提供了一個(gè)通用函數(shù)集(與具體文件系統(tǒng)無關(guān))。這個(gè)緩存層通過將數(shù)據(jù)保留一段時(shí)間(或者隨即預(yù)先讀取數(shù)據(jù)以便在需要是就可用)優(yōu)化了對物理設(shè)備的訪問。緩沖區(qū)緩存之下是設(shè)備驅(qū)動(dòng)程序,它實(shí)現(xiàn)了特定物理設(shè)備的接口。
??????因此,用戶和進(jìn)程不需要知道文件所在的文件系統(tǒng)類型,而只需要象使用 Ext2 ?文件系統(tǒng)中的文件一樣使用它們。
?
4. 設(shè)備驅(qū)動(dòng)程序
??????設(shè)備驅(qū)動(dòng)程序是 Linux ?內(nèi)核的主要部分。和操作系統(tǒng)的其它部分類似,設(shè)備驅(qū)動(dòng)程序運(yùn)行在高特權(quán)級的處理器環(huán)境中,從而可以直接對硬件進(jìn)行操作,但正因?yàn)槿绱?#xff0c;任何一個(gè)設(shè)備驅(qū)動(dòng)程序的錯(cuò)誤都可能導(dǎo)致操作系統(tǒng)的崩潰。設(shè)備驅(qū)動(dòng)程序?qū)嶋H控制操作系統(tǒng)和硬件設(shè)備之間的交互。設(shè)備驅(qū)動(dòng)程序提供一組操作系統(tǒng)可理解的抽象接口完成和操作系統(tǒng)之間的交互,而與硬件相關(guān)的具體操作細(xì)節(jié)由設(shè)備驅(qū)動(dòng)程序完成。一般而言,設(shè)備驅(qū)動(dòng)程序和設(shè)備的控制芯片有關(guān),例如,如果計(jì)算機(jī)硬盤是?SCSI ?硬盤,則需要使用 SCSI ?驅(qū)動(dòng)程序,而不是 IDE 驅(qū)動(dòng)程序。
5.網(wǎng)絡(luò)接口(NET) ??
???????提供了對各種網(wǎng)絡(luò)標(biāo)準(zhǔn)的存取和各種網(wǎng)絡(luò)硬件的支持。網(wǎng)絡(luò)接口可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)驅(qū)動(dòng)程序。網(wǎng)絡(luò)協(xié)議部分負(fù)責(zé)實(shí)現(xiàn)每一種可能的網(wǎng)絡(luò)傳輸協(xié)議。眾所周知,TCP/IP ?協(xié)議是 Internet ?的標(biāo)準(zhǔn)協(xié)議,同時(shí)也是事實(shí)上的工業(yè)標(biāo)準(zhǔn)。Linux ?的網(wǎng)絡(luò)實(shí)現(xiàn)支持 BSD 套接字,支持全部的TCP/IP協(xié)議。Linux內(nèi)核的網(wǎng)絡(luò)部分由BSD套接字、網(wǎng)絡(luò)協(xié)議層和網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序組成。網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序負(fù)責(zé)與硬件設(shè)備通訊,每一種可能的硬件設(shè)備都有相應(yīng)的設(shè)備驅(qū)動(dòng)程序。
?
2、?shell
shell是系統(tǒng)的用戶界面,提供了用戶與內(nèi)核進(jìn)行交互操作的一種接口。它接收用戶輸入的命令并把它送入內(nèi)核去執(zhí)行,是一個(gè)命令解釋器。另外,shell編程語言具有普通編程語言的很多特點(diǎn),用這種編程語言編寫的shell程序與其他應(yīng)用程序具有同樣的效果。
目前主要有下列版本的shell。
1.Bourne Shell:是貝爾實(shí)驗(yàn)室開發(fā)的。
2.BASH:是GNU的Bourne Again Shell,是GNU操作系統(tǒng)上默認(rèn)的shell,大部分linux的發(fā)行套件使用的都是這種shell。
3.Korn Shell:是對Bourne SHell的發(fā)展,在大部分內(nèi)容上與Bourne Shell兼容。
4.C Shell:是SUN公司Shell的BSD版本
?
3、?文件系統(tǒng)
Linux下面的文件類型主要有:
1) 普通文件:C語言元代碼、SHELL腳本、二進(jìn)制的可執(zhí)行文件等。分為純文本和二進(jìn)制。
2) 目錄文件:目錄,存儲(chǔ)文件的唯一地方。
3) 鏈接文件:指向同一個(gè)文件或目錄的的文件。
4) 設(shè)備文件:與系統(tǒng)外設(shè)相關(guān)的,通常在/dev下面。分為塊設(shè)備和字符設(shè)備。
5)管道(FIFO)文件 : ?提供進(jìn)程建通信的一種方式
6)套接字(socket) 文件: 該文件類型與網(wǎng)絡(luò)通信有關(guān)
?
可以通過ls –l, file, stat幾個(gè)命令來查看文件的類型等相關(guān)信息。
文件系統(tǒng)指文件存在的物理空間,linux系統(tǒng)中每個(gè)分區(qū)都是一個(gè)文件系統(tǒng),都有自己的目錄層次結(jié)構(gòu)。linux會(huì)將這些分屬不同分區(qū)的、單獨(dú)的文件系統(tǒng)按一定的方式形成一個(gè)系統(tǒng)的總的目錄層次結(jié)構(gòu)。一個(gè)操作系統(tǒng)的運(yùn)行離不開對文件的操作,因此必然要擁有并維護(hù)自己的文件系統(tǒng)。
文件系統(tǒng)類型:
????ext2 : 早期linux中常用的文件系統(tǒng)
????ext3 : ext2的升級版,帶日志功能
????RAMFS : 內(nèi)存文件系統(tǒng),速度很快
????NFS : 網(wǎng)絡(luò)文件系統(tǒng),由SUN發(fā)明,主要用于遠(yuǎn)程文件共享
????MS-DOS : MS-DOS文件系統(tǒng)
????VFAT : Windows 95/98 操作系統(tǒng)采用的文件系統(tǒng)
????FAT : Windows XP 操作系統(tǒng)采用的文件系統(tǒng)
????NTFS: Windows NT/XP 操作系統(tǒng)采用的文件系統(tǒng)
????HPFS : OS/2 操作系統(tǒng)采用的文件系統(tǒng)
????PROC : 虛擬的進(jìn)程文件系統(tǒng)
????ISO9660 : 大部分光盤所采用的文件系統(tǒng)
????ufsSun : OS 所采用的文件系統(tǒng)
????NCPFS : Novell 服務(wù)器所采用的文件系統(tǒng)
????SMBFS : Samba 的共享文件系統(tǒng)
????XFS : 由SGI開發(fā)的先進(jìn)的日志文件系統(tǒng),支持超大容量文件
????JFS :IBM的AIX使用的日志文件系統(tǒng)
????ReiserFS : 基于平衡樹結(jié)構(gòu)的文件系統(tǒng)
? ? udf: 可擦寫的數(shù)據(jù)光盤文件系統(tǒng)
?
文件系統(tǒng)特性
磁盤分區(qū)完畢后還需要進(jìn)行格式化(format),之后操作系統(tǒng)才能夠使用這個(gè)分區(qū)。 格式化的目的是能使操作系統(tǒng)可以使用的文件系統(tǒng)格式(即我們上面提到文件系統(tǒng)類型).
?
????????每種操作系統(tǒng)能夠使用的文件系統(tǒng)并不相同. 如windows 98 以前的微軟操作系統(tǒng)主要利用的文件系統(tǒng)是 FAT (或 FAT16),windows 2000 以后的版本有所謂的 NTFS 文件系統(tǒng),至于 Linux 的正統(tǒng)文件系統(tǒng)則為 Ext2 (Linux second extended file system, ext2fs)這一個(gè)。此外,在默認(rèn)的情況下,windows 操作系統(tǒng)是不會(huì)認(rèn)識(shí) Linux 的 Ext2 的。
?
??????傳統(tǒng)的磁盤與文件系統(tǒng)之應(yīng)用中,一個(gè)分區(qū)就是只能夠被格式化成為一個(gè)文件系統(tǒng),所以我們可以說一個(gè) filesystem 就是一個(gè) partition。但是由于新技術(shù)的利用,例如我們常聽到的LVM與軟件磁盤陣列(software raid), 這些技術(shù)可以將一個(gè)分區(qū)格式化為多個(gè)文件系統(tǒng)(例如LVM),也能夠?qū)⒍鄠€(gè)分區(qū)合成一個(gè)文件系統(tǒng)(LVM, RAID)! 所以說,目前我們在格式化時(shí)已經(jīng)不再說成針對 partition 來格式化了, 通常我們可以稱呼一個(gè)可被掛載的數(shù)據(jù)為一個(gè)文件系統(tǒng)而不是一個(gè)分區(qū)喔!
?
那么文件系統(tǒng)是如何運(yùn)行的呢?這與操作系統(tǒng)的文件數(shù)據(jù)有關(guān)。較新的操作系統(tǒng)的文件數(shù)據(jù)除了文件實(shí)際內(nèi)容外, 通常含有非常多的屬性,例如 Linux 操作系統(tǒng)的文件權(quán)限(rwx)與文件屬性(擁有者、群組、時(shí)間參數(shù)等)。 文件系統(tǒng)通常會(huì)將這兩部份的數(shù)據(jù)分別存放在不同的區(qū)塊,權(quán)限與屬性放置到 inode 中,至于實(shí)際數(shù)據(jù)則放置到 data block 區(qū)塊中。 另外,還有一個(gè)超級區(qū)塊 (superblock) 會(huì)記錄整個(gè)文件系統(tǒng)的整體信息,包括 inode 與 block 的總量、使用量、剩余量等。
?
掛載文件系統(tǒng)
linux系統(tǒng)中每個(gè)分區(qū)都是一個(gè)文件系統(tǒng),都有自己的目錄層次結(jié)構(gòu)。linux會(huì)將這些分屬不同分區(qū)的、單獨(dú)的文件系統(tǒng)按一定的方式形成一個(gè)系統(tǒng)的總的目錄層次結(jié)構(gòu)。這里所說的“按一定方式”就是指的掛載。將一個(gè)文件系統(tǒng)的頂層目錄掛到另一個(gè)文件系統(tǒng)的子目錄上,使它們成為一個(gè)整體,稱為掛載。把該子目錄稱為掛載點(diǎn).例如要讀取硬盤中的一個(gè)格式化好的分區(qū)、光盤或軟件等設(shè)備時(shí),必須先把這些設(shè)備對應(yīng)到某個(gè)目錄上,而這個(gè)目錄就稱為“掛載點(diǎn)(mount point)”,這樣才可以讀取這些設(shè)備。 掛載后將物理分區(qū)細(xì)節(jié)屏蔽掉,用戶只有統(tǒng)一的邏輯概念。所有的東西都是文件。
? ? ? ??注意:1、掛載點(diǎn)必須是一個(gè)目錄。
???2、一個(gè)分區(qū)掛載在一個(gè)已存在的目錄上,這個(gè)目錄可以不為空,但掛載后這個(gè)目錄下以前的內(nèi)容將不可用。
???????對于其他操作系統(tǒng)建立的文件系統(tǒng)的掛載也是這樣。但是需要理解的是:光盤、軟盤、其他操作系統(tǒng)使用的文件系統(tǒng)的格式與linux使用的文件系統(tǒng)格式是不一樣的。光盤是ISO9660;軟盤是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、 NTFS。掛載前要了解linux是否支持所要掛載的文件系統(tǒng)格式。
掛載時(shí)使用mount命令,其格式:mount [-參數(shù)] [設(shè)備名稱] [掛載點(diǎn)]
?
1. 掛載windows的文件系統(tǒng):
1)首先我們使用sudo fdisk -l查看掛載的設(shè)備,例如最下面有:/dev/hda5
2)mkdir創(chuàng)建一個(gè)目錄,這里的目錄是作為掛在目錄,就是你要把E盤掛到這個(gè)目錄下:mk /mnt/winc
3)windows和linux使用的不是一個(gè)文件系統(tǒng),一般情況下linux不掛載windows文件系統(tǒng),所以要你手動(dòng)mount:
????# mount -t vfat /dev/hda5 /mnt/winc ?( -t vfat指出這里的文件系統(tǒng)fat32)
????現(xiàn)在就可以進(jìn)入/mnt/winc等目錄讀寫這些文件了。
?2.掛載光盤:# mk /mnt/cdrom
??????????# mount -t iso9660 /dev/cdrom /mnt/cdrom (關(guān)盤的名字一般都是cdrom,這條命令一般都通用)
3.虛擬機(jī)共享文件夾:例如在VirtualBox下,主機(jī)是Windows,Ubuntu是Guest。共分三步:
??????1). 首先要安裝虛擬電腦工具包:在VirtualBox的菜單里選擇"設(shè)備"->"安裝虛擬電腦工具包",你會(huì)發(fā)現(xiàn)在Ubuntu桌面上多出一個(gè)光盤圖標(biāo),這張光盤默認(rèn)被自動(dòng)加載到了文件夾/media/cdom0,而且/cdrom自動(dòng)指向這個(gè)文件夾。默認(rèn)設(shè)置下文件管理器會(huì)自動(dòng)打開這張光盤,可以看到里面有個(gè)"VBoxLinuxAdditions.run"文件。打開一個(gè)命令行終端,依次輸入"cd /cdrom"和"sudo sh ./VBoxLinuxAdditions.run",不含雙引號(hào),開始安裝工具包。安裝完畢,會(huì)用英文提示要重啟Ubuntu,建議立刻重啟。重啟后,比較明顯的變化是鼠標(biāo)是共享模式,并且剪貼板也和Windows共享了。如果有這些變化,說明虛擬電腦工具包已經(jīng)裝成功。
??????2). 下一步設(shè)置共享文件夾。
?????在共享文件夾設(shè)置窗口中,單擊右側(cè)的"添加一個(gè)共享文件夾",路徑選擇你想要共享的Windows文件夾,共享名任取一個(gè)自己喜歡的,比如"myshare",選項(xiàng)read-only是指是否只允許ubuntu讀這個(gè)文件夾,請根據(jù)需要選擇這個(gè)選項(xiàng)。
??????3). 在ubuntu下掛載這個(gè)共享文件夾:sudo mount -t vboxsf myshare /media/share
??????其中"myshare"是之前取的共享文件夾的名字,"/media/share"是要掛載到的目標(biāo)文件.
?
4、?linux 應(yīng)用
標(biāo)準(zhǔn)的Linux系統(tǒng)一般都有一套都有稱為應(yīng)用程序的程序集,它包括文本編輯器、編程語言、X Window、辦公套件、Internet工具和數(shù)據(jù)庫等。
Linux 文件基本屬性
Linux系統(tǒng)是一種典型的多用戶系統(tǒng),不同的用戶處于不同的地位,擁有不同的權(quán)限。為了保護(hù)系統(tǒng)的安全性,Linux系統(tǒng)對不同的用戶訪問同一文件(包括目錄文件)的權(quán)限做了不同的規(guī)定。
在Linux中我們可以使用ll或者ls –l命令來顯示一個(gè)文件的屬性以及文件所屬的用戶和組
?
實(shí)例中,第一行第一個(gè)屬性用"d"表示。"d"在Linux中代表該文件是一個(gè)目錄文件。
在Linux中第一個(gè)字符代表這個(gè)文件是目錄、文件或鏈接文件等等。
當(dāng)?shù)谝恍械谝粋€(gè)屬性為[ d ]則是目錄
當(dāng)?shù)谝恍械谝粋€(gè)屬性為[ - ]則是文件;
若第一行第一個(gè)屬性是[ l ]則表示為鏈接文檔(link file);
若第一行第一個(gè)屬性是[ b ]則表示為裝置文件里面的可供儲(chǔ)存的接口設(shè)備(可隨機(jī)存取裝置);
若第一行第一個(gè)屬性是[ c ]則表示為裝置文件里面的串行端口設(shè)備,例如鍵盤、鼠標(biāo)(一次性讀取裝置)。
接下來的字符中,以三個(gè)為一組,且均為『rwx』 的三個(gè)參數(shù)的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執(zhí)行(execute)。 要注意的是,這三個(gè)權(quán)限的位置不會(huì)改變,如果沒有權(quán)限,就會(huì)出現(xiàn)減號(hào)[ - ]而已。
每個(gè)文件的屬性由左邊第一部分的10個(gè)字符來確定。
從左至右用0-9這些數(shù)字來表示。
第0位確定文件類型,第1-3位確定屬主(該文件的所有者)擁有該文件的權(quán)限。
第4-6位確定屬組(所有者的同組用戶)擁有該文件的權(quán)限,第7-9位確定其他用戶擁有該文件的權(quán)限。
其中,第1、4、7位表示讀權(quán)限,如果用"r"字符表示,則有讀權(quán)限,如果用"-"字符表示,則沒有讀權(quán)限;
?
第2、5、8位表示寫權(quán)限,如果用"w"字符表示,則有寫權(quán)限,如果用"-"字符表示沒有寫權(quán)限;第3、6、9位表示可執(zhí)行權(quán)限,如果用"x"字符表示,則有執(zhí)行權(quán)限,如果用"-"字符表示,則沒有執(zhí)行權(quán)限。
?
Linux文件屬主和屬組
對于文件來說,它都有一個(gè)特定的所有者,也就是對該文件具有所有權(quán)的用戶。
同時(shí),在Linux系統(tǒng)中,用戶是按組分類的,一個(gè)用戶屬于一個(gè)或多個(gè)組。
文件所有者以外的用戶又可以分為文件所有者的同組用戶和其他用戶。
因此,Linux系統(tǒng)按文件所有者、文件所有者同組用戶和其他用戶來規(guī)定了不同的文件訪問權(quán)限。
在以上實(shí)例中,mysql 文件是一個(gè)目錄文件,屬主和屬組都為 mysql,屬主有可讀、可寫、可執(zhí)行的權(quán)限;與屬主同組的其他用戶有可讀和可執(zhí)行的權(quán)限;其他用戶也有可讀和可執(zhí)行的權(quán)限。
對于?root 用戶來說,一般情況下,文件的權(quán)限對其不起作用。
?
更改文件屬性
1、chgrp:更改文件屬組
語法:
chgrp [-R] 屬組名 文件名
參數(shù)選項(xiàng)
-R:遞歸更改文件屬組,就是在更改某個(gè)目錄文件的屬組時(shí),如果加上-R的參數(shù),那么該目錄下的所有文件的屬組都會(huì)更改。
?
2、chown:更改文件屬主,也可以同時(shí)更改文件屬組
語法:
chown [–R] 屬主名 文件名
chown [-R] 屬主名:屬組名 文件名
進(jìn)入?/root 目錄(~)將install.log的擁有者改為bin這個(gè)賬號(hào):
?
[root@www ~] cd ~
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r-- ?1 bin ?users 68495 Jun 25 08:53 install.log
將install.log的擁有者與群組改回為root:
?
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r-- ?1 root root 68495 Jun 25 08:53 install.log
?
3、chmod:更改文件9個(gè)屬性
Linux文件屬性有兩種設(shè)置方法,一種是數(shù)字,一種是符號(hào)。
Linux文件的基本權(quán)限就有九個(gè),分別是owner/group/others三種身份各有自己的read/write/execute權(quán)限。
?
先復(fù)習(xí)一下剛剛上面提到的數(shù)據(jù):文件的權(quán)限字符為:『-rwxrwxrwx』, 這九個(gè)權(quán)限是三個(gè)三個(gè)一組的!其中,我們可以使用數(shù)字來代表各個(gè)權(quán)限,各權(quán)限的分?jǐn)?shù)對照表如下:
?
r:4
w:2
x:1
每種身份(owner/group/others)各自的三個(gè)權(quán)限(r/w/x)分?jǐn)?shù)是需要累加的,例如當(dāng)權(quán)限為: [-rwxrwx---] 分?jǐn)?shù)則是:
?
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
所以等一下我們設(shè)定權(quán)限的變更時(shí),該文件的權(quán)限數(shù)字就是770啦!變更權(quán)限的指令chmod的語法是這樣的:
?chmod [-R] xyz 文件或目錄
?
選項(xiàng)與參數(shù):
xyz : 就是剛剛提到的數(shù)字類型的權(quán)限屬性,為 rwx 屬性數(shù)值的相加。
-R : 進(jìn)行遞歸(recursive)的持續(xù)變更,亦即連同次目錄下的所有文件都會(huì)變更
舉例來說,如果要將.bashrc這個(gè)文件所有的權(quán)限都設(shè)定啟用,那么命令如下:
?
先將ls命令做一個(gè)總結(jié):
-a:顯示所有檔案及目錄;
-A:顯示除影藏文件“.”和“..”以外的所有文件列表;
-C:多列顯示輸出結(jié)果。這是默認(rèn)選項(xiàng);
-l:與“-C”選項(xiàng)功能相反,所有輸出信息用單列格式輸出,不輸出為多列;(一般-al合并使用)
-F:在每個(gè)輸出項(xiàng)后追加文件的類型標(biāo)識(shí)符,具體含義:“*”表示具有可執(zhí)行權(quán)限的普通文件,“/”表示目錄,“@”表示符號(hào)鏈接,“|”表示命令管道FIFO,“=”表示sockets套接字。當(dāng)文件為普通文件時(shí),不輸出任何標(biāo)識(shí)符;
-b:將文件中的不可輸出的字符以反斜線“”加字符編碼的方式輸出;
-c:與“-lt”選項(xiàng)連用時(shí),按照文件狀態(tài)時(shí)間排序輸出目錄內(nèi)容,排序的依據(jù)是文件的索引節(jié)點(diǎn)中的ctime字段。與“-l”選項(xiàng)連用時(shí),則排序的一句是文件的狀態(tài)改變時(shí)間;
-d:僅顯示目錄名,而不顯示目錄下的內(nèi)容列表。顯示符號(hào)鏈接文件本身,而不顯示其所指向的目錄列表;
-f:此參數(shù)的效果和同時(shí)指定“aU”參數(shù)相同,并關(guān)閉“l(fā)st”參數(shù)的效果;
-i:顯示文件索引節(jié)點(diǎn)號(hào)(inode)。一個(gè)索引節(jié)點(diǎn)代表一個(gè)文件;
-type:與“-F”選項(xiàng)的功能相同,但是不顯示“*”;
-k:以KB(千字節(jié))為單位顯示文件大小;
-l:以長格式顯示目錄下的內(nèi)容列表。輸出的信息從左到右依次包括文件名,文件類型、權(quán)限模式、硬連接數(shù)、所有者、組、文件大小和文件的最后修改時(shí)間等;
-m:用“,”號(hào)區(qū)隔每個(gè)文件和目錄的名稱;
-n:以用戶識(shí)別碼和群組識(shí)別碼替代其名稱;
-r:以文件名反序排列并輸出目錄內(nèi)容列表;
-s:顯示文件和目錄的大小,以區(qū)塊為單位;
-t:用文件和目錄的更改時(shí)間排序;
-L:如果遇到性質(zhì)為符號(hào)鏈接的文件或目錄,直接列出該鏈接所指向的原始文件或目錄;
-R:遞歸處理,將指定目錄下的所有文件及子目錄一并處理;
--full-time:列出完整的日期與時(shí)間;
--color[=WHEN]:使用不同的顏色高亮顯示不同類型的。
?
?
[root@www ~]# ls -al .bashrc
-rw-r--r-- ?1 root root 395 Jul ?4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx ?1 root root 395 Jul ?4 11:45 .bashrc
那如果要將權(quán)限變成?-rwxr-xr-- 呢?那么權(quán)限的分?jǐn)?shù)就成為 [4+2+1][4+0+1][4+0+0]=754。
?
符號(hào)類型改變文件權(quán)限
還有一個(gè)改變權(quán)限的方法呦!從之前的介紹中我們可以發(fā)現(xiàn),基本上就九個(gè)權(quán)限分別是(1)user (2)group (3)others三種身份啦! 那么我們就可以藉由u, g, o來代表三種身份的權(quán)限!
?
此外,?a 則代表 all 亦即全部的身份!那么讀寫的權(quán)限就可以寫成r, w, x!
?
如果我們需要將文件權(quán)限設(shè)置為?-rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 來設(shè)定:
?
# ?touch test1 ???// 創(chuàng)建 test1 文件
# ls -al test1 ???// 查看 test1 默認(rèn)權(quán)限
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
# chmod u=rwx,g=rx,o=r ?test1 ???// 修改 test1 權(quán)限
# ls -al test1
-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1
而如果是要將權(quán)限去掉而不改變其他已存在的權(quán)限呢?例如要拿掉全部人的可執(zhí)行權(quán)限,則:
?
# ?chmod ?a-x test1
# ls -al test1
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
?
Linux 文件與目錄管理
我們知道Linux的目錄結(jié)構(gòu)為樹狀結(jié)構(gòu),最頂級的目錄為根目錄 /。
?
其他目錄通過掛載可以將它們添加到樹中,通過解除掛載可以移除它們。
?
在開始本教程前我們需要先知道什么是絕對路徑與相對路徑。
?
絕對路徑:
路徑的寫法,由根目錄?/ 寫起,例如: /usr/share/doc 這個(gè)目錄。
相對路徑:
路徑的寫法,不是由?/ 寫起,例如由 /usr/share/doc 要到 /usr/share/man 底下時(shí),可以寫成: cd ../man 這就是相對路徑的寫法啦!
?
處理目錄的常用命令
接下來我們就來看幾個(gè)常見的處理目錄的命令吧:
?
ls: 列出目錄
cd:切換目錄
pwd:顯示目前的目錄
mkdir:創(chuàng)建一個(gè)新的目錄
rmdir:刪除一個(gè)空的目錄(文件必須為空)
cp: 復(fù)制文件或目錄
rm: 移除文件或目錄(把一個(gè)文件全部刪除)
你可以使用?man [命令] 來查看各個(gè)命令的使用文檔,如 :man cp。
?
ls (列出目錄)
在Linux系統(tǒng)當(dāng)中, ls 命令可能是最常被運(yùn)行的。
?
語法:
?
[root@www ~]# ls [-aAdfFhilnrRSt] 目錄名稱
[root@www ~]# ls [--color={never,auto,always}] 目錄名稱
[root@www ~]# ls [--full-time] 目錄名稱
選項(xiàng)與參數(shù):
?
-a :全部的文件,連同隱藏檔( 開頭為 . 的文件) 一起列出來(常用)
-d :僅列出目錄本身,而不是列出目錄內(nèi)的文件數(shù)據(jù)(常用)
-l :長數(shù)據(jù)串列出,包含文件的屬性與權(quán)限等等數(shù)據(jù);(常用)
將家目錄下的所有文件列出來(含屬性與隱藏檔)
?
[root@www ~]# ls -al ~
?
cd (切換目錄)
cd是Change Directory的縮寫,這是用來變換工作目錄的命令。
?
語法:
?
?cd [相對路徑或絕對路徑]
#使用 mkdir 命令創(chuàng)建 runoob 目錄
[root@www ~]# mkdir runoob
?
#使用絕對路徑切換到 runoob 目錄
[root@www ~]# cd /root/runoob/
?
#使用相對路徑切換到 runoob 目錄
[root@www ~]# cd ./runoob/
?
# 表示回到自己的家目錄,亦即是 /root 這個(gè)目錄
[root@www runoob]# cd ~
?
# 表示去到目前的上一級目錄,亦即是 /root 的上一級目錄的意思;
[root@www ~]# cd ..
接下來大家多操作幾次應(yīng)該就可以很好的理解?cd 命令的。
?
pwd (顯示目前所在的目錄)
pwd 是 Print Working Directory 的縮寫,也就是顯示目前所在目錄的命令。
?
[root@www ~]# pwd [-P]
選項(xiàng)與參數(shù):
?
-P :顯示出確實(shí)的路徑,而非使用連結(jié) (link) 路徑。
實(shí)例:單純顯示出目前的工作目錄:
?
[root@www ~]# pwd
/root ??<== 顯示出目錄啦~
實(shí)例顯示出實(shí)際的工作目錄,而非連結(jié)檔本身的目錄名而已。
?
[root@www ~]# cd /var/mail ??<==注意,/var/mail是一個(gè)連結(jié)檔
[root@www mail]# pwd
/var/mail ????????<==列出目前的工作目錄
[root@www mail]# pwd -P
/var/spool/mail ??<==怎么回事?有沒有加 -P 差很多~
[root@www mail]# ls -ld /var/mail
lrwxrwxrwx 1 root root 10 Sep ?4 17:54 /var/mail -> spool/mail
# 看到這里應(yīng)該知道為啥了吧?因?yàn)?/var/mail 是連結(jié)檔,連結(jié)到 /var/spool/mail
# 所以,加上 pwd -P 的選項(xiàng)后,會(huì)不以連結(jié)檔的數(shù)據(jù)顯示,而是顯示正確的完整路徑啊!
?
mkdir (創(chuàng)建新目錄)
如果想要?jiǎng)?chuàng)建新的目錄的話,那么就使用mkdir (make directory)吧。
?
語法:
?
mkdir [-mp] 目錄名稱
選項(xiàng)與參數(shù):
?
-m :配置文件的權(quán)限喔!直接配置,不需要看默認(rèn)權(quán)限 (umask) 的臉色~
-p :幫助你直接將所需要的目錄(包含上一級目錄)遞歸創(chuàng)建起來!
實(shí)例:請到/tmp底下嘗試創(chuàng)建數(shù)個(gè)新目錄看看:
?
[root@www ~]# cd /tmp
[root@www tmp]# mkdir test ???<==創(chuàng)建一名為 test 的新目錄
例題:[root@www tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory `test1/test2/test3/test4':
No such file or directory ??????<== 沒辦法直接創(chuàng)建此目錄啊!
[root@www tmp]# mkdir -p test1/test2/test3/test4
加了這個(gè)?-p 的選項(xiàng),可以自行幫你創(chuàng)建多層目錄!
?
實(shí)例:創(chuàng)建權(quán)限為?rwx--x--x 的目錄。
?
[root@www tmp]# mkdir -m 711 test2
[root@www tmp]# ls -l
drwxr-xr-x ?3 root ?root 4096 Jul 18 12:50 test
drwxr-xr-x ?3 root ?root 4096 Jul 18 12:53 test1
drwx--x--x ?2 root ?root 4096 Jul 18 12:54 test2
上面的權(quán)限部分,如果沒有加上?-m 來強(qiáng)制配置屬性,系統(tǒng)會(huì)使用默認(rèn)屬性。
?
如果我們使用?-m ,如上例我們給予 -m 711 來給予新的目錄 drwx--x--x 的權(quán)限。
?
rmdir (刪除空的目錄)
語法:
?
?rmdir [-p] 目錄名稱
選項(xiàng)與參數(shù):
?
-p :連同上一級『空的』目錄也一起刪除
刪除?runoob 目錄
?
[root@www tmp]# rmdir runoob/
將?mkdir 實(shí)例中創(chuàng)建的目錄(/tmp 底下)刪除掉!
?
[root@www tmp]# ls -l ??<==看看有多少目錄存在?
drwxr-xr-x ?3 root ?root 4096 Jul 18 12:50 test
drwxr-xr-x ?3 root ?root 4096 Jul 18 12:53 test1
drwx--x--x ?2 root ?root 4096 Jul 18 12:54 test2
[root@www tmp]# rmdir test ??<==可直接刪除掉,沒問題
[root@www tmp]# rmdir test1 ?<==因?yàn)樯杏袃?nèi)容,所以無法刪除!
rmdir: `test1': Directory not empty
[root@www tmp]# rmdir -p test1/test2/test3/test4
[root@www tmp]# ls -l ???????<==您看看,底下的輸出中test與test1不見了!
drwx--x--x ?2 root ?root 4096 Jul 18 12:54 test2
利用?-p 這個(gè)選項(xiàng),立刻就可以將 test1/test2/test3/test4 一次刪除。
?
不過要注意的是,這個(gè)?rmdir 僅能刪除空的目錄,你可以使用 rm 命令來刪除非空目錄。
?
cp (復(fù)制文件或目錄)
cp 即拷貝文件和目錄。
?
語法:
?
[root@www ~]# cp [-adfilprsu] 來源檔(source) 目標(biāo)檔(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory
選項(xiàng)與參數(shù):
?
-a:相當(dāng)於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)
?
-d:若來源檔為連結(jié)檔的屬性(link file),則復(fù)制連結(jié)檔屬性而非文件本身;
?
-f:為強(qiáng)制(force)的意思,若目標(biāo)文件已經(jīng)存在且無法開啟,則移除后再嘗試一次;
?
-i:若目標(biāo)檔(destination)已經(jīng)存在時(shí),在覆蓋時(shí)會(huì)先詢問動(dòng)作的進(jìn)行(常用)
?
-l:進(jìn)行硬式連結(jié)(hard link)的連結(jié)檔創(chuàng)建,而非復(fù)制文件本身;
?
-p:連同文件的屬性一起復(fù)制過去,而非使用默認(rèn)屬性(備份常用);
?
-r:遞歸持續(xù)復(fù)制,用於目錄的復(fù)制行為;(常用)
?
-s:復(fù)制成為符號(hào)連結(jié)檔 (symbolic link),亦即『捷徑』文件;
?
-u:若 destination 比 source 舊才升級 destination !
?
用?root 身份,將 root 目錄下的 .bashrc 復(fù)制到 /tmp 下,并命名為 bashrc
?
[root@www ~]# cp ~/.bashrc /tmp/bashrc
[root@www ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n ?<==n不覆蓋,y為覆蓋
?
rm (移除文件或目錄)
語法:
?rm [-fir] 文件或目錄
選項(xiàng)與參數(shù):
?
-f :就是 force 的意思,忽略不存在的文件,不會(huì)出現(xiàn)警告信息;
-i :互動(dòng)模式,在刪除前會(huì)詢問使用者是否動(dòng)作
-r :遞歸刪除啊!最常用在目錄的刪除了!這是非常危險(xiǎn)的選項(xiàng)!!!
將剛剛在?cp 的實(shí)例中創(chuàng)建的 bashrc 刪除掉!
?
[root@www tmp]# rm -i bashrc
rm: remove regular file `bashrc'? y
如果加上?-i 的選項(xiàng)就會(huì)主動(dòng)詢問喔,避免你刪除到錯(cuò)誤的檔名!
?
mv (移動(dòng)文件與目錄,或修改名稱)
語法:
[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 .... directory
選項(xiàng)與參數(shù):
?
-f :force 強(qiáng)制的意思,如果目標(biāo)文件已經(jīng)存在,不會(huì)詢問而直接覆蓋;
-i :若目標(biāo)文件 (destination) 已經(jīng)存在時(shí),就會(huì)詢問是否覆蓋!
-u :若目標(biāo)文件已經(jīng)存在,且 source 比較新,才會(huì)升級 (update)
復(fù)制一文件,創(chuàng)建一目錄,將文件移動(dòng)到目錄中
?
[root@www ~]# cd /tmp
[root@www tmp]# cp ~/.bashrc bashrc
[root@www tmp]# mkdir mvtest
[root@www tmp]# mv bashrc mvtest
將某個(gè)文件移動(dòng)到某個(gè)目錄去,就是這樣做!
?
將剛剛的目錄名稱更名為?mvtest2
?
[root@www tmp]# mv mvtest mvtest2
轉(zhuǎn)載于:https://www.cnblogs.com/wsxcode/p/9572872.html
總結(jié)
以上是生活随笔為你收集整理的(第五篇)Linux操作系统基本结构介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP 的 Phar 包原来性能这么强!
- 下一篇: 深入理解 Unix / Linux 命令