![Linuxinode學(xué)習(xí)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/781c97d8-a9b3-4b8b-bd9b-84d7c3a2350d/781c97d8-a9b3-4b8b-bd9b-84d7c3a2350d1.gif)
![Linuxinode學(xué)習(xí)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/781c97d8-a9b3-4b8b-bd9b-84d7c3a2350d/781c97d8-a9b3-4b8b-bd9b-84d7c3a2350d2.gif)
![Linuxinode學(xué)習(xí)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/781c97d8-a9b3-4b8b-bd9b-84d7c3a2350d/781c97d8-a9b3-4b8b-bd9b-84d7c3a2350d3.gif)
![Linuxinode學(xué)習(xí)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/781c97d8-a9b3-4b8b-bd9b-84d7c3a2350d/781c97d8-a9b3-4b8b-bd9b-84d7c3a2350d4.gif)
![Linuxinode學(xué)習(xí)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/781c97d8-a9b3-4b8b-bd9b-84d7c3a2350d/781c97d8-a9b3-4b8b-bd9b-84d7c3a2350d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Linuxinode學(xué)習(xí)在Linux文件系統(tǒng)中,很多人對(duì)Inode都不太明白,今天我就和大家一起來分享一下我對(duì)Inode的認(rèn)識(shí),如果有理解錯(cuò)誤的地方,請(qǐng)大家多多批評(píng)指點(diǎn)。先看看Inode的結(jié)構(gòu)圖再來了解一下文件系統(tǒng)如何存取文件的1、根據(jù)文件名,通過Directory里的對(duì)應(yīng)關(guān)系,找到文件對(duì)應(yīng)的Inodenumber2、再根據(jù)Inodenumber讀取到文件的Inodetable3、再根據(jù)Inodetable中的Pointer讀取到相應(yīng)的Blocks這里有一個(gè)重要的內(nèi)容,就是Directory,他不是我們通常說的目錄,而是一個(gè)列表,記錄了一個(gè)文件/目錄名稱對(duì)應(yīng)的Inodenumber。如下圖Di
2、rectory:Adirectoryisamappingbetweenthehumannameforthefileandthecomputer'sinodenumber.所以說,這個(gè)Directory不是文件,我們可以看作是文件系統(tǒng)中的一個(gè)屬性,只是用來關(guān)鍵文件名與Inodenumber。這個(gè)一定要理解好,否則后面關(guān)于硬鏈接的內(nèi)容,就不容易理解了。我在一天一點(diǎn)學(xué)習(xí)Linux之文件與目錄權(quán)限的基本概念中講到第二欄表示的是有多少文件連接到inode如果是一個(gè)文件,此時(shí)這一字段表示這個(gè)文件所具有的硬鏈接數(shù),如果是一個(gè)目錄,則此字段表示該目錄所含子目錄的個(gè)數(shù)。現(xiàn)在是不是容易理解了?如果你還不是
3、很明白,那么下面我們就再通過實(shí)例讓大家明白。我們以RHEL6系統(tǒng)為例在根目錄下創(chuàng)建一個(gè)test目錄,我們進(jìn)入此目錄,進(jìn)行操作。rootyufeitest#pwd/testrootyufeitest#touchtestfilerootyufeitest#mkdirtestdir創(chuàng)建實(shí)驗(yàn)文件和目錄rootyufeitest#ls-litotal4977drwxr-xr-x.2rootroot4096Apr516:48testdir976-rw-r-r-.1rootroot0Apr516:47testfile查看到文件與目錄的Inode和inodecount分別為977<>
4、;2<>testdir976<>1<>testfile現(xiàn)在目錄的鏈接數(shù)為2,文件的鏈接數(shù)為1。為什么會(huì)這樣呢?其實(shí)很好理解。對(duì)于目錄而言,每個(gè)目錄里面肯定會(huì)有兩個(gè)特殊目錄,那就是.和.這兩個(gè)目錄,我們前面的課程中也講到,.表示當(dāng)前的目錄,而.則是表示上層目錄。我們也知道,在Linux系統(tǒng)中,是從根來開始查找的,要想找到某個(gè)目錄,必需要先找到他的上層目錄,所以說,空目錄(嚴(yán)格的來說,不能叫空目錄)是有兩個(gè)鏈接到相應(yīng)的Inodenumber的。作為文件很明顯,他只有一個(gè)鏈接到相應(yīng)的Inodenumber。也不用多說
5、,下面我們就來看看這個(gè)鏈接數(shù)是如何改變的。繼續(xù)上面的操作rootyufeitest#lntestfiletestfile.hardrootyufeitest#ln-stestfiletestfile.soft對(duì)testfile建立一個(gè)硬鏈接和一個(gè)軟鏈接rootyufeitest#ls-il977 drwxr-xr-x. 2 root root 4096 Aprtotal4976 -rw-r-r-. 2 root root976 -rw-r-r-. 2 root root978 lrwxrwxrwx. 1 root root-> testfile再查看文件和目錄的屬性,516:48
6、testdir0Apr516:47testfile0Apr516:47testfile.hard8Apr517:03testfile.soft我們就發(fā)現(xiàn):創(chuàng)建一個(gè)硬鏈接后,testfile的inodecount增加了一個(gè)。而且testfile和testfile.hard這兩個(gè)的Inodenumber是一樣的。這個(gè)硬鏈接就是重新創(chuàng)建Inode。實(shí)質(zhì)就是在Directory中增加了一個(gè)新的對(duì)應(yīng)關(guān)系。通過這個(gè)例子,你是不是更清楚了,這個(gè)Inodecount的含義了。他就是指,一個(gè)Inode對(duì)應(yīng)了多少個(gè)文件名。F面我們?cè)賮砜纯从叉溄拥钠渌攸c(diǎn)Tue Aprrootyufei#watch-n1"
7、;df-i;df"Every1.0s:df-i;df521:52:532011FilesystemInodesIUsedIFree IUse%Mountedon/dev/sda196099210541585557711% /tmpfs63946639451%/dev/shmFilesystem1K-blocksUsed Available Use%Mountedon/dev/sda1151187282747612 1160311620%/tmpfs2557842557840%/dev/shm用上面的命令可以實(shí)時(shí)查看系統(tǒng)中所剩的block和inode的變化數(shù)量。建議大家不要用deump
8、e2fs和tune2fs這兩個(gè)命令,如果使用他們來查看的話,將會(huì)很郁悶?zāi)銜?huì)發(fā)現(xiàn),你無論怎么創(chuàng)建文件或?qū)ξ募懭雰?nèi)容,Inode和block的值都不會(huì)變,除非你每操作一次,重新啟動(dòng)一次系統(tǒng),而用了上面的命令,就是第秒鐘監(jiān)視他們的變化情況。關(guān)于df的命令使用,大家可以自行查看幫助進(jìn)行學(xué)習(xí)。當(dāng)然還有du這個(gè)命令,他們都和文件系統(tǒng)有關(guān)。我們?cè)賮韯?chuàng)建一個(gè)硬鏈接rootyufeitest#ls-li5 16:48 testdirtotal4977drwxr-xr-x.2rootroot4096Apr976 -rw-r-r-. 2 root root0 Apr5 16:47 testfile976 -rw-
9、r-r-. 2 root root0 Apr5 16:47 testfile.hard978 lrwxrwxrwx. 1 root root8 Apr 5 17:03 testfile.soft->testfilerootyufeitest#lntestfiletestfile.hard1rootyufeitest#ls-li5 16:48 testdirtotal4977drwxr-xr-x.2rootroot4096Apr976 -rw-r-r-. 3 root root0 Apr5 16:47 testfile976 -rw-r-r-. 3 root root0 Apr5
10、16:47 testfile.hard976 -rw-r-r-. 3 root root0 Apr5 16:47 testfile.hard1978 lrwxrwxrwx. 1 root root8 Apr 5 17:03 testfile.soft->testfile可以再觀察一下Inodecount和Inodenumber的對(duì)應(yīng)關(guān)系。inodes和blocks的變化rootyufei#watch-n1"df-i;df"Every 1.0s: df -i;df 5 21:53:38 2011FilesystemMounted on/dev/sda1 tmpf
11、s/dev/shmFilesystemInodes IUsedTue AprIFree IUse%960992 105415 85557711% /639461K-blocks1639451%Used Available Use%Mountedon/dev/sda11511872827476121160311620%/tmpfs25578402557840%/dev/shm我們發(fā)現(xiàn),inodes和blocks是沒有減少的,所以說,硬鏈接是不會(huì)占用磁盤的空間的。如果說刪除硬鏈接的話,就會(huì)改變Inodecount的數(shù)量。硬鏈接還有其他的兩個(gè)特性:不能跨Filesystem也不能link目錄。下面再
12、來看看這個(gè)軟鏈接rootyufeitest#ls-iltestfile.softtestfile976-rw-r-r-.3rootroot0Apr521:50testfile978lrwxrwxrwx.1rootroot8Apr521:52testfile.soft->testfile他的Inodenumber和原文件不一樣。而且大小也發(fā)生了變化??梢?,這個(gè)軟鏈接是重新建立了一個(gè)文件,而文件是指向到原文件,而不是指向原Inode。當(dāng)然他會(huì)占用掉inode與block。當(dāng)我們刪除了源文件后,鏈接文件不能獨(dú)立存在,雖然仍保留文件名,但我們卻不能查看軟鏈接文件的內(nèi)容了。但軟鏈接是可以跨
13、文件系統(tǒng),而且是可以鏈接目錄。他就相當(dāng)于windows系統(tǒng)下的快捷方式一樣。通過這個(gè)特性,我們可以通過軟鏈接解決某個(gè)分區(qū)inodeconut不足的問題(軟鏈接到另一個(gè)inodecount足夠多的分區(qū))。接下來,我們?cè)賮矸治鲆幌聫?fù)制文件、移動(dòng)文件和刪除文件對(duì)inode的影響rootyufei#watch-n1"df-i;df"Every1.0s:df-i;dfTueApr521:57:382011FilesystemInodesIUsedIFreeIUse%Mountedon/dev/sda196099210541585557711%/tmpfs/dev/shm6394616
14、39451%Filesystem1K-blocksUsed Available Use%Mountedon/dev/sda1151187282747612 1160311620%/tmpfs2557842557840%/dev/shmrootyufeitest#ls-li5 16:48 testdirtotal4977drwxr-xr-x.2rootroot4096Apr976 -rw-r-r-. 3 root root0 Apr5 18:54 testfile976 -rw-r-r-. 3 root root0 Apr5 18:54 testfile.hard976 -rw-r-r-. 3
15、root root0 Apr5 18:54 testfile.hard1978 lrwxrwxrwx. 1 root root8 Apr 5 17:03 testfile.soft->testfile我們先記錄以上的信息先看復(fù)制文件的情況rootyufeitest#cptestfiletestfile.cprootyufeitest#ls-li976-rw-r-r-.3rootroot0Apr521:50testfile979-rw-r-r-.1rootroot0Apr521:58testfile.cp我們只對(duì)比這兩個(gè)文件,發(fā)現(xiàn)Inodenumber不一樣,我們?cè)賮砜纯磇node
16、s和blocks的剩余情況Every1.0s:df-i;dfTueApr522:02:492011FilesystemInodesIUsedIFreeIUse%Mountedon/dev/sda196099210541685557611%/tmpfs639461639451%/dev/shmFilesystem1K-blocksUsedAvailableUse%Mountedon/dev/sda11511872827476201160310820%/tmpfs25578402557840%/dev/shm發(fā)現(xiàn)inodes減少了一個(gè),而blocks也少了,這就說明,復(fù)制文件是創(chuàng)建文件,并占Ino
17、de和Block的。文件創(chuàng)建過程是:先查找一個(gè)空的Inode,寫入新的Inodetable,創(chuàng)建Directory,對(duì)應(yīng)文件名,向block中寫入文件內(nèi)容關(guān)于移動(dòng)文件和刪除文件的實(shí)驗(yàn),大家可以自己動(dòng)手來實(shí)踐吧。我直接給出相應(yīng)的說明。移動(dòng)文件,他分兩種情況:在同一個(gè)文件系統(tǒng)中移動(dòng)文件時(shí)創(chuàng)建一個(gè)新的文件名和Inode的對(duì)應(yīng)關(guān)系(也就是在Directory中寫入信息),然后在Directory中刪除舊的信息,更新CTIME,其他的信息如Inode等等均無任何影響在不同文件系統(tǒng)移動(dòng)文件時(shí)先查找一個(gè)空的Inode,寫入新的Inodetable,創(chuàng)建Directory中的對(duì)應(yīng)關(guān)系,向block中寫入文件內(nèi)
18、容,同時(shí)還會(huì)更改CTIME。刪除文件他實(shí)質(zhì)上就是減少linkcount,當(dāng)linkcount為0時(shí),就表示這個(gè)Inode可以使用,并把Block標(biāo)記為可以寫,但并沒有清除Block里面數(shù)據(jù),除非是有新的數(shù)據(jù)需要用到這個(gè)block。最后我們來做個(gè)總結(jié):1、一個(gè)Inode對(duì)應(yīng)一個(gè)文件,而一個(gè)文件根據(jù)其大小,會(huì)占用多塊blocks。2、更為準(zhǔn)確的來說,一個(gè)文件只對(duì)應(yīng)一個(gè)Inode。因?yàn)橛叉溄悠鋵?shí)不是創(chuàng)建新文件,只是在Directory中寫入了新的對(duì)應(yīng)關(guān)系而已。3、當(dāng)我們刪除文件的時(shí)候,只是把Inode標(biāo)記為可用,文件在block中的內(nèi)容是沒有被清除的,只有在有新的文件需要占用block的時(shí)候,才會(huì)被
19、覆蓋。附錄:kernel部分inode數(shù)據(jù)結(jié)構(gòu)列表*、*索引節(jié)點(diǎn)對(duì)象由inode結(jié)構(gòu)體表示,定義文件在中*/structinodestructhlist_nodei_hash;哈希表*/structlist_headi_list;引節(jié)點(diǎn)鏈表*/structlist_headi_dentry;目錄項(xiàng)鏈表*/unsignedlongi_ino;節(jié)點(diǎn)號(hào)*/atomic_ti_count;/*引用記數(shù)*/umode_ti_mode;/*訪問權(quán)限控制*/linux/fs.h/*/* 索/*/*/*unsignedinti_nlink;硬鏈接數(shù)*/uid_ti_uid;/*使用者id*/gid_ti_gi
20、d;/*使用者id組*/kdev_ti_rdev;/*實(shí)設(shè)備標(biāo)識(shí)符*/loff_ti_size;/*以字節(jié)為單位的文件大小*/structtimespeci_atime;/*最后訪問時(shí)間*/structtimespeci_mtime;/*最后修改(modify)時(shí)間*/structtimespeci_ctime;/*最后改變(change)時(shí)間*/unsignedinti_blkbits;/*以位為單位的塊大小*/unsignedlongi_blksize;/*以字節(jié)為單位的塊大小*/unsignedlongi_version;/*版本號(hào)*/unsignedlongi_blocks;/*文件的
21、塊數(shù)*/unsignedshorti_bytes;/*使用的字節(jié)數(shù)*/spinlock_ti_lock;/*自旋鎖*/structrw_semaphorei_alloc_sem;/*索引節(jié)點(diǎn)信號(hào)量*/structinode_operations*i_op;/*索引節(jié)點(diǎn)操作表*/structfile_operations*i_fop;/*默認(rèn)的索引節(jié)點(diǎn)操作*/structsuper_block*i_sb;/*相關(guān)的超級(jí)塊*/structfile_lock*i_flock;/*文件鎖鏈表*/structaddress_space*i_mapping;/*相關(guān)的地址映射*/structaddress
22、_spacei_data;/*設(shè)備地址映射*/structdquot*i_dquotMAXQUOTAS;/*節(jié)點(diǎn)的磁盤限額*/struct listheadi_devices;/* 塊設(shè)備鏈表*/structpipe_inode_info*i_pipe;/*管道信息*/structblock_device*i_bdev;/*塊設(shè)備驅(qū)動(dòng)*/unsignedlongi_dnotify_mask;/*目錄通知掩碼*/structdnotify_struct*i_dnotify;/*目錄通知*/unsignedlongi_state;/*狀態(tài)標(biāo)志*/unsignedlongdirtied_when;/
23、*首次修改時(shí)間*/unsignedinti_flags;/*文件系統(tǒng)標(biāo)志*/unsignedchari_sock;/*可能是個(gè)套接字吧*/atomic_ti_writecount;/*寫者記數(shù)*/void*i_security;/*u32安全模塊*/i_generation;/*索引節(jié)點(diǎn)版本號(hào)*/unionvoid*generic_ip;/*文件特殊信息*/u;/*索引節(jié)點(diǎn)的操作inode_operations定義在linux/fs.h中*/structinode_operationsint(*create)(structinode*,structdentry*,int);/*VFS通過系統(tǒng)調(diào)
24、用create()和open()來調(diào)用該函數(shù),從而為dentry對(duì)象創(chuàng)建一個(gè)新的索引節(jié)點(diǎn)。在創(chuàng)建時(shí)使用mode制定初始模式*/structdentry*(*lookup)(structinode*,structdentry*);/*該韓式在特定目錄中尋找索引節(jié)點(diǎn),該索引節(jié)點(diǎn)要對(duì)應(yīng)于dentry中給出的文件名*/int(*link)(structdentry*,structinode*,structdentry*);/*該函數(shù)被系統(tǒng)調(diào)用link()電泳,用來創(chuàng)建硬連接。硬鏈接名稱由dentry參數(shù)指定,連接對(duì)象是dir目錄中l(wèi)d_dentry目錄想所代表的文件*/int(*unlink)(str
25、uctinode*,structdentry*);/*該函數(shù)被系統(tǒng)調(diào)用unlink()調(diào)用,從目錄dir中刪除由目錄項(xiàng)dentry制動(dòng)的索引節(jié)點(diǎn)對(duì)象*/int(*symlink)(structinode*,structdentry*,constchar*);/*該函數(shù)被系統(tǒng)電泳symlik()調(diào)用,創(chuàng)建符號(hào)連接,該符號(hào)連接名稱由symname指定,連接對(duì)象是dir目錄中的dentry目錄項(xiàng)*/int(*mkdir)(structinode*,structdentry*,int);/*該函數(shù)被mkdir()調(diào)用,創(chuàng)建一個(gè)新魯姆。創(chuàng)建時(shí)使用mode制定的初始模式*/int(*rmdir)(stru
26、ctinode*,structdentry*);/*該函數(shù)被系統(tǒng)調(diào)用rmdir()調(diào)用,刪除dir目錄中的dentry目錄項(xiàng)代表的文件*/int(*mknod)(structinode*,structdentry*,int,dev_t);/*該函數(shù)被系統(tǒng)調(diào)用mknod()調(diào)用,創(chuàng)建特殊文件(設(shè)備文件、命名管道或套接字)。要?jiǎng)?chuàng)建的文件放在dir目錄中,其目錄項(xiàng)問dentry,關(guān)聯(lián)的設(shè)備為rdev,初始權(quán)限由mode指定*/int(*rename)(structinode*,structdentry*structinode*,structdentry*);/*VFS調(diào)用該函數(shù)來移動(dòng)文件。文件源路徑在old_dir目錄中,源文件由old_dentry目錄項(xiàng)所指定,目標(biāo)路徑在new_dir目錄中,目標(biāo)文件由new_dentry指定*/int(*readlink)(structdentry*,char*,int);/*該函數(shù)被系統(tǒng)調(diào)用readlink()調(diào)用,拷貝數(shù)據(jù)到特定的緩沖buffer中。拷貝的數(shù)據(jù)來自dentry指定的符號(hào)鏈接,最大拷貝大小可達(dá)到buflen字節(jié)*/int(*follow_link)(structdentry*,structnameidata*);/*該函數(shù)由VFS調(diào)用,從一個(gè)符號(hào)連接查找他指向的索引節(jié)點(diǎn),由dentry指向的連接被解析*/int(*put_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物聯(lián)網(wǎng)時(shí)代的移動(dòng)設(shè)備中嵌入式開發(fā)新機(jī)遇
- 環(huán)??萍荚谕苿?dòng)綠色能源發(fā)展中的作用
- 現(xiàn)代家庭教育與孩子未來職業(yè)規(guī)劃的聯(lián)動(dòng)
- Unit 5 The colourful world Part C Reading time大單元整體說課稿表格式-2024-2025學(xué)年人教PEP版(2024)英語三年級(jí)上冊(cè)001
- Unit 1 Wish you were here Integrated skills (1) 說課稿-2024-2025學(xué)年高中英語牛津譯林版(2020)選擇性必修第三冊(cè)
- 2023三年級(jí)英語下冊(cè) Unit 10 Is he a farmer第2課時(shí)說課稿 湘少版
- Unit 4 History and Traditions Reading for Writing 說課稿-2024-2025學(xué)年高中英語人教版(2019)必修第二冊(cè)
- 2024年五年級(jí)語文下冊(cè) 第六單元 17 跳水說課稿 新人教版
- 《3 熱空氣和冷空氣》說課稿-2023-2024學(xué)年科學(xué)三年級(jí)上冊(cè)蘇教版
- 2025地質(zhì)災(zāi)害治理工程施工合同
- 2024-2025學(xué)年成都高新區(qū)七上數(shù)學(xué)期末考試試卷【含答案】
- 企業(yè)員工食堂管理制度框架
- 電力溝施工組織設(shè)計(jì)-電纜溝
- 《法律援助》課件
- 小兒肺炎治療與護(hù)理
- 《高處作業(yè)安全》課件
- 春節(jié)后收心安全培訓(xùn)
- 小學(xué)教師法制培訓(xùn)課件
- 電梯操作證及電梯維修人員資格(特種作業(yè))考試題及答案
- 市政綠化養(yǎng)護(hù)及市政設(shè)施養(yǎng)護(hù)服務(wù)方案(技術(shù)方案)
- 2024年山東鐵投集團(tuán)招聘筆試參考題庫含答案解析
評(píng)論
0/150
提交評(píng)論