|
|
楼主 |
发表于 2018-9-29 13:31:55
|
显示全部楼层
1.uptime命令
* D! {- e% J( e输出:16:11:40 up 59 days, 4:21, 2 users, load average: 0.00, 0.01, 0.003 z! V$ R" l+ t) I
# ?; `" u2 w5 j0 L1 G( d6 j
; A( M0 F$ P. m6 l% y2.查看/proc/uptime文件计算系统启动时间
9 s7 a1 [* N+ ^2 Y8 ^6 rcat /proc/uptime8 H/ R% B+ R9 {# B6 N
输出: 5113396.94 575949.857 n1 y1 ]( c5 A
第一数字即是系统已运行的时间5113396.94 秒,运用系统工具date即可算出系统启动时间0 G/ V+ X. ^' v- S1 X s
# \6 a5 O& J& e( }代码:
9 ~0 F c: g( ]: X& E# u[root@localhost ~]# date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"
7 Q2 D# @; J- T: U2017-10-27 14:32:355 f, M% e: F0 T
3.查看/proc/uptime文件计算系统运行时间: i1 {- O% k, V- O$ z. h$ \
% E5 l2 K3 A9 a0 Z! M% w
代码: ( p3 t/ G/ O6 x1 Q
[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)}'
, } E3 T- f; W8 O% T* `2 _( d7 M系统已运行:0天0时24分34秒0 S' C& \% u8 b7 ~5 `9 p4 l
1: who 命令查看
$ P. c; S5 M0 v3 a8 q
) _/ A A' L5 J/ M6 q who -b 查看最后一次系统启动的时间。" f$ ?' |5 L# M
( u4 R3 V# z# C3 R
1. L; C6 u9 M5 {% i5 a' C
2( I6 ~% X. z- G& q
[root@localhost ~]# who -b
) P1 P% @2 W1 e }. K) w$ ~ system boot 2017-10-27 14:32( [& {* H5 A' K2 h8 i8 o
who -r 查看当前系统运行时间 ?( N4 J) x( W/ e1 x
& s# G" {* N/ k0 a/ \* e1: Y! y- I! C& c: j7 v$ }
24 }# `% ?( b7 W2 g7 _0 z* `
[root@localhost ~]# who -r
1 Y. W- D i2 S t9 i! a run-level 3 2017-10-27 14:33
+ n9 M, c' f# d/ k; Q+ S; {2: last reboot4 s3 J) u. D$ T
' @# U! L: R2 y8 Y7 R如下所示last reboot可以看到Linux系统历史启动的时间。 重启一下操作系统后,然后
j- r- J* E. Z5 ` B& e7 E7 F5 m, ^5 ~, E+ o
[root@DB-Server ~]# last reboot) C' {# [ Z, h! O
5 }) R0 S1 U2 v1
- k5 L7 @. ~2 Q B2 J2# f/ v5 L f( w% q, a' b
37 Q) V6 z7 ?7 G0 ]8 z
48 ]/ D% {+ h5 y6 H k2 s
[root@localhost ~]# last reboot7 s+ U7 E1 C, U5 m
reboot system boot 3.10.0-327.el7.x Fri Oct 27 14:32 - 14:59 (00:26) 6 w6 k1 l5 T- a5 G! b& V7 n Y
_: _% e' F* g" x% Y- ^
wtmp begins Fri Oct 27 14:32:39 20170 X5 Z5 Z+ W( a" N/ q
#如果只需要查看最后一次Linux系统启动的时间9 K4 i1 [8 i8 H2 I% J+ M
) F0 n3 s3 J9 B/ }& S8 c[root@DB-Server ~]# last reboot | head -1- d; E) O' X3 ?9 @; h, l: m
reboot+ i. Z8 i; _# S3 V* A" W/ n2 w
system boot 2.6.9-42.ELsmp Thu May 29 15:25 (00:08)4 Q1 ?8 c- |+ \% S: i
3:TOP命令查看0 T1 p. _8 t2 E
" t+ u" B4 Y4 r' b6 u% Y$ @
如下截图所示,up后表示系统到目前运行了多久时间。反过来推算系统重启时间& R( ]4 t2 w% C; U+ y
" I8 d# K6 m! ^* Q[root@localhost ~]# who -b' w( A- f7 n: N: W* W9 n/ q! R
system boot 2017-10-27 14:32
. e3 [% [4 U9 Otop - 15:00:29 up 27 min, 2 users, load average: 0.00, 0.01, 0.05
1 M; j9 I3 ?5 j/ [Tasks: 99 total, 1 running, 98 sleeping, 0 stopped, 0 zombie
! n9 P. D7 B0 b/ u4 B# P%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 st
- d, X4 Y' Z% ]: i3 K5 `: T3 {KiB Mem : 8176008 total, 7892856 free, 131764 used, 151388 buff/cache
' d7 H9 N0 v) A$ x: i/ ?) L! C2 f6 VKiB Swap: 8257532 total, 8257532 free, 0 used. 7868548 avail Mem
( r5 W/ w3 l; i4 Y4 ?2 _) S% i' a3 o 1 p& ^% t' x* A8 ~* z
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND * [/ h0 o- J; z( W+ B! `: [0 S: a1 `
1855 root 20 0 0 0 0 S 0.3 0.0 0:00.33 kworker/0:2 g& [0 T) C; V3 }, A2 g
1 root 20 0 44496 7168 2612 S 0.0 0.1 0:02.32 systemd
6 A$ N( e7 d" |% Z+ I c; H% L: J 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
5 N' V$ V6 j5 ^ 3 root 20 0 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/0
8 {8 X# p1 m7 X& y: e 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H / P& v% l/ z$ l6 P8 W' x% |; U- H+ R
6 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kworker/u4:0 % T8 W; M/ ]$ v7 H5 E4 s6 z$ n
7 root rt 0 0 0 0 S 0.0 0.0 0:00.06 migration/0
/ _# X V: f- t7 V 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh ; _5 k; h; H3 ] D5 g3 Q& |
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0 b. l: v; D5 E
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1
; W" b H" [8 N' I5 c+ B# \, c 11 root 20 0 0 0 0 S 0.0 0.0 0:00.33 rcu_sched 9 r. Q# U/ m8 o/ V" w% Y# x5 L: `
12 root 20 0 0 0 0 S 0.0 0.0 0:00.12 rcuos/0
) y9 f& d4 m- W/ y 13 root 20 0 0 0 0 S 0.0 0.0 0:00.37 rcuos/1
) X. H* e1 {- w! s: v0 B 14 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0
1 O( z; h x( ^3 q4 L 15 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/1 4 Z& a8 _+ t1 D0 L+ O b0 K0 r
16 root rt 0 0 0 0 S 0.0 0.0 0:00.08 migration/1 . r6 ~' k$ ^0 h( c8 t
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1 0 Y- T) [# t! c9 V: C
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H 9 J7 u4 c( C+ a8 q1 g0 ?1 w8 I, ?
4: w命令查看
O% A3 _/ ]: r$ f2 o3 T. ~3 b$ b+ s
如下截图所示,up后表示系统到目前运行了多久时间。反过来推算系统重启时间# C; J8 g. P* b& S
1 h: m% L. L% @2 r0 H1
" T3 Q) ^2 V3 W+ x4 l; q- |, N: c2( w" H- k" p/ ^* w$ s4 O ]* g
3: y0 A& S, Q7 k. ^ U1 O
43 z4 \$ T& S3 N: H9 I
5& b* L" F, G, C
[root@localhost ~]# w/ O) l2 g# g% w
15:00:56 up 28 min, 2 users, load average: 0.00, 0.01, 0.05+ e2 ~( I: g* r6 q. e
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT: A0 V; f$ J- `5 v6 a- M3 w! d; G
root tty1 14:33 25:52 0.07s 0.07s -bash
, S% n1 T( a) e V# a6 H3 }8 }root pts/0 10.0.100.55 14:37 0.00s 0.10s 0.00s w- f- f0 n6 ?% Q' e( \5 o* n" ?" z
5:uptime 命令查看) d3 j- ~7 k: @5 m
# ]; S! R8 ~; H7 a0 b
[root@localhost ~]# uptime. @( ^2 Y1 T( x% s
15:01:40 up 29 min, 2 users, load average: 0.00, 0.01, 0.05% `! P, t; @# l/ v& K
6: 查看/proc/uptime
6 _" R7 |* v( T+ }$ A
' i) [! E9 j. d8 u. p" M: {7 P方法一:
% u* Z- ]; ]) `2 Y6 g' Q9 H( \$ v Z, l- x/ W. h7 {2 y; }
[root@localhost ~]# cat /proc/uptime
* F7 b/ w& n1 b8 R- g8 \1778.05 3520.28
. T8 r0 r- y. E& ]. P方法二:
- L* m8 [* d; p P! t$ i4 \2 _* ~ s1 b! x- V/ o
[root@localhost ~]# date -d "`cut -f1 -d. /proc/uptime` seconds ago"0 u F5 {' R* \+ B. i9 S- _! p( t
Fri Oct 27 14:32:35 CST 2017; ^ H8 d3 d6 c: K
方法三:' n3 V$ L& P! C5 n5 x6 a
. d' R: A9 K* i( O% I3 [ Q0 w
[root@localhost ~]# date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"
/ z0 Z% C# s1 g6 r z8 X# T2017-10-27 14:32:35
I9 G' a* O$ v6 d4 E7 d7 u
( k0 X# G1 k$ ^( h, P2 L0 ]
2 L2 A* k; X; Q2 c1、前言0 w$ k/ F$ J0 `" }7 C- g
n3 o2 V9 L" Z3 J3 i L" M7 y
时间对操作系统来说非常重要,从内核级到应用层,时间的表达方式及精度各部相同。linux内核里面用一个名为jiffes的常量来计算时间戳。应用层有time、getdaytime等函数。( ?7 U+ f! r! ?& z* Z$ o) e
4 v! _8 a$ ?; t; y* p/ g2 V在应用程序获取系统的启动时间,通过sysinfo中的uptime可以计算出系统的启动时间。 C) `. L- W( `
' {6 E) o3 l* @; y- ?6 k' S2、sysinfo结构, }/ ^& n( f* T
9 X+ F8 W& |9 a" B/ T- R. o, Z2 ] sysinfo结构保持了系统启动后的信息,主要包括启动到现在的时间,可用内存空间、共享内存空间、进程的数目等。man sysinfo得到结果如下所示:* w1 j7 @: Y* b, k* y
8 h2 k, e: D6 d# X0 K8 t9 d' U复制代码1 \/ @3 W3 u3 \1 R/ P
复制代码3 q7 t2 {' U" o/ F0 ^$ l& F
1 struct sysinfo {
5 H. t# M# U; J! {: p: E 2 long uptime; /* Seconds since boot */
6 R( y/ \" @1 f* _$ `7 i0 ]# D 3 unsigned long loads[3]; /* 1, 5, and 15 minute load averages */( C% q- W! s& o* P5 |
4 unsigned long totalram; /* Total usable main memory size */
3 g6 y: |# \% y+ H! _ 5 unsigned long freeram; /* Available memory size */
" Q: p2 N8 ?8 a0 U& B3 d 6 unsigned long sharedram; /* Amount of shared memory */( d8 N" g9 i0 x4 ?* T1 ~
7 unsigned long bufferram; /* Memory used by buffers */& J0 D3 J' `' G$ n' r
8 unsigned long totalswap; /* Total swap space size */0 |5 l5 T4 K/ A7 v- M9 @: s
9 unsigned long freeswap; /* swap space still available */$ L* G( R2 y. K. Z/ E& B
10 unsigned short procs; /* Number of current processes */% U( h+ T1 F6 j' |6 r) S
11 char _f[22]; /* Pads structure to 64 bytes */
: H% D9 J$ ?3 D8 ]12 };
( d0 U) ?1 M5 b( a6 U+ o复制代码3 m U. n0 m" _+ ]7 o9 y
复制代码( \" v1 S& [7 g, `7 E* v
3、获取系统启动时间2 n3 g' H0 Z: s+ n- J
! I+ G4 Z1 @; z 通过sysinfo获取系统启动到现在的秒数,用当前时间减去这个秒数即系统的启动时间。程序如下所示:
6 d! e# b+ i& O% P8 o$ J _5 Y3 s' H6 _) s- H. s2 h) S+ [
复制代码
9 H( S( u; P5 ~9 \4 J复制代码
. S7 c1 j2 Y& l# Y2 @ 1 #include <stdio.h>
& |; l) p \. @* x/ H( U& f# o 2 #include <sys/sysinfo.h># X% W) U; ] F& n9 p- C
3 #include <time.h>" k& }- l; I& f& @) y
4 #include <errno.h>" c$ P0 f5 }% T! s1 v
5
6 c3 n* G+ a! e$ H% R) G1 u, f 6 static int print_system_boot_time()
$ ^6 E/ ^9 N) Z9 R2 b 7 {
: P. Q4 j# w6 j 8 struct sysinfo info;) F+ x9 R3 C+ T: I& @' y% z
9 time_t cur_time = 0;8 i ]8 F7 m' d7 @& F+ `
10 time_t boot_time = 0;% L' ~$ U0 d' O6 n1 e) h1 U
11 struct tm *ptm = NULL;
) ^4 A0 p+ b5 y; B0 n+ u0 A" X12 if (sysinfo(&info)) {
3 v& Y1 ^- T! t' \" K& k) o13 fprintf(stderr, "Failed to get sysinfo, errno:%u, reason:%s\n",
2 O0 E% ]( p) ^8 v0 R14 errno, strerror(errno));
* U, m7 f" s* |7 E15 return -1;
) E) d# o0 `' R) E% y16 }
1 C/ B, X. s9 Y3 Q B/ M1 j17 time(&cur_time);% w" P1 i/ c! u C+ v
18 if (cur_time > info.uptime) {6 O! ], ^8 N6 N( U
19 boot_time = cur_time - info.uptime;. P- [1 ~) g# ~
20 }/ M+ T/ O1 {4 y3 @9 T
21 else {3 C: g& C7 j& R* V% A
22 boot_time = info.uptime - cur_time;
: H# q2 D; V; {, } J* A7 J23 }7 a; ]) |6 T0 _, F' t
24 ptm = gmtime(&boot_time);1 R. O5 P9 `) Q- q8 ~3 s8 w
25 printf("System boot time: %d-%-d-%d %d:%d:%d\n", ptm->tm_year + 1900,: C/ B& u$ H5 B3 K k( j' p
26 ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);# g2 m, W6 S/ I# D
27 return 0; 1 }4 o4 P1 G! ?
28 } i; c2 W) H$ k
29
4 v4 @5 r F0 F* T! C30 int main()" j% P# a1 w; T: z7 i( N9 \
31 {
' ~1 a/ [, v Z0 s32 if (print_system_boot_time() != 0) {
; A& }1 ~! a; O0 S( I33 return -1;
5 c! k* Y. U6 z' W2 p2 K) G34 }
& C" m f F$ e% l, H6 k0 a( L35 return 0;- e- o' l/ l# L# q) l
36 }0 ^0 ]4 {6 w i6 X
复制代码, v, ? I: E; ]3 Q. E. [
复制代码; C4 s; ^ L8 L1 K8 h
测试结果如下所:! o' A& S& h7 o( P' y( C
T6 E" m: F2 f$ H0 R; [5 u
7 G$ h1 {& j) E* z7 k' i
2 y! ^/ s) Z5 b" c9 N: r8 J
8 B# J+ P+ f" i8 \8 [6 o5 C& ~8 d$ ?- N2 y! }/ j6 }
#查看系统安装时间; u/ \2 r. R1 p
7 f8 [& K/ a' S[root@control1 ~]# tune2fs -l /dev/sda1 | grep create
6 J3 L; o6 i3 _/ ^# gFilesystem created: Tue Aug 15 16:52:06 2017
p- o3 j5 U8 k* ?4 B, a, @4 ~: b; D- {2 y' }3 e
" ]: t, @( }& _+ v' r# ]/ [' V" ]' k; h1 |& j- G5 I- t, B0 C
#通过查看系统创建账号时间来判断系统安装日期3 M0 e) L# A/ g R: I
$ Y4 w& W1 l4 A3 g$ K& q[root@zabbix-server ~]# passwd -S zabbix+ _! S: C& I, j# x
zabbix LK 2017-06-28 -1 -1 -1 -1 (密码已被锁定。) |
|