第十三课预习内容

10.1 使用w查看系统负载
10.2 vmstat命令
10.3 top命令
10.4 sar命令
10.5 nload命令
10.6 监控io性能
10.7 free命令
10.8 ps命令
10.9 查看网络状态
10.10 linux下抓包
10.11 Linux网络相关

一个系统管理员除了前面的基础知识,我们还要学会对系统进行正常的监控,随时可以发现问题,并及时处理问题!

1. 使用w查看系统负载

[root@localhost ~]# w
 02:52:54 up 4 days,  4:50,  1 user,  load average: 0.03, 0.03, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    knight-pc.airdre 00:36    6.00s  0.41s  0.04s w

1.第一行显示系统的汇总信息,字段分别表示系统当前时间、系统运行时间、登陆内用户总数及系统平均负载信息。对于上述几个显示数据意义为:

02:52:54 表示执行W的时间是在下午2点52分。

up 4 days,  4:50 表示系统运行4天零4小时50分。

4 USERS 表示当前系统登陆用户总数。

LOAD AVERAGE 与后面的数字一起表示系统在过去1,5,10分钟内的负载程度,数值越小,系统负载越轻。

从第二行开始构成一个表格,共有8个栏目,分别显示各个用户正在做的事情及该用户所占用的系统资料。

USER:显示登陆用户帐号名。用户重复登陆,该帐号也会重复出现。

TTY:用户登陆所用的终端。

FROM:显示用户在何处登陆系统。

LOGIN@:是LOGIN AT的意思,表示登陆进入系统的时间。

IDLE:用户空闲时间,从用户上一次任务结束后,开会记时。

JCPU:一终端代号来区分,表示在摸段时间内,所有与该终端相关的进程任务所耗费的CPU时间。

PCPU:指WHAT域的任务执行后耗费的CPU时间。

WHAT:表示当前执行的任务。

2. vmstat命令

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。

[root@localhost ~]# 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 126288  12796 711020    0    0     1     6   58   67  0  0 100  0  0
r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b 表示阻塞的进程。

swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free   空闲的物理内存的大小

buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存.

cache cache直接用来记忆我们打开的文件,给文件做缓冲,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。

so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0。

bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

in 每秒CPU的中断次数,包括时间中断

cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

us 用户CPU时间。

sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt 等待IO CPU时间。

3. top命令

3.1 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.

3.2 下面我们来看一下top命令

[root@localhost ~]# top
top - 03:06:17 up 4 days,  5:03,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  94 total,   2 running,  92 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   997956 total,   125792 free,   148160 used,   724004 buff/cache
KiB Swap:  4954104 total,  4954104 free,        0 used.   604276 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                       
   860 root      20   0  573820  17240   6140 S  0.3  1.7   0:56.89 tuned                                                                         
 60906 root      20   0  156656   5540   4196 S  0.3  0.6   0:01.49 sshd                                                                          
 65481 root      20   0       0      0      0 S  0.3  0.0   0:01.08 kworker/0:1                                                                   
     1 root      20   0  127928   6604   4120 S  0.0  0.7   1:10.29 systemd                                                                       
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.07 kthreadd                                                                      
     3 root      20   0       0      0      0 S  0.0  0.0   0:07.48 ksoftirqd/0                                                                   
     5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                                                  
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.10 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   1:47.55 rcu_sched                                                                     
    10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain                                                                 
    11 root      rt   0       0      0      0 S  0.0  0.0   0:05.67 watchdog/0                                                                    
    13 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kdevtmpfs                                                                     
    14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns                                                                         
    15 root      20   0       0      0      0 S  0.0  0.0   0:00.15 khungtaskd                                                                    
    16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback                                                                     
    17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd                                                                   
    18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                                        
    19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kblockd                                                                       
    20 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 md                                                                            
    21 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 edac-poller                                                                   
    27 root      20   0       0      0      0 S  0.0  0.0   0:01.53 kswapd0                                                                       
    28 root      25   5       0      0      0 S  0.0  0.0   0:00.00 ksmd                                                                          
    29 root      39  19       0      0      0 S  0.0  0.0   0:02.14 khugepaged                                                                    
    30 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 crypto   

3.3  第一行是任务队列信息和w查看的一样的。

3.4 第二、三行为进程和CPU的信息,当有多个CPU时,这些内容可能会超过两行

Tasks: 94 total 进程总数
2 running 正在运行的进程数
92 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.0% us 用户空间占用CPU百分比
0.3 sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
99.7 id 空闲CPU百分比
0.0 wa 等待输入输出的CPU时间百分比
0.0 hi  CPU服务于硬中断所耗费的时间总额
0.0 si、0.0 st  CPU服务于软中断所耗费的时间总额、Steal Time

3.5 最后两行为内存信息

Mem: 997956k total 物理内存总量
148160k used 使用的物理内存总量
125792k free 空闲内存总量
724004k buffers 用作内核缓存的内存量
Swap: 4954104k total 交换区总量
0k used 使用的交换区总量
4954104k free 空闲交换区总量
604276k cached 缓冲的交换区总量.
            内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
            该数值即为这些内容已存在于内存中的交换区的大小.
            相应的内存再次被换出时可不必再对交换区写入.

3.6 进程信息区统计信息区域的下方显示了各个进程的详细信息.

序号 列名 含义
1 PID 进程id
2 USER 进程所有者的用户名
3 PR 优先级
4 NI nice值.负值表示高优先级,正值表示低优先级
5 %CPU 上次更新到现在的CPU时间占用百分比
6 TIME+ 进程使用的CPU时间总计,单位1/100秒
7 %MEM 进程使用的物理内存百分比
8 VIRT 进程使用的虚拟内存总量,单位kb,VIRT=SWAP+RES
9 RES 进程使用的、未被换出的物理内存大小,单位kb,RES=CODE+DATA
10 SHR 共享内存大小,单位kb
11 S 进程状态:
            D=不可中断的睡眠状态
            R=运行
            S=睡眠
            T=跟踪/停止
            Z=僵尸进程
12 COMMAND 命令名/命令行

4. sar命令

4.1 sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、 系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。

4.2 sar安装:yum install sysstat

4.3 sar命令常用格式

sar [options] [-A] [-o file] t [n]

其中:

t为采样间隔,n为采样次数,默认值是1;

-o file表示将命令结果以二进制格式存放在文件中,file 是文件名。

options 为命令行选项,sar命令常用选项如下:

-A:所有报告的总和

-u:输出CPU使用情况的统计信息

-v:输出inode、文件和其他内核表的统计信息

-d:输出每一个块设备的活动信息

-r:输出内存和交换空间的统计信息

-b:显示I/O和传送速率的统计信息

-a:文件读写情况

-c:输出进程统计信息,每秒创建的进程数

-R:输出内存页面的统计信息

-y:终端设备活动情况

-w:输出系统交换活动信息

4.4 sar -n DEV 查看网络接口信息。

[root@localhost ~]# sar -n DEV 1 10
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 	08/05/2018 	_x86_64_	(1 CPU)

04:02:23 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:02:24 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:02:24 AM     ens33      2.02      1.01      0.12      0.20      0.00      0.00      0.00

04:02:24 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:02:25 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:02:25 AM     ens33      2.00      1.00      0.12      0.38      0.00      0.00      0.00

DEV :磁盘设备

IFACE :LAN接口。
rxpck/s :每秒钟接收的数据包。
txpck/s :每秒钟发送的数据包。
rxkB/s :每秒钟接收的字节数。
txkB/s :每秒钟发送的字节数。
rxcmp/s :每秒钟接收的压缩数据包。
txcmp/s :每秒钟发送的压缩数据包。
rxmcst/s :每秒钟接收的多播数据包

5.nload命令

5.1nload是个很好用的一个工具,功能也很强.只是相对单一,只能查看总的流量,可以实时地监控网卡的流量,分Incoming,Outgoing两部分,也就是流入与流出的流量。同时统计当前,平均,最小,最大,总流量的值,使人看了一目了然。

5.2 nload安装:yum install -y nload

5.3默认上边Incoming是进入网卡的流量; 
默认下边Outgoing是网卡出去的流量; 
默认右边(Curr当前流量)、(Avg平均流量)、(Min最小流量)、(Max最大流量)、(Ttl流量统计)

nload   网卡名称  -u  以什么单位显示

5.4 nload 参数

  1. -a:这个是全部数据的刷新时间周期,单位是秒,默认是300.
  2. -i:进入网卡的流量图的显示比例最大值设置,默认10240 kBit/s.
  3. -m:不显示流量图,只显示统计数据。
  4. -o:出去网卡的流量图的显示比例最大值设置,默认10240 kBit/s.
  5. -t:显示数据的刷新时间间隔,单位是毫秒,默认500。
  6. -u:设置右边Curr、Avg、Min、Max的数据单位,默认是自动变的.注意大小写单位不同!
  7. h|b|k|m|g h: auto, b: Bit/s, k: kBit/s, m: MBit/s etc.
  8. H|B|K|M|G H: auto, B: Byte/s, K: kByte/s, M: MByte/s etc.
  9. -U:设置右边Ttl的数据单位,默认是自动变的.注意大小写单位不同(与-u相同)!
  10. Devices:自定义监控的网卡,默认是全部监控的,使用左右键切换。

6.监控io性能

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

[root@localhost ~]# iostat -x
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 	08/05/2018 	_x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.02    0.00    0.14    0.02    0.00   99.83

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.04    0.03    0.07     0.64     5.26   123.12     0.01  127.78    6.35  171.51   4.09   0.04
sdb               0.00     0.09    0.01    0.00     0.26     0.55   151.87     0.00    3.70    3.77    3.33   2.68   0.00
scd0              0.00     0.00    0.00    0.00     0.01     0.00    96.08     0.00    5.68    5.68    0.00   5.16   0.00
dm-0              0.00     0.00    0.00    0.00     0.03     0.03    26.70     0.00    1.69    0.91    1.99   0.29   0.00
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s:每秒读取的扇区数;
wsec/:每秒写入的扇区数。
rKB/s:The number of read requests that were issued to the device per second;
wKB/s:The number of write requests that were issued to the device per second;
avgrq-sz 平均请求扇区的大小
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。    
await:  每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm    表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,         系统上运行的应用程序将变慢。
%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

6.2 iotop

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

这里重点指标是svctm和util这两列

svctm指的是“平均每次设备I/O操作的服务时间 (毫秒)”,而util指的是“一秒中I/O 操作的利用率,或者说一秒中有多少时间 I/O 队列是非空的。”

7.free命令

7.1  free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer

7.2

[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:         997956      144352      140480        7716      713124      610224
Swap:       4954104         264     4953840

Mem 行(第二行)是内存的使用情况。
Swap 行(第三行)是交换空间的使用情况。
total 列显示系统总的可用物理内存和交换空间大小。
used 列显示已经被使用的物理内存和交换空间。
free 列显示还有多少物理内存和交换空间可用使用。
shared 列显示被共享使用的物理内存大小。
buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。
available 列显示还可以被应用程序使用的物理内存大小。

7.3free 命令参数:

-b  以Byte为单位显示内存使用情况。 

-k  以KB为单位显示内存使用情况。 

-m  以MB为单位显示内存使用情况。

-g   以GB为单位显示内存使用情况。 

-o  不显示缓冲区调节列。 

-s<间隔秒数>  持续观察内存使用状况。 

-t  显示内存总和列。 

-V  显示版本信息。 

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            974         140         137           7         696         596
Swap:          4837           0        4837
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           974M        140M        137M        7.5M        696M        596M
Swap:          4.7G        264K        4.7G

8.ps命令

8.1要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令就是最基本进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到。ps是显示瞬间进程的状态,并不动态连续.

8.2 参数:

  • -A :所有的进程均显示出来,与 -e 具有同样的效用;
  • -a : 显示现行终端机下的所有进程,包括其他用户的进程;
  • -u :以用户为主的进程状态 ;
  • x :通常与 a 这个参数一起使用,可列出较完整信息。

8.3 

8.4 列出目前所有的正在内存当中的程序

[root@localhost ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.6 127928  6608 ?        Ss   Jul31   1:15 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    Jul31   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    Jul31   0:08 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   Jul31   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    Jul31   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    Jul31   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        R    Jul31   1:53 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S<   Jul31   0:00 [lru-add-drain]
root         11  0.0  0.0      0     0 ?        S    Jul31   0:05 [watchdog/0]
root         13  0.0  0.0      0     0 ?        S    Jul31   0:00 [kdevtmpfs]
root         14  0.0  0.0      0     0 ?        S<   Jul31   0:00 [netns]
root         15  0.0  0.0      0     0 ?        S    Jul31   0:00 [khungtaskd]
  • USER:该进程属于那个使用者账号。
  • PID :该进程的进程ID号。
  • %CPU:该进程使用掉的 CPU 资源百分比;
  • %MEM:该进程所占用的物理内存百分比;
  • VSZ :该进程使用掉的虚拟内存量 (Kbytes)
  • RSS :该进程占用的固定的内存量 (Kbytes)
  • TTY :该进程是在那个终端机上面运作,若与终端机无关,则显示 ?。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。

9.查看网络状态

9.1 netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的

      netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。

9.2 netstat 命令格式:

      -a 显示所有socket,包括正在监听的。

      -c 每隔1秒就重新显示一遍,直到用户中断它。

      -i 显示所有网络接口的信息,格式同“ifconfig -e”。

      -n 以网络IP地址代替名称,显示出网络连接情形。

      -r 显示核心路由表,格式同“route -e”。

      -t 显示TCP协议的连接情况。

      -u 显示UDP协议的连接情况。

      -v 显示正在进行的工作。

9.3 netstat -lpn 查看监听端口

[root@localhost ~]# 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      865/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1015/master         
tcp6       0      0 :::22                   :::*                    LISTEN      865/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1015/master         
udp        0      0 127.0.0.1:323           0.0.0.0:*                           513/chronyd         
udp6       0      0 ::1:323                 :::*                                513/chronyd         
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     STREAM     LISTENING     13060    1/systemd            /run/systemd/private
unix  2      [ ACC ]     STREAM     LISTENING     19750    1015/master          public/flush
unix  2      [ ACC ]     STREAM     LISTENING     19731    1015/master          private/tlsmgr
unix  2      [ ACC ]     STREAM     LISTENING     19735    1015/master          private/rewrite
unix  2      [ ACC ]     STREAM     LISTENING     23943    1/systemd            /run/lvm/lvmpolld.socket
unix  2      [ ACC ]     STREAM     LISTENING     19738    1015/master          private/bounce
unix  2      [ ACC ]     STREAM     LISTENING     19741    1015/master          private/defer
unix  2      [ ACC ]     STREAM     LISTENING     19744    1015/master          private/trace
unix  2      [ ACC ]     STREAM     LISTENING     19747    1015/master          private/verify
unix  2      [ ACC ]     STREAM     LISTENING     19753    1015/master          private/p

9.4 netstat -an  //查看系统网络连接状态

[root@localhost ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0     52 192.168.139.168:22      192.168.139.135:55656   ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
udp        0      0 127.0.0.1:323           0.0.0.0:*                          
udp6       0      0 ::1:323                 :::*                               
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     13060    /run/systemd/private
unix  2      [ ]         DGRAM                    16435    /var/run/chrony/chronyd.sock
unix  2      [ ACC ]     STREAM     LISTENING     19750    public/flush
unix  2      [ ACC ]     STREAM     LISTENING     19731    private/tlsmgr
unix  2      [ ACC ]     STREAM     LISTENING     19735    private/rewrite
unix  2      [ ACC ]     STREAM     LISTENING     23943    /run/lvm/lvmpolld.socket
unix  2      [ ACC ]     STREAM     LISTENING     19738    private/bounce
unix  2      [ ACC ]     STREAM     LISTENING     19741    private/defer
unix  2      [ ACC ]     STREAM     LISTENING     19744    private/trace
unix  2      [ ACC ]     STREAM     LISTENING     19747    private/verify

9.5 netstat -lntp //只看出tcp的,不包含sockets

[root@localhost ~]# netstat -lntp
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      865/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1015/master         
tcp6       0      0 :::22                   :::*                    LISTEN      865/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1015/master 

9.6 ss-an 和netstat有相同的用处

[root@localhost ~]# ss -an
Netid State      Recv-Q Send-Q                          Local Address:Port                                         Peer Address:Port              
nl    UNCONN     0      0                                           0:838861332                                                *                   
nl    UNCONN     0      0                                           0:0                                                        *                   
nl    UNCONN     0      0                                           0:838861332                                                *                   
nl    UNCONN     4352   0                                           4:86889                                                    *                   
nl    UNCONN     768    0                                           4:0                                                        *                   
nl    UNCONN     0      0                                           6:0                                                        *                   
nl    UNCONN     0      0                                           7:0                                                        *                   
nl    UNCONN     0      0                                           7:501                                                      *                   
nl    UNCONN     0      0                                           7:1                                                        *                   
nl    UNCONN     0      0                                           7:501                                                      *                   
nl    UNCONN     0      0                                           7:1                                                        *                   
nl    UNCONN     0      0                                           9:0                                                        *                   
nl    UNCONN     0      0                                           9:1                                                        *                   
nl    UNCONN     0      0                                           9:476                                                      *                   
nl    UNCONN     0      0                                           9:501                                                      *         

10.linux下抓包

10.1 tcpdump:tcpdump是Linux下面的一个开源的抓包工具,和Windows下面的wireshark抓包工具一样, 支持抓取指定网口、指定目的地址、指定源地址、指定端口、指定协议的数据。

10.2 安装tcpdump  yum install -y tcpdump

10.3 监视指定网络接口的数据包

[root@localhost ~]# tcpdump -i ens33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
10:01:55.812602 IP 59.63.235.194.https > knight-PC.AirDream.64689: Flags [P.], seq 4049274694:4049274725, ack 147727264, win 1054, length 31
10:01:55.812607 IP 59.63.235.194.https > knight-PC.AirDream.64689: Flags [F.], seq 31, ack 1, win 1054, length 0
10:01:55.818629 IP knight-PC.AirDream.64689 > 59.63.235.194.https: Flags [.], ack 32, win 16266, length 0
10:01:55.825671 IP localhost.localdomain.57693 > vrouter.domain: 36985+ PTR? 135.139.168.192.in-addr.arpa. (46)
10:01:55.825795 IP localhost.localdomain.57693 > vrouter.domain: 36985+ PTR? 135.139.168.192.in-addr.arpa. (46)
10:01:55.826032 IP localhost.localdomain.ssh > knight-PC.AirDream.55656: Flags [P.], seq 98163643:98163855, ack 336353241, win 337, length 212
10:01:55.826288 IP localhost.localdomain.ssh > knight-PC.AirDream.55656: Flags [P.], seq 0:212, ack 1, win 337, length 212
10:01:55.826292 IP knight-PC.AirDream.55656 > localhost.localdomain.ssh: Flags [.], ack 212, win 16307, length 0
10:01:55.826816 IP vrouter.domain > localhost.localdomain.57693: 36985* 1/0/0 PTR knight-PC.AirDream. (78)

10.4 监听指定端口的数据

[root@localhost ~]# tcpdump -nn port 22  -i ens33
10:14:34.325834 IP 192.168.139.135.55656 > 192.168.139.168.22: Flags [.], ack 4621528, win 3867, length 0
10:14:34.325854 IP 192.168.139.168.22 > 192.168.139.135.55656: Flags [P.], seq 4621528:4621836, ack 781, win 337, length 308
10:14:34.326023 IP 192.168.139.168.22 > 192.168.139.135.55656: Flags [P.], seq 4621528:4621836, ack 781, win 337, length 308
10:14:34.326089 IP 192.168.139.168.22 > 192.168.139.135.55656: Flags [P.], seq 4621836:4622256, ack 781, win 337, length 420
10:14:34.326249 IP 192.168.139.168.22 > 192.168.139.135.55656: Flags [P.], seq 4621836:4622256, ack 781, win 337, length 420

10.5 监听指定的主机

[root@localhost ~]# tcpdump -i ens33 -nn 'host 192.168.139.168'
10:18:34.493232 IP 192.168.139.135.55656 > 192.168.139.168.22: Flags [.], ack 2873812, win 15151, length 0
10:18:34.493247 IP 192.168.139.168.22 > 192.168.139.135.55656: Flags [P.], seq 2873812:2874120, ack 521, win 337, length 308
10:18:34.493364 IP 192.168.139.168.22 > 192.168.139.135.55656: Flags [P.], seq 2873812:2874120, ack 521, win 337, length 308
10:18:34.493378 IP 192.168.139.168.22 > 192.168.139.135.55656: Flags [P.], seq 2874120:2874540, ack 521, win 337, length 420
10:18:34.493501 IP 192.168.139.168.22 > 192.168.139.135.55656: Flags [P.], seq 2874120:2874540, ack 521, win 337, length 420

10.6 tcpdump 参数:

(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

11.Linux网络相关

11.1 ifconifg 查看网卡ip

[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.139.168  netmask 255.255.255.0  broadcast 192.168.139.255
        inet6 fe80::20c:29ff:feec:fccf  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ec:fc:cf  txqueuelen 1000  (Ethernet)
        RX packets 479549  bytes 113639151 (108.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 140548  bytes 44337626 (42.2 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 1000  (Local Loopback)
        RX packets 77  bytes 6532 (6.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 77  bytes 6532 (6.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

说明:

eth0 表示第一块网卡, 其中 HWaddr 表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址)是 00:50:56:BF:26:20

inet addr 用来表示网卡的IP地址,此网卡的 IP地址是 192.168.120.204,广播地址, Bcast:192.168.120.255,掩码地址Mask:255.255.255.0 

lo 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 HTTPD服务器的指定到回坏地址,在浏览器输入 127.0.0.1 就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。

第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)

第二行:网卡的IP地址、子网、掩码

第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节

第四、五行:接收、发送数据包情况统计

第七行:接收、发送数据字节数统计信息。

11.2 ifconfig 参数:

up 启动指定网络设备/网卡。

down 关闭指定网络设备/网卡。该参数可以有效地阻止通过指定接口的IP信息流,如果想永久地关闭一个接口,我们还需要从核心路由表中将该接口的路由信息全部删除。

arp 设置指定网卡是否支持ARP协议。

-promisc 设置是否支持网卡的promiscuous模式,如果选择此参数,网卡将接收网络中发给它所有的数据包

-allmulti 设置是否支持多播模式,如果选择此参数,网卡将接收网络中所有的多播数据包

-a 显示全部接口信息

-s 显示摘要信息(类似于 netstat -i)

add 给指定网卡配置IPv6地址

del 删除指定网卡的IPv6地址

<硬件地址> 配置网卡最大的传输单元

mtu<字节数> 设置网卡的最大传输单元 (bytes)

netmask<子网掩码> 设置网卡的子网掩码。掩码可以是有前缀0x的32位十六进制数,也可以是用点分开的4个十进制数。如果不打算将网络分成子网,可以不管这一选项;如果要使用子网,那么请记住,网络中每一个系统必须有相同子网掩码。

tunel 建立隧道

dstaddr 设定一个远端地址,建立点对点通信

-broadcast<地址> 为指定网卡设置广播协议

-pointtopoint<地址> 为网卡设置点对点通讯协议

multicast 为网卡设置组播标志

address 为网卡设置IPv4地址

txqueuelen<长度> 为网卡设置传输列队的长度

11.3  启动关闭指定网卡

     ifup eth33

     ifdown eth33

11.4 查看网络是否连接

[root@localhost ~]# mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control, link ok
[root@localhost ~]# 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
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised pause frame use: No
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	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

11.5 更改主机名

[root@localhost ~]# hostnamectl set-hostname knightlai
[root@localhost ~]# hostname
knightlai

11.6 DNS配置文件 

[root@localhost ~]# cat  /etc/resolv.conf
# Generated by NetworkManager

resolv.conf的关键字主要有四个,分别是:

nameserver #定义DNS服务器的IP地址 
domain #定义本地域名 
search #定义域名的搜索列表 
sortlist #对返回的域名进行排序

11.7 /etc/hosts文件

[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

hosts文件

hosts —— the static table lookup for host name(主机名查询静态表)。

hosts文件是Linux系统上一个负责ip地址与域名快速解析的文件,以ascii格式保存在/etc/目录下。hosts文件包含了ip地址与主机名之间的映射,还包括主机的别名。在没有域名解析服务器的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的ip地址,否则就需要使用dns服务程序来解决。通过可以将常用的域名和ip地址映射加入到hosts文件中,实现快速方便的访问。

hosts格式配置

hosts文件可以配置主机ip与对应的主机名。在局域网或者是万维网上,每台主机都有一个ip地址,它区分开每台主机,并可以根据ip进行通讯。但是Ip地址不符合人脑的记忆规律,因此出现了域名,例如www.baidu.com.在一个局域网中,每台机器都有一个主机名,用于区分主机,便于相互访问。

hosts文件格式

ip地址   主机名/域名   (主机别名)

主机名和域名的区别在于:

  • 主机名通常在局域网内使用,通过hosts文件,主机名就被解析到对应的ip。
  • 域名通常在internet上使用,但是优先级低于hosts文件中内容,因此如果你不想使用internet上的域名解析,可以更改自己的hosts文件,加入自己的域名解析。

hosts文件作用

一个主要的作用是:线下环境模拟,通信双方在同一个局域网内想通过internet上的域名相互访问,则只需要修改自己的/etc/hosts文件内容即可。

猜你喜欢

转载自blog.csdn.net/a1779078902/article/details/81939234
今日推荐