Linux DD命令

一般用法

首先,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