Linux查看监听的端口进程
Posted by 付辉 on Tuesday, July 10, 2018 共859字Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字。另外它还能列出处于监听状态(即等待接入请求)的套接字。经常使用 netstat 用于查看网络连接信息和系统开启的端口号。
还有一个完美替代它的命令ss
,全称是socket statistics
。ss
的优点就在于“天下武功唯快不破”。
引言
已知服务监听的端口,想查找当前服务的PID
。我们可以拆解成2个子问题:
- 如何查看该端口是否在被服务监听
- 如何查看该端口的
PID
ps
用于查看服务器上的进程信息.最最常用的就是:
ps -ef
netstat
显示的状态列:Proto,Recv-Q,Send-Q,Local Address,Foreign Address,State。其中Recv-Q和Send-Q分别代表接收队列和发送队列。这些数字一般都是0,如果不是,则表示软件包正在队列中堆积。
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 enlightened:domain *:* LISTEN
比较有用的选项是:
-n
:Show network addresses as numbers (normally netstat interprets addresses and attempts to display them symbolically). This option may be used with any of the display formats.
-a
:With the default display, show the state of all sockets; normally sockets used by server processes are not shown. With the routing table display (option -r, as described below), show protocol-cloned routes (routes generated by a RTF_PRCLONING parent route); normally these routes are not shown.
示例
查看当前服务器上Redis
的连接情况。比如TCP
协议的time_wait
,close
,establish
等状态。
netstat -at | grep '10.108.82.195:6683' | awk '{print $5}'
\ |awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -20
回到那个问题,查看当前是否有服务正在监听3900端口。
netstat -an | grep 3900
ss
我个人非常喜欢这个命令,方便,最主要是快。
它的基本选项包括:
-a 打印所有的连接
-t 列出TCP协议的连接
-u 列出UDP协议的连接
-n 禁止域名解析功能。
-l 正常监听(listen)状态的套接字
-p 获取连接对应的进程ID和程序名
-e 获取进程所属的用户名
-s 网络统计信息
-r 打印内核路由信息。打印出来的信息与 route 命令输出的信息一样
-i 打印网络接口信息。-ei等同于ifconfig
telnet
差点忘记这个命令,也可以用来查看端口是否被占用。最常见的就是连接redis
:
telnet host port
查看网站是否支持https
,telnet
一下它的443端口就可以搞定。
lsof
命令的全称list open file
。
lsof -i:22 #查看22端口连接情况