名称
truncate - 缩小或扩展文件到指定大小
简介
truncate [选项]... 文件...描述
truncate 命令将每个文件的大小调整为指定的大小。如果文件不存在,通常会创建新的空文件(除非指定了 -c 选项)。该命令主要用于:
快速创建指定大小的文件(如创建空白磁盘映像、测试文件)。
截断文件(删除文件末尾部分)或将文件扩展(填充空字节)。
在不打开文件的情况下调整文件大小。
扩展文件时,新增部分在磁盘上通常以空洞(sparse)方式存在,实际不占用物理空间,直到写入数据。缩小文件时,超出新大小的数据会永久丢失。
选项
大小格式
--size 参数可以指定数值及可选单位,也可以使用相对调整符号。基本格式为:
[+|-|/|%]数值[单位]数值:整数(可正可负,但配合符号使用时符号在前)。
单位:
K、M、G、T、P、E、Z、Y:以 1024 为基数(如1K= 1024 字节)。KB、MB、GB、TB、PB、EB、ZB、YB:以 1000 为基数(如1KB= 1000 字节)。若不指定单位,则默认为字节。
相对符号(放在数值前):
+:增加大小(相对于当前文件大小)。-:减少大小。<:如果当前大小小于指定值,则保持不变;否则截断到指定值(即不大于)。>:如果当前大小大于指定值,则保持不变;否则扩展到指定值(即不小于)。/:向下舍入到指定值的倍数(通常结合块大小使用)。%:向上舍入到指定值的倍数。
示例:+10M 表示在当前大小基础上增加 10 MiB;-2G 表示减少 2 GiB;<1G 确保文件不超过 1 GiB。
退出状态
0 – 所有操作成功完成。
>0 – 发生错误(如文件无法访问、无效大小格式、权限不足等)。
常用示例
1. 将文件大小设置为 100 MiB
truncate -s 100M file.txt如果文件不存在则创建;若存在则调整为恰好 100 MiB(扩展时空字节填充,缩小则截断末尾)。
2. 将文件扩展到 200 MiB(不缩小)
truncate -s >200M file.txt使用 > 确保只扩展不缩小,即若当前小于 200 MiB 则扩展到 200 MiB,否则保持原样。
3. 将文件缩小到 50 MiB
truncate -s 50M file.txt4. 在当前大小基础上增加 10 MiB
truncate -s +10M file.txt5. 在当前大小基础上减少 20 MiB
truncate -s -20M file.txt6. 不创建新文件(文件不存在则忽略)
truncate -c -s 100M maybe_not_exist.txt7. 参考另一个文件的大小
truncate -r reference.txt target.txt将 target.txt 的大小调整为与 reference.txt 相同。
8. 清空文件(大小设为 0)
truncate -s 0 file.txt快速清空文件内容,类似于 > file.txt 但更明确。
9. 创建指定大小的空文件(用于测试)
truncate -s 1G largefile.bin创建一个 1 GiB 的空文件(实际为稀疏文件,不占 1 GiB 物理空间)。
10. 使用块大小(假设块大小为 512 字节)
truncate -o -s 2048 file.txt将文件大小设置为 2048 个 I/O 块,即 2048 × 512 = 1,048,576 字节。
11. 确保文件不超过 500 MiB(若超过则截断)
truncate -s <500M file.txt12. 将文件大小调整为下一个 1 MiB 的整数倍(向上取整)
truncate -s %1M file.txt若当前大小为 2.3 MiB,则调整为 3 MiB。
注意事项
数据丢失风险:缩小文件会丢失超出新大小的数据,操作前建议备份。
稀疏文件:扩展出的空间在磁盘上不实际占用,直到写入数据。但某些文件系统或挂载选项可能不支持空洞。
相对大小:使用
+或-时,如果文件不存在,会报错(除非同时使用-c忽略不存在文件)。权限要求:需要拥有文件的写权限,以及目录的执行权限(用于创建新文件)。
符号链接:
truncate操作的是符号链接指向的目标文件,而不是链接本身。如果要调整链接自身大小,通常无意义(链接本身很小)。与
dd的区别:dd可以通过复制零来创建固定大小的文件,但会实际写入零,性能较差且占用物理空间;truncate创建空洞文件更快,更节省空间。与
fallocate的区别:fallocate用于预分配物理空间,支持保留空间但不实际写入数据(类似于truncate但更强大)。truncate专注于调整文件大小,可以缩小和创建空洞,但不会预分配物理块。
相关命令
dd– 转换和复制文件,可创建固定大小的文件(实际写入数据)。fallocate– 预分配或释放文件空间,支持保留物理空间、打洞等操作。head/tail– 提取文件开头或结尾的部分内容。rm– 删除文件。touch– 更改文件时间戳或创建空文件。ls -l– 查看文件大小。stat– 显示文件详细状态(包括大小、块数等)。