Nur etwas, auf das ich gestoßen bin und mir keine richtige Erklärung einfallen ließ. Wenn ich eine leere * .txt-Datei auf meinem PC erstelle und dann ihre Größe betrachte, wird 0 angezeigt. Aber wie ist das möglich? Ich meine, auch wenn die Datei selbst leer ist, muss sie eine gewisse Größe haben, nur um ihren eigenen Namen zu speichern. Wie ist das zu erklären? (Betriebssystemunabhängig)
filesystems
Eugene S
quelle
quelle
Antworten:
Es ist möglich, weil es wirklich keine Datei gibt. Es gibt nur einen Verzeichniseintrag mit einem Namen und einem Besitzer. Der Verzeichniseintrag unterscheidet sich logisch von der Datei. Beispielsweise kann dieselbe Datei mehr als einen Namen in mehr als einem Verzeichnis haben.
Leider bedeutet der Begriff "Datei" nicht immer genau dasselbe. Die Dateigrößenlogik stammt jedoch von dem Modell, bei dem ein Verzeichniseintrag eine Datei an ein Verzeichnis "anfügt" und Dateinamen und zugehörige Metadaten im Verzeichnis gespeichert werden.
quelle
ls -ld <directory>
funktionieren.Die semantische Bedeutung von "Dateigröße" unterscheidet sich von der von Ihnen verwendeten.
Es gibt viele sinnvolle Dateigrößen. Die gebräuchlichste und die, die Sie hier sehen, ist "die Anzahl der Bytes in der Datei". Wenn die Datei eine leere Textdatei ist, kann sie tatsächlich 0 Bytes enthalten. Diese Nummer ist für Programmierer wichtig, da wir häufig eine Datei öffnen, "alle Daten lesen" und schließen müssen. Wir müssen wissen, wie viele Datenbytes in der Datei enthalten sind, damit wir vorausplanen können.
Eine andere Bedeutung ergibt sich aus der Art und Weise, wie die meisten Dateisysteme Daten speichern. Die meisten Dateisysteme speichern Daten in Blöcken. Beispielsweise kann das Dateisystem Daten in 64-KB-Blöcken speichern, was bedeutet, dass es niemals etwas zuweist, das kein gerades Vielfaches von 64 KB ist. Das klingt ineffizient, kann aber die Buchhaltung erheblich vereinfachen und oft einfacher, dh schneller.
Eine dritte Bedeutung, an der Sie zerren, ist die tatsächliche Anzahl von Bits, die auf der Festplatte erforderlich sind, um das Vorhandensein einer Datei zu beschreiben. Dies schließt Informationen ein, die normalerweise getrennt von der Datei gespeichert werden. Unter Linux wird beispielsweise das Konzept des "Dateinamens" im Inode des Verzeichnisses gespeichert, in dem sich die Datei befindet (Bearbeiten: aus Kommentaren, technisch gesehen wird dies in den Daten des Verzeichnisses gespeichert. Als ich dies schrieb, dachte ich an das Kleine -directory case: Daten, die kleiner als 156 Byte sind, können direkt im Inode gespeichert werden. Dies ist keine allgemein gebräuchliche Bedeutung, da es fürchterlich schwierig ist, dies zu bestimmen, ohne die tiefgreifende Funktionsweise Ihres Dateisystems zu kennen (haben Sie den Speicherplatz berücksichtigt, der zum Speichern aller Berechtigungen für die Datei erforderlich ist?). Wenn Sie jedoch eine 1.000.000-Byte-Festplatte haben,
quelle
Der Dateiname wird an einer anderen Stelle gespeichert.
Auf Ihrer Festplatte befindet sich ein "Dateisystem", also eine Methode zur Auswahl, wie Dateinamen und Dateien auf der physischen Festplatte dargestellt und interpretiert werden.
Auf den meisten Windows - Disketten finden Sie das ein Dateisystem namens "NTFS" (New Technology File System "), diese speichert Dateinamen Informationen in der Master File Table (MFT) getrennt von dem Inhalt der Datei. Siehe verwenden Wikipedia - Artikel über Master File Table .
Die Datei selbst hat daher eine Länge von 0 Byte, ihr Eintrag in der MFT belegt jedoch noch etwas Platz.
quelle
Dies ist eine interessante ontologische Frage ...
Die Datei selbst ist der Inhalt der Datei. Wenn die Datei keinen Inhalt hat, hat sie eine Größe von Null. Der Dateiname ist genauso ein Teil der Datei wie Ihr eigener Name ein Teil von Ihnen (dh er ist nicht Teil von Ihnen).
So wie Ihr Name als eine Idee in den Köpfen der Menschen (und Ihrer eigenen) existiert, die auf Ihr physisches Ich verweist / verweist, existiert der Dateiname im Verzeichnisbaum des Dateisystems und verweist / verweist auf die Datei.
quelle
(Ein bisschen zu spät zur Antwort ...)
Wie eine Datei die Größe Null haben kann, ist etwas komplizierter als in den obigen Antworten angegeben. Die Frage ist mit "Win7" gekennzeichnet, aber der Blick auf andere "einfachere" Dateisysteme wie FAT oder NTFS kann nützlich sein, da die Konzepte ähnlich sind.
Die Festplatte "weiß" nicht, was eine Datei und was ein Verzeichnis ist. Es sind alles Daten in kleinen Blöcken. Das Betriebssystem unterscheidet zwischen der Bedeutung von Datenbausteinen. Die ersten paar a special, aber der Rest der Blöcke enthält entweder Informationen zu den Daten (z. B. Dateiname, Dateilänge, erster Datenblock, der die Daten enthält) oder die Daten selbst.
Ein Verzeichnis ist eine spezielle "Datei", deren "Daten" das Betriebssystem als Informationsblock versteht, der Informationen über Dateien enthält, nicht den Inhalt der Dateien. Eine gute Analogie ist eine physische Bibliothek und der Kartenkatalog. Stellen Sie sich die Informationsblöcke als den Kartenkatalog und die Regale als die Datenblöcke vor (der Kartenkatalog befindet sich ebenfalls auf einer regalartigen Struktur).
Wenn Sie eine Datei "erstellen" (z. B. mit dem UNIX-
touch
Befehl), erstellt das Betriebssystem zunächst einen Eintrag in einem Informationsblock (Verzeichnis) mit den folgenden Angaben:Nur wenn Daten zu "schreiben" sind, wird versucht, einen leeren Datenblock zum Speichern der Daten zu finden. Die Datenblöcke sind jedoch in festen Größen (z. B. 32 KB) verfügbar, auf die die Festplatte zugreifen und das Betriebssystem lesen kann. Wenn Sie nur "Hallo" schreiben, ist der größte Teil des Blocks "leer" (tatsächlich dürfen es keine Nullen sein, sondern Müll von dem, was vorher da war), so dass die Tabelle jetzt auch die Größe auf die Länge aktualisiert (sagen wir 5 Zeichen + Ende von Datei), damit Sie nicht die schlechten Sachen bekommen.
Wenn Sie die "Datei" auf eine Länge> Blockgröße aktualisieren, schreibt das Betriebssystem die Daten in den neuen Block und aktualisiert einen Datenblock, um mitzuteilen, dass die Datei nach dem ersten (und so weiter) im nächsten Block fortgesetzt wird, und die Länge wird aktualisiert neue Länge (Details abweichen).
Am Ende erhalten Sie eine Sammlung von Informationsdatenblöcken (Verzeichnisse oder Listen) mit Informationen zu den Ketten von Datenblöcken (Dateiinhalten).
Dies erklärt logischerweise auch, warum eine Datei, die sich auf demselben Dateisystem befindet, schnell blinkt, während eine Kopie lange dauert. Das Betriebssystem muss nur 2 Verzeichnisblöcke bearbeiten, um den Eintrag aus einem Verzeichnis (Informationsdatenblock) zu entfernen und zu einem anderen hinzuzufügen. Datei löschen: Entfernen Sie einfach den Eintrag im Verzeichnisblock, um die neu zuzuordnenden Dateidatenblöcke freizugeben.
ps: Nur weil der Kartenkatalog einen Eintrag für ein Buch enthält, heißt das nicht, dass er im Regal steht (ausgecheckt oder vielleicht verloren). Dateigröße 0.
pps: Ein verlegtes Buch in der Bibliothek impliziert die Suche in der Bibliothek oder in Bezug auf den Computer: chkdsk oder repair disk!
Zum besseren Verständnis lesen Sie etwas über UNIX-Inodes oder erfahren, wie Versionskontrollsysteme (ClearCase, TFS, Git usw.) nicht nur Dateien und Verzeichnisse, sondern auch Versionen von Dateien und sogar Versionen von Verzeichnissen verwalten. In den meisten Fällen wird alles in einer Datenbank gespeichert und dem Benutzer als klassische Verzeichnisstruktur und Dateien angezeigt!
quelle
Wir haben hier einige ausgezeichnete Antworten - ich möchte nur die Bildversion hinzufügen (tausend Wörter und all das.)
So sieht eine meiner NTFS-formatierten Festplatten aus, wenn Sie sie mit einem Defragmentierungsprogramm visualisieren. Die MFT (Master File Table) wird in Violett angezeigt:
Dieses kleine violette Quadrat beschreibt die Liste der Dateien in meiner HD. In groben Zügen ist es für eine NTFS-Festplatte das Inhaltsverzeichnis für ein Buch; Anstelle von Seiten wird auf den physischen Speicherort auf der restlichen Festplatte 1 verwiesen .
Eine Datei mit einer Größe von null Byte kann als Inhaltsverzeichniseintrag dargestellt werden, der auf keine Seite verweist:
Der Eintrag ist dort aufgelistet - aber da keine Seite angegeben ist, können wir davon ausgehen, dass der Inhalt nicht vorhanden ist.
1 - Sicher ist es ein bisschen komplizierter als das; Punkte wie Sektorkarten, Spiegel-MFTs usw. fallen jedoch nicht in den Geltungsbereich dieser Frage.
quelle
Dateisysteme speichern viele Informationen zu einer Datei, z. B. Dateiname, Dateigröße, Erstellungszeit, Zugriffszeit, Änderungszeit, Berechtigungen für erstellte Benutzer, Benutzer und Gruppen, Fragmente, Zeiger auf Cluster, in denen die Datei gespeichert ist, Hard / Soft-Links, Attribute ... Diese werden als Dateimetadaten bezeichnet . Warum zählen Sie diese Metadaten zur Dateigröße, wenn sich Benutzer nicht um sie kümmern (müssen) und sie nicht kennen? Sie kümmern sich nur wirklich um den Dateiinhalt
Darüber hinaus speichert jedes Dateisystem verschiedene Arten von Metadaten , die unterschiedlich viel Speicherplatz auf der Festplatte beanspruchen. Beispielsweise unterscheiden sich POSIX-Berechtigungen stark von NTFS-Berechtigungen, und es gibt auch
inode
Zahlen in POSIX, die unter Windows nicht vorhanden sind. Selbst POSIX-Dateisysteme sind sehr unterschiedlich, wie ext3 mit 32-Bit-Blockadresse, ext4 mit 48-Bit, Btrfs mit 64-Bit und ZFS mit 128-Bit-Adresse. Wie werden diese Metadaten in die Dateigröße gezählt?Nehmen Sie ein anderes Beispiel mit einer 100-Byte-Datei, deren Metadaten 56 Byte im aktuellen Dateisystem belegen. Wir kopieren die Datei in ein anderes Dateisystem und jetzt werden 128 Byte Metadaten benötigt. Der Dateiinhalt ist jedoch genau gleich , die Anzahl der Bytes in den Dateien ist ebenfalls gleich. Die Anzeige der Dateigröße auf einem System als 156 Byte, auf einem anderen als 228 Byte ist also sehr verwirrend und nicht intuitiv .
quelle
Eine Dateigröße von
0
, ähnelt dem Sprichwort: Ich habe ein Papier mit5
Wörtern darauf. Und auf einem anderen Blatt stehen0
Worte drauf. So0
ist das durchaus möglich.Die Metadaten der Datei (Erstellungsdatum, Datum der letzten Änderung, Dateibesitzer, Berechtigungen) werden alle dort gespeichert, wo sie nicht Teil der Dateigröße sind.
quelle
Verstehen Sie es auf einfache Weise ... Wenn Sie eine Datei erstellen ... wird ein Verzeichniseintrag generiert, der als Zeiger auf den Speicherort der Datei dient, der durch den von Ihnen angegebenen Dateinamen identifiziert wird. Die Größe des Verzeichnisses nimmt zu, wenn Sie mehr und mehr Zeiger erstellen oder Dateien sagen. Die Dateigröße nimmt jedoch nur zu, wenn Sie einige Daten an der gewünschten Stelle, dh in der Datei selbst, ablegen. Bis dahin ist die Größe Null. :)
quelle
So funktioniert es:
Sobald Sie eine Datei auf einem Volume erstellen, wird ein Dateidatensatz in der NTFS-Mata-Datei erstellt, z. B. $ MFT (Master-Dateitabelle). Da in der MFT ein FRS (File Record Segment) vorhanden ist, wird ein Datensatz angezeigt. Jeder Dateidatensatz hat bei NTFS FileSystem standardmäßig eine Größe von 1 KB. Dieser Speicherplatz wird jedoch nur beansprucht, wenn Sie einige Informationen in der Datei speichern. Auch wenn Sie nur einen einzelnen Buchstaben "a" schreiben, da es sich um eine Textdatei handelt, beansprucht sie 1 KB Speicherplatz, da dies die Standardgröße des FRS ist. Der Buchstabe "a" geht an den standardmäßigen und unbenannten Datenstrom dieses FRS, $ Data, bei dem es sich um ein Attribut handelt, in das alle Ihre Daten geschrieben werden, wenn Sie keinen ADS (Alternate Data Stream) haben.
Lassen Sie mich wissen, wenn Sie Fragen haben.
quelle