linux lsof常用方法
lsof简介
lsof(list open files)是一个列出当前系统打开文件的工具,在linux环境下,任何事物都是以文件形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。系统为应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。而应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,通过lsof工具能够查看这个列表。
平时工作中,最常使用的命令是lsof -i:端口号,查看端口号是否被占用。如果端口号被占用,kill掉
kill `lsof -t -i:9981`
常用选项
- 默认:没有选项,列出所有活跃进程的所有打开文件
- -a:结果进行“与”运算
- -l:输出显示用户id而不是用户名
- -t:仅获取进程id
- -U:获取UNIX套接字地址
- -i:显示所有连接
- -i [46] [protocol] [@hostname|hostaddr] [:port|service]
4 -> IPV4
6 -> IPV6
protocol -> TCP or UDP
hostname -> Internet host name
hostaddr -> IPv4地址
service -> /etc/service中 service name
port -> 端口号
查看端口号运行情况
# lsof -i:8100 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME server 17557 root 3u IPv4 757199778 0t0 TCP *:xprint-server (LISTEN)
获取指定主机的连接
lsof -i@10.13.1.135 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME kubelet 8800 root 5u IPv4 766473835 0t0 TCP 77-9-162-bx-core.jpool.sinaimg.cn:50405->10.13.1.135:webcache (ESTABLISHED) kubelet 8800 root 11u IPv4 766240275 0t0 TCP 77-9-162-bx-core.jpool.sinaimg.cn:33368->10.13.1.135:webcache (ESTABLISHED)
获取主机:端口的连接
# lsof -i@10.13.1.135:8080 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME kubelet 8800 root 5u IPv4 766473835 0t0 TCP 77-9-162-bx-core.jpool.sinaimg.cn:50405->10.13.1.135:webcache (ESTABLISHED)
-t 只返回pid
# lsof -t -i@10.13.1.135:8080 8800 21841
获取IPV4流量
# lsof -i 4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
qservice_ 594 root 9u IPv4 701348672 0t0 TCP 77-9-162-bx-core.jpool.sinaimg.cn:20808->77-9-162-bx-core.jpool.sinaimg.cn:55515 (ESTABLISHED)
qservice_ 594 root 10u IPv4 503226876 0t0 TCP localhost:cslistener (LISTEN)