EXT3:ブロックサイズが4Kの場合、ls -lがその下のファイルサイズを表示するのはなぜですか?

EXT3:ブロックサイズが4Kの場合、ls -lがその下のファイルサイズを表示するのはなぜですか?

1文字を含むファイルに対してls -lを実行すると、ファイルサイズは2Bとして表示されます。ファイルシステムが4kブロックの場合、ファイルをブロックサイズに丸めるとしますか? ls -lは実際にinodeからバイト数を読み取るためですか?どのような状況で、Linux 2.6カーネルGNUユーティリティでブロック回答を実際のバイト回答に丸めますか?

ベストアンサー1

echo a > fileorを使用してこの1つの文字をファイルに入れたようですvim file。これは、対応する文字と追加の改行(2文字、したがって2バイト)を持つことになるという意味です。 ls -lファイルサイズをブロックではなくバイト単位で表示します(具体的にはfile長さ):

$ echo a > testfile
$ ls -l testfile
-rw-r--r-- 1 user user 2 Apr 28 22:08 testfile
$ cat -A testfile
a$

(改行文字は文字cat -Aで表示されます。)$

以下と比較して、ディスクが占める実際のサイズを表示しますls -ldu

$ du testfile
4

(実際にduサイズは1kiB単位で表示されるので、ここのサイズは4×1024バイト=4096バイト=4kiB、つまりこのファイルシステムのブロックサイズです。)

これを表示するには、次の代わりに/追加でlsこのオプションを使用する必要があります。-s-l

$ ls -ls testfile
4 -rw-r--r-- 1 user user 2 Apr 28 22:08 testfile

最初の列は割り当てサイズ(1kiB単位)です。最後に、これを指定して変更できます--block-size

$ ls -ls --block-size=1 testfile
4096 -rw-r--r-- 1 aw aw 2 Apr 28 22:08 testfile

おすすめ記事