a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 64|回复: 0

[综合辅导] Linux认证:Linux/UNIX下的有用的命令dd

[复制链接]
发表于 2012-8-4 12:07:07 | 显示全部楼层 |阅读模式
Linux认证:Linux/UNIX下的有用的命令dd
1 z9 x* u! X& pLinux/UNIX下的有用的命令dd! q+ T) i2 e7 @. s9 z* V3 y, S) V/ k3 Y
dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。" g. p  o/ C0 B
指定数字的地方若以下列字符结尾乘以相应的数字:
3 e2 k' B$ `8 Vb=512, c=1, k=1024, w=2, xm=number m8 P( y! X! f* Q  m2 T, j3 g
一。常用到的参数:
# U6 Y3 w2 h" E1.if=file" C* I* }  A8 i& m) F/ T$ n
输入文件名,缺省为标准输入。0 C- W/ S  h- p% |5 j
2.of=file
  e" y2 d6 i( b0 n( s. F6 n) E输出文件名,缺省为标准输出。
: @+ h; ^8 x0 s7 z# n3.ibs=bytes7 T6 F/ g5 z4 y6 p& O" `9 v
一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
) S$ `, |' }9 ?. j+ u5 b2 J$ Qobs=bytes+ w* L: c) \/ F  P8 R! Q
一次写 bytes 个字节(即一个块大小为 bytes 个字节)。
/ @  {8 T. C+ [9 ^* `( ~& ^3 Kbs=bytes! z# M5 q: E# h3 U+ L& s- |  l
同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。
7 R% M/ j! |/ x  n4.cbs=bytes8 m8 k$ D3 }' L, k
一次转换 bytes 个字节,即转换缓冲区大小。2 P6 Q7 u% P8 Q, S$ e
5.skip=blocks' ?2 I. c) ~5 Y, j9 C8 _+ m
从输入文件开头跳过 blocks 个块后再开始复制。
- c! \  s, \/ O3 S' b6.seek=blocks
1 t3 g- M% g! W! W! N- D从输出文件开头跳过 blocks 个块后再开始复制。注意:通常只有当输出文件是磁盘或磁带时才有效,常用来备份到磁盘或磁带。
0 ]9 n6 n; b5 V4 W7.count=blocks8 U* U# H( B0 H. o
仅拷贝 blocks 个块,块大小等于 ibs(obs、bs) 指定的字节数。( M: R! V" m& C! y, ^
8.conv=conversion[,conversion.。.]2 `" w) q0 A* R, j# w( E
用指定的参数转换文件。( M' Q* v% v3 w3 o
转换参数:
+ G( N! l/ a" J8 f+ G9 Cascii 转换 EBCDIC 为 ASCII。( H7 Z$ E  P9 j
ebcdic 转换 ASCII 为 EBCDIC。
; U$ T9 e+ v% i* v/ v, t1 tibm 转换 ASCII 为 alternate EBCDIC.
. e8 x# I* T  z: \& ]( [. v- }block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。2 M: e+ P  N, U  ?! C9 T  m2 h
unblock 使每一行的长度都为 cbs ,不足部分用空格填充。
  n! R0 }  d5 e) s4 g' d) plcase 把大写字符转换为小写字符。" J6 _. B4 N! a' _$ X5 A( g
ucase 把小写字符转换为大写字符。& a6 m! _; q- Y6 k8 w- {
swab 交换输入的每对字节。
% T9 T* g2 {/ Jnoerror 出错时不停止。
9 l/ I  E! y9 ]$ Z' y  dnotrunc 不截短输出文件。
  a" P) K  ?& H  Z+ Xsync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
: |7 K" H5 W  @* k& W; B  T9 a% s! I5 O5 p9 r$ ]

, A8 @( I$ I, x1 H5 ]3 @二。应用举例:
* n, s4 z& s/ m! s+ i" `1.整盘数据备份与恢复
0 k* h* y$ S* ~! v0 b, h备份
, h6 ?" h& i# A* `$ C) [将本地的/dev/hdx整盘备份到/dev/hdy :
" q/ q) X5 a$ i  d6 ~dd if=/dev/hdx of=/dev/hdy' g$ \" H# R* L, |# t+ P. {
将/dev/hdx全盘数据备份到指定路径的image文件:' X) ^. `, e* Z% k% m0 V9 d$ \+ J
dd if=/dev/hdx of=/path/to/image
. W4 ?; Z" v* i4 ~' c2 I. e备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径:
  ~- A! q2 ]2 k, B3 D: K5 fdd if=/dev/hdx | gzip 》 /path/to/image.gz
; O) F4 i, b$ J; g4 K恢复: g! k1 F- ^+ b3 x) h& f; @
将备份文件恢复到指定盘:
' W6 O0 _" {* [; @* L6 udd if=/path/to/image of=/dev/hdx
9 K( E! L4 h) |2 ~8 q将压缩的备份文件恢复到指定盘 :: |( |( q) y3 V, c: a2 d
gzip -dc /path/to/image.gz | dd of=/dev/hdx
/ A3 m8 P, o  S- g- i2.备份MBR
) A/ D/ y; v3 r( I: }% h  M备份:( C" Q* o$ I: V& ?* v
备份磁盘开始的512Byte大小的MBR信息到指定文件:
1 R( J8 x7 C. t3 odd if=/dev/hdx of=/path/to/image count=1 bs=512
7 T2 {( E$ r; _. I9 j) S' u, ~( j恢复:2 N- \% J) O8 o1 o* J- d) K
将备份的MBR信息写到磁盘开始部分:
! }, F. I# M9 [3 rdd if=/path/to/image of=/dev/hdx% Z1 Z7 O% g! N8 ^( @( c, @# x4 S
3.拷贝内存资料到硬盘
: v. o. p( X) P- X# {( c将内存里的数据拷贝到root目录下的mem.bin文件:
5 C" I9 M9 ?! {4 Fdd if=/dev/mem of=/root/mem.bin bs=1024
6 d9 |/ z  S5 _* [+ M! s4.从光盘拷贝iso镜像& p  M4 v9 h; ?1 S1 B4 \6 V! t
拷贝光盘数据到root文件夹下,并保存为cd.iso文件:) H0 K- ~: B# s/ P; k
dd if=/dev/cdrom of=/root/cd.iso
3 f" R* K3 i1 n; t6 n5.增加Swap分区文件大小# j4 j) ]4 B4 V# c% p" @& ~
创建一个足够大的文件(此处为256M):: W8 B) F2 ]; `) d9 Z; I' }
dd if=/dev/zero of=/swapfile bs=1024 count=2621443 h% {2 N" C# A+ E2 `
把这个文件变成swap文件:
% a& \4 k* j' m9 h, h' cmkswap /swapfile
+ s  K3 g" e$ T4 w启用这个swap文件:- [4 i) y! E/ O$ N& q% l0 V  ?
swapon /swapfile' m( h; o% g( E6 h9 R, W) h6 X
在每次开机的时候自动加载swap文件, 需要在 /etc/fstab 文件中增加一行:
* y7 I5 _) E' Y2 T: g, W* ^' C* ~/swapfile swap swap defaults 0 0
! G* a5 M7 b% b- W; @( S5 r6.销毁磁盘数据
$ e# f4 i  u* F利用随机的数据填充硬盘:
' o' T! W5 D+ _8 [. Wdd if=/dev/urandom of=/dev/hda1
1 C- _" W$ b2 B0 |在某些必要的场合可以用来销毁数据。9 Y- H: l8 d+ ^0 s
注意:执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作无法执行。
: h) d  C9 J( A3 _) \4 g% z5 a4 n6 M$ w  W: p! X" \: x+ z

. ?% ^5 I8 w7 J5 v7.测试硬盘的读写速度
/ C* G, M1 g. |+ R& P2 Fdd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file1 w& h' @; @8 i* T  \& C
dd if=/root/1Gb.file bs=64k | dd of=/dev/null% u, I( h8 k) l7 z, R: w, w
通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。
, _- L4 m7 x, w8.确定硬盘的最佳块大小:
( S# `% C# k! cdd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
' m) C- m- g' A$ V9 H& ?dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
6 L; f# c0 C* t6 Y9 d" Ndd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file3 ?$ [+ ~6 b# I9 R5 F
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
0 I9 [, i( d6 v9 S通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。8 Y$ b" K; X  b( ?# U3 n
9.修复硬盘0 l! W( X* K! G8 T* ?
当硬盘较长时间(比如一两年年)放置不使用后,磁盘上会产生magnetic flux point。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。下面的命令有可能使这些数据起死回生。且这个过程是很安全,高效的。+ ~9 ^  N4 a9 @) g: h
dd if=/dev/sda of=/dev/sda) c4 T: M! `# d# W- i4 b
附:
5 Q9 y2 ]0 O6 }8 D$ j在上面的例子中经常见到/dev/zero,这里就简单说一下这个文件,相似的还有一个/dev/null,我们知道在/dev下面的都是设备文件,这两个都是特殊的设备文件,一个特殊的输入设备,一个特殊的输出设备。2 Y" Y  @5 f; [+ Z. e- L+ |- t
/dev/null 特殊输出设备,是linux系统里的回收站,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。0 F% n7 D$ V" M2 K3 {( N# ~
/dev/zero 特殊的输入设备,该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-21 08:40 , Processed in 0.184157 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表