其实很简单用dd命令就可以搞定。
[guo@guo ~]$ dd if=/home/guo/me.sh of=/home/guo/win.sh
记录了0+1 的读入
记录了0+1 的写出
159字节(159 B)已复制,0.000139826 秒,1.1 MB/秒
上面就是把/home/guo/me.sh 文件生成为win.iso文件并保存在/home/guo/文件夹下。
附redhat中的dd帮助文档
[guo@guo ~]$ dd --help
用法:dd [操作数] ...
或:dd 选项
复制文件,依照操作数转换并格式化。
bs=比特数 一次读写的比特数(参见 ibs=,obs=)
cbs=比特数 一次转换的比特数
conv=CONVS 依照每个逗号分割的标志列表转换文件
count=块数 只将指定个块数复制到块
ibs=比特数 一次读取的比特数(默认:512)
if=文件 从指定文件中读取
iflag=符号 按照以逗号分隔的符号列表指定的方式读取
obs=比特数 一次写入指定比特数(默认:512)
of=文件 写入到指定文件
oflag=符号 按照以逗号分隔的符号列表指定的方式写入
seek=块数 在输出开始处跳过指定的块数
skip=块数 在输入开始处跳过指定的块数
status=noxfer 禁止传输统计
块和字节数后可能带有以下的一个或多个后缀:
c =1, w =2, b =512, kB =1000, K =1024, MB =1000*1000, M =1024*1024, xM =M
GB =1000*1000*1000, G =1024*1024*1024, and so on for T, P, E, Z, Y.
每个 CONV 符号可能为:
ascii 由EBCDIC 码转换至ASCII 码
ebcdic 由ASCII 码转换至EBCDIC 码
ibm 由ASCII 码转换至替换的EBCDIC 码
block 将结束字符块里的换行替换成等长的空格
unblock 将cbs 大小的块中尾部的空格替换为一个换行符
lcase 将大写字符转换为小写
notrunc 不截断输出文件
ucase 将小写字符转换为大写
swab 交换每一对输入数据字节
noerror 读取数据发生错误后仍然继续
sync 将每个输入数据块以NUL 字符填满至ibs 的大小;当配合block
或unblock 时,会以空格代替NUL 字符填充
noerror 读取数据发生错误后仍然继续
sync 把每个输入的块以 NUL 填充至 ibs 的大小
如果配合 block 或 unblock 使用, 则以空格代替 NUL 填充
fdatasync 结束前将输出文件数据写入磁盘
fsync 类似上面,但是元数据也一同写入
FLAG 符号可以是:
append 追加模式(仅对输出有意义;隐含了conv=notrunc)
direct 使用直接I/O 存取模式
directory 除非是目录,否则 directory 失败
dsync 使用同步I/O 存取模式
sync 与上者类似,但同时也对元数据生效
fullblock 为输入积累完整块(仅iflag)
nonblock 使用无阻塞I/O 存取模式
noatime 不更新存取时间
noctty 不根据文件指派控制终端
nofollow 不跟随链接文件
对运行中的"dd"进程发送一个USR1 信号会使得
I/O 的统计信息被打印到标准错误设备然后恢复复制操作。
$ dd if=/dev/zero of=/dev/null& pid=$!
$ kill -USR1 $pid; sleep 1; kill $pid
18335302+0 records in
18335302+0 records out
9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s