预习内容
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网络相关
10.1 使用w查看系统负载
[root@localhost ~]# w 13:06:19 up 0 min, 2 users, load average: 0.99, 0.24, 0.08 USER TTY LOGIN@ IDLE JCPU PCPU WHAT root tty1 13:06 11.00s 0.04s 0.04s -bash root pts/0 13:06 3.00s 0.07s 0.02s w
使用w命令可以查看当前系统的负载,第一行从左至右显示信息为:时间、系统运行时间、登录用户数、平均负载。从第二行开始的所有的行是当前登录的用户名及其登录地址。最应该关注的是第一行中的load average后面的三个数值。
第一个数值是表示1分钟内系统的平均负载值,第二个数值表示5分钟内系统的平均负载值,第三个数值表示15分钟内系统的平均负载值,我们着重看第一个值,他表示单位时间段内使用cpu的活动进程数,值越大就说明服务器压力越大。一般情况下,这个值只要不超过服务器的CPU数量就没有关系,如果服务器的CPU数量为8,那么值小于8就说明当前服务器没有压力,否则就需要关注一下了。
- 查看服务器的cpu的方法如下:
[root@localhost ~]# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 58 model name : Intel(R) Core(TM) i5-3337U CPU @ 1.80GHz stepping : 9 microcode : 0x15 cpu MHz : 1795.939 cache size : 3072 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dtherm fsgsbase smep bogomips : 3591.87 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management:
上例中,/proc/cpuinfo这个文件记录了cpu的详细信息,目前市场上的服务器有很多是2颗多核cpu,在linux看来,他就是2*n个cpu,假如n是4,则查看这个文件时会显示8段类似的信息,而最后一段信息的processor:后面会显示7,所以查看当前系统下有几个cpu,我们还可以使用命令grep -c ‘processo‘ /proc/cpuinfo
[root@localhost ~]# grep -c 'processor' /proc/cpuinfo 1
10.2 vmstat命令
使用命令w可以查看系统整体的负载,通过看那个数值可以知道当前系统有没有压力,但它无法判断具体是哪里(CPU 内存 磁盘等)有压力,所以就用到了vmstat。vmstat命令打印的结果分为6个部分procs -memory-swap-io-system-cpu。我们重点关注一下r b si so bi bo这几列。
[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 800968 692 79196 0 0 89 7 49 83 0 1 98 0 0
proc显示进程的相关信息
- r(run):表示运行或等待cpu时间片的进程数,不要误认为等待cpu时间片就是意味着这个进程没有运行。实际上某一个时刻1个cpu只能有一个进程占用,其他进程只能排着队等着。此时这些排队等待cpu资源的进程依然是运行状态。该数值如果长期大于服务器CPU的个数,则说明CPU资源不够用了
- b(block):表示等待资源的进程数,这个资源值得是I/O,内存等。该数值如果长时间大于1,则需要关注一下了。
memory显示内存的详细信息。
- swpd:表示切换到交换分区中的内存数量,单位为KB。
- free:表示当前空闲的内存数量,单位为KB
- buff:表示(即将写入磁盘的)缓冲大小,单位为KB。
- cache:表示(从磁盘中读取的)缓冲大小,单位为KB。
swap:显示内存的交换情况。
- si:表示由交换区写入内存的数据量,单位为KB
- so:表示由内存写入到交换区的数据量,单位KB
io:显示磁盘的使用情况。
- bi:表示从块设备读取数据的量(读磁盘),单位为KB
- bo:表示从块设备写入数据的量(写磁盘),单位为KB
system:显示采集间隔内发生的中断次数
- in:表示某一个时间间隔内观测到的每秒设备的中断次数
- cs:表示每秒产生的上下文切换次数
cpu显示CPU的使用状态
- us:显示用户下所花费CPU的时间百分比
- sy:显示系统花费CPU的时间百分比
- id:表示cpu处于空闲状态的时间百分比
- wa:表示I/O等待所占用cpu的时间百分比
- st:表示被偷走的cpu所占百分比(一般都为0,不用关注)
上面的参数中,主要关注的是r b 和wa这三列。io部分的bi和bo也是经常要参考的对象。如果磁盘io压力大,这两列的数值就会比较高,另外,当si和so两列的数值比较高并且不断变化时,说明内存不够了
我们使用vmstat查看系统状态时,通常都是使用如下形式:
[root@localhost ~]# 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 800968 692 79228 0 0 44 3 30 47 0 1 99 0 0 0 0 0 800944 692 79228 0 0 0 0 19 21 0 0 100 0 0 0 0 0 800944 692 79228 0 0 0 0 18 18 0 0 100 0 0 0 0 0 800944 692 79228 0 0 0 0 17 15 0 0 100 0 0 0 0 0 800944 692 79228 0 0 0 0 14 12 0 1 99 0 0
这一条命令是每隔一秒输出一次状态,共输出5次。
[root@localhost ~]# 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 2 0 0 800968 692 79228 0 0 43 3 30 46 0 1 99 0 0 0 0 0 800944 692 79228 0 0 0 0 27 24 0 1 99 0 0 0 0 0 800944 692 79228 0 0 0 0 18 12 0 0 100 0 0 0 0 0 800944 692 79228 0 0 0 0 19 17 0 1 99 0 0 0 0 0 800944 692 79228 0 0 0 0 12 10 0 0 100 0 0 0 0 0 800944 692 79228 0 0 0 0 18 21 0 0 100 0 0 ^C
上面一条命令是每隔一秒输出一次状态且一直输出。
10.3 top命令
用top命令显示进程所占的系统资源
[root@localhost ~]# top top - 13:44:13 up 38 min, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 212 total, 2 running, 210 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 1010860 total, 210604 used, 800256 free, 692 buffers KiB Swap: 2097148 total, 0 used, 2097148 free. 79496 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 511 root 20 0 550588 16160 5700 S 0.3 1.6 0:00.85 tuned 1832 root 20 0 0 0 0 S 0.3 0.0 0:00.02 kworker/0:1 1 root 20 0 50868 7148 2512 S 0.0 0.7 0:02.53 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.06 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.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 S 0.0 0.0 0:00.00 rcuob/0 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1 11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/2 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/3 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/4 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/5 15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/6
top命令用于动态监控进程所占的系统资源,每隔三秒变一次。它的特点是把占用系统资源最高的进程放到最前面。上例中,top命令打印出了很多信息,包括系统负载,进程数,cpu使用情况,内存使用情况以及交换分区使用情况,这些内容其实可以通过其他命令来查看。使用top命令是可以查看使用系统进程的详细情况。RES这一项为进程所占的内存大小,而%MEM这一项为使用内存的百分比。在top状态下,使用shift+m键可以按照内存使用大小排序,按1可以列出所有核CPU的使用状态,按q键可以退出top
- 我们经常用到命令 top -bn1 ,它表示非动态打印系统资源的使用情况,经常在shell脚本中用到。
[root@localhost ~]# top -bn1|head -20 top - 13:52:31 up 46 min, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 213 total, 2 running, 211 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.1 us, 0.5 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st KiB Mem: 1010860 total, 210792 used, 800068 free, 692 buffers KiB Swap: 2097148 total, 0 used, 2097148 free. 79544 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 50868 7148 2512 S 0.0 0.7 0:02.53 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.06 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.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 S 0.0 0.0 0:00.00 rcuob/0 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1 11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/2 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/3 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/4 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/5 15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/6
- 还有一种用法是可以查看到命令具体的路径
[root@localhost ~]# top -c top - 16:02:34 up 2:56, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 211 total, 2 running, 209 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st KiB Mem: 1010860 total, 218148 used, 792712 free, 692 buffers KiB Swap: 2097148 total, 0 used, 2097148 free. 81408 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2028 root 20 0 123776 1792 1268 R 0.3 0.2 0:00.07 top -c 1 root 20 0 50868 7156 2512 S 0.0 0.7 0:02.57 /usr/lib/systemd/systemd -+ 2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 [kthreadd] 3 root 20 0 0 0 0 S 0.0 0.0 0:00.10 [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.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 S 0.0 0.0 0:00.00 [rcuob/0] 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcuob/1] 11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcuob/2] 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcuob/3] 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcuob/4] 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcuob/5] 15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcuob/6] 16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcuob/7]
10.4 sar命令
sar命令很强大,它可以监控系统几乎所有的资源的状态,比如平均负载、网卡流量、磁盘状态、内存使用等。与其他监控系统状态监控工具不同,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息,如果没有这个命令,使用yum install -y sysstat 安装。刚开始使用这个命令会报错,那是因为sar工具还没有生成相应的数据库文件,它的数据库文件在/var/log/sa/目录下。介绍常用二个选项
- 查看网卡流量 sar -n DEV
[root@localhost ~]# sar -n DEV Linux 3.10.0-123.el7.x86_64 (localhost.localdomain) 2018年06月08日 _x86_64_ (1 CPU) [root@localhost ~]# sar -n DEV Linux 3.10.0-123.el7.x86_64 (localhost.localdomain) 2018年06月08日 _x86_64_ (1 CPU) 16时10分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 16时20分01秒 eno16777736 0.34 0.26 0.03 0.04 0.00 0.00 0.00 16时20分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均时间: eno16777736 0.34 0.26 0.03 0.04 0.00 0.00 0.00 平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
这个命令会把当天记录的网卡信息打印出来,每隔10分钟记录一次,IFACE这一列表示设备名称。rxpck/s这一列表示每秒进入收取的包的数量,txpck/s这一列表示每秒发送出去的包的数量,rxkb/s这一列表示每秒收取的数据量,txkb/s这一列表示每秒发送的数据量。
如果有一天服务器丢包比较严重,那么久应该查一下网卡流量是否异常了,如果rxpck/s那一列的数值大于4000,或者rxkb/s的值大于5000000,很有可能被攻击了。
- 想要实时查看网卡流量 使用sar -n DEV 1 5
[root@localhost ~]# sar -n DEV 1 5 Linux 3.10.0-123.el7.x86_64 (localhost.localdomain) 2018年06月08日 _x86_64_ (1 CPU) 16时25分12秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 16时25分13秒 eno16777736 0.99 0.99 0.06 0.20 0.00 0.00 0.00 16时25分13秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16时25分13秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 16时25分14秒 eno16777736 0.99 0.99 0.06 0.40 0.00 0.00 0.00 16时25分14秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16时25分14秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 16时25分15秒 eno16777736 2.02 2.02 0.12 0.46 0.00 0.00 0.00 16时25分15秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16时25分15秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 16时25分16秒 eno16777736 1.00 1.00 0.06 0.40 0.00 0.00 0.00 16时25分16秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16时25分16秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 16时25分17秒 eno16777736 1.00 1.00 0.06 0.40 0.00 0.00 0.00 16时25分17秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均时间: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 平均时间: eno16777736 1.20 1.20 0.07 0.37 0.00 0.00 0.00 平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 [root@localhost ~]#
- 我们也可以使用-f来查看某一天的网卡流量历史,后面跟文件名。
[root@localhost ~]# sar -n DEV -f /var/log/sa/sa08 Linux 3.10.0-123.el7.x86_64 (localhost.localdomain) 2018年06月08日 _x86_64_ (1 CPU) 16时10分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 16时20分01秒 eno16777736 0.34 0.26 0.03 0.04 0.00 0.00 0.00 16时20分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均时间: eno16777736 0.34 0.26 0.03 0.04 0.00 0.00 0.00 平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
- 查看历史负载sar -q
[root@localhost ~]# sar -q Linux 3.10.0-123.el7.x86_64 (localhost.localdomain) 2018年06月08日 _x86_64_ (1 CPU) 16时10分01秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 16时20分01秒 1 228 0.00 0.01 0.05 0 平均时间: 1 228 0.00 0.01 0.05 0
这个命令有助于我们查看服务器在过去某个时间的负载状况。
10.5 nload命令
使用sar可以查看网卡流量,但是不够直观,还有一个更好的工具,就是nload,安装它 yum install -y epel-release yum install -y nload
运行nload
Device eno16777736 [192.168.73.128] (1/2): =============================================================================================== Incoming: Curr: 944.00 Bit/s Avg: 992.00 Bit/s Min: 936.00 Bit/s Max: 1.84 kBit/s Ttl: 5.24 MByte Outgoing: Curr: 8.30 kBit/s Avg: 8.30 kBit/s Min: 4.25 kBit/s Max: 8.78 kBit/s Ttl: 606.73 kByte
最上面的一行为网卡的名字及IP地址,输出结果为二部分,Incoming:为进入网卡的流量,Outgoing:为网卡出去的流量。按键q可以退出
10.6 监控io性能
使用命令iostat -x 可以查看磁盘使用
[root@localhost ~]# iostat -x Linux 3.10.0-123.el7.x86_64 (localhost.localdomain) 2018年06月08日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.08 0.00 0.31 0.01 0.00 99.60 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.05 0.02 0.50 0.29 12.76 6.51 48.56 0.00 2.04 1.39 3.16 0.51 0.04 scd0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 3.91 3.91 0.00 3.91 0.00
我们只需要关注%util这一行的数据,它表示io等待磁盘使用占用cpu的大小,如果百分比超过50,或者更大的数字,就表示磁盘性能很慢了,可能是硬盘存在问题
- iotop 可以查看磁盘的使用性能
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 2140 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.02 % [kworker/0:1] 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switche~ --deserialize 23 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0] 516 be/4 dbus 0.00 B/s 0.00 B/s 0.00 % 0.00 % dbus-daemon --sys~ystemd-activation 5 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H] 7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] 8 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_bh] 9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/0] 10 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/1] 11 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/2] 12 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/3] 13 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/4] 14 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/5] 15 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/6] 16 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/7] 17 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/8] 18 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/9] 19 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcuob/10]
10.7 free命令
用free命令来查看内存使用状况
[root@localhost ~]# free total used free shared buffers cached Mem: 1010860 363624 647236 6844 692 216196 -/+ buffers/cache: 146736 864124 Swap: 2097148 0 2097148
free命令可以查看当前系统的总内存大小以及使用内存的情况。介绍各列的含义:
- total:内存总大小
- used:真正使用的实际内存大小
- free:剩余物理内存的大小(没有被分配,纯剩余)
- shared:共享内存大小。
- buff/cache:分配给buffer和cache的内存总共有多大。buffer和cache都是一部分内存,内存的作用就是缓解cpu和io的速度差距的。数据经过CPU计算,即将要写入磁盘,这时用的内存为buffer,cpu要计算时,需要把数据从磁盘中读出来,临时放到内存中,这部分就是cache。
- available:系统可使用内存有多大,它包含了free,linux系统为了让应用跑的更快,会预先分配出一部分内存(buffer/cache)给某些应用使用。虽然这部分内存没有真正的使用,但也已经分配出去了。然而,当另外一个服务要使用更多内存时,是可以把这部分预先分配的内存拿出来。所以还没有被占用的这部分buffer/cache 在加上free就是available。
这个free命令显示的结果中,其实有一个隐藏的公式:total=used+free+buff/cache。另外,available是由free这部分内存和buff/cache还未被占用的那部分内存组成。used那部分内存和buff/cache被占用的内存是没有关系的。
另外free命令还可以加-m和-g选项,打印内存的使用状况,甚至也支持-h选项
[root@localhost ~]# free -m total used free shared buffers cached Mem: 987 357 629 6 0 211 -/+ buffers/cache: 146 841 Swap: 2047 0 2047 [root@localhost ~]# free -h total used free shared buffers cached Mem: 987M 357M 629M 6.7M 692K 211M -/+ buffers/cache: 146M 841M Swap: 2.0G 0B 2.0G [root@localhost ~]# free -g total used free shared buffers cached Mem: 0 0 0 0 0 0 -/+ buffers/cache: 0 0 Swap: 1 0 1
10.8 ps命令
在windows下只要打开任务管理器即可查看。那么在linux下如何查看呢。用前面的top命令可以查看,但是看起来没有ps命令方便。ps常用的是ps aux
[root@localhost ~]# ps aux|head USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.7 50868 7232 ? Ss 13:05 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 23 root 2 0.0 0.0 0 0 ? S 13:05 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 13:05 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 13:05 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 13:05 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 13:05 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? S 13:05 0:00 [rcuob/0] root 10 0.0 0.0 0 0 ? S 13:05 0:00 [rcuob/1] root 11 0.0 0.0 0 0 ? S 13:05 0:00 [rcuob/2]
介绍几个系统进程的参数
- PID:表示进程的PID,这个ID很有用。在linux中,内核管理进程就得靠PID来识别和管理某一个进程。比如我想终止某个进程。则用命令“kill 进程的pid”。
- stat:进程的状态。进程状态分为以下几种
- D:不能中断的进程
- R:(run)正在运行中的进程,其中包括了等待CPU时间片的进程
- S(sleep):已经中断的进程。通常情况下,系统大部分进程都是这个状态
- T:已经停止或者暂停的进程,如果我们正在运行一个命令。比如说sleep 10,我们按一下ctrl+z暂停进程时,用ps命令查看就会显示这个状态
- W:没有足够的内存页分配
- X:已经杀死的进程。
- Z:僵尸进程,即杀不掉,打不死的垃圾进程,占用系统一点资源。
- <:高优级进程
- N:低优级进程
- s:主进程
- l:多线路进程
- +:在前台运行的进程,比如在当前终端执行ps aux就是前台进程
- 还有一种用法就是查看某个进程的数量
[root@localhost ~]# ps aux|grep -c sshd 4
- 可以查看某个进程用没用
[root@localhost ~]# ps aux |grep mysql root 2450 0.0 0.0 112716 980 pts/2 R+ 18:28 0:00 grep --color=auto mysql
- 还有一种选项是-C 指定一个进程或者查看一个进程有没有
[root@localhost ~]# ps -C sshd PID TTY TIME CMD 780 ? 00:00:00 sshd 1799 ? 00:00:00 sshd
- ps --no-heading -C sshd使用这个命令可以把表头去除,看起来更简洁
[root@localhost ~]# ps --no-heading -C sshd 780 ? 00:00:00 sshd 1799 ? 00:00:00 sshd
- 使用命令ps -eLF命令可以查看多线程进程
[root@localhost ~]# ps -eLf|head UID PID PPID LWP C NLWP STIME TTY TIME CMD root 1 0 1 1 1 22:05 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 23 root 2 0 2 0 1 22:05 ? 00:00:00 [kthreadd] root 3 2 3 0 1 22:05 ? 00:00:00 [ksoftirqd/0] root 4 2 4 0 1 22:05 ? 00:00:00 [kworker/0:0] root 5 2 5 0 1 22:05 ? 00:00:00 [kworker/0:0H] root 6 2 6 0 1 22:05 ? 00:00:00 [kworker/u128:0] root 7 2 7 0 1 22:05 ? 00:00:00 [migration/0] root 8 2 8 0 1 22:05 ? 00:00:00 [rcu_bh] root 9 2 9 0 1 22:05 ? 00:00:00 [rcuob/0]
10.9 查看网络状态
用netstat命令查看网络状态
使用netstat -lnp查看监听端口,查看当前系统启动了那些端口
[root@localhost ~]# netstat -lnp|head -20 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1022/master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 780/sshd tcp6 0 0 ::1:25 :::* LISTEN 1022/master tcp6 0 0 :::22 :::* LISTEN 780/sshd udp 0 0 0.0.0.0:5353 0.0.0.0:* 508/avahi-daemon: r udp 0 0 0.0.0.0:54619 0.0.0.0:* 508/avahi-daemon: r raw6 0 0 :::58 :::* 7 509/NetworkManager Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ACC ] STREAM LISTENING 10779 1/systemd /run/systemd/private unix 2 [ ACC ] STREAM LISTENING 6682 1/systemd /run/systemd/journal/stdout unix 2 [ ACC ] STREAM LISTENING 17109 1022/master public/pickup unix 2 [ ACC ] STREAM LISTENING 17113 1022/master public/cleanup unix 2 [ ACC ] STREAM LISTENING 17116 1022/master public/qmgr unix 2 [ ACC ] STREAM LISTENING 17138 1022/master public/flush unix 2 [ ACC ] STREAM LISTENING 17153 1022/master public/showq unix 2 [ ACC ] STREAM LISTENING 17120 1022/master private/tlsmgr unix 2 [ ACC ] STREAM LISTENING 17132 1022/master private/trac
- 还有一个选项是netstat -an 表示打印网络连接状况
[root@localhost ~]# netstat -an |head -30 Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 52 192.168.73.128:22 192.168.73.1:59143 ESTABLISHED tcp6 0 0 ::1:25 :::* LISTEN tcp6 0 0 :::22 :::* LISTEN udp 0 0 0.0.0.0:5353 0.0.0.0:* udp 0 0 0.0.0.0:54619 0.0.0.0:* raw6 0 0 :::58 :::* 7 Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 10779 /run/systemd/private unix 2 [ ACC ] STREAM LISTENING 6682 /run/systemd/journal/stdout unix 5 [ ] DGRAM 6685 /run/systemd/journal/socket unix 2 [ ACC ] STREAM LISTENING 17109 public/pickup unix 12 [ ] DGRAM 6687 /dev/log unix 2 [ ACC ] STREAM LISTENING 17113 public/cleanup unix 2 [ ACC ] STREAM LISTENING 17116 public/qmgr unix 2 [ ACC ] STREAM LISTENING 17138 public/flush unix 2 [ ACC ] STREAM LISTENING 17153 public/showq unix 2 [ ACC ] STREAM LISTENING 17120 private/tlsmgr unix 2 [ ACC ] STREAM LISTENING 17132 private/trace unix 2 [ ACC ] STREAM LISTENING 17123 private/rewrite unix 2 [ ACC ] STREAM LISTENING 17135 private/verify unix 2 [ ACC ] STREAM LISTENING 17126 private/bounce unix 2 [ ACC ] STREAM LISTENING 17141 private/proxymap unix 2 [ ACC ] STREAM LISTENING 17129 private/defer unix 2 [ ACC ] STREAM LISTENING 17144 private/proxywrite unix 2 [ ACC ] STREAM LISTENING 17147 private/smtp
在上面例子中我们只关注这列ESTABLISHED数值很大,表明系统很忙
使用ss -an用法类似于netstat -an
10.10 linux下抓包
抓包工具
tcpdump 没有这个命令使用 yum install -y tcpdump 安装
第一个选项 tcpdump -nn -i eno1677736
[root@localhost ~]# tcpdump -nn -i eno16777736 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eno16777736, link-type EN10MB (Ethernet), capture size 262144 bytes 19:54:00.319494 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 536256870:536257082, ack 695499737, win 137, length 212 19:54:00.319806 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 212, win 16134, length 0 19:54:00.320138 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 212:504, ack 1, win 137, length 292 19:54:00.320421 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 504:668, ack 1, win 137, length 164 19:54:00.320600 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 668, win 16425, length 0 19:54:00.320909 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 668:944, ack 1, win 137, length 276 19:54:00.321193 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 944:1108, ack 1, win 137, length 164 19:54:00.321412 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 1108, win 16315, length 0 19:54:00.321630 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 1108:1384, ack 1, win 137, length 276 19:54:00.322046 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 1384:1548, ack 1, win 137, length 164 19:54:00.322233 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 1548, win 16205, length 0 19:54:00.322388 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 1548:1824, ack 1, win 137, length 276 19:54:00.322642 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 1824:1988, ack 1, win 137, length 164 19:54:00.322847 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 1988, win 16095, length 0 19:54:00.322994 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 1988:2264, ack 1, win 137, length 276 19:54:00.323245 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 2264:2428, ack 1, win 137, length 164 19:54:00.323415 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 2428, win 16425, length 0 19:54:00.323562 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 2428:2704, ack 1, win 137, length 276 19:54:00.323856 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 2704:2868, ack 1, win 137, length 164 19:54:00.324025 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 2868, win 16315, length 0 19:54:00.324171 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 2868:3144, ack 1, win 137, length 276 19:54:00.324418 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 3144:3308, ack 1, win 137, length 164 19:54:00.324583 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 3308, win 16205, length 0 19:54:00.324762 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 3308:3584, ack 1, win 137, length 276 19:54:00.325010 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 3584:3748, ack 1, win 137, length 164 19:54:00.325179 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 3748, win 16095, length 0 19:54:00.325323 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 3748:4024, ack 1, win 137, length 276 19:54:00.325569 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 4024:4188, ack 1, win 137, length 164 19:54:00.325768 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 4188, win 16425, length 0 19:54:00.325912 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 4188:4464, ack 1, win 137, length 276 19:54:00.326160 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 4464:4628, ack 1, win 137, length 164 19:54:00.326328 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 4628, win 16315, length 0 19:54:00.326472 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 4628:4904, ack 1, win 137, length 276 19:54:00.326753 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 4904:5068, ack 1, win 137, length 164 19:54:00.326918 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 5068, win 16205, length 0 19:54:00.327063 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 5068:5344, ack 1, win 137, length 276 19:54:00.327307 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 5344:5508, ack 1, win 137, length 164 19:54:00.327472 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 5508, win 16095, length 0 19:54:00.327615 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 5508:5784, ack 1, win 137, length 276 19:54:00.327890 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 5784:5948, ack 1, win 137, length 164 19:54:00.328057 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 5948, win 16425, length 0 19:54:00.328205 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 5948:6224, ack 1, win 137, length 276 19:54:00.328450 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 6224:6388, ack 1, win 137, length 164 19:54:00.328617 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 6388, win 16315, length 0 19:54:00.328796 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 6388:6664, ack 1, win 137, length 276 19:54:00.329041 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 6664:6828, ack 1, win 137, length 164 19:54:00.329208 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 6828, win 16205, length 0 19:54:00.329350 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 6828:7104, ack 1, win 137, length 276 19:54:00.329594 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 7104:7268, ack 1, win 137, length 164 19:54:00.329791 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 7268, win 16095, length 0 19:54:00.329934 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 7268:7544, ack 1, win 137, length 276 19:54:00.330170 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 7544:7708, ack 1, win 137, length 164 19:54:00.330335 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 7708, win 16425, length 0 19:54:00.330479 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 7708:7984, ack 1, win 137, length 276 19:54:00.330757 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 7984:8148, ack 1, win 137, length 164 19:54:00.330921 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 8148, win 16315, length 0 19:54:00.331064 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 8148:8424, ack 1, win 137, length 276 19:54:00.331322 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 8424:8588, ack 1, win 137, length 164 19:54:00.332265 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 8588, win 16205, length 0 19:54:00.332961 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 8588:8864, ack 1, win 137, length 276 19:54:00.333831 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 8864:9028, ack 1, win 137, length 164 19:54:00.334033 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 9028, win 16095, length 0 19:54:00.334199 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 9028:9304, ack 1, win 137, length 276 19:54:00.334469 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 9304:9468, ack 1, win 137, length 164 19:54:00.334688 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 9468, win 15985, length 0 19:54:00.334846 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 9468:9744, ack 1, win 137, length 276 19:54:00.335110 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 9744:9908, ack 1, win 137, length 164 19:54:00.335283 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 9908, win 15875, length 0 19:54:00.335431 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 9908:10184, ack 1, win 137, length 276 19:54:00.335698 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 10184:10364, ack 1, win 137, length 180 19:54:00.335909 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 10364, win 15761, length 0 19:54:00.336062 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 10364:10640, ack 1, win 137, length 276
上例中,我们需要关注第三列和第四列,他们显示的信息为哪一个IP+端口号在连接哪一个IP+端口号,后面的信息是该数据包相关的信息。-i选项后面跟设备名称,如果想抓取其他网卡的数据包,后面则要跟其他网卡的名字。-nn选项的作用是让第三列和第四列显示成“IP+端口号”的形式,如果不加-nn选项则显示“主机名+服务名称”例如
20:00:16.003625 IP 192.168.73.1.49647 > 192.168.73.128.ssh: Flags [.], ack 1041148, win 16071, length 0 20:00:16.003817 IP 192.168.73.128.ssh > 192.168.73.1.49647: Flags [P.], seq 1041148:1041440, ack 157, win 137, length 292 20:00:16.003915 IP 192.168.73.128.ssh > 192.168.73.1.49647: Flags [P.], seq 1041440:1041620, ack 157, win 137, length 180 20:00:16.004145 IP 192.168.73.1.49647 > 192.168.73.128.ssh: Flags [.], ack 1041620, win 16425, length 0 20:00:16.004696 IP 192.168.73.128.ssh > 192.168.73.1.49647: Flags [P.], seq 1041620:1041912, ack 157, win 137, length 292 20:00:16.004878 IP 192.168.73.128.ssh > 192.168.73.1.49647: Flags [P.], seq 1041912:1042092, ack 157, win 137, length 180 20:00:16.005493 IP 192.168.73.1.49647 > 192.168.73.128.ssh: Flags [.], ack 1042092, win 16307, length 0 20:00:16.005853 IP 192.168.73.128.ssh > 192.168.73.1.49647: Flags [P.], seq 1042092:1042384, ack 157, win 137, length 292 20:00:16.005968 IP 192.168.73.128.ssh > 192.168.73.1.49647: Flags [P.], seq 1042384:1042564, ack 157, win 137, length 180 20:00:16.006226 IP 192.168.73.1.49647 > 192.168.73.128.ssh: Flags [.], ack 1042564, win 16189, length 0 20:00:16.006376 IP 192.168.73.128.ssh > 192.168.73.1.49647: Flags [P.], seq 1042564:1042856, ack 157, win 137, len
我们还可以指定抓包数量
[root@localhost ~]# tcpdump -nn -i eno16777736 -c 20 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eno16777736, link-type EN10MB (Ethernet), capture size 262144 bytes 20:02:06.981782 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 537793882:537794094, ack 695503137, win 137, length 212 20:02:06.982275 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 212, win 16106, length 0 20:02:06.984163 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 212:504, ack 1, win 137, length 292 20:02:06.986115 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 504:668, ack 1, win 137, length 164 20:02:06.986652 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 668, win 16425, length 0 20:02:06.987054 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 668:944, ack 1, win 137, length 276 20:02:06.988978 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 944:1108, ack 1, win 137, length 164 20:02:06.989468 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 1108, win 16315, length 0 20:02:06.989700 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 1108:1384, ack 1, win 137, length 276 20:02:06.990041 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 1384:1548, ack 1, win 137, length 164 20:02:06.990226 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 1548, win 16205, length 0 20:02:06.990382 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 1548:1824, ack 1, win 137, length 276 20:02:06.990632 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 1824:1988, ack 1, win 137, length 164 20:02:06.990834 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 1988, win 16095, length 0 20:02:06.990995 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 1988:2264, ack 1, win 137, length 276 20:02:06.991290 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 2264:2428, ack 1, win 137, length 164 20:02:06.991459 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 2428, win 16425, length 0 20:02:06.991633 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 2428:2704, ack 1, win 137, length 276 20:02:06.992161 IP 192.168.73.128.22 > 192.168.73.1.49647: Flags [P.], seq 2704:2868, ack 1, win 137, length 164 20:02:06.992413 IP 192.168.73.1.49647 > 192.168.73.128.22: Flags [.], ack 2868, win 16315, length 0 20 packets captured 20 packets received by filter 0 packets dropped by kernel
我们也可以把抓包指定到一个文件夹
[root@localhost ~]# tcpdump -i eno16777736 -w /tmp/1.cap tcpdump: listening on eno16777736, link-type EN10MB (Ethernet), capture size 262144 bytes
查看抓包类型
[root@localhost ~]# tcpdump -r /tmp/1.cap tcpdump: truncated dump file; tried to read 4 file header bytes, only got 0
还有常用的示例
[root@localhost ~]# tcpdump -nn -i eno16777736 port 22 只抓22端口的包 [root@localhost ~]# tcpdump -nn -i eno16777736 tcp and not port 22 指定抓tcp的包,但是不要22端口的 [root@localhost ~]# tcpdump -nn -i eno16777736 22 and port 53 只抓22和53端口的包 [root@localhost ~]# tcpdump -nn -i eno16777736 not port 22 and host (ip地址)
- wireshark 工具
它的功能非常强大,在linux平台我们同样也可以使用它,只不过是命令行的形式。没有这个命令使用yum install -y wireshark 这个命令安装
[root@localhost ~]# tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
[root@localhost ~]# tshark -n -i eth1 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query"
10.11 Linux网络相关
- 用ifconfig命令查看网卡IP
如果linux上有很多网卡,想要重启一个网卡的话,可以使用下面命令
[root@localhost ~]# ifdown eno1677736; ifup ens33
ifdown是停用网卡,ifup是启动网卡。使用上面的命令需要重启一下网卡 systemctl restart network
但是上面的例子正确地用法是中间加上&&,
[root@localhost ~]# ifdown eno1677736 && ifup ens33
- 给一个网卡设定多个ip
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# cp ifcfg-eno16777736 ifcfg-eno16777736\:1
加上反斜杠,是因为要把:转义。不然在linux命令下下面无法识别,然后在编辑这个ifcfg-eno16777736\:1配置文件。一定要注意DEVICE要写成eno16777736:1,然后在更改一下ip
[root@localhost network-scripts]# vim ifcfg-eno16777736\:1 HWADDR=00:0C:29:1D:DB:B9 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eno16777736:1 UUID=530b38e3-7d4f-49cb-a464-3c34056e57cd ONBOOT=yes IPADDR=192.168.73.129 NETMASK=255.255.255.0 GATEWAY=192.168.73.2 DNS1=119.29.29.29 ~ -- 插入 --
设置好后,我们重启一下网卡
[root@localhost network-scripts]# ifdown eno16777736 && ifup eno16777736
然后在来看一下网卡IP会看到多一个IP
[root@localhost network-scripts]# ifconfig eno16777736: flags=4163
mtu 1500 inet6 fe80::20c:29ff:fe1d:dbb9 prefixlen 64 scopeid 0x20 ether 00:0c:29:1d:db:b9 txqueuelen 1000 (Ethernet) RX packets 505 bytes 49926 (48.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 445 bytes 69448 (67.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno16777736:0: flags=4163 mtu 1500 inet 192.168.73.128 netmask 255.255.255.0 broadcast 192.168.73.255 ether 00:0c:29:1d:db:b9 txqueuelen 1000 (Ethernet) lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 0 (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 [root@localhost network-scripts]#
- 查看网络连接状态
[root@localhost ~]# mii-tool eno16777736 eno16777736: negotiated 1000baseT-FD flow-control, link ok
这里显示link ok表示网卡为连接状态,如果显示no ok 说明网卡坏了或者没有连接网线,还有一个命令可以查看网卡的状态
[root@localhost ~]# ethtool eno16777736 Settings for eno16777736: 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
如果网卡没有连接最后面一行 显示no
- 更改主机名
[root@localhost ~]# hostnamectl set-hostname hongwei [root@localhost ~]# hostname hongwei
现在看到我们还没有显示,需要断开重新连接一下
- 设置DNS
在linux下设置DNS非常简单,只要把DNS地址写到配置文件/etc/resolv.conf。
[root@hongwei ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 119.29.29.29
第一行以#号开头的行没有实际意义,仅仅是一个注释。如果想要临时更改DNS IP地址,就直接修改/etc/resolv.conf。想要永久生效还是要修改网卡的配置文件。
在linux下还有一个特殊文件/etc/hosts也能解析域名,不过需要我们手动添加一行
[root@hongwei ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
使用vim编辑,增加一行,保存
[root@hongwei ~]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.73.128 www.baidu.com ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ "/etc/hosts" 3L, 187C 3,1 全部
我们再次ping一下 www.baidu.com 就会链接 192.168.73.128了
[root@hongwei ~]# ping www.baidu.com PING www.baidu.com (192.168.73.128) 56(84) bytes of data. 64 bytes from www.baidu.com (192.168.73.128): icmp_seq=1 ttl=64 time=0.131 ms 64 bytes from www.baidu.com (192.168.73.128): icmp_seq=2 ttl=64 time=0.212 ms 64 bytes from www.baidu.com (192.168.73.128): icmp_seq=3 ttl=64 time=0.035 ms 64 bytes from www.baidu.com (192.168.73.128): icmp_seq=4 ttl=64 time=0.035 ms 64 bytes from www.baidu.com (192.168.73.128): icmp_seq=5 ttl=64 time=0.036 ms ^C --- www.baidu.com ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4005ms rtt min/avg/max/mdev = 0.035/0.089/0.212/0.072 ms
/etc/hosts的格式很简单,每一行为一条记录,分成二部分,第一部分是IP,第二部分是域名。关于这个文件,需要注意一下几点
- 一个IP后面可以跟过个域名,可以是几十个甚至上千个
- 每一行只能由一个IP,也就是说一个域名不能对应多个IP
- 如果有多行中出现相同的域名,会按最前面出现的记录来解析
拓展知识
- tcp三次握手四次挥手(重点) http://http://www.doc88.com/p-9913773324388.html
- tshark几个用法 http://www.aminglinux.com/bbs/thread-995-1-1.html
- ip命令的其他用法
ip命令使用
1. 设置和删除IP
ip addr add 192.168.10.10/24 dev eth0
ip addr show eth0
ip addr del 192.168.10.10/24 dev eth0
2. 路由相关设置
ip route show
ip route add default via 192.168.10.1
ip route add 192.168.5.0/24 dev eth0
ip route del 192.168.10.1
另外用route命令来管理路由:
(a)、网络路由
# route add -net 192.168.1.0/24 gw 172.16.1.106
(b)、主机路由
# route add -host 192.168.1.110 gw 172.16.1.106
(c)、默认路由
# route add default gw 172.16.1.106
或
# route add -net 0.0.0.0 gw 172.16.1.106
(d)、删除路由
# route del -host 192.168.1.110
# route del -net 192.168.1.0/24
3. 显示网络统计数据
ip -s link
ip -s -s link ls eth0
3. 停止开启网卡
ip link set eth0 down
ip linke set eth0 up
更改网卡名字
ip link set ens37 name eth1