|
|
楼主 |
发表于 2018-9-29 13:31:55
|
显示全部楼层
1.uptime命令6 Y C. e1 K6 S- h0 b9 d: p7 m8 Q8 u, c
输出:16:11:40 up 59 days, 4:21, 2 users, load average: 0.00, 0.01, 0.00
6 Z+ {" I8 u- G b$ Z! @
2 {6 d( o; B! T1 v2 J$ D5 p3 J& z4 d @; U2 }' G5 |
2.查看/proc/uptime文件计算系统启动时间! Y) w1 f" B4 f- z8 |# \
cat /proc/uptime6 e6 _7 e* h! c
输出: 5113396.94 575949.85# L* _4 f3 A3 G9 \' c9 j& E
第一数字即是系统已运行的时间5113396.94 秒,运用系统工具date即可算出系统启动时间+ J. Q) n1 M! Z/ G' S# ]+ r
' V+ ~+ }: ~2 b" G- p9 r2 `
代码:
! u: ^ j0 @' z4 H6 m% W6 ^[root@localhost ~]# date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"
2 h3 Y2 U9 a- P$ W2017-10-27 14:32:35
5 G$ v- B" r; x: U3.查看/proc/uptime文件计算系统运行时间- p- e8 C6 E9 w* q
# F w4 G3 d- a% \代码: 7 p* J# h1 _3 Z( z# w3 K5 e
[root@localhost ~]# cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系统已运行:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'. G$ S& d5 O$ n* s2 V5 R
系统已运行:0天0时24分34秒# Y8 ?3 S7 |: \# k7 n6 i5 E
1: who 命令查看
" @" F( @$ `8 E. X* L2 X& \, Y, G, l5 W5 l# G, j* f, ^2 V
who -b 查看最后一次系统启动的时间。
' K) o% O+ y1 [
; N a) P/ N/ y# B( X l, A1
- I( r7 @! s B! P: K0 p2
4 _& O6 Z/ W+ @! E7 S/ G7 S" o, C[root@localhost ~]# who -b
. K% j3 i- k' q" C system boot 2017-10-27 14:32
3 Z# m4 u# R+ c# a: Q( x& _ who -r 查看当前系统运行时间
3 C$ Z4 f8 w$ T* |& h& @) E! d. F! ^" l6 d, s. C" J7 q$ i
16 h( q* _ |' l8 {; c5 V, q7 Z
2. n' d! L' j4 l5 `! G; K& M5 m
[root@localhost ~]# who -r. o: e8 L1 G' J6 B8 v" q
run-level 3 2017-10-27 14:33
1 j/ g0 E& d( }/ b+ P% Q: U% C2: last reboot
/ a% A' r( ~. u" l% P6 c8 R
9 N( S& ~; u1 |' n如下所示last reboot可以看到Linux系统历史启动的时间。 重启一下操作系统后,然后- T4 G5 s' k) h! Q$ w" |+ m2 Q
5 p& P9 s4 {' Y6 o
[root@DB-Server ~]# last reboot
# B, Z2 e1 U3 Z/ F1 [) O
0 z! O' z, b: G3 C! u1
, b3 B/ U Q+ Z& c6 U2
0 t4 z1 ~ C( |: b1 D! I3. ?& a( i5 e4 L& I
4
3 ~7 O) h+ j o( s8 o. A4 Q2 S[root@localhost ~]# last reboot
4 y7 _; C1 S# ?2 \reboot system boot 3.10.0-327.el7.x Fri Oct 27 14:32 - 14:59 (00:26)
: F( M5 y, H+ n7 Q6 _7 B
4 ?* E9 m; e# W7 X3 ?wtmp begins Fri Oct 27 14:32:39 2017
% e4 H1 {0 c. W) [* H+ F#如果只需要查看最后一次Linux系统启动的时间
9 D: g, H8 r- g, d' j; v# t+ o: `" S* D' n' P
[root@DB-Server ~]# last reboot | head -1
7 Y$ z+ ]# @3 z, K! v; d% m6 Z, Preboot
3 n, P0 {9 N4 j+ }' N system boot 2.6.9-42.ELsmp Thu May 29 15:25 (00:08)' w. ~" q7 A* W
3:TOP命令查看3 x6 E: w% ]( G
& H: j2 e2 \& A |/ S' E( _& E 如下截图所示,up后表示系统到目前运行了多久时间。反过来推算系统重启时间
# `1 ~' _; q) S: w/ G$ K
" I4 i2 y$ E' `[root@localhost ~]# who -b
( r) T/ w; v9 c2 A8 b system boot 2017-10-27 14:32! A% [8 E/ X" c' p
top - 15:00:29 up 27 min, 2 users, load average: 0.00, 0.01, 0.05/ M/ J0 {7 D9 f5 r/ a% r e( X
Tasks: 99 total, 1 running, 98 sleeping, 0 stopped, 0 zombie) K8 c7 p7 J8 y5 Y1 |+ T
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st1 o5 e+ U. X5 Z) ]9 A5 d2 p' x% Y
KiB Mem : 8176008 total, 7892856 free, 131764 used, 151388 buff/cache5 ~/ Q% b& r- p0 D
KiB Swap: 8257532 total, 8257532 free, 0 used. 7868548 avail Mem
$ S5 H8 k$ s2 l4 h; e# j , S$ b* I! `/ E7 C
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND ' a7 ~" j9 L+ H6 R' l
1855 root 20 0 0 0 0 S 0.3 0.0 0:00.33 kworker/0:2 1 s1 C0 ?4 O9 i, `; {" C( N
1 root 20 0 44496 7168 2612 S 0.0 0.1 0:02.32 systemd - u0 m+ t M" ?$ [9 [; ?& C
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
' `, f/ k* Q, r2 _- ~1 c 3 root 20 0 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/0
: U9 ~; E, {, h, b 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H $ F" b; ]) u% k: j% i8 V: M
6 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kworker/u4:0
; s) s) |6 D" _9 v3 i 7 root rt 0 0 0 0 S 0.0 0.0 0:00.06 migration/0
P: Q- P, X! e& c2 B3 d 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
4 i2 N, o, R( |* y9 V7 X 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
+ v/ O/ M& Y# t/ V) ?6 E& S( @9 O1 B 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1
8 Y3 A4 m! `* z' l% |9 h9 z; d 11 root 20 0 0 0 0 S 0.0 0.0 0:00.33 rcu_sched
) y! y% x" [ ^/ _- R6 ? 12 root 20 0 0 0 0 S 0.0 0.0 0:00.12 rcuos/0 5 r+ ~4 H9 B, {5 v$ B
13 root 20 0 0 0 0 S 0.0 0.0 0:00.37 rcuos/1
: X" t6 \- v5 @. K; P 14 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 5 ~# c! ^2 _3 G! v+ e
15 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/1 , P4 ~/ W" H6 S; V: |5 e
16 root rt 0 0 0 0 S 0.0 0.0 0:00.08 migration/1 $ V" z" G& N0 r0 G% @
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1
; g6 m" x) [4 ^ p u! V 19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H ' q8 u0 b/ Y9 F3 E. p8 b7 Q* S
4: w命令查看1 F4 c. @. b' e. m# j+ ?# ~- i( s
k1 P4 K& w" j4 c& A' m1 C如下截图所示,up后表示系统到目前运行了多久时间。反过来推算系统重启时间4 V3 l. q. U" W/ J$ u( R1 w$ G* [
2 W6 M- F$ w6 ?1/ u5 ]8 }- z6 Q/ T
2
! @6 K' K# a* x/ R' \, }' @* l: D. ]3
g. G8 @$ \2 W/ c4( `& E" Q b' N& H6 C
53 Z4 a- R( @/ Q. j
[root@localhost ~]# w
G9 ?" j5 Z' V }' ? 15:00:56 up 28 min, 2 users, load average: 0.00, 0.01, 0.05& H/ F1 O( {1 N9 Y/ D7 k4 U: P
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT! F$ ?) ^1 h' n5 h- {6 g8 H6 T! v
root tty1 14:33 25:52 0.07s 0.07s -bash
. a2 f' C5 E3 V s) z: W3 Eroot pts/0 10.0.100.55 14:37 0.00s 0.10s 0.00s w
& e2 A( W* T$ J H8 e0 o2 r1 c* ~ A- U5:uptime 命令查看! J7 ` C `7 ]! O2 u; }7 q
: Q" Z$ J7 k8 m% `! x$ i! r0 _[root@localhost ~]# uptime
+ w Z# {+ A! C d. [! t$ |8 Z# F q 15:01:40 up 29 min, 2 users, load average: 0.00, 0.01, 0.05
8 g' Y9 D$ Y: }& A' r( m. Q6: 查看/proc/uptime5 S3 D$ ^ g. W3 h( V, f5 H: [2 \
5 t( |( T, h% [8 \方法一:) T/ J2 o1 E( h3 K6 H
( b/ h- R. g9 u6 f! B7 B
[root@localhost ~]# cat /proc/uptime0 v) R/ q/ O. ^5 p5 y
1778.05 3520.281 h. a3 A5 s, L3 P( w
方法二:3 [1 n- J0 ~2 w5 t8 ?& p
, `8 Y b2 x9 U9 _) E6 u \2 A
[root@localhost ~]# date -d "`cut -f1 -d. /proc/uptime` seconds ago"
7 E8 c' i @% l( _' @5 |" u5 H$ m0 FFri Oct 27 14:32:35 CST 2017) @' Y* @$ P8 i2 Y
方法三:. h* L% H1 }" p8 q. T% O! P
5 c# E8 H* S# E5 }
[root@localhost ~]# date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S" 4 s1 Y4 T; K2 R) g
2017-10-27 14:32:35) I$ l+ i/ n: c0 P& J @
9 Y' Z: R: U5 ?. ^. ~
9 Z! w* n$ u' ~
1、前言6 l! x* h$ n* ?; A* ~& v, s
' v+ _0 v) `5 u( m% Y
时间对操作系统来说非常重要,从内核级到应用层,时间的表达方式及精度各部相同。linux内核里面用一个名为jiffes的常量来计算时间戳。应用层有time、getdaytime等函数。
& x9 E9 n* J# e* A
D5 U! X8 ~9 o- c! _" j* D" n9 m在应用程序获取系统的启动时间,通过sysinfo中的uptime可以计算出系统的启动时间。 w/ [; h4 Q, N9 u5 ~, B6 A* ^' e
0 B5 @* R$ `; ?- J
2、sysinfo结构
2 f w3 N" @: k: K, V
8 ?" L) {/ c( W& T1 x: h a- g0 J6 V sysinfo结构保持了系统启动后的信息,主要包括启动到现在的时间,可用内存空间、共享内存空间、进程的数目等。man sysinfo得到结果如下所示:
; w0 X' ?6 [ c9 s6 X$ o5 U; l+ u! ?. H+ K$ `
复制代码
7 J: h4 G/ \7 b1 K复制代码) W( J# M' w5 u5 v" v( G1 q: C
1 struct sysinfo {
% h- y7 |- b1 |# t6 S1 q9 ~ 2 long uptime; /* Seconds since boot */7 q' l0 {+ F! L; \$ v
3 unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
1 G. G* |, m6 o/ t' v& M 4 unsigned long totalram; /* Total usable main memory size */$ u& ^+ V; H" W6 Y/ S
5 unsigned long freeram; /* Available memory size */
2 }9 Z S# I# F) t4 @! H! l/ O9 m 6 unsigned long sharedram; /* Amount of shared memory */
+ K7 J4 |# _$ C& F2 ?2 }3 j& v. I5 F 7 unsigned long bufferram; /* Memory used by buffers */
/ B5 c$ ?0 S6 r* s$ D% K 8 unsigned long totalswap; /* Total swap space size */+ a, b+ v8 A, p9 S
9 unsigned long freeswap; /* swap space still available */1 X: I# O* {. b# B5 U& R/ H9 `, Q
10 unsigned short procs; /* Number of current processes */
2 w% j! j6 L; a# }11 char _f[22]; /* Pads structure to 64 bytes */+ l, v1 b+ l- A3 o
12 };
1 m! }" s* U+ G, R5 t* c复制代码
9 u3 c# a/ C" K+ @复制代码+ A. b3 `! ]: x7 R- K+ C7 r
3、获取系统启动时间
1 r3 T, d( Y! _7 P; G0 l' I' _; j4 E/ Q
通过sysinfo获取系统启动到现在的秒数,用当前时间减去这个秒数即系统的启动时间。程序如下所示:
' T# {0 I- V6 ?2 J$ N! s+ N( S% G2 ^7 ~
复制代码3 X& l& e! U0 F' F5 x! F
复制代码* y. T0 D: Q) w' g& n6 g
1 #include <stdio.h>- x# m" F# v# g/ W
2 #include <sys/sysinfo.h>- u/ P- m' u6 p1 f5 K
3 #include <time.h>
9 N3 |4 P* d& }6 |) a 4 #include <errno.h>1 m' F+ ~. X; B# A; n0 U- q4 _$ H
5 ! @1 T! Y) D6 {: @$ {
6 static int print_system_boot_time()
& H* S3 }% ~+ s+ S- y 7 {3 D& w0 I" \, M5 ?' F+ s
8 struct sysinfo info;
: Y8 c R% D' G3 \7 p C1 x( e 9 time_t cur_time = 0;
( P4 T: J- v- c" N& T T* F: k10 time_t boot_time = 0; F" b( u4 E6 r; `+ J/ [
11 struct tm *ptm = NULL;& z& h0 @ [+ b8 y
12 if (sysinfo(&info)) {2 V9 `( ?2 Z1 O
13 fprintf(stderr, "Failed to get sysinfo, errno:%u, reason:%s\n",) t. ]$ u. ` S/ j5 n. F8 y, ]
14 errno, strerror(errno));* f3 S# m6 I- P1 H" B/ A; o) L
15 return -1;
% a; P ~2 s+ g; Y7 F16 }
7 N& `& q/ W) P) o- T$ `17 time(&cur_time);* U6 D5 ~0 {. j% O- Y( S( z, d8 s0 |
18 if (cur_time > info.uptime) {2 O' [# K/ ^# }5 G4 N2 Y* G
19 boot_time = cur_time - info.uptime;2 T% j- n0 f4 n& m: S
20 }; ?, p8 v& s5 K; S
21 else {+ | Q' S: x3 D; S7 |6 s" A; j
22 boot_time = info.uptime - cur_time;5 t/ d2 \9 J' P7 p
23 }" ]/ C0 g6 Z+ y4 o; W: e# x7 E' T
24 ptm = gmtime(&boot_time);) o4 }% y1 a5 S8 X* z# H4 N
25 printf("System boot time: %d-%-d-%d %d:%d:%d\n", ptm->tm_year + 1900,# ~8 ^) Q: `: Z2 b
26 ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);' y7 q( j; ^# V% |' Q8 O8 L! T
27 return 0;
7 i; q0 f6 S4 f1 P2 ?1 k' N28 }& B# { d! S' E% e. V
29 " l6 f# ~. ^8 k, I
30 int main()% X# }7 g/ ~& G8 }( D' n1 W
31 {
2 w, s; c H# k3 |/ h+ ] \32 if (print_system_boot_time() != 0) {& H9 b" Z7 J8 a4 g3 j
33 return -1;
0 j2 W# S8 |' M; D0 p b: O34 }
% D2 D) X$ D% c8 u0 a35 return 0;
! i6 p, N6 B2 O2 P5 t1 X36 }2 g* H( F8 \7 s3 u
复制代码5 w$ ~) E4 [. `3 T
复制代码9 ^# d+ J. Q- @9 ~. k
测试结果如下所:
V/ m1 ?; t. c% d2 y' V7 O9 f1 U1 f/ |0 U, J
5 K% Y6 |( z% m0 a
# v) U. g$ p1 R
9 H9 K% ^& [6 P8 W( {
4 ^ `2 [8 `2 e
#查看系统安装时间! I% U/ C- x( u8 \7 `7 q
' O! g6 [* E/ [& w, H
[root@control1 ~]# tune2fs -l /dev/sda1 | grep create
1 {3 t. Y! r7 q4 e7 A3 v2 {Filesystem created: Tue Aug 15 16:52:06 2017
* ~* U ]$ l7 n7 [" h1 o: Q: M( l& m% Q9 O6 R- T5 G
9 h; p0 y) @- i) W, I- f
: h Z+ d/ z: v, ?% V#通过查看系统创建账号时间来判断系统安装日期
; Y1 x! a) }2 j w7 U% W
q) v1 O1 P' ~- g" W4 i[root@zabbix-server ~]# passwd -S zabbix! s, L; S. V! _2 Z9 Y5 ^! f
zabbix LK 2017-06-28 -1 -1 -1 -1 (密码已被锁定。) |
|