uptime是最直接可靠的方式,输出“up X days, Y min”即系统当前连续运行时间,不依赖systemd、无需root权限、内核级统计;uptime -p输出可读字符串,uptime -s或who -b查开机时刻,/proc/uptime提供秒数但含休眠偏差。

uptime 是最直接、最可靠的方式,它输出的 “up X days, Y min” 就是系统当前连续运行时间,不依赖 systemd、不需 root 权限、内核级统计,结果可信。
用 uptime 快速扫一眼运行时长
执行 uptime 后,关键信息就在 “up” 后面:
23:01:45 up 7 days, 12:34, 2 users, load average: 0.18, 0.12, 0.09
这里 “up 7 days, 12:34” 表示已连续运行 7 天 12 小时 34 分钟。
- 开头的
23:01:45是当前时刻,不是开机时间,别混淆 -
load average和运行时间完全无关,只是负载指标 - 如果只要纯时间字符串(比如脚本里用),加
-p:uptime -p→ “up 7 days, 12 hours, 34 minutes”
查精确开机时刻:优先用 uptime -s 或 who -b
需要知道“具体哪天几点开机”,这两个命令覆盖 90% 场景:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
uptime -s输出本地时间戳,如2026-09-25 10:27:11,精度到秒,所有主流发行版都支持 -
who -b输出system boot 2026-09-25 10:27,精度到分钟,但更底层(读/var/run/utmp),WSL 和 OpenRC 系统也能用 - 两者差值在 0–60 秒属正常;若
who -b输出为空,说明utmp损坏或权限异常,此时 fallback 到uptime -s
脚本里要秒数?读 /proc/uptime,但注意休眠偏差
/proc/uptime 第一列是浮点数,表示自启动以来的总秒数(含小数),例如 623456.78。
- 这个值不扣除休眠时间,频繁
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)中完全不可用
- 如果你只关心服务可用起始点,它才有参考价值;但查“系统持续运行多久”,它会低估
真正容易被忽略的是休眠影响——/proc/uptime 看似最“精确”,但对笔记本或经常 suspend 的服务器,它给出的秒数 ≠ 实际在线时长。这时候得结合 uptime -s 和日志里的 systemd-logind suspend/resume 记录交叉判断。










