Linux

EXT3:如果塊大小為 4K,為什麼 ls -l 顯示低於該大小的文件大小?

  • March 13, 2015

如果您對包含一個字母的文件執行 ls -l,它將列出大小為 2B。如果您的文件系統是 4k 塊,我認為它會將文件四捨五入到塊大小?是因為 ls -l 實際上是從 inode 讀取字節數嗎?在什麼情況下,您會在 Linux 2.6 Kernel GNU utils 中四捨五入以阻止答案與實際字節數答案?

我猜你用echo a > fileor將那個字母放入文件中vim file,這意味著你將在其中包含那個字母和一個額外的換行符(兩個字元,因此兩個字節)。 ls -l以字節顯示文件大小,而不是塊(更具體地說:文件長度):

$ 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 字節 = 4 kiB,這是這個文件系統上的塊大小)

ls顯示這一點,您必須使用該-s選項而不是/除了-l

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

第一列是分配的大小,同樣以 1kiB 為單位。Last 可以通過指定來改變--block-size,例如

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

引用自:https://unix.stackexchange.com/questions/126971