Connect with us

Wie man

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

So verwenden Sie Curl zum Herunterladen von Dateien über die Linux-Befehlszeile

Fatmawati Achmad Zaenuri / Shutterstock

Wenn Sie Linux verwenden du Befehl erhalten Sie sowohl die tatsächliche Festplattennutzung als auch die wahre Größe einer Datei oder eines Verzeichnisses. Wir werden 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. Der 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 nicht über eine kleinere zu verwendende Immobilieneinheit verfügt.

Sofern die Größe einer Datei nicht ein genaues 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 Blöcke, aber kleiner als drei ist, werden immer noch drei Speicherblöcke benötigt, um sie zu speichern.

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 werden ein einzelnes Zeichen in eine Datei umleiten, um eine kleine Datei zu erstellen:

echo "1" > geek.txt

Jetzt verwenden wir die Langformatliste. ls, um die Dateilänge zu betrachten:

ls -l geek.txt

Die Länge ist der numerische Wert, der auf folgt dave dave Einträge, das sind zwei Bytes. Warum sind es zwei Bytes, wenn wir nur ein Zeichen an die Datei gesendet haben? Werfen wir einen Blick darauf, was in der Datei passiert.

Wir werden das benutzen hexdump Befehl, der uns eine genaue Anzahl von Bytes gibt und es uns ermöglicht, „zu sehen“ Nicht druckbare Zeichen als Hexadezimalwerte. Wir werden auch die verwenden -C (kanonische) Option, 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 dem Offset 00000000 in der Datei ein Byte gibt, das einen Hexadezimalwert von 31 enthält, und ein Byte, das einen Hexadezimalwert von 0A enthält. Der rechte Teil der Ausgabe zeigt diese Werte nach Möglichkeit als alphanumerische Zeichen.

Der Hexadezimalwert von 31 wird verwendet, um die erste Ziffer darzustellen. Der Hexadezimalwert von 0A wird verwendet, um das Zeilenvorschubzeichen darzustellen, das nicht als alphanumerisches Zeichen angezeigt werden kann. Daher wird es stattdessen als Punkt (.) Angezeigt. Das Zeilenvorschubzeichen wird von hinzugefügt echo . Standardmäßig, echoBeginnt eine neue Zeile, nachdem der Text angezeigt wurde, der zum Schreiben in das Terminalfenster benötigt wird.

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

Jetzt werden wir die verwenden du Befehl zum Anzeigen der Dateigröße:

du geek.txt

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

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

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

Zunächst wird Folgendes überprüft Umgebungsvariablen:

  • DU_BLOCK_SIZE
  • BLOCK GRÖSSE
  • BLOCK GRÖSSE

Wenn eine dieser Optionen vorhanden ist, wird die Blockgröße festgelegt und du stoppt die Überprüfung. Wenn keine festgelegt sind, du Der Standardwert ist eine Blockgröße von 1.024 Byte. Es sei denn, es handelt sich um eine Umgebungsvariable, die aufgerufen wird POSIXLY_CORRECT eingestellt ist. Wenn das der Fall ist, du Der Standardwert ist eine Blockgröße von 512 Byte.

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

Um die Blockgröße zu ermitteln, die das Dateisystem verwendet, verwenden wir die tune2fs Programm. Wir werden dann die verwenden -l ((Liste Superblock) Option, leiten Sie die Ausgabe durch grep, und dann Druckzeilen, die enthalten das Wort „Block“.

In diesem Beispiel sehen wir uns das Dateisystem auf der ersten Partition der ersten Festplatte an. sda1und wir müssen verwenden 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 erhalten haben du (vier) zeigt es die du Die Standardblockgröße beträgt 1.024 Byte. Wir wissen jetzt einige wichtige Dinge.

Erstens wissen wir, dass die kleinste Menge an Dateisystemimmobilien, die zum Speichern einer Datei verwendet werden kann, 4.096 Byte beträgt. Dies bedeutet, dass selbst unsere winzige Zwei-Byte-Datei 4 KB Festplattenspeicher belegt.

Das zweite, was Sie beachten sollten, sind Anwendungen, die für die Berichterstellung über Festplatten- und Dateisystemstatistiken vorgesehen sind, z du, ls, und tune2fskann unterschiedliche Vorstellungen davon haben, was „Block“ bedeutet. Das tune2fs Anwendung meldet wahre Dateisystemblockgrößen, während ls und du kann konfiguriert oder gezwungen werden, 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, abgesehen von der Verwendung unterschiedlicher Blockgrößen, die Antworten von du und tune2fs vermitteln die gleiche Bedeutung. Das tune2fs Ergebnis war ein Block von 4.096 Bytes, und die du Ergebnis waren vier Blöcke mit 1.024 Bytes.

Verwenden von du

Ohne Befehlszeilenparameter oder -optionen du listet 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 Byte pro Block angegeben. Der gesamte Unterverzeichnisbaum wird durchlaufen.

Verwenden von du in einem anderen Verzeichnis

Falls Sie es wollen du Um in einem anderen Verzeichnis als dem aktuellen zu berichten, können Sie den Pfad zum Verzeichnis in der Befehlszeile übergeben:

du ~/.cach/evolution/

Verwenden von du auf einer bestimmten Datei

Falls Sie es wollen du Um über eine bestimmte Datei zu berichten, übergeben Sie den Pfad zu dieser Datei in der Befehlszeile. Sie können auch ein Shell-Muster an eine ausgewählte Gruppe von Dateien übergeben, z *.txt::

du ~/.bash_aliases

Berichterstellung zu Dateien in Verzeichnissen

Haben du Wenn Sie über die Dateien im aktuellen Verzeichnis und in den Unterverzeichnissen berichten möchten, verwenden Sie die -a Option (alle Dateien):

du -a

Für jedes Verzeichnis wird die Größe jeder Datei sowie eine Gesamtsumme für jedes Verzeichnis angegeben.

Begrenzung der Verzeichnisbaumtiefe

Du kannst sagen du um den Verzeichnisbaum bis zu einer bestimmten Tiefe aufzulisten. Verwenden Sie dazu die -d Option (maximale Tiefe) und geben Sie einen Tiefenwert als Parameter an. Beachten Sie, dass alle Unterverzeichnisse gescannt und zur Berechnung der gemeldeten Summen verwendet werden, jedoch nicht alle aufgelistet sind. Verwenden Sie diesen Befehl, um eine maximale Verzeichnistiefe von einer Ebene festzulegen:

du -d 1

Die Ausgabe listet die Gesamtgröße dieses Unterverzeichnisses im aktuellen Verzeichnis auf und gibt auch eine Gesamtgröße für jedes Verzeichnis an.

Verwenden Sie diesen Befehl, um Verzeichnisse eine Ebene tiefer aufzulisten:

du -d 2

Einstellen der Blockgröße

Du kannst den … benutzen block Option zum Festlegen einer Blockgröße für du für den aktuellen Betrieb. Um eine Blockgröße von einem Byte zu verwenden, verwenden Sie den folgenden Befehl, um die genauen Größen der Verzeichnisse und Dateien abzurufen:

du --block=1

Wenn Sie eine Blockgröße von einem Megabyte verwenden möchten, können Sie die verwenden -m (Megabyte) Option, die die gleiche ist wie --block=1M::

du -m

Wenn Sie möchten, dass die Größen in der am besten geeigneten Blockgröße entsprechend dem von den Verzeichnissen und Dateien verwendeten Speicherplatz angegeben werden, verwenden Sie die -h (für Menschen lesbare) Option:

du -h

Verwenden Sie die Taste, um die scheinbare Größe der Datei und nicht den zum Speichern der Datei verwendeten Festplattenspeicher anzuzeigen --apparent-size Möglichkeit:

du --apparent-size

Sie können dies mit dem kombinieren -a (alle) Option, 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

Falls Sie es wollen du Verwenden Sie die Taste, um nur die Gesamtsumme für das Verzeichnis zu melden -s Option (zusammenfassen). Sie können dies auch mit anderen Optionen kombinieren, z -h (für Menschen lesbare) Option:

du -h -s

Hier werden wir es mit dem verwenden --apparent-size Möglichkeit:

du --apparent-size -s

Änderungszeiten anzeigen

Verwenden Sie die Taste, um die Erstellungszeit und das Datum der letzten Änderung anzuzeigen --time Möglichkeit:

du --time -d 2

Seltsame Ergebnisse?

Wenn Sie seltsame Ergebnisse von sehen du Insbesondere wenn Sie Größen auf die Ausgabe anderer Befehle verweisen, liegt dies normalerweise an den unterschiedlichen Blockgrößen, auf die unterschiedliche Befehle festgelegt werden können, oder an denen, auf die sie standardmäßig eingestellt sind. Dies kann auch an den Unterschieden zwischen den tatsächlichen Dateigrößen und dem zum Speichern erforderlichen Speicherplatz liegen.

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

Continue Reading
Click to comment

Leave a Reply

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

Tendencia