linux命令 lsof

文章目录

  • lsof命令选项
    • 获取网络信息
    • 显示所有的连接
    • 查看某个端口显示的网络信息
    • 只显示TCP/UDP连接
    • 检查某个用户在干什么
    • 查看指定主机的连接
    • 也可以查看主机和端口之间的连接
    • 显示指定目录交互的一切包括用户和进程等
  • 高级用法
    • 同时使用-t和-c选项以给进程发送 HUP 信号
    • lsof +L1显示所有打开的链接数小于1的文件
    • 显示某个端口的打开的连接
  • 资源
  • 小结

lsof命令选项

这个命令基本可以替代netstat 和 ps 功能十分强大

1
2
3
4
5
6
7
8
9
10
11
ps: 下面的一些其它东西需要牢记:
    默认 : 没有选项,lsof列出活跃进程的所有打开文件
    组合 : 可以将选项组合到一起,如-abc,但要当心哪些选项需要参数
    -a : 结果进行“与”运算(而不是“或”)
    -l : 在输出显示用户ID而不是用户名
    -h : 获得帮助
    -t : 仅获取进程ID
    -U : 获取UNIX套接口地址
    -F : 格式化输出结果,用于其它命令。可以通过多种方式格式化,如-F pcfn(用于进程id、命令名、文件描述符、文件名,并以空终止
    -c:查看指定的命令正在使用的文件和网络连接
    -p:查看指定进程ID已打开的内容

获取网络信息

1
2
3
4
5
6
[root@tomcat ~]#  lsof  -i

3.  COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
4.  dhcpcd 6061 root 4u  IPv4  4510 UDP *:bootpc
5.  sshd  7703 root 3u  IPv6  6499 TCP *:ssh  (LISTEN)
6.  sshd  7892 root 3u  IPv6  6757 TCP 10.10.1.5:ssh->192.168.1.5:49901  (ESTABLISHED)

显示所有的连接

1
2
3
4
5
#显示所有的连接
[root@tomcat ~]#  lsof -i

#显示ipv4的网络连接
[root@tomcat ~]#  lsof -i 4

查看某个端口显示的网络信息

1
2
你也可以通过端口搜索,这对于要找出什么阻止了另外一个应用绑定到指定端口实在是太棒了。(检查端口占用问题)
lsof -i :80

只显示TCP/UDP连接

1
2
3
4
[root@tomcat ~]#  losf -i tcp/udp
#也可以显示任何已建立的连接
[root@tomcat ~]#  lsof  -i -sTCP:ESTABLISHED
[root@tomcat ~]#  lsof  -i -sTCP:LISTEN

检查某个用户在干什么

1
2
3
4
5
6
7
8
检查某个用户干了什么
[root@tomcat ~]#  lsof -u root

排除root用户做的事情
[root@tomcat ~]# lsof -u ^root

干掉指定用户运行的所有东西
[root@tomcat ~]# kill  -9  `lsof -t -u daniel`

查看指定主机的连接

1
2
3
[root@tomcat ~]#  lsof [email protected]
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd    36536 root    3u  IPv4 1390238      0t0  TCP test.lixin.com:ssh->10.0.0.1:60604 (ESTABLISHED)

也可以查看主机和端口之间的连接

1
2
3
4
5
这对于你在检查是否开放连接到网络中或互联网上某个指定主机的连接时十分有用

[root@tomcat ~]# lsof [email protected]:22
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd    36536 root    3u  IPv4 1390238      0t0  TCP test.lixin.com:ssh->10.0.0.1:60604 (ESTABLISHED)

显示指定目录交互的一切包括用户和进程等

1
lsof /var/log/nginx/error.log

高级用法

同时使用-t和-c选项以给进程发送 HUP 信号

1
 kill  -HUP `lsof -t -c sshd`

lsof +L1显示所有打开的链接数小于1的文件

这通常 (当不总是)表示某个攻击者正尝试通过删除文件入口来隐藏文件内容。

1
lsof  +L1

显示某个端口的打开的连接

1
lsof  -i @fw.google.com:2150=2180

资源

1
lsof手册页:http://www.netadmintools.com/html/lsof.man.html

小结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
lsof abc.txt 显示开启文件abc.txt的进程

lsof -i :22 知道22端口现在运行什么程序

lsof -c abc 显示abc进程现在打开的文件

lsof -g gid 显示归属gid的进程情况

lsof +d /usr/local/ 显示目录下被进程开启的文件

lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长

lsof -d 4 显示使用fd为4的进程 www.2cto.com

lsof -i 用以显示符合条件的进程情况

语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]

46 --> IPv4 or IPv6

protocol --> TCP or UDP

hostname --> Internet host name

hostaddr --> IPv4位置

service --> /etc/service中的 service name (可以不只一个)

port --> 端口号 (可以不只一个)

例子: TCP:25 - TCP and port 25

@1.2.3.4 - Internet IPv4 host address 1.2.3.4

[email protected]:ftp - TCP protocol hosthaha.ks.edu.tw service name:ftp

lsof -n 不将IP转换为hostname,缺省是不加上-n参数

例子: lsof -i [email protected]:ftp -n

lsof -p 12 看进程号为12的进程打开了哪些文件

lsof +|-r [t] 控制lsof不断重复执行,缺省是15s刷新

-r,lsof会永远不断的执行,直到收到中断信号

+r,lsof会一直执行,直到没有档案被显示

例子:不断查看目前ftp连接的情况:lsof -i [email protected]:ftp -r

lsof -s 列出打开文件的大小,如果没有大小,则留下空白

lsof -u username 以UID,列出打开的文件 www.2cto.com