私は他のディレクトリ構造内の最初のハードリンクの多くのハードリンクを持つ大規模なディレクトリ構造を持っています。たとえば、dir1
次の構造を使用します。
[dir1]$ tree
.
├── dir_inside
│ ├── file1
│ └── file2
└── other_dir
├── file1
└── file2
ここで、dir2
外部に存在するすべてのファイル(dir1
たとえば、作成前に存在していたファイル)に主に存在するファイルへのハードリンクであるとします。dir1
file1
file2
dir2
dir2
dir1
ハードリンクは一度だけ計算されるため、サイズを計算するときにdir1
このコマンドを使用します。さて、これまでは大丈夫でしたが、一度だけカウントされます。つまり、実際にある最初のハードリンクから計算を開始しないという意味です。だから私たちはサイズと言うことができます。そのディレクトリ構造ではハードリンクが一度だけ計算されるため、サイズにも影響します。ハードリンクについて私が知っているように、ハードリンクは実際に最初に作成されたファイルサイズとファイルサイズは同じではありません。そうですか?ハードリンクが占める物理ディスク容量を見積もるために、別のディレクトリにあるハードリンクファイルのディレクトリサイズを取得する方法の明確な説明を聞きたいです。du -sh dir1
du
dir2
du -sh dir2
2G
dir1
2G
inode
答え1
ハードリンクの概念を間違って理解しているようです。
file[name]はinodeへのポインタであり、ハードリンクはまったく同じです。元の文書への参照はありません。
du
ファイルが他のファイルへのハードリンクとして作成されたかどうかを知る方法はありません。du
単一の呼び出しdu
でinodeへの複数のポインタが発生した場合にのみフィルタリングできます。
du -sh dir1 dir2
答え2
ハードリンクについていくつかの誤解があります。
最初に注目すべき点は、そのようなものがないか、またはすべてのファイル[名前]がハードリンクであることです。
はい、そうです。ハードリンクには特別な構造はありません。だから彼らは何ですか?
すべてのファイルにはinodeがあります。 Inodeは、ファイルモード、サイズ、日付などのコンテンツとメタデータを指します。
その後、ファイル名が表示されます。各ファイル名はinodeを指します。各inodeには、それを指すファイル名が0個以上ある場合があります。 (各inodeには、それを指すオープンファイル記述子(プロセス所有)が0個以上ある場合があります。)ファイル名がなく、inodeを指すファイル記述子がない場合は、ガベージコレクションされます。
これらのファイル名とファイル記述子の生成順序は記録されません。したがって、これはハードリンクであり、オリジナルとは言えません。これらの区別は作成時にのみ存在します。それ以降は違いはありません。