Chinaunix首页 | 论坛 | 博客
  • 博客访问: 547153
  • 博文数量: 142
  • 博客积分: 2966
  • 博客等级: 少校
  • 技术积分: 1477
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-07 22:37
文章分类

全部博文(142)

文章存档

2013年(3)

2012年(21)

2011年(53)

2010年(33)

2009年(32)

分类: LINUX

2009-12-30 18:55:36

     dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
  dd 的主要选项:
  指定数字的地方若以下列字符结尾乘以相应的数字:
  b=512, c=1, k=1024, w=2, xm=number m
  if=file
  输入文件名,缺省为标准输入。
  of=file
  输出文件名,缺省为标准输出。
  ibs=bytes
  一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
  obs=bytes
  一次写 bytes 个字节(即一个块大小为 bytes 个字节)。
  bs=bytes
  同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。
  cbs=bytes
  一次转换 bytes 个字节,即转换缓冲区大小。
  skip=blocks
  从输入文件开头跳过 blocks 个块后再开始复制。
  seek=blocks
  从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。
  count=blocks
  仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
  conv=conversion[,conversion...]
  用指定的参数转换文件。
  转换参数:
  ascii 转换 EBCDIC 为 ASCII。
  ebcdic 转换 ASCII 为 EBCDIC。
  ibm 转换 ASCII 为 alternate EBCDIC.
  block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。
  unblock
  使每一行的长度都为 cbs ,不足部分用空格填充。
  lcase 把大写字符转换为小写字符。
  ucase 把小写字符转换为大写字符。
  swab 交换输入的每对字节。 Unlike the Unix dd, this works when an odd number of bytes are read. If the input file contains an odd number of bytes, the last byte is simply copied (since there is nothing to swap it with).
  noerror
  出错时不停止。
  notrunc
  不截短输出文件。
  sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
  由于 dd 命令允许二进制方式读写,所以特别适合在原始物理设备上进行输入/输出。例如可以用下面的命令为软盘建立镜像文件:
  dd if=/dev/fd0 of=disk.img bs=1440k
  有趣的是,这个镜像文件能被 HD-Copy ,Winimage 等工具软件读出。再如把第一个硬盘的前 512 个字节存为一个文件:
dd if=/dev/hda of=disk.mbr bs=512 count=1  
dd实际应用:
使用软盘做钥匙盘在我的记忆中似乎是很遥远的事情了,第一次见到是一套计算机等级考试的软件.如果使用文件的复制的方法把软盘的资料copy到另外一个软盘,那肯定会告诉你这不是一张有效的钥匙盘。那个时候也没有想到比较好的办法。今天又有人拿一个钥匙盘过来,问我能不能破解,我的第一反应就是使用linux的dd命令。
  操作过程如下:
  1.插入正确的钥匙盘,执行下面的命令
  代码::
  #dd if=/dev/fd0 of=fd0.img
  2.取出钥匙盘,插入你要复制的空白软盘(当然不是空白的也没有什么问题),执行下面的命令:
  代码::
  #dd if=fd0.img of=/dev/fd0
  ok,取出你的复制的软盘,测试一下,看有没有问题!

dd if =/dev/fd0 of = /tmp/tmpfile
% 把一张软盘的内容拷贝到另一张软盘上,利用/tmp作为临时存储区
拷贝完成后,将源盘从驱动器中取出,把目标盘插入,输入命令:

dd if = /tmp/tmpfile of =/dev/fd0

dd if = net.i of = /dev/fd0 bs = 16384
% 把net.i这个文件写入软盘中,并设定读/写缓冲区的数目
(注意:软盘中的内容会被完全覆盖掉)
 
dd if=sfile of=dfile
% 将文件sfile拷贝到文件 dfile中dd if=/dev/zero of=1T.img bs=1G seek=1024 count=0
bs=1G表示每一次读写1G数据,count=0表示读写0次,seek=1024表示略过1024个Block不写,前面block size是1G,所以共略过1T!
这是创建大型sparse文件最简单的方法。


阅读(1005) | 评论(0) | 转发(0) |
0

上一篇::冒号命令

下一篇:perl删除文件重复行

给主人留下些什么吧!~~