uptime是最直接可靠的系统运行时间查询方式,输出“up X days, Y min”表示连续运行时长,不依赖systemd、无需root权限、内核级统计;精确开机时间用uptime -s(秒级)或who -b(分钟级),/proc/uptime提供秒级浮点数但不扣休眠时间。

uptime 是最直接、最可靠的方式,它输出的 “up X days, Y min” 就是系统当前连续运行时间,不依赖 systemd、不需 root 权限、内核级统计,结果可信。
怎么看 uptime 输出里真正有用的那部分
执行 uptime 后,关键信息就在 “up” 后面:21:55:12 up 3 days, 4:27, 2 users, load average: 0.15, 0.10, 0.05
这里 up 3 days, 4:27 表示已连续运行 3 天 4 小时 27 分钟。
常见错误是把开头的 21:55:12 当成开机时间——那是当前时刻,不是启动时刻。load average 和运行时间完全无关,别混淆。
要精确到秒?用 uptime -s 或 who -b
需要知道“具体哪天几点开机”,优先用这两个命令:
• uptime -s 输出本地时间戳,如 2026-06-15 14:43:17,精度到秒,所有主流发行版都支持
• who -b 输出 system boot 2026-06-15 14:43,精度到分钟,但更底层(读 /var/run/utmp),不受 init 延迟影响,WSL 和 OpenRC 系统也能用
两者差值在 0–60 秒属正常;若 who -b 输出为空,说明 utmp 损坏或权限异常,此时 fallback 到 uptime -s
写脚本或需要高精度?读 /proc/uptime
/proc/uptime 第一列是浮点数,表示自启动以来的总秒数(含小数),例如 274856.33。
注意:
• 这个值不扣除休眠时间,频繁 suspend 的机器会明显偏大
• 容器中运行时,它反映的是宿主机 uptime,不是容器本身启动时间
脚本里建议先截断小数:awk '{print int($1)}' /proc/uptime
再换算成可读格式:awk '{d=int($1/86400); h=int($1%86400/3600); m=int($1%3600/60); printf "%dd %dh %dm\n", d, h, m}' /proc/uptime
别用 systemctl status 查“总共运行了多久”
执行 systemctl status | grep "Started:" 得到的时间,是 systemd 用户空间就绪时刻,比内核启动晚 2–10 秒。
它不能反映 kernel panic 后自动重启的情况
在非 systemd 系统(如 Alpine + OpenRC)中完全不可用
如果你只关心“硬件通电后跑了多久”,这个值会低估;若你只关心服务可用起始点,它才有参考价值
真实场景里,uptime -s 和 who -b 覆盖了 90% 的需求;只有写监控脚本或排查休眠偏差时,才需要碰 /proc/uptime 的小数点。
date 根本不提供运行时长——这些细节一旦忽略,查出来的“运行了多久”就只是看起来像而已。


















