一般用法
首先,dd这个名字来源于“data duplicator(数据复制器)”,但也有人开玩笑地说它代表“data destroyer(磁盘销毁程序)”,因为它是一个非常强大的工具。因此,我们建议在使用dd时格外小心,因为一时疏忽可能会损失宝贵的数据。
dd命令的一般语法为
# dd if=$input_data of=$output_data [options]
输入和输出数据可以是磁盘、分区、文件、设备……主要是您可以写入或者读取的所有数据。正如您将看到的,例如,您可以在网络环境中使用dd在LAN上发送数据流。在dd命令中可以只包含输入部分,也可以只包含输出命令,在某些情况下甚至可以消除这两个部分。
Linux dd命令例子
dd if=/dev/urandom of=/dev/sda bs=4k | 用随机数据填充驱动器 |
dd if=/dev/sda of=/dev/sdb bs=4096 | 驱动器到驱动器复制 |
dd if=/dev/zero of=/dev/sda bs=4k | 清理硬盘(可能需要重复) |
dd if=inputfile of=/dev/st0 bs=32k conv=sync | 从文件复制到磁带设备 |
dd if=/dev/st0 of=outfile bs=32k conv=sync | 从磁带设备复制到文件 |
dd if=/dev/sda | hexdump -C | grep [^00] | 检查驱动器是否真的归零 |
dd if=/dev/urandom of=/home/$user/hugefile\ bs=4096 | 填写分区(用系统分区小心!) |
ls -l myfile-rw-r--r-- 6703104 Oct 31 18:25 myfiledd<br> if=/dev/urandom of=myfile bs=6703104 count=1 | 打乱文件数据(可能在删除之前操作) |
dd if=/dev/sda3 of=/dev/sdb3 bs=4096 \conv=notrunc,noerror | 将分区复制到另一个分区 |
dd if=/proc/filesystems | hexdump -C | less | 查看可用文件系统 |
dd if=/proc/partitions | hexdump -C | less | 查看KB中的可用分区 |
dd if=/dev/sdb2 ibs=4096 | gzip > partition.image.gz \conv=noerror | 创建第二个磁盘的第二个分区的Gzipped图像 |
dd bs=10240 cbs=80 conv=ascii,unblock\ if=/dev/st0 of=ascii.out | 将磁带驱动器的内容复制到文件,从EBCDIC转换为ASCII |
dd if=/dev/st0 ibs=1024 obs=2048 of=/dev/st1 | 从1KB块设备复制到2KB块设备 |
dd if=/dev/zero of=/dev/null bs=100M count=100100+0 records in100+0 records out10485760000 bytes (10 GB) copied,5.62955 s, 1.9 GB/s | 将10 GB的零复制到垃圾桶。 |
dd if=/dev/zero of=/dev/sda bs=512 count=2fdisk -s /dev/sdadd if=/dev/zero of=/dev/sda seek=(number_of_sectors - 20) bs=1k | 从磁盘擦除GPT。由于GPT在开头的末尾写入数据,从开始开始后,我们需要找出扇区的数量(第二个命令),然后删除最后20个扇区。 |
dd if=/home/$user/bootimage.img of=/dev/sdc | 创建可启动U盘(此处显示为/dev/sdc) |
dd if=/dev/sda of=/dev/null bs=1m | 检查坏块的好方法 |
dd if=/dev/sda of=/dev/fd0 bs=512 count=1 | 将MBR复制到软盘上 |
dd if=/dev/sda1 of=/dev/sdb1 bs=4096 | 驾驶到驱动的复制 |
dd if=/dev/sr0 of=/home/$user/mycdimage.iso\ bs=2048 conv=nosync | 创建CD的图像 |
mount -o loop /home/$user/mycdimage.iso\ /mnt/cdimages/ | 在本地安装所述图像 |
dd if=/dev/sda of=/dev/sdb bs=64k conv=sync | 用另一种相同的尺寸替换磁盘时有用 |
dd if=/dev/sda2 of=/home/$user/hddimage1.img\ bs=1M count=4430dd if=/dev/sda2 of=/home/$user/hddimage2.img\ bs=1M count=8860[...] | 创建分区的DVD图像(有用备份) |
dd if=/$location/hddimage1.img of=/dev/sda2\ bs=1Mdd if=/$location/hddimage2.img of=/dev/sda2\ seek=4430 bs=1Mdd if=/$location/hddimage3.img of=/dev/sda2\ seek=8860 bs=1M[and so on...] | 从上面的备份恢复 |
dd if=/dev/zero count=1 bs=1024 seek=1 of=/dev/sda6 | 摧毁超级块 |
dd if=/dev/zero count=1 bs=4096 seek=0 of=/dev/sda5 | 另一种摧毁超级块的方法 |
dd if=/home/$user/suspicious.doc | clamscan - | 检查文件以获取病毒(需要Clamav) |
dd if=/home/$user/binary file | hexdump -C | less | 查看二进制文件的内容(需要hexdump) |
dd if=/home/$user/bigfile of=/dev/nulldd if=/dev/zero of=/home/$user/bigfile \bs=1024 count=1000000 | 基准用于读/写速度的硬盘驱动器 |
dd if=/dev/sda of=/dev/sda | 为尚未使用的较旧硬盘驱动器提供新的生命(磁盘必须卸载) |
dd if=/dev/mem | strings | grep 'string_to_search' | 检查内存内容(人类可读,即) |
dd if=/dev/fd0 of=/home/$user/floppy.image\ bs=2x80x18b conv=notrunc | 复制软盘 |
dd if=/proc/kcore | hexdump -C | less | 查看虚拟内存 |
dd if=/proc/filesystems | hexdump -C | less | 查看可用文件系统 |
dd if=/proc/kallsyms | hexdump -C | less | 查看加载的模块 |
dd if=/proc/interrupts | hexdump -C | less | 查看中断表 |
dd if=/proc/uptime | hexdump -C | less | 查看正常运行时间以秒为单位 |
dd if=/proc/partitions | hexdump -C | less | 查看KB中的可用分区 |
dd if=/proc/meminfo | hexdump -C | less | 查看Memstats. |
dd if=/dev/urandom of=/home/$user/myrandom \bs=100 count=1 | 创建一个随机的1kb文件 |
dd if=/dev/mem of=/home/$user/mem.bin\ bs=1024 | 创建系统内存的实际状态的图像 |
dd if=/home/$user/myfile | 将文件打印到stdout |
dd if=/dev/sda2 bs=16065 | hexdump -C\ | grep 'text_to_search' | 搜索一个字符串的整个分区;即使它是安全的,你也可以启动LiveCD |
dd if=/home/$user/file.bin skip=64k bs=1\ of=/home/$user/convfile.bin | 复制file.bin到convfile.bin跳过前64 kB |
dd if=/home/$user/bootimage.img of=/dev/sdc | 创建可启动U盘(此处显示为/dev/sdc) |
dd if=/dev/mem bs=1k skip=768 count=256 \2>/dev/null | strings -n 8 | 阅读BIOS。 |
dd bs=1k if=imagefile.nrg of=imagefile.iso skip=300k | 将Nero Image转换为ISO标准图像。 这是可能的,因为这两个唯一的区别是300 kB标题Nero添加到标准ISO文件。 |
echo -n "hello vertical world" | dd cbs=1 \conv=unblock 2> /dev/null | 尝试一下,这是安全的。 |
dd if=/dev/sda1 | gzip -c | split -b 2000m - /mnt/hdc1/backup.img.gz | 使用拆分创建分区的Gzipped图像 |
cat /mnt/hdc1/backup.img.gz.* | gzip -dc |\ dd of=/dev/sda1 | 恢复上面的备份 |
dd if=/dev/zero of=myimage bs=1024 count=10240 | 创建一个空磁盘镜像 |
dd ibs=10 skip=1 | 剥离前10个字节的stdin |
dd bs=265b conv=noerror if=/dev/st0 \of=/tmp/bad.tape.image | 用斑点制作磁带机的图像 |
dd if=/dev/sda count=1 | hexdump -C | 查看MBR. |
dd if=/dev/sda | nc -l 10001 nc $system_to_backup_IP 10001 | dd\ of=sysbackupsda.img | 使用netcat快速网络备份 |
dd if=/dev/zero of=/dev/sdX\ bs=1024000 count=1 | 清除第一个10MB分区 |
dd if=/dev/zero of=tmpswap bs=1k\ count=1000000chmod 600 tmpswapmkswap tmpswapswapon tmpswap | 创建临时交换空间 |
dd if=/dev/sda of=/dev/null bs=1024k \count=10241073741824 bytes (1.1 GB) copied, 24.1684 s, 44.4 MB/s | 确定驱动器的顺序I/O速度。读取1GB文件 |
dd if=/dev/random count=1 2>/dev/null | od -t u1 |\ awk '{ print $2}' | head -1 | 生成随机数 |
dd if=/dev/mem of=myRAM bs=1024 | 将内存复制到文件 |
dd if=/dev/sda bs=512 count=1 | od -xa | 请参阅Hex和ASCII格式的MBR内容 |
dd if=/my/old/mbr of=/dev/sda bs=446 count=1 | 恢复MBR,不会干扰分区表记录在447 - 511字节之间 |
dd if=/dev/sda1 | split -b 700m - sda1-image | 创建分区副本并保存最大值的图像卷大小为700MB |
ls -l | dd conv=ucase | 将命令的输出转换为大写 |
echo "MY UPPER CASE TEXT" | dd conv=lcase | 将任何文本转换为小写 |
dd if=/etc/passwd cbs=132 conv=ebcdic of=/tmp/passwd.ebcdic | 将系统密码文件转换为固定长度的EBCDIC格式文件 |
dd if=text.ascii of=text.ebcdic conv=ebcdic | 从ASCII转换为EBCDIC |
dd if=myfile of=myfile conv=ucase | 将文件转换为大写(简单的SED或者TR替换) |
日期:2020-07-07 20:56:45 来源:oir作者:oir