如何在Linux系统通过命令行生成随机文件
版权声明:本文由胡恒威原创文章,转载请注明出处:
文章原文链接:https://www.qcloud.com/community/article/86
来源:腾云阁 https://www.qcloud.com/community
是否会有这样的场景:在有需要测试数据的时候,你不知如何生成一些已包含测试数据的文件;或者你是临时需要一个小的程序,可以让你生成不同大小的文件(比如大于1Mb少于100Mb),不需要从网络上去搜寻查找如何生成,这里有一些简单的方法帮你偷懒。
1.当你不需要关心随机文件的内容,只需一个固定大小的文件
Solaris、Mac OS X等Unix系统中mkfile指令,可以产生指定大小的文件,而Linux上则没有
例子:mkfile -n 160g test1
Linux可以用dd指令,/dev/zero是一个特别的文件描述符可以通过它返回null值
例子:dd if=/dev/zero of=test.file count=1024 bs=1024
产生count * bs字节的文件,1M
此方法生成随机文件的好处在于效率高(产生1G文件大概1s),创建的文件大小精确到字节
坏处也有
使用null字符来填充文件内容,文件统计时没有行(wc -l test.file
为0)
2.当你不需要关心随机文件的内容,但期望测试文件能有统计的行
将/dev/zero
改为/dev/urandom
,/dev/urandom
是linux下的随机数生成器
关于/dev/urandom
跟/dev/random
两者的区别就不在此详细讨论,大概就是,前者是不受系统interrupts
的限制,即使没有足够的interrupt它也能通过随机数生成器产生足够的输出值;而后者如果用在dd
上,它不能被ctrl+c
或者kill -9
中断,如果ds的值较大时,产生的随机值不足而长期占用CPU。虽然说/dev/random
产生的随机数会更随机些,但与dd混用还是建议用/dev/urandom
效率更高。
缺点跟/dev/zero
比当然是效率会更低些了,生成个100Mb的文件需要10秒左右,而且文件并没有可读的内容,一般的情况基本上是满足了。
漏了说句,dd
是linux与unix都支持的指令。
3.当你关心文件的随机内容行数,而不关心内容是否有所重复
这里的思路就是找一个参照文件(比如说2行),将文件重新定向到新的文件,再mv覆盖保存,外加一个for循环。(n为循环次数,产生的文件行为2^(n+1))
例子:假设先建立一个file.txt文件,里面含有Hello 和 World两行for i in {1..n}; do cat file.txt file.txt > file2.txt && mv file2.txt file.txt; done
由于是阶乘,n=20左右已经是200W行,效率会下降地比较厉害
4.当你关心随机文件的内容,而不想出现重复内容行情况
这种情况下系统的指令应该是不能满足了,或者可以通过操作系统的指令写一大串脚本也可以达到,但不建议这么做,因为可读性和维护性考虑,你应该要引入Ruby或者Python类的脚本语言帮忙了
但还是要借助些系统的东西来帮忙
思路:/usr/share/dict/words
里面有记录一些单词,一共235886行,每行一个单词
可以从里面挑选一些作为文件的内容
加循环达到我们想要的随机文件要求
举例:ruby -e 'a=STDIN.readlines;X.times do; b=[];Y.times do; b<<a[rand(a.size)].chomp end; puts b.join(" ")' < /usr/share/dict/words > file.txt
X为随机文件需要的行数,Y为从words中读取的单词,虽说组合成一句的命令,还是可以读懂的;从标准输入中重复读取Y个单词,写入到b列表中,然后再通过join空格连接内容写入到标准输出文件file.txt中
这样基本很少会有重复的行了,而且生成的效率与其他方法对比还是可以的,10秒生成100Mb文件。欢迎大家讨论。
参考:
mkfile的Apple官方文档:
https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man8/mkfile.8.html
dd的wiki:
http://en.wikipedia.org/wiki/Dd_(Unix)
如何在Linux系统通过命令行生成随机文件的更多相关文章
- [转帖]如何在Linux上使用命令行查看硬件信息
如何在Linux上使用命令行查看硬件信息 时间:2016-01-13 作者:admin 分类:新手入门 阅读:126次 http://embeddedlinux.org.cn/emb-linux/ ...
- 【转载】Linux系统下命令行连接蓝牙设备 查看查找 蓝牙
Linux系统下命令行连接蓝牙设备 2018年11月26日 10:47:27 Zz笑对一切 阅读数:741 1.打开系统蓝牙 sudo service bluetooth start 1 进入bl ...
- 【转载】【Centos linux系统】命令行(静默)安装oracle 11gR2
[原文]:http://blog.chinaunix.net/uid-23886490-id-3565998.html 一.安装前准备 1.内存及swap要求 至于swap如何添加,后文将提到 gre ...
- 【Centos linux系统】命令行(静默)安装oracle 11gR2
一.安装前准备 1.内存及swap要求 至于swap如何添加,后文将提到 1 2 grep MemTotal /proc/meminfo grep SwapTotal /proc/meminfo 2. ...
- java程序高CPU,如何直接定位(linux系统下命令行操作)
1.top命令找出 2.也可以使用 (1)ps -ef|grep java|grep -v grep (2)jps -l|grep 公司名 然后,记住PID是9529. 3.定位具体的线程或者代码: ...
- 如何在Linux中使用命令行卸载软件
您可以使用“dpkg”命令来查看您的计算机,按“Ctrl + Alt + T”的所有已安装包的列表,打开一个终端窗口. 在提示符下键入以下命令,然后按Enter键.dpkg -- list 要卸载程序 ...
- Linux(CentOS 7)命令行模式安装VMware Tools 详解
本篇文章主要介绍了如何在Linux(CentOS 7)命令行模式安装VMware Tools,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 本例中为在Linux(以CentOS 7为例)安装VM ...
- Mac OSX系统、Linux、Windows命令行教程
目录 Mac OSX系统.Linux.Windows命令行教程 一.各系统终端的使用方法 二.各系统命令的功能 Mac OSX系统.Linux.Windows命令行教程 用你的终端做一些事情 (com ...
- Redis进阶实践之二如何在Linux系统上安装安装Redis(转载)(2)
Redis进阶实践之二如何在Linux系统上安装安装Redis 一.引言 上一篇文章写了“如何安装VMware Pro虚拟机”和在虚拟机上安装Linux操作系统.那是第一步,有了Linux操作系统,我 ...
随机推荐
- 【高可用HA】Apache (3) —— Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy
Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy httpd版本: httpd-2.4.17 参考来源: Apache (1) -- Mac下安装Apac ...
- 判断DataTable某字段是否包含某值
// <summary> /// 判断DataTale中判断某个字段中包含某个数据 /// </summary> /// <param name="dt&quo ...
- PHP无限极分类 - 2 - 无限极评论
参考上一节: 结合ZUI前端框架,制作的无限极评论列表: 项目目录: 代码: <!DOCTYPE html> <html lang="en"> <he ...
- ionic2 生命周期
在 Ionic 2 的版本中生命周期命名的改变,以及各个事件的解释. 官方文档地址在 这里 . 事件名称 事件说明 ionViewLoaded 页面加载完毕触发.该事件发生在页面被创建成 DOM 的时 ...
- jquery打造一款侧边弹出的垂直导航
这是一款利用jquery动画特效和css打造的侧边弹出垂直导航,整个弹出过程比较流畅,而且代码很简单,如果你正在寻找一款带动画的垂直导航,那么可以试试这个.下面是在线demo HTML源码: 1 2 ...
- 【这特么是个坑。。。】iOS 10.3下解决Charles抓包ssl证书信任问题
针对近期iOS 10.3以上的系统charles抓https信任问题 前言 最近iPhone系统更新到ios 10.3后,在公司里用Charles抓包竟然出现了一些问题,https的请求都会失败,提示 ...
- UML总结---UML中的事物和关系
UML中的事物 名称 说明 图形 类 相同属性方法的集合 接口 类或组件提供的,可以完成特定功能的一组操作的集合 协作 合作的动作 用例 系统的一个功能 节点 代表可计算的资源 活动类 有多个线程的类 ...
- WebForm和MVC的一些知识(转)
转自:http://www.cnblogs.com/liuhf939/p/3417203.html 比较WebForm和Mvc的请求处理方式 首先简单了解一下Asp.Net中怎么对页面进行请求处理的: ...
- JAVA中String字符串比较equals()和equalsIgnoreCase()的区别
标签: equals和equalsIgnoreC 2012-11-11 16:03 65644人阅读 评论(0) 收藏 举报 分类: JAVA(3) 1.使用equals( )方法比较两个字符串是 ...
- asp.net MVC提高开发速度(创建项目模板)