AG广东会,山东十一选五,大发

?
  • AG广东会400电话
  • 微网小程序
  • AI电话山东十一选五
  • 电商代运营
  • AG广东会,山东十一选五,大发:全 部 栏 目

    AG广东会400电话 网络优化推广 AI电话山东十一选五 呼叫中心 网站建设 商标?知产 微网小程序 电商运营 彩铃?短信 增值拓展业务
    一天一个shell命令 文本操作系列-linux dd使用教程

    今天第一天写,先说下写shell脚本的基本知识

    1. shell脚本以.sh 为扩展名,通常运行 ./${filename}.sh 或者 sh ${filename}.sh
    2. shell 脚本开头以 #!/bin/bash #!读作 “shebang”
    3. 开启调试  #!/bin/bash –xv
    4. /dev/null 任何东西丢进去都会消失,linux黑洞。 /dev/zero 用于初始化,会产生0

    今天先介绍 dd 命令

    由来(全称):本来应根据其功能描述“Convert an copy”命名为“cc”,但“cc”已经被用以代表“CComplier”,所以命名为“dd”

    开篇例子:

    1.  dd if=infile.log  of=outfile.log bs=1M count=1

      拷贝 infile.log内容 到 outfile.log. 一次读写比特数为1M , 每次读写一个块(1M,由bs决定)

    2.  echo -n "hello world" | dd cbs=1 conv=unblock 2>/dev/null

      主要演示cbs,每次转换一个字节, conv=unblock 是将cbs 大小的块中尾部的空格替换为一个换行符  2gt; 是错误信息输出流  /dev/null 开头介绍了

    解读help:

    (不愿意看这么一大段,尝试先跳过,看解读)

    用法:dd [操作数] ...
    或:dd 选项
     复制文件,依照操作数转换并格式化。

      bs=比特数    一次读写的比特数
      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        将大写字符转换为小写
      ucase        将小写字符转换为大写
      swab        交换每一对输入数据字节
      sync        将每个输入数据块以NUL 字符填满至ibs 的大。坏迸浜蟗lock
             或unblock 时,会以空格代替NUL 字符填充
      excl        fail if the output file already exists
       nocreat    do not create the output file
       notrunc    不截断输出文件
      noerror    读取数据发生错误后仍然继续
      fdatasync    结束前将输出文件数据写入磁盘
      fsync    类似上面,但是元数据也一同写入

    FLAG 符号可以是:

      append    追加模式(仅对输出有意义;隐含了conv=notrunc)
       direct    使用直接I/O 存取模式
      directory    除非是目录,否则 directory 失败
      dsync        使用同步I/O 存取模式
      sync        与上者类似,但同时也对元数据生效
      fullblock    为输入积累完整块(仅iflag)
       nonblock    使用无阻塞I/O 存取模式
      noatime    不更新存取时间
      nocache    丢弃缓存数据
      noctty    不根据文件指派控制终端
      nofollow    不跟随链接文件

     

    解读:

    1. bs ibs obs  cbs

    bs: 一次 读写 = ibs+obs
    ibs: 一次读
    obs: 一次写
    cbs: 一次转换

    2. if of

    if 是读取的文件
    of 是输出的文件

    3. seek skip

    skip 在从if中读取时  跳过多少比特
    seek 在写入of时, 跳过多少比特

    实战例子:

    1. 批量生成随机名称的测试文件

    for i in {10..10}  
    do  
    dd if=/dev/zero of=junk.test$i bs="$RANDOM"K count=20  
    done

    2. 备份和恢复

    备份

    dd if=abc.gz of=abc.gz.bak1 bs=1k count=10000  
    dd if=abc.gz of=abc.gz.bak2 bs=1k skip=10000 count=70000  
    dd if=abc.gz of=abc.gz.bak3 bs=1k skip=80000 

    恢复方法如下:

    dd if=abc.gz.bak1 of=abc.gz  
    dd if=abc.gz.bak2 of=abc.gz bs=1k seek=10000  
    dd if=abc.gz.bak3 of=abc.gz bs=1k seek=80000 

    3. 转换大小写

    生成大写:dd if=dd.txt of=my.log bs=1M count=1 conv=ucase

    生成小写:为了不懒惰,留给读者试试

    4. 拷贝自己 

    复制代码 代码如下:

    file_subscript=copy  
    dd if=$0 of=$0.$file_subscript 2>/dev/null

    5.要把一张软盘的内容拷贝到另一张软盘上,利用/tmp作为临时存储区。把源盘插入驱动器中,输入下述命令:

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

    拷贝完成后,将源盘从驱动器中取出,把目标盘插入,输入命令:

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

    软盘拷贝完成后,应该将临时文件删除:

    $ rm /tmp/tmpfile  

    6. 把net.i这个文件写入软盘中,并设定读/写缓冲区的数目。

    (注意:软盘中的内容会被完全覆盖掉)

    $ dd if = net.i of = /dev/fd0 bs = 16384  

    7.将文件sfile拷贝到文件 dfile中。

    $ dd if=sfile of=dfile

    8.创建一个100M的空文件

    dd if=/dev/zero of=hello.txt bs=100M count=1

    =============================================

    /dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!
    /dev/zero,是一个输入设备,你可你用它来初始化文件。

    /dev/null------它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
    /dev/zero------该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。
    $ dd if=/dev/zero of=./test.txt bs=1k count=1
    $ ls -l
    total 4
    -rw-r--r--     1 oracle    dba           1024 Jul 15 16:56 test.txt

    eg:

    $ find / -name access_log   2>/dev/null


    本文出自 “书生” 博客

    您可能感兴趣的文章:
    • 一天一个shell命令 linux文本内容操作系列-awk命令详解
    • 一天一个shell命令 linux文本内容操作系列-cut命令详解
    • 使用Linux灵活搜索文件中的文本
    • 一天一个shell命令 linux文本操作系列-touch命令用法
    • 一天一个shell命令 linux文本操作系列-head,tail命令详解
    • 一天一个shell命令 linux文本操作系列-diff命令详解
    • 一天一个shell命令 linux文本内容操作系列-grep命令详解
    • 一天一个shell命令 linux文本操作系列-wc命令详解
    • 详解Linux文本文件与WIN文本文件换行格式转换命令
    • 教你一招实现Linux中的文本比对
    上一篇:实战模拟监控MySQL服务shell脚本小结
    下一篇:一天一个shell命令 文本操作系列-comm命令用法
  • 相关文章
  • ?

    ? 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    一天一个shell命令 文本操作系列-linux dd使用教程 一天,一个,shell,命令,文本,

    AG广东会官网入口(中国)官方网站-IOS/Android通用版(2026已更新)