补充说明
mkfile 源自 Solaris/IRIX,用于创建一个固定长度的普通文件,内容为全零字节。常见用途包括制作交换文件、占位磁盘镜像,以及在测试中快速生成大文件。
它不属于 GNU coreutils,绝大多数 Linux 发行版默认没有该命令。在 Linux 上通常改用 fallocate、truncate 或 dd,效果基本等价,且工具链更通用。
大小参数支持后缀 b(字节)、k、m、g,不给后缀时单位为字节。需要注意 -n 只登记文件长度而不预分配数据块(稀疏文件),文件系统上并不会立刻占用相应空间,后续写入时才逐步分配。
如果用于交换文件,创建后还需 chmod 600、mkswap 和 swapon,并在 /etc/fstab 中登记,否则重启后不会自动启用。
语法
mkfile [-nv] 大小[b|k|m|g] 文件名...
选项
-n:只创建指定长度的稀疏文件,不写入数据块-v:显示创建过程
实例
# 创建 512MB 文件,内容为零(会实际写入磁盘)
mkfile 512m /swapfile
# 只登记 1GB 长度,暂不占用磁盘空间
mkfile -n 1g disk.img
# 一次创建多个文件
mkfile 64m a.img b.img
# 做成交换文件并立即启用
chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile
Linux 上的等价写法
# 预分配真实空间(推荐,速度快且不写零)
fallocate -l 512M /swapfile
# 创建稀疏文件
truncate -s 1G disk.img
# 兼容性最好的写法:写入零
dd if=/dev/zero of=disk.img bs=1M count=1024 status=progress
注意事项
- 目标文件已存在时行为依实现而定,写之前先确认路径,避免覆盖数据。
- 在 NFS 等不支持稀疏语义的文件系统上,
-n的效果可能退化为真实分配。 - 创建大文件前用
df -h确认剩余空间,避免写满根分区。