使用w查看系统负载、 vmstat_top_sar_nload命令、监控io性能、free命令、ps命令、查看网络状态、linux下抓包、Linux网络相关

监控系统状态

  • w/uptime 查看系统负载
  • cat /proc/cpuinfo 查看cpu核数
  • vmstat 监控系统状态
  • 用法vmstat 1
  • 关键的几列:r,b,swpd,si,so,bi,bo,us,wa

  • top 查看进程使用资源情况

  • top -c 显示详细的进程信息
  • top -bn1 静态显示所有进程
  • q退出,数字1显示所有核cpu,大写字母M按内存排序
  • 大写字母P按cpu使用排序

一、使用w查看系统负载

w命令

w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。

查看系统负载(w)

[root@aming01 ~]# w
 22:09:19 up 0 min,  1 user,  load average: 0.55, 0.13, 0.04
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.0.101    22:09    5.00s  0.02s  0.01s w

第一行从左边开始显示的信息依次是:时间,系统运行时间,登录用户数,平均负载(1min平均负载、5min平均负载、15min平均负载)。
load average:平均负载,即单位时间内CPU活动进程数,这个值越大说明服务器压力越大,一般该值不超过cpu数量就可以。(0也不好,空跑,最理想状态看你有几个CPU,逻辑CPU)


查看服务器CPU数量有几个,命令:cat /proc/cpuinfo

查看processor项,如果是0,那就表示为一颗,如果为1,就2颗,逻辑CPU。

[root@aming01 ~]# cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 158
model name  : Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz
stepping    : 9
microcode   : 0x70
cpu MHz     : 3400.000
cache size  : 6144 KB
physical id : 0
siblings    : 1
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 22
wp      : yes

uptime命令
uptime命令能够打印系统总共运行了多长时间和系统的平均负载。uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。

注: uptime得到的信息和w第一行结果是一样的。

二、vmstat

vmstat 静态显示内存状态一次。

[root@aming01 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 1264800   2076 134300    0    0    12     1   45   46  0  0 100  0  0

vmstat n 以n秒每次的频率动态显示内存状态
vmstat n m 每n秒显示一次,显示m次后命令结束

[root@aming01 ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0      0 1264940   2076 134332    0    0    12     1   45   46  0  0 100  0  0
 0  0      0 1264924   2076 134332    0    0     0     0   48   46  0  0 100  0  0
 0  0      0 1264924   2076 134332    0    0     0     0   36   31  0  0 100  0  0
 0  0      0 1264924   2076 134332    0    0     0     0   42   38  0  0 100  0  0
 0  0      0 1264924   2076 134332    0    0     0     1   43   42  0  0 100  0  0
 0  0      0 1264924   2076 134332    0    0     0     0   50   42  0  0 100  0  0
 0  0      0 1264924   2076 134332    0    0     0     0   38   33  0  0 100  0  0
^C
[root@aming01 ~]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 1264940   2076 134332    0    0    12     1   45   46  0  0 100  0  0
 0  0      0 1264924   2076 134332    0    0     0     0   52   51  0  0 100  0  0
 0  0      0 1264924   2076 134332    0    0     0     0   39   36  0  0 100  0  0
 0  0      0 1264924   2076 134332    0    0     0     0   40   34  0  1 99  0  0
 0  0      0 1264924   2076 134332    0    0     0     0   45   41  0  0 100  0  0
[root@aming01 ~]#
  • proc 显示进程相关信息
    r:=run,表示运行中或等待cpu运行的进程数,如果该数长期大于服务器CPU个数,则说明CPU不够用了。
    b:表示等待资源的进程数。进程被CPU以外的资源,如硬盘网络等阻断了,如,等待I/O,内存等,这列的值如果长时间大于1,则需要关注一下。
  • proc 显示进程相关信息
    r:=run,表示运行中或等待cpu运行的进程数,如果该数长期大于服务器CPU个数,则说明CPU不够用了。
    b:表示等待资源的进程数,如,等待I/O,内存等,这列的值如果长时间大于1,则需要关注一下。
  • memory 内存相关信息
    swpd:表示切换到交换分区的内存量(当该数据不断变化时说明内存不足)
    free:表示当前空闲的内存量
    buff:缓冲大小
    cache:缓存大小
  • swap 内存交换情况
    si:=storage in,表示交换区写入到内存的数据量,有多少KB的数据从SWAP进入到内存中。
    so:=storage out,表示由内存写入到交换区的数据量,有多少KB的数据从内存出来
  • io 磁盘使用情况
    bi:=block in,表示从块设备读取数据(写入内存)的量(即:读磁盘),从磁盘出来到内存里去
    bo:=block out,表示(从内存读取)写入到块设备的数据(即:写磁盘)
    注: 此处数据会直接关系到proc出的b的值。
  • system 显示采集间隔内发生的中断次数
    in:表示在某一时间间隔中观测到的每秒设备中断数
    cs:表示每秒产生的上下文切换次数
  • CPU 显示CPU的使用状态(us+sy+id=100%)
    us:表示用户资源所花费CPU的百分比(当该值长时间>20、30时说明CPU数量不足,10以内比较好)
    sy:表示系统资源所花费CPU的百分比
    id:表示CPU处于空闲状态的百分比
    wa:=wait,表示等待使用CPU的百分比(该数值大说明CPU不足)
    st:表示被偷走的CPU所占百分比(该值一般为0,不用关注)

三、top命令

top查看进程使用资源情况


第一行是负载信息
第二行是进程信息
第三行是CPU使用信息
第四行是内存使用信息
第五行是交换区使用信息
最下面是进程详细信息:
PID:表示进程在系统中的id号,可配合kill命令结束某进程
RES:表示进程所用物理内存KB大小
%MEM:表示内存使用百分比,KB

[root@aming01 ~]# top
top - 17:49:19 up 3 min,  1 user,  load average: 0.04, 0.06, 0.03
Tasks:  89 total,   2 running,  87 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem :  1524248 total,  1261168 free,   126540 used,   136540 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1236816 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                             
    1 root      20   0  128164   6816   4048 S  0.0  0.4   0:01.30 systemd                             
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                            
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.03 ksoftirqd/0                         
    4 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0                         
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                        
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kworker/u128:0                      
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                         
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                              
    9 root      20   0       0      0      0 R  0.0  0.0   0:00.22 rcu_sched                           
   10 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 watchdog/0                          
   12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs                           
   13 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns        

这个命令用于动态监控进程所占系统资源,每隔3秒变一次。这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面

关注的也就是几项:%CPU, %MEM, COMMAND

top -c 显示详细的进程命令信息 (右侧)

   [root@aming01 ~]# top -c
top - 17:49:58 up 3 min,  1 user,  load average: 0.02, 0.05, 0.03
Tasks:  89 total,   1 running,  88 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1524248 total,  1261020 free,   126664 used,   136564 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1236668 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                             
  217 root      20   0       0      0      0 S  0.3  0.0   0:00.04 [kworker/0:3]                       
    1 root      20   0  128164   6816   4048 S  0.0  0.4   0:01.30 /usr/lib/systemd/systemd --switched+
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 [kthreadd]                          
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.03 [ksoftirqd/0]                       
    4 root      20   0       0      0      0 S  0.0  0.0   0:00.00 [kworker/0:0]                       
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 [kworker/0:0H]                      
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.01 [kworker/u128:0]                    
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 [migration/0]       

top -bn1 静态显示所有进程
q退出top,数字1显示所有核cpu
shift+m按内存使用排序
shift+p按cpu使用排序
kill+pid 杀死进程

四、sar命令

sar监控系统状态,它可以监控系统所有资源状态,比如平均负载、网卡流量、磁盘状态、内存使用等等。它不同于其他系统状态监控工具的地方在于,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。如果你系统没有安装这个命令,请使用 yum install -y sysstat 命令安装。初次使用sar命令会报错,那是因为sar工具还没有生成相应的数据库文件(每隔10分钟生成数据)。它的数据库文件在 “/var/log/sa/” 目录下,默认保存一个月 。

[root@aming01 ~]# yum install -y sysstat
已加载插件:fastestmirror
base                                                                             | 3.6 kB  00:00:00     
epel/x86_64/metalink                                                             | 5.0 kB  00:00:00     
epel                                                                             | 3.2 kB  00:00:00     
extras                                                                           | 3.4 kB  00:00:00     
updates                                                                          | 3.4 kB  00:00:00     
(1/3): epel/x86_64/updateinfo                                                    | 932 kB  00:00:00     
(2/3): epel/x86_64/primary                                                       | 3.5 MB  00:00:00     
(3/3): updates/7/x86_64/primary_db                                               | 2.0 MB  00:00:00     
Determining fastest mirrors
 * epel: mirrors.ustc.edu.cn
epel                                                                                        12581/12581
正在解决依赖关系

网卡流量:sar -n DEV

[root@aming01 ~]# sar -n DEV 1 10             #每间隔1秒统计一次,总计统计10次
Linux 3.10.0-693.el7.x86_64 (aming01)   20180611日     _x86_64_    (1 CPU)

175922IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
175923秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
175923秒     ens33      1.00      1.00      0.06      0.18      0.00      0.00      0.00

175923IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
175924秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
175924秒     ens33      1.01      1.01      0.06      0.40      0.00      0.00      0.00
  • IFACE这列表示设备名称,本地网卡接口的名称

  • rxpck/s 表示每秒进入收取的包的数量

  • txpck/s 表示每秒发送出去的包的数量

  • rxkb/s 表示每秒收取的数据量(单位Byte)

  • txkb/s表示每秒发送的数据量。
    后面几列不需要关注。如果有一天所管理的服务器丢包非常严重,那么就应该看一看这个网卡流量是否异常了,如果rxpck/s 那一列的数值大于4000,或者rxkbs/s那列大于5,000,000则很有可能是被攻击了,正常的服务器网卡流量不会高于这么多,除非是自己在拷贝数据。


    sar -q 系统负载,配合-f选项使用,查看历史负载

[root@aming01 ~]# sar -q 1 10             
Linux 3.10.0-693.el7.x86_64 (aming01)   20180611日     _x86_64_    (1 CPU)

175953秒   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
1759540       103      0.00      0.03      0.05         0
1759550       103      0.00      0.03      0.05         0
1759560       103      0.00      0.03      0.05         0
1759570       103      0.00      0.03      0.05         0

也可以查看某一天的网卡流量历史,使用-f选项,后面跟文件名,在系统格式Redhat或者CentOS版本中,sar的库文件一定是在/var/log/sa/目录下的,例如命令:sar -f /var/log/sa/saxx 历史文件 。


sar -b 磁盘读写

[root@aming01 ~]# sar -b
Linux 3.10.0-693.el7.x86_64 (aming01)   20180611日     _x86_64_    (1 CPU)

sar补充:用法很多,只学有用的。

-n 使用总结

-n DEV : 网络接口统计信息。

-n EDEV : 网络接口错误。

-n IP : IP数据报统计信息。

-n EIP : IP错误统计信息。

-n TCP : TCP统计信息。

-n ETCP : TCP错误统计信息。

-n SOCK : 套接字使用。

五、nload命令

安装:yum install –y epel-release; yum install –y nload
nload依赖于epel-release包。

以实时地监控网卡的流量,分Incoming,Outgoing两部分,也就是流入与流出的流量,,同时统计当前,平均,最小,最大,总流量的值,使人看了一目了然,直接用nload回车即可,也可以指定网卡,如nload eth1。向右箭头查看其它网卡的网络流量。q退出。

[root@aming01 ~]# yum install –y nload
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * epel: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 nload.x86_64.0.0.7.4-4.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

默认监测的是eth0网卡,如果有需要可以在后面加网卡名,例如:nload ens33

[root@aming01 ~]# nload

Device ens33 [192.168.0.115] (1/2):
========================================================================================================
Incoming:


                                                                       Curr: 952.00 Bit/s
                                                                       Avg: 1016.00 Bit/s
                                                                       Min: 944.00 Bit/s
                                                                       Max: 1.86 kBit/s
                                                                       Ttl: 7.28 MByte

Incoming是进入网卡的流量
Outgoing是从这块网卡出去的流量

  • 当前流量(Curr)
  • 平均流量(Avg)
  • 最小流量(Min)
  • 最大流量(Max)
  • 流量总和(Ttl)

六、监控io性能

读写IO(Read/Write IO)操作

磁盘是用来给我们存取数据用的,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据时候对应的是写IO操作,取数据的时候对应的是是读IO操作。

iostat和sar属于同一个包sysstat。

iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

iostat和sar –b命令效果差不多,主要用iostat –x选项。

[root@aming01 ~]# iostat
Linux 3.10.0-693.el7.x86_64 (aming01)   20180611日     _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.28    0.00    0.55    1.10    0.00   98.07

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               3.85       111.09        60.80     180559      98821
sdb               0.15         2.20         0.00       3580          0
scd0              0.01         0.63         0.00       1028          0
dm-0              0.03         0.64         0.00       1036          0

tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。”一次传输”意思是”一次I/O请求”。多个逻辑请求可能会被合并为”一次I/O请求”。”一次传输”请求的大小是未知的。

kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;

iostat比较常用的选项-x,该选项将用于显示和io相关的扩展数据。

[root@aming01 ~]# iostat -x
Linux 3.10.0-693.el7.x86_64 (aming01)   20180611日     _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.27    0.00    0.54    1.10    0.00   98.08

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.21    2.73    1.23   108.67    60.54    85.49     0.16   40.43   15.31   96.47   5.09   2.01
sdb               0.00     0.00    0.15    0.00     2.12     0.00    28.99     0.00    3.82    3.82    0.00   2.99   0.04
scd0              0.00     0.00    0.01    0.00     0.61     0.00   114.22     0.00   35.28   35.28    0.00  34.94   0.04
dm-0              0.00     0.00    0.03    0.00     0.61     0.00    48.19     0.00    3.14    3.14    0.00   2.95   0.01

rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。

r/s:每秒完成的读 I/O 设备次数。即 delta(rio)/s

w/s:每秒完成的写 I/O 设备次数。即 delta(wio)/s

rsec/s:每秒读取的扇区数;

wsec/:每秒写入的扇区数。

rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)

wkB/s:每秒写K字节数。是 wsect/s 的一半。(需要计算)

avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)

avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。毫无疑问,队列长度越短越好。

await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。即 delta(ruse+wuse)/delta(rio+wio)

这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。

svctm:表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。。即 delta(use)/delta(rio+wio)
%util: 在统计时间内所有处理IO时间,除以总共统计时间。即 delta(use)/s/1000 (因为use的单位为毫秒)。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈。

常用命令

iostat -d -k 2参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;2表示,数据显示每隔2秒刷新一次。

kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。

iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盘读写速度单位为KB)

iostat -d -m 2 #查看TPS和吞吐量信息(磁盘读写速度单位为MB)

iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await) iostat -c 1 10 #查看cpu状态

iotop命令

iotop命令:yum安装, yum install iotop

iotop是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘IO的信息

[root@aming01 ~]# yum install -y iotop
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * epel: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 iotop.noarch.0.0.6-2.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

这个命令主要关注的是“IO>“ 这一列,表示进程占用磁盘IO的百分比

-d选项指定信息刷新的时间,单位为秒

iotop命令的键盘快捷键:

左右箭头改变排序方式,默认是按IO排序

r键是反向排序

o键是只显示有IO输出的进程

同样q是退出

七、free命令

free命令查看内存使用状况

[root@aming01 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1524248      130056     1083180        8764      311012     1207764
Swap:       2097148           0     2097148
  • total:总计物理内存的大小。

  • used:真正使用的实际内存大小

  • free:剩余物理内存大小(没有被分配,纯剩余)。

  • Shared:多个进程共享的内存总额。

  • Buffers/cached:磁盘缓存的大小。

第三行是交换分区SWAP的,也就是我们通常所说的虚拟内存。

分配给buffer和cache的内存总共有多大。buffer和cache都是一部分内存,内存的作用是缓解CPU和IO的速度差距的。数据经过CPU计算,即将写入磁盘,这时用的内存为buffer;CPU要计算时,需要把数据从磁盘中读出来,临时先放到内存中,这部分内存就是cache。

所以从应用程序的角度来说,total=used+free+buff/cathe

available:系统可使用内存有多大,包含了free。Linux系统为了让应用跑的更快,会预先分配一部分内存(buffer/cache)给某些应用使用,虽然这部分内存并没有真正使用,但也已经分配出去了。然而,当另外一个服务要使用更多内存时,是可以把这部分预先分配的内存拿来用的,所以还没有被占用的这部分buffer和cache再加上free就是available。

八、ps命令

ps命令查看系统进程,作为系统管理员,想查看所管理的系统都有那些进程在运行,在windows下只要打开任务管理器即可查看。在linux下,除了top命令,还有专门显示系统进程的命令

[root@aming01 ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.4 128164  6824 ?        Ss   17:46   0:01 /usr/lib/systemd/systemd --switched-roo
root         2  0.0  0.0      0     0 ?        S    17:46   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    17:46   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   17:46   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    17:46   0:00 [kworker/u128:0]

ps -elf 大同小异,显示的信息基本上是一样的。

PID :进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用 ‘kill 进程的pid 有时并不能杀掉,则需要加一个-9选项了 kill -9 进程pid

STAT :表示进程的状态,进程状态分为以下几种(不要求记住,但要了解)

D 不能中断的进程(通常为IO)

R 正在运行中的进程

S 已经中断的进程,通常情况下,系统中大部分进程都是这个状态

T 已经停止或者暂停的进程,如果我们正在运行一个命令,比如说 sleep 10 如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态

W 这个好像是说,从内核2.6xx 以后,表示为没有足够的内存页分配

X 已经死掉的进程(这个好像从来不会出现)

Z 僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。

< 高优先级进程

N 低优先级进程

L 在内存中被锁了内存分页

s 主进程

l 多线程进程

  • 代表在前台运行的进程

ps命令常会连同管道符一起使用,用来查看某个进程或者它的数量。

[root@aming01 ~]# ps aux |grep -c sshd
3
[root@aming01 ~]# ps aux |grep  sshd
root       886  0.0  0.2 105996  4072 ?        Ss   17:46   0:00 /usr/sbin/sshd -D
root       997  0.0  0.3 145700  5216 ?        Ss   17:47   0:00 sshd: root@pts/0
root      1366  0.0  0.0 112676   984 pts/0    R+   18:23   0:00 grep --color=auto sshd

3-1,grep命令本身也算一个进程

九、查看网络状态

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等。

在 Internet RFC 标准中,Netstat 的定义是: Netstat 是在内核中访问网络及相关信息的程序,它能提供 TCP 连接,TCP 和 UDP 监听,进程内存管理的相关报告。

常用的是netstat -lnp (打印当前系统启动哪些端口)和netstat -an (打印网络连接状况)netstat -lntp 只看出tcp的,不包含socket

[root@aming01 ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      886/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      970/master          
tcp6       0      0 :::22                   :::*                    LISTEN      886/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      970/master          
raw6       0      0 :::58                   :::*                    7           592/NetworkManager  
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     STREAM     LISTENING     18502    970/master           private/tl

协议(Proto):TCP,指是传输层通讯协议

本地机器名(Local Address):Eagle,俗称计算机名了,安装系统时设置的,可以在”我的电脑”属性中修改,本地打开并用于连接的端口:22)

远程机器名(Foreign Address)

状态列表:

LISTEN :在监听状态中。

ESTABLISHED:已建立联机的联机情况。

TIME_WAIT:该联机在目前已经是等待的状态。

常用选项:

-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名

-a (all)显示所有选项,默认不显示LISTEN相关

-t (tcp)仅显示tcp相关选项

-u (udp)仅显示udp相关选项

-r 显示路由信息,路由表

-e 显示扩展信息,例如uid等

-s 按各个协议进行统计

-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

ss -an 和nestat异曲同工

十、linux下抓包

tcpdump命令是一款抓包工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析。
安装命令:yum install -y tcpdump

[root@aming01 ~]# yum install -y tcpdump
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * epel: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 tcpdump.x86_64.14.4.9.2-3.el7 将被 安装
--> 正在处理依赖关系 libpcap >= 14:1.5.3-10,它被软件包 14:tcpdump-4.9.2-3.el7.x86_64 需要
--> 正在处理依赖关系 libpcap.so.1()(64bit),它被软件包 14:tcpdump-4.9.2-3.el7.x86_64 需要
--> 正在检查事务
---> 软件包 libpcap.x86_64.14.1.5.3-11.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

tcpdump -nn -i ens33

-nn选项的作用是IP的端口都以数字的形式显示。不使用-nn选项的话有些时候会显示协议名等信息

[root@aming01 ~]# tcpdump -nn -i ens33 -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
18:31:09.881660 IP 192.168.0.115.22 > 192.168.0.112.54349: Flags [P.], seq 917460946:917461158, ack 2668725910, win 296, length 212
18:31:09.881822 IP 192.168.0.112.54349 > 192.168.0.115.22: Flags [.], ack 212, win 2053, length 0
18:31:09.882029 IP 192.168.0.115.22 > 192.168.0.112.54349: Flags [P.], seq 212:504, ack 1, win 296, length 292
18:31:09.882135 IP 192.168.0.115.22 > 192.168.0.112.54349: Flags [P.], seq 504:668, ack 1, win 296, length 164
18:31:09.882214 IP 192.168.0.112.54349 > 192.168.0.115.22: Flags [.], ack 668, win 2051, length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel

时间,IP 源IP.端口 > 目标IP.端口 数据包标签[],数据包类型、长度等信息

监视指定端口的数据包

[root@aming01 ~]# tcpdump -nn -i ens33 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
18:32:35.247419 IP 192.168.0.112.56385 > 223.94.95.10.80: Flags [S], seq 2767997675, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
18:32:35.286635 IP 223.94.95.10.80 > 192.168.0.112.56385: Flags [S.], seq 4168554952, ack 2767997676, win 14600, options [mss 1452,nop,nop,sackOK,nop,wscale 7], length 0
18:32:35.286641 IP 192.168.0.112.56385 > 223.94.95.10.80: Flags [.], ack 1, win 260, length 0
18:32:35.286857 IP 192.168.0.112.56385 > 223.94.95.10.80: Flags [P.], seq 1:1274, ack 1, win 260, length 1273: HTTP: POST /student/periodic_updater.php?HTTP_REFERER=http%3A%2F%2Fv.apelearn.com%2Fstudent.php%3Fview_unit%3D1742 HTTP/1.1

tcpdump -nn port 22//这样指定只抓22端口的包

tcpdump -nn not port 22 and host 192.168.0.100 指定抓tcp的包,但是不要22端口的

tcpdump -nn -c 100 -w /tmp/1.cap //抓一百个包写入/tmp/1.cap文件,这个文件要用tcpdump -r /tmp/1.cap查看

wireshark工具

tshark

tshark是和tcpdump相似的工具

安装命令:yum install -y wireshark

[root@aming01 ~]# yum install -y wireshark
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * epel: mirrors.ustc.edu.cn
正在解决依赖关系

这条命令用于web服务器。类似于web访问日志,若服务器没有配置访问日志,可以临时使用该命令查看一下当前服务器上的web请求。在这里要注意的是,如果你的机器上没有开启web服务,是不会显示任何内容的。

tshark –n –i ens33 –R ‘mysql.query’ –T fields –e “ip.src” –e “mysql.query”

上面的命令会抓取ens33网卡mysql的查询有哪些,不过这种方法仅仅适用于mysql的端口为3306的情况,如果不是3306,使用下面的方法。

tshark –i ens33 port 3307 –d tcp.port==3307,mysql –z “proto,colinfo,mysql.query,mysql.query”

十一、linux网络相关

ifconfig命令查看网卡ip

系统没有该命令需安装net-tools

[root@aming01 ~]# yum install -y  net-tools
已加载插件:fastestmirror

ifconfig -a显示所有网卡信息

[root@aming01 ~]# ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.115  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::e009:8425:90b5:4c23  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:e3:f5:65  txqueuelen 1000  (Ethernet)
        RX packets 30411  bytes 27542041 (26.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 29436  bytes 7219414 (6.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

关闭/启动网卡
ifup/ifdown 网卡名

PS:如果是远程连接的话,关闭和启动网卡的操作必须同时执行,否则会导致无法再远程连接上,网卡正在使用中,不要单独使用ifdown命令
使用: ifdown ens33 && ifup ens33

增加虚拟网卡

进入网卡配置目录

[root@aming01 ~]# cd /etc/sysconfig/network-scripts/
[root@aming01 network-scripts]# 

复制一份网卡配置文件

[root@aming01 network-scripts]# cp ifcfg-ens33 ifcfg-ens33\:0

修改ifcfg-ens33:0配置文件

[root@aming01 network-scripts]# vi ifcfg-ens33:0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33:0
UUID=01209878-ac3f-4a6f-be40-0466aebb8ed3
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.0.116
NETMASK=255.255.255.0

重启ens33网卡后检查ens33:0网卡是否添加成功

[root@aming01 network-scripts]# ifdown ens33 && ifup ens33
成功断开设备 'ens33'。
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)
[root@aming01 network-scripts]# ifconfig ens33:0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.116  netmask 255.255.255.0  broadcast 192.168.0.255
        ether 00:0c:29:e3:f5:65  txqueuelen 1000  (Ethernet)

查看网卡信息

[root@aming01 network-scripts]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.115  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::e009:8425:90b5:4c23  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:e3:f5:65  txqueuelen 1000  (Ethernet)
        RX packets 31192  bytes 27610095 (26.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 29900  bytes 7276638 (6.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.116  netmask 255.255.255.0  broadcast 192.168.0.255
        ether 00:0c:29:e3:f5:65  txqueuelen 1000  (Ethernet)

CMD下查看是否能Ping通

[root@aming01 network-scripts]# ping 192.168.0.116
PING 192.168.0.116 (192.168.0.116) 56(84) bytes of data.
64 bytes from 192.168.0.116: icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from 192.168.0.116: icmp_seq=2 ttl=64 time=0.035 ms
64 bytes from 192.168.0.116: icmp_seq=3 ttl=64 time=0.034 ms
64 bytes from 192.168.0.116: icmp_seq=4 ttl=64 time=0.034 ms

查看网卡是否连接

mii-tool ens33 查看网卡是否连接

[root@aming01 network-scripts]# mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control, link ok

或者用ethtool查看

[root@aming01 network-scripts]# ethtool ens33
Settings for ens33:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Supported pause frame use: No
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Advertised pause frame use: No
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    MDI-X: off (auto)
    Supports Wake-on: d
    Wake-on: d
    Current message level: 0x00000007 (7)
                   drv probe link
    Link detected: yes

更改主机名

[root@aming01 network-scripts]# hostnamectl set-hostname han01
[root@aming01 network-scripts]# hostname
han01
[root@aming01 network-scripts]# cat /etc/hostname
han01

重启后就会生效

DNS配置

DNS配置文件:/etc/resolv.conf

[root@aming01 network-scripts]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 119.29.29.29

更改网卡配置即可更改DNS配置文件,更改后需要重启网卡(ifdown/ifup)后生效,也可编辑‘/etc/resolv.conf’临时更改DNS配置,该办法在重启网卡后会被网卡配置文件中的DNS覆盖。

本地域名配置文件文件:/etc/hosts

[root@aming01 network-scripts]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

使用vi命令可在该配置文件下可以自定义IP所对应的域名(一个IP对应多个域名或一个域名对应多个IP,用空格隔开,当一个域名对应多个IP时,以配置文件中靠后面的配置为准),但是该域名配置只在本机生效。

扩展:

tcp三次握手四次挥手(重点) http://www.doc88.com/p-9913773324388.html
tshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html

猜你喜欢

转载自blog.csdn.net/iamfishhh/article/details/80623327