商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > Linux怎么查看某个命令的执行消耗时间

Linux怎么查看某个命令的执行消耗时间

  发布于2026-08-21 阅读(0)

扫一扫,手机访问

测命令耗时应区分实时测量与历史查询:实时用 /usr/bin/time -p,历史查执行时刻用 HISTTIMEFORMAT,二者工具和目的不同。

Linux怎么查看某个命令的执行消耗时间

直接用 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
  • 想看内存、I/O、上下文切换等深度指标,换 /usr/bin/time -v curl -s http://example.com
  • 避免子 shell 污染计时:别写 time { cmd; },改用 /usr/bin/time bash -c 'cmd'
  • 注意:real 是从命令被 shell 接收开始计时,不是从网络响应或磁盘写入完成算起;若只关心网络部分,得把重定向剥离出来单独测

HISTTIMEFORMAT 查历史命令的执行时刻

它只记录「你敲下回车那一刻」的时间戳,不记录执行完成时间,也不记录耗时——所以它不能告诉你某次 ls 跑了多久,只能告诉你它大概几点被敲出来的。

  • 临时启用:export HISTTIMEFORMAT="%F %T "(末尾空格不能少,否则时间与命令粘连)
  • 永久生效:追加到 ~/.bashrc,再运行 source ~/.bashrc
  • 旧命令不会补时间——设置前的历史仍无时间戳;新命令的时间格式严格按当前 HISTTIMEFORMAT 值写入 ~/.bash_history
  • history 输出的是内存缓冲区内容,~/.bash_history 文件只在 shell 退出时才更新;如需立刻落盘,手动执行 history -w

为什么有些命令根本不出现在 history

不是所有命令都会被记录,常见漏掉原因有三个:

  • 命令前加了空格,且 HISTCONTROL 包含 ignorespace(bash 默认行为),比如 echo secret 不会进历史
  • HISTSIZE 设得太小(如 0 或 10),导致缓冲区被清空或截断
  • 命令本身是 shell 内置(如 cdexport),某些 shell 配置下可能不记录

查不到耗时?先确认你在查什么

要是你在 history 的输出里搜索 grep "ls" 想找到某一次具体的执行,那基本就是白费功夫——同一条命令会反复出现,必须结合时间字段才能缩小范围。可要是你用 time 测出来 real 远大于 user + sys,这就说明瓶颈不在CPU,极有可能是卡在I/O、锁、网络或者调度上了,这时就该换 strace -c 或者 perf 继续深入挖掘了。

本文转载于:https://www.php.cn/faq/3024250.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注