Linux查看系统启动时间及运行时间 uptime命令详解
Linux系统启动时间:三种可靠查询方法与一个常见误区

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
在排查故障、分析性能或者单纯想知道服务器“活了多久”时,系统启动时间是个关键信息。但你知道吗?不同命令给出的结果,背后代表的意义可能截然不同。直接说结论:追求最快,用 uptime -s;追求最可靠,用 who -b;而默认的 uptime 命令,其实只告诉你运行了多久,不包含具体的启动日期。
最可靠的是 who -b,输出 system boot YYYY-MM-DD HH:MM,精度到分钟,兼容性好;uptime -s 最快但仅新系统支持;/proc/uptime 配合 date 可脚本化推算,但需注意时区与时间校正影响。
uptime -s:最直接,但有系统版本门槛
如果你的系统比较新(比如 Ubuntu 20.04、CentOS 8 或者 Debian 11 之后的版本),那么 uptime -s 无疑是最省心的选择。敲下命令,它直接返回一个完整的启动时间戳:
uptime -s
输出格式类似 2026-04-05 08:23:17,一目了然。不过,这个方法有个硬伤:老系统不认这个选项。在一些旧的发行版(比如经典的 CentOS 6)或者极度精简的嵌入式环境里,你可能会看到 uptime: invalid option -- 's' 这样的报错。这时候,它没法自动回退到其他方法,你得手动换条路走。
这里有个常见的操作误区:看到 uptime 输出里写着 up 6 days, 12:45,就手动去推算具体的启动日期和时间。这种做法在跨越多天,或者系统经历过时区调整、夏令时甚至时间跳变时,很容易产生误差,并不靠谱。
who -b:轻量且兼容性广的“老将”
当 uptime -s 行不通时,who -b 往往是更稳妥的选择。这个命令读取的是 /var/run/utmp 文件,这个文件由内核在启动流程完成时写入,可以把它理解为系统启动时盖下的一个“时间戳”。
who -b
它的输出格式非常固定:system boot YYYY-MM-DD HH:MM,精确到分钟。最大的优点在于,它几乎不依赖用户空间的时间服务(比如 systemd-timesyncd 或 ntpd),因此受后期时间调整的影响较小,而且通常不需要 root 权限就能执行。
当然,它也有自己的适用边界:
- 如果命令输出为空,或者报错
cannot open /var/run/utmp,那通常意味着 utmp 文件损坏了,或者被有意清理过——这在一些追求极简的容器镜像或无状态系统中可能发生。 - 这个时间点记录的是 init 进程启动完成的时刻,比内核真正启动要晚几十毫秒,但对于绝大多数运维场景来说,这个精度已经足够了。
- 在一些没有 utmp 支持的最小化系统(比如某些 Alpine Linux 容器)里,这个命令会失效,这时就得考虑下一种方案。
/proc/uptime + date:脚本编写的首选,但细节决定成败
对于需要嵌入脚本、实现自动化查询的场景,/proc/uptime 配合 date 命令是经典组合。/proc/uptime 文件的第一列记录了系统自启动以来经过的秒数(浮点数,包含小数),这是内核维护的最原始、最精确的计时源。
awk '{print int($1)}' /proc/uptime
要用它反推启动时间,核心思路是用当前时间戳减去运行时长。一个推荐的写法是:
date -d "@$(($(date +%s) - $(awk '{print int($1)}' /proc/uptime)))" "+%Y-%m-%d %H:%M:%S"
这个方法虽然强大,但有几个“坑”需要留意:
- 命令中的
$(date +%s)获取的是本地时区对应的 Unix 时间戳,而/proc/uptime是纯粹的秒数,因此最终结果会自动适配本地时区,一般无需额外进行 UTC 转换。 - 要避免一种看似聪明的写法:
date -d "$(cat /proc/uptime | awk '{print $1}') seconds ago"。直接把浮点秒数传给date命令解析,当小数部分不为零时,很可能引发解析错误。 - 这个方法的前提是系统时间在启动后没有被大幅度手动校正过。如果期间执行过
date -s或timedatectl set-time这类操作,推算结果就会出现偏差。
小心误区:systemctl status 显示的时间,并非内核启动时刻
在使用了 systemd 的系统上,执行 systemctl status 后,你会在开头看到一行 Since::
Since: Sat 2026-04-05 08:23:42 CST; 6 days ago
这个时间看起来很直观,但它记录的是“用户空间初始化完成、第一个服务启动的时刻”,其数据来自 systemd 的 UserspaceTimestamp。通常,这比内核启动完成要晚 1 到 3 秒。
所以,在依赖这个信息时得明白:
- 它只在 systemd 系统中存在,对于使用 SysVinit 或 OpenRC 的发行版无效。
- 如果 systemd 启动失败并进入了救援模式(rescue mode),那么
Since:显示的很可能是救援模式的启动时间,而非真正的正常开机时间。 - 它的输出格式受系统语言环境(locale)影响。在中文系统里,你用
grep "Since:"可能抓不到这行,因为它显示的是“自:”。更稳妥的获取方式是:systemctl show --property=UserspaceTimestamp --value。
说到底,这里涉及三个有细微差别的时间点:内核启动完成、init 进程开始运行、用户空间服务准备就绪。它们之间存在着毫秒到秒级的间隔。对于日常运维中“机器什么时候开的”这类问题,who -b 给出的答案已经足够可靠。只有当需要进行深度的性能剖析或故障定界时,才有必要去仔细区分这三者的差异。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Linux如何查看进程占用的物理内存 区分RSS与VSS
Linux如何查看进程占用的物理内存 区分RSS与VSS 在Linux系统里排查内存问题时,一个核心动作就是查看进程到底占用了多少物理内存。但这事儿吧,工具不少,概念也多,稍不留神就可能看错数字、误解含义。今天咱们就来理清几个关键工具和概念,特别是如何准确查看RSS,以及它和VSS到底有什么区别。
Linux怎么安装Jenkins并配置Java环境 Linux自动化部署实战详解
Linux怎么安装Jenkins并配置Ja va环境 Linux自动化部署实战详解 在CentOS 8或者Rocky Linux 8上部署Jenkins,第一步往往就决定了成败:ja va -version的输出必须是1 8,也就是JDK 8。如果版本不对,Jenkins要么启动失败,要么Web界面
Linux查看系统启动时间及运行时间 uptime命令详解
Linux系统启动时间:三种可靠查询方法与一个常见误区 在排查故障、分析性能或者单纯想知道服务器“活了多久”时,系统启动时间是个关键信息。但你知道吗?不同命令给出的结果,背后代表的意义可能截然不同。直接说结论:追求最快,用 uptime -s;追求最可靠,用 who -b;而默认的 uptime 命
如何解决 Win11 系统由于系统盘爆满导致的启动黑屏 紧急清理 C 盘方案
如何解决 Win11 系统由于系统盘爆满导致的启动黑屏 紧急清理 C 盘方案 如果你的 Windows 11 开机后直接黑屏,而之前又明显感觉到 C 盘已经“飘红”甚至完全塞满,那问题很可能就出在这里。系统关键文件没地方写、虚拟内存加载失败,或者引导程序运行异常,都会导致启动过程直接中断。别慌,下面
Linux如何通过命令行发送电子邮件 mailx配置【教程】
Linux命令行邮件发送:告别静默失败,搞定mailx的SMTP配置 很多朋友在Linux服务器上尝试用mail命令发邮件时,都遇到过同一个“幽灵”问题:命令执行了,没有报错,但邮件就是石沉大海,收件箱里永远等不到。问题根源其实很明确:直接使用mail命令向QQ、Gmail、163等外部邮箱发送,几
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

