歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix資訊 >> Unix文件知識講解

Unix文件知識講解

日期:2017/3/6 11:38:59   编辑:Unix資訊

今天我們來學習一下Unix文件的知識。與DOS/Windows不同,Unix文件被刪除後很難恢復,這是由Unix獨特的文件系統結構決定的。所以,要想恢復這些文件,就需要另辟蹊徑。Unix文件系統的特殊性決定了它不能像Windows系統那樣恢復被刪除的文件。

Unix 文件目錄不像DOS/Windows那樣,文件即使被刪除之後仍保存有完整的文件名、文件長度、始簇號(即文件占有的第一個磁盤塊號)等重要信息。相反, 它的文件信息全部依靠一種被稱為i節點的數據結構來描述,而i節點在相應文件被刪除之後即被清空。

不過,需要說明的是,Unix系統下文件系統恢復的具體實現依賴於不同操作系統和不同版本的具體文件系統結構和磁盤塊分配算法(見附文)。本文只是試圖總結出一種一般性的思路和策略,限於篇幅,不能詳細討論它們的具體實現過程。

Unix文件系統結構

我們知道,Unix是以文件卷作為其文件系統存儲格式的,而不同的Unix系統,文件卷格式是有差異的,甚至即使是同一Unix操作系統的不同版本,其文 件系統也未必完全相同,例如: SCO Unix 4.1版與5.0版文件系統結構就有明顯差異,但只要是Unix系統,其文件卷的基本結構是一致的。

不管是什麼Unix系統,不管什麼版本,其文件卷至少包括引導塊、超級塊、i節點表、數據區等幾個部分。

1. Unix文件引導塊

位於文件卷最開始的第一扇區,這512字節是文件系統的引導代碼,為根文件系統所特有,其他文件系統這512字節為空。

2. Unix文件超級塊

位於文件系統第二扇區,緊跟引導塊之後,用於描述本文件系統的結構。如i節點長度、文件系統大小等,其結構存放於/usr/include/sys/filsys.h中,其結構如下:
struct filsys
{ ushort s_isize; /*磁盤索引節點區所占用的數據塊數*/
daddr_t s_fsize; /*整個文件系統的數據塊數*/
short s_nfree; /*在空閒塊登錄表中當前登記的空閒塊數目*/
daddr_t s_free[NICFREE]; /*空閒塊登記表*/
short s_ninode; /*空閒索引節點數*/
ino_t s_inode[NICINOD]; /*空閒節點登記表*/
char s_flock; /*加鎖標志位*/
char s_ilock; /*節點加鎖標志位*/
char s_fmod; /*超級塊修改標志*/
char s_ronly; /*文件系統只讀標志*/
time_t s_time; /*超級塊上次修改的時間*/
short s_dinfo[4]; /*設備信息*/
daddr_t s_tfree; /*空閒塊總數*/
ino_t s_tinode; /*空閒節點總數*/
char s_fname[6]; /*文件系統名稱*/
char s_fpack[6];
long s_fill[13]; /*填空位*/
long s_magic; /*指示文件系統的幻數*/
long s_type; /*新文件系統類型*/ };

3. Unix文件i節點表

i節點表存放在超級塊之後,其長度是由超級塊中的s_isize字段決定的,其作用是用來描述文件的屬性、長度、屬主、屬組、數據塊表等,其數據結構在/usr/include/sys/ino.h中,如下:

  1. struct dinode
  2. { ushort di_mode;
  3. short di_nlink;
  4. ushort di_uid;
  5. ushort di_gid;
  6. off_t di_size;
  7. char di_addr[40];
  8. time_t di_atime;
  9. time_t di_mtime;
  10. time_t di_ctime; };

4. Unix文件目錄結構

Unix所有文件均存放於目錄中,目錄本身也是一個文件。目錄存放文件的機制如下: 首先,目錄文件本身也象普通文件一樣,占用一個索引節點; 其次,由這個索引節點得到目錄內容的存放位置; 再次,從其內容中取出一個個的文件名和它對應的節點號,從而訪問一個文件。

由此可知文件名是依靠目錄來描述的,文件的內容和其他信息則由索引節點來描述。

Unix文件的知識,我們就介紹到這裡了。

Copyright © Linux教程網 All Rights Reserved