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命令详解