uptime是最直接可靠的方式,“up x days, y min”即系统连续运行时间,不依赖systemd、无需root权限、内核级统计;关键信息在“up”后,如“up 12 days, 5:23”表示已运行12天5小时23分钟。

uptime 是最直接、最可靠的方式,它输出的 “up X days, Y min” 就是系统当前连续运行时间,不依赖 systemd、不需 root 权限、内核级统计,结果可信。
怎么看 uptime 输出里真正有用的那部分
执行 uptime 后,关键信息就在 “up” 后面:
03:40:12 up 12 days, 5:23, 1 user, load average: 0.01, 0.02, 0.05
这里 “up 12 days, 5:23” 表示已连续运行 12 天 5 小时 23 分钟。注意:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 开头的
03:40:12是当前时刻,不是开机时间 -
load average和运行时间完全无关,别混淆 - 如果只想要纯时长(比如脚本里用),加
-p参数:uptime -p→ 输出up 12 days, 5 hours, 23 minutes
要精确到秒级开机时间,用 uptime -s 或 who -b
需要知道“具体哪天几点开机”,优先选这两个命令:
-
uptime -s输出本地时间戳,如2026-09-09 22:17:08,精度到秒,所有主流发行版都支持 -
who -b输出system boot 2026-09-09 22:17,精度到分钟,但更底层(读/var/run/utmp),WSL 和 OpenRC 系统也能用 - 两者差值在 0–60 秒属正常;若
who -b输出为空,说明utmp损坏或权限异常,此时 fallback 到uptime -s
写脚本时怎么安全读取秒数并换算
/proc/uptime 第一列是浮点数,表示自启动以来的总秒数(含小数),例如 1042856.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 "Since:" 得到的时间,是 systemd 用户空间就绪时刻,比内核启动晚 2–10 秒:
- 它不能反映 kernel panic 后自动重启的情况
- 在非 systemd 系统(如 Alpine + OpenRC)中完全不可用
- 如果你关心的是“硬件通电后跑了多久”,这个值会低估;只关心服务可用起始点时,它才有参考价值
真实场景里,uptime -s 和 who -b 覆盖了 90% 的需求;只有写监控脚本或排查休眠偏差时,才需要碰 /proc/uptime 的小数点。










