Linux time命令、dd命令、测试硬盘读写速度、磁盘备份恢复
time命令常用于测量一个命令的运行时间,注意不是用来显示和修改系统时间的(这是date命令干的事情)。它不仅仅是测量运行时间,还可以测量内存、I/O等的使用情况。一个程序在运行时使用的系统资源通常包括CPU、Memory和I/O等,其中CPU资源的统计包括实际使用时间(realtime)、用户态使用时间(theprocessspentinusermode)、内核态使用时间(theprocessspentinkernelmode)。但是简单的使用time命令并不能得到内存和I/O的统计数据
命令格式:
time<command>[<arguments...>]
例子:timefind.-name"mysql.sh"
在命令执行完成之后就会打印出CPU的使用情况:
real0m14.837s<==实际使用时间(realtime)
user0m0.030s<==用户态使用时间(theprocessspentinusermode)
sys0m0.120s<==内核态使用时间(theprocessspentinkernelmode)
注1:real远大于user加上sys,因为find需要遍历各个目录,需要大量的I/O操作,而磁盘I/O通常是最慢的环节,因此大部分时间find进程都在等待磁盘I/O完成。
注2:使用-p参数时,就直接打印所需时间的数值,单位为秒,而不是更友好的格式,包括分钟、秒钟的显示方式。
Linux系统中time命令其实不止一个:
执行type-atime命令
timeisashellkeyword
timeis/usr/bin/time
通过这条命令我们可以发现我们常用的time其实是一个Shell关键字,还有一个外部命令/usr/bin/time(外部命令功能更强大)
例子:使用外部time命令输出内存、IO等更加多的信息/usr/bin/time-vfind.-name"mysql.sh"
time命令输出信息的重定向:time命令的输出信息是打印在标准错误输出上的
方法1:将time命令和将要执行的命令行放到一个shell代码块中,也就是一对大括号。如下,注意分隔符、空格的使用。
{timecommand-line;}2>file
方法2:使用子Shell的方式。如下,这里time紧贴着小括号(也可以的,命令行结束也不必带分号。当然最好还是用第一种方式,毕竟启动一个子shell是要多占些资源的。
(timecommand-line)2>file
dd命令:Linux/UNIX下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
dd的主要选项:
- if=file:输入文件名,缺省为标准输入。
- of=file:输出文件名,缺省为标准输出。
- count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
- bs=bytes:同时设置读写块的大小为bytes,可代替ibs和obs。
- ibs=bytes:一次读入bytes个字节(即一个块大小为bytes个字节)。
- obs=bytes:一次写bytes个字节(即一个块大小为bytes个字节)。
- cbs=bytes:一次转换bytes个字节,即转换缓冲区大小。
- skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
- seek=blocks:从输出文件开头跳过blocks个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。
- conv=conversion[,conversion...]:用指定的参数转换文件。
- conv=ASCII把EBCDIC码转换为ASCII码。
- conv=ebcdic把ASCII码转换为EBCDIC码。
- conv=ibm把ASCII码转换为alternateEBCDIC码。
- conv=blick把变动位转换成固定字符。
- conv=ublock把固定们转换成变动位
- conv=ucase把字母由小写变为大写。
- conv=lcase把字母由大写变为小写。
- conv=notrunc不截短输出文件。
- conv=swab交换每一对输入字节。
- conv=noerror出错时不停止处理。
- conv=sync把每个输入记录的大小都调到ibs的大小(用ibs填充)。
结合time、dd命令测试硬盘读写速度:
- /dev/null:是一个伪设备,相当于回收站,of到该设备不会产生IO
- /dev/zero:是一个伪设备,它只产生空字符流,对它不会产生IO
- 测试磁盘写能力:timeddif=/dev/zeroof=test.dbfbs=8kcount=300000
- 测试磁盘读能力:timeddif=/dev/sda1of=/dev/nullbs=8k
- 测试同时读写能力:timeddif=/dev/sda1of=test1.dbfbs=8k
磁盘备份恢复:
- 将本地的/dev/hdx整盘备份到/dev/hdy:ddif=/dev/hdxof=/dev/hdy
- 将/dev/hdx全盘数据备份到指定路径的image文件:ddif=/dev/hdxof=/path/to/image
- 备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径:ddif=/dev/hdx|gzip>/path/to/image.gz
- 将备份文件恢复到指定盘:ddif=/path/to/imageof=/dev/hdx
- 将压缩的备份文件恢复到指定盘:gzip-dc/path/to/image.gz|ddof=/dev/hdx
参考:linuxtime命令详解