查看原文
其他

文件读写测试,磁盘读写测试全靠它

编程珠玑 2022-09-11

来源:公众号【编程珠玑】

作者:守望先生

ID:shouwangxiansheng


有时候需要测试磁盘读写速度,或者临时读写文件,不想临时写代码?有没有测试使用的命令?当然有!

dd命令

dd命令可以用于文件的拷贝或者内容转换。常见操作选项如下:

  • bs=BYTES  一次读写字节数

  • ibs=BYTES 一次读的字节数

  • obs=BYTES 一次写的字节数

  • cbs=BYTES 一次转换的字节数

  • count=N 读写次数

  • of=FILE  将内容写到FILE,默认写入标准输出

  • if=FILE  从FILE中读取,默认从标准输入读取

  • conv=CONVS 转换标志

更多选项可查看man手册。

来看一些实例。

将文件的内容进行大小写转换

加入文件test.txt中有以下内容:

shouwangxiansheng

现在要将内容转换为大写:

$ dd if=test.txt of=utest.txt conv=ucase
0+1 records in
0+1 records out
18 bytes copied, 0.0123523 s, 1.5 kB/s

执行完成后,再看看utest.txt中的内容:

SHOUWANGXIANSHEN

看到没,已经将所有内容转换为大写了。

当然要达到这个目的有很多方法,比如要将test.txt内容的小写都转为大写,并且保存在utest.txt中。

$ cat test.txt | tr 'a-z' 'A-Z' > utest.txt

解释一下,conv=ucase,表示转换操作是转换为大写,你还可以使用:

  • lcase 转换为小写

  • ucase 转换为大写

  • swab 相邻字节交换

拷贝文件

例如将test.txt文件内容拷贝到test0.txt文件,每次拷贝1024字节:

$ dd if=test.txt of=test0.txt bs=1024

读取指定次数:

$  dd if=a of=b bs=1024 count=10 #读取10次

跳过指定块大小开始读取:
假设ibs=1,那么,每次读取1字节,而skip=4,则会从第五个字节开始读取:

dd if=test.txt of=test0.txt ibs=1 skip=4

得到内容:

$cat test0.txt
wangxiansheng

那如果要从指定位置开始写呢?

dd if=test.txt of=test0.txt obs=1 seek=5

这些写入的内容就会从test0.txt的第六个字节开始写,而会保留前面的5个字节。

注意,由于这里我设置了ibs或者obs为1,所以skip和seek的单位都是字节,但是如果前面设置的是如1M,那么跳过的就是N兆了。

生成随机文件

还记得在《Linux字符设备文件》中提到的特殊字符文件吗?结合dd命令,我们可以生成一些随机内容的文件。

$ dd if=/dev/urandom of=temp.txt count=2

执行之后就会读取2个块大小的数据到temp.txt中。

磁盘读写测试

由于dd命令每次执行完成后都会显示其速度,因此可以利用它来测试当前的磁盘读写情况。
这里还有一个选项oflag=FLAGS用来设置一些读写方式,FLAG常见选项有:

  • direct 使用直接IO

  • nonblock 使用非阻塞IO

  • noatime 不更新访问时间

  • nocache  丢弃缓存

  • sync   读写一次就写到磁盘

  • fsync 最后要写到磁盘

$ dd if=/dev/urandom of=testfile count=100 oflag=sync
100+0 records in
100+0 records out
51200 bytes (51 kB, 50 KiB) copied, 0.0011526 s, 44.4 MB/s

总结

dd命令可用于文件拷贝,文件内容大小写转换,磁盘读写测试等。


相关精彩推荐

Linux下你还知道这些特殊文件?

为何优先选用unique_ptr而不是裸指针?

拥抱智能指针,告别内存泄露


关注公众号【编程珠玑】,获取更多Linux/C/C++/数据结构与算法/计算机基础/工具等原创技术文章。后台免费获取经典电子书和视频资源

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存