Ich habe mich gefragt, warum ein leeres Verzeichnis 4096 Byte Speicherplatz belegt, und ich habe diese Frage gesehen. Es wird angegeben, dass Speicherplatz in Blöcken zugewiesen wird und daher die Größe eines neuen Verzeichnisses 4096 Bytes beträgt.
Ich bin mir jedoch ziemlich sicher, dass die Zuordnung für "normale" Dateien auch in Blöcken erfolgt. Zumindest ist es in Windows-Dateisystemen so und ich vermute, dass es in ext * zumindest ähnlich sein muss.
Soweit ich verstanden habe, erfolgt die Größenauflistung für andere Dateitypen wie Dateien, symbolische Links usw. in Bezug auf die tatsächliche Größe. Denn wenn ich eine leere Datei erstelle, sehe ich eine 0 als Größe. Wenn Sie ein paar Zeichen eingeben, sehe ich die <Anzahl der Zeichen> Bytes als Größe usw.
Meine Frage ist also, obwohl die Zuordnung für andere Dateien auch in Blöcken erfolgt, warum die Richtlinie zum Melden der Größe eines Verzeichnisses und einer Datei unterschiedlich ist.
Klärung
Ich dachte, die Frage sei klar genug, aber anscheinend nicht. Ich werde versuchen, die Frage hier zu klären.
1) Was ich denke, ist ein Verzeichnis:
Ich werde versuchen, anhand des folgenden Beispiels zu erklären, was meiner Meinung nach ein Verzeichnis ist. Wenn es nach dem Lesen falsch ist, benachrichtigen Sie mich bitte.
Nehmen wir an, wir haben ein Verzeichnis mit dem Namen mydir
. Und lassen Sie uns sagen , dass es drei Dateien enthält, die da sind: f0
, f1
und f2
. Nehmen wir an, dass jede Datei 1 Byte lang ist.
Was ist nun mydir
? Es ist ein Zeiger auf einen Inode, der Folgendes enthält: String "f0" und die Inode-Nummer, auf die verwiesen wird f0
. String "f1" und die Inode-Nummer, auf die f1
zeigt. Und String "f2" und die Inode-Nummer, auf die f2
zeigt. (Zumindest denke ich, dass dies ein Verzeichnis ist. Bitte korrigieren Sie mich, wenn ich falsch liege.)
Nun gibt es zwei Methoden zum Berechnen der Größe eines Verzeichnisses:
1) Berechnung der Größe der Inode, auf die mydir
zeigt.
2) Summieren der Größen der Inodes, auf die der Inhalt von mydir
zeigt.
Obwohl 1 kontraintuitiver ist, nehmen wir an, dass es sich um die verwendete Methode handelt. (Für diese Frage spielt es keine Rolle, welche Methode tatsächlich verwendet wird.) Dann wird die Größe von wie mydir
folgt berechnet:
2 + 2 + 2 + 3 * <space_required_to_store_an_inode_number>
2 sind, weil jeder Dateiname 2 Bytes lang ist.
2) Die Frage:
Nun die Frage: Unter der Annahme, dass ein Verzeichnis meiner Meinung nach korrekt ist, sollte die gemeldete Größe für mydir
viel weniger als 4096 betragen, unabhängig davon, ob Methode 1 oder Methode 2 zur Berechnung seiner Größe verwendet wird.
Nun werden Sie sagen, dass der Grund, warum 4096 Bytes gemeldet werden, darin besteht, dass die Zuordnung in Blöcken erfolgt. Daher ist die gemeldete Größe so groß.
Aber dann werde ich sagen: Die Zuordnung erfolgt auch in Blöcken für reguläre Dateien. (Siehe Thrigs Antwort als Referenz) Trotzdem werden ihre Größen in realen Größen angegeben. (1 Byte, wenn sie 1 Zeichen enthalten, 2 Byte, wenn sie 2 Zeichen enthalten usw.)
Meine Frage ist also, warum sich die Richtlinien für die Berichtsgröße von Verzeichnissen so stark von der Berichtsgröße für reguläre Dateien unterscheiden.
Weitere Klarstellung:
Wir wissen, dass die anfängliche Anzahl von Blöcken, die für eine nicht leere Datei und für ein leeres Verzeichnis zugewiesen wurden, beide 8 Blöcke beträgt. (Siehe Antwort von Thrig. ) Obwohl die Zuordnung sowohl für reguläre Dateien als auch für Verzeichnisse in der gleichen Anzahl von Blöcken erfolgt, warum ist die gemeldete Größe für ein Verzeichnis viel größer?
mydir
. Und lassen Sie uns sagen , dass es einige Dateien enthält wie:f0
,f1
undf2
. Was ist nunmydir
? Es ist ein Zeiger auf einen Inode, der Folgendes enthält: String "f0" und Inode-Nummer, auf die er zeigt. String "f1" und Inode-Nummer, auf die es zeigt. String "f2" und Inode-Nummer, auf die es zeigt. (Zumindest ist dies das Bild in meinem Kopf. Es könnte falsch sein) So weit so gut.