dd 命令

功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令实现 DOS 下的 diskcopy 命令的作用。先用 dd 命令把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件写入第二张软盘上,完成 diskcopy 的功能。需要注意的是,应该将硬盘上的寄存文件用 rm 命令删除掉。系统默认使用标准输入文件和标准输出文件。

语法: dd [ 选项 ]

if = 输入文件(或设备名称)。

of = 输出文件(或设备名称)。

ibs = bytes 一次读取 bytes 字节,即读入缓冲区的字节数。

skip = blocks 跳过读入缓冲区开头的 ibs*blocks 块。

obs = bytes 一次写入 bytes 字节,即写入缓冲区的字节数。

bs = bytes 同时设置读 / 写缓冲区的字节数(等于设置 ibs 和 obs )。

cbs = byte 一次转换 bytes 字节。

count=blocks 只拷贝输入的 blocks 块。

conv = ASCII 把 EBCDIC 码转换为 ASCIl 码。

conv = ebcdic 把 ASCIl 码转换为 EBCDIC 码。

conv = ibm 把 ASCIl 码转换为 alternate EBCDIC 码。

conv = block 把变动位转换成固定字符。

conv = ublock 把固定位转换成变动位。

conv = ucase 把字母由小写转换为大写。

conv = lcase 把字母由大写转换为小写。

conv = notrunc 不截短输出文件。

conv = swab 交换每一对输入字节。

conv = noerror 出错时不停止处理。

conv = sync 把每个输入记录的大小都调到 ibs 的大小(用 NUL 填充)。

使用/dev/null

/dev/null 看作"黑洞" . 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null 对命令行和脚本都非常的有用.

禁止标准输出

禁止标准输出 .

   1 cat $filename >/dev/null

2 # 文件内容丢失,而不会输出到标准输出.

禁止标准错误 (来自例子 12-3 ).

   1 rm $badname 2>/dev/null

2 #           这样错误信息[标准错误]就被丢到太平洋去了.

禁止标准输出和标准错误的输出.

   1 cat $filename 2>/dev/null >/dev/null

2 # 如果"$filename"不存在,将不会有任何错误信息提示.

3 # 如果"$filename"存在, 文件的内容不会打印到标准输出.

4 # 因此Therefore, 上面的代码根本不会输出任何信息.

5 #

6 #  当只想测试命令的退出码而不想有任何输出时非常有用。

7 #

8 #

9 # cat $filename &>/dev/null

10 #     也可以, 由 Baris Cicek 指出.

Deleting contents of a file, but preserving the file itself, with all attendant permissions (from Example 2-1 and Example 2-3 ):

   1 cat /dev/null > /var/log/messages

2 #  : > /var/log/messages   有同样的效果, 但不会产生新的进程.(因为:是内建的)

3 

4 cat /dev/null > /var/log/wtmp

自动清空日志文件的内容 (特别适合处理这些由商业Web站点发送的讨厌的"cookies" ):


例子 28-1. 隐藏cookie而不再使用

   1 if [ -f ~/.netscape/cookies ]  # 如果存在则删除.

2 then

3   rm -f ~/.netscape/cookies

4 fi

5 

6 ln -s /dev/null ~/.netscape/cookies

7 # 现在所有的cookies都会丢入黑洞而不会保存在磁盘上了.

使用/dev/zero

/dev/null 一样, /dev/zero也是一个伪文件 , 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的). 写入它的输出会丢失不见, 而从/dev/zero 读出一连串的null也比较困难, 虽然这也能通过od 或一个十六进制编辑器来做到. /dev/zero 主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件.

例子 28-2. 用/dev/zero创建一个交换临时文件

   1 #!/bin/bash

2 # 创建一个交换文件.

3 

4 ROOT_UID=0         # Root 用户的 $UID 是 0.

5 E_WRONG_USER=65    # 不是 root?

6 

7 FILE=/swap

8 BLOCKSIZE=1024

9 MINBLOCKS=40

10 SUCCESS=0

11 

12 

13 # 这个脚本必须用root来运行.

14 if [ "$UID" -ne "$ROOT_UID" ]

15 then

16   echo; echo "You must be root to run this script."; echo

17   exit $E_WRONG_USER

18 fi  

19   

20 

21 blocks=${1:-$MINBLOCKS}          #  如果命令行没有指定,1为shell中的位置参量,#${ Parameter :- Word }如果设置了 Parameter 参数并且不为空,则替换其值;否则,替换 Word 参数的值。

22                                  #+ 则设置为默认的40块.

23 # 上面这句等同如:

24 # --------------------------------------------------

25 # if [ -n "$1" ]

26 # then

27 #   blocks=$1

28 # else

29 #   blocks=$MINBLOCKS

30 # fi

31 # --------------------------------------------------

32 

33 

34 if [ "$blocks" -lt $MINBLOCKS ]

35 then

36   blocks=$MINBLOCKS              # 最少要有 40 个块长.

37 fi  

38 

39 

40 echo "Creating swap file of size $blocks blocks (KB)."

41 dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks  # 把零写入文件.

42 

43 mkswap $FILE $blocks             # 将此文件建为交换文件(或称交换分区).

44 swapon $FILE                     # 激活交换文件.

45 

46 echo "Swap file created and activated."

47 

48 exit $SUCCESS

关于 /dev/zero 的另一个应用是为特定的目的而用零去填充一个指定大小的文件, 如挂载一个文件系统到环回设备 (loopback device) (参考例子 13-8 ) 或"安全地" 删除一个文件(参考例子 12-55 ).


例子 28-3. 创建ramdisk

   1 #!/bin/bash

2 # ramdisk.sh

3 

4 #  "ramdisk"是系统RAM内存的一段,

5 #+ 它可以被当成是一个文件系统来操作.

6 #  它的优点是存取速度非常快 (包括读和写).

7 #  缺点: 易失性, 当计算机重启或关机时会丢失数据.

8 #+       会减少系统可用的RAM.

9 #

10 #  那么ramdisk有什么作用呢?

11 #  保存一个较大的数据集在ramdisk, 比如一张表或字典,

12 #+ 这样可以加速数据查询, 因为在内存里查找比在磁盘里查找快得多.

13 

14 

15 E_NON_ROOT_USER=70             # 必须用root来运行.

16 ROOTUSER_NAME=root

17 

18 MOUNTPT=/mnt/ramdisk

19 SIZE=2000                      # 2K 个块 (可以合适的做修改)

20 BLOCKSIZE=1024                 # 每块有1K (1024 byte) 的大小

21 DEVICE=/dev/ram0               # 第一个 ram 设备

22 

23 username=`id -nu`

24 if [ "$username" != "$ROOTUSER_NAME" ]

25 then

26   echo "Must be root to run \"`basename $0`\"."

27   exit $E_NON_ROOT_USER

28 fi

29 

30 if [ ! -d "$MOUNTPT" ]         #  测试挂载点是否已经存在了,

31 then                           #+ 如果这个脚本已经运行了好几次了就不会再建这个目录了

32   mkdir $MOUNTPT               #+ 因为前面已经建立了.

33 fi

34 

35 dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE  # 把RAM设备的内容用零填充.

36                                                       # 为何需要这么做?

37 mke2fs $DEVICE                 # 在RAM设备上创建一个ext2文件系统.

38 mount $DEVICE $MOUNTPT         # 挂载设备.

39 chmod 777 $MOUNTPT             # 使普通用户也可以存取这个ramdisk.

40                                # 但是, 只能由root来缷载它.

41 

42 echo "\"$MOUNTPT\" now available for use."

43 # 现在 ramdisk 即使普通用户也可以用来存取文件了.

44 

45 #  注意, ramdisk是易失的, 所以当计算机系统重启或关机时ramdisk里的内容会消失.

46 #

47 #  拷贝所有你想保存文件到一个常规的磁盘目录下.

48 

49 # 重启之后, 运行这个脚本再次建立起一个 ramdisk.

50 # 仅重新加载 /mnt/ramdisk 而没有其他的步骤将不会正确工作.

51 

52 #  如果加以改进, 这个脚本可以放在 /etc/rc.d/rc.local,

53 #+ 以使系统启动时能自动设立一个ramdisk.

54 #  这样很合适速度要求高的数据库服务器.

55 

56 exit 0

最后值得一提的是, ELF二进制文件利用了/dev/zero .

转载于:https://www.cnblogs.com/mssql/archive/2011/05/24/tt149.html

dd , /dev/zero和/dev/null相关推荐

  1. /dev/console,/dev/tty 和 /dev/null

    UNIX和Linux中比较重要的三个设备文件是:/dev/console,/dev/tty和/dev/null. 0 /dev/console 这个设备代表的是系统控制台,错误信息和诊断信息通常会被发 ...

  2. /dev/zero和/dev/null的区别

    使用/dev/null  把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/ ...

  3. oracle dd if=/dev/zero of=/dev,【转】dd if=/dev/zero of=的含义是什么?Linux 下的dd命令使用详解...

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...

  4. Linux中的虚拟设备/dev/null、/dev/zero、/dev/random和/dev/urandom

    Unix/Linux将每一个设备都当成一个文件,放在/dev目录下.这些文件有的对应着一个真实存在的物理设备:有的则代表一个虚拟设备,提供一些特定的功能. 下面介绍三个常用的虚拟设备: /dev/nu ...

  5. Linux用dd清空GPT硬盘分区表,linux – 将dd if = / dev / zero of = / dev / sda擦除预先存在的分区表吗?...

    #dd if = / dev / zero = = dev / sda会删除预先存在的分区表吗? 或者是相反的方式,即 #fdisk / dev / sda g(对于GPT) 擦掉/ dev / ze ...

  6. /dev/null 、/dev/zero、/dev/random、/dev/urandom

    Linux中的虚拟设备/dev/null./dev/zero./dev/random和/dev/urandom /dev/null 利用/dev/null来清除不必要的输出 把/dev/null看作& ...

  7. 查看linux设备Ran的大小,linux – 来自/ dev / zero和/ dev / urandom的不同文件大小

    dd status=progress if=/dev/zero of=/tmp/testfile.zer bs=100M count=10 dd status=progress if=/dev/ura ...

  8. /dev/random和/dev/urandom

    /dev/random和/dev/urandom是unix系统提供的产生随机数的设备,很多应用都需要使用random设备提供的随机数,比如ssh keys, SSL keys, TCP/IP sequ ...

  9. /dev/tty和/dev/console

    目录 1.串行端口终端(/dev/ttySn) 2.伪终端(/dev/pty/) 3.控制终端(/dev/tty) 4.控制台终端(/dev/ttyn, /dev/console) 5.其它类型 (1 ...

最新文章

  1. 第二章个人技术和流程课后题
  2. 图像多尺度对比增强算法
  3. java readtoend_java项目和C#项目实现通信
  4. wegame一键蹲替换文件_iPhone 提示音一键替换,极简教程
  5. display:flex 多栏多列布局
  6. idea安装Maven Helper
  7. 一个web项目在myeclipse中add deployment时无法被识别出来的原因
  8. 干货|Elastic 在顶级互联网公司的应用案例浅析
  9. 日本研发高精度诊疗感应器,或颠覆疾病诊疗
  10. 动态规划——打家劫舍(Leetcode 198)
  11. mysql InnoDb存储引擎索引
  12. ionic 安卓apk签名_安卓 APP 三代加壳方案的研究报告
  13. 深入解析软件测试行业!它是否存在前景和出路?
  14. ng-class使用
  15. 安卓linux开机画面,Android开机logo简单修改方法
  16. android交叉编译工具链,NDK 交叉编译工具链使用
  17. 虚拟空间 搬迁 云服务器,服务器空间搬迁到虚拟主机
  18. ubuntu 16.04 Clion2018.1.1 添加桌面快捷方式
  19. 上百本中文书籍中对《人月神话》的引用(4)
  20. 快手小店通涨粉推广怎么做?

热门文章

  1. EJB是什么?EJB的概念分析与理解(copy)
  2. 刚学unity3d,跟着仿作了flappy bird,记下一些琐碎的心得!
  3. linux3.0.4编译LDD中的scull全过程
  4. 第二周周四DailyReporting——PM(李忠)
  5. .Net读取xlsx文件Excel2007
  6. Typora中使用Gitee图床
  7. ConcurrentHashMap底层原理?
  8. SpringBoot项目修改html后不即时编译
  9. 自定义EditText输入框
  10. nginx设置 二级域名 指定端口