ASCIIテキストファイルがあります。
file foo
foo: ASCII text
6つの文字のみを含めます(「F」の後に改行やスペースなし)。
cat foo
ABCDEF
ASCIIなので、ファイルサイズは6バイトでなければなりません(ASCIIは1文字あたり1バイトです)。
ただし、du
習慣的にこれを行うと、次のような混乱した結果が表示されます。
du -bsch foo
7 foo
7 total
そして
du -ksch foo
4.0K foo
4.0K total
そのため、予想した6bよりファイルサイズが大きいだけでなく、バイト単位で書き込むときとkb単位で書き込むときにも違いがあります。
だから私の質問は
- ファイルサイズが予想6bより大きいのはなぜですか?余分なバイトはどこに行きましたか?
du
ユニットごとに出力が異なるのはなぜですか?
注:これはLinuxの問題ではない可能性があります。私はUnixコマンドを使用しているので、いくつかのコンピュータサイエンスフォーラムではなく、ここにこれを投稿します。
修正する部門規模:
Disk /dev/sda: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: SanDisk SD8SN8U5
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D12CA635-6354-48FF-A0D6-0D3CB4BDBE2E
Device Start End Sectors Size Type
/dev/sda1 2048 534527 532480 260M EFI System
/dev/sda2 534528 567295 32768 16M Microsoft reserved
/dev/sda3 567296 208748856 208181561 99.3G Microsoft basic data
/dev/sda4 208750592 210485247 1734656 847M Windows recovery environment
/dev/sda5 210485248 212582399 2097152 1G Linux filesystem
/dev/sda6 212582400 1000214527 787632128 375.6G Linux filesystem
Disk /dev/zram0: 7.65 GiB, 8210350080 bytes, 2004480 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
修正する od
出力:
od -c foo
0000000 A B C D E F \n
0000007
答え1
Linuxの最新のファイルシステムは常に4096バイトのブロックサイズを持っています。stat -f foo
これを確認するために使用できます。
du -b
block-size=1 の見かけのサイズを教えてくれます。したがって、実際のコンテンツバイトを知らせます(疎性については知りません)。
du -k
実際のディスクサイズをKiB単位で提供します。ファイルが4096より小さいので、4kを提供します。
例は次のとおりです。
du -b foo.txt
4 foo.txt
du --block-size=1 foo.txt
4096 foo.txt
du -b foo-5k.bin
5120 foo-5k.bin
du --block-size=1 foo-5k.bin
8192 foo-5k.bin
実際のディスクサイズはN * 4096であることがわかります。