Was bedeutet die Größe eines Verzeichnisses in der Ausgabe des Befehls „ls -l“?

Was bedeutet die Größe eines Verzeichnisses in der Ausgabe des Befehls „ls -l“?

Was bedeutet die Größe eines Verzeichnisses in der ls -lBefehlsausgabe?

Antwort1

Dies ist die Größe des Speicherplatzes auf der Festplatte, der zum Speichern der Metadaten für das Verzeichnis verwendet wird (also die Tabelle der Dateien, die zu diesem Verzeichnis gehören). Wenn der Wert 1024 beträgt, bedeutet dies, dass 1024 Bytes auf der Festplatte für diesen Zweck verwendet werden (es werden immer vollständige Blöcke zugewiesen).

Antwort2

Die mit ausgegebene „Größe eines Verzeichnisses“ ls -list (wie bei jedem Dateityp) der vom stat()Aufruf in gemeldete Wert statbuf.st_size.

Was dies st_sizefür Verzeichnisse bedeutet, hängt vollständig vom Dateisystemtyp ab. Wenn Sie den Dateisystemtyp nicht kennen und seine Konzepte nicht verstehen, können Sie aus dem Wert in nichts ableiten st_size.

  • Im historischen UNIX-Dateisystem, das heute normalerweise mit bezeichnet wird v7-fs, waren Verzeichnisse wiederholte 16-Byte-Einträge, die eine 16-Bit-Inode-Nummer und 14 Byte Dateinamen enthielten. Die „Größe“ eines Verzeichnisses war in Bezug auf den read(2)Vorgang von Bedeutung und wuchs immer oder blieb unverändert. Die .und ..-Einträge werden erstellt, indem sie manuell mit dem aktuellen und dem Verzeichnis eine Ebene darüber hart verknüpft werden. Die Linkanzahl für ein sinnvolles leeres Erstverzeichnis beträgt 2.

  • Im BSD-4.2-Dateisystem, das seit 1989 (SVr4) heißt ufs, sind Verzeichnisse eine Reihe von Datensätzen variabler Länge, die ein Format verwenden, dessen Stabilität nicht garantiert ist. Daher dürfen Benutzerbefehle dieses Format nicht lesen. Die gemeldete „Größe“ ist die Größe in Bytes wie in v7-fs. Die Größe wächst normalerweise oder bleibt unverändert, aber neuere Versionen des Dateisystems können die Größe unter bestimmten Bedingungen verringern – aber nicht immer, wenn Sie dies erwarten. Die gemeldete Linkanzahl für ein leeres Verzeichnis beträgt 2 wie bei v7-fs.

  • In WOFS, dem Dateisystem, das ich zwischen Sommer 1988 und Mai 1991 entworfen und implementiert habe, melden Verzeichnisse immer die „Größe“ 0 und haben nie einen Inhaltstyp, der mit dem read(2)Aufruf gelesen werden kann. Das liegt daran, dass WOFSes sich um das erste Copy-on-Write-Dateisystem handelt und dass in WOFS-Dateien das Verzeichnis melden, in dem sie sich befinden, anstatt im Verzeichnis aufgelistet zu werden. Wenn Sie ein WOFSVerzeichnis mit lesen readdir(), erhalten Sie nur Daten für die beabsichtigten Einträge, aber nie für .und ... Die Linkanzahl eines leeren Verzeichnisses auf WOFSist 1 und das gesamte Verhalten ist vollständig POSIX-kompatibel.

  • In wurde dies nach dem Lesen der Dokumente ZFSimplementiert . ist ein Copy-on-Write-Dateisystem und seine Autoren bestreiten nicht, dass sie Konzepte von kopiert haben . Verzeichnisse auf ZFS melden die in , daher hat die gemeldete „Größe“ keine wirkliche Bedeutung in Bezug auf den belegten Speicherplatz aus den Verzeichnisdaten. Es gibt keine und Einträge in einem ZFS-Verzeichnis, aber wenn Sie aufrufen , werden diese Einträge gefälscht und für die ersten beiden Vorgänge zurückgegeben. ZFS ist das einzige FS in der Liste, das keine Hardlink-Verzeichnisse unterstützt, aber die gemeldete Link-Anzahl für Verzeichnisse ist immer 2. Diese beiden Unregelmäßigkeiten in ZFS wurden implementiert, um Verwirrung in nicht-POSIX-historischen Programmen zu vermeiden.WOFSZFSWOFSnumber of directory entriesst_size...readdir()

  • Ähnlich wie ZFS kopiert WAFL einige, aber nicht alle Ideen von WOFS. Netapp WAFLwurde 3 Jahre nach der WOFSVeröffentlichung des Dokuments geschrieben, WAFL ist Copy-on-Write, aber WAFL scheint „Größen“-Werte zu melden, die möglicherweise der „tatsächlichen Verzeichnisgröße“ entsprechen, unter der Annahme, dass das Verzeichnis Inhalt hat.

Antwort3

Ein Verzeichnis reserviert 4096 Bytes (mindestens) für Metadaten über sich selbst und seinen Inhalt.

Außerdem sind 4096 Bytes die Standardzuordnungseinheit (Block) für das Dateisystem ext2/ext3/ext4 und daher kann ein Verzeichnis nicht kleiner sein.

Auf verschiedenen Dateisystemen finden Sie möglicherweise Verzeichnisse mit unterschiedlichen Standardgrößen. Dies liegt an der Standardblockgröße des Dateisystems.

Die Größe von Verzeichnissen kann beim Füllen auch dynamisch wachsen. Ist der für Metadaten reservierte Speicherplatz jedoch erst einmal voll, kann er nicht neu zugewiesen werden, ohne das Verzeichnis zu entfernen.

Antwort4

Ein Verzeichnis ist einfach ein Verzeichnis, wie ein Telefonbuch. Es ist einfach eine Datei mit einer Liste von Nummern und einem Namen daneben. Jede Nummer verweist auf eine Datei im Dateisystem (eine Inode-Nummer) und der Name ist der Dateiname.

Sie benötigen Speicherplatz, um diese Daten zu speichern. Die Art und Weise der Zuweisung, Vergrößerung und Verkleinerung hängt vom Dateisystem ab.

verwandte Informationen