Linux

du 只計算一次硬連結,但硬連結的大小與第一個硬連結的大小相同?

  • December 29, 2020

我有一個大型目錄結構,其中有許多來自第一個硬連結的硬連結,這些硬連結位於不同的目錄結構中。例如dir1具有以下結構:

[dir1]$ tree
.
├── dir_inside
│   ├── file1
│   └── file2
└── other_dir
   ├── file1
   └── file2

現在讓我們假設dir2存在於外部dir1,並且所有文件都存在於dir1eg中file1,並且file2是主要存在於dir2ie 中的文件的硬連結,這些文件在創建dir2之前存在dir1

在計算大小時,dir1我會選擇命令du -sh dir1,因為du只會計算一次硬連結。好的,到目前為止一切都很好,但是只計算一次這意味著我實際上不是從第一個硬連結開始計算的dir2。所以我們說du -sh dir22G大小。dir1也將2G在大小上,因為硬連結將在該目錄結構中計算一次。就我對硬連結的了解而言,我相信硬連結實際上與第一個inode創建的文件大小不同,對嗎?我真的很想得到一些關於獲取不同目錄中硬連結文件的目錄大小的說明,從而估計硬連結佔用的實際磁碟空間。

我認為您誤解了硬連結的概念。

一份文件

$$ name $$是指向inode的指針,硬連結完全一樣。沒有參考原始文件。 du無法知道文件是否是作為來自另一個文件的硬連結創建的。du只能在單個du呼叫中出現多個指向 inode 的指針時過濾:

du -sh dir1 dir2

您對硬連結有一些誤解。

首先想到要注意的是沒有這樣的東西,或者說每個文件

$$ name $$是硬連結。 是的,這是正確的,硬連結沒有特殊的結構。那麼它們是什麼。

每個文件都有一個 inode。inode 指向內容和元數據:文件模式、大小、日期等。

然後是文件名。每個文件名都指向一個 inode。每個 inode 可以有零到多個指向它的文件名。(每個 inode 可以有零到多個打開的文件描述符(由程序擁有)指向它)。如果有零個文件名和零個指向 inode 的文件描述符,那麼它會被垃圾回收。

沒有記錄這些文件名、文件描述符的創建順序。所以不能說這個是硬連結,這個是原創的。這種區別只存在於創建點。之後就有了無法區分的。

引用自:https://unix.stackexchange.com/questions/626610