如何查看 Linux 系统重启日期和时间

举报
Tiamo_T 发表于 2022/05/18 07:26:49 2022/05/18
【摘要】 通过 uptime 命令,我知道系统启动并运行了多少天和多少小时。是否有一种简单的方法可以查看系统上次重新启动的确切日期和时间?即系统从什么日期和时间开始运行?

通过 uptime 命令,我知道系统启动并运行了多少天和多少小时。是否有一种简单的方法可以查看系统上次重新启动的确切日期和时间?即系统从什么日期和时间开始运行?

正常运行时间确实间接提供了此信息。在以下示例中,它表示系统已启动并运行了“137 天 6 小时 13 分钟”。但是,您无法从中快速计算出确切的重启日期和时间。

$ uptime
 20:52:01 up 137 days,  6:13,  1 user,  load average: 0.00, 0.00, 0.00

与其说系统在过去的“137 天 6 小时 13 分钟”内已经启动并运行,不如说系统自“5 月 14 日星期六 20:38”以来一直在运行(或类似的东西)那)?这正是以下三种方法中的任何一种方法所做的。

1. 最后一条命令

使用“上次重启”命令,该命令将显示系统之前所有重启的日期和时间。这会从 /var/log/wtmp 文件中挑选信息。

$ last reboot
reboot   system boot  2.6.32-100.28.5. Sat May 14 20:38 - 23:55 (137+06:16)
reboot   system boot  2.6.32-100.28.5. Sun Apr 24 21:28 - 23:37 (15+09:08)  

wtmp begins Thu Sun 24 17:28:47 2011

2.谁指挥

使用显示上次系统重新启动日期和时间的“who -b”命令。

$ who -b
system boot  2011-05-14 20:38

3.使用perl代码片段

如果您坚持使用 uptime 输出来计算上次重启时间,您可以手动执行,或使用以下 perl 代码片段。

uptime | \
perl -ne '/.*up +(?:(\d+) days?,? +)?(\d+):(\d+),.*/; $total=((($1*24+$2)*60+$3)*60);
$now=time(); $now-=$total; $now=localtime($now); print $now,"\n";'

在此示例中,上述代码片段显示以下输出:

Sat May 14 20:38:39 2011

我不记得我是从哪里得到上面的 perl 代码片段的。但是,这并没有阻止我试图弄清楚它的作用。让我们借此机会学习一点perl。这就是上面的 perl 代码片段所做的:


  • -n 是perl 命令行选项。使 perl 程序循环输入
  • -e 是 perl 命令行选项。表示它是一个 perl 单行器(即 perl 不会期望一个文件名,例如“perl filename.pl”)。

以下是使用的正则表达式及其解释:

  • .*up + - 匹配字符串“up”和一个或多个空格之前的任何内容,以匹配正常运行时间输出中的以下内容。
  • (?:(\d+) days?,? +) – 单组
  • (?:(\d+) 天?,? +)? – 该组后面的问号表示该组是可选的

这部分说,如果正常运行时间输出中有天数部分,则捕获它或忽略它。下面详细分解上述组。

  • (?:pattern) – 用于分组的非捕获括号,但不捕获匹配到内存的 $1、$2 等。
  • (\d+) - 匹配一个或多个数字并将其放入 $1(因为这是第一组)
  • 太空日?– 匹配文字空间,后跟天或天
  • ,?– 逗号是可选的
  • SPACE+ – 一个或多个空格

下面分解了这个模式 (\d+):(\d+),.*/

  • (\d+) – 将小时部分转换为 $2
  • : – 后跟冒号
  • (\d+) – 将分钟部分捕获为 $3
  • , – 匹配逗号
  • .* - 匹配其他所有内容

以下是上述 perl 代码片段中剩余的时间函数。

  • $total=((($1*24+$2)*60+$3)*60) – 计算系统 UP 的总秒数。即 (((days*24+hours)*60+minutes)*60 给出秒数(就像一个纪元计算)
  • $现在=时间();- 以秒为单位获取当前时间(纪元时间)
  • $now-=$total; – 从当前时间减去总系统运行时间。所以这是系统启动时的确切时间(以秒为单位)
  • $now=本地时间($now); – 转换纪元时间(以秒为单位的时间)。localtime 以人类可读的格式返回给定的纪元时间
  • print $now,”\n” – 最后,打印时间。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。