在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
今天第一天写,先说下写shell脚本的基本知识 1. shell脚本以.sh 为扩展名,通常运行 ./${filename}.sh 或者 sh ${filename}.sh 今天先介绍 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 [操作数] ... bs=比特数 一次读写的比特数 块和字节数后可能带有以下的一个或多个后缀: 每个 CONV 符号可能为: ascii 由EBCDIC 码转换至ASCII 码 FLAG 符号可以是: append 追加模式(仅对输出有意义;隐含了conv=notrunc)
解读: 1. bs ibs obs cbs bs: 一次 读写 = ibs+obs 2. if of if 是读取的文件 3. seek skip skip 在从if中读取时 跳过多少比特 实战例子: 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/null------它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。 eg: $ find / -name access_log 2>/dev/null
|
请发表评论