无忧得胜-网上国际课程 (5edu.win)

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令--系统状态篇

[复制链接]
admin 发表于 2020-6-28 13:07:12 | 显示全部楼层 |阅读模式
* _7 a) z6 W! z; U% E
5 O1 B$ r9 h3 D0 g
前言" Z5 _9 ~; _0 j  T. ^3 v
* c. b: y  W+ d+ q3 Z& D5 h$ ~

8 e5 T6 M! K( TLinux常用命令中,有些命令可以用于查看系统的状态,通过了解系统当前的状态,能够帮助我们更好地维护系统或定位问题。本文就简单介绍一下这些命令。
- W2 Y, }( z+ J4 U: `查看系统运行时间--uptime' t  K. ~. p8 `1 S$ O# {

3 K9 f: [- ^% v1 }4 @  _有时候我们想知道系统上一次复位是在什么时候或者系统已经运行了多长时间,我们可以通过uptime命令获取这些信息:
3 V# k5 {( s2 |uptime
3 C5 ^# T; E* Y- L3 v+ ]4 V% E20:47:06 up 50 min,  1 user,  load average: 0.75, 0.84, 0.93$ R1 j" U; P: l
从左往右显示的信息依次为:当前时间、已运行时间、用户登录数、1分钟、5分钟和15分钟内系统的平均负载。! ]( J$ |" v4 s! g
查看系统已登录用户--who/ ?' s) v3 f' E8 d9 k( r1 O( s0 |

$ |, r; d  r' P/ f6 m' }who -a+ g6 S/ K& @# h. I( F' S  U6 v
hyb      tty7         2018-09-30 19:57 (:0)" P  e! l% F9 L$ W4 O. G( o. [& ~
通过who命令可以查看到哪些用户通过哪个ip登录到了这台主机。6 F9 F1 V* I! o+ t4 }+ ^
查看系统版本相关信息--uname
* u6 Y& f1 u! Q: k8 ?8 ~/ ^% y1 F3 I3 ]5 X2 L) v: P
例如:
, v! z" [  P) T7 K0 [4 o$ L6 ?7 vuname -a
" B  R) r/ G4 Z4 a6 TLinux ubuntu16.04 4.15.0-34-generic #37~16.04.1-Ubuntu SMP Tue Aug 28 10:44:06 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux* W+ b& V, q0 \% i6 N1 o+ S
从结果可以看到操作系统版本(ubuntu16.04),CPU类型(x86_64)等信息6 H3 h. X. ~2 C* H! Y& `$ H% X5 D
查看当前环境变量--export
% ~5 l8 W  `, i: }( _& I* W; ~) a( N9 w' y
环境变量影响着程序的运行,因此有时候需要查看当前环境的环境变量:  f$ g: o9 ]$ |' b9 ~3 D8 L# F- i
export  W0 f0 T4 r' k
查看目录和文件占用空间--du
' U; s- I2 k8 c0 i8 e% j
7 Z" y5 E0 _. R) |9 P  H- f7 Mdu命令直接显示当前目录下每个目录及其文件占用空间。结合--max-depth参数可以指定显示的目录层级。
8 ^2 Z! ~0 |8 Y1 e& P6 Q( H例如,如果只想显示当前目录下各个目录所占总空间,可以使用:

9 q: S, e6 R( A: Ydu -h --max-depth=1
. `9 k1 M) y$ Z19M        ./python
6 L$ d# }( b( O6 T% x" Y# v1 ]9.0M        ./git5 t% v# O. U' C* W- }! Y
321M        ./hexo3 c# X* g! V- R& p6 N! k1 W2 {0 c
17M        ./lua1 |4 k' M0 p5 y; s
28K        ./vim
; O" C3 a: o2 |* s, q1.4M        ./shell- R; U5 x7 z; |' b( Z" Z9 z( B
81M        ./redis! I. C7 }* |+ w. d" U
316M        ./books
5 {0 p+ m; V( @5 n+ D48M        ./c" f- b# e1 z9 Q5 g% H$ q
810M        ./ c0 I. ~1 }/ g- }& `" h
du -sh     #仅统计当前目录总大小1 E6 h0 X, |- ]7 u1 H  A2 W0 ~
810M
1 D7 v1 M. u" `$ _' d$ X其中-h表示以易读的单位显示大小,即M,--max-depth=1表明目录层级。通过命令结果,我们可以看到当前目录下各个子目录占用空间大小,以及总空间大小。6 i/ ]! j) k8 s; ?" G
查看各挂载点空间--df
3 J& l8 t  U+ v
8 q; Y3 E+ u9 ]$ P( L5 w例如:0 c% [, Y& \' M2 Y* s
df -h
$ p( p: ?# `+ d8 v' T文件系统        容量  已用  可用 已用% 挂载点
/ F5 {/ U. ~" x0 T" S4 h- mudev            3.9G     0  3.9G    0% /dev
) K+ f1 x5 G3 ]' {+ [2 c; btmpfs           786M  9.5M  776M    2% /run
$ `5 C( O  A( [6 D* h) q$ @- k/dev/sda10       24G  9.8G   13G   45% /
8 E9 z% w+ }" itmpfs           3.9G   43M  3.8G    2% /dev/shm
2 p6 w: i4 h* z; }4 qtmpfs           5.0M  4.0K  5.0M    1% /run/lock" e2 ]: d1 C$ Z* E; F$ Y( i* Y2 }
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup1 g7 h% E3 Z# M0 m. C
/dev/sda11      454M  274M  153M   65% /boot
* }* B8 m% \( u4 b  ~* |. y/dev/sda15       55G  5.2G   47G   10% /home9 T* Z$ m% v- e4 n( F! }
/dev/sda1       256M   31M  226M   12% /boot/efi( i4 L: |2 o% g
/dev/sda14      4.6G  9.9M  4.4G    1% /tmp
" n/ N0 ]1 Y0 q: U8 ?8 W: e! Q  F( q8 X7 atmpfs           786M   60K  786M    1% /run/user/1000
5 w" ]; F$ S1 x- h: {从结果中,我们可以看到各个挂载点总空间以及可用空间。当磁盘文件占用空间较大时,可能导致系统运行缓慢,因此,可根据该结果进行相应的磁盘清理。
  K. F% j2 A1 }! Y查看内存可用情况--free
$ |: z( }5 ]6 N  [0 x! k- T9 `- [4 w2 u  C- T
free命令可用于显示系统中可用的物理内存,交换区内存以及内核使用的buffer:
* o! X3 U8 s  t0 L  N  W$ ifree -h
7 k% `7 `% @; F8 \9 f: C              total        used        free      shared  buff/cache   available
% Q/ r$ l) {0 s/ c; r3 W/ \' f. g1 }Mem:           7.7G        2.3G        2.6G        268M        2.8G        4.7G
/ j7 x0 G3 L% E( q8 c+ j- \! lSwap:          7.6G          0B        7.6G+ H" D' ~7 z1 {( y/ B
从执行结果可以看到已用内存和空闲内存的情况。同样地,当内存不足时,可能导致程序运行异常或系统卡顿。4 C2 W- I& e3 @& [6 x6 H' G2 O; i4 E
查看进程的内存使用情况--pmap& n2 Q. [7 T$ `" V* @; X+ y

. q4 B1 h, b6 |, n, S6 B5 U. npmap命令用于查看进程内存相关信息:9 h' P) ~/ f$ f) T3 o, ?
pmap pid    #pid为进程id,可通过ps命令获取
; M, M8 q. k# ]0 R6030:   ./main$ n9 I! X! Y3 L2 ]/ c; j
0000000000400000      4K r-x-- main0 y+ T3 A  P# c8 d7 H" M
0000000000600000      4K r---- main
5 X. {6 @7 }$ L7 {0000000000601000      4K rw--- main  W' V' ]* O" v% J- `
00000000017d2000    132K rw---   [ anon ]
/ R$ x) d3 y+ t  i6 T3 N* L00007fc3843e8000   1792K r-x-- libc-2.23.so
% i0 m$ A9 n( M$ {00007fc3845a8000   2048K ----- libc-2.23.so: h  {( ~2 Y. _( t: V% h) c
00007fc3847a8000     16K r---- libc-2.23.so
" @- p3 Q7 b0 g. P1 q9 I- |$ t00007fc3847ac000      8K rw--- libc-2.23.so, ?5 s* c% k: C; M% G. Q
00007fc3847ae000     16K rw---   [ anon ]
' ^% k- o, p3 j  }  _: ], y00007fc3847b2000    152K r-x-- ld-2.23.so
  h* ?& z4 V/ m. K# W00007fc3849b9000     12K rw---   [ anon ]
. Z8 m6 z1 K. C, ^: \2 Q0 K, W  I00007fc3849d7000      4K r---- ld-2.23.so+ k+ q) ]" Z  Y1 t
00007fc3849d8000      4K rw--- ld-2.23.so# w* s" c( X7 x8 }* U! q
00007fc3849d9000      4K rw---   [ anon ]  U6 G  w5 s1 k  S
00007ffcf2018000    132K rw---   [ stack ]! T* p' f  ]" g( c8 z9 h
00007ffcf2175000     12K r----   [ anon ]/ U3 P( R. Y! ~9 x0 T
00007ffcf2178000      8K r-x--   [ anon ]8 u) x, M1 i4 J3 c9 |
ffffffffff600000      4K r-x--   [ anon ]1 m7 k3 E5 @$ X; M6 j
total             4356K
1 z/ f( u2 N$ n& q" S2 n, ^7 \0 T我们可以根据进程各部分占用空间情况,来不断优化我们的程序。% I3 S+ K- H* B0 }, d- E
查看虚拟内存统计信息--vmstat/ A) O& E1 o/ V2 q
! k0 f. x& e* v  k/ q
vmstat
# _  P5 D% g3 _) ~0 M/ aprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----& ^, ?6 w* _: s) k) v
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st, A4 p7 m# i3 l4 _
1  0      0 2214960 407828 2572148    0    0   126    57  377 1006  8  2 88  2  0
& c+ w. T' J5 {) ~vmstat的输出值能够帮助我们了解当前系统的性能。比如说,如果si(每秒从交换区写到内存的大小)和so(每秒写入交换区的内存大小)的值经常大于0,说明内存可能不够用,因此才需要用到交换空间。再比如说,us(用户进程执行时间百分比)的值比较高时,说明用户进程消耗的CPU资源较多。而wa(IO等待时间百分比)值较高时,说明IO等待情况严重。! v5 O, P1 I$ G6 C4 m
查看ip地址--ip
/ a' K) D& ]$ N; r0 L! m( }& \& K  P5 l% G- L5 A2 r
有时候使用ifconfig命令并不一定能够看到所有的ip地址,因此可以使用:9 d4 G: l6 }1 H
ip addr7 H% l# k2 B5 ~! e) Q
查看网络连接状态--netstat
$ K7 k4 l3 d, \( Y
4 D& q8 @8 F; G# rnetstat命令可以查看网络连接状态,通常用于诊断网络相关问题。例如查看端口是否被占用,连接是否已经释放,服务是否在监听等等。
2 R  ~! }% ]2 @- `5 Z查看进程间关系--pstree6 i6 {  P5 `* d* \% F3 k4 x
: W: h" i0 A* _% c
通过pstree命令可以看到进程间的父子关系,它以树形结构显示这些信息:
- Z4 r: u* j5 R7 i7 x8 g6 epstree) ]. L, U# o: [2 V7 x6 w: J
systemd─┬─ModemManager─┬─{gdbus}7 t' R1 ]4 [$ Y9 r, S" ?; ^) Z
        │              └─{gmain}; Y& L8 ]' A7 N. m: b0 v
        ├─NetworkManager─┬─dhclient( e! u- l% N; t
        │                ├─dnsmasq
3 L  ~  M" r7 x5 I9 T        │                ├─{gdbus}7 z# V! B$ E' r6 X
        │                └─{gmain}5 M6 g, M% @3 }8 B
        ├─accounts-daemon─┬─{gdbus}
3 b, I! Z7 L6 Q% W' J1 g        │                 └─{gmain}
/ e+ l* w1 v- W8 H6 E        ├─acpid5 Z: y0 ~4 S( G, w- f+ B
        ├─atd$ }% Z% ?% Q) N  t! X
        ├─avahi-daemon───avahi-daemon
9 ~' n  j: }3 }        ├─bluetoothd
2 u7 N8 c2 s" @+ H! z% ]+ \        ├─colord─┬─{gdbus}
) B9 t9 q& Z1 l' D2 f/ @        │        └─{gmain}5 K5 n0 u; g; A
        ├─cron; p7 |& ?5 J1 |7 O8 A
        ├─cups-browsed─┬─{gdbus}4 _$ @9 k1 e" F& K* [- q
        │              └─{gmain}
+ t. W( U2 x8 L2 @        ├─cupsd───3*[dbus]  {& G" r! q8 d' j/ C9 z" k8 q
        ├─dbus-daemon5 E) g& s9 [" j4 e) ]: E
        ├─gnome-keyring-d─┬─{gdbus}
4 J( g4 ~4 L2 Q        │                 ├─{gmain}
4 h4 H" |3 n6 H( T  S% F* H. V        │                 └─{timer}2 g" Z3 v  K7 N5 Y  c) m8 S8 @
(仅显示部分内容)
+ S4 I( Q& i) g: ^总结
2 B5 g$ W) Y6 y* ^+ L( O3 x6 c( j' O% G  x9 U8 `
实际上,前面所提到的很多相关命令信息都是从系统文件中获取的,例如/proc/meminfo保存了内存相关信息,/proc/net/dev保存网络流量相关信息。只是,它们都是静态数值,但是我们可以结合watch命令来动态地观察这些信息,例如:  j  d+ x  D& n5 E' r& Z( U! L
watch -n 1 cat /proc/meminfo . `( \/ @% p  _0 T: R) A
: q, k+ l; r; V, \) @
watch -n 1 cat /proc/net/dev
8 L0 m3 t7 ~! t& F; h% I上面的命令表示,每隔一秒执行一次cat /proc/meminfo或cat /proc/net/dev,因此我们可以看到内存信息或网卡流量信息在实时刷新。, ]0 ?* |. O* h' d
本文仅介绍这些命令的经典使用,更多使用可通过man 命令查看。通过前面这些系统自带命令,我们可以比较方便地监控系统状态,从而帮助我们维护系统或定位问题。欢迎留言补充或更正。

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

浏览记录|使用帮助|切到手机版|无忧得胜-网上国际课程 (https://5edu.win)

GMT+8, 2025-5-5 11:44 , Processed in 0.058523 second(s), 32 queries , Redis On.

搜索
快速回复 返回顶部 返回列表