1. 程式人生 > >關於Linux系統中“目錄項”的解釋

關於Linux系統中“目錄項”的解釋

        每個檔案除了有一個索引節點inode資料結構外,還有一個目錄項dentry(directory enrty)資料結構。dentry 結構中有個d_inode指標指向相應的inode結構。讀者也許會問,既然inode結構和dentry結構都是對檔案各方面屬性的描述,那為什麼不把這兩個結構“合而為一”呢?這是因為二者所描述的目標不同,dentry結構代表的是邏輯意義上的檔案,所描述的是檔案邏輯上的屬性,因此,目錄項物件在磁碟上並沒有對應的映像;而inode結構代表的是物理意義上的檔案,記錄的是物理上的屬性,對於一個具體的檔案系統(如Ext2),Ext2_ inode結構在磁碟上就有對應的映像。所以說,一個索引節點物件可能對應多個目錄項物件。

        dentry 的定義在include/linux/dcache.h中:

struct dentry {
 
       atomic_t d_count;        /* 目錄項引用計數器 */
 
       unsigned int d_flags;    /* 目錄項標誌 */
 
       struct inode  * d_inode;   /* 與檔名關聯的索引節點 */
 
       struct dentry * d_parent;       /* 父目錄的目錄項 */
 
       struct list_head d_hash;        /* 目錄項形成的雜湊表 */
 
       struct list_head d_lru;         /*未使用的 LRU 連結串列 */
 
      struct list_head d_child;       /*父目錄的子目錄項所形成的連結串列 */
 
     struct list_head d_subdirs;     /* 該目錄項的子目錄所形成的連結串列*/
 
     struct list_head d_alias;       /* 索引節點別名的連結串列*/
 
     int d_mounted;                  /* 目錄項的安裝點 */
 
     struct qstr d_name;             /* 目錄項名(可快速查詢) */
 
     unsigned long d_time;           /* 由 d_revalidate函式使用 */
 
     struct dentry_operations  *d_op; /* 目錄項的函式集*/
 
     struct super_block * d_sb;      /* 目錄項樹的根 (即檔案的超級塊)*/
 
     unsigned long d_vfs_flags; 
 
     void * d_fsdata;                /* 具體檔案系統的資料 */
 
     unsigned char d_iname[DNAME_INLINE_LEN]; /* 短檔名 */
 
};

下面對dentry結構給出進一步的解釋。

        一個有效的dentry結構必定有一個inode結構,這是因為一個目錄項要麼代表著一個檔案,要麼代表著一個目錄,而目錄實際上也是檔案。所以,只要dentry結構是有效的,則其指標d_inode必定指向一個inode結構。可是,反過來則不然,一個inode卻可能對應著不止一個dentry結構;也就是說,一個檔案可以有不止一個檔名或路徑名。這是因為一個已經建立的檔案可以被連線(link)到其他檔名。所以在inode結構中有一個佇列i_dentry,凡是代表著同一個檔案的所有目錄項都通過其dentry結構中的d_alias域掛入相應inode結構中的i_dentry佇列。

    在核心中有一個雜湊表dentry_hashtable ,是一個list_head的指標陣列。一旦在記憶體中建立起一個目錄節點的dentry 結構,該dentry結構就通過其d_hash域鏈入雜湊表中的某個佇列中。

      核心中還有一個佇列dentry_unused,凡是已經沒有使用者(count域為0)使用的dentry結構就通過其d_lru域掛入這個佇列。

        Dentry結構中除了d_alias 、d_hash、d_lru三個佇列外,還有d_vfsmnt、d_child及d_subdir三個佇列。其中d_vfsmnt僅在該dentry為一個安裝點時才使用。另外,當該目錄節點有父目錄時,則其dentry結構就通過d_child掛入其父節點的d_subdirs佇列中,同時又通過指標d_parent指向其父目錄的dentry結構,而它自己各個子目錄的dentry結構則掛在其d_subdirs域指向的佇列中。

從上面的敘述可以看出,一個檔案系統中所有目錄項結構或組織為一個雜湊表,或組織為一顆樹,或按照某種需要組織為一個連結串列,這將為檔案訪問和檔案路徑搜尋奠定下良好的基礎。


相關推薦

關於Linux系統目錄”的解釋

        每個檔案除了有一個索引節點inode資料結構外,還有一個目錄項dentry(directory enrty)資料結構。dentry 結構中有個d_inode指標指向相應的inode結構。讀者也許會問,既然inode結構和dentry結構都是對檔案各方面屬性的

linux系統部署目,驗證碼不能正常顯示,而windows下面的tomcat下運行,驗證碼能正常顯示,之解決辦法

windows 解決辦法 ali -a 修改 不能 項目 clas bsp linux下驗證碼功能不能正常顯示 步驟方法:1、修改${TOMCAT_HOME}/bin/catalina.sh (windows修改catalina.bat)。2、查找到-Djava.io.tm

Linux系統目錄詳解

1、Linux檔案系統的層次結構        在Linux或Unix作業系統中,所有的檔案和目錄都被組織成以一個根節點開始的倒置的樹狀結構。        檔案系統的最頂層是由根目錄開始的,系統使用”/“來表示根目錄。在根目錄之下的既可以是目錄,也可以是檔案,而每一個目錄

linux 系統的 /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin 目錄的區別

。。 process pre this 用戶 unix table mount sent 先來段英文的: /bin This directory contains executable programs which are needed in single user

Linux系統/opt 和 /usr目錄

manual test 文件 data AI folder and 適合 ogre 重點:usr是Unix Software Resource的縮寫,即“UNIX操作系統軟件資源”所放置的目錄。 下面是個人找到的適合類似我這種從Windows轉向Linux小白的文章。 Re

Linux系統各種系統日誌檔案主要存放在系統哪個目錄

/var/log/message 系統啟動後的資訊和錯誤日誌,是Red Hat Linux中最常用的日誌之一 /var/log/secure 與安全相關的日誌資訊 /var/log/maillog 與郵件相關的日誌資訊 /var/log/cron 與定時任務相關的日誌資訊 /va

linux系統交換區間(swap file)的解釋

  Swap的調整對Linux伺服器,特別是Web伺服器的效能至關重要。通過調整Swap,有時可以越過系統性能瓶頸,節省系統升級費用。Swap空間的作用可簡單描述為:當系統的實體記憶體不夠用的時候,就需要將實體記憶體中的一部分空間釋放出來,以供當前執行的程式使用。這裡的s

VMware下的Linux系統Windows的共享目錄,不支援建立軟連線

【問題】  在編譯VMware下的Linux系統對從Windows中共享過來的檔案,進行編譯的時候,遇到:  ln: creating symbolic link XXXXXX : Operation not supported 【環境】 VmWare的Linux + Windows XP + vmhgf

Linux系統 查詢目錄下的所有檔案是否含有某個字串

查詢目錄下的所有檔案中是否含有某個字串 find .|xargs grep -ri "IBM" 查詢目錄下的所有檔案中是否含有某個字串,並且只打印出檔名 find .|xargs grep -ri "IBM" -l 1.正則表示式    (1)正則表示式一般用來描述文字模式

Linux系統常見的目錄名稱以及相應內容

share align root table ext 共享文件 開機過程 ali 數據文件 目錄名稱 應放置文件的內容 /boot 開機所需文件——內核、開機菜單以及所需配置文件等等 /dev 以文件形式存放任何

老男孩教育每日一題-2017年5月12日-磁盤知識點:linux系統LVM配置實現方法?

邏輯卷管理 磁盤 每日一題 1.題目老男孩教育每日一題-2017年5月12日-磁盤知識點:linux系統中LVM配置實現方法?2.參考答案01:將一個或多個物理分區創建為一個PV# pvcreate /dev/sdb{1,2} Physical volume "/dev/sdb1" success

linux系統定時任務

linu tab 一次 腳本 lin edi 路徑 執行 表示 1、查看所有定時任務:命令:“crontab -l” 數字意思解釋如下:從左到右,依次是:分、時、日、月、星期。 2、編輯定時執行計劃:命令:"crontab -e" ,e表示edit修改的意思。 3、修

Linux 系統這樣修復 SambaCry 漏洞

windows 服務器 解決方案 linux 非官方 導讀Samba 很久以來一直是為 linux 系統上的 Windows 客戶端提供共享文件和打印服務的標準。家庭用戶,中型企業和大型公司都在使用它,它作為最佳解決方案在多種操作系統共存的環境中脫穎而出,由於廣泛使用的工具很可能發生這種情

linux 系統統計目錄下文件夾的大小

with des 但是 from cif pac 文件占用 解釋 and du -ah --max-depth=1 這個是我想要的結果 a表示顯示目錄下所有的文件和文件夾(不含子目錄),h表示以人類能看懂的方式,max-depth表示目錄的深度。 du命令用來查看

Linux 系統安裝Mysql_5.6

上傳 粘貼 啟動mysql grant ont linu chm cli char Linux 系統中安裝Mysql_5.6 安裝包下載地址(http://pan.baidu.com/s/1o8G5q

Linux系統安裝vmTools

cdr cdrom linu 是否 壓縮 進入 span pan tin 以下是,會用到的命令、遇到的問題及解釋: 在虛擬機中安裝centOS系統,因為後續安裝服務或者其他的東西,因此需要安裝vmTools,方便將文件從宿主電腦拖進虛擬機內。(我的是tar壓縮包的vmToo

Linux系統有關/dev/null和/dev/zero文件說明及實踐

linux /dev/null 特殊文件 /dev/zero Linux系統中有關/dev/null和/dev/zero文件說明提示:這個題目完全可以作為一個面試題考考運維的應聘者:面試題:請解釋Linux中/dev/null和/dev/zero兩個文件的作用和區別。在類Unix操作系統中,

運維學習之Linux系統的文件傳輸、歸檔、壓縮

linux不同系統之間的文件傳輸1.文件歸檔1.文件歸檔,就是把多個文件變成一個歸檔文件2.tar c ##創建 f ##指定歸檔文件名稱 t ##顯示歸檔文件中的內容 r ##向歸檔文件中添加文件 --get ##取出單個文件 --delete ##刪除單個文件 x ##取出歸檔文件中的所有內容

Linux系統如何查看日誌信息

日誌文件 系統日誌 楊書凡 日誌文件是用於記錄Linux系統中各種運行消息的文件,不同的日誌文件記載了不同類型的信息,對於診斷和解決系統中的問題很有幫助分析日誌文件 日誌數據主要包括三種類型:內核及系統日誌、用戶日誌、程序日誌 #對於大多數的文本格式的日誌文件,使用tail、more、l