持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情
lsof
lsof(list open files)可以列出当前系统中进程打开的所有文件,在Linux环境下,我们可以理解为一切(包括网络套接口)皆文件。在实际使用过程中,lsof是一款非常强大的系统监控和系统诊断工具。
lsof -h
显示帮助文档来展示其包含的命令,可以看到其命令还是非常多的,很强大。你可以使用它来获得你系统上设备的信息,你能通过它了解到指定的用户在指定的地点正在碰什么东西,或者甚至是一个进程正在使用什么文件或网络连接。
注: lsof命令的默认行为是对结果进行"或"运算。因此,如果你正是用-i来拉出一个端口列表,同时又用-p来拉出一个进程列表,那么默认情况下你会获得两者的结果。
一些常见的选项
-
默认: 没有选项,lsof列出活跃进程的所有打开文件
-
-a: 结果进行"与"运算(而不是"或")
-
-l: 在输出显示用户Id而不是用户名
-
-t: 获得进程id
-
-u: 获取UNIX套接口地址
-
-F: 格式化输出结果
获取网络信息
-
-i显示所有连接
-
-i 6仅获取Ipv6流量
lsof -i 6
-
仅显示TCP连接(同理可获得UDP连接)
lsof -iTCP
-
查询指定端口相关的网络信息
通过端口搜索,方便找到端口被占用情况
lsof -i :8080
-
使用@host来显示指定到主机的链接
lsof -i@10.0.0.1
-
使用@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 xxxx
-
杀死指定用户所做的一切事情
kill -9 `lsof -t -u whoops`
命令和进程
可以查看指定程序或进程由什么启动,这通常会很有用,而你可以使用lsof通过名称或进程ID过滤来完成这个任务。下面列出了一些选项:
使用-c查看指定的命令正在使用的文件和网络连接
lsof -c syslog-ng
使用-p查看指定进程ID已打开的内容
lsof -p 10075
-t选项只返回PID
lsof -t -c Mail
文件和目录
通过查看指定文件或目录,你可以看到系统上所有正与其交互的资源——包括用户、进程等。
显示与指定目录交互的所有一切
lsof /var/log/messages/
显示与指定文件交互的所有一切
lsof /home/whoops/test.txt
高级用法
与tcpdump类似,当你开始组合查询时,它就显示了它强大的功能。
显示whoops连接到1.1.1.1所做的一切
lsof -u whoops -i @1.1.1.1
同时使用-t和-c选项以给进程发送 HUP 信号
kill -HUP `lsof -t -c sshd`
lsof +L1显示所有打开的链接数小于1的文件
这通常(当不总是)表示某个攻击者正尝试通过删除文件入口来隐藏文件内容。
# lsof +L1
显示某个端口范围的打开的连接
# lsof -i @fw.google.com:2150=2180