我知道可以向 bash_history 添加时间戳。
到目前为止,我看到的示例始终使用当前系统时间。而我的问题在于:一方面,我喜欢以 UTC 保存日志,因为这样可以更轻松地关联内容。另一方面,我在非 UTC 时区工作,因此我的系统时间未设置为 UTC。
有没有办法将您的系统设置为例如 UTC+1 但仍然使用 UTC 时间记录 bash_history?
好的,根据@meuh 的回答,我找到了一种实现我想要的方法:
- 根据需要设置 HISTTIMEFORMAT。它仅控制格式化(呃!)。我选择:
HISTTIMEFORMAT='%F %T %z '
- 到展示另一个时区的系统上的 UTC 历史记录,设置 TZ 变量仅适用于该命令的 UTC:
$TZ='UTC' history
....
1040 2023-05-27 12:30:02 +0000 cat ~/.bashrc
1041 2023-05-27 12:30:11 +0000 grep -i hist ~/.bashrc
1042 2023-05-27 12:36:21 +0000 TZ='UTC' history
运行历史记录而不设置 TZ,您将获得当前 TZ 中显示的时间(将输出中的数字时区与前一个时区进行比较):
$ history
...
1040 2023-05-27 14:30:02 +0200 cat ~/.bashrc
1041 2023-05-27 14:30:11 +0200 grep -i hist ~/.bashrc
1042 2023-05-27 14:36:21 +0200 TZ='UTC' history
答案1
您根本不需要执行任何操作,因为历史文件中的时间戳始终以自 Unix 纪元以来的秒数保存。只有在打印时,它们才会转换为您所在的时区。您应该能够通过将 的输出与历史date +%s
文件中的数字进行比较来看到这一点(使用 保存到文件中history -w
)。或者使用HISTTIMEFORMAT='%s: '
查看此数字,而不是您当前看到的任何转换后的日期格式。如果您更改时区,数字不会改变,例如:
$ TZ=UTC date +'%s %H:%M'; TZ=CET date +'%s %H:%M'
1684429600 17:06
1684429600 19:06