2024年linux端口大全

linux端口大全引言 对于系统和网络管理员来说每天监控和调试 Linux 系统的性能问题是一项繁重的工作 这些命令行工具可以在各种 Linux 系统下使用 可以用于监控和查找产生性能问题的原因 这个命令行工具列表提供了足够的工具 您可以挑选适用于您的监控场景的工具 1 lsof 列出打开的文件 在许多 Linux 或者类 Unix 系统里都有 lsof 命令

引言

对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作。这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因。这个命令行工具列表提供了足够的工具,您可以挑选适用于您的监控场景的工具。

1. lsof - 列出打开的文件

在许多Linux或者类Unix系统里都有lsof命令,它常用于以列表的形式显示所有打开的文件和进程。打开的文件包括磁盘文件、网络套接字、管道、设备和进程。使用这条命令的主要情形之一就是在无法挂载磁盘和显示正在使用或者打开某个文件的错误信息的时候。

常用的参数列表:

lsof filename 显示打开指定文件的所有进程

lsof -a 表示两个参数都必须满足时才显示结果

lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件

lsof -u username 显示所属user进程打开的文件

lsof -g gid 显示归属gid的进程情况

lsof +d /DIR/ 显示目录下被进程打开的文件

lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长

lsof -d FD 显示指定文件描述符的进程

lsof -n 不将IP转换为hostname,缺省是不加上-n参数

lsof -i 用以显示符合条件的进程情况

查看22端口现在运行的情况

[root@CentOS7 ~]# lsof -i :22

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

sshd 925 root 3u IPv4 18374 0t0 TCP *:ssh (LISTEN)

sshd 925 root 4u IPv6 18383 0t0 TCP *:ssh (LISTEN)

sshd 9452 root 3u IPv4 0t0 TCP CentOS7.2:ssh->192.168.56.1:61347 (ESTABLISHED)

查看所属root用户进程所打开的文件类型为txt的文件

[root@CentOS7 ~]# lsof -a -u root -d txt

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

systemd 1 root txt REG 0,34 56083 /usr/lib/systemd/systemd

kthreadd 2 root txt unknown /proc/2/exe

ksoftirqd 3 root txt unknown /proc/3/exe

migration 7 root txt unknown /proc/7/exe

rcu_bh 8 root txt unknown /proc/8/exe

2. top - 进程活动

top提供一个当前运行系统实时动态的视图,也就是正在运行进程。在默认情况下,显示系统中CPU使用率最高的任务,并每5秒钟刷新一次。

常用热键

t:显示摘要信息开关

top - 11:20:12 up 2 days, 18:39, 3 users, load average: 0.00, 0.01, 0.05

Tasks: 173 total, 1 running, 172 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.3/0.7 1[| ]

KiB Mem : total, 13236 free, used, buff/cache

KiB Swap: total, free, used. avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

17166 root 20 0 0 0 0 S 0.3 0.0 0:09.05 kworker/0:2

19196 root 20 0 2056 1420 R 0.3 0.4 0:02.25 top

23944 root 20 0 38724 8388 S 0.3 7.7 6:39.63 firefox

1 root 20 0 4212 2328 S 0.0 0.8 0:27.20 systemd

2 root 20 0 0 0 0 S 0.0 0.0 0:02.22 kthreadd

3 root 20 0 0 0 0 S 0.0 0.0 7:11.69 ksoftirqd/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 S 0.0 0.0 0:00.00 rcuob/0

10 root 20 0 0 0 0 S 0.0 0.0 6:09.07 rcu_sched

11 root 20 0 0 0 0 S 0.0 0.0 14:11.36 rcuos/0

12 root rt 0 0 0 0 S 0.0 0.0 0:03.03 watchdog/0

13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper

14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs

15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns

16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf

m:显示内存信息开关

top - 11:22:12 up 2 days, 18:41, 3 users, load average: 0.00, 0.01, 0.05

Tasks: 173 total, 1 running, 172 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 : 60.0/ [|||||||||||||||||||||||||||||||||||||||||||||| ]

KiB Swap: 6.4/ [||||| ]

A:分类显示系统不同资源的使用大户,有助于快速识别系统中资源消耗多的任务

1:Def - 11:23:40 up 2 days, 18:42, 3 users, load average: 0.00, 0.01, 0.05

Tasks: 174 total, 1 running, 173 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem : total, 21124 free, used, buff/cache

KiB Swap: total, free, used. avail Mem

1 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

920 root 20 0 11096 3360 S 0.3 2.2 10:28.34 daomonit

19196 root 20 0 2056 1420 R 0.3 0.4 0:03.00 top

1 root 20 0 4212 2328 S 0.0 0.8 0:27.20 systemd

2 PID PPID TIME+ %CPU %MEM PR NI S VIRT RES UID COMMAND

24416 2 0:03.29 0.0 0.0 0 -20 S 0 0 0 kworker/0:2H

24365 1 0:00.04 0.0 0.3 20 0 S 1380 0 gvfsd-metadata

23944 23598 6:40.25 0.0 7.7 20 0 S 38724 0 firefox

3 PID %MEM VIRT RES CODE DATA SHR nMaj nDRT %CPU COMMAND

23598 10.7 53752 16 8912 26k 0 0.0 gnome-shell

23944 7.7 38724 108 8388 46k 0 0.0 firefox

18581 3.2 15824 392 12292 3364 23 0 0.0 dhclient

4 PID PPID UID USER RUSER TTY TIME+ %CPU %MEM S COMMAND

536 1 172 rtkit rtkit ? 0:03.06 0.0 0.1 S rtkit-daemon

1 0 0 root root ? 0:27.20 0.0 0.8 S systemd

2 0 0 root root ? 0:02.22 0.0 0.0 S kthreadd

3 2 0 root root ? 7:11.70 0.0 0.0 S ksoftirqd/0

f:添加删除所要显示栏位

Fields Management for window 1:Def, whose current sort field is PPID

Navigate with Up/Dn, Right selects for move then or Left commits,

'd' or toggles display, 's' sets sort. Use 'q' or to end!

* PID = Process Id GROUP = Group Name TGID = Thread Group Id

* USER = Effective User Name PGRP = Process Group Id ENVIRON = Environment vars* PR = Priority TTY = Controlling Tty vMj = Major Faults delta

* NI = Nice Value TPGID = Tty Process Grp Id vMn = Minor Faults delta

* VIRT = Virtual Image (KiB) SID = Session Id USED = Res+Swap Size (KiB)

* RES = Resident Size (KiB) nTH = Number of Threads nsIPC=IPC namespace Inode

* SHR = Shared Memory (KiB) P = Last Used Cpu (SMP) nsMNT = MNT namespace Inode

* S = Process Status TIME = CPU Time nsNET = NET namespace Inode

* %MEM = Memory Usage (RES) SWAP = Swapped Size (KiB) nsPID=PID namespace Inode

* TIME+ = CPU Time, hundredths CODE = Code Size (KiB) nSUSER=USER namespace Inode

* COMMAND = Command Name/Line DATA = Data+Stack (KiB) nsUTS= UTS namespace Inode

* %CPU = CPU Usage nMaj = Major Page Faults

PPID = Parent Process pid nMin = Minor Page Faults

UID = Effective User Id nDRT = Dirty Pages Count

RUID = Real User Id WCHAN = Sleeping in Function

RUSER = Real User Name Flags = Task Flags

SUID = Saved User Id CGROUPS = Control Groups

SUSER = Saved User Name SUPGIDS = Supp Groups IDs

GID = Group Id SUPGRPS = Supp Groups Names

r:调整一个正在运行的进程Nice值

PID to renice [default pid = 920]

k:结束一个正在运行的进程

PID to signal/kill [default pid = 19156]

z:彩色/黑白显示开关

3. vmstat -系统活动、硬件及系统信息

使用vmstat命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。

r:表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没 什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。 这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果    运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b:表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

swpd:虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。free:空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

buff:Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

cache:cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

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

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

bi:块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到/s,磁盘写入速度差不多140M每秒。

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

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

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

us:用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

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

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

wt:等待IO CPU时间。

[root@CentOS7 ~]# vmstat -m

Cache Num Total Size Pages

fuse_inode 10 10 768 10

nf_conntrack_ffff88001a2d8000 0 0 320 12

nf_conntrack_ffffffff81a25e00 180 180 320 12

kcopyd_job 0 0 3312 9

dm_uevent 0 0 2608 12

dm_rq_target_io 0 0 136 30

每隔3秒5次:

1 [root@CentOS7 ~]# vmstat 3 5

2 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

3 r b swpd free buff cache si so bi bo in cs us sy id wa st

4 0 0 17040 8 508 252 7085 420 84 176 6 4 86 4 0

5 0 0 17040 8 0 0 0 0 29 53 0 0 100 0 0

6 1 0 17040 8 0 0 0 0 31 58 0 0 100 0 0

7 0 0 17008 8 0 0 0 0 34 67 0 0 100 0 0

8 1 0 16668 8 0 0 0 0 71 151 1 2 97 0 0

4. w - 显示谁已登录

w命令显示系统当前用户及其运行进程的信息。

[root@CentOS7 ~]# w root

12:26:14 up 2 days, 19:45, 3 users, load average: 0.05, 0.12, 0.13

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root :0 :0 Sat23 ?xdm? 1:08m 0.65s gdm-session-worker [pam/gdm-password]

root pts/0 192.168.56.1 Sun22 4:35m 0.61s 0.00s lsof

root pts/1 192.168.56.1 11:09 6.00s 0.20s 0.01s w root

5. uptime - 告诉系统已经运行了多久

uptime命令过去只显示系统运行多久。现在,可以显示系统运行多久、当前有多少的用户登录、在过去的1,5,15分钟里平均负载时多少。

[root@CentOS7 ~]# uptime

12:30:39 up 2 days, 19:49, 3 users, load average: 0.06, 0.08, 0.12

何为系统负载呢?

系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:

它没有在等待I/O操作的结果

它没有主动进入等待状态(也就是没有调用'wait')

没有被停止(例如:等待终止)

一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果你的主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重。当然如果达到20,那就表示当前系统负载非常严重。

6. ps - 显示进程

Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。

要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。

ps为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。

linux上进程有5种状态:

1. 运行(正在运行或在运行队列中等待)

2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)

3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)

4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)

5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps工具标识进程的5种状态码:

D 不可中断 uninterruptible sleep (usually IO)

R 运行 runnable (on run queue)        S 中断 sleeping        T 停止 traced or stopped        Z 僵死 a defunct (”zombie”) process

[root@linux ~]# ps aux

[root@linux ~]# ps -lA

[root@linux ~]# ps axjf

参数:

-A :所有的 process 均显示出来,与 -e 具有同样的效用;

-a :不与 terminal 有关的所有 process ;

-u :有效使用者 (effective user) 相关的 process ;

x :通常与 a 这个参数一起使用,可列出较完整信息。

输出格式规划:

l :较长、较详细的将该 PID 的的信息列出;

j :工作的格式 (jobs format)

-f :做一个更为完整的输出。

特别说明:由于 ps 能够支持的 OS 类型相当的多,所以他的参数多的离谱!而且有没有加上 - 差很多!详细的用法应该要参考 man ps。

例1.将目前属于您自己这次登入的 PID 与相关信息列示出来

[root@CentOS7 ~]# ps -l

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

4 S 0 19160 19156 0 80 0 - 29172 wait pts/1 00:00:00 bash

0 R 0 20465 19160 0 80 0 - 34343 - pts/1 00:00:00 ps

上面这个信息其实很多,各相关信息的意义为:

F:代表这个程序的flag,4代表使用者为super user

S:代表这个程序的状态

PID:这个程序的ID

C:CPU 使用的资源百分比

PRI:这个是 Priority (优先执行序) 的缩写

NI:这个是 Nice 值

ADDR:这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是『 - 』的啦!

SZ:使用掉的内存大小

WCHAN:目前这个程序是否正在运作当中,若为 - 表示正在运作

TTY:登入者的终端

TIME:使用掉的CPU时间

CMD:所下达的指令

例2.列出目前所有的正在内存当中的程序

[root@CentOS7 ~]# ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.8 4300 ? Ss May20 0:28 /usr/lib/systemd/systemd

root 2 0.0 0.0 0 0 ? S May20 0:02 [kthreadd]

root 3 0.1 0.0 0 0 ? S May20 7:12 [ksoftirqd/0]

root 7 0.0 0.0 0 0 ? S May20 0:00 [migration/0]

root 8 0.0 0.0 0 0 ? S May20 0:00 [rcu_bh]

root 9 0.0 0.0 0 0 ? S May20 0:00 [rcuob/0]

root 10 0.1 0.0 0 0 ? S May20 6:10 [rcu_sched]

root 11 0.3 0.0 0 0 ? S May20 14:13 [rcuos/0]

root 12 0.0 0.0 0 0 ? S May20 0:03 [watchdog/0]

root 13 0.0 0.0 0 0 ? S< May20 0:00 [khelper]

root 14 0.0 0.0 0 0 ? S May20 0:00 [kdevtmpfs]

root 15 0.0 0.0 0 0 ? S< May20 0:00 [netns]

root 16 0.0 0.0 0 0 ? S< May20 0:00 [perf]

USER:该 process 属于那个使用者账号的

PID :该 process 的号码

%CPU:该 process 使用掉的 CPU 资源百分比

%MEM:该 process 所占用的物理内存百分比

VSZ :该 process 使用掉的虚拟内存量 (Kbytes)

RSS :该 process 占用的固定的内存量 (Kbytes)

TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者

程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序

STAT:该程序目前的状态,主要的状态有:

R:该程序目前正在运作,或者是可被运作

S:该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号 (signal) 唤醒。

T:该程序目前正在侦测或者是停止了;

Z:该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态

START:该 process 被触发启动的时间

TIME :该 process 实际使用 CPU 运作的时间

COMMAND:该程序的实际指令为

例3.显示出所有的程序

[root@CentOS7 ~]# ps -lA

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

4 S 0 1 0 0 80 0 - 47873 ep_pol ? 00:00:29 systemd

1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:02 kthreadd

1 S 0 3 2 0 80 0 - 0 smpboo ? 00:07:13 ksoftirqd/0

1 S 0 7 2 0 -40 - - 0 smpboo ? 00:00:00 migration/0

1 S 0 8 2 0 80 0 - 0 rcu_gp ? 00:00:00 rcu_bh

1 S 0 9 2 0 80 0 - 0 rcu_no ? 00:00:00 rcuob/0

1 S 0 10 2 0 80 0 - 0 rcu_gp ? 00:06:12 rcu_sched

1 S 0 11 2 0 80 0 - 0 rcu_no ? 00:14:16 rcuos/0

5 S 0 12 2 0 -40 - - 0 smpboo ? 00:00:03 watchdog/0

1 S 0 13 2 0 60 -20 - 0 rescue ? 00:00:00 khelper

例4.列出类似程序树的程序显示

[root@CentOS7 ~]# ps -axjf

PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND

0 2 0 0 ? -1 S 0 0:02 [kthreadd]

2 3 0 0 ? -1 S 0 7:13 \_ [ksoftirqd/0]

2 7 0 0 ? -1 S 0 0:00 \_ [migration/0]

2 8 0 0 ? -1 S 0 0:00 \_ [rcu_bh]

2 9 0 0 ? -1 S 0 0:00 \_ [rcuob/0]

2 10 0 0 ? -1 S 0 6:12 \_ [rcu_sched]

2 11 0 0 ? -1 S 0 14:16 \_ [rcuos/0]

例5.找出与 crypto 与 bash 这两个服务有关的 PID 号码

[root@CentOS7 ~]# ps aux | egrep '(crypto|bash)'

root 30 0.0 0.0 0 0 ? S< May20 0:00 [crypto]

root 597 0.0 0.1 772 ? S May20 0:14 /bin/bash /usr/sbin/ksmtuned

root 23362 0.0 0.6 3272 pts/0 Ss 16:50 0:00 -bash

root 23521 0.0 0.0 52852 44 ? Ss May21 0:01 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"

root 25992 0.0 0.1 956 pts/0 S+ 20:08 0:00 grep -E --color=auto (crypto|bash)

7. free - 内存使用情况

[root@CentOS7 ~]# free

1          2          3          4          5          6

1              total      used      free    shared    buffers    cached

2 Mem:                      0     

3 -/+ buffers/cache:   

4 Swap:         

free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free),这个比较清楚,不说太多。

free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用情况的。第一列是总量(total),第二列是使用量(used),第三列是可用量(free)。

第一行的输出时从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:

KB(缺省时free的单位为KB)物理内存,即FO[2][1];

在这些物理内存中有KB(即FO[2][2])被使用了;

还用KB(即FO[2][3])是可用的;

这里得到第一个等式:

FO[2][1] = FO[2][2] + FO[2][3]

FO[2][4]表示被几个进程共享的内存的,现在已经deprecated,其值总是0(当然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。FO[2][5]表示被OS buffer住的内存。FO[2][6]表示被OS cache的内存。在有些时候buffer和cache这两个词经常混用。不过在一些比较低层的软件里是要区分这两个词的,看老外的洋文:

A buffer is something that has yet to be "written" to disk.

A cache is something that has been "read" from the disk and stored for later use.

free输出的第二行是从一个应用程序的角度看系统内存的使用情况。

对于FO[3][2],即-buffers/cache,表示一个应用程序认为系统被用掉多少内存

对于FO[3][3],即+buffers/cache,表示一个应用程序认为系统还有多少内存

因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO[3][3]比FO[2][3]会大很多。

这里还用两个等式:也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。

FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]

FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]

8. iostat - CPU平均负载,硬盘活动

iostat命令可报告中央处理器(CPU)的统计信息,各种设备、分区及网络文件系统输入/输出的统计信息。

[root@CentOS7 ~]# iostat

Linux 3.10.0-327.el7.x86_64 (CentOS7.2) 05/23/2016 _x86_64_    (1 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

5.20 0.00 3.53 3.54 0.00 87.73

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

sda 197.17 6120.99 371.74

avg-cpu段:

%user: 在用户级别运行所使用的CPU的百分比

%nice: nice操作所使用的CPU的百分比

%sys: 在系统级别(kernel)运行所使用CPU的百分比

%iowait: CPU等待硬件I/O时,所占用CPU百分比

%idle: CPU空闲时间的百分比

Device段:

tps: 每秒钟发送到的I/O请求数

Blk_read /s: 每秒读取的block数

Blk_wrtn/s: 每秒写入的block数

Blk_read:  读入的block总数

Blk_wrtn:  写入的block总数

例.每隔2秒显示一次sda及上面所有分区的统计信息,共输出1次

[root@CentOS7 ~]# iostat -p sda 2 1

Linux 3.10.0-327.el7.x86_64 (CentOS7.2) 05/23/2016 _x86_64_    (1 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

5.19 0.00 3.52 3.54 0.00 87.75

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

sda 196.83 6110.31 371.21

sda1 0.01 0.02 0.01 4585 2060

sda2 43.56 438.87 217.75

sda3 152.42 5671.42 153.45

9. mpstat - 多处理器使用率

mpstat命令可以显示所有可用处理器的使用情况,处理器编号从0开始。mpstat -P ALL显示每个处理器的平均使用率。

[root@CentOS7 ~]# mpstat -P ALL

Linux 3.10.0-327.el7.x86_64 (CentOS7.2) 05/23/2016 _x86_64_    (1 CPU)

10:45:33 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

10:45:33 PM all 5.19 0.00 2.70 3.54 0.00 0.81 0.00 0.00 0.00 87.76

10:45:33 PM 0 5.19 0.00 2.70 3.54 0.00 0.81 0.00 0.00 0.00 87.76

10. pmap - 进程的内存使用

pmap命令可以显示进程的内存映射,使用这个命令可以找出造成内存瓶颈的原因。

[root@CentOS7 ~]# pmap -d 23362

23362: -bash

Address Kbytes Mode Offset Device Mapping

0000000000 884 r-x-- 0000000000000000 000:00020 bash

00000000006dc000 4 r---- 00000000000dc000 000:00020 bash

00000000006dd000 36 rw--- 00000000000dd000 000:00020 bash

00000000006e6000 24 rw--- 0000000000000000 000:00000 [ anon ]

000000000221d000 1576 rw--- 0000000000000000 000:00000 [ anon ]

00007f7d3fc3d000 r---- 0000000000000000 000:00020 locale-archive

00007f7d 44 r-x-- 0000000000000000 000:00020 libnss_files-2.17.so

00007f7d4616f000 2044 ----- 000000000000b000 000:00020 libnss_files-2.17.so

00007f7d4636e000 4 r---- 000000000000a000 000:00020 libnss_files-2.17.so

00007f7d4636f000 4 rw--- 000000000000b000 000:00020 libnss_files-2.17.so

00007f7d 24 rw--- 0000000000000000 000:00000 [ anon ]

00007f7d 1752 r-x-- 0000000000000000 000:00020 libc-2.17.so

00007f7d4652c000 2048 ----- 00000000001b6000 000:00020 libc-2.17.so

00007f7d4672c000 16 r---- 00000000001b6000 000:00020 libc-2.17.so

00007f7d 8 rw--- 00000000001ba000 000:00020 libc-2.17.so

00007f7d 20 rw--- 0000000000000000 000:00000 [ anon ]

00007f7d 12 r-x-- 0000000000000000 000:00020 libdl-2.17.so

00007f7d4673a000 2044 ----- 0000000000003000 000:00020 libdl-2.17.so

00007f7d 4 r---- 0000000000002000 000:00020 libdl-2.17.so

00007f7d4693a000 4 rw--- 0000000000003000 000:00020 libdl-2.17.so

00007f7d4693b000 148 r-x-- 0000000000000000 000:00020 libtinfo.so.5.9

00007f7d 2048 ----- 0000000000025000 000:00020 libtinfo.so.5.9

00007f7d46b60000 16 r---- 0000000000025000 000:00020 libtinfo.so.5.9

00007f7d46b64000 4 rw--- 0000000000029000 000:00020 libtinfo.so.5.9

00007f7d46b65000 132 r-x-- 0000000000000000 000:00020 ld-2.17.so

00007f7d46d6d000 12 rw--- 0000000000000000 000:00000 [ anon ]

00007f7d46d7c000 4 rw--- 0000000000000000 000:00000 [ anon ]

00007f7d46d7d000 28 r--s- 0000000000000000 000:00020 gconv-modules.cache

00007f7d46d84000 8 rw--- 0000000000000000 000:00000 [ anon ]

00007f7d46d86000 4 r---- 0000000000021000 000:00020 ld-2.17.so

00007f7d46d87000 4 rw--- 0000000000022000 000:00020 ld-2.17.so

00007f7d46d88000 4 rw--- 0000000000000000 000:00000 [ anon ]

00007fffc 132 rw--- 0000000000000000 000:00000 [ stack ]

00007fffc43e0000 8 r-x-- 0000000000000000 000:00000 [ anon ]

ffffffffff 4 r-x-- 0000000000000000 000:00000 [ anon ]

mapped: K writeable/private: 1864K shared: 28K

最后一行非常重要:

mapped: K 内存映射所占空间大小

writeable/private: 1864K 私有地址空间大小

shared: 28K 共享地址空间大小

11. netstat和ss - 网络相关信息

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

从整体上看,netstat的输出结果可以分为两个部分:

一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

[root@CentOS7 ~]# netstat

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 10.0.2.15:33164 ec2-54-191-11-118:https ESTABLISHED

tcp 0 0 10.0.2.15:52665 123.59.42.81:https ESTABLISHED

tcp 0 52 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED

tcp 0 0 10.0.2.15:53607 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:52666 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:52321 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:40108 123.59.138.92:https ESTABLISHED

tcp 0 0 10.0.2.15:55494 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:55490 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:53608 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:55495 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:54883 123.59.42.81:https ESTABLISHED

Active UNIX domain sockets (w/o servers)

Proto RefCnt Flags Type State I-Node Path

unix 2 [ ] DGRAM 6846 /run/systemd/notify

unix 5 [ ] DGRAM 6858 /run/systemd/journal/socket

unix 22 [ ] DGRAM 6860 /dev/log

unix 2 [ ] DGRAM 9469 /run/systemd/shutdownd

unix 2 [ ] DGRAM 14069

unix 2 [ ] DGRAM

unix 3 [ ] STREAM CONNECTED

常见参数

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

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

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

-n 拒绝显示别名,能显示数字的全部转化成数字。

-l 仅列出有在 Listen (监听) 的服務状态

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

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

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

-s 按各个协议进行统计

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

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

[root@CentOS7 ~]# netstat -at 列出所有 tcp 端口

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 192.168.122.1:domain 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN

tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN

tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN

tcp 0 0 10.0.2.15:33164 ec2-54-191-11-118:https ESTABLISHED

tcp 0 0 10.0.2.15:52665 123.59.42.81:https ESTABLISHED

tcp 0 52 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED

tcp 0 0 10.0.2.15:53607 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:52666 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:37671 123.59.87.202:https ESTABLISHED

tcp 0 0 10.0.2.15:52321 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:55494 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:55490 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:53608 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:55495 123.59.42.81:https ESTABLISHED

tcp 0 0 10.0.2.15:54883 123.59.42.81:https ESTABLISHED

tcp6 0 0 [::]:ssh [::]:* LISTEN

tcp6 0 0 localhost:ipp [::]:* LISTEN

tcp6 0 0 localhos:x11-ssh-offset [::]:* LISTEN

[root@CentOS7 ~]# netstat -au 列出所有 udp 端口

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State

udp 0 0 0.0.0.0:mdns 0.0.0.0:*

udp 0 0 0.0.0.0:53491 0.0.0.0:*

udp 0 0 0.0.0.0:47643 0.0.0.0:*

udp 0 0 192.168.122.1:domain 0.0.0.0:*

udp 0 0 0.0.0.0:bootps 0.0.0.0:*

udp 0 0 localhost:323 0.0.0.0:*

udp 0 0 0.0.0.0:bootpc 0.0.0.0:*

udp 0 0 0.0.0.0:bootpc 0.0.0.0:*

udp 0 0 0.0.0.0:14662 0.0.0.0:*

udp6 0 0 [::]:49441 [::]:*

udp6 0 0 localhost:323 [::]:*

udp6 0 0 [::]:61519 [::]:*

[root@CentOS7 ~]# netstat -lt 只列出所有监听 tcp 端口

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 192.168.122.1:domain 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN

tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN

tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN

tcp6 0 0 [::]:ssh [::]:* LISTEN

tcp6 0 0 localhost:ipp [::]:* LISTEN

tcp6 0 0 localhos:x11-ssh-offset [::]:* LISTEN

[root@CentOS7 ~]# netstat -lu 只列出所有监听 udp 端口

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

udp 0 0 0.0.0.0:mdns 0.0.0.0:*

udp 0 0 0.0.0.0:53491 0.0.0.0:*

udp 0 0 0.0.0.0:47643 0.0.0.0:*

udp 0 0 192.168.122.1:domain 0.0.0.0:*

udp 0 0 0.0.0.0:bootps 0.0.0.0:*

udp 0 0 localhost:323 0.0.0.0:*

udp 0 0 0.0.0.0:bootpc 0.0.0.0:*

udp 0 0 0.0.0.0:bootpc 0.0.0.0:*

udp 0 0 0.0.0.0:14662 0.0.0.0:*

udp6 0 0 [::]:49441 [::]:*

udp6 0 0 localhost:323 [::]:*

udp6 0 0 [::]:61519 [::]:*

[root@CentOS7 ~]# netstat -lu 只列出所有监听 udp 端口

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

udp 0 0 0.0.0.0:mdns 0.0.0.0:*

udp 0 0 0.0.0.0:53491 0.0.0.0:*

udp 0 0 0.0.0.0:47643 0.0.0.0:*

udp 0 0 192.168.122.1:domain 0.0.0.0:*

udp 0 0 0.0.0.0:bootps 0.0.0.0:*

udp 0 0 localhost:323 0.0.0.0:*

udp 0 0 0.0.0.0:bootpc 0.0.0.0:*

udp 0 0 0.0.0.0:bootpc 0.0.0.0:*

udp 0 0 0.0.0.0:14662 0.0.0.0:*

udp6 0 0 [::]:49441 [::]:*

udp6 0 0 localhost:323 [::]:*

udp6 0 0 [::]:61519 [::]:*

[root@CentOS7 ~]# netstat -lx 只列出所有监听 UNIX 端口

Active UNIX domain sockets (only servers)

Proto RefCnt Flags Type State I-Node Path

unix 2 [ ACC ] STREAM LISTENING /run/user/0/pulse/native

unix 2 [ ACC ] STREAM LISTENING 9738 /run/lvm/lvmpolld.socket

unix 2 [ ACC ] STREAM LISTENING /run/user/0/keyring/pkcs11

unix 2 [ ACC ] STREAM LISTENING /run/user/0/keyring/ssh

unix 2 [ ACC ] STREAM LISTENING /run/user/0/keyring/control

unix 2 [ ACC ] STREAM LISTENING 19100 @/tmp/.X11-unix/X0

显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su

[root@CentOS7 ~]# netstat -st

IcmpMsg:

InType3: 42

InType11: 24

OutType3: 48

Tcp:

71276 active connections openings

26415 passive connection openings

443 failed connection attempts

22567 connection resets received

13 connections established

segments received

segments send out

1531 segments retransmited

0 bad segments received.

resets sent

UdpLite:

TcpExt:

4160 TCP sockets finished time wait in fast timer

delayed acks sent

243 delayed acks further delayed because of locked socket

Quick ack mode was activated 64 times

119 packets directly queued to recvmsg prequeue.

bytes directly in process context from backlog

bytes directly received in process context from prequeue

packet headers predicted

151 packets header predicted and directly queued to user

acknowledgments not containing data payload received

predicted acknowledgments

49 congestion windows recovered without slow start after partial ack

6 retransmits in slow start

172 other TCP timeouts

TCPLossProbes: 855

TCPLossProbeRecovery: 831

48 DSACKs sent for old packets

863 DSACKs received

20455 connections reset due to unexpected data

44 connections reset due to early user close

21 connections aborted due to timeout

TCPDSACKIgnoredNoUndo: 833

TCPSpuriousRTOs: 4

IPReversePathFilter: 314

TCPRetransFail: 10

TCPRcvCoalesce: 30786

TCPChallengeACK: 7

TCPSpuriousRtxHostQueues: 29

TCPAutoCorking: 1236

TCPSynRetrans: 616

TCPOrigDataSent:

TCPHystartTrainDetect: 4

TCPHystartTrainCwnd: 82

IpExt:

InNoRoutes: 32

InMcastPkts: 1724

OutMcastPkts: 738

InBcastPkts: 43901

InOctets:

OutOctets:

InMcastOctets:

OutMcastOctets:

InBcastOctets:

InNoECTPkts:

[root@CentOS7 ~]# netstat -su

IcmpMsg:

InType3: 42

InType11: 24

OutType3: 48

Udp:

packets received

48 packets to unknown port received.

0 packet receive errors

packets sent

0 receive buffer errors

0 send buffer errors

UdpLite:

IpExt:

InNoRoutes: 32

InMcastPkts: 1724

OutMcastPkts: 738

InBcastPkts: 43901

InOctets:

OutOctets:

InMcastOctets:

OutMcastOctets:

InBcastOctets:

InNoECTPkts:

在 netstat 输出中显示 PID 和进程名称

[root@CentOS7 ~]# netstat -pt

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 10.0.2.15:33164 ec2-54-191-11-118:https ESTABLISHED 23944/firefox

tcp 0 0 10.0.2.15:52665 123.59.42.81:https ESTABLISHED 24872/daotunnel

tcp 0 388 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED 23358/sshd: root@pt

tcp 0 0 10.0.2.15:53607 123.59.42.81:https ESTABLISHED 24872/daotunnel

tcp 0 0 10.0.2.15:52666 123.59.42.81:https ESTABLISHED 24872/daotunnel

tcp 0 0 10.0.2.15:52321 123.59.42.81:https ESTABLISHED 24872/daotunnel

tcp 0 0 10.0.2.15:40833 123.59.87.200:https ESTABLISHED 920/daomonit

netstat 将每隔一秒输出网络信息

[root@CentOS7 ~]# netstat -c

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 10.0.2.15:33164 ec2-54-191-11-118:https ESTABLISHED

tcp 0 0 10.0.2.15:52665 123.59.42.81:https ESTABLISHED

tcp 0 52 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED

显示系统不支持的地址族

[root@CentOS7 ~]# netstat --verbose

netstat: no support for `AF IPX' on this system.

netstat: no support for `AF AX25' on this system.

netstat: no support for `AF X25' on this system.

netstat: no support for `AF NETROM' on this system.

显示核心路由信息

[root@CentOS7 ~]# netstat -r

Kernel IP routing table

Destination Gateway Genmask Flags MSS Window irtt Iface

default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0

10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0

192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1

192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

找出程序运行的端口

[root@CentOS7 ~]# netstat -ap | grep ssh

tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 925/sshd

tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN 23358/sshd: root@pt

tcp 0 52 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED 23358/sshd: root@pt

显示网络接口列表

[root@CentOS7 ~]# netstat -i

Kernel Interface table

Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg

docker0 1500 0 0 0 0 0 0 BMU

eth0 1500 0 0 0 0 0 0 BMRU

eth1 1500 0 0 0 83187 0 0 0 BMRU

lo 65536 0 0 0 0 0 0 LRU

virbr0 1500 0 0 0 0 0 0 0 0 BMU

ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

命令参数:

-h, --help 帮助信息

-V, --version 程序版本信息

-n, --numeric 不解析服务名称

-r, --resolve        解析主机名

-a, --all 显示所有套接字(sockets)

-l, --listening 显示监听状态的套接字(sockets)

-o, --options        显示计时器信息

-e, --extended      显示详细的套接字(sockets)信息

-m, --memory        显示套接字(socket)的内存使用情况

-p, --processes 显示使用套接字(socket)的进程

-i, --info 显示 TCP内部信息

-s, --summary 显示套接字(socket)使用概况

-4, --ipv4          仅显示IPv4的套接字(sockets)

-6, --ipv6          仅显示IPv6的套接字(sockets)

-0, --packet        显示 PACKET 套接字(socket)

-t, --tcp 仅显示 TCP套接字(sockets)

-u, --udp 仅显示 UCP套接字(sockets)

-d, --dccp 仅显示 DCCP套接字(sockets)

-w, --raw 仅显示 RAW套接字(sockets)

-x, --unix 仅显示 Unix套接字(sockets)

-f, --family=FAMILY  显示 FAMILY类型的套接字(sockets),FAMILY可选,支持  unix, inet, inet6, link, netlink

-A, --query=QUERY, --socket=QUERY

QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

-D, --diag=FILE    将原始TCP套接字(sockets)信息转储到文件

-F, --filter=FILE  从文件中都去过滤器信息

FILTER := [ state TCP-STATE ] [ EXPRESSION ]

显示TCP连接

[root@CentOS7 ~]# ss -t -a

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 5 192.168.122.1:domain *:*

LISTEN 0 128 *:ssh *:*

LISTEN 0 128 127.0.0.1:ipp *:*

LISTEN 0 128 127.0.0.1:x11-ssh-offset *:*

ESTAB 0 0 10.0.2.15:33164 54.191.11.118:https

显示 Sockets 摘要

[root@CentOS7 ~]# ss -s

Total: 555 (kernel 567)

TCP: 21 (estab 13, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total IP IPv6

*    567 - -

RAW    2 0 2

UDP    14 11 3

TCP    20 17 3

INET    36 28 8

FRAG    0 0 0

列出所有打开的网络连接端口

[root@CentOS7 ~]# ss -l

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port

nl UNCONN 0 0 rtnl: *

nl UNCONN 0 0 rtnl: *

nl UNCONN 0 0 rtnl:geoclue/23600 *

查看进程使用的socket

[root@CentOS7 ~]# ss -pl

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port

nl UNCONN 0 0 rtnl: *

nl UNCONN 0 0 rtnl: *

显示所有UDP Sockets

[root@CentOS7 ~]# ss -u -a

State Recv-Q Send-Q Local Address:Port Peer Address:Port

UNCONN 0 0 *:mdns *:*

UNCONN 0 0 *:53491 *:*

ESTAB 0 0 10.0.2.15:42245 120.25.108.11:ntp

UNCONN 0 0 *:47643 *:*

UNCONN 0 0 192.168.122.1:domain *:*

UNCONN 0 0 *%virbr0:bootps *:*

UNCONN 0 0 127.0.0.1:323 *:*

UNCONN 0 0 *:bootpc *:*

UNCONN 0 0 *:bootpc *:*

UNCONN 0 0 *:14662 *:*

ESTAB 0 0 10.0.2.15:39026 202.118.1.81:ntp

12. tcpdump:详细的网络流量分析

用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

参数:

-nn,直接以 IP 及 Port Number 显示,而非主机名与服务名称。

-i,后面接要「监听」的网络接口,例如 eth0, lo, ppp0 等等的接口。

-w,如果你要将监听所得的数据包数据储存下来,用这个参数就对了。后面接文件名。

-c,监听的数据包数,如果没有这个参数, tcpdump 会持续不断的监听,直到用户输入 [ctrl]-c 为止。

-A,数据包的内容以 ASCII 显示,通常用来捉取 WWW 的网页数据包资料。

-e,使用资料连接层 (OSI 第二层) 的 MAC 数据包数据来显示。

-q,仅列出较为简短的数据包信息,每一行的内容比较精简。

-X,可以列出十六进制 (hex) 以及 ASCII 的数据包内容,对于监听数据包内容很有用。

-r,从后面接的文件将数据包数据读出来。那个「文件」是已经存在的文件,并且这个「文件」是由 -w 所制作出来的。

所欲捕获的数据内容:我们可以专门针对某些通信协议或者是 IP 来源进行数据包捕获。那就可以简化输出的结果,并取得最有用的信息。

常见的表示方法有:

'host foo', 'host 127.0.0.1' :针对单台主机来进行数据包捕获。

'net 192.168' :针对某个网段来进行数据包的捕获。

'src host 127.0.0.1' 'dst net 192.168':同时加上来源(src)或目标(dst)限制。

'tcp port 21':还可以针对通信协议检测,如tcp、udp、arp、ether 等。

除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'||'。

[root@CentOS7 ~]# tcpdump -i eth0

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

02:58:12. IP 10.0.2.15.41384 > 123.59.138.93.https: Flags [F.], seq , ack , win 42600, length 0

02:58:12. IP 123.59.138.93.https > 10.0.2.15.41384: Flags [.], ack 1, win 65535, length 0

02:58:12. IP 10.0.2.15.43009 > 112.54.207.8.domain: 15449+ PTR? 93.138.59.123.in-addr.arpa. (44)

02:58:12. IP 123.59.138.93.https > 10.0.2.15.41384: Flags [P.], seq 1:54, ack 1, win 65535, length 53

02:58:12. IP 10.0.2.15.41384 > 123.59.138.93.https: Flags [R], seq , win 0, length 0

02:58:12. IP 123.59.138.93.https > 10.0.2.15.41384: Flags [F.], seq 54, ack 1, win 65535, length 0

35 packets captured

162 packets received by filter

97 packets dropped by kernel

0b1331709591d260c1c78e86d0c51c18.png

知秋君
上一篇 2024-11-09 11:02
下一篇 2024-11-07 11:02

相关推荐