lsof简介
lsof
是系统管理/安全的工具。经常用来获取与 网络连接
相关的信息,但这只是它众多强大功能中的一个,因为它是指 列出打开文件(lists openfiles)
。而有一点要切记,在 Unix
中一切(包括网络套接口)都是文件。
lsof
有非常多的选项参数,你可以用它获取系统设备信息,能通过它了解指定用户在指定地点正在碰什么东西,或者甚至是一个进程正在使用什么文件或网络连接。
对于我,lsof
替代了 netstat
和 ps
的大部分工作。它可以带来那些工具所能带来的一切,而且要比那些工具多得多。
获取网络连接信息
有些人喜欢用 netstat
来获取网络连接,但是我更喜欢使用 lsof
来进行此项工作。结果以对我来说很直观的方式呈现,我仅仅只需改变我的语法,就可以通过同样的命令来获取更多信息。
# 使用-i显示所有连接
lsof -i
# 在-i后提供对应的协议来仅仅显示TCP或者UDP连接信息。
lsof -iTCP
# -i:port来显示与指定端口相关的网络信息
lsof -i :22
# 使用@host来显示指定到指定主机的连接
lsof -i@172.16.12.5
# 使用@host:port显示基于主机与端口的连接
lsof -i@172.16.12.5:22
# 找出本机正在监听的端口
lsof -i -sTCP:LISTEN
lsof -i | grep -i LISTEN
# 找出已建立的连接
lsof -i -sTCP:ESTABLISHED
lsof -i | grep -i ESTABLISHED
用户信息
你也可以获取各种用户的信息,以及它们在系统上正干着的事情,包括它们的网络活动、对文件的操作等。
# 使用-u显示指定用户打开了什么
lsof -u daniel
# 排除指定用户
lsof -u ^daniel
# 杀死指定用户所做的一切事情
kill -9 `lsof -t -u daniel`
命令和进程
# 使用-c查看指定的命令正在使用的文件和网络连接
lsof -c syslog-ng
# 使用-p查看指定进程ID已打开的内容
lsof -p 10075
# -c与-t选项合用,只返回指定命令的PID
lsof -t -c Mail
文件与目录
# 通过查看指定文件或目录,你可以看到系统上所有正与其交互的资源——包括用户、进程等。
lsof /var/log/messages/
lsof /home/daniel/firewall_whitelist.txt
高级用法
# 显示daniel连接到1.1.1.1所做的一切
lsof -u daniel -i @1.1.1.1
要查看完整参考,可运行 man lsof
命令,或查看 在线版本
Linux 命令神器:lsof 入门 https://linux.cn/article-4099-1.html
lsof — Linux manual page https://www.netadmintools.com/html/lsof.man.html