zoukankan      html  css  js  c++  java
  • Linux和Windows创建指定大小文件方法

    在测试中有时需要创建不同大小的测试文件,用于测试上传下载性能以及以及其它文件传输功能,本文介绍几种Liunx和Windows系统下创建指定大小文件的方法。

    Linux系统创建指定大小文件

    下面介绍的dd 、fallocate和truncate命令包含于GNU coreutils软件包中,不需要单独安装。

    dd命令

    dd (device driver) 命令常用来复制备份文件,与cp命令具有以下区别:

    • dd是对块进行操作,操作磁盘的扇区字节,
    • cp操作文件或目录,对于不能以文件或目录格式呈现的数据cp无法复制。
    • dd是对磁盘连续的读取,也就是完全的数据搬移,cp复制的数据排列不是按顺序的。

    也可以使用这个命令来创建特定大小的文件。

    root@Server ~]# dd if=/dev/urandom of=testfile10MB_dd bs=10MB count=1
    记录了1+0 的读入
    记录了1+0 的写出
    10000000字节(10 MB)已复制,0.124436 秒,80.4 MB/秒
    root@Server ~]# ll testfile10MB_dd
    -rw-r--r--   1 root    root    10000000 7月   7 11:56 testfile10MB_dd
    [root@Server ~]# du testfile10MB_dd
    9768    testfile10MB_dd
    

    /dev/urandom用于生成随机数据,也可以使用/dev/zero来生成全0的文件:

    [root@Server ~]# dd if=/dev/zero of=testfile10MB_dd0 bs=10MB count=1
    记录了1+0 的读入
    记录了1+0 的写出
    10000000字节(10 MB)已复制,0.00799675 秒,1.3 GB/秒
    [root@Server ~]# ll testfile10MB_dd0
    -rw-r--r--   1 root    root    10000000 7月   7 13:57 testfile10MB_dd0
    [root@Server ~]# od -c testfile10MB_dd0
    0000000                                
    *
    46113200
    [root@Server ~]# 
    

    /dev/urandom、/dev/random以及/dev/zero、/dev/null介绍

    • /dev/urandom和/dev/random都可以产生随机的ASCII码字符流,其中/dev/random依赖系统中断,当系统中断不足时,/dev/random设备会“挂起”。/dev/urandom不依赖系统中断,所以在生成特定大小文件时一般使用/dev/urandom,不使用/dev/urandom。
    • /dev/zero “零”设备可以无限的提供空字符,产生二进制的零流
    • /dev/null “空”设备,像”黑洞“一样,所有写入它的内容都会永远丢失,也不会读取到任何内容。常用于禁止标准输出和标准错误的输出,比如抓包命令:tcpdump -i eth1 -w /tmp/packet.pcap >/dev/null &

    根据/dev/urandom的特性,也可以结合head命令来创建指定大小的文件:

    head -c 10MB /dev/urandom > testfile10MB
    # 或者
    head -c 10MB /dev/zero > testfile10MB
    

    bs参数和truncate命令的size参数类似,默认单位为bytes,也支持以下单位:

    • c =1 bytes, w =2 bytes, b =512 bytes
    • K, M, G, T, P, E, Z, Y(幂底数为1024 bytes,如5M=5×1024×1024)
    • KB, MB, GB ...(幂底数为1000 bytes,如5MB=5×1000×1000)

    fallocate命令

    fallocate用于创建大文件(大于2G):

    [root@Server ~]# fallocate -l 2G testfile2G_fal
    [root@Server ~]# ll testfile2G_fal
    -rw-r--r--   1 root    root    2147483648 7月   7 14:01 testfile2G_fal
    

    -l参数指定文件大小,默认单位为bytes,也可以指定单位:K, M, G, T, P, E, Z, Y以及KB, MB, GB等

    truncate命令

    truncate命令也可以用来创建指定大小的文件,下面创建一个10 MB大小的文件

    [root@Server ~]# truncate -s 10M testfile10M
    [root@Server ~]# ll testfile10M
    -rw-r--r--   1 root    root    10485760 7月   7 10:45 testfile10M
    [root@Server ~]# 
    [root@Server ~]# truncate -s 10MB testfile10Mb
    [root@Server ~]# ll testfile10Mb
    -rw-r--r--   1 root    root    10000000 7月   7 10:49 testfile10Mb
    

    -s | --size参数 用于指定要生成的文件大小,单位可以是:

    • K, M, G, T, P, E, Z, Y(幂底数为1024 bytes,如5M=5×1024×1024)
    • KB, MB, GB ...(幂底数为1000 bytes,如5MB=5×1000×1000)

    dd 、fallocate和truncate的区别

    truncate命令生成的是空洞文件,并不占用实际的磁盘空间,文件中间是用“”填充的,实际占用的空间为0。使用du命令查看truncate生成文件占用的磁盘空间:

    [root@Server ~]# ll testfile10Mb
    -rw-r--r-- 1 root root 10000000 7月   7 14:30 testfile10Mb
    [root@Server ~]# du -sh testfile10Mb
    0       testfile10Mb
    [root@Server ~]# od -c testfile10Mb
    0000000                                
    *
    46113200
    [root@Server ~]# 
    

    fallocate命令为文件预分配物理空间,分配的空间在磁盘的扇区上是连续的,生成的不是空洞文件,不是空洞文件那样“假装”占有那么多空间:

    [root@Server ~]# ll testfile2G_fal
    -rw-r--r-- 1 root root 2147483648 7月   7 14:01 testfile2G_fal
    [root@Server ~]# du -sh testfile2G_fal
    2.0G    testfile2G_fal
    

    可以看到,和truncate不一样,用fallocate生成的文件在磁盘上确实占用了2.0G的空间。

    dd命令生成的文件也不是空洞文件,使用它来生成大文件时速度较慢,而且使用dd以及提到的head命令生成文件时会进行大量IO操作,所以在Linux中生成文件时,建议使用fallocate命令。

    Windows系统创建指定大小文件

    fsutil工具

    Windows中可以使用fsutil工具生成文件,命令语法格式如下:

    fsutil file createNew test.txt 1024 # 文件大小单位为bytes
    

    以管理员身份打开cmd,创建一个5M bytes的文件:5×1024×1024=5242880 bytes

    C:UsersDELL> fsutil file createNew test.txt 5242880
    File C:UsersDELL	est.txt is created
    C:UsersDELL> dir test.txt | findstr test.txt
    2021/07/07  15:26         5,242,880 test.txt
    
    --THE END--

    欢迎关注公众号:「测试开发小记」及时接收最新技术文章!

  • 相关阅读:
    ps4 如何导出切片 单个图片
    测试webservice的时候,如果出现这个错误:"The test form is only available for requests from the local machine"
    js jquery 按钮点击后 60秒之后才能点击 60秒倒计时
    有空研究一下 superwebsocket (底层是 supersocket) 用来实现 web聊天什么的
    Vue学习笔记一:初识Vue
    被爬虫了,嘻嘻嘻
    Mybatis-generator自动生成器
    SpringCloud笔记五:Feign
    SpringCloud笔记四:Ribbon
    SpringCloud笔记三:Eureka服务注册与发现
  • 原文地址:https://www.cnblogs.com/hiyong/p/15024665.html
Copyright © 2011-2022 走看看