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

今天第一天写,先说下写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 大小的块中尾部的空格替换为一个换行符  2> 是错误信息输出流  /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 的大小;当配合block
         或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

本文出自 “书生” 博客

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索dd
文本操作
shell dd命令、shell dd、adb shell dd、linux shell dd、adb shell dd if,以便于您获取更多的相关知识。

时间: 2024-10-25 18:19:53

一天一个shell命令 文本操作系列-linux dd使用教程_linux shell的相关文章

一天一个shell命令 文本操作系列-comm命令用法_linux shell

 comm命令比较两个已排序文件每行数据的差异,并将其结果显示出来,如果没有指定任何参数,comm命令读取这两个文件,然后生成三列输出:1>仅在file1中出现的行2>仅在file2中出现的行3>在两个文件中都存在的行.   如果为文件名之一指定 -(减号),则 comm 命令会从标准输入设备读取数据. 题外话:说到比较文件,过来人都用过Beyond Compare,老版本时候,我们只能右键选中用于比较的文件,再选中被比较文件,对比. 如今他有了丰富的界面,支持linux上比较文件. 干

linux shell命令行选项与参数用法详解_linux shell

问题描述:在linux shell中如何处理tail -n 10 access.log这样的命令行选项?在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景.1,直接处理,依次对$1,$2,...,$n进行解析,分别手工处理:2,getopts来处理,单个字符选项的情况(如:-n 10 -f file.txt等选项):3,getopt,可以处理单个字符选项,也可以处理长选项long-option(如:--prefix=/home等).总结:小脚本手工处理即可,getopt

一句话Shell命令关闭不需要的随机启动服务_linux shell

Linux可以简单的通过一条shell命令来关闭其他不需要的开机启动服务,只保留计划任务,网络,ssh和日志,看shell命令: 复制代码 代码如下: chkconfig --list | grep 3:on | \ grep -v "crond\|network\|sshd\|syslog" | \ awk '{print "chkconfig " $1 " off"}' | sh 这条shell命令在RedHat和Centos测试可以顺利关闭

bash shell命令行选项与修传入参数处理_linux shell

在编写shell程序时经常需要处理命令行参数,本文描述在bash下的命令行处理方式.选项与参数:如下命令行:   复制代码 代码如下: ./test.sh -f config.conf -v --prefix=/home -f为选项,它需要一个参数,即config.conf, -v 也是一个选项,但它不需要参数.--prefix我们称之为一个长选项,即选项本身多于一个字符,它也需要一个参数,用等号连接,当然等号不是必须的,/home可以直接写在--prefix后面,即--prefix/home,

一天一个shell命令 linux文本操作系列-touch命令用法_linux shell

之前我们学过dd创建测试文件,如果不需要考虑文件大小,创建一个空白文件的话,不妨试试 touch: 将每个文件的访问时间和修改时间改为当前时间. 不存在的文件将会被创建为空文件,除非使用-c 或-h 选项. 入门例子: 1. 如果想生成100个空文件 for name in {1..100}.txt do touch $name done 2. 改进一下 touch test{1..20}.c 查看 --help 用法:touch [选项]... 文件... 将每个文件的访问时间和修改时间改为当

一天一个shell命令 linux文本操作系列-head,tail命令详解_linux shell

head命令中文介绍: 用法:head [选项]... [文件]... 将每个指定文件的头10 行显示到标准输出. 如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头. 如果不指定文件,或者文件为"-",则从标准输入读取数据. 长选项必须使用的参数对于短选项时也是必需使用的. -c, --bytes=[-]K 显示每个文件的前K 字节内容: 如果附加"-"参数,则除了每个文件的最后K字节数据外 显示剩余全部内容 -n, --lines=[-]K 显示每个文

一天一个shell命令 linux文本操作系列-tac,rev命令详解_linux shell

说明: tac和rev没有必然联系,唯一相同的是,他们是"反派".tac其实是cat的反写,cat正常输出,那tac就倒着输出,不过从行的最后一行输出,那rev呢?rev是每行的最后一个字母到第一个字母倒序输出. 简单实例 tac命令 文件过滤分割与合并 tac命令用于将文件已行为单位的反序输出,即第一行最后显示,最后一行先显示. 语法 tac(选项)(参数) 选项 -a或--append:将内容追加到文件的末尾: -i或--ignore-interrupts:忽略中断信号. 参数 文

Linux下Shell命令文本处理的例子

本文将介绍Linux下使用Shell处理文本时最常用的工具: find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk: 提供的例子和参数都是最常用和最为实用的: 我对shell脚本使用的原则是命令单行书写,尽量不要超过2行: 如果有更为复杂的任务需求,还是考虑python吧: find 文件查找 查找txt和pdf文件   find . \( -name "*.txt" -o -name "*.pdf" \) -print

linux下的shell命令的编写,以及java如何调用linux的shell命令(java如何获取linux上的网卡的ip信息)

程序员都很懒,你懂的! 最近在开发中,需要用到服务器的ip和mac信息.但是服务器是架设在linux系统上的,对于多网口,在获取ip时就产生了很大的问题.下面是在windows系统上,java获取本地ip的方法.贴代码: package com.herman.test; import java.net.InetAddress; /** * @see 获取计算机ip * @author Herman.Xiong * @date 2014年5月16日 09:35:38 */ public class