dd命令

dd [option]

#---
if=设备:若从块设备读取,(映射到CPU地址总线)则原封不动的逐字节读取其物理存储memory(若有文件系统则包括文件系统本身也被读取过来,裸设备级别的读,eg./dev/cdrom)。若从字符设备读,则调用字符设备的 read() 驱动函数(eg./dev/zero)
if=文件:从块设备的文件系统中读取某个文件
of=设备:若写入到块设备(映射到CPU地址总线的)则原封不动的逐字节写入物理存储memory(裸设备级别的写,需要把文件系统本身也写入,否则块设备将不包含文件系统,eg.写到flash,/dev/sda)。若写到字符设备,则调用其 write() 驱动函数(如/dev/tty, /dev/null)
of=文件:写入位于(块设备中的)文件系统中的某个文件中(若文件原来不存在则会被创建)。

#---
ibs=1048576 (设定读取缓冲块大小,单位Byte,即每次读取1024*1024 bytes到缓冲块,或可写作 1024k 或 1M ),配合skip确定 if 读取位置的起始偏移,配合count确定dd传输的数据量大小(否则会一直传输,直到 if 文件末尾)
obs=1048576 (设定每次写入的缓冲块大小为 1024*1024 bytes),配合seek确定从 of 写入位置的起始偏移
bs=1048576(设定 ibs=obs=1M bytes)

skip=a 跳过输入的ibs*a字节,从 ibs*skip 位置开始读取,
seek=b 跳过输出的obs*b字节,从输出文件的 obs*seek 位置开始写入

count=c 设置 总的传输量大小为 ibs*count(不设置则拷贝输出直到结束)

#---
conv=notrunc  确保 if 较小时不要截断 (设定当if文件大小<of文件大小时候,不要截断of。默认是截断的)

 

1. 学习openwrt用到puppy linux时,直接将系统镜像写入到硬盘(重新启动从硬盘加载就变成 openwrt 对应的操作系统了)

dd if=openwrt-x86-generic-combined-ext2.img of=/dev/sda

2.将bin文件作为镜像写入软盘 (于渊:所谓镜像,可理解为原始设备的逐字节复制。如软盘的第m个字节对应文件的第m个字节)

nasm boot.asm -o boot.bin
dd if=boot.bin of=/dev/fd0 bs=512 count=1 conv=notrunc

3.小测试

dd if=/dev/zero of=a.img bs=1024 count=512       //制作全0镜像,大小为  1024bytes*512 =512k
dd if=main.c of=/dev/tty                                            //这个,其实相当于 cat 啦
dd if=main.c of=a.img obs=1024 seek=1 conv=notrunc    //从a.img的 (1024bytes*1) 偏移处开始写入main.c对应的ASCII码,即使 if 较小也不要截断 of
dd if=a.img | gzip > ./a.gz         //把我们的这个镜像压缩一下(貌似tar没法这么搞)
gzip -dc ./a.gz | dd of=b.img    //把a.gz使用gzip解压后后得到 b.img(和a.img一模一样哈)

4.将u盘内容dd下来后,想将其挂在进ubuntu,怎么做?
 

sudo dd if=/dev/sdb of=udisk.img
fdisk -l -u -C 1 udisk.img 查看分区的起始逻辑扇区号
sudo mount -o loop,offset=1048576 -tvfat udisk.img ./fs/
#umount ./fs

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值