当不使用 UTC 作为系统时间时,使用 UTC 时间戳登录 bash_history

当不使用 UTC 作为系统时间时,使用 UTC 时间戳登录 bash_history

我知道可以向 bash_history 添加时间戳。

到目前为止,我看到的示例始终使用当前系统时间。而我的问题在于:一方面,我喜欢以 UTC 保存日志,因为这样可以更轻松地关联内容。另一方面,我在非 UTC 时区工作,因此我的系统时间未设置为 UTC。

有没有办法将您的系统设置为例如 UTC+1 但仍然使用 UTC 时间记录 bash_history?


好的,根据@meuh 的回答,我找到了一种实现我想要的方法:

  1. 根据需要设置 HISTTIMEFORMAT。它仅控制格式化(呃!)。我选择:HISTTIMEFORMAT='%F %T %z '
  2. 展示另一个时区的系统上的 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

相关内容