【如何快速用空数据(零字节)覆盖指定文件的原有内容】
Linux平台dd 命令
- dd
- 执行例子
- 参数的含义说明
- 实际执行效果
- 执行输出的解读
- 为什么执行这个命令?
dd
用空数据(零字节)覆盖指定文件的原有内容,但保持文件大小不变。
执行例子
**
[root@test /]# dd if=/dev/zero of=test.dat bs=1 count=$(stat -c%s test.dat) conv=notrunc
7498+0 レコード入力
7498+0 レコード出力
7498 bytes (7.5 kB, 7.3 KiB) copied, 0.0211044 s, 355 kB/s**
参数的含义说明
| 参数 | 含义 | 说明 |
| if=/dev/zero | 输入文件 | /dev/zero 是一个特殊设备文件,读取它会不断产生 0x00 空字节(二进制零) |
| of=test.dat | 输出文件 | 要操作的目标文件 |
| bs=1 | 块大小 | 每次读写 1 字节 |
| count=$(stat -c%s test.dat) | 块数量 | stat -c%s 获取文件的大小(字节数),这里结果是 7498 |
| conv=notrunc | 不截断文件 | 关键参数!表示不删除/截断原文件,只是覆盖内容 |
实际执行效果
- 获取文件大小:stat -c%s test.dat 得到 7498(字节)
- 执行覆盖:dd 从 /dev/zero 读取 7498 次,每次 1 字节,写入到目标文件中
- 结果:文件的所有原始数据被替换为 0x00,但:文件大小不变(仍是 7498 字节)
- 文件权限、时间戳等信息不受影响(因为是覆盖内容)
执行输出的解读
7498+0 レコード入力 ← 读取了 7498 个块(每个块 1 字节)
7498+0 レコード出力 ← 写入了 7498 个块
7498 bytes (7.5 kB, 7.3 KiB) copied, 0.0211044 s, 355 kB/s
- 写入数据量:7498 字节(约 7.3 KB)
- 耗时:0.021 秒
- 速度:355 KB/s(因为 bs=1 太小,效率很低)
为什么执行这个命令?
常见用途:清除文件敏感数据
- 如果test.dat 包含密码、密钥、业务敏感信息,直接删除文件并不能彻底清除磁盘上的数据(可能被恢复)
- 用 dd 将其内容全部覆写为 0,可以防止数据被恢复
- conv=notrunc 确保文件大小不变,只替换内容
