|
|
楼主 |
发表于 2018-9-29 13:31:55
|
显示全部楼层
1.uptime命令9 r' t3 @: y: t8 m* E: U: K* D
输出:16:11:40 up 59 days, 4:21, 2 users, load average: 0.00, 0.01, 0.00: |! V4 h, i, b" t" T- ~
$ g- ~. U/ p( v
9 P' Q, k% U' I' k8 i
2.查看/proc/uptime文件计算系统启动时间
% H. | Y$ N1 g* n. Q" Lcat /proc/uptime( i# \1 Q" L _3 {
输出: 5113396.94 575949.85
9 }7 _9 ], G2 R+ Y* i$ L' I第一数字即是系统已运行的时间5113396.94 秒,运用系统工具date即可算出系统启动时间4 Y1 D0 X+ c3 x! \1 C. K
/ ^0 F/ U5 |+ L
代码:
( B! C. W2 H% H% a[root@localhost ~]# date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"( L9 i5 m( b1 q- ^
2017-10-27 14:32:35
2 p: g* P+ |/ p3.查看/proc/uptime文件计算系统运行时间6 v0 h9 x7 M! R) D& U2 g- V3 ~/ ~- p$ d, v
& K" o" j4 T: W0 r B8 y代码: ) W0 V6 @. R3 u% o, _) f
[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)}'4 t0 R6 a. Q$ b P- m2 g2 f E
系统已运行:0天0时24分34秒 i* `1 Y& Q% y7 b
1: who 命令查看' {' I+ ~; H& s+ {
( \8 H+ d% _# a: S% q( w3 O, |
who -b 查看最后一次系统启动的时间。1 r- @& p* |$ x
: r$ e$ Z6 A" ^: O1 f' n) F' S: K1
7 `0 k4 k `0 I8 ?2- O. X d" W( @
[root@localhost ~]# who -b
r+ ] e3 B; X3 T& s; s system boot 2017-10-27 14:32
% B. y, X- K$ ?- x+ M0 D who -r 查看当前系统运行时间! @2 f7 Q, ]9 n5 j: v# r; r
1 O, n3 K0 \( M$ _& A4 B
1
6 ~4 i n4 r+ p7 e$ _2. n0 m" u, E* u& W; t9 d' x& R) ~
[root@localhost ~]# who -r
) |6 ]: A0 `: S9 Y9 u run-level 3 2017-10-27 14:33$ W0 P% @2 ?6 X
2: last reboot
3 p+ i8 E' Z# O( r7 i/ A2 M. ^5 _ v9 f$ d% J% r
如下所示last reboot可以看到Linux系统历史启动的时间。 重启一下操作系统后,然后6 P6 R* D r: ^
2 E# ?' Y% S! W6 i" ][root@DB-Server ~]# last reboot' x1 d- \5 i' r" t+ Q1 H4 E1 r- U
" a" \7 e+ e; }/ B8 v/ O% G6 p! c3 ]
1; F9 [1 S3 K F- H
2) A1 f( `, [. I0 P3 M
3 N9 r) d( x, T% Q# C
44 ?/ w) _ X/ p7 F5 m# i% q
[root@localhost ~]# last reboot$ B) Q+ O$ y3 c; `. K4 |2 k
reboot system boot 3.10.0-327.el7.x Fri Oct 27 14:32 - 14:59 (00:26) . u% i& J8 k+ R, G! v! S
. Y, Y1 N6 _3 J2 \/ E; C
wtmp begins Fri Oct 27 14:32:39 2017
, H9 J/ N; x5 ~# N. s4 N#如果只需要查看最后一次Linux系统启动的时间4 o- Y7 ^" p% ~) m8 t5 W h1 p" Q
5 t/ [; G# [5 [' B( @: X' T& |[root@DB-Server ~]# last reboot | head -1
" u; K$ N- A Z. y2 h+ P) F7 Yreboot
0 l( S) {$ u* q& K! m$ [8 s system boot 2.6.9-42.ELsmp Thu May 29 15:25 (00:08)
2 `6 \) A% {) s6 {# v3:TOP命令查看2 w7 `, l* A- c6 P' W
/ S. _' q* c/ l7 o
如下截图所示,up后表示系统到目前运行了多久时间。反过来推算系统重启时间
# o! G6 ~! B; I1 b
$ ~) G+ T5 g: r9 F[root@localhost ~]# who -b
1 u# y" J; m R- G system boot 2017-10-27 14:32. ~* D! }8 c4 b3 m- d" U* ?
top - 15:00:29 up 27 min, 2 users, load average: 0.00, 0.01, 0.05
+ A: B$ D& z1 y: ^Tasks: 99 total, 1 running, 98 sleeping, 0 stopped, 0 zombie+ x6 l @' U- Y
%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
. S/ P$ T2 J {* A5 W5 g, S; \( IKiB Mem : 8176008 total, 7892856 free, 131764 used, 151388 buff/cache& D Z' q/ n2 i) h' \: U5 B
KiB Swap: 8257532 total, 8257532 free, 0 used. 7868548 avail Mem
, f$ T; f* \1 I0 x% ^8 \% h + d1 C L6 R% S& X8 j
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5 R( N9 u* x3 [9 `5 }8 K' R
1855 root 20 0 0 0 0 S 0.3 0.0 0:00.33 kworker/0:2 : g, U, o' ?- _. r j( X/ d% P
1 root 20 0 44496 7168 2612 S 0.0 0.1 0:02.32 systemd % t& q/ @5 N2 t0 z$ [1 A% z0 e K
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd " U( s8 W9 J: h" f( Y
3 root 20 0 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/0
5 i3 a: N7 I+ G+ H( l) C: r 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
% A! q2 w& j9 ?8 O. @ 6 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kworker/u4:0
' {5 p p6 J9 v$ G! I 7 root rt 0 0 0 0 S 0.0 0.0 0:00.06 migration/0
9 w3 I9 h# A/ m5 ? x 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh - a6 P& _8 B% `' t! m4 ~
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
1 F8 V! k# p& x+ | 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1 2 A5 p6 }; ]6 e0 S; \5 B
11 root 20 0 0 0 0 S 0.0 0.0 0:00.33 rcu_sched
, O1 ^/ M/ `) f' W* e: Q# Q4 j7 F' u 12 root 20 0 0 0 0 S 0.0 0.0 0:00.12 rcuos/0
) R1 k( A, V1 c( O6 U1 | 13 root 20 0 0 0 0 S 0.0 0.0 0:00.37 rcuos/1
7 ^' g: o: K! E8 B 14 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0
) G1 f2 J+ P+ A$ ?6 Q# G. h 15 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/1 , e# T" A0 Z2 o: V
16 root rt 0 0 0 0 S 0.0 0.0 0:00.08 migration/1 ; ^& ?# z& ]% E( c: K9 h2 u7 r* @
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1 1 m$ m& D4 N% I; x; }8 Y, U3 ^
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
5 a. A3 K5 V: X; }- o! F4: w命令查看% n+ e0 d6 v( _' A' C+ C' m+ G j- m6 G
& _4 l, s% \6 t! v. _如下截图所示,up后表示系统到目前运行了多久时间。反过来推算系统重启时间
, l8 C0 Y6 f6 y1 i
' \0 L! k" U. J- E" s3 R. `13 _6 ^8 m1 [$ j% j
2
8 B; B8 y) v5 z- `9 n ^9 [3
9 _( i' `( ~) \$ f2 f4$ j% e( ]8 k6 g
5# ]. X0 m2 L( t2 n
[root@localhost ~]# w
9 v4 E+ H1 [: @% m; X 15:00:56 up 28 min, 2 users, load average: 0.00, 0.01, 0.058 A9 L% g# o; D
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT7 e2 X! m7 Z, b+ c K/ q
root tty1 14:33 25:52 0.07s 0.07s -bash
0 u, R. E8 R" q. E, j2 f- B, droot pts/0 10.0.100.55 14:37 0.00s 0.10s 0.00s w
, {' W0 ?# `5 E, R' \) J1 Z5:uptime 命令查看7 |4 V* L2 z1 h5 h- c8 N
6 M( ~' s, q8 u( S; N. X8 Q
[root@localhost ~]# uptime
+ A, Y( D' R! ?5 X4 E 15:01:40 up 29 min, 2 users, load average: 0.00, 0.01, 0.05
3 k% e- r! Y4 O& O( M8 M6: 查看/proc/uptime1 i% E+ g0 _* O, _% k
; y- x% E9 \/ T9 [# |; z方法一:
8 N7 E3 @2 `: h, i, C, W
/ O: u" W! p) X; X, ~7 w[root@localhost ~]# cat /proc/uptime% H: x7 q/ n3 A! u+ U
1778.05 3520.28
4 i, l$ G5 J9 M# E. G, f方法二:
: h; T) ]' k$ W$ T& n+ Q; _+ X& C
" R6 L0 t% d0 v[root@localhost ~]# date -d "`cut -f1 -d. /proc/uptime` seconds ago"' x# [- N3 a5 a' p
Fri Oct 27 14:32:35 CST 2017/ y2 x8 t0 U( i9 j" h9 Q& _% E; q6 R
方法三:6 d+ O9 U( @# p8 Y# i9 f* N9 }
* V/ c- d% g: ~0 ~[root@localhost ~]# date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S" . N' r8 D( v4 s$ b4 q: { H& k* n
2017-10-27 14:32:35
9 ~2 X% c5 g- P' [ 0 U$ G$ i# u% W2 c7 |
8 Q: A/ K7 {+ y9 v! A% W1 e0 C! w1、前言5 y0 i, z5 S$ z }
6 L- U" M2 x' ]- O
时间对操作系统来说非常重要,从内核级到应用层,时间的表达方式及精度各部相同。linux内核里面用一个名为jiffes的常量来计算时间戳。应用层有time、getdaytime等函数。7 c- y' Y" c# l
, f' {9 z* b- H( b! p
在应用程序获取系统的启动时间,通过sysinfo中的uptime可以计算出系统的启动时间。- k( y2 f c' c0 s0 M
# l* y |9 R4 u: ~3 J# I1 J6 J2、sysinfo结构
6 P1 k2 i1 X7 F! v( n! i7 }) m3 V. z! Y
sysinfo结构保持了系统启动后的信息,主要包括启动到现在的时间,可用内存空间、共享内存空间、进程的数目等。man sysinfo得到结果如下所示:
$ d2 y7 ? `- A& C$ W' U5 B$ c3 f9 C
复制代码2 M" {. G, [9 {5 H( `# d" c
复制代码! I! |% O8 t8 Q6 w
1 struct sysinfo {
) p8 C; h" K% D, g 2 long uptime; /* Seconds since boot */2 j' _. L- H7 z
3 unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
) ]( ~. S7 ^4 K4 m, O 4 unsigned long totalram; /* Total usable main memory size */, ^% X: @7 r% k4 ]3 \" P( V
5 unsigned long freeram; /* Available memory size */
1 {' J; c; x3 c1 a 6 unsigned long sharedram; /* Amount of shared memory */- {4 B$ h/ C- U- `! ~: v4 t9 i
7 unsigned long bufferram; /* Memory used by buffers */
' A4 m( ?% l3 @: A* k0 C! r) x8 u 8 unsigned long totalswap; /* Total swap space size */# j# G2 @2 A9 {
9 unsigned long freeswap; /* swap space still available */
* R J2 ~/ V; _) p: z0 Q10 unsigned short procs; /* Number of current processes */2 c) y, V1 Z7 o8 `! }
11 char _f[22]; /* Pads structure to 64 bytes */
, j# S7 M. D) g12 };
& i4 e0 e7 R* o) M/ M! h5 c复制代码! V6 Z3 Z# ]: R) k9 i
复制代码2 \1 {# ~2 _& P# G
3、获取系统启动时间
+ i( {5 J# J; J7 g3 f* m- a% W% l* p4 U! W. b8 f
通过sysinfo获取系统启动到现在的秒数,用当前时间减去这个秒数即系统的启动时间。程序如下所示:8 t7 N6 L3 C7 C' g' }- h. V0 R G
% M6 A/ ~" ]. V5 w" o& `复制代码
- j' T- I0 @$ y: z复制代码
; d4 z) T/ y, K; Q# | 1 #include <stdio.h>
/ b V& L% Y {( O9 ^% Y: c5 f 2 #include <sys/sysinfo.h># `! x2 O* D4 I; e
3 #include <time.h>
, z* {3 g- `* o: B# Q: S9 y 4 #include <errno.h>. w8 E) l [* a6 [1 i, M7 G' y
5 8 {% O: h M3 \4 P
6 static int print_system_boot_time()
4 E4 l2 I6 z* I0 K 7 {
* O. {- P0 o: d- i, u! @4 d2 w 8 struct sysinfo info;
; m. p' e8 k" }' i8 x$ }- w 9 time_t cur_time = 0;+ N. W, @& X9 h1 A: l
10 time_t boot_time = 0;7 f$ L# D% p! ~% k. G( W; J" u1 K
11 struct tm *ptm = NULL;& T. e% p S3 i+ R
12 if (sysinfo(&info)) {- z: ^9 @: O, k& \
13 fprintf(stderr, "Failed to get sysinfo, errno:%u, reason:%s\n",: u1 s+ ^) w: h) W' | r
14 errno, strerror(errno));
# z0 r2 F/ ]9 s& V3 M2 N15 return -1;8 k9 P1 K, `; P+ W7 D3 x4 f3 V
16 }' m; J7 v8 u+ V0 ]
17 time(&cur_time);
. e# Q5 U% u p. _/ E% u18 if (cur_time > info.uptime) {
4 _' V) j4 t ~- e* m1 _& l19 boot_time = cur_time - info.uptime;1 w' u: e" \+ d( x/ p0 n; C
20 }
( F3 y& c4 X# G( e21 else {
" U n+ |' ^% Q22 boot_time = info.uptime - cur_time;
2 l: N3 |; ?# S23 }
" I* N# G& [/ W4 R+ W* c- t24 ptm = gmtime(&boot_time);5 k5 h1 Q: j7 ~% t- P' H( C6 s
25 printf("System boot time: %d-%-d-%d %d:%d:%d\n", ptm->tm_year + 1900,
. P @2 j) n- g0 a$ V, D% Z26 ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
' O# i, ?- u# T5 b+ S5 ]27 return 0; % ` R F( @0 B7 n9 _; l7 h% }
28 }
+ R+ X* f5 Q0 D; P7 D% }29 + A/ d- Y6 z! v, X- O8 k: @
30 int main()7 B! u' O5 D0 h
31 {
: @. |1 _; {1 Z" N1 e$ l32 if (print_system_boot_time() != 0) {
3 Z" i1 [5 `! T6 B' D33 return -1;
, v' E7 M+ v2 J& h% y34 }
2 E) k/ ~, m. { m8 r: }6 p7 ~, ` e35 return 0;
9 i. o, G9 }7 p0 Z9 T* s36 }6 b# | \) }: H, v0 Q* P: B9 v
复制代码
1 w- V: c3 Q. E! f; D; z复制代码
% \! l% a4 r; c1 ~测试结果如下所:5 D/ }% ]: N3 U: N5 q# y2 l
5 `9 X" x4 F0 Y4 _- S
# V, c7 m7 ?' Q* h& \9 ~
8 {1 L5 r% l' v: \' V
7 _6 t8 P$ \" T g/ a4 V- Y/ h8 Z6 W% W4 S! M. D
#查看系统安装时间/ S9 Y0 C# l! X! I/ J. Y3 b
V+ a5 f" d+ J3 Z4 e. P7 g8 o
[root@control1 ~]# tune2fs -l /dev/sda1 | grep create
2 P0 G& n4 H7 q; L% W+ a0 j) bFilesystem created: Tue Aug 15 16:52:06 2017
0 B. G5 L5 G% q" f! v6 e! \5 T2 Z
4 U8 m7 o3 F8 {& w
# ~7 g+ b+ ~# z#通过查看系统创建账号时间来判断系统安装日期
4 R' J6 I4 v5 c- ~/ I+ E$ A2 G$ ~1 N& B: s: p3 p
[root@zabbix-server ~]# passwd -S zabbix
9 i. `6 m9 N. M+ Jzabbix LK 2017-06-28 -1 -1 -1 -1 (密码已被锁定。) |
|