![Linux文件系統(tǒng)課件_第1頁](http://file4.renrendoc.com/view11/M02/1B/1C/wKhkGWWs_CmAfW5IAABMYCmqTqw162.jpg)
![Linux文件系統(tǒng)課件_第2頁](http://file4.renrendoc.com/view11/M02/1B/1C/wKhkGWWs_CmAfW5IAABMYCmqTqw1622.jpg)
![Linux文件系統(tǒng)課件_第3頁](http://file4.renrendoc.com/view11/M02/1B/1C/wKhkGWWs_CmAfW5IAABMYCmqTqw1623.jpg)
![Linux文件系統(tǒng)課件_第4頁](http://file4.renrendoc.com/view11/M02/1B/1C/wKhkGWWs_CmAfW5IAABMYCmqTqw1624.jpg)
![Linux文件系統(tǒng)課件_第5頁](http://file4.renrendoc.com/view11/M02/1B/1C/wKhkGWWs_CmAfW5IAABMYCmqTqw1625.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Linux文件系統(tǒng)Linux文件系統(tǒng)簡介在Unix業(yè)界有一句話叫做“一切皆文件”,這是對Linux文件系統(tǒng)的一個(gè)很好抽象。我們說“Linux中一切皆文件”直觀地可以這樣理解:所有的東西,設(shè)備、內(nèi)存都模擬成文件。而Windows中,我們則可以極端地認(rèn)為“一切皆設(shè)備”Linux文件系統(tǒng)簡介Linux定義了一個(gè)抽象的內(nèi)核級接口,能夠容許集中不同的后端文件系統(tǒng),文件樹的有些部分由傳統(tǒng)的給予磁盤的實(shí)現(xiàn)來處理,其他部分則由內(nèi)核中單獨(dú)的驅(qū)動程序來負(fù)責(zé)。Linux的文件系統(tǒng)可以認(rèn)為包括4種主要組成部分:命名空間(給事物取名,并按一種層次解構(gòu)組織他們的形式)API(用來便利和操作對象的一套系統(tǒng)調(diào)用)安全模型(用來保護(hù),隱藏何共享事物的方案)實(shí)現(xiàn)(把邏輯模型同實(shí)際硬件聯(lián)系到一起的軟件)命名空間我們把Linux下的文件分成5種文件類型:c字符設(shè)備b塊設(shè)備l連接f普通文件d目錄。文件類型}設(shè)備文件Linux中的設(shè)備有2種類型:字符設(shè)備(無緩沖且只能順序存取)、塊設(shè)備(有緩沖且可以隨機(jī)存取)。每個(gè)字符設(shè)備和塊設(shè)備都必須有主、次設(shè)備號,主設(shè)備號相同的設(shè)備是同類設(shè)備(使用同一個(gè)驅(qū)動程序)。
這些設(shè)備中,有些設(shè)備是對實(shí)際存在的物理硬件的抽象,而有些設(shè)備則是內(nèi)核自身提供的功能(不依賴于特定的物理硬件,又稱為“虛擬設(shè)備”)。設(shè)備文件設(shè)備文件一般來說,每個(gè)設(shè)備在/dev目錄下都有一個(gè)對應(yīng)的文件(設(shè)備節(jié)點(diǎn))??梢酝ㄟ^cat/proc/devices命令查看當(dāng)前已經(jīng)加載的設(shè)備驅(qū)動程序的主設(shè)備號。在/dev目錄下除了字符設(shè)備和塊設(shè)備節(jié)點(diǎn)之外還通常還會存在:FIFO管道、Socket、軟/硬連接、目錄。這些東西沒有主/次設(shè)備號。設(shè)備文件的命名內(nèi)核能夠識別的所有設(shè)備都記錄在源碼樹下的Documentation/devices.txt文件中。主設(shè)備號設(shè)備類型 次設(shè)備號=文件名簡要說明0 未命名設(shè)備(例如:掛載的非設(shè)備) 0=為空設(shè)備號保留
1char 內(nèi)存設(shè)備
1=/dev/mem 直接存取物理內(nèi)存
2=/dev/kmem 存取經(jīng)過內(nèi)核虛擬之后的內(nèi)存
3=/dev/null 空設(shè)備。任何寫入都將被直接丟棄,任何讀取都將得到EOF。
5=/dev/zero 零字節(jié)源,只能讀取到無限多的零字節(jié)。
8=/dev/random 隨機(jī)數(shù)發(fā)生器。完全由用戶的輸入來產(chǎn)生隨機(jī)數(shù)。 如果用戶停止所有動作,則停止產(chǎn)生新的隨機(jī)數(shù)。
9=/dev/urandom 更快,但是不夠安全的隨機(jī)數(shù)發(fā)生器。盡可能由用戶的輸入來產(chǎn)生隨機(jī)數(shù), 如果用戶停止動作,則把已經(jīng)產(chǎn)生的隨機(jī)數(shù)做為種子來產(chǎn)生新的隨機(jī)數(shù)。
11=/dev/kmsg 任何對該文件的寫入都將作為printk的輸出設(shè)備文件的命名1block RAMdisk 0=/dev/ram0 第1個(gè)RAMdisk(initrd只能使用ram0) 1=/dev/ram1 第2個(gè)RAMdisk ...4char TTY(終端)設(shè)備
0=/dev/tty0 當(dāng)前虛擬控制臺
1=/dev/tty1 第1個(gè)虛擬控制臺
...4block 如果根文件系統(tǒng)以是以只讀方式掛載的,那么就不可能創(chuàng)建真正的設(shè)備節(jié)點(diǎn), 此時(shí)就使用該設(shè)備作為動態(tài)分配的主(major)設(shè)備的別名
0=/dev/root5char 其他TTY設(shè)備
0=/dev/tty 當(dāng)前TTY設(shè)備
1=/dev/console 系統(tǒng)控制臺(一般是/dev/tty0)7block 回環(huán)設(shè)備(用一個(gè)普通的磁盤文件來模擬一個(gè)塊設(shè)備)
對回環(huán)設(shè)備的綁定由mount(8)或losetup(8)處理
0=/dev/loop0 第1個(gè)回環(huán)設(shè)備
1=/dev/loop1 第2個(gè)回環(huán)設(shè)備
...設(shè)備文件的命名8block SCSI磁盤(0-15) 0=/dev/sda 第1個(gè)SCSI磁盤(整個(gè)磁盤) 16=/dev/sdb 第2個(gè)SCSI磁盤(整個(gè)磁盤) 32=/dev/sdc 第3個(gè)SCSI磁盤(整個(gè)磁盤) ...
分區(qū)表示方法如下(以第3個(gè)SCSI磁盤為例) 33=/dev/sdc1 第1個(gè)分區(qū)
34=/dev/sdc2 第2個(gè)分區(qū)
...10char 非串口鼠標(biāo),各種雜項(xiàng)設(shè)備和特性
1=/dev/psaux PS/2鼠標(biāo)
135=/dev/rtc 實(shí)時(shí)時(shí)鐘(RealTimeClock)13char 核心輸入設(shè)備
32=/dev/input/mouse0 第1個(gè)鼠標(biāo)
33=/dev/input/mouse1 第2個(gè)鼠標(biāo)
... 63=/dev/input/mice 所有鼠標(biāo)的統(tǒng)一
64=/dev/input/event0 第1個(gè)事件隊(duì)列
65=/dev/input/event1 第2個(gè)事件隊(duì)列
...29char 通用幀緩沖(framebuffer)設(shè)備
0=/dev/fb0 第1個(gè)幀緩沖設(shè)備
1=/dev/fb1 第2個(gè)幀緩沖設(shè)備
...設(shè)備文件的命名89char I2C總線接口
0=/dev/i2c-0 第1個(gè)I2C適配器
1=/dev/i2c-1 第2個(gè)I2C適配器
...136-143char Unix98PTYslave
這些設(shè)備節(jié)點(diǎn)是自動生成的(伴有適當(dāng)?shù)臋?quán)限和模式),不能手動創(chuàng)建。 方法是通過使用適當(dāng)?shù)膍ount選項(xiàng)(通常是:mode=0620,gid=<"tty"組的gid>)
將devpts文件系統(tǒng)掛載到/dev/pts目錄即可。
0=/dev/pts/0 第1個(gè)Unix98PTYslave 1=/dev/pts/1 第2個(gè)Unix98PTYslave ...180char USB字符設(shè)備
96=/dev/usb/hiddev0
第1個(gè)USB人機(jī)界面設(shè)備(鼠標(biāo)/鍵盤/游戲桿/手寫版等) ... 111=/dev/usb/hiddev15
第16個(gè)USB人機(jī)界面設(shè)備180block USB塊設(shè)備(U盤之類) 0=/dev/uba 第1個(gè)USB塊設(shè)備
8=/dev/ubb 第2個(gè)USB塊設(shè)備
16=/dev/ubc 第3個(gè)USB塊設(shè)備
...APIAPI–文件操作系統(tǒng)調(diào)用Linux操作系統(tǒng)提供了一系列的系統(tǒng)調(diào)用來進(jìn)行文件操作。常用的文件操作系統(tǒng)調(diào)用創(chuàng)建creat打開open讀寫read/writeI/O操作ioctl關(guān)閉closecreat(建立文件)頭文件#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>定義函數(shù)intcreat(constchar*pathname,mode_tmode);函數(shù)說明參數(shù)pathname指向欲建立的文件路徑字符串。creat()相當(dāng)于使用下列的調(diào)用方式調(diào)用open()。open(constchar*pathname,(O_CREAT|O_WRONLY|O_TRUNC));返回值creat()會返回新的文件描述詞,若有錯(cuò)誤發(fā)生則會返回-1,并把錯(cuò)誤代碼設(shè)給errno。附加說明creat()無法建立設(shè)備文件,如果需要請使用mknod()。open(打開文件)頭文件#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>
定義函數(shù)intopen(constchar*pathname,intflags);intopen(constchar*pathname,intflags,mode_tmode);
函數(shù)說明參數(shù)pathname指向欲打開的文件路徑字符串。下列是參數(shù)flags常用的旗標(biāo):O_RDONLY以只讀方式打開文件O_WRONLY以只寫方式打開文件O_RDWR以可讀寫方式打開文件。上述三種旗標(biāo)是互斥的,也就是不可同時(shí)使用,但可與下列的旗標(biāo)利用OR(|)運(yùn)算符組合。O_CREAT若欲打開的文件不存在則自動建立該文件。O_TRUNC若文件存在并且以可寫的方式打開時(shí),此旗標(biāo)會令文件長度清為0,而原來存于該文件的資料也會消失。O_APPEND當(dāng)讀寫文件時(shí)會從文件尾開始移動,也就是所寫入的數(shù)據(jù)會以附加的方式加入到文件后面。O_NONBLOCK以不可阻斷的方式打開文件,也就是無論有無數(shù)據(jù)讀取或等待,都會立即返回進(jìn)程之中。返回值文件打開成功返回文件的描述符,失敗返回-1read(由已打開的文件讀取數(shù)據(jù))頭文件#include<unistd.h>
定義函數(shù)ssize_tread(intfd,void*buf,size_tcount);
函數(shù)說明read()會把參數(shù)fd所指的文件傳送count個(gè)字節(jié)到buf指針?biāo)傅膬?nèi)存中。若參數(shù)count為0,則read()不會有作用并返回0。返回值為實(shí)際讀取到的字節(jié)數(shù),如果返回0,表示已到達(dá)文件尾或是無可讀取的數(shù)據(jù),此外文件讀寫位置會隨讀取到的字節(jié)移動。
附加說明如果順利read()會返回實(shí)際讀到的字節(jié)數(shù),最好能將返回值與參數(shù)count作比較,若返回的字節(jié)數(shù)比要求讀取的字節(jié)數(shù)少,則有可能讀到了文件尾、從管道(pipe)或終端機(jī)讀取,或者是read()被信號中斷了讀取動作。當(dāng)有錯(cuò)誤發(fā)生時(shí)則返回-1,錯(cuò)誤代碼存入errno中,而文件讀寫位置則無法預(yù)期。
write(將數(shù)據(jù)寫入已打開的文件內(nèi))頭文件#include<unistd.h>
定義函數(shù)ssize_twrite(intfd,constvoid*buf,size_tcount);
函數(shù)說明write()會把參數(shù)buf所指的內(nèi)存寫入count個(gè)字節(jié)到參數(shù)fd所指的文件內(nèi)。當(dāng)然,文件讀寫位置也會隨之移動。
返回值如果順利write()會返回實(shí)際寫入的字節(jié)數(shù)。當(dāng)有錯(cuò)誤發(fā)生時(shí)則返回-1,錯(cuò)誤代碼存入errno中。
ioctl(控制設(shè)備)頭文件#include<sys/ioctl.h>
定義函數(shù)intioctl(intfd,intrequest,...);
函數(shù)說明ioctl()能對一些特殊的文件(主要是設(shè)備)進(jìn)行一些底層參數(shù)的操作。許多字符設(shè)備都使用ioctl請求來完成對設(shè)備的控制。
返回值成動返回0。當(dāng)有錯(cuò)誤發(fā)生時(shí)則返回-1,錯(cuò)誤代碼存入errno中。
close(關(guān)閉文件)頭文件#include<unistd.h>
定義函數(shù)
intclose(intfd);
函數(shù)說明當(dāng)使用完文件后若已不再需要則可使用close()關(guān)閉該文件,二close()會讓數(shù)據(jù)寫回磁盤,并釋放該文件所占用的資源。參數(shù)fd為先前由open()或creat()所返回的文件描述詞。
返回值若文件順利關(guān)閉則返回0,發(fā)生錯(cuò)誤時(shí)返回-1。
附加說明雖然在進(jìn)程結(jié)束時(shí),系統(tǒng)會自動關(guān)閉已打開的文件,但仍建議自行關(guān)閉文件,并確實(shí)檢查返回值。安全模型文件系統(tǒng)的安全性linux作為一種網(wǎng)絡(luò)操作系統(tǒng),允許多個(gè)用戶使用,為了保護(hù)用戶的個(gè)人文件不被其他用戶所侵犯,linux(在unix的基礎(chǔ)上)提供了文件權(quán)限機(jī)制,用來保護(hù)用戶的個(gè)人信息。使用用戶分類:超級用戶:管理者普通用戶:合法用戶匿名用戶:一般情況下為合法用戶文件訪問權(quán)限Linux系統(tǒng)中的每個(gè)文件和目錄都有訪問許可權(quán)限,用它來確定誰可以通過何種方式對文件和目錄進(jìn)行訪問和操作。文件的訪問權(quán)限分為只讀,只寫和可執(zhí)行三種。
以普通文件為例:只讀權(quán)限表示只允許讀其內(nèi)容,而禁止對其做任何的更改操作。可執(zhí)行權(quán)限表示允許將該文件作為一個(gè)程序執(zhí)行。文件被創(chuàng)建時(shí),文件所有者自動擁有對該文件的讀、寫和可執(zhí)行權(quán)限,以便于對文件的閱讀和修改。用戶也可根據(jù)需要把訪問權(quán)限設(shè)置為需要的任何組合。查看文件訪問權(quán)限對文件來說,有三種不同類型的用戶可進(jìn)行訪問:文件所有者,同組用戶、其他用戶。所有者一般是文件的創(chuàng)建者。所有者可以允許同組用戶有權(quán)訪問文件,還可以將文件的訪問權(quán)限賦予系統(tǒng)中的其他用戶。在這種情況下,系統(tǒng)中其他用戶都能訪問該用戶擁有的文件或目錄。當(dāng)用ls-l命令顯示文件或目錄的詳細(xì)信息時(shí),最左邊的一列為文件的訪問權(quán)限。例如:$ls-lsobsrc.tgz-rw-r--r--1rootroot483997Ju1l517:3lsobsrc.tgz查看文件訪問權(quán)限第一個(gè)字符一般用來區(qū)分文件和目錄:d:表示是一個(gè)目錄,事實(shí)上在ext2fs中,目錄是一個(gè)特殊的文件。-:表示這是一個(gè)普通的文件。l:表示這是一個(gè)符號鏈接文件,實(shí)際上它指向另一個(gè)文件。b、c:分別表示區(qū)塊設(shè)備和其他的外圍設(shè)備,是特殊類型的文件。s、p:這些文件關(guān)系到系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)和管道,通常很少見到。后9位就是文件的訪問權(quán)限。每一文件或目錄的訪問權(quán)限都有三組,每組用三位表示,分別為文件屬主的讀、寫和執(zhí)行權(quán)限;與屬主同組的用戶的讀、寫和執(zhí)行權(quán)限;系統(tǒng)中其他用戶的讀、寫和執(zhí)行權(quán)限。文件訪問權(quán)限的字母表示文件的權(quán)限,分為三段,分別代表“所有者(u)”、“同組人(g)”、“其它人(o)”的讀(r)、寫(w)、執(zhí)行(x)的權(quán)限。對普通文件而言,“r”代表可以閱讀文件內(nèi)容,“w”代表可以修改或刪除文件內(nèi)容,“x”代表可以將文件作為命令來執(zhí)行(同時(shí)需要r權(quán)限)。對目錄文件而言,"r"代表可以列出目錄所包括的文件,"w"可以在目錄內(nèi)創(chuàng)建或刪除文件(同時(shí)需要x權(quán)限),"x"表明目錄可以做為活動目錄。文件訪問權(quán)限的數(shù)字表示文件和目錄的權(quán)限表示,是用rwx這三個(gè)字符來代表所有者、用戶組和其他用戶的權(quán)限。有時(shí)候,字符似乎過于麻煩,因此還有另外一種方法是以數(shù)字來表示權(quán)限,而且僅需三個(gè)數(shù)字。r:對應(yīng)數(shù)值4w:對應(yīng)數(shù)值2x:對應(yīng)數(shù)值1-:對應(yīng)數(shù)值0數(shù)字設(shè)定的關(guān)鍵是mode的取值,將rwx看成二進(jìn)制數(shù),如果有則用1表示,沒有則用0表示,那么rwxr-xr--則可以表示成為:
111101100再將其每三位轉(zhuǎn)換成為一個(gè)十進(jìn)制數(shù),就是754。改變文件的訪問權(quán)限例如,我們想讓a.txt這個(gè)文件的權(quán)限為:自己 同組用戶 其他用戶可讀是 是 是可寫是 是可執(zhí)行那么,我們先根據(jù)上表得到權(quán)限串為:rw-rw-r--,那么轉(zhuǎn)換成二進(jìn)制數(shù)就是110110100,再每三位轉(zhuǎn)換成為一個(gè)十進(jìn)制數(shù),就得到664,因此我們執(zhí)行命令:[root@localhost~]#chmod664a.txt按照上面的規(guī)則,rwx合起來就是4+2+1=7。一個(gè)rwxrwxrwx權(quán)限全開放的文件,數(shù)值表示為777;而完全不開放權(quán)限的文件“”其數(shù)字表示為000。在文本模式下,可執(zhí)行chmod命令去改變文件和目錄的權(quán)限。我們先執(zhí)行l(wèi)s-l看看目錄內(nèi)的情況:[root@localhost~]#ls-l總用量368-rw-r--r--1rootroot12172 8月1523:18conkyrc.sampledrwxr-xr-x2rootroot48 9月416:32Desktop-r--r--r--1rootroot331844 10月2221:08libfreetype.so.6drwxr-xr-x2rootroot48 8月1222:25MyMusic-rwxr-xr-x1rootroot9776 11月508:08net.eth0-rwxr-xr-x1rootroot977611月508:08net.eth1-rwxr-xr-x1rootroot512 11月508:08net.lodrwxr-xr-x2rootroot48 9月613:06vmware可以看到當(dāng)然文件conkyrc.sample文件的權(quán)限是644,然后把這個(gè)文件的權(quán)限改成777。執(zhí)行下面命令[root@localhost~]#chmod777conkyrc.sample然后ls-l看一下執(zhí)行后的結(jié)果:[root@localhost~]#ls-l總用量368-rwxrwxrwx1rootroot12172 8月1523:18conkyrc.sampledrwxr-xr-x2rootroot48 9月416:32Desktop-r--r--r--1rootroot33184410月2221:08libfreetype.so.6drwxr-xr-x2rootroot48 8月1222:25MyMusic-rwxr-xr-x1rootroot9776 11月508:08net.eth0-rwxr-xr-x1rootroot9776 11月508:08net.eth1-rwxr-xr-x1rootroot512 11月508:08net.lodrwxr-xr-x2rootroot48 9月613:06vmware可以看到conkyrc.sample文件的權(quán)限已經(jīng)修改為rwxrwxrwx實(shí)現(xiàn)-虛擬文件系統(tǒng)VFSLinux支持的常見的文件系統(tǒng)類型Linux自身提供的缺省文件系統(tǒng):ext2fs(一般根文件系統(tǒng)/使用此文件系統(tǒng));新增的自身提供的文件系統(tǒng):ext3fs、ReiserFS、IBMJFS等其它UNIX使用的文件系統(tǒng):minix,ext,xiafs等DOS/Windows使用的文件系統(tǒng):FAT-12,FAT-16,FAT-32,VFAT,NTFSCD-ROM:ISO9660NFS(網(wǎng)絡(luò)文件系統(tǒng));SMBFS(Windows共享文件系統(tǒng))嵌入式常用的文件系統(tǒng):cramfs,JFFS2/proc(用于內(nèi)核和進(jìn)程信息)Linux專用文件系統(tǒng)Minix是Linux的第一個(gè)文件系統(tǒng),有局限,性能比較差。文件名不能長于14個(gè)字符,最大的文件大小是64M字節(jié)在1992年4月引入第一個(gè)專為Linux設(shè)計(jì)的文件系統(tǒng)--擴(kuò)展文件系統(tǒng)或EXT(ExtendFileSystem)1993年,增加了擴(kuò)展文件系統(tǒng)第二版,或EXT2傳統(tǒng)Unix文件系統(tǒng)只支持特定的文件系統(tǒng)無法存取其他的文件系統(tǒng)如何支持更多的文件系統(tǒng)傳統(tǒng)Unix系統(tǒng)的缺點(diǎn)解決方案一方案一的問題Kernel與文件系統(tǒng)的依賴程度太高增加編程的負(fù)擔(dān)系統(tǒng)的擴(kuò)展性不好方案二:為kernel和文件系統(tǒng)提供了一個(gè)統(tǒng)一的界面方案二虛擬文件系統(tǒng)現(xiàn)在的系統(tǒng)大多都在系統(tǒng)內(nèi)核和文件系統(tǒng)之間提供一個(gè)標(biāo)準(zhǔn)的接口,真實(shí)的文件系統(tǒng)通過一個(gè)接口層從操作系統(tǒng)和系統(tǒng)服務(wù)中分離出來,這樣不同文件結(jié)構(gòu)之間的數(shù)據(jù)可以十分方便地交換。Linux也在系統(tǒng)內(nèi)核和文件系統(tǒng)之間提供了一種叫做虛擬文件系統(tǒng)VFS(virtualfilesystem)的標(biāo)準(zhǔn)接口。VFS允許Linux支持許多(通常是不同的)文件系統(tǒng),每一個(gè)都向VFS表現(xiàn)一個(gè)通用的軟件接口。Linux文件系統(tǒng)的所有細(xì)節(jié)都通過軟件進(jìn)行轉(zhuǎn)換,所以所有的文件系統(tǒng)對于Linux核心的其余部分和系統(tǒng)中運(yùn)行的程序顯得一樣。虛擬文件系統(tǒng)轉(zhuǎn)換Linux文件管理程序系統(tǒng)調(diào)用接口VFS轉(zhuǎn)換FAT文件系統(tǒng)Ext2文件系統(tǒng)/proc文件系統(tǒng)VFS的基本概念Linux成功的關(guān)鍵就是支持多文件系統(tǒng)VFS所支持的文件系統(tǒng),可以查看fs目錄NetworknfsCodaAFS-AndrewFSsmbfs-LanManagerncpfs-NovellSpecialonesprocfs-/procumsdos-UnixinDOSuserfs-redirectortouserMediabasedext2-Linuxnativeufs-BSDfat-DOSFSvfat-win95hpfs-OS/2minix-well….Isofs-CDROMsysv-SysvUnixhfs-Macintoshaffs-AmigaFastFSNTFS-NT’sFSadfs-Acorn-strongarmVFS的基本概念通用文件模型可以表示所有支持的文件系統(tǒng)提供了對傳統(tǒng)Unix文件系統(tǒng)的映象在通用文件模型中包含的對象類型SuperblockinodefiledentryVFS和實(shí)際文件系統(tǒng)的關(guān)系實(shí)際文件系統(tǒng)和VFS的轉(zhuǎn)換當(dāng)每一個(gè)文件系統(tǒng)初始化的時(shí)候,自身向VFS登記。(在系統(tǒng)啟動操作系統(tǒng)初始化自身時(shí))真實(shí)的文件系統(tǒng)自身建立在內(nèi)核中或者是作為可加載的模塊。文件系統(tǒng)模塊在系統(tǒng)需要的時(shí)候加載。當(dāng)一個(gè)塊設(shè)備文件系統(tǒng)安裝的時(shí)候,(包括root文件系統(tǒng)),VFS必須讀取它的超級塊。每一個(gè)文件系統(tǒng)類型的超級塊的讀取例程必須找出這個(gè)文件系統(tǒng)的拓?fù)浣Y(jié)構(gòu),并把這些信息映射到一個(gè)VFS超級塊的數(shù)據(jù)結(jié)構(gòu)上。VFS保存系統(tǒng)中安裝的文件系統(tǒng)的列表和它們的VFS超級塊列表。InteractionbetweenprocessesandVFSobjects
VFS相關(guān)的系統(tǒng)調(diào)用(1/2)
Systemcallname Descriptionmount()umount() Mount/unmountfilesystemssysfs() Getfilesysteminformationstatfs()fstatfs()ustat() Getfilesystemstatisticschroot()pivot_root() Changerootdirectorychdir()fchdir()getcwd() Manipulatecurrentdirectorymkdir()rmdir() Createanddestroydirectoriesgetdents()readdir() Manipulatedirectoryentrieslink()unlink()rename() Manipulatedirectoryentriesreadlink()symlink() Manipulatesoftlinkschown()fchown()lchown() Modifyfileownerchmod()fchmod()utime() Modifyfileattributesstat()fstat()lstat()access() Readfilestatusopen()close()creat()umask() OpenandclosefilesVFS相關(guān)的系統(tǒng)調(diào)用(2/2)Systemcallname Descriptiondup()dup2()fcntl() Manipulatefiledescriptorsselect()poll() AsynchronousI/Onotificationtruncate()ftruncate() Changefilesizelseek()_llseek() Changefilepointerread()write()readv() CarryoutfileI/Ooperationswritev()sendfile()readahead() CarryoutfileI/Ooperationspread()pwrite() Seekfileandaccessitmmap()munmap() Handlefilememorymappingmadvise()mincore() Handlefilememorymappingfdatasync()fsync()sync()msync() Synchronizefiledataflock() Manipulatefilelock文件連接UNIXlinksemanticshardlinks硬連接–multipledirentrieswithsameinode#equalstatus;firstisnot"real"entryfiledeletedwhenlinkcountgoesto0restrictionscan'thardlinktodirectories(avoidscycles)oracrossfilesystemssoft(symbolic)links軟(符號)連接–littlefileswithpathnamesjustaliasesforanotherpathnamenorestrictions,cyclespossible,danglinglinkspossible硬連接ln/a/os1.txt/b/os2.txt符號連接ln–s/a/os1.txt/b/os2.txt文件系統(tǒng)類型Linuxmust"knowabout"filesystembeforemountmultiple(mounted)instancesofeachtypepossiblespecial(virtual)filesystems(like/proc)structuringtechniquetotouchkerneldataexamples:/proc,/dev(devfs)sockfs,pipefs,tmpfs,rootfs,shmfsassociatedwithfictitiousblockdevice(major#0)minor#distinguishesspecialfilesystemtypes注冊文件系統(tǒng)當(dāng)核心建立的時(shí)候,文件系統(tǒng)初始化代碼調(diào)用所有內(nèi)建的文件系統(tǒng)的初始化例程的。當(dāng)加載一個(gè)文件系統(tǒng)模塊的時(shí)候,它自身向核心登記,當(dāng)卸載的時(shí)候,它就注銷。每一個(gè)文件系統(tǒng)的初始化例程都向虛擬文件系統(tǒng)注冊自身,并用一個(gè)file_system_type數(shù)據(jù)結(jié)構(gòu)代表,這里面包括文件系統(tǒng)的名稱和一個(gè)指向它的VFS超級塊的讀取例程的指針。register_filesystem()/unregister_filesystemaddsfile_system_typeobjecttolinked-listfile_systems(head;kernelglobalvariable)file_systems_lock(rwspinlocktoprotectlist)參見fs/filesystems.csys_setup()參見include/linux/fs.hfile_system_type結(jié)構(gòu)file_system_type數(shù)據(jù)結(jié)構(gòu)*read_super()namerequires_devnext*read_super()namerequires_devnext*read_super()namerequires_devnextfile_system_typefile_systemsext2prociso9660檢查/proc/filesystems可以檢查/proc/filesystems來查看登記了哪些文件系統(tǒng)常用的文件系統(tǒng)
第二代擴(kuò)展文件系統(tǒng)(EXT2)ext2fs由Rey
Card設(shè)計(jì),其目標(biāo)是為Linux提供一個(gè)強(qiáng)大的可擴(kuò)展文件系統(tǒng)支持標(biāo)準(zhǔn)unix文件類型管理大的分區(qū),達(dá)4TB支持長文件名,255字符為超級用戶保留5%數(shù)據(jù)塊Configurableblocksizefrom1024to4096bytesConfigurablenumberofinodesPartitionsblocksintogroups,wheredatablocksandinodesarestoredinadjacenttracksPre-allocatesdatablockstoregularfilesbeforetheyareusedSupports“fast”symboliclinksImplementedforrobustnesswhenupdatingdiskstructuresSupportsautomaticconsistencycheckingSupportsimmutableandappend-onlyfilesEXT2文件系統(tǒng)的硬盤組織結(jié)構(gòu)數(shù)據(jù)被保存在數(shù)據(jù)塊中,每一個(gè)文件的長度都按照塊取整。引導(dǎo)塊塊組1…塊組i…塊組n超級塊塊組描述結(jié)構(gòu)塊位示圖索引節(jié)點(diǎn)位示圖索引節(jié)點(diǎn)表數(shù)據(jù)塊基于FLASH的文件系統(tǒng)Flash(閃存)作為嵌入式系統(tǒng)的主要存儲媒介,有其自身的特性。Flash的寫入操作只能把對應(yīng)位置的1修改為0,而不能把0修改為1(擦除Flash就是把對應(yīng)存儲塊的內(nèi)容恢復(fù)為1),因此,一般情況下,向Flash寫入內(nèi)容時(shí),需要先擦除對應(yīng)的存儲區(qū)間,這種擦除是以塊(block)為單位進(jìn)行的。閃存主要有NOR和NAND兩種技術(shù)。Flash的擦寫次數(shù)是有限的,NAND閃存還有特殊的硬件接口和讀寫時(shí)序。因此,必須針對Flash的硬件特性設(shè)計(jì)符合應(yīng)用要求的文件系統(tǒng);傳統(tǒng)的文件系統(tǒng)如ext2等,用作Flash的文件系統(tǒng)會有諸多弊端。在嵌入式Linux下,MTD(MemoryTechnologyDevice,存儲技術(shù)設(shè)備)為底層硬件(閃存)和上層(文件系統(tǒng))之間提供一個(gè)統(tǒng)一的抽象接口,即Flash的文件系統(tǒng)都是基于MTD驅(qū)動層的(參見上面的Linux下的文件系統(tǒng)結(jié)構(gòu)圖)。使用MTD驅(qū)動程序的主要優(yōu)點(diǎn)在于,它是專門針對各種非易失性存儲器(以閃存為主)而設(shè)計(jì)的,因而它對Flash有更好的支持、管理和基于扇區(qū)的擦除、讀/寫操作接口。Jffs2Jffs2:日志閃存文件系統(tǒng)版本2(JournallingFlashFileSystemv2)JFFS文件系統(tǒng)最早是由瑞典AxisCommunications公司基于Linux2.0的內(nèi)核為嵌入式系統(tǒng)開發(fā)的文件系統(tǒng)。JFFS2是RedHat公司基于JFFS開發(fā)的閃存文件系統(tǒng),最初是針對RedHat公司的嵌入式產(chǎn)品eCos開發(fā)的嵌入式文件系統(tǒng),所以JFFS2也可以用在Linux,uCLinux中。主要用于NOR型閃存,基于MTD驅(qū)動層,特點(diǎn)是:可讀寫的、支持?jǐn)?shù)據(jù)壓縮的、基于哈希表的日志型文件系統(tǒng),并提供了崩潰/掉電安全保護(hù),提供“寫平衡”支持等。缺點(diǎn)主要是當(dāng)文件系統(tǒng)已滿或接近滿時(shí),因?yàn)槔占年P(guān)系而使jffs2的運(yùn)行速度大大放慢。目前jffs3正在開發(fā)中。關(guān)于jffs系列文件系統(tǒng)的使用詳細(xì)文檔,可參考MTD補(bǔ)丁包中mtd-jffs-HOWTO.txt。jffsx不適合用于NAND閃存主要是因?yàn)镹AND閃存的容量一般較大,這樣導(dǎo)致jffs為維護(hù)日志節(jié)點(diǎn)所占用的內(nèi)存空間迅速增大,另外,jffsx文件系統(tǒng)在掛載時(shí)需要掃描整個(gè)FLASH的內(nèi)容,以找出所有的日志節(jié)點(diǎn),建立文件結(jié)構(gòu),對于大容量的NAND閃存會耗費(fèi)大量時(shí)間。yaffs:YetAnotherFlashFileSystemyaffs/yaffs2是專為嵌入式系統(tǒng)使用NAND型閃存而設(shè)計(jì)的一種日志型文件系統(tǒng)。與jffs2相比,它減少了一些功能(例如不支持?jǐn)?shù)據(jù)壓縮),所以速度更快,掛載時(shí)間很短,對內(nèi)存的占用較小。另外,它還是跨平臺的文件系統(tǒng),除了Linux和eCos,還支持WinCE,pSOS和ThreadX等。yaffs/yaffs2自帶NAND芯片的驅(qū)動,并且為嵌入式系統(tǒng)提供了直接訪問文件系統(tǒng)的API,用戶可以不使用Linux中的MTD與VFS,直接對文件系統(tǒng)操作。當(dāng)然,yaffs也可與MTD驅(qū)動程序配合使用。yaffs與yaffs2的主要區(qū)別在于,前者僅支持小頁(512Bytes)NAND閃存,后者則可支持大頁(2KB)NAND閃存。同時(shí),yaffs2在內(nèi)存空間占用、垃圾回收速度、讀/寫速度等方面均有大幅提升。CRAMFS由LinusTorvalds參與開發(fā)的小型只讀壓縮文件系統(tǒng)Inode、文件名稱和目錄信息不壓縮單個(gè)文件最大為16MB數(shù)據(jù)壓縮存放適合不需要寫、且體積較大的文件系統(tǒng),如/lib,/opt等與JFFS2、Cloop相比,讀取速度快壓縮率可以超過50%讀取文件時(shí),每次讀取4k內(nèi)容,解壓縮到cache中Linux內(nèi)核已提供了對cramfs的支持,只要編譯時(shí)選中創(chuàng)建文件系統(tǒng)(生成image文件)
#mkcramfs/liblib.cramfs#mkcramfs/usrusr.cramfs掛載文件系統(tǒng)
#mount–tcramfslib.cramfs/lib–oloop#mount–tcramfsusr.cramfs/usr–oloopproc文件系統(tǒng)/proc:一個(gè)虛擬文件系統(tǒng),只存在于內(nèi)存中,通過它可以查詢、設(shè)置系統(tǒng)的運(yùn)行情況及各種系統(tǒng)參數(shù)。系統(tǒng)中的很多應(yīng)用都依賴于proc文件系統(tǒng),如命令lsmod等同于cat/proc/modules。文件的大小為0;很多文件名體現(xiàn)了內(nèi)核的相應(yīng)參數(shù),可以通過這個(gè)文件名修改參數(shù)值。如#echo2048>/proc/sys/shmmni,修改共享內(nèi)存段的限制。/proc下的“數(shù)字目錄”指代了相應(yīng)pid的進(jìn)程,如目錄“1”下的內(nèi)容就是1#進(jìn)程的各種信息。/proc/<pid>/下文件、目錄的意義文件/目錄名描述Cmdline
該進(jìn)程的命令行參數(shù)Cwd
進(jìn)程運(yùn)行的當(dāng)前路徑的符號鏈接Environ
該進(jìn)程運(yùn)行的環(huán)境變量Exe
該進(jìn)程相關(guān)的程序的符號鏈接Fd
包含該進(jìn)程使用的文件描述符Maps
可執(zhí)行文件或庫文件的內(nèi)存映像Mem
該進(jìn)程使用的內(nèi)存Root
該進(jìn)程所有者的家(home)目錄Stat
進(jìn)程狀態(tài)Statm
進(jìn)程的內(nèi)存狀態(tài)Status
用易讀的方式表示的進(jìn)程狀態(tài)相關(guān)命令mount命令 mount
[-hV]
mount
-a
[-fFnrsvw]
[-t
vfstype]
mount
[-fnrsvw]
[-o
options
[,...]]
device
|
dir
mount
[-fnrsvw]
[-t
vfstype]
[-o
options]
device
dir使用權(quán)限
:
系統(tǒng)管理者或/etc/fstab中允許的使用者說明
:
這個(gè)命令可以被用來掛上任何的文件系統(tǒng),甚至可以用
-o
loop
選項(xiàng)將某個(gè)一般的文件當(dāng)成硬盤機(jī)分割掛上系統(tǒng)。mount命令參數(shù)
-h顯示輔助訊息
-t指定文件系統(tǒng)的型態(tài)
-o
defaults使用缺省的選項(xiàng)
rw,
suid,
dev,
exec,
auto,
nouser,
async.
-o
ro用只讀模式掛上。
-o
rw用可讀寫模式掛上。
-o
loop=使用
loop
模式用來將一個(gè)文件當(dāng)成硬盤分割掛上系統(tǒng)。范例:將
/tmp/image.iso
這個(gè)光碟的
image
檔使用
loop
模式掛在
/mnt/cdrom之下。用這種方法可以將一般網(wǎng)絡(luò)上可以找到的
Linux
光
碟
ISO
檔在不燒錄成光碟的情況下檢視其內(nèi)容。
#mount
-o
loop
/tmp/image.iso
/mnt/cdromumount命令 umount[-hV] umount-a[-f][-r][-n][-v][-tvfstypes][-Oopts] umount[-f][-r][-n][-v]special|node...df命令命令格式:df
[選項(xiàng)]...
[FILE]...功能:顯示文件系統(tǒng)的狀況,或是看所有文件系統(tǒng)的狀況(缺省值)常用選項(xiàng)
-a,
包含所有的具有
0
Blocks
的文件系統(tǒng)
-block-size={SIZE}
使用
{SIZE}
大小的
Blocks
-h,
--human-readable
使用人可讀的格式
-H,
很像
-h,
但是用
1000
為單位而不是用
1024
-i,
列出
inode
信息,不列出已使用
block
常用選項(xiàng)
-k,
--kilobytes
就像是
--block-size=1024
-l,
--local
限制列出的文件結(jié)構(gòu)
-m,
--megabytes
就像
--block-size=1048576
--no-sync
取得信息前不
sync
(缺省值)
-P,
--portability
使用
POSIX
輸出格式
--sync
在取得信息前
sync
-t,
--type=TYPE
限制列出文件系統(tǒng)的
TYPE
-T,
--print-type
顯示文件系統(tǒng)的形式
-x,
--exclude-type=TYPE
限制列出文件系統(tǒng)不要顯示
TYPE
-v
(忽略)
--help
顯示這個(gè)幫手並且離開
--version
輸出版本信息並且離開mkfs命令使用權(quán)限
:
超級使用者
使用方式
:
mkfs
[-V]
[-t
fstype]
[fs-options]
filesys
[blocks]說明
:
建立
linux
文件系統(tǒng)在特定的分區(qū)上參數(shù)
:
device
:預(yù)備檢查的硬盤分區(qū)
-V
:
詳細(xì)顯示模式
-t
:
給定文件系統(tǒng)的型式,缺省值為
ext2
-c
:
在制做文件系統(tǒng)前,檢查該分區(qū)是否有壞軌
block
:
給定
block
的大小例子
:
在
/dev/hda5
上建一個(gè)
msdos
的文件系統(tǒng),同時(shí)檢查是否有壞軌存在,並且將過程詳細(xì)列出來
:
mkfs
-V
-t
msdos
-c
/dev/hda5Linux根文件系統(tǒng)Linux根文件系統(tǒng)Linux內(nèi)核在系統(tǒng)啟動期間進(jìn)行的最后操作之一就是安裝根文件系統(tǒng)。根文件系統(tǒng)一直是所有類UNIX系統(tǒng)不可或缺的組件。根文件系統(tǒng)的基本結(jié)構(gòu)bin 必要的用戶命令(二進(jìn)制文件)*boot引導(dǎo)加載程序使用的靜態(tài)文件dev設(shè)備文件及其他特殊文件etc系統(tǒng)配置文件*home用戶主目錄lib必要的鏈接庫,例如:C鏈接庫、內(nèi)核模塊mnt臨時(shí)掛載的文件系統(tǒng)的掛載點(diǎn)“*”目錄在嵌入式Linux上為可選的。根文件系統(tǒng)的基本結(jié)構(gòu)*opt附加軟件的安裝目錄proc提供內(nèi)核和進(jìn)程信息的proc文件系統(tǒng)*rootroot用戶主目錄sbin必要的系統(tǒng)管理員命令tmp臨時(shí)文件目錄usr大多數(shù)用戶使用的應(yīng)用程序和文件目錄var監(jiān)控程序和工具程序存放的可變數(shù)據(jù)根文件系統(tǒng)中的文件在一個(gè)基本的Linux根文件系統(tǒng)中,應(yīng)包括如下的文件:鏈接庫設(shè)備文件系統(tǒng)應(yīng)用程序系統(tǒng)初始化文件以下的例子假設(shè)我們的目標(biāo)根文件系統(tǒng)位于宿主機(jī)的{TARGET_ROOTFS}目錄下。鏈接庫我們這里討論Glibc。Glibc鏈接庫位于${TARGET_ROOTFS}/lib目錄下,其中包括:實(shí)際的共享鏈接庫libLIBRARY_NAME-GLIBC_VERSION.so主修訂版本的符號鏈接libLIBRARY_NAME.so.MAJOR_REVISION_VERSION與版本無關(guān)的符號鏈接指向主修訂版本的符號鏈接libLIBRARY_NAME.so靜態(tài)鏈接庫libLIBRARY_NAME.a我們只需要將實(shí)際的共享鏈接庫和主修訂版本的符號鏈接的文件置入目標(biāo)板的根文件系統(tǒng)。還需要復(fù)制動態(tài)鏈接器及其符號鏈接:Ld-GLIBC_VERSION.so鏈接庫例子實(shí)際的共享鏈接庫libLIBRARY_NAME-GLIBC_VERSION.so主修訂版本的符號鏈接libLIBRARY_NAME.so.MAJOR_REVISION_VERSION動態(tài)鏈接器Ld-GLIBC_VERSION.soGlibc的鏈接庫組件ld:動態(tài)鏈接器libBrokenLocale:修正進(jìn)程,讓locale特性有問題的應(yīng)用程序得以正常執(zhí)行.libSegFault:用來捕捉內(nèi)存區(qū)段錯(cuò)誤以及進(jìn)行回溯的進(jìn)程libanl:異步名稱查詢進(jìn)程libc:主C鏈接庫libcrypt:密碼學(xué)庫,許多涉及認(rèn)證的應(yīng)用程序用到libdl:用來動態(tài)加載共享庫,使用了dlopen()之類的函數(shù)會用到libm:數(shù)學(xué)庫libresolv:域名解析庫libpthread:Linux的Posix1003.1c多線程庫libpthread_db:多線程調(diào)試庫libutil:登錄管理庫設(shè)備文件在Linux根文件系統(tǒng)中,所有設(shè)備文件(設(shè)備節(jié)點(diǎn))都放在/dev目錄下.對嵌入式系統(tǒng)來說,目標(biāo)板的/dev目錄并不需要像一般的Linux工作站那樣填入太多內(nèi)容,只需建立使系統(tǒng)能正常工作的必要條目即可.建立/dev條目建立/dev條目的方法有3種:手動建立/dev條目使用devfs自動建立/dev條目使用udev自動建立/dev條目手動建立/dev條目基本上,要使用mknod命令來建立每個(gè)條目.例如:#cd${TARGET_ROOTFS}/dev#mknod–m600memc11#mknod–m666nullc13#mknod–m666zeroc15#mknod–m644randomc15…
使用devfs自動建立/dev條目如果系統(tǒng)支持devfs,則可以在內(nèi)核配置的時(shí)候添加上devfs支持.這樣Linux系統(tǒng)啟動后,內(nèi)核就會在/dev目錄下自動建立/dev條目.使用udev自動建立/dev條目udev:一般用于linux2.6.13或更高版本的內(nèi)核上,在用戶空間自動建立/dev條目。它通過在sysfs的/class/和/block/目錄樹中查找一個(gè)稱為dev的文件,以確定所創(chuàng)建的設(shè)備節(jié)點(diǎn)文件的主次設(shè)備號。所以要使用udev,驅(qū)動必須為設(shè)備在sysfs中創(chuàng)建類接口及其dev屬性文件。使用udev:在內(nèi)核配置的時(shí)候添加上sysfs及tmpfs支持。下載udev軟件包,交叉編譯,然后并復(fù)制到目標(biāo)根文件系統(tǒng)中,最后配置好udev規(guī)則即可。系統(tǒng)應(yīng)用程序Linux繼承了UNIX極其豐富的命令集,標(biāo)準(zhǔn)的工作站或服務(wù)器發(fā)行套件都配備了數(shù)以千計(jì)的命令文件如果逐一交叉編譯這么多二進(jìn)制文件是很花時(shí)間和精力的,而且嵌入式系統(tǒng)也基本是不需要這么多二進(jìn)制文件的。在嵌入式系統(tǒng)上,我們只需要將命令集濃縮成僅僅實(shí)現(xiàn)必要功能的極少數(shù)應(yīng)用程序。使用Busybox生成工具集很小的應(yīng)用程序提供完整的工具集的功能Init進(jìn)程Shell文件系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)等等的工具集/Busybox的配置和交叉編譯在/downloads/
下載Busybox:busybox-1.1.0.tar.bz2解壓后,進(jìn)入配置菜單:
makemenuconfigBusybox的配置和交叉編譯Busybox的配置和交叉編譯選擇Busybox的編譯方式:BuildOptions BuildBusyBoxasastaticbinary(nosharedlibs)
缺省配置為使用鏈接庫配置交叉編譯器:BuildOptions[*]DoyouwanttobuildBusyBoxwithaCrossCompiler?(/usr/local/arm/3.4.1/bin/arm-linux-)CrossCompilerprefix安裝路徑:InstallationOptions
(./_install)BusyBoxinstallationprefixBusybox的配置和交叉編譯配置其他工具集:ArchivalUtilitiesCoreutilsConsoleUtilitiesDebianUtilitieEditorsFindingUtilitiesInitUtilitiesLogin/PasswordManagementUtilitiesMiscellaneousUtilitiesLinuxModuleUtilitiesNetworkingUtilitiesProcessUtilitiesShellsSystemLoggingUtilitiesLinuxSystemUtilitiesBusybox的配置和交叉編譯編譯Busybox:
#makedep
#make
#makeinstall編譯生成的目錄結(jié)構(gòu)(_install目錄下):/bin/linuxrc/sbin/usr/usr/bin/usr/sbin把系統(tǒng)應(yīng)用程序加入根文件系統(tǒng)#cd_install/#lsbinlinuxrcsbinusr#cp–arf*${TARGET_ROOTFS}/系統(tǒng)初始化內(nèi)核最后一個(gè)初始化動作就是啟動init程序。Init程序在終結(jié)系統(tǒng)啟動程序前會衍生各種應(yīng)用程序,并啟動若干關(guān)鍵的程序。大多數(shù)Linux系統(tǒng)使用的init跟SystemV的init相仿,配置方式也相似。要使用目標(biāo)板上init,需要加入適當(dāng)?shù)?etc/inittab文件,以及在/etc/rc.d目錄填入適當(dāng)?shù)奈募?etc/inittab將會為系統(tǒng)定義運(yùn)行級別/etc/rc.d目錄中的文件則用來定義每個(gè)運(yùn)行級別將會執(zhí)行哪
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年高中化學(xué)上學(xué)期第三周 氧化還原反應(yīng)說課稿
- 7 我們有新玩法 說課稿-2023-2024學(xué)年道德與法治二年級下冊統(tǒng)編版
- 2025二手車購買合同書
- 2025合同的履行、變更、轉(zhuǎn)讓、撤銷和終止
- 14 《窮人》說課稿-2024-2025學(xué)年六年級語文上冊統(tǒng)編版001
- 買方購車合同范本
- 公路修建合同范本
- 鋪設(shè)碎石土路面施工方案
- 輕鋼吊頂施工方案
- 路燈池施工方案
- 課件:《教育強(qiáng)國建設(shè)規(guī)劃綱要(2024-2035年)》學(xué)習(xí)宣講
- 課題申報(bào)參考:生活服務(wù)數(shù)字化轉(zhuǎn)型下社區(qū)生活圈建設(shè)理念、模式與路徑研究
- DCMM練習(xí)題練習(xí)試題
- 《工業(yè)化建筑施工階段碳排放計(jì)算標(biāo)準(zhǔn)》
- 廢舊保溫棉處置合同范例
- 2024年數(shù)據(jù)編織價(jià)值評估指南白皮書-Aloudata
- 托育園老師培訓(xùn)
- 人教版八年級英語上冊Unit1-10完形填空閱讀理解專項(xiàng)訓(xùn)練
- 脊柱外科護(hù)理進(jìn)修心得
- 4.1中國特色社會主義進(jìn)入新時(shí)代+課件-2024-2025學(xué)年高中政治統(tǒng)編版必修一中國特色社會主義
- 護(hù)理工作中的人文關(guān)懷
評論
0/150
提交評論