0

As a very basic linux user, I've always considered the file size as shown in ls -lh to be the one and only file size on disk.

For example here, file.xlsx is 11kb

-rw-r--r--@  1 michael  staff    11K May 29  2020 file.xlsx

However, I noticed with the -s flag, the filesize displayed is now 24.

   24 -rw-r--r--@  1 michael  staff    11K May 29  2020 file.xlsx

I eventually found this answer which explained that -s shows the file size on the file system, along with the following example:

# truncate -s 128 f_zeroes.img
# hexdump -vC f_zeroes.img 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000080

truncate -s 128 f_zeroes.img

hexdump -vC f_zeroes.img

00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000080

and when I run ls -lsh I get the following:

# ls -lsh
total 4.0K
4.0K -rw-rw-r-- 1 ubuntu ubuntu 128 Apr 26 18:44 f_random.img
   0 -rw-rw-r-- 1 ubuntu ubuntu 128 Apr 26 18:43 f_zeroes.img

The explanation is that f_zeroes.img takes up 0 on the filesystem because it's still all 0s, whereas f_random.img takes up more space due to actual characters.

My question is thus: I'm sure both values have it's usage, and so which value matters when? If I have all these files taking up 0 on the file system, does that mean I am theoretically using less space than what the -l flag is telling me?

terdon
  • 242,166
Michael Du
  • 109
  • 2

0 Answers0