在国外旅行期间,我将连接到我的祖国的SSH服务器。我可以通过以下方式找到我的连接时间:
last user
last | grep user但这两个命令给我的连接时间是基于我的国家时间,而不是当地时间。如何获得基于本地时间的连接时间?
发布于 2020-02-20 22:48:42
本地调用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个字母字符串)。
注意,有怪癖:如果(本地) date +%:z告诉您+08:00,那么您需要设置TZ=foo-08:00或TZ=foo-8。如果它告诉你-08:00,那么TZ=foo+08:00。
您可以在远程shell中设置TZ和export,因此它会影响整个会话。
如果我正确地读取了man 1 ssh,如果变量位于守护进程(sshd)的环境中,服务器将在您的环境中放置TZ。若要自动使用本地TZ,请执行服务器需要配置。(在测试各种想法之前,请注意,您的本地TZ最初可能被设置,也可能没有设置)。
将本地时区传递到远程端的一种有点麻烦的方法是在命令本身中嵌入变量赋值。示例:
# locally
ssh user@server "TZ='foo$(date +%:z | tr +- -+)' last"date +%:z | tr +- -+是在本地执行的(tr是因为这种怪癖)。
发布于 2020-02-20 22:52:56
登录到本国的服务器后,请运行
export TZ=$(tzselect)跟着提示走。它会问你你在哪个大陆,然后哪个国家,甚至更详细的细节。最终,它会告诉你,它正在使用类似于Europe/Madrid的东西,而大多数程序所使用的时间现在将显示在您的PC时间中。
在以后的登录中,您只需使用
export TZ="Europe/Madrid"以避免提问。您可以将这一行放在您的~/..bashrc中,如果您要在那里停留任何时间的话。
https://unix.stackexchange.com/questions/568794
复制相似问题