Unix文件知識講解
今天我們來學習一下Unix文件的知識。與DOS/Windows不同,Unix文件被刪除后很難恢復,這是由Unix獨特的文件系統(tǒng)結構決定的。所以,要想恢復這些文件,就需要另辟蹊徑。Unix文件系統(tǒng)的特殊性決定了它不能像Windows系統(tǒng)那樣恢復被刪除的文件。
Unix 文件目錄不像DOS/Windows那樣,文件即使被刪除之后仍保存有完整的文件名、文件長度、始簇號(即文件占有的第一個磁盤塊號)等重要信息。相反, 它的文件信息全部依靠一種被稱為i節(jié)點的數(shù)據(jù)結構來描述,而i節(jié)點在相應文件被刪除之后即被清空。
不過,需要說明的是,Unix系統(tǒng)下文件系統(tǒng)恢復的具體實現(xiàn)依賴于不同操作系統(tǒng)和不同版本的具體文件系統(tǒng)結構和磁盤塊分配算法(見附文)。本文只是試圖總結出一種一般性的思路和策略,限于篇幅,不能詳細討論它們的具體實現(xiàn)過程。
Unix文件系統(tǒng)結構
我們知道,Unix是以文件卷作為其文件系統(tǒng)存儲格式的,而不同的Unix系統(tǒng),文件卷格式是有差異的,甚至即使是同一Unix操作系統(tǒng)的不同版本,其文 件系統(tǒng)也未必完全相同,例如: SCO Unix 4.1版與5.0版文件系統(tǒng)結構就有明顯差異,但只要是Unix系統(tǒng),其文件卷的基本結構是一致的。
不管是什么Unix系統(tǒng),不管什么版本,其文件卷至少包括引導塊、超級塊、i節(jié)點表、數(shù)據(jù)區(qū)等幾個部分。
1. Unix文件引導塊
位于文件卷最開始的第一扇區(qū),這512字節(jié)是文件系統(tǒng)的引導代碼,為根文件系統(tǒng)所特有,其他文件系統(tǒng)這512字節(jié)為空。
2. Unix文件超級塊
位于文件系統(tǒng)第二扇區(qū),緊跟引導塊之后,用于描述本文件系統(tǒng)的結構。如i節(jié)點長度、文件系統(tǒng)大小等,其結構存放于/usr/include/sys/filsys.h中,其結構如下:
struct filsys
{ ushort s_isize; /*磁盤索引節(jié)點區(qū)所占用的數(shù)據(jù)塊數(shù)*/
daddr_t s_fsize; /*整個文件系統(tǒng)的數(shù)據(jù)塊數(shù)*/
short s_nfree; /*在空閑塊登錄表中當前登記的空閑塊數(shù)目*/
daddr_t s_free[NICFREE]; /*空閑塊登記表*/
short s_ninode; /*空閑索引節(jié)點數(shù)*/
ino_t s_inode[NICINOD]; /*空閑節(jié)點登記表*/
char s_flock; /*加鎖標志位*/
char s_ilock; /*節(jié)點加鎖標志位*/
char s_fmod; /*超級塊修改標志*/
char s_ronly; /*文件系統(tǒng)只讀標志*/
time_t s_time; /*超級塊上次修改的時間*/
short s_dinfo[4]; /*設備信息*/
daddr_t s_tfree; /*空閑塊總數(shù)*/
ino_t s_tinode; /*空閑節(jié)點總數(shù)*/
char s_fname[6]; /*文件系統(tǒng)名稱*/
char s_fpack[6];
long s_fill[13]; /*填空位*/
long s_magic; /*指示文件系統(tǒng)的幻數(shù)*/
long s_type; /*新文件系統(tǒng)類型*/ };
3. Unix文件i節(jié)點表
i節(jié)點表存放在超級塊之后,其長度是由超級塊中的s_isize字段決定的,其作用是用來描述文件的屬性、長度、屬主、屬組、數(shù)據(jù)塊表等,其數(shù)據(jù)結構在/usr/include/sys/ino.h中,如下:
- struct dinode
- { ushort di_mode;
- short di_nlink;
- ushort di_uid;
- ushort di_gid;
- off_t di_size;
- char di_addr[40];
- time_t di_atime;
- time_t di_mtime;
- time_t di_ctime; };
4. Unix文件目錄結構
Unix所有文件均存放于目錄中,目錄本身也是一個文件。目錄存放文件的機制如下: 首先,目錄文件本身也象普通文件一樣,占用一個索引節(jié)點; 其次,由這個索引節(jié)點得到目錄內容的存放位置; 再次,從其內容中取出一個個的文件名和它對應的節(jié)點號,從而訪問一個文件。
由此可知文件名是依靠目錄來描述的,文件的內容和其他信息則由索引節(jié)點來描述。
Unix文件的知識,我們就介紹到這里了。
【編輯推薦】