stats命令提供以下输出 -
bash-3.2$ stat myfile.zip
File: `myfile.zip'
Size: 80195 Blocks: 168 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 24675915 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 501/meghadata) Gid: ( 500/ megha)
Access: 2013-12-24 10:53:39.000000000 +0530
Modify: 2013-10-01 18:00:58.000000000 +0530
Change: 2013-12-24 10:51:39.000000000 +0530
“尺寸”是指物理尺寸还是逻辑尺寸?
答案 0 :(得分:0)
我认为Size指的是逻辑大小。
看,stat
使用系统调用lstat
(如strace
所示)。
lstat("myfilename.txt", {st_mode=S_IFREG|0644, st_size=1000000, ...}) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 4), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f52e3d08000
write(1, " File: `myfilename.txt'\n", 25) = 25
write(1, " Size: 1000000 \tBlocks: 1968 "..., 68) = 68
write(1, "Device: 1eh/30d\tInode: 908841 "..., 44) = 44
man lstat:
这些系统调用返回一个stat结构,其中包含 以下字段:
off_t st_size; / *总大小,以字节为单位 / blkcnt_t 的st_blocks; / 分配的512B块数* /
st_size字段给出文件的大小(如果它是常规文件) 或以字节为单位的符号链接。 st_blocks字段表示数字 分配给文件的块,512字节单位。 (这可能更小 当文件有漏洞时,比st_size / 512。)
所以“st_blocks字段表示分配给文件的块数,512字节单位。”我的文件长度为1,000,000字节。但它有1968个块,意味着1,007,616个字节。
此外还有带孔的文件“当文件有空洞时,这可能小于st_size / 512”。因此,您可以创建一个文件系统在文件系统上使用的空间比ls -l
显示的文件少。例如,在这个答案中https://stackoverflow.com/a/5315473/184968
它显示了如何创建一个带孔的文件:
>dd if=/dev/urandom bs=4096 count=2 of=file_with_holes
>dd if=/dev/urandom bs=4096 seek=7 count=2 of=file_with_holes
>stat file_with_holes
File: `file_with_holes'
Size: 36864 Blocks: 40 IO Block: 65536 regular file
其逻辑大小为36,864字节,而文件系统只占用20,480字节(40 * 512 = 20480字节)。