Wenn Sie ls -l für eine Datei ausführen, die einen Buchstaben enthält, wird sie mit einer Größe von 2B angezeigt. Wenn sich Ihr Dateisystem in 4k-Blöcken befindet, dachte ich, dass es Dateien auf die Blockgröße aufrundet? Liegt es daran, dass ls -l tatsächlich die Byteanzahl von der Inode liest? Unter welchen Umständen werden Sie aufgerundet, um Antworten gegen die tatsächliche Anzahl von Bytes in Linux 2.6 Kernel GNU-Utils zu blockieren?
linux
filesystems
ls
ext3
Gregg Leventhal
quelle
quelle
Antworten:
Ich nehme an, Sie haben diesen einen Buchstaben in der Datei mit
echo a > file
odervim file
, was bedeutet, Sie haben diesen Buchstaben und eine zusätzliche neue Zeile (zwei Zeichen, also zwei Bytes).ls -l
zeigt Dateigröße in Bytes, keine Blöcke (um genauer zu sein: Dateilänge ):(Hinweis, dass
cat -A
Zeilenumbrüche als$
Zeichen angezeigt werden )Im Gegensatz zu
ls -l
,du
die reale Größe wird zeigen , belegt auf der Festplatte:(
du
Zeigt die Größe in 1-KB-Einheiten an. Hier beträgt die Größe also 4 × 1024 Byte = 4096 Byte = 4 KB, was der Blockgröße in diesem Dateisystem entspricht.)Um dies zu
ls
zeigen, müssen Sie die-s
Option anstelle von / zusätzlich zu-l
:Die erste Spalte ist die zugewiesene Größe, wiederum in Einheiten von 1 KB. Letzter kann geändert werden, indem
--block-size
zquelle
Ich denke, dass die tiefe Antwort die folgende ist:
Wie die anderen Antworten zeigen, hat eine mit zwei Bytes erstellte Datei im Prinzip eine Länge von zwei Bytes (show by
ls -l
) und belegt 4 KB (show bydu
oderls -ls
).Sehen:
Ok,
test
hat Länge 1 und Größe (auf Platte) 4 KiB. Aber:(Der erste Befehl addiert 8191 zu Null Bytes
test
). Der Test hat jetzt die Länge 8192, belegt aber immer noch 4 KiB auf der Festplatte (er hat ein "Loch") (1).Einige Dateisysteme können auch kurze Dateien komprimieren, sodass sie weniger Platz durch gemeinsame Nutzung von Blöcken belegen (siehe zum Beispiel Tail Packing ), und andere wie btrfs kopieren beim Schreiben , also die Beziehung zwischen einer Datei, ihrer logischen Länge und wie viel Platz sie belegt Eine Scheibe ist eine komplexe.
Fußnoten:
(1) Es ist nicht wirklich ein Loch , es ist am Ende ... aber es funktioniert trotzdem bis zum Ende des Beispiels.
quelle
ls -l
ist nur ein langes Format.ls -ls
wird verwendet, um die Blockgröße anzuzeigen.Testen
Wie wir sehen können, ist die Größe der Datei mit 2B angegeben. Wenn Sie jedoch die Blockgröße überprüfen müssen, müssen Sie den folgenden Befehl ausführen.
Die 4 oben zeigt die verwendete Blockgröße an. Dies können wir auch mit dem
stat
Befehl überprüfen .Nun stellt sich die Frage, warum
ls -ls
die Blockgröße als 4 aufgelistet wird, währendstat
die Blockgröße als 8 angezeigt wird. Der Grund für dieses Verhalten wird in der Antwort hier klar erläutert .quelle