在出国旅行期间,我会连接到我所在国家的 SSH 服务器。我可以通过以下方式找到我的转机时间:
last user
last | grep user
但这两个命令给我的连接时间是基于我的国家时间,而不是当地时间。如何根据当地时间获取连接时间?
答案1
本地调用date +%Z
,date +%:z
(参见man 1 date
)或另一个命令了解您所在的时区。或者您可能已经知道它是例如Asia/Hong_Kong
。然后在服务器上TZ
调用时进行相应设置last
。例子:
# on server
TZ=Asia/Hong_Kong last
服务器必须知道时区。或者:
# on server
TZ=foo-8 last
# or even
TZ=bar-08:45 last
(此处foo
和bar
是任意 3 个字母的字符串)。
注意有一个怪癖:如果 (local)date +%:z
告诉你+08:00
那么你需要设置TZ=foo-08:00
或TZ=foo-8
。如果它告诉你的-08:00
话TZ=foo+08:00
。
您可以在远程 shell 中设置它,因此它会影响您的整个会话TZ
。export
如果我没看错的话,如果变量位于守护进程 ( ) 的环境中,man 1 ssh
服务器将放入您的环境中。要使用您的TZ
sshd
当地的 TZ
自动地服务器需要配置。 (在测试各种想法之前,请注意您的本地TZ
可能会也可能不会首先设置)。
将本地时区传递到远程端的一种有点麻烦的方法是在命令本身中嵌入变量赋值。示例:
# locally
ssh user@server "TZ='foo$(date +%:z | tr +- -+)' last"
date +%:z | tr +- -+
在本地执行(tr
由于怪癖)。
答案2
登录到您所在国家/地区的服务器后,运行
export TZ=$(tzselect)
并按照提示操作。它会询问您位于哪个大洲,然后是哪个国家/地区,甚至可能询问更详细的信息。最后它会告诉您它正在使用类似 的内容Europe/Madrid
,并且大多数程序使用的时间现在将显示在您的 PC 时间中。
以后登录时您只需使用
export TZ="Europe/Madrid"
以避免问题。如果您要在 ~/.bashrc 中停留任意时间,则可以将此行放在 ~/.bashrc 中。