|
|
楼主 |
发表于 2018-9-29 13:31:55
|
显示全部楼层
1.uptime命令, U: T' l8 e z, f1 W
输出:16:11:40 up 59 days, 4:21, 2 users, load average: 0.00, 0.01, 0.00
0 |) ~+ E- ~2 ?0 Z
) W3 z @+ L5 T5 e
5 j: C) n# d$ t- [; M2.查看/proc/uptime文件计算系统启动时间
: i& R; B9 Q+ Q: x+ \- F% w6 Ycat /proc/uptime9 o4 f8 @/ a, h4 k2 b
输出: 5113396.94 575949.854 C2 f! D! K( V, }& S' _4 b; b5 L
第一数字即是系统已运行的时间5113396.94 秒,运用系统工具date即可算出系统启动时间
T" T8 C5 ]. b% z+ `( M# n# R0 N# Z0 Y5 I& u1 [7 T5 z
代码: ; Y5 l- k, E4 y% R7 n0 k
[root@localhost ~]# date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"2 u/ L2 r8 {* Q1 E
2017-10-27 14:32:35: j* W0 H" n0 e7 d
3.查看/proc/uptime文件计算系统运行时间
$ r8 Y6 k7 t1 a" Q: K+ K% m+ N# g7 b6 ?9 r( P3 N. w" E
代码:
9 E9 q1 o& N( J9 F* M1 m" M) o# c[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)}': d% Q1 b: m7 |. q* q2 ]% t/ i
系统已运行:0天0时24分34秒
4 ?0 a9 l, C0 K P: i1: who 命令查看! U: w' q" g% K* Y$ N
% `* D' l; N, R- l5 @ l
who -b 查看最后一次系统启动的时间。8 \& [* Y2 D- M' G% W
, X2 [' f! i& P7 O
1/ H/ ?: I8 M: Q* t$ f i/ {7 h
2% a+ w0 J+ t' ?
[root@localhost ~]# who -b
: s5 X# z9 x6 b) _ n2 l2 M- J system boot 2017-10-27 14:320 y: K& q, x4 q8 K8 V
who -r 查看当前系统运行时间
0 z" a5 M4 u/ Z# V+ i+ M5 ]! y
0 T/ k$ f% [/ a/ e$ ~1
7 ]/ U: j/ p, ~5 a7 [2
$ P6 ?8 c% u# `[root@localhost ~]# who -r
* U2 _( C# g; K# T run-level 3 2017-10-27 14:33: r1 R& J3 ^/ `% G
2: last reboot
. V+ M- C/ x* p8 X- j5 G% b( o) I. q5 Y+ `3 r# ^! U. w% n
如下所示last reboot可以看到Linux系统历史启动的时间。 重启一下操作系统后,然后2 v. s, f% l& ~1 b) ~
" `: v y( E8 @* w# O6 K
[root@DB-Server ~]# last reboot
- Q" k* r3 z/ _/ |6 ]$ w# s6 p0 o! B+ s
1! F8 j' V4 N, f- D
2
9 C% k2 y. U+ `6 @- G, Q3
3 _+ O {: q) ]" E6 q4
/ k+ Z" [1 x/ N) l[root@localhost ~]# last reboot9 F& B3 q3 ]6 R6 `
reboot system boot 3.10.0-327.el7.x Fri Oct 27 14:32 - 14:59 (00:26)
8 o. c9 Q4 w! W; |1 j5 B & V0 N- E/ o" ]2 j: }5 f
wtmp begins Fri Oct 27 14:32:39 2017) j, V' G7 g2 R3 [& h* I% w
#如果只需要查看最后一次Linux系统启动的时间 W: o% d% v* P$ V
1 E* }" w+ U. m! h- @ _
[root@DB-Server ~]# last reboot | head -15 _; w0 b! g; U+ |
reboot; d: i8 }& S. r$ V7 \% V
system boot 2.6.9-42.ELsmp Thu May 29 15:25 (00:08), C+ ~) V: k0 P ~# A
3:TOP命令查看# f: ~/ L* @- t' z6 W9 Q' [
7 K1 T2 S, T7 ?& A+ x1 W. i 如下截图所示,up后表示系统到目前运行了多久时间。反过来推算系统重启时间' R+ I) Q8 n( P) x' `
: F$ H8 d: o {- H( u3 |$ c) @[root@localhost ~]# who -b) d: U, o$ Q9 i- }2 B
system boot 2017-10-27 14:32
2 z& C5 j/ k1 w1 I; Btop - 15:00:29 up 27 min, 2 users, load average: 0.00, 0.01, 0.05" v) X+ Q; ?8 Z! e& h
Tasks: 99 total, 1 running, 98 sleeping, 0 stopped, 0 zombie. b; W, e' @, U
%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; l! y0 \8 Q, a8 w$ [% P
KiB Mem : 8176008 total, 7892856 free, 131764 used, 151388 buff/cache3 T* L W' J) `- |- a5 N9 f
KiB Swap: 8257532 total, 8257532 free, 0 used. 7868548 avail Mem
' v; v* h2 {" F% b
# r: P4 ] A7 F, |0 o PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND # u# K, l8 W% o0 u$ H2 {- {
1855 root 20 0 0 0 0 S 0.3 0.0 0:00.33 kworker/0:2 , m) V3 k5 l0 K4 c$ {3 f! r5 ^9 i. ~
1 root 20 0 44496 7168 2612 S 0.0 0.1 0:02.32 systemd
* t8 D& a" k: w: x" `: g 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
! b ^5 c1 Y8 }- ~. A 3 root 20 0 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/0 . ^$ c0 F8 Y$ ~% K q. I+ {1 B
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
# C5 |* X' ?( S3 F; N2 X7 t 6 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kworker/u4:0
# U4 n% ]% c2 @( u5 p0 U2 n 7 root rt 0 0 0 0 S 0.0 0.0 0:00.06 migration/0 0 V. w6 g+ P! s3 \9 D7 p
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
$ C$ [: P! R) v7 l 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
4 F9 k# x4 ]& U$ X 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1
2 O4 F+ I% e3 c" J 11 root 20 0 0 0 0 S 0.0 0.0 0:00.33 rcu_sched # A7 @: N7 M0 C. P; Q& f
12 root 20 0 0 0 0 S 0.0 0.0 0:00.12 rcuos/0
/ O6 a2 e: W. y- q% i# n M# s 13 root 20 0 0 0 0 S 0.0 0.0 0:00.37 rcuos/1 # r& U# N x% x+ q; @. v
14 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 ; q; Z$ S" w1 E6 r" p; P7 P. L$ b# R
15 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/1
) [" R4 L4 i$ O& [ 16 root rt 0 0 0 0 S 0.0 0.0 0:00.08 migration/1
0 m- o f5 P: M5 k 17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1 + O$ b! ^8 \- b* e/ G2 E
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H 2 \& I. t5 U( o4 H3 Q/ O
4: w命令查看
$ }& ~( n; _+ t+ N* A9 c8 M6 S# s- c8 F/ |! _, M+ C8 L
如下截图所示,up后表示系统到目前运行了多久时间。反过来推算系统重启时间
& }' S* l- S& L6 \
' L d- d& W3 t% r15 k4 U+ w4 e* u
2 e* h" }" `3 ~1 V. C
3
- q! W7 d& o: W4
l8 C+ [5 f/ C) j( A5- Q, F9 l! h$ m% e- Y
[root@localhost ~]# w
# n- ?7 P, ` ?) ` \3 f2 A' i 15:00:56 up 28 min, 2 users, load average: 0.00, 0.01, 0.05 w6 I4 P4 x/ o( T1 O& `
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT0 r! L8 @4 m) u
root tty1 14:33 25:52 0.07s 0.07s -bash
- a! r; y. P4 _root pts/0 10.0.100.55 14:37 0.00s 0.10s 0.00s w* ^2 i; Q u' l p6 ^5 V
5:uptime 命令查看
6 D0 s' O( _* _2 W' D& n: n" e* ?; { G
[root@localhost ~]# uptime
& v' k5 {) O* c5 f, \, m8 _ 15:01:40 up 29 min, 2 users, load average: 0.00, 0.01, 0.05
$ M ~$ s( h: O* j& z6: 查看/proc/uptime
3 t% p, M1 _; w) d. [
) C+ M Y1 P; }0 N/ `. X2 E方法一:
/ K( [- L7 J' L4 c8 x2 @) O0 E+ p$ k; s) _8 u. x! E7 o
[root@localhost ~]# cat /proc/uptime; m; C" p- b2 g j* x
1778.05 3520.28% o/ r! S$ t& e; i& s
方法二:6 J! E$ _; r D' y0 @
5 q, m0 d6 a8 T( R9 u8 k
[root@localhost ~]# date -d "`cut -f1 -d. /proc/uptime` seconds ago"
/ Z7 i% I6 P9 J: {2 [Fri Oct 27 14:32:35 CST 2017
' K" k$ f% w' R+ |. Z( ~ 方法三:/ V% D0 G8 s0 R: ]/ q2 ]$ U. X6 D
- t0 a: |- y0 r+ z2 r9 ~# ~[root@localhost ~]# date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"
, q9 A' V7 l0 S1 M; n0 ]2017-10-27 14:32:35! p" m2 R r$ U2 Q
! u7 _2 @6 f+ j, I: v7 X
& M) C0 l1 p8 j$ E1 i0 c t1、前言" d3 [8 O+ ]5 p$ w" Z! Q# T
6 p7 v6 o& `0 _5 a( C; \) d 时间对操作系统来说非常重要,从内核级到应用层,时间的表达方式及精度各部相同。linux内核里面用一个名为jiffes的常量来计算时间戳。应用层有time、getdaytime等函数。
, @2 W2 t: w5 S
* | R) `- Y7 [+ S- F+ E7 Y在应用程序获取系统的启动时间,通过sysinfo中的uptime可以计算出系统的启动时间。
+ E' k, {+ `. v; _$ ?' |/ N
# f" M2 z# s# f5 X' o$ r; h! b' A2、sysinfo结构
! y. h' J5 b9 O$ T& w4 u, |; s( E4 i* G$ m4 j: b
sysinfo结构保持了系统启动后的信息,主要包括启动到现在的时间,可用内存空间、共享内存空间、进程的数目等。man sysinfo得到结果如下所示:9 ^4 V1 S n; v
\5 n @+ w) A+ ]
复制代码1 \; {. i3 Q7 V/ \
复制代码
+ C8 B6 m% R6 J" }9 n 1 struct sysinfo {
& r0 E; J( x, Q5 T+ ^' S. k% ?) O5 ` 2 long uptime; /* Seconds since boot */$ B2 t8 |! n1 E! o6 Z+ e. [
3 unsigned long loads[3]; /* 1, 5, and 15 minute load averages */* r5 i* n0 v; ]+ }1 j+ @5 _" C4 D! x4 E2 y
4 unsigned long totalram; /* Total usable main memory size */' D$ t3 \8 N& F5 u- N* c7 \
5 unsigned long freeram; /* Available memory size */$ Z* z' Y% T3 ?, p8 G
6 unsigned long sharedram; /* Amount of shared memory */$ B5 J" z, B2 J- `- ~! I# P# M
7 unsigned long bufferram; /* Memory used by buffers */2 w: H) g3 X. w8 ]8 D5 _0 b& i. X
8 unsigned long totalswap; /* Total swap space size */
) y0 H6 H2 L1 P4 \3 r 9 unsigned long freeswap; /* swap space still available */- a+ e' G: F$ M% u" V
10 unsigned short procs; /* Number of current processes */5 w8 G; M+ a3 O
11 char _f[22]; /* Pads structure to 64 bytes */
& d: R6 P+ O8 ~/ u1 R12 };! }' _$ y( I+ g
复制代码6 g I$ b O% M* P6 D
复制代码
j( U6 y6 L, _8 {1 j8 u3、获取系统启动时间8 P0 H! n4 J/ j8 N8 g* F, y( u
9 D7 Y3 N- g6 i' | 通过sysinfo获取系统启动到现在的秒数,用当前时间减去这个秒数即系统的启动时间。程序如下所示:
( a- F h. U c* m6 q/ u' f6 {4 ]1 C& w5 E3 Y* ]
复制代码
# T9 v) P0 c3 u复制代码. J' G' }% f9 \3 z L& E
1 #include <stdio.h>
. N T9 `; E' ~1 ?2 ?1 H 2 #include <sys/sysinfo.h>. d! K9 m& G. Z# g. t9 S
3 #include <time.h>4 f3 }! y' P7 V5 m# v; f
4 #include <errno.h>
( R$ w+ F X4 L$ \: P 5 : y- M& y2 a: j- I
6 static int print_system_boot_time()
% z5 p: H+ q0 L9 g: X" I: u 7 {% T8 e; a% M% i' c: @* t% x
8 struct sysinfo info;
5 a! z: T2 C2 ? 9 time_t cur_time = 0;5 b/ E ]. W. {- e* ~" S, q6 u
10 time_t boot_time = 0;3 e1 s5 o3 `8 q# H
11 struct tm *ptm = NULL;
1 _) H$ y }( E& y2 d12 if (sysinfo(&info)) {, h# F% w% Q8 E( Y6 }
13 fprintf(stderr, "Failed to get sysinfo, errno:%u, reason:%s\n",
& R8 _& w5 n" ~4 e+ N1 _14 errno, strerror(errno));1 ]6 U& u* J1 D. L+ }% k
15 return -1;
+ H% X3 V+ G" H3 a$ V# `# m16 } ]- b7 K6 z7 r: _' g
17 time(&cur_time);
* x) `! e+ D- @/ ?6 {0 q; q% a# ~" a18 if (cur_time > info.uptime) {# _% s _8 v' r1 V/ _$ _
19 boot_time = cur_time - info.uptime;
, N$ v0 C0 _3 f20 }
! @5 C: n& b2 c1 @21 else {
# C2 @, b; E4 v- t: |. O22 boot_time = info.uptime - cur_time;: ]& @% J x: n2 Y9 }* u# {
23 }
4 ]* z$ @/ Z: V24 ptm = gmtime(&boot_time);
3 m g* x5 p& U25 printf("System boot time: %d-%-d-%d %d:%d:%d\n", ptm->tm_year + 1900,5 D, d0 e# a Z# ]+ p. ` Y) T
26 ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
6 c6 B2 \2 h0 d5 T8 |, O27 return 0; 5 n" w/ P. H1 N& o$ }
28 }
) n5 R. ]- _/ D# T$ G! _29 : y y5 H$ L' a8 g& C b
30 int main()- T% ^& d0 W. B) _3 O1 n% p
31 {7 A% E% m5 L2 u+ l# E& N
32 if (print_system_boot_time() != 0) {* f+ L# t1 P7 n* H
33 return -1;+ e3 P; w& k j$ K$ o
34 }/ c& {& b9 M' `2 @) }
35 return 0;
, J( v H9 R" }" }+ E( t7 o6 J36 }
) k* w' R& p+ J1 p) f复制代码8 h1 h4 p" E. ]
复制代码; K1 w3 k9 o! R; Z! D+ I
测试结果如下所:
/ i: l, u/ I" |" B
' g4 T9 W1 F# h. D
; P3 |& i. B0 u z' r% }
0 |# k3 i/ s' v# E5 R . y; \* ^; U0 d
! o' M4 _ n: G#查看系统安装时间1 L& @/ J& C# O3 h
I. j: f3 j6 m( C2 O2 m {- ~! H
[root@control1 ~]# tune2fs -l /dev/sda1 | grep create
9 Q4 }* T' g# s8 e+ N8 e& u% V! LFilesystem created: Tue Aug 15 16:52:06 2017
* K m0 _' V7 | z$ n& U! V! j1 `' ?3 U, f
; @, m5 G5 }/ T6 A" l p# c( `7 o! _& g0 _+ q8 m
#通过查看系统创建账号时间来判断系统安装日期0 {3 Z' q* o2 y: q
+ c9 s4 X. B. c: \1 W. T[root@zabbix-server ~]# passwd -S zabbix
5 D- J' S9 W/ B4 Dzabbix LK 2017-06-28 -1 -1 -1 -1 (密码已被锁定。) |
|