发布于2026-08-21 阅读(0)
扫一扫,手机访问
测命令耗时应区分实时测量与历史查询:实时用 /usr/bin/time -p,历史查执行时刻用 HISTTIMEFORMAT,二者工具和目的不同。

直接用 time 测不准,得看你是想测「刚跑完这条命令花了多久」,还是查「历史里某次执行是什么时候、用了多久」——两者完全不是一回事,工具和方法都不同。
/usr/bin/time -p 测当前命令真实耗时shell 内置的 time 只输出 real/user/sys 三行,且在管道、重定向或含 exec 的脚本里容易失真。真正靠谱的是 GNU 版本:
/usr/bin/time -p ls -l,否则默认调用的是 shell 内建版本-p 输出秒级数值(如 real 0.008),方便脚本解析;不加则带单位(real 0m0.008s)/usr/bin/time -v curl -s http://example.comtime { cmd; },改用 /usr/bin/time bash -c 'cmd'real 是从命令被 shell 接收开始计时,不是从网络响应或磁盘写入完成算起;若只关心网络部分,得把重定向剥离出来单独测HISTTIMEFORMAT 查历史命令的执行时刻它只记录「你敲下回车那一刻」的时间戳,不记录执行完成时间,也不记录耗时——所以它不能告诉你某次 ls 跑了多久,只能告诉你它大概几点被敲出来的。
export HISTTIMEFORMAT="%F %T "(末尾空格不能少,否则时间与命令粘连)~/.bashrc,再运行 source ~/.bashrcHISTTIMEFORMAT 值写入 ~/.bash_historyhistory 输出的是内存缓冲区内容,~/.bash_history 文件只在 shell 退出时才更新;如需立刻落盘,手动执行 history -whistory 里不是所有命令都会被记录,常见漏掉原因有三个:
HISTCONTROL 包含 ignorespace(bash 默认行为),比如 echo secret 不会进历史HISTSIZE 设得太小(如 0 或 10),导致缓冲区被清空或截断cd、export),某些 shell 配置下可能不记录要是你在 history 的输出里搜索 grep "ls" 想找到某一次具体的执行,那基本就是白费功夫——同一条命令会反复出现,必须结合时间字段才能缩小范围。可要是你用 time 测出来 real 远大于 user + sys,这就说明瓶颈不在CPU,极有可能是卡在I/O、锁、网络或者调度上了,这时就该换 strace -c 或者 perf 继续深入挖掘了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9