如何在Linux中修改文件大小?
- Linux
- 2025-06-22
- 5
核心工具及方法
使用 truncate 命令(推荐)
truncate 直接修改文件元数据,高效且不改变原有内容(超出新大小的部分被丢弃)。
语法:
truncate -s <目标大小> <文件名>
示例:
# 将文件缩小到100MB(超出部分删除) truncate -s 100M data.log # 将文件扩展到500MB(新增部分填充空字节) truncate -s 500M data.log
参数说明:
- -s:指定目标大小(支持单位:K、M、G)。
- 扩展时:新增部分用NULL字节()填充。
使用 dd 命令(灵活创建/覆盖)
dd 通过复制数据流修改大小,适合精确控制内容。
示例:
# 创建1GB的空文件(快速) dd if=/dev/zero of=largefile.bin bs=1G count=1 # 扩展文件到2GB(追加1GB空数据) dd if=/dev/zero bs=1G count=1 >> existingfile.bin # 截断文件到200MB(复制前200MB内容) dd if=source.bin of=target.bin bs=1M count=200
关键参数:
- if=/dev/zero:输入源(空字节)。
- of=<文件>:输出目标。
- bs:块大小,count:块数量。
使用 fallocate 命令(高效预分配)
直接分配磁盘块(仅限支持fallocate的文件系统如ext4、XFS)。
语法:

示例:
# 创建或扩展文件到300MB fallocate -l 300M disk_image.img
优势:瞬间完成(不写零字节),适合大文件操作。
重定向符号(快速调整)
通过Shell重定向快速创建或清空文件:
# 创建10MB空文件 > emptyfile && truncate -s 10M emptyfile # 清空文件(大小变为0) > log.txt
关键注意事项
-
备份重要数据:
截断文件(如truncate)会永久删除超出部分,操作前建议备份:

-
权限要求:
需对目标文件有写权限(使用sudo提权):
sudo truncate -s 50M /var/log/app.log
-
文件系统兼容性:
- fallocate 在FAT/NTFS等非Linux文件系统上可能失效。
- 虚拟磁盘文件(如QCOW2)需用专用工具(qemu-img resize)。
保留规则**:
- 扩展文件时,新增区域填充(空字节),不影响原有数据。
- 缩小文件时,尾部数据丢失且不可恢复。
- 扩展文件:优先用fallocate(高效)或truncate(通用)。
- 缩小文件:用truncate避免数据冗余。
- 复杂操作:dd 适合按块处理二进制文件。
始终验证结果:ls -lh <文件名> 或 du -sh <文件名> 检查大小。
应用场景建议
需求 推荐工具 命令示例 快速创建空文件 truncate truncate -s 2G testfile 高效预分配磁盘空间 fallocate fallocate -l 5G virtual_disk 精确控制文件内容 dd dd if=/dev/urandom of=rand.bin bs=1M count=10 清空文件(大小归零) 重定向 > access.log
引用说明基于Linux核心工具手册(man truncate、man dd、man fallocate)及Filesystem Hierarchy Standard (FHS) 标准实践,操作前请确认理解命令风险,生产环境建议在测试后执行。
