So ermitteln Sie die Größe einer Datei oder eines Verzeichnisses unter Linux

  • Dave McKay

    @TheGurkha

  • Dezember 19, 2019, 8:00am EDT
Fatmawati Achmad Zaenuri/

Wenn Sie den Linux-Befehl du verwenden, erhalten Sie sowohl die tatsächliche Festplattennutzung als auch die tatsächliche Größe einer Datei oder eines Verzeichnisses. Wir erklären, warum diese Werte nicht gleich sind.

Tatsächliche Festplattennutzung und wahre Größe

Die Größe einer Datei und der Speicherplatz auf Ihrer Festplatte sind selten gleich., Speicherplatz wird in Blöcken zugewiesen. Wenn eine Datei kleiner als ein Block ist, wird ihr immer noch ein ganzer Block zugewiesen, da das Dateisystem keine kleinere Immobilieneinheit zu verwenden hat.

Sofern die Größe einer Datei nicht ein exaktes Vielfaches von Blöcken ist, muss der auf der Festplatte verwendete Speicherplatz immer auf den nächsten ganzen Block aufgerundet werden. Wenn eine Datei beispielsweise größer als zwei, aber kleiner als drei Blöcke ist, benötigt sie immer noch drei Speicherblöcke.

<

In Bezug auf die Dateigröße werden zwei Messungen verwendet., Die erste ist die tatsächliche Größe der Datei, dh die Anzahl der Inhaltsbytes, aus denen die Datei besteht. Die zweite ist die effektive Größe der Datei auf der Festplatte. Dies ist die Anzahl der Dateisystemblöcke, die zum Speichern dieser Datei erforderlich sind.

Ein Beispiel

schauen wir uns ein einfaches Beispiel an., Wir leiten ein einzelnes Zeichen in eine Datei um, um eine kleine Datei zu erstellen:

echo "1" > geek.txt

Jetzt verwenden wir die lange Formatliste ls, um die Dateilänge zu betrachten:

ls -l geek.txt

Die Länge ist der numerische Wert, der dem folgt dave dave einträge, das sind zwei Bytes. Warum sind es zwei Bytes, wenn wir nur ein Zeichen an die Datei gesendet haben? Schauen wir uns an, was in der Datei passiert.,

>

Wir verwenden den Befehl hexdump, der uns eine genaue Bytezahl gibt und es uns ermöglicht, nicht druckende Zeichen als Hexadezimalwerte zu „sehen“. Wir verwenden auch die Option -C (kanonisch), um die Ausgabe zu zwingen, hexadezimale Werte im Hauptteil der Ausgabe sowie deren alphanumerische Zeichenäquivalente anzuzeigen:

hexdump -C geek.txt

Die Ausgabe zeigt uns, dass es ab Offset 00000000 in der Datei ein Byte gibt, das einen hexadezimalen Wert von 31 enthält, und ein Byte, das einen hexadezimalen Wert von 0A enthält., Der rechte Teil der Ausgabe stellt diese Werte, wo immer möglich, als alphanumerische Zeichen dar.

Zur Darstellung der Ziffer eins wird der Hexadezimalwert 31 verwendet. Der Hexadezimalwert 0A wird verwendet, um das Zeilenvorschubzeichen darzustellen, das nicht als alphanumerisches Zeichen angezeigt werden kann.) stattdessen. Das Zeilenvorschubzeichen wird durch echo hinzugefügt . Standardmäßig startet echoeine neue Zeile, nachdem der Text angezeigt wird, den er in das Terminalfenster schreiben muss.,

Das entspricht der Ausgabe von ls und stimmt mit der Dateilänge von zwei Bytes überein.

VERWANDT: Wie benutzt man den Befehl ls, um Dateien und Verzeichnisse unter Linux aufzulisten

>

Jetzt verwenden wir den Befehl du, um die Dateigröße zu betrachten:

du geek.txt

Es heißt, die Größe ist vier, aber vier davon?

Es gibt Blöcke, und dann gibt es Blöcke

Wenn du Dateigrößen in Blöcken meldet, hängt die verwendete Größe von mehreren Faktoren ab., Sie können angeben, welche Blockgröße in der Befehlszeile verwendet werden soll. Wenn Sie du nicht zwingen, eine bestimmte Blockgröße zu verwenden, folgt eine Reihe von Regeln, um zu entscheiden, welche verwendet werden soll.

Zunächst werden die folgenden Umgebungsvariablen überprüft:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOCKSIZE

Wenn eine dieser Variablen vorhanden ist, wird die Blockgröße festgelegt, und du stoppt die Überprüfung. Wenn keine gesetzt ist, du standardmäßig eine Blockgröße von 1.024 Bytes., Es sei denn, es wird eine Umgebungsvariable mit dem Namen POSIXLY_CORRECT festgelegt. Wenn dies der Fall ist, du standardmäßig eine Blockgröße von 512 Bytes.

Werbung

Wie finden wir heraus, welches verwendet wird? Sie können jede Umgebungsvariable überprüfen, um sie auszuarbeiten, aber es gibt einen schnelleren Weg. Vergleichen wir die Ergebnisse mit der Blockgröße, die das Dateisystem stattdessen verwendet.

Um die Blockgröße des Dateisystems zu ermitteln, verwenden wir das Programm tune2fs., Wir verwenden dann die Option -l (list superblock), leiten die Ausgabe über grep und drucken dann Zeilen, die das Wort enthalten „Block.“

In diesem Beispiel betrachten wir das Dateisystem auf der ersten Partition der ersten Festplatte, sda1, und wir müssen sudo:

sudo tune2fs -l /dev/sda1 | grep Block

Die Blockgröße des Dateisystems beträgt 4.096 Byte. Wenn wir das durch das Ergebnis teilen, das wir von du (vier) erhalten haben, wird die du Standardblockgröße ist 1,024 Bytes., Wir wissen jetzt, einige wichtige Dinge.

Werbung

Zunächst wissen wir, dass die kleinste Menge an Dateisystemimmobilien, die zum Speichern einer Datei verwendet werden können, 4.096 Byte beträgt. Dies bedeutet, dass selbst unsere winzige Zwei-Byte-Datei 4 KB Festplattenspeicher beansprucht.

Das zweite, was Sie beachten sollten, sind Anwendungen, die sich mit der Berichterstattung über Festplatten-und Dateisystemstatistiken befassen, z. B. du, ls und tune2fs, kann unterschiedliche Vorstellungen davon haben, was“ block “ bedeutet., Dietune2fs – Anwendung meldet echte Dateisystemblockgrößen, währendls unddu konfiguriert oder gezwungen werden können, andere Blockgrößen zu verwenden. Diese Blockgrößen sollen sich nicht auf die Blockgröße des Dateisystems beziehen; Sie sind nur „Chunks“, die diese Befehle in ihrer Ausgabe verwenden.

Schließlich vermitteln die Antworten von du und tune2fs, abgesehen von der Verwendung unterschiedlicher Blockgrößen, dieselbe Bedeutung., Dastune2fs Ergebnis war ein Block von 4.096 Bytes und dasdu Ergebnis war vier Blöcke von 1.024 Bytes.

Verwenden von du

Ohne Befehlszeilenparameter oder-optionen listet du den gesamten Speicherplatz auf, den das aktuelle Verzeichnis und alle Unterverzeichnisse verwenden.

Schauen wir uns ein Beispiel an:

du
<

Die Größe wird in der Standardblockgröße von 1.024 Bytes pro Block angegeben. Der gesamte Unterverzeichnisbaum wird durchlaufen.,

Verwenden von du in einem anderen Verzeichnis

Wenn Sie du möchten, um ein anderes Verzeichnis als das aktuelle zu melden, können Sie den Pfad an das Verzeichnis in der Befehlszeile übergeben:

du ~/.cach/evolution/

Verwenden von du in einer bestimmten Datei

Wenn Sie du eine bestimmte Datei, übergeben Sie den Pfad zu dieser Datei in der Befehlszeile., Sie können auch ein Shell-Muster an eine ausgewählte eine Gruppe von Dateien übergeben, wie zum Beispiel *.txt:

du ~/.bash_aliases

Berichterstattung über Dateien in Verzeichnissen

Um du Bericht über die Dateien im aktuellen Verzeichnis und Unterverzeichnisse, Verwenden Sie die -a (alle Dateien) option:

du -a

Für jedes Verzeichnis wird die Größe jeder Datei sowie eine Summe für jedes Verzeichnis gemeldet.,

Verzeichnisbaumtiefe begrenzen

Sie können du anweisen, den Verzeichnisbaum auf eine bestimmte Tiefe aufzulisten. Verwenden Sie dazu die Option -d (max depth) und geben Sie einen Tiefenwert als Parameter an. Beachten Sie, dass alle Unterverzeichnisse gescannt und zur Berechnung der gemeldeten Summen verwendet werden, aber nicht alle aufgelistet sind. Um eine maximale Verzeichnistiefe von einer Ebene festzulegen, verwenden Sie diesen Befehl:

du -d 1

Die Ausgabe listet die Gesamtgröße dieses Unterverzeichnisses im aktuellen Verzeichnis auf und stellt auch eine Summe für jedes Verzeichnis bereit.,

Um Verzeichnisse eine Ebene tiefer aufzulisten, verwenden Sie diesen Befehl:

du -d 2

Festlegen der Blockgröße

Sie können die Option block verwenden, um eine Blockgröße für du für den aktuellen Vorgang festzulegen.,d Verwenden Sie in der am besten geeigneten Blockgröße entsprechend dem Speicherplatz, der von den Verzeichnissen und Dateien verwendet wird, die Option -h (für Menschen lesbar):

du -h

Um die scheinbare Größe der Datei und nicht die Menge an Festplattenspeicher zum Speichern der Datei anzuzeigen, verwenden Sie die Option --apparent-size

du --apparent-size

Sie können dies mit der Option -a (all) kombinieren, um die scheinbare Größe jeder Datei anzuzeigen:

du --apparent-size -a

Jede Datei wird zusammen mit ihrer scheinbaren Größe aufgelistet.,

Nur Summen anzeigen

Wenn Sie möchten, dass du nur die Summe für das Verzeichnis meldet, verwenden Sie die Option -s (zusammenfassen)., Sie können dies auch mit anderen Optionen kombinieren, z. B. der Option -h (für Menschen lesbar):

Hier verwenden wir sie mit der Option --apparent-size:

du --apparent-size -s

Anzeige der Änderungszeiten

Um die Erstellung zu sehen oder letzte Änderung Zeit und Datum, verwenden Sie die Option:

du --time -d 2

Seltsame Ergebnisse?,

Wenn Sie seltsame Ergebnisse von du , insbesondere wenn Sie Größen von anderen Befehlen auf die Ausgabe verweisen, liegt dies normalerweise an den verschiedenen Blockgrößen, auf die verschiedene Befehle eingestellt werden können oder auf die sie standardmäßig eingestellt sind. Dies kann auch auf die Unterschiede zwischen den tatsächlichen Dateigrößen und dem zum Speichern erforderlichen Speicherplatz zurückzuführen sein.

Wenn Sie die Ausgabe anderer Befehle anpassen müssen, experimentieren Sie mit der Option --block in du.,

Dave McKay
Dave McKay verwendete zuerst Computer, als gestanztes Papierband in Mode war, und er programmiert seitdem. Nach über 30 Jahren in der IT-Branche ist er nun Vollzeit-Technologiejournalist. Während seiner Karriere arbeitete er als freier Programmierer, Manager eines internationalen Softwareentwicklungsteams, IT-Projektmanager und zuletzt als Datenschutzbeauftragter. Dave ist ein Linux-evangelist-und open-source-Verfechter.Lesen Sie vollständige Bio “

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.