查刚执行完命令耗时用 time,查历史命令执行时间用 HISTTIMEFORMAT;time 默认内建版本不准,需用 /usr/bin/time -p 或 -v 获取精确指标;HISTTIMEFORMAT 仅记录命令输入时刻,需手动配置并重载生效。

Linux 查命令执行时间分两种场景:查**刚执行完的命令耗时**,用 time;查**过去某条历史命令是什么时候执行的**,靠 HISTTIMEFORMAT 记录时间戳。两者机制完全不同,混用会查不到想要的信息。
用 time 测当前命令真实耗时
直接在命令前加 time 最快,但默认调用的是 shell 内建版本,输出简陋且不准——尤其在管道、重定向或含 exec 的脚本里。
- 想看 user/sys/real 三段式结果,必须用完整路径:
/usr/bin/time -p your_command - 要查内存、I/O、页错误等深度指标,加
-v:/usr/bin/time -v curl -s http://example.com > /dev/null - 避免子 shell 开销污染计时:别写
time { cmd; },改用/usr/bin/time bash -c 'cmd' - 注意:
time计的是“命令被 shell 接收并启动”的时刻,不是网络响应或磁盘写入完成时刻;若只关心网络部分,得把重定向剥离出来单独测
让 history 显示每条命令的执行时间
HISTTIMEFORMAT 是唯一能让 history 带时间戳的开关,但它不记录“执行完成时间”,只记“命令敲下回车那一刻”的系统时间。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 临时启用:
export HISTTIMEFORMAT="%F %T "(末尾空格不能少,否则时间与命令粘连) - 永久生效:追加到
~/.bashrc,再运行source ~/.bashrc - 旧命令不会补时间——设置前的历史仍无时间戳;新命令的时间格式严格按当前
HISTTIMEFORMAT值写入~/.bash_history,改格式后重读文件,旧记录也不会自动转换 -
history输出的是内存缓冲区内容,~/.bash_history文件只在 shell 退出时才更新;如需立刻落盘,手动执行history -w
从历史中筛选某天/某时段执行的命令
时间一旦带上,就能用文本工具快速过滤,但要注意匹配逻辑:
- 查今天所有命令:
history | grep "$(date +%F)" - 查 10:30 左右的命令:
history | grep "10:30"(注意history输出行首是编号,时间在第二列) - 精确到秒级范围?先导出:
history > hist.log,再用awk '$2 ~ /^2026-06-15/ && $3 >= "10:30:00" && $3 - 别指望
grep "ls"能定位到某次具体执行——同一条命令可能反复出现,必须结合时间字段缩小范围
为什么有些命令根本不出现在 history 里
不是所有命令都会被记录,常见漏掉原因有三个:
- 命令前加了空格,且
HISTCONTROL包含ignorespace(bash 默认行为),比如echo secret不会进历史 -
HISTSIZE设得太小(如0或10),导致缓冲区被清空或截断 - 非交互式 shell(如脚本中调用的
bash -c "cmd")默认不加载~/.bashrc,HISTTIMEFORMAT不生效;此时需显式export HISTTIMEFORMAT或用bash -i -c "cmd"
真正容易被忽略的一点是:时间戳和命令记录都只发生在交互式 shell 中;自动化任务、crontab、systemd service 里的命令,除非你主动配置环境变量并启用历史记录,否则它们永远不会出现在你的 history 里。

















