Linux文件存储字节数测量疑问:为何文件大小每次翻倍?
Linux文件存储字节数与stat输出解析
问题背景与操作过程
- 创建空文件并确认字符集:
[root@pgsql1 iotest]# touch 1 [root@pgsql1 iotest]# file -bi 1 text/plain; charset=us-ascii [root@pgsql1 iotest]# enca -L none 1 7bit ASCII characters [root@pgsql1 iotest]# echo $LANG en_US.UTF-8
- 初始文件状态:
[root@pgsql1 iotest]# stat 1 File: ‘1’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 831h/2097d Inode: 12 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2024-09-29 19:18:55.257153854 +0530 Modify: 2024-09-29 19:18:55.257153854 +0530 Change: 2024-09-29 19:18:55.257153854 +0530 Birth: -
- 写入内容后查看状态:
[root@pgsql1 iotest]# echo "1" > 1 [root@pgsql1 iotest]# stat 1 File: ‘1’ Size: 2 Blocks: 8 IO Block: 4096 regular file Device: 831h/2097d Inode: 12 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2024-09-29 19:18:55.257153854 +0530 Modify: 2024-09-29 19:20:02.806425277 +0530 Change: 2024-09-29 19:20:02.806425277 +0530 Birth: -
- 追加内容后查看状态:
[root@pgsql1 iotest]# echo "1" >> 1 [root@pgsql1 iotest]# stat 1 File: ‘1’ Size: 4 Blocks: 8 IO Block: 4096 regular file Device: 831h/2097d Inode: 12 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2024-09-29 19:18:55.257153854 +0530 Modify: 2024-09-29 19:21:03.907575276 +0530 Change: 2024-09-29 19:21:03.907575276 +0530 Birth: -
疑问:单个"1"仅占用1字节,但stat输出的Size每次翻倍,需解释Linux存储分配机制。
核心解释
1. 文件Size翻倍的原因:echo默认追加换行符
echo命令在输出内容时,默认会在末尾添加一个换行符(\n)。这个换行符在ASCII/UTF-8编码下占用1字节,所以执行echo "1" > 1时,实际写入文件的是"1\n",共2字节——这就是第一次写入后Size=2的原因。
当执行echo "1" >> 1时,再次追加"1\n",文件内容变为"1\n1\n",总字节数为4,对应stat输出的Size=4。
可以用cat -A 1命令验证:
[root@pgsql1 iotest]# cat -A 1 1$ 1$
其中$代表换行符,直观显示了文件中的两个换行符。
2. Blocks分配的逻辑:文件系统块单位
stat输出中的Blocks是以512字节为单位计数的,而IO Block是文件系统的最小分配单元(这里是4096字节)。
- 空文件不需要存储数据,所以Blocks=0;
- 当写入内容后,即使内容只有2字节,文件系统也会分配至少一个最小块(4096字节),对应
Blocks=8(因为4096/512=8); - 追加内容后,总字节数4仍远小于4096,所以不会额外分配块,Blocks保持8不变。
3. 字符集的影响
你的系统LANG是UTF-8,但文件字符集是US-ASCII——不过数字"1"在两种编码下都占用1字节,所以字符集不是本次Size异常的原因。
内容的提问来源于stack exchange,提问作者smgopinath
相关产品推荐
相关产品推荐

