
Ich habe auch gefragteine Schwesterfrage für Windows.
Unter Linux (ich habe es gerade getestet):
- Die Größe eines leeren Ordners beträgt 4 KB (unabhängig von seinem Namen).
- Die Größe einer leeren Datei beträgt 0 Bytes
Allerdings haben Dateien und Ordner offensichtlich Namen, die irgendwo gespeichert werden müssen.
- Wo werden sie ungefähr gespeichert?
- Ist der maximal verfügbare Speicher zum Speichern dieser Daten eine vordefinierte Zahl oder hängt er vom verfügbaren Speicherplatz auf der Festplatte ab?
- Benötigt eine leere Datei mit einem kurzen Namen weniger Speicherplatz als eine leere Datei mit einem längeren Namen? (Oder hat die Datenstruktur, in der diese Namen gespeichert sind, vielleicht eine feste Byteanzahl für jede Datei, die die verbleibenden Bytes möglicherweise mit auffüllt
\0
?) - Benötigt ein leerer Ordner mit einem kurzen Namen weniger Speicherplatz als ein leerer Ordner mit einem längeren Namen?
- Benötigt ein leerer Ordner namens
foobar
weniger, gleich viel oder mehr Speicherplatz als eine leere Datei namensfoobar
? - Benötigt eine leere Datei bei
/etc/empty.txt
weniger, gleich viel oder mehr Speicherplatz als eine leere Datei bei/etc/long/nested/path/until/the/empty/file/is/reached/empty.txt
?
Antwort1
Dateinamen werden im Verzeichnis gespeichert. Ein Verzeichnis besteht aus Verzeichniseinträgen und jeder Verzeichniseintrag enthält einen Dateinamen und die Inode-Nummer für diese Datei. Der Inode enthält verschiedene Metadaten, wie die Benutzer-ID und Gruppen-ID, der die Datei gehört, den Zeitpunkt der letzten Änderung des Inodes usw. Eine Datei mit einem längeren Dateinamen nimmt mehr Platz im Verzeichnis ein. Es kann mehrere Verzeichniseinträge geben (im selben oder in verschiedenen Verzeichnissen), die auf dieselbe Inode-Nummer verweisen. Wenn ein zusätzlicher Verzeichniseintrag erstellt wird, der auf denselben Inode verweist, wird dies als Erstellen eines Hardlinks bezeichnet.
Es gibt eine feste Anzahl von Inodes in der Inode-Tabelle. Wenn Sie also eine große Anzahl von Inodes erstellen, kann Ihnen irgendwann der Platz in der Inode-Tabelle ausgehen. (Wie viele Inodes verwendet werden, können Sie über „df -i“ sehen. Sie können das Dateisystem auch mit einer großen Anzahl von Inodes erstellen, wenn Sie davon ausgehen, dass die durchschnittliche Größe der Inodes im Dateisystem kleiner als die Standardgröße ist.)
Verzeichnisse bestehen ebenfalls aus Inodes und funktionieren ähnlich wie Dateien, mit der folgenden Ausnahme. Erstens hat sogar ein „leeres“ Verzeichnis Verzeichniseinträge für „.“ (das Verzeichnis selbst) und „..“ (das übergeordnete Verzeichnis), sodass selbst ein „leeres“ Verzeichnis 4 KB Speicherplatz beansprucht. Zweitens darf ein Verzeichnis keine Hardlinks haben. Das heißt (unter Ignorierung der Einträge „.“ und „..“), es kann nur Verzeichniseinträge geben, die auf einen Verzeichnis-Inode verweisen. Dies bedeutet, dass Verzeichnisse einen Baum und kein verallgemeinertes Diagramm bilden.
Antwort2
Der Befehl ls zeigt unter anderem die Dateigröße an:
Handelt es sich bei der Datei um ein Verzeichnis, wird die Größe angezeigt, die ihr vom System zugewiesen wurde.(Pro 4K-Block: 4096 Bit für das ext4-Dateisystem) auch wenn es 0 Byte enthält.
Handelt es sich um eine normale Datei, entspricht die angezeigte Größe der Größe ihres Inhalts und nicht der Größe, die die Datei einnimmt.
Um die von der Datei belegte Größe zu erfahren, ob es sich um eine normale Datei oder ein Verzeichnis handelt, verwenden Sie den Befehl „du file_name“.