• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >linux shell > Shell脚本创建指定大小文件的测试数据

Shell脚本创建指定大小文件的测试数据

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了shell脚本删除文件,shell脚本输出到文件,shell脚本创建文件夹,shell脚本遍历文件夹,shell脚本读取文件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

我们在测试或调试的时候,有时候会需要生成某个size的文件,比如在测试存储系统时,需要将磁盘剩余空间减少5G,最简单的办法就是拷贝一个5G的文件过来,但是从哪儿去弄这样大小的文件呢,或许你想到随便找一个文件,不停的拷贝,最后合并,这也不失为一种办法,但是有了dd,你会更容易且更灵活的实现。
我们来case by case的介绍dd的用法。先看第一个

生成一个大小为5G的文件,内容不做要求

命令如下
$ dd if=/dev/zero of=tmp.5G bs=1G count=5 
</div>
解释一下这里用到的参数
if=FILE      : 指定输入文件,若不指定则从标注输入读取。这里指定为/dev/zero是Linux的一个伪文件,它可以产生连续不断的null流(二进制的0) 
of=FILE      : 指定输出文件,若不指定则输出到标准输出 
bs=BYTES     : 每次读写的字节数,可以使用单位K、M、G等等。另外输入输出可以分别用ibs、obs指定,若使用bs,则表示是ibs和obs都是用该参数 
count=BLOCKS : 读取的block数,block的大小由ibs指定(只针对输入参数) 
</div>
这样上面生成5G文件的命令就很好理解了,即从/dev/null每次读取1G数据,读5次,写入tmp.5G这个文件

再看下面一个问题
将file.in的前1M追加到file.out的末尾
</div>

命令如下
$ file_out_size=`du -b file.out | awk '{print $1}'` 
$ dd if=./file.in ibs=1M count=1 of=./file.out seek=1 obs=$file_out_size
</div>
这里ibs和obs设置为了不同的值,和前面的命令相比,只多了一个seek参数
seek=BLOCKS : 在拷贝数据之前,从输出文件开头跳过BLOCKS个block,block的大小由obs指定 
</div>

命令的意思就是从file.in读取1个1M的数据块写入file.out,不过写入位置并不在file.out的开头,而是在1*$file_out_size字节偏移处(也就是文件末尾)

在此基础上再增加一个要求

将file.in的第3M追加到file.out的末尾
$ file_out_size=`du -b file.out | awk '{print $1}'` 
$ dd if=./file.in skip=2 ibs=1M count=1 of=./file.out seek=1 obs=$file_out_size 
</div>

这里多了一个参数skip
skip=BLOCKS : 拷贝数据前,从输入文件跳过BLOCKS个block,block的大小由ibs指定。这个参数和seek是对应的
</div>
上面命令的意思就是,从文件file.in开始跳过2*1M,拷贝1*1M数据,写入文件file.out的1*$file_out_size偏移处

这样基本的参数都介绍全了,无非就是设置输入输出文件以及各自的偏移,设置读写数据块大小和读取数据块个数,下面总结一下
输入参数: 
    if 
    skip 
    ibs 
    count 
输出参数: 
    of 
    seek 
    obs 
</div>

最后来一道终极题。前面创建的都是null流,这次换一个
指定某个字符,创建一个全是这个字符的指定大小的文件。比如创建一个文件,大小为123456字节,每个字节都是字符A
</div>
这问题看似没什么意义,但有时候确实需要用到。比如我通过/dev/null创建了一个1G的文件,但是出于测试需求我想修改中间100M数据,这时我需要创建一个100M的文件,将该文件写入到那个1G文件的指定位置,而这个100M的文件是不能从/dev/null创建的,否则达不到修改的目的,这时候就需要这样的功能了

话不多说,直接上脚本,有了前面的基础,相信都能看得懂
#!/bin/bash 
if [ $# -ne 3 ];then 
    echo "usage : $0 character out_file file_size(Byte)" 
    exit 1 
fi 
 
echo "$1" | grep -q "^[a-zA-Z]$" 
if [ $? -ne 0 ];then 
    echo "arg1 must be character" 
    exit 1 
fi 
 
character=$1 
out_file=$2 
target_size=$3 
 
# echo输出默认是带'\n'字符的,所以需要通过dd指定输入字节数 
echo "$character" | dd of=$out_file ibs=1 count=1 
while true 
do 
    cur_size=`du -b $out_file | awk '{print $1}'` 
    if [ $cur_size -ge $target_size ];then 
        break 
    fi 
    remain_size=$((target_size-$cur_size)) 
    if [ $remain_size -ge $cur_size ];then 
        input_size=$cur_size 
    else 
        input_size=$remain_size 
    fi 
    dd if=$out_file ibs=$input_size count=1 of=$out_file seek=1 obs=$cur_size || exit 1 
done 
</div>
有了这些技巧,在对文件内容无要求的前提下,你就可以任意创建指定大小的文件,任意修改文件指定字节数,这会让某些测试场合变得非常方便

</div>

您可能想查找下面的文章:

  • Shell脚本监控目录内文件改动
  • shell脚本实现实时检测文件变更
  • Shell脚本逐行读取文本文件(不改变文本格式)
  • Shell脚本创建指定大小文件的测试数据
  • Shell脚本统计文件行数的8种方法
  • Shell脚本实现批量替换文件内容
  • Shell脚本实现删除一年前文件功能分享
  • Shell脚本实现删除一年前文件功能分享
  • shell脚本实现文件锁功能
  • Shell脚本对比两个文本文件找出不同行的2个方法分享

相关文章

  • 用shell脚本和c语言将大写字母转成小写的代码
  • Shell中调用、引用、包含另一个脚本文件的三种方法
  • linux文本分析awk基础命令介绍(8)
  • Linux下实现SSH免密码登录和实现秘钥的管理、分发、部署SHELL脚本分享
  • Linux 中 RPM包 安装 查询 卸载命令小结及yum命令详解
  • Linux Shell脚本实现检测tomcat
  • Shell脚本中判断输入变量或者参数是否为空的方法
  • shell中使用echo打印彩色字体和彩色背景的方法
  • ftp自动上传脚本分享
  • Shell中实现“多线程”执行脚本文件完美解决方案

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • linux多线程编程详解教程(线程通过信号量实现通信代码)
    • shell脚本命令行参数简介
    • centos中mysql备份数据库脚本分享
    • 把文件复制N份的2个Shell脚本代码
    • Linux tar 命令出现 Cowardly refusing to create an empty archive 错误解决办法
    • Linux 怎么实现添加FTP用户并设置权限的方法
    • linux命令详解之useradd命令使用方法
    • Shell脚本实现删除邮件队列
    • shell脚本监控mysql主从状态
    • Formatting Long Lines 格式化多行字符的shell脚本

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有