uptime -s 输出系统启动时间戳(如2026-07-09 14:22:33),在容器中返回容器启动时间;若不支持则 fallback 到 who -b 或 /proc/uptime 换算,避免依赖 systemd 或日志。

uptime -s 直接输出本地时间戳,但容器里显示的是容器启动时间
执行 uptime -s 是最快捷的方式,输出形如 2026-07-09 14:22:33,即系统启动的完整时刻(精确到秒),和当前 date 输出时区一致。它不依赖 systemd,几乎所有现代发行版(Ubuntu、CentOS、Arch、Debian)都支持。
注意:在 Docker 或 Podman 容器中运行该命令,返回的是容器启动时间,不是宿主机开机时间——别误判物理机状态。
- 若报错
invalid option -- 's',说明 uptime 版本太老(如某些 busybox 环境),立刻换用who -b - 部分较新系统支持
uptime -s -u输出 UTC 时间,但非所有发行版兼容,不建议默认依赖 - 脚本中应加容错:
uptime -s 2>/dev/null || who -b | awk '{print $3, $4}'
who -b 兼容性最高,精度到分钟,但 utmp 损坏时会无输出
who -b 读取 /var/run/utmp 中 init 写入的原始记录,不经过任何服务管理器解析,因此在 sysvinit、openrc、WSL 甚至部分嵌入式 Linux 上都稳定可用。输出固定为 system boot YYYY-MM-DD HH:MM。
它的启动时间比 systemctl status 中的 Since: 更底层,通常只比内核初始化完成早 1–2 秒,且不受 userspace 延迟影响。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 普通用户可直接运行,无需 sudo
- 如果执行后无任何输出,大概率是
/var/run/utmp被清空或权限异常,此时必须 fallback 到last reboot | head -n 1 - 输出不含秒,对日常运维足够;若需秒级精度,优先用
uptime -s或/proc/uptime换算
/proc/uptime 换算适合脚本,但低权限环境可能 Permission denied
/proc/uptime 第一列是浮点秒数(如 123456.78),代表内核视角的真实运行时长。用它配合 date 反推开机时间最可控,尤其适合监控脚本或日志前缀生成。
推荐写法:date -d "@$(($(date +%s) - $(awk '{print int($1)}' /proc/uptime))" "+%Y-%m-%d %H:%M:%S"。这里用 int($1) 截断小数,避免 shell 整数运算出错;不用 bc 或浮点减法,防止精度丢失导致偏移 1 秒。
- 该方法不受 NTP 时间调整干扰,反映的是内核真实启动时刻
- 在 WSL、某些容器或 SELinux 严格策略下,
/proc/uptime可能返回Permission denied,需提前判断:if [ -r /proc/uptime ]; then ... fi - 别用
systemctl show --property=UserspaceTimestamp替代——它常为空,且只表示 userspace 初始化完成点
last reboot 和 journalctl --list-boots 不适合查“当前”开机时间
last reboot | head -n 1 和 journalctl --list-boots 都是用来回溯历史的,不是为“当前启动时间”设计的快速查询工具。
last reboot 依赖 /var/log/wtmp,若该文件被轮转或清空,就查不到最近一次重启;journalctl --list-boots 仅适用于 systemd 系统,且输出格式需解析(如 -0 表示当前启动),不如 uptime -s 或 who -b 直观可靠。
- 排查异常重启、确认是否发生过 crash 或强制断电时,这两个命令不可替代
- 但日常只需知道“现在是什么时候开的机”,它们属于过度操作,响应慢、依赖日志留存、还可能因权限问题失败
- 真正容易被忽略的是:
uptime默认输出里的up X days, Y:Z是运行时长,不是时间点——有人会拿当前时间去减它,结果受夏令时或 NTP 调整影响,产生误差










