目录
1. 介绍
Linux dd 命令用于读取、转换并输出数据。
dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
2. 命令行选项与参数详解
dd if=input_file of=output_file [options] |
参数说明:
if=文件名:输入文件名,默认为标准输入。即指定源文件。
of=文件名:输出文件名,默认为标准输出。即指定目的文件。
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
conv=<关键字>,关键字可以有以下11种:
- conversion:用指定的参数转换文件。
- ascii:转换ebcdic为ascii
- ebcdic:转换ascii为ebcdic
- ibm:转换ascii为alternate ebcdic
- block:把每一行转换为长度为cbs,不足部分用空格填充
- unblock:使每一行的长度都为cbs,不足部分用空格填充
- lcase:把大写字符转换为小写字符
- ucase:把小写字符转换为大写字符
- swap:交换输入的每对字节
- noerror:出错时不停止
- notrunc:不截短输出文件
- sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
--help:显示帮助信息
--version:显示版本信息
3. 应用场景
3.1 硬盘的备份和还原
dd if=/dev/sda of=/path/to/backup.img
将整个硬盘 /dev/sda 的内容复制到文件 backup.img 中,完成对硬盘sda的备份。如果sda故障,可通过back.img恢复文件。
dd if=/path/to/backup.img of=/dev/sda
支持整盘备份,也支持分区备份,比如将sda替换成sda1。
3.2 硬盘写0
dd if=/dev/zero of=/dev/sdb
擦除硬盘/dev/sdb上的所有数据,将每个块都写入零值,达到保护隐私或者重新使用硬盘的目的。
3.3 创建指定大小的文件
# 创建1G大小的文件。
dd if=/dev/zero of=/tmp/1G.txt bs=1M count=1024
# 使用 /dev/urandom 生成的随机数据创建一个大小为10MB的文件 random.file
dd if=/dev/urandom of=/path/to/random.file bs=1M count=10
3.4 制作系统启动盘
dd if=boot.img of=/dev/sdc4 bs=1440k
比如将ISO文件写入U盘,再通过U盘安装操作系统。
3.5 文件内所有字母转换成大写
dd if=testfile_2 of=testfile_1 conv=ucase
将testfile_2内的字母转换成大写并写入到文件testfile_1。
3.6 修复损坏的分区表
dd if=/dev/sda of=/path/to/parttable.backup bs=512 count=1
dd if=/path/to/parttable.backup of=/dev/sda bs=512 count=1
同第1点,通过备份恢复方式恢复数据。
3.7 从网络流复制数据
dd if=tcp://192.168.0.100:1234 of=/path/to/output.file bs=1M
3.8 压缩文件到tar归档
tar cf - /path/to/files | dd of=/path/to/archive.tar.gz bs=1M
3.9 检查设备读写速度
dd if=/dev/zero of=/tmp/ddtest bs=1M count=1000 conv=fdatasync
这个命令将在 /tmp/ddtest 文件中写入1000MB的数据,并报告写入速度,可以用来测试设备的读写速度。测试值仅供参考。
4. 注意事项
dd 命令是一个非常强大和灵活的工具,但在使用时需要格外小心,因为它可以对数据进行直接操作,而且一些操作可能是不可逆的。因此,在使用 dd 命令时,请务必牢记你正在处理的数据的重要性,并谨慎操作。