可通过uptime、who -r、/proc/uptime、journalctl和日志文件五种方法获取linux系统启动时间:uptime显示运行时长并可推算启动时间;who -r显示进入当前运行级的时间;/proc/uptime结合date反推精确到秒的启动时刻;journalctl -b首条内核日志时间最接近真实启动瞬间;boot.log或syslog中早期条目可作辅助参考。

如果您需要了解Linux系统自上次启动以来已经运行了多长时间,或者想确认当前系统是否经历过重启,可以通过内置命令快速获取系统启动时间信息。以下是几种常用且可靠的方法:
一、使用uptime命令查看系统运行时长与启动时间
uptime命令默认显示系统已连续运行的时间、当前登录用户数以及系统平均负载。从其输出中可推算出大致启动时间,部分版本(如较新systemd系统)还支持直接显示启动时间戳。
1、在终端中输入uptime并回车执行。
2、观察输出中类似“up 5 days, 3:24”的字段,表示系统已运行5天3小时24分钟。
3、若系统支持,可配合-t参数(如uptime -t)尝试显示精确启动时间;若不支持该参数,则需结合其他命令进一步确认。
4、对于使用systemd的发行版,可运行systemctl show --property=UserspaceTimestamp --value获取更精确的用户空间启动时间戳。
二、使用who命令配合-r选项查看运行级别与启动时间
who命令的-r选项用于显示当前运行级别及系统进入该级别的起始时间,该时间通常与内核初始化完成、系统进入多用户模式的时间一致,可作为系统实际可用启动时间的参考。
1、在终端中输入who -r并回车执行。
2、查看输出中“run-level”后跟随的时间字段,例如“2024-05-12 08:47”,即为系统进入当前运行级别的时刻。
3、注意该时间反映的是init进程切换至目标运行级的时间点,并非内核加载完成的精确毫秒级时间,但对日常运维已足够准确。
三、读取/proc/uptime文件并结合系统启动时刻计算
/proc/uptime文件第一列记录了系统自启动以来的总秒数(浮点数),结合当前系统时间反推,即可得出精确到秒的启动时间。
1、运行cat /proc/uptime获取运行总秒数,例如输出“432189.12 1234567.89”,取第一个数值432189.12。
2、运行date +%s获取当前时间的Unix时间戳(秒数)。
3、用当前时间戳减去/proc/uptime中的第一列数值,再将结果传入date命令转换:例如date -d @$(echo $(date +%s) - $(awk '{print int($1)}' /proc/uptime) | bc)。
4、输出结果即为系统启动的本地时间,精度可达秒级,适用于需要严格时间审计的场景。
四、使用journalctl查询内核启动日志时间
systemd日志服务会记录内核启动阶段的详细事件,通过筛选最早的一条内核消息时间,可定位系统启动的起始时刻。
1、执行journalctl --no-pager -b -o short-iso | head -n 1,其中-b表示当前启动会话,-o short-iso输出ISO格式时间。
2、查看输出首行的时间字段,例如“2024-05-12T08:46:52.123456+0800”,即为内核初始化第一条日志的时间。
3、该时间紧随内核解压与初始化之后,是目前最接近真实启动瞬间的可查时间点。
五、检查/var/log/boot.log或/var/log/syslog中的早期日志条目
部分传统SysV init或未启用journald的系统会将启动过程日志写入固定文件,从中提取最早时间戳亦可还原启动时刻。
1、确认日志文件存在:运行ls -l /var/log/boot.log /var/log/syslog 2>/dev/null。
2、若boot.log存在且非空,执行head -n 5 /var/log/boot.log | grep -E '^[A-Za-z]{3} [0-9]{1,2} [0-9]{2}:[0-9]{2}:[0-9]{2}'提取开头时间行。
3、若boot.log不存在但syslog存在,运行grep 'Starting kernel' /var/log/syslog 2>/dev/null | head -n 1或查找包含“runlevel”、“starting services”的最早条目。
4、所获时间可能因日志轮转而丢失早期记录,仅适用于未启用systemd或日志未被清除的系统。










