免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

教你看懂 Linux 系統結構

2021-02-25    分類: 網站建設

Linux系統一般有4個主要部分:

內核、shell、文件系統和應用程序。內核、shell和文件系統一起形成了基本的操作系統結構,它們使得用戶可以運行程序、管理文件并使用系統。部分層次結構如圖1-1所示。

在 VFS 上面,是對諸如 open、close、read 和 write 之類的函數的一個通用 API 抽象。在 VFS 下面是文件系統抽象,它定義了上層函數的實現方式。它們是給定文件系統(超過 50 個)的插件。文件系統的源代碼可以在 ./linux/fs 中找到。

文件系統層之下是緩沖區緩存,它為文件系統層提供了一個通用函數集(與具體文件系統無關)。這個緩存層通過將數據保留一段時間(或者隨即預先讀取數據以便在需要是就可用)優化了對物理設備的訪問。緩沖區緩存之下是設備驅動程序,它實現了特定物理設備的接口。

因此,用戶和進程不需要知道文件所在的文件系統類型,而只需要象使用 Ext2 文件系統中的文件一樣使用它們。

5、設備驅動程序

設備驅動程序是 Linux 內核的主要部分。和操作系統的其它部分類似,設備驅動程序運行在高特權級的處理器環境中,從而可以直接對硬件進行操作,但正因為如此,任何一個設備驅動程序的錯誤都可能導致操作系統的崩潰。設備驅動程序實際控制操作系統和硬件設備之間的交互。

設備驅動程序提供一組操作系統可理解的抽象接口完成和操作系統之間的交互,而與硬件相關的具體操作細節由設備驅動程序完成。一般而言,設備驅動程序和設備的控制芯片有關,例如,如果計算機硬盤是 SCSI 硬盤,則需要使用 SCSI 驅動程序,而不是 IDE 驅動程序。

6、網絡接口(NET)

提供了對各種網絡標準的存取和各種網絡硬件的支持。網絡接口可分為網絡協議和網絡驅動程序。網絡協議部分負責實現每一種可能的網絡傳輸協議。眾所周知,TCP/IP 協議是 Internet 的標準協議,同時也是事實上的工業標準。

Linux 的網絡實現支持 BSD 套接字,支持全部的TCP/IP協議。Linux內核的網絡部分由BSD套接字、網絡協議層和網絡設備驅動程序組成。網絡設備驅動程序負責與硬件設備通訊,每一種可能的硬件設備都有相應的設備驅動程序。

7、Linux shell

shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。它接收用戶輸入的命令并把它送入內核去執行,是一個命令解釋器。另外,shell編程語言具有普通編程語言的很多特點,用這種編程語言編寫的shell程序與其他應用程序具有同樣的效果。

目前主要有下列版本的shell。

1.Bourne Shell:是貝爾實驗室開發的。

2.BASH:是GNU的Bourne Again Shell,是GNU操作系統上默認的shell,大部分linux的發行套件使用的都是這種shell。

3.Korn Shell:是對Bourne SHell的發展,在大部分內容上與Bourne Shell兼容。

4.C Shell:是SUN公司Shell的BSD版本。

8、Linux 文件系統

文件系統是文件存放在磁盤等存儲設備上的組織方法。Linux系統能支持多種目前流行的文件系統,如EXT2、 EXT3、 FAT、 FAT32、 VFAT和ISO9660。

8.1 文件類型

Linux下面的文件類型主要有:

1) 普通文件:C語言元代碼、SHELL腳本、二進制的可執行文件等。分為純文本和二進制。

2) 目錄文件:目錄,存儲文件的唯一地方。

3) 鏈接文件:指向同一個文件或目錄的的文件。

4) 設備文件:與系統外設相關的,通常在/dev下面。分為塊設備和字符設備。

5)管道(FIFO)文件 : 提供進程建通信的一種方式

6)套接字(socket) 文件: 該文件類型與網絡通信有關

可以通過ls –l, file, stat幾個命令來查看文件的類型等相關信息。

8.2 Linux目錄

文件結構是文件存放在磁盤等存貯設備上的組織方法。主要體現在對文件和目錄的組織上。

目錄提供了管理文件的一個方便而有效的途徑。

Linux使用標準的目錄結構,在安裝的時候,安裝程序就已經為用戶創建了文件系統和完整而固定的目錄組成形式,并指定了每個目錄的作用和其中的文件類型。

完整的目錄樹可劃分為小的部分,這些小部分又可以單獨存放在自己的磁盤或分區上。這樣,相對穩定的部分和經常變化的部分可單獨存放在不同的分區中,從而方便備份或系統管理。目錄樹的主要部分有 root、/usr、/var、/home 等(圖2) 。這樣的布局可方便在 Linux 計算機之間共享文件系統的某些部分。

文件與IO: 每個進程在PCB(Process Control Block)中都保存著一份文件描述符表,文件描述符就是這個表的索引,每個表項都有一個指向已打開文件的指針,現在我們明確一下:已打開的文件在內核中用file結構體表示,文件描述符表中的指針指向file結構體。

在file結構體中維護File Status Flag(file結構體的成員f_flags)和當前讀寫位置(file結構體的成員f_pos)。在上圖中,進程1和進程2都打開同一文件,但是對應不同的file結構體,因此可以有不同的File Status Flag和讀寫位置。file結構體中比較重要的成員還有f_count,表示引用計數(Reference Count),后面我們會講到,dup、fork等系統調用會導致多個文件描述符指向同一個file結構體,例如有fd1和fd2都引用同一個file結構體,那么它的引用計數就是2,當close(fd1)時并不會釋放file結構體,而只是把引用計數減到1,如果再close(fd2),引用計數就會減到0同時釋放file結構體,這才真的關閉了文件。

每個file結構體都指向一個file_operations結構體,這個結構體的成員都是函數指針,指向實現各種文件操作的內核函數。比如在用戶程序中read一個文件描述符,read通過系統調用進入內核,然后找到這個文件描述符所指向的file結構體,找到file結構體所指向的file_operations結構體,調用它的read成員所指向的內核函數以完成用戶請求。在用戶程序中調用lseek、read、write、ioctl、open等函數,最終都由內核調用file_operations的各成員所指向的內核函數完成用戶請求。

file_operations結構體中的release成員用于完成用戶程序的close請求,之所以叫release而不叫close是因為它不一定真的關閉文件,而是減少引用計數,只有引用計數減到0才關閉文件。對于同一個文件系統上打開的常規文件來說,read、write等文件操作的步驟和方法應該是一樣的,調用的函數應該是相同的,所以圖中的三個打開文件的file結構體指向同一個file_operations結構體。如果打開一個字符設備文件,那么它的read、write操作肯定和常規文件不一樣,不是讀寫磁盤的數據塊而是讀寫硬件設備,所以file結構體應該指向不同的file_operations結構體,其中的各種文件操作函數由該設備的驅動程序實現。

每個file結構體都有一個指向dentry結構體的指針,“dentry”是directory entry(目錄項)的縮寫。我們傳給open、stat等函數的參數的是一個路徑,例如/home/akaedu/a,需要根據路徑找到文件的inode。為了減少讀盤次數,內核緩存了目錄的樹狀結構,稱為dentry cache,其中每個節點是一個dentry結構體,只要沿著路徑各部分的dentry搜索即可,從根目錄/找到home目錄,然后找到akaedu目錄,然后找到文件a。dentry cache只保存最近訪問過的目錄項,如果要找的目錄項在cache中沒有,就要從磁盤讀到內存中。

每個dentry結構體都有一個指針指向inode結構體。inode結構體保存著從磁盤inode讀上來的信息。在上圖的例子中,有兩個dentry,分別表示/home/akaedu/a和/home/akaedu/b,它們都指向同一個inode,說明這兩個文件互為硬鏈接。inode結構體中保存著從磁盤分區的inode讀上來信息,例如所有者、文件大小、文件類型和權限位等。每個inode結構體都有一個指向inode_operations結構體的指針,后者也是一組函數指針指向一些完成文件目錄操作的內核函數。

和file_operations不同,inode_operations所指向的不是針對某一個文件進行操作的函數,而是影響文件和目錄布局的函數,例如添加刪除文件和目錄、跟蹤符號鏈接等等,屬于同一文件系統的各inode結構體可以指向同一個inode_operations結構體。

inode結構體有一個指向super_block結構體的指針。super_block結構體保存著從磁盤分區的超級塊讀上來的信息,例如文件系統類型、塊大小等。super_block結構體的s_root成員是一個指向dentry的指針,表示這個文件系統的根目錄被mount到哪里,在上圖的例子中這個分區被mount到/home目錄下。

file、dentry、inode、super_block這幾個結構體組成了VFS的核心概念。對于ext2文件系統來說,在磁盤存儲布局上也有inode和超級塊的概念,所以很容易和VFS中的概念建立對應關系。而另外一些文件系統格式來自非UNIX系統(例如Windows的FAT32、NTFS),可能沒有inode或超級塊這樣的概念,但為了能mount到Linux系統,也只好在驅動程序中硬湊一下,在Linux下看FAT32和NTFS分區會發現權限位是錯的,所有文件都是rwxrwxrwx,因為它們本來就沒有inode和權限位的概念,這是硬湊出來的。

8.6 掛載文件系統

linux系統中每個分區都是一個文件系統,都有自己的目錄層次結構。linux會將這些分屬不同分區的、單獨的文件系統按一定的方式形成一個系統的總的目錄層次結構。這里所說的“按一定方式”就是指的掛載。

將一個文件系統的頂層目錄掛到另一個文件系統的子目錄上,使它們成為一個整體,稱為掛載。把該子目錄稱為掛載點.

例如要讀取硬盤中的一個格式化好的分區、光盤或軟件等設備時,必須先把這些設備對應到某個目錄上,而這個目錄就稱為“掛載點(mount point)”,這樣才可以讀取這些設備。 掛載后將物理分區細節屏蔽掉,用戶只有統一的邏輯概念。所有的東西都是文件。

注意:1、掛載點必須是一個目錄。

2、一個分區掛載在一個已存在的目錄上,這個目錄可以不為空,但掛載后這個目錄下以前的內容將不可用。

對于其他操作系統建立的文件系統的掛載也是這樣。但是需要理解的是:光盤、軟盤、其他操作系統使用的文件系統的格式與linux使用的文件系統格式是不一樣的。光盤是ISO9660;軟盤是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、 NTFS。掛載前要了解linux是否支持所要掛載的文件系統格式。

掛載時使用mount命令,其格式:mount [-參數] [設備名稱] [掛載點]

其中常用的參數有

-t 指定設備的文件系統類型(什么提到的文件類型)

-o 指定掛載文件系統時的選項。有些也可用在/etc/fstab中。常用的有

codepage=XXX 代碼頁iocharset=XXX 字符集ro 以只讀方式掛載rw 以讀寫方式掛載nouser 使一般用戶無法掛載user 可以讓一般用戶掛載設備

例如:

1.掛載windows的文件系統:

1)首先我們使用sudo fdisk -l查看掛載的設備,例如最下面有:/dev/hda5

2)mkdir創建一個目錄,這里的目錄是作為掛在目錄,就是你要把E盤掛到這個目錄下:mk /mnt/winc

3)windows和linux使用的不是一個文件系統,一般情況下linux不掛載windows文件系統,所以要你手動mount:

# mount -t vfat /dev/hda5 /mnt/winc ( -t vfat指出這里的文件系統fat32)

現在就可以進入/mnt/winc等目錄讀寫這些文件了。

2.掛載光盤:# mk /mnt/cdrom

# mount -t iso9660 /dev/cdrom /mnt/cdrom (關盤的名字一般都是cdrom,這條命令一般都通用)

3.虛擬機共享文件夾:例如在VirtualBox下,主機是Windows,Ubuntu是Guest。共分三步:

1). 首先要安裝虛擬電腦工具包:在VirtualBox的菜單里選擇”設備”->”安裝虛擬電腦工具包”,你會發現在Ubuntu桌面上多出一個光盤圖標,這張光盤默認被自動加載到了文件夾/media/cdom0,而且/cdrom自動指向這個文件夾。默認設置下文件管理器會自動打開這張光盤,可以看到里面有個”VBoxLinuxAdditions.run”文件。打開一個命令行終端,依次輸入”cd /cdrom”和”sudo sh ./VBoxLinuxAdditions.run”,不含雙引號,開始安裝工具包。安裝完畢,會用英文提示要重啟Ubuntu,建議立刻重啟。重啟后,比較明顯的變化是鼠標是共享模式,并且剪貼板也和Windows共享了。如果有這些變化,說明虛擬電腦工具包已經裝成功。

2). 下一步設置共享文件夾。

在共享文件夾設置窗口中,單擊右側的”添加一個共享文件夾”,路徑選擇你想要共享的Windows文件夾,共享名任取一個自己喜歡的,比如”myshare”,選項read-only是指是否只允許ubuntu讀這個文件夾,請根據需要選擇這個選項。

3). 在ubuntu下掛載這個共享文件夾:sudo mount -t vboxsf myshare /media/share

其中”myshare”是之前取的共享文件夾的名字,”/media/share”是要掛載到的目標文件.

8.7 自動掛載windows分區

每次開機訪問windows分區都要運行mount命令顯然太煩瑣,為什么訪問其他的linux分區不用使用mount命令呢?

其實,每次開機時,linux自動將需要掛載的linux分區掛載上了。那么我們是不是可以設定讓linux在啟動的時候也掛載我們希望掛載的分區,如windows分區,以實現文件系統的自動掛載呢?

這是完全可以的。在/etc目錄下有個fstab文件,它里面列出了linux開機時自動掛載的文件系統的列表。我的/etc/fstab文件如下:

/dev/hda2 / ext3 defaults 1 1/dev/hda1 /boot ext3 defaults 1 2none /dev/pts devpts gid=5,mode=620 0 0none /proc proc defaults 0 0none /dev/shm tmpfs defaults 0 0/dev/hda3 swap swap defaults 0 0/dev/cdrom /mnt/cdrom iso9660 noauto,codepage=936,iocharset=gb2312 0 0/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0/dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0/dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0

在/etc/fstab文件里,第一列是掛載的文件系統的設備名,第二列是掛載點,第三列是掛載的文件系統類型,第四列是掛載的選項,選項間用逗號分隔。第五六列不知道是什么意思,還望高手指點。

在最后兩行是我手工添加的windows下的C;D盤,加了codepage=936和iocharset=cp936參數以支持中文文件名。參數defaults實際上包含了一組默認參數:

rw 以可讀寫模式掛載

suid 開啟用戶ID和群組ID設置位

dev 可解讀文件系統上的字符或區塊設備

exec 可執行二進制文件

auto 自動掛載

nouser 使一般用戶無法掛載

async 以非同步方式執行文件系統的輸入輸出操作

大家可以看到在這個列表里,光驅和軟驅是不自動掛載的,參數設置為noauto。(如果你非要設成自動掛載,你要確保每次開機時你的光驅和軟驅里都要有盤,呵呵。)

8.8 .軟連接、硬鏈接

可以用ln命令對一個已經存在的文件再建立一個新的連接,而不復制文件的內容。連接有軟連接和硬連接之分,軟連接又叫符號連接。它們各自的特點是:

硬連接:是給文件一個副本,原文件名和連接文件名都指向相同的物理地址。目錄不能有硬連接;硬連接不能跨越文件系統(不能跨越不同的分區)文件在磁盤中只有一個拷貝,節省硬盤空間;

修改其中一個,與其連接的文件同時被修改。如果刪除其中任意一個其余的文件將不受影響。

由于刪除文件要在同一個索引節點屬于唯一的連接時才能成功,因此可以防止不必要的誤刪除。

符號連接(軟連接):用ln -s命令建立文件的符號連接符號連接是linux特殊文件的一種,作為一個文件,它的數據是它所連接的文件的路徑名。類似windows下的快捷方式。

當然刪除這個連接,也不會影響到源文件,但對連接文件的使用、引用都是直接調用源文件的。

具體關系可以看下圖:

一文看懂 Linux 系統結構

圖5:軟鏈接和硬鏈接

從圖上可以看出硬鏈接和軟鏈接的區別:

1:硬鏈接原文件和新文件的inode編號一致。而軟鏈接不一樣。2:對原文件刪除,會導致軟鏈接不可用,而硬鏈接不受影響。3:對原文件的修改,軟、硬鏈接文件內容也一樣的修改,因為都是指向同一個文件內容的。

8.9.文件目錄管理命令

磁盤和文件空間 :fdisk df du

文件目錄與管理: cd pwd mkdir rmdir ls cp rm mv

查看文件內容 cat、tac、more、less、head 、tail

文件目錄與權限 :chmod chown chgrp umask

文件查找:which、whereis、locate、find、find

9、Linux 應用

標準的Linux系統一般都有一套都有稱為應用程序的程序集,它包括文本編輯器、編程語言、X Window、辦公套件、Internet工具和數據庫等。

10、Linux內核參數優化

內核參數是用戶和系統內核之間交互的一個接口,通過這個接口,用戶可以在系統運行的同時動態更新內核配置,而這些內核參數是通過Linux Proc文件系統存在的。因此,可以通過調整Proc文件系統達到優化Linux性能的目的。

網站名稱:教你看懂 Linux 系統結構
文章分享:http://m.newbst.com/news41/102841.html

成都網站建設公司_創新互聯,為您提供網站收錄軟件開發微信小程序品牌網站建設搜索引擎優化網站內鏈

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都seo排名網站優化