一、lsof命令
lsof 是 List Open File 的缩写, 它主要用来获取被进程打开文件的信息,比如: 普通文件,目录,特殊的块文件,管道,socket套接字,设备,Unix域套接字等等,同时,它还可以结合 grep 以及 ps 命令进行更多的高级搜索。
1、安装
lsof 命令默认是没有安装的,而且它的使用需要有root权限或者赋予普通用于sudo权限:
使用以下 命令
安装。
yum install -y lsof
开始安装:
安装完毕
2、用法
(1)列出所有打开文件
不带任何参数执行 lsof 命令会输出当前所有活跃进程打开的所有文件:
由于lsof命令会输出很多信息,所以也可以使用了 lsof | more 来分页显示命令输出结果:
lsof | more
输出结果中,第一列中 systemd 的进程ID是 1,它是一个守护进程
其中列 COMMAND 、PID、USER 分别表示进程名、进程ID、所属用户
列 FD 是文件描述符,下面是可能的类型以及说明:
FD | 说明 |
---|---|
cwd | 当前目录 |
rtd | root目录 |
txt | txt文件 |
mem | 内存映射文件 |
列 TYPE 是文件类型,下面是可能的值以及说明:
TYPE | 说明 |
---|---|
DIR | 目录 |
REG | 普通文件 |
CHR | 字符 |
a_inode | Inode文件 |
FIFO | 管道或者socket文件 |
netlink | 网络 |
unknown | 未知 |
列 DEVICE 表示设备ID、列 SIZE/OFF 表示进程大小、列 NODE 表示文件的Inode号、列NAME 表示路径或者链接
(2)找出打开着但已被删除了的文件
有这样一个场景,一个进程被打开后,这个进程文件被新一版本的进程文件替代后再次被打开,虽然旧版本的进程文件被删除了,但是旧版本的进程然后是被打开运行着的,,它仍然占用系统的资源,我们可以结合grep
命令找出这种正在运行,但是已经被删除的进程:
lsof | grep deleted
(3)列出所有打开了的网络文件(可在查询端口使用):
lsof -i
列出在指定端口上打开的文件:
使用lsof -i:端口号
可以获得所有在指定端口号上打开的文件:
lsof -i:19010
二、netstat命令
用法
(1)列出所有端口
netstat -a
(2)使用ip地址列出所有处理监听状态的TCP端口,且加上程序名
netstat -atnlp
说明:
ITEM | 说明 |
---|---|
Proto | 协议名(tcp协议还是udp协议) |
recv-Q | 网络接收队列:表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,Q是Queue的缩写 |
send-Q | 对方没有收到的数据或者说没有Ack的,还是本地缓冲区。如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快;Recv-Q和Send-Q这两个值通常应该为0,如果不为0可能是有问题的。短暂的Send-Q队列发送pakets非0是正常状态。 |
Local Address | 1)Local Address 部分的0.0.0.0:48888表示监听服务器上所有ip地址的所有(0.0.0.0表示本地所有ip),比如你的服务器是有172.172.230.210和172.172.230.11两个ip地址,那么0.0.0.0:48888此时表示监听172.172.230.210,172.172.230.211,127.0.0.1三个地址的48888端口;2)127.0.0.1:19020这个表示监听本机的loopback地址的19020端口(如果某个服务只监听了回环地址,那么只能在本机进行访问,无法通过tcp/ip 协议进行远程访问);3)10.10.220.142:19010这是因为我们在启动的时候指定了10.10.220.142:19010参数,如果不指定的话,会监听0.0.0.0:19010 |
Foreign Address | 与本机端口通信的外部socket。显示规则与Local Address相同 |
State | 链路状态,共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的。 |
state列常见状态额外说明:
1、LISTEN :首先服务端需要打开一个socket进行监听,状态为LISTEN./*The socket is listening for incoming connections. 侦听来自远方TCP端口的连接请求 /
2、ESTABLISHED:代表一个打开的连接,双方可以进行或已经在数据交互了。/ The socket has an established connection. 代表一个打开的连接,数据可以传送给用户 */
3、SYN_SENT:/*The socket is actively attempting to establish aconnection. 在发送连接请求后等待匹配的连接请求 /
4、SYN_RECV:服务端应发出ACK确认客户端的 SYN,同时自己向客户端发送一个SYN.之后状态置为SYN_RECV/ A connection request has been received from the network. 在收到和发送一个连接请求后等待对连接请求的确认 */
(3)显示所有TCP的统计信息
netstat -rn
输出:
说明:
Destination:目标网络或者主机。
Gateway:网关地址,如果没有设置则为*。
Genmask:目标网络掩码;如果默认路由则用"0.0.0.0"。
三、SS命令
1、说明:
ss 命令用来显示处于活动状态的套接字信息。ss 命令可以用来获取 socket 统计信息,它可以显示和 netstat 类似的内容。但ss的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快速更高效。
当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接cat /proc/net/tcp,执行速度都会很慢。
命令格式:
ss [options] [ FILTER ]
2、常见用法
(1)显示所有 TCP 连接。
ss -t -a
(2)显示套接字使用概况
ss -s
(3)显示监听状态的套接字
ss -l
(4)查看指定端口的信息
ss -lp | grep 9088