• 创建固定大小的文件 Linux shell 脚本编写实例


    创建固定大小的文件 -- Linux shell 脚本编写实例

     

    昨天验证bug时,需要在原来文件的基础上生成一个固定大小的新文件,具体要求如下:

      1. 源文件 src_file, 大小为4840896 byte;

      2. 目标文件obj_file(在源文件基础上扩大),大小为5263104 byte;

    需要的准备工作:

      1. 获得文件大小的组合指令: ls -l src_file | awk '{print $5}',其中 ls -l src_file 用来获得src_file

          的详细信息,文件大小在第5列的位置;awk '{print $5}' 以 ls -l src_file的输出作为该指令的输入,

          将其第5列内容打印出来,即文件的大小。

      2. 扩大源文件的指令: echo /0 >> src_file, 在文件filename 最后添加null字符。

      3. 截取文件的指令: dd if=src_file out=obj_file bs=256   count=20559 注释:每次写256byte, 

          重复20559个cycle, 即 256 * 20559=5263104 byte。

    具体的脚本实现:

    step1:生成大于等于 5263104 bytes 的目标文件

    注释:脚本中需扩大的文件为vmlinux.64.noinitrd,

             执行之前先将源文件copy到目录 /root下。

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

     #! /bin/sh   # 使用的shell为sh
    if [ -e /root/vmlinux.64.noinitrd ]   # 判断文件vmlinux.64.noinitrd是否存在,存在则为真
    then
            size=`ls -l /root/vmlinux.64.noinitrd | awk '{print $5}'` # 获得vmlinux.64.noinitrd大小,
                                                                                                   # 并用变量size来保存 

           while [ $size -lt 5263104 ]     # 当size小于5263104 时,条件为真

           do
                    echo /0 >> /root/vmlinux.64.noinitrd       # 在vmlinux.64.noinitrd末尾写null字符,来扩大

                                                                                   # 文件的大小,实际内容不变

          done      # 对应于while语句                    

    fi                  # 对应于if语句

    exit 0     # 退出代码,成功则为0

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

    step2: 执行脚本

      root@localhost:/root> chmod 555 create_file       #此处通过改变文件的权限来实现

     root@localhost:/root> ./create_file   #执行脚本

    step3:截取文件大小为5263104 bytes

    一般来说step2执行后得到的目标文件vmlinux.64.noinitrd的大小并不恰好就是5263104 byte,这就需要对目标文件进行截取操作,此处使用dd命令实现。

    root@localhost:/root> dd if=vmlinux.64.noinitrd of=vmlinux.64.noinitrd.test bs=256 count=20559 #源文件和目标文件均在root目录下;如果当前目录不是root目录,则if 和of需要改为:

     if=/root/vmlinux.64.noinitrd of=/root/vmlinux.64.noinitrd.test 。(源文件和目标文件也可属于不同目录)

    step4: 查看目标文件的大小是确实为5263104 byte

    root@localhost:/root> ls -l vmlinux.64.noinitrd.test

    体会:

    最初看到要求时,只有思路,每条指令的规范等都很陌生,写过之后就想把这些常用的指令和脚本记录下来,作为以后的参考,来减少组织规范的时间。    


    FROM:

    http://blog.csdn.net/axdc_qa_team/article/details/4152025

  • 相关阅读:
    数据库模式
    数据流模式、转换、格式与操作
    桥接模式=抽象层协作关系+继承体系注入
    php 中更简洁的三元运算符 ?:
    larave5.6 将Excel文件数据导入数据库代码实例
    Laravel获取所有的数据库表及结构
    Laravel框架数据库CURD操作、连贯操作总结
    insert into 语句的三种写法
    Laravel 上传excel,读取并写入数据库 (实现自动建表、存记录值
    laravel5.4将excel表格中的信息导入到数据库中
  • 原文地址:https://www.cnblogs.com/yuzaipiaofei/p/4124244.html
Copyright © 2020-2023  润新知