理解linux文件系統之inode

来源:http://www.cnblogs.com/chaser24/archive/2017/02/16/6405587.html
-Advertisement-
Play Games

分享一篇關於linux文件系統inode講解得比較清晰的文章~ inode是一個重要概念,是理解Unix/Linux文件系統和硬碟儲存的基礎。 我覺得,理解inode,不僅有助於提高系統操作水平,還有助於體會Unix設計哲學,即如何把底層的複雜性抽象成一個簡單概念,從而大大簡化用戶介面。 下麵就是我 ...


分享一篇關於linux文件系統inode講解得比較清晰的文章~

 

inode是一個重要概念,是理解Unix/Linux文件系統和硬碟儲存的基礎。

我覺得,理解inode,不僅有助於提高系統操作水平,還有助於體會Unix設計哲學,即如何把底層的複雜性抽象成一個簡單概念,從而大大簡化用戶介面。

下麵就是我的inode學習筆記,儘量保持簡單。

===================================

理解inode

作者:阮一峰

 

一、inode是什麼?

理解inode,要從文件儲存說起。

文件儲存在硬碟上,硬碟的最小存儲單位叫做"扇區"(Sector)。每個扇區儲存512位元組(相當於0.5KB)。

操作系統讀取硬碟的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。這種由多個扇區組成的"塊",是文件存取的最小單位。"塊"的大小,最常見的是4KB,即連續八個 sector組成一個 block。

文件數據都儲存在"塊"中,那麼很顯然,我們還必須找到一個地方儲存文件的元信息,比如文件的創建者、文件的創建日期、文件的大小等等。這種儲存文件元信息的區域就叫做inode,中文譯名為"索引節點"。

每一個文件都有對應的inode,裡面包含了與該文件有關的一些信息。

二、inode的內容

inode包含文件的元信息,具體來說有以下內容:

  * 文件的位元組數

  * 文件擁有者的User ID

  * 文件的Group ID

  * 文件的讀、寫、執行許可權

  * 文件的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指文件內容上一次變動的時間,atime指文件上一次打開的時間。

  * 鏈接數,即有多少文件名指向這個inode

  * 文件數據block的位置

可以用stat命令,查看某個文件的inode信息:

  stat example.txt

總之,除了文件名以外的所有文件信息,都存在inode之中。至於為什麼沒有文件名,下文會有詳細解釋。

三、inode的大小

inode也會消耗硬碟空間,所以硬碟格式化的時候,操作系統自動將硬碟分成兩個區域。一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息。

每個inode節點的大小,一般是128位元組或256位元組。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設置一個inode。假定在一塊1GB的硬碟中,每個inode節點的大小為128位元組,每1KB就設置一個inode,那麼inode table的大小就會達到128MB,占整塊硬碟的12.8%。

查看每個硬碟分區的inode總數和已經使用的數量,可以使用df命令。

  df -i

查看每個inode節點的大小,可以用如下命令:

  sudo dumpe2fs -h /dev/hda | grep "Inode size"

由於每個文件都必須有一個inode,因此有可能發生inode已經用光,但是硬碟還未存滿的情況。這時,就無法在硬碟上創建新文件。

四、inode號碼

每個inode都有一個號碼,操作系統用inode號碼來識別不同的文件。

這裡值得重覆一遍,Unix/Linux系統內部不使用文件名,而使用inode號碼來識別文件。對於系統來說,文件名只是inode號碼便於識別的別稱或者綽號。

錶面上,用戶通過文件名,打開文件。實際上,系統內部這個過程分成三步:首先,系統找到這個文件名對應的inode號碼;其次,通過inode號碼,獲取inode信息;最後,根據inode信息,找到文件數據所在的block,讀出數據。

使用ls -i命令,可以看到文件名對應的inode號碼:

  ls -i example.txt

五、目錄文件

Unix/Linux系統中,目錄(directory)也是一種文件。打開目錄,實際上就是打開目錄文件。

目錄文件的結構非常簡單,就是一系列目錄項(dirent)的列表。每個目錄項,由兩部分組成:所包含文件的文件名,以及該文件名對應的inode號碼。

ls命令只列出目錄文件中的所有文件名:

  ls /etc

ls -i命令列出整個目錄文件,即文件名和inode號碼:

  ls -i /etc

如果要查看文件的詳細信息,就必鬚根據inode號碼,訪問inode節點,讀取信息。ls -l命令列出文件的詳細信息。

  ls -l /etc

理解了上面這些知識,就能理解目錄的許可權。目錄文件的讀許可權(r)和寫許可權(w),都是針對目錄文件本身(即不同用戶能以什麼許可權訪問操作對該目錄文件,例如這裡不同用戶對tmp目錄文件(d可以查出tmp是目錄文件,d表示directory,即目錄)分別為rwxr-xr-x,第一組的三個字元,即rwx,表示文件擁有者用戶的對該文件的讀寫許可權,第二組的三個字元,即r-x,表示文件擁有者用戶所在的用戶組裡的其他用戶對該文件的讀寫許可權,第三組的三個字元,即r-x,表示文件擁有者用戶所在的用戶組以外的用戶對該文件的讀寫許可權。一個某個用戶下運行的進程訪問操作該目錄文件只能以該用戶所具有的對該目錄文件的許可權進行操作)。由於目錄文件內只有文件名和inode號碼,所以如果只有讀許可權,只能獲取文件名,無法獲取其他信息,因為其他信息都儲存在inode節點中,而讀取inode節點內的信息需要目錄文件的執行許可權(x)。

六、硬鏈接

一般情況下,文件名和inode號碼是"一一對應"關係,每個inode號碼對應一個文件名。

但是,Unix/Linux系統允許,多個文件名指向同一個inode號碼。

這意味著,可以用不同的文件名訪問同樣的內容;對文件內容進行修改,會影響到所有文件名;但是,刪除一個文件名,不影響另一個文件名的訪問。這種情況就被稱為"硬鏈接"(hard link)。

ln命令可以創建硬鏈接:

  ln 源文件 目標文件

運行上面這條命令以後,源文件與目標文件的inode號碼相同,都指向同一個inode。inode信息中有一項叫做"鏈接數",記錄指向該inode的文件名總數,這時就會增加1。

反過來,刪除一個文件名,就會使得inode節點中的"鏈接數"減1。當這個值減到0,表明沒有文件名指向這個inode,系統就會回收這個inode號碼,以及其所對應block區域。

這裡順便說一下目錄文件的"鏈接數"。創建目錄時,預設會生成兩個目錄項:"."和".."。前者的inode號碼就是當前目錄的inode號碼,等同於當前目錄的"硬鏈接";後者的inode號碼就是當前目錄的父目錄的inode號碼,等同於父目錄的"硬鏈接"。所以,任何一個目錄的"硬鏈接"總數,總是等於2(某一目錄的目錄名和該目錄的當前目錄名)加上它的子目錄總數(含隱藏目錄)。(因為inode信息中有一項叫做"鏈接數",記錄指向該inode的文件名總數

七、軟鏈接

除了硬鏈接以外,還有一種特殊情況。

文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B。因此,無論打開哪一個文件,最終讀取的都是文件B。這時,文件A就稱為文件B的"軟鏈接"(soft link)或者"符號鏈接(symbolic link)。

這意味著,文件A依賴於文件B而存在,如果刪除了文件B,打開文件A就會報錯:"No such file or directory"。這是軟鏈接與硬鏈接最大的不同:文件A指向文件B的文件名,而不是文件B的inode號碼,文件B的inode"鏈接數"不會因此發生變化。

ln -s命令可以創建軟鏈接。

  ln -s 源文文件或目錄 目標文件或目錄

八、inode的特殊作用

由於inode號碼與文件名分離,這種機制導致了一些Unix/Linux系統特有的現象。

  1. 有時,文件名包含特殊字元,無法正常刪除。這時,直接刪除inode節點,就能起到刪除文件的作用。

  2. 移動文件或重命名文件,只是改變文件名,不影響inode號碼。

  3. 打開一個文件以後,系統就以inode號碼來識別這個文件,不再考慮文件名。因此,通常來說,系統無法從inode號碼得知文件名。

第3點使得軟體更新變得簡單,可以在不關閉軟體的情況下進行更新,不需要重啟。因為系統通過inode號碼,識別運行中的文件,不通過文件名。更新的時候,新版文件以同樣的文件名,生成一個新的inode,不會影響到運行中的文件。等到下一次運行這個軟體的時候,文件名就自動指向新版文件,舊版文件的inode則被回收。

 

 

附加:

二、硬鏈接和軟鏈接

其中每個dentry都有一個唯一的inode,而每個inode則可能有多個dentry,這種情況是由ln硬鏈接產生的。

硬鏈接:其實就是同一個文件具有多個別名,具有相同inode,而dentry不同。

              1. 文件具有相同的inode和data block;

              2. 只能對已存在的文件進行創建;

              3. 不同交叉文件系統進行硬鏈接的創建

              4. 不能對目錄進行創建,只能對文件創建硬鏈接

              5. 刪除一個硬鏈接並不影響其他具有相同inode號的文件;

軟鏈接:軟鏈接具有自己的inode,即具有自己的文件,只是這個文件中存放的內容是另一個文件的路徑名。因此軟鏈接具有自己的inode號以及用戶數據塊。

              1. 軟鏈接有自己的文件屬性及許可權等;

              2. 軟鏈接可以對不存在的文件或目錄創建;

              3. 軟鏈接可以交叉文件系統;

              4. 軟鏈接可以對文件或目錄創建;

              5. 創建軟鏈接時,鏈接計數i_nlink不會增加;

              6. 刪除軟鏈接不會影響被指向的文件,但若指向的原文件被刪除,則成死鏈接,但重新創建指向 的路徑即可恢復為正常的軟鏈接,只是源文件的內容可能變了。

 

%~Q2(70L{@@8W5JY~HE4E~T

 

http://blog.chinaunix.net/uid-14518381-id-3957854.html

 

一、文件分配方式是索引分配時的文件系統結構(粗略的說,是分區結構):

 

一個文件系統里的文件分為目錄文件和普通文件這兩類。

如果文件分配方式是索引分配的話,則有索引節點這個概念的出現。

 

inode也會消耗硬碟空間,所以硬碟格式化的時候,操作系統自動將硬碟分成兩個區域。一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息。

每個inode節點的大小,一般是128位元組或256位元組。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設置一個inode。假定在一塊1GB的硬碟中,每個inode節點的大小為128位元組,每1KB就設置一個inode,那麼inode table的大小就會達到128MB,占整塊硬碟的12.8%。

查看每個硬碟分區的inode總數和已經使用的數量,可以使用df命令:df -i


2、分區

(1)分區結構

    分區(partition)在被Linux的文件系統(比如ext2)格式化的時候,會分成inode table和block table兩部分,且大小都是固定的。該分區的所有inode都在inode table里,所有block都在block table里。


http://blog.csdn.NET/poechant/article/details/7214926

 

文件、目錄、目錄項、索引節點、超級塊

 

如上的幾個概念在磁碟中的位置關係如圖4所示。

圖4. 磁碟與文件系統

圖片示例_磁碟與文件系統.jpg

目錄塊里存放的是一個個的FCB(文件控制塊,一個一般128位元組)【FCB就是目錄文件存放的業務數據】,而數據塊里存放的是普通文件的業務數據。普通文件由目錄塊里的一個FCB加上多個數據塊組成,而目錄文件由目錄塊里的一個FCB加上多個其他多個目錄塊組成。一個索引節點只能被一個文件(無論是目錄文件,還是普通文件)所用,不能同時被其他文件所用。一個目錄塊里只能存放位於目錄樹里處於同級的文件(無論是目錄文件,還是普通文件),所以一個根目錄文件的FCB所在的目錄塊只能存放根目錄文件的FCB,與根目錄文件同級的只有根目錄文件自己。一個文件的FCB指向他的索引節點,他的索引節點指向該文件所擁有的塊(如果該文件是目錄文件,則該文件所擁有的塊就是目錄塊;如果該文件是普通文件,則該文件所擁有的塊就是數據塊;)

http://www.ibm.com/developerworks/cn/linux/l-cn-vfs/

 

~X]L$2J}4}KSS`5OE)MG~`F

http://blog.chinaunix.Net/uid-14518381-id-3957854.html

Superblock 是文件系統最基本的元數據,它定義了文件系統的類似、大小、狀態,和其他元數據結構的信息(元數據的元數據)。Superblock 對於文件系統來說是非常關鍵的,因此對於每個文件系統它都冗餘存儲了多份。Superblock對於文件系統來說是一個非常“高等級”的元數據結構。例如,如果 /var 分區的 Superblock 損壞了,那麼 /var 分區將無法掛載。在這時候,一般會執行 fsck 來自動選擇一份 Superblock 備份來替換損壞的 Superblock,並嘗試修複文件系統。主 Superblock 存儲在分區的 block 0 或者 block 1 中,而 Superblock 的備份則分散存儲在文件系統的多組 block 中。當需要手工恢復時,我們可以使用 dumpe2fs /dev/sda1 | grep -i superblock 來查看 sda1 分區的 superblock 備份有哪一份是可用的。我們假設 dumpe2fs 輸出了這樣一行:Backup superblock at 163840, Group descriptors at 163841-163841 ,通過這條信息,我們就可以嘗試使用這個 superblock 備份:/sbin/fsck.ext3 -b 163840 -B 1024 /dev/sda1。請註意,這裡我們假設 block 的大小為 1024 位元組。

http://www.elmerzhang.com/2012/12/suerblock-inode-dentry-file-of-filesystem/

 

====================================================

 

 

一天一點學習Linux之Inode詳解

 

 

 

在Linux文件系統中,很多人對Inode都不太明白,今天我就和大家一起來分享一下我對Inode的認識,如果有理解錯誤的地方,請大家多多批評指點。
在上一篇一天一點學習Linux之認識文件系統中,在最後給出了一張EXT3文件系統結構圖,裡面已經涉及到了Inode的相關信息——圖的左下角部分,今天,我們就專門對這一部分進行一下詳解,希望通過今天的內容,能幫助大家更清楚的瞭解Inode。

 

先看看Inode的結構圖

 

inode

再來瞭解一下文件系統如何存取文件的

 

1、根據文件名,通過Directory里的對應關係,找到文件對應的Inode number
2、再根據Inode number讀取到文件的Inode table
3、再根據Inode table中的Pointer讀取到相應的Blocks

這裡有一個重要的內容,就是Directory,他不是我們通常說的目錄,而是一個列表,記錄了一個文件/目錄名稱對應的Inode number。如下圖

Directory

Directory:
A directory is a mapping between the human name for the file and the computer's inode number.
所以說,這個Directory不是文件,我們可以看作是文件系統中的一個屬性,只是用來關鍵文件名與Inode number。這個一定要理解好,否則後面關於硬鏈接的內容,就不容易理解了。

我在一天一點學習Linux之文件與目錄許可權的基本概念中講到
第二欄表示的是有多少文件連接到inode
如果是一個文件,此時這一欄位表示這個文件所具有的硬鏈接數, 
如果是一個目錄,則此欄位表示該目錄所含子目錄的個數。

現在是不是容易理解了?如果你還不是很明白,那麼下麵我們就再通過實例讓大家明白。

我們以RHEL6系統為例

 

在根目錄下創建一個test目錄,我們進入此目錄,進行操作。
[root@yufei test]# pwd
/test
[root@yufei test]# touch testfile
[root@yufei test]# mkdir testdir
創建實驗文件和目錄
[root@yufei test]# ls -li
total 4
977 drwxr-xr-x. 2 root root 4096 Apr  5 16:48 testdir
976 -rw-r--r--. 1 root root    0 Apr  5 16:47 testfile
查看到文件與目錄的Inode和inode count分別為
977 <-----> 2 <-----> testdir
976 <-----> 1 <-----> testfile
現在目錄的鏈接數為2,文件的鏈接數為1。為什麼會這樣呢?其實很好理解。對於目錄而言,每個目錄裡面肯定會有兩個特殊目錄,那就是.和..這兩個目錄,我們前面的課程中也講到,.表示當前的目錄,而..則是表示上層目錄。我們也知道,在Linux系統中,是從根來開始查找的,要想找到某個目錄,必需要先找到他的上層目錄,所以說,空目錄(嚴格的來說,不能叫空目錄)是有兩個鏈接到相應的Inode number的。作為文件很明顯,他只有一個鏈接到相應的Inode number。也不用多說,

下麵我們就來看看這個鏈接數是如何改變的。
繼續上面的操作
[root@yufei test]# ln testfile testfile.hard
[root@yufei test]# ln -s testfile testfile.soft
對testfile建立一個硬鏈接和一個軟鏈接
[root@yufei test]# ls -il
total 4
977 drwxr-xr-x. 2 root root 4096 Apr  5 16:48 testdir
976 -rw-r--r--. 2 root root    0 Apr  5 16:47 testfile
976 -rw-r--r--. 2 root root    0 Apr  5 16:47 testfile.hard
978 lrwxrwxrwx. 1 root root    8 Apr  5 17:03 testfile.soft -> testfile
再查看文件和目錄的屬性,我們就發現:創建一個硬鏈接後,testfile的inode count增加了一個。而且testfile和testfile.hard這兩個的Inode number是一樣的。這個硬鏈接就是重新創建了一個文件名對應到原文件的Inode。實質就是在Directory中增加了一個新的對應關係。通過這個例子,你是不是更清楚了,這個Inode count的含義了。他就是指,一個Inode對應了多少個文件名。

下麵我們再來看看硬鏈接的其他特點

 

[root@yufei ~]# watch -n 1 "df -i;df"
Every 1.0s: df -i;df                            Tue Apr  5 21:52:53 2011

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1             960992  105415  855577   11% /
tmpfs                  63946       1   63945    1% /dev/shm
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   2747612  11603116  20% /
tmpfs                   255784         0    255784   0% /dev/shm
用上面的命令可以實時查看系統中所剩的block和inode的變化數量。
建議大家不要用deumpe2fs和tune2fs這兩個命令,如果使用他們來查看的話,將會很鬱悶——你會發現,你無論怎麼創建文件或對文件寫入內容,Inode和block的值都不會變,除非你每操作一次,重新啟動一次系統,而用了上面的命令,就是第秒鐘監視他們的變化情況。關於df的命令使用,大家可以自行查看幫助進行學習。當然還有du這個命令,他們都和文件系統有關。

我們再來創建一個硬鏈接
[root@yufei test]# ls -li
total 4
977 drwxr-xr-x. 2 root root 4096 Apr  5 16:48 testdir
976 -rw-r--r--. 2 root root    0 Apr  5 16:47 testfile
976 -rw-r--r--. 2 root root    0 Apr  5 16:47 testfile.hard
978 lrwxrwxrwx. 1 root root    8 Apr  5 17:03 testfile.soft -> testfile
[root@yufei test]# ln testfile testfile.hard1
[root@yufei test]# ls -li
total 4
977 drwxr-xr-x. 2 root root 4096 Apr  5 16:48 testdir
976 -rw-r--r--. 3 root root    0 Apr  5 16:47 testfile
976 -rw-r--r--. 3 root root    0 Apr  5 16:47 testfile.hard
976 -rw-r--r--. 3 root root    0 Apr  5 16:47 testfile.hard1
978 lrwxrwxrwx. 1 root root    8 Apr  5 17:03 testfile.soft -> testfile
可以再觀察一下Inode count和Inode number的對應關係。
下麵再看看inodes和blocks的變化
[root@yufei ~]# watch -n 1 "df -i;df"
Every 1.0s: df -i;df                            Tue Apr  5 21:53:38 2011

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1             960992  105415  855577   11% /
tmpfs                  63946       1   63945    1% /dev/shm
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   2747612  11603116  20% /
tmpfs                   255784         0    255784   0% /dev/shm
我們發現,inodes和blocks是沒有減少的,所以說,硬鏈接是不會占用磁碟的空間的。
如果說刪除硬鏈接的話,就會改變Inode count的數量。硬鏈接還有其他的兩個特性:不能跨Filesystem也不能link目錄。

下麵再來看看這個軟鏈接

[root@yufei test]# ls -il testfile.soft testfile
976 -rw-r--r--. 3 root root 0 Apr  5 21:50 testfile
978 lrwxrwxrwx. 1 root root 8 Apr  5 21:52 testfile.soft -> testfile
他的Inode number和原文件不一樣。而且大小也發生了變化。可見,這個軟鏈接是重新建立了一個文件,而文件是指向到原文件,而不是指向原Inode。當然他會占用掉 inode 與 block。當我們刪除了源文件後,鏈接文件不能獨立存在,雖然仍保留文件名,但我們卻不能查看軟鏈接文件的內容了。但軟鏈接是可以跨文件系統,而且是可以鏈接目錄。他就相當於windows系統下的快捷方式一樣。通過這個特性,我們可以通過軟鏈接解決某個分區inode conut不足的問題(軟鏈接到另一個inode count足夠多的分區)。

接下來,我們再來分析一下複製文件、移動文件和刪除文件對inode的影響

 

[root@yufei ~]# watch -n 1 "df -i;df"
Every 1.0s: df -i;df                            Tue Apr  5 21:57:38 2011

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1             960992  105415  855577   11% /
tmpfs                  63946       1   63945    1% /dev/shm
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   2747612  11603116  20% /
tmpfs                   255784         0    255784   0% /dev/shm

[root@yufei test]# ls -li
total 4
977 drwxr-xr-x. 2 root root 4096 Apr  5 16:48 testdir
976 -rw-r--r--. 3 root root    0 Apr  5 18:54 testfile
976 -rw-r--r--. 3 root root    0 Apr  5 18:54 testfile.hard
976 -rw-r--r--. 3 root root    0 Apr  5 18:54 testfile.hard1
978 lrwxrwxrwx. 1 root root    8 Apr  5 17:03 testfile.soft -> testfile
我們先記錄以上的信息

先看複製文件的情況
[root@yufei test]# cp testfile testfile.cp
[root@yufei test]# ls -li
976 -rw-r--r--. 3 root root    0 Apr  5 21:50 testfile
979 -rw-r--r--. 1 root root    0 Apr  5 21:58 testfile.cp
我們只對比這兩個文件,發現Inode number不一樣,我們再來看看inodes和blocks的剩餘情況
Every 1.0s: df -i;df                            Tue Apr  5 22:02:49 2011

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1             960992  105416  855576   11% /
tmpfs                  63946       1   63945    1% /dev/shm
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   2747620  11603108  20% /
tmpfs                   255784         0    255784   0% /dev/shm
發現inodes減少了一個,而blocks也少了,這就說明,複製文件是創建文件,並占Inode和Block的。
文件創建過程是:先查找一個空的Inode,寫入新的Inode table,創建Directory,對應文件名,向block中寫入文件內容

關於移動文件和刪除文件的實驗,大家可以自己動手來實踐吧。我直接給出相應的說明。
移動文件,他分兩種情況:
在同一個文件系統中移動文件時
創建一個新的文件名和Inode的對應關係(也就是在Directory中寫入信息),然後在Directory中刪除舊的信息,更新CTIME,其他的信息如Inode等等均無任何影響

在不同文件系統移動文件時
先查找一個空的Inode,寫入新的Inode table,創建Directory中的對應關係,向block中寫入文件內容,同時還會更改CTIME。

刪除文件
他實質上就是減少link count,當link count為0時,就表示這個Inode可以使用,並把Block標記為可以寫,但並沒有清除Block裡面數據,除非是有新的數據需要用到這個block。

最後我們來做個總結:

 

1、一個Inode對應一個文件,而一個文件根據其大小,會占用多塊blocks。
2、更為準確的來說,一個文件只對應一個Inode。因為硬鏈接其實不是創建新文件,只是在Directory中寫入了新的對應關係而已。
3、當我們刪除文件的時候,只是把Inode標記為可用,文件在block中的內容是沒有被清除的,只有在有新的文件需要占用block的時候,才會被覆蓋。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 利用include功能優化nginx的配置文件 [root@lnmp conf]# cat nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_ty... ...
  • 1 文件系統簡介 Linux 目錄結構的最頂層是一個被稱為“/”的根目錄。系統載入Linux 內核之後,會掛載一個設備到根目錄上。存在這個設備中的文件系統被稱為根文件系統。所有的系統命令、系統配置以及其他文件系統的掛載點都位於這個根文件系統中。根文件系統通常存放於記憶體和Flash 中。根文件系統中存 ...
  • TAB對於比較長的命令在使用時是十分方便的,最近就遇到TAB 鍵無法 補全 命令前加了sudo的情況 因此去網上取經發現的有一些方法有一點問題,因此在成功解決問題後做如下總結: 1,首先檢查是否安裝了 自動補全插件(bash-completion) 否則執行:sudo apt-get install ...
  • 簡介 Netstat 命令用於顯示各種網路相關信息,如網路連接,路由表,介面狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Memberships) 等等。 輸出信息含義 執行netstat後,其輸出結果為 從整體上看,netstat的 ...
  • 測試: vim /etc/hosts ##ip地址轉換 修改windows 的配置文件,寫字板打開 vim /usr/local/apache/conf/httpd.conf vim /usr/local/apache/conf/extra/httpd-vhosts.conf mkdir /data ...
  • tags: MacPorts 錯誤故障 _環境: macOS 10.x,Terminal_ 問題表現 在使用 port 命令時,出現這樣的錯誤提示: 解決辦法 此問題是“port”命令(即 MacPorts 工具)無法工作。可能是因為 macOS 系統升級,Macports 沒有升級造成。 __手動 ...
  • vim /usr/local/apache/conf/httpd.conf ##修改apache的網頁配置文件 → 解析php文件 /usr/local/apache/bin/apachectl graceful ## 重新載入 vim 2.php vim info.php cp /usr/loca ...
  • 1. 安裝 Docker Engine 2. 添加用戶到docker group 預設安裝完 Docker 後,每次執行 docker 都需要運行 sudo 命令,非常浪費時間影響效率。如果不跟 sudo,直接執行 docker images 命令會報沒有許可權的問題 如果想免 sudo 使用 doc ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...