Linux中獲取系統(tǒng)運(yùn)行時(shí)間的多種方法詳解
在開發(fā) 、測(cè)試和運(yùn)維中,獲取系統(tǒng)運(yùn)行時(shí)間是一個(gè)很重要的參數(shù)指標(biāo),下面是常用的獲取系統(tǒng)時(shí)間的方法,以SKYLAB的SKW3000路由模組的運(yùn)行時(shí)間為例進(jìn)行說(shuō)明:
一.通過(guò)指令獲取
獲取系統(tǒng)運(yùn)行時(shí)間的指令為uptime,具體操作輸出如下:
這個(gè)方法在運(yùn)維中運(yùn)用,方便直觀。但是在開發(fā)過(guò)程中使用此命令獲取系統(tǒng)時(shí)間,需要提取字段中的內(nèi)容,不如通過(guò)其他方式獲取方便,下面是文件獲取的方法。
二.通過(guò)文件獲取
在linux系統(tǒng)中,文件/proc/time包含了系統(tǒng)運(yùn)行總秒數(shù)和空閑時(shí)間,內(nèi)容如下圖所示,前面為系統(tǒng)運(yùn)行時(shí)間,后面為CPU處于空閑的時(shí)間:
[系統(tǒng)運(yùn)行總秒數(shù)]:系統(tǒng)的運(yùn)行時(shí)間信息,以S為單位,精確到小數(shù)點(diǎn),表示系統(tǒng)從開機(jī)到當(dāng)前時(shí)刻所經(jīng)歷的時(shí)長(zhǎng),圖示為:933370.06;
[空閑時(shí)間]:它反映了系統(tǒng)沒(méi)有進(jìn)行任何有效工作,CPU處于空閑等待狀態(tài)的累計(jì)時(shí)長(zhǎng),圖示為:1787850.84。
在開發(fā)中,如日志記錄等,可以通過(guò)讀取文件的方式獲取系統(tǒng)運(yùn)行時(shí)間。下面是兩種通過(guò)文件獲取系統(tǒng)運(yùn)行時(shí)間的方法。
(1)通過(guò)Shell獲取系統(tǒng)時(shí)間的方法
下面是具體的源碼:
#!/bin/sh uptime_seconds=$(cat /proc/uptime | cut -d. -f1) days=$((uptime_seconds / (24 * 60 * 60))) uptime_seconds=$((uptime_seconds % (24 * 60 * 60))) hours=$((uptime_seconds / (60 * 60) uptime_seconds=$((uptime_seconds % (60 * 60))) minutes=$((uptime_seconds / 60)) seconds=$((uptime_seconds % 60)) echo "系統(tǒng)運(yùn)行時(shí)間: $days 天 $hours 小時(shí) $minutes 分鐘 $seconds 秒"
運(yùn)行結(jié)果如下:
(2)下面是通過(guò)C語(yǔ)言獲取系統(tǒng)時(shí)間的方法
具體源碼如下:
#include <stdio.h> #include <stdlib.h> void get_run_time(char *time) { FILE *fp; double uptime_seconds; int days, hours, minutes, seconds; // 打開 /proc/uptime 文件 fp = fopen("/proc/uptime", "r"); if (fp == NULL) { perror("無(wú)法打開 /proc/uptime 文件"); return; } // 讀取系統(tǒng)運(yùn)行的總秒數(shù) fscanf(fp, "%lf", &uptime_seconds); fclose(fp); // 計(jì)算天、時(shí)、分、秒 days = (int)uptime_seconds / (24 * 60 * 60); uptime_seconds = (int)uptime_seconds % (24 * 60 * 60); hours = (int)uptime_seconds / (60 * 60); uptime_seconds = (int)uptime_seconds % (60 * 60); minutes = (int)uptime_seconds / 60; seconds = (int)uptime_seconds % 60; if (days > 0) { sprintf(time, "%dday%dh%dm%ds", days, hours, minutes, seconds); } else if(hours > 0) { sprintf(time, "%dh%dm%ds", hours, minutes, seconds); } else if(minutes > 0) { sprintf(time, "%dm%ds", minutes, seconds); } else { sprintf(time, "%ds", seconds); } } int main(void) { char run_time[32] = {0}; get_run_time(run_time); printf("Time:%s\r\n", run_time); }
運(yùn)行結(jié)果如下:
三.知識(shí)擴(kuò)展
除了上文的方法,小編還為大家整理了一些其他在Linux中查看系統(tǒng)運(yùn)行時(shí)間的方法,希望對(duì)大家有所幫助
在Linux中,查看系統(tǒng)的運(yùn)行時(shí)間(也稱為系統(tǒng)啟動(dòng)時(shí)間)可以通過(guò)多種命令實(shí)現(xiàn)。以下是一些常用的方法:
1. uptime命令
uptime命令提供了一個(gè)快速的概覽,顯示了系統(tǒng)運(yùn)行時(shí)間、當(dāng)前時(shí)間、用戶數(shù)量以及系統(tǒng)的負(fù)載平均值。
uptime
輸出示例:
21:34:02 up 10 days, 2:58, 1 user, load average: 0.00, 0.01, 0.05
這表示系統(tǒng)已經(jīng)運(yùn)行了10天2小時(shí)58分鐘。
2. systemctl命令
在使用systemd的系統(tǒng)上,systemd是初始化系統(tǒng)和服務(wù)的管理器,你可以使用systemctl命令查看系統(tǒng)的運(yùn)行時(shí)間。
systemctl list-timers
這將列出所有的定時(shí)器,包括systemd的啟動(dòng)定時(shí)器。你可以通過(guò)查找boot或start關(guān)鍵字來(lái)確定系統(tǒng)運(yùn)行時(shí)間。
3. 查看/proc/uptime文件
/proc/uptime文件包含了系統(tǒng)運(yùn)行時(shí)間的信息,以秒為單位。
cat /proc/uptime
輸出示例:
887563.92 887563.92
第一列的數(shù)字表示自系統(tǒng)啟動(dòng)以來(lái)的總秒數(shù)。你可以將其轉(zhuǎn)換為更易讀的格式,例如:
echo "scale=2; 887563.92 / 60 / 60 / 24" | bc
4. 查看/var/log中的日志文件
在某些Linux發(fā)行版中,/var/log目錄下的日志文件(如messages、syslog或boot.log)可以提供系統(tǒng)的啟動(dòng)時(shí)間。
grep -i "boot" /var/log/messages
或者,如果你的系統(tǒng)使用的是journalctl:
journalctl --list-boots
5. 使用last命令
last命令顯示了系統(tǒng)的關(guān)機(jī)和啟動(dòng)日志。
last | grep reboot
這將顯示重啟和關(guān)機(jī)的記錄。
注意事項(xiàng)
- 某些命令可能需要超級(jí)用戶權(quán)限才能運(yùn)行。
- 日志文件的位置和名稱可能會(huì)根據(jù)不同的Linux發(fā)行版和配置有所不同。
- 如果日志被旋轉(zhuǎn)或刪除,使用日志文件查看系統(tǒng)運(yùn)行時(shí)間的方法可能不可行。
到此這篇關(guān)于Linux中獲取系統(tǒng)運(yùn)行時(shí)間的多種方法詳解的文章就介紹到這了,更多相關(guān)Linux獲取系統(tǒng)運(yùn)行時(shí)間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux系統(tǒng)下oracle11gR2靜默安裝的經(jīng)驗(yàn)分享
這篇文章主要介紹了linux系統(tǒng)下oracle11gR2靜默安裝的經(jīng)驗(yàn), 所有操作無(wú)需使用圖形界面. 靜默安裝能減少安裝出錯(cuò)的可能性, 也能大大加快安裝速度。有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-01-01安裝Ubuntu和ssh遠(yuǎn)程連接的設(shè)置方式
文章介紹了在Ubuntu操作系統(tǒng)中進(jìn)行遠(yuǎn)程連接配置的方法,具體步驟包括:安裝并配置SSH服務(wù),設(shè)置靜態(tài)IP地址,配置遠(yuǎn)程桌面服務(wù)(VNC或RDP),以及解決root用戶SSH遠(yuǎn)程登錄的問(wèn)題2025-03-03Linux通用java程序啟動(dòng)腳本代碼實(shí)例
這篇文章主要介紹了Linux通用java程序啟動(dòng)腳本代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05在Linux中查看所有正在運(yùn)行的進(jìn)程的方法
這篇文章主要介紹了在Linux中查看所有正在運(yùn)行的進(jìn)程的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07CentOS 6.5中利用yum搭建LNMP環(huán)境的步驟詳解
這篇文章主要給大家介紹了關(guān)于在CentOS 6.5中利用yum搭建LNMP環(huán)境的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12