duはハードリンクを一度だけ計算しますが、ハードリンクのサイズは最初のハードリンクと同じですか?

duはハードリンクを一度だけ計算しますが、ハードリンクのサイズは最初のハードリンクと同じですか?

私は他のディレクトリ構造内の最初のハードリンクの多くのハードリンクを持つ大規模なディレクトリ構造を持っています。たとえば、dir1次の構造を使用します。

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

ここで、dir2外部に存在するすべてのファイル(dir1たとえば、作成前に存在していたファイル)に主に存在するファイルへのハードリンクであるとします。dir1file1file2dir2dir2dir1

ハードリンクは一度だけ計算されるため、サイズを計算するときにdir1このコマンドを使用します。さて、これまでは大丈夫でしたが、一度だけカウントされます。つまり、実際にある最初のハードリンクから計算を開始しないという意味です。だから私たちはサイズと言うことができます。そのディレクトリ構造ではハードリンクが一度だけ計算されるため、サイズにも影響します。ハードリンクについて私が知っているように、ハードリンクは実際に最初に作成されたファイルサイズとファイルサイズは同じではありません。そうですか?ハードリンクが占める物理ディスク容量を見積もるために、別のディレクトリにあるハードリンクファイルのディレクトリサイズを取得する方法の明確な説明を聞きたいです。du -sh dir1dudir2du -sh dir22Gdir12Ginode

答え1

ハードリンクの概念を間違って理解しているようです。
file[name]はinodeへのポインタであり、ハードリンクはまったく同じです。元の文書への参照はありません。

duファイルが他のファイルへのハードリンクとして作成されたかどうかを知る方法はありません。du単一の呼び出しduでinodeへの複数のポインタが発生した場合にのみフィルタリングできます。

du -sh dir1 dir2

答え2

ハードリンクについていくつかの誤解があります。

最初に注目すべき点は、そのようなものがないか、またはすべてのファイル[名前]がハードリンクであることです。

はい、そうです。ハードリンクには特別な構造はありません。だから彼らは何ですか?

すべてのファイルにはinodeがあります。 Inodeは、ファイルモード、サイズ、日付などのコンテンツとメタデータを指します。

その後、ファイル名が表示されます。各ファイル名はinodeを指します。各inodeには、それを指すファイル名が0個以上ある場合があります。 (各inodeには、それを指すオープンファイル記述子(プロセス所有)が0個以上ある場合があります。)ファイル名がなく、inodeを指すファイル記述子がない場合は、ガベージコレクションされます。

これらのファイル名とファイル記述子の生成順序は記録されません。したがって、これはハードリンクであり、オリジナルとは言えません。これらの区別は作成時にのみ存在します。それ以降は違いはありません。

関連情報