梁旭在工作中写了一个shell脚本,可以轮流从4个NTP服务器获取时间,然后将最可靠的时间设置为系统时间。因为我们对时间的要求比较高,需要在短时间内获取到正确的时间。所以我们需要测试这个脚本的运行时间,看看从开始运行到正确设置时间需要多长时间。其实在工作中,还是有很多情况需要测试一个脚本或者程序运行多长时间,尤其是对时间要求比较高的系统。对于时间测试,我们可以使用一个命令:time。让我们仔细看看如何使用time命令来测量脚本/命令的时间。1、时间命令的基本用法时间命令最基本的用法是时间+命令,例如:$timepingbaidu.comPINGbaidu.com(123.125.114.144)56(84)字节的数据。64字节来自123.125。114.144(123.125.114.144):icmp_seq=1ttl=56time=2.83ms64bytesfrom123.125.114.144(123.125.114.144):icmp_seq=2ttl=56time=2.77ms……^C---baidu.compingstatistics---8packetstransmitted,8received,0%packetloss,time10818msrttmin/avg/max/mdev=2.765/2.808/2.862/0.039msreal0m11.173suser0m0.004ssys0m0.002s在结果中,real意味着来自我们执行ping命令到按ctrl+c终止所用的时间;user和sys分别表示ping命令在用户空间和内核空间的运行时间。2020精选阿里/腾讯等一线公司面试、简历、进阶、电子书公众号《良旭Linux》后台免费回复“数据”2.将时间信息写入文件如果我们想直接写入时间信息写入文件而不是显示在屏幕上,那么我们可以使用-o选项并指定要写入的文件路径。$/usr/bin/time-o/home/alvin/time-output.txtpingbaidu.com执行这条命令后,ping命令的输出结果还是会在终端,time命令的结果会被写入到我们指定的time-output.txt文件中。-o选项表示输出文件不存在则创建,存在则直接覆盖。如果我们不想覆盖rewrite,而是想追加到文件末尾,我们可以使用-a选项。$/usr/bin/time-a/home/smart/time-output.txtpinglinoxide.com3.显示更详细的时间信息。如果time命令没有选项,显示的信息量比较少。如果我们想得到更详细的信息信息,那么我们可以使用-v选项。$/usr/bin/time-vpingbaidu.comPINGbaidu.com(123.125.114.144)56(84)bytesofdata.64bytesfrom123.125.114.144(123.125.114.144):icmp_seq=1ttl=56time=2.75MS64字节从123.125.114.144(123.125.114.144):ICMP_SEQ=2TTL=56TTL=2.76TIME=2.76MS64字节从123.125.114.144(123.125.114.144)(123.125.114.144):ICMP_SEQ=3TTL=3TTL=56TIME=56TIME=56TIME=56TIME=56TIME=56TIME=56TIME=2.85MSIDET.114.144):icmp_seq=4ttl=56time=2.77ms^C---baidu.comping统计---4个包发送,4个接收,0%丢包,时间3300msrttmin/avg/max/mdev=2.751/2.785/2.851/0.075ms正在计时的命令:“pingbaidu.com”用户时间(秒):0.00系统时间(秒):0.00此作业获得的CPU百分比:0%经过(挂钟)时间(h:mm:ss或m:ss):0:03.64平均共享文本大小(千字节):0平均非共享数据大小(千字节):0平均堆栈大小(千字节):0平均总大小(千字节):0最大驻留集大小(千字节):2140平均驻留集大小(千字节):0主要(需要I/O)页面错误:0次要(回收框架)页面错误:626自愿上下文切换:10非自愿上下文切换:0交换:0文件系统inputs:0Filesystemoutputs:0Socketmessagessent:0Socketmessagesreceived:0Signalsdelivered:0Pagesize(bytes):4096Exitstatus:0这个结果信息很详细,我们可以得到足够的信息2020年精选阿里/腾讯等一线公司面试、简历、进阶、电子书公众号“良旭Linux”后台免费回复“数据”4.自定义输出格式默认time命令只输出real,usr和系统。如果我们想对其进行个性化设置,我们可以定义它的输出格式,同时也支持时间命令。time命令支持的格式有很多,如下所示:C-使用的名称和命令行参数D-进程非共享数据区的平均大小(以千字节为单位)E-以时钟格式表示的运行时间F-页错误数I-文件系统输入数进程K-进程的平均总内存使用量(以千字节为单位)M-最大驻留设置在生命周期内进程的大小(以千字节为单位)O-进程输出的文件系统数量P-作业接收的CPU百分比R-次要或可恢复页面的数量faultsS-系统在内核模式下使用的CPU总秒数U-用户模式下使用的CPU总秒数W-进程被换出主内存的次数X-进程中共享文本的平均数量Z-系统的页面大小kilobytesc-进程进行上下文切换的次数de-进程使用的实际时间(以秒为单位)sk-传递给进程的信号数p-进程的平均未共享堆栈大小s以千字节为单位r-进程接收到的套接字消息数-进程发送的套接字消息数t-进程的平均驻留集大小,以千字节为单位想要输出如下格式:ElapsedTime=0:01:00,Inputs2,Outputs1我们可以这样自定义:$/usr/bin/time-f"ElapsedTime=%E,Inputs%I,Outputs%O"pingbaidu.comPINGbaidu.com(220.181.38.148)56(84)字节的数据。220.181.38.148):icmp_seq=2ttl=54time=1.86ms^C---baidu.comping统计---发送4包,接收4包,0%丢包,时间3003msrttmin/avg/max/mdev=1.825/1.859/1.879/0.056msElapsedTime=0:03.92,Inputs0,Outputs0如果希望输出有换行符,可以在相应的地方加上\n,例如:$/usr/bin/time-f"ElapsedTime=%E\nInputs%I\nOutputs%O"pingbaidu.com输出结果类似这样:ElapsedTime=0:03.92Inputs0Outputs0你看到的都是真爱,走之前给我点个赞好吗?您的“三通”是良旭继续创作的最大动力!关注原创公众号《良序Linux》,第一时间获取最新Linux干货!公众号后台回复【信息】【面试】【简历】获取精选一线大厂的面试、自我提升、简历等资料关注我的博客:lxlinux.net
