- Dave McKay
@TheGurkha
- Dezember 19, 2019, 8:00am EDT
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 echo
eine 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.
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.
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 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 “