lsof
原文:https://mp.weixin.qq.com/s/ojjGicmcTNkZTFYOmuc0-w
lsof
意义LiSt Open Files
用于找出哪些文件被哪个进程打开。众所周知Linux/Unix
将所有内容都视为文件(pipes
,sockets
,directories
,devices
等等)。使用的原因之一lsof
命令是当磁盘无法卸载时,因为它表示正在使用文件。借助此命令,我们可以轻松识别正在使用的文件。
1. 使用 lsof 命令列出所有打开的文件
在下面的示例中,它将显示打开文件的长列表,其中一些被提取出来以便更好地理解哪些显示列Command
,PID
,USER
,FD
,TYPE
等等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # lsof COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME init 1 root cwd DIR 253,0 4096 2 / init 1 root rtd DIR 253,0 4096 2 / init 1 root txt REG 253,0 145180 147164 /sbin/init init 1 root mem REG 253,0 1889704 190149 /lib/libc-2 .12.so init 1 root 0u CHR 1,3 0t0 3764 /dev/null init 1 root 1u CHR 1,3 0t0 3764 /dev/null init 1 root 2u CHR 1,3 0t0 3764 /dev/null init 1 root 3r FIFO 0,8 0t0 8449 pipe init 1 root 4w FIFO 0,8 0t0 8449 pipe init 1 root 5r DIR 0,10 0 1 inotify init 1 root 6r DIR 0,10 0 1 inotify init 1 root 7u unix 0xc1513880 0t0 8450 socket |
FD
– 代表文件描述符,可能会看到一些值:
cwd
当前工作目录rtd
根目录txt
程序文本(代码和数据)mem
内存映射文件
- 也在
FD
列号如1u
是实际的文件描述符,后跟 u,r,w 其模式为:
r
用于读取访问。w
用于写访问。u
用于读写访问。
TYPE
– 文件及其标识。
DIR
- 目录REG
– 常规文件CHR
– 字符特殊文件。FIFO
– 先进先出
2. 列出用户特定打开的文件
下面的命令将显示用户所有打开文件的列表rumenz
.
1 2 3 4 5 6 7 8 9 10 | # lsof -u rumenz COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME sshd 1838 rumenz cwd DIR 253,0 4096 2 / sshd 1838 rumenz rtd DIR 253,0 4096 2 / sshd 1838 rumenz txt REG 253,0 532336 188129 /usr/sbin/sshd sshd 1838 rumenz mem REG 253,0 19784 190237 /lib/libdl-2 .12.so sshd 1838 rumenz mem REG 253,0 122436 190247 /lib/libselinux .so.1 sshd 1838 rumenz mem REG 253,0 255968 190256 /lib/libgssapi_krb5 .so.2.2 sshd 1838 rumenz mem REG 253,0 874580 190255 /lib/libkrb5 .so.3.3 |
3. 查找在特定端口上运行的进程
要找出特定端口的所有正在运行的进程,只需使用以下带有选项的命令-i
.下面的例子将列出端口的所有正在运行的进程22
.
1 2 3 4 5 | # lsof -i TCP:22 COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME sshd 1471 root 3u IPv4 12683 0t0 TCP *: ssh (LISTEN) sshd 1471 root 4u IPv6 12685 0t0 TCP *: ssh (LISTEN) |
4. 仅列出 IPv4 和 IPv6 打开的文件
在下面的例子中只显示IPv4
和IPv6
网络文件使用单独的命令打开。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # lsof -i 4 COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954 rpcbind 1203 rpc 8u IPv4 11331 0t0 TCP *:sunrpc (LISTEN) avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600 # lsof -i 6 COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME rpcbind 1203 rpc 9u IPv6 11333 0t0 UDP *:sunrpc rpcbind 1203 rpc 10u IPv6 11335 0t0 UDP *:954 rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN) rpc.statd 1277 rpcuser 10u IPv6 11858 0t0 UDP *:55800 rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN) cupsd 1346 root 6u IPv6 12112 0t0 TCP localhost:ipp (LISTEN) |
5. 列出 TCP 端口范围 1-1024 的打开文件
1 2 3 4 5 6 7 8 9 10 11 12 | # lsof -i TCP:1-1024 COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN) cupsd 1346 root 7u IPv4 12113 0t0 TCP localhost:ipp (LISTEN) sshd 1471 root 4u IPv6 12685 0t0 TCP *: ssh (LISTEN) master 1551 root 13u IPv6 12898 0t0 TCP localhost:smtp (LISTEN) sshd 1834 root 3r IPv4 15101 0t0 TCP 192.168.0.2: ssh ->192.168.0.1:conclave-cpp (ESTABLISHED) sshd 1838 rumenz 3u IPv4 15101 0t0 TCP 192.168.0.2: ssh ->192.168.0.1:conclave-cpp (ESTABLISHED) sshd 1871 root 3r IPv4 15842 0t0 TCP 192.168.0.2: ssh ->192.168.0.1:groove (ESTABLISHED) httpd 1918 root 5u IPv6 15991 0t0 TCP *:http (LISTEN) httpd 1918 root 7u IPv6 15995 0t0 TCP *:https (LISTEN) |
6. 用^
字符排除用户
在这里,我们排除了root
用户。你可以使用排除特定用户^
使用如上所示的命令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # lsof -i -u^root COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954 rpcbind 1203 rpc 8u IPv4 11331 0t0 TCP *:sunrpc (LISTEN) rpcbind 1203 rpc 9u IPv6 11333 0t0 UDP *:sunrpc rpcbind 1203 rpc 10u IPv6 11335 0t0 UDP *:954 rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN) avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600 rpc.statd 1277 rpcuser 5r IPv4 11836 0t0 UDP *:soap-beep rpc.statd 1277 rpcuser 8u IPv4 11850 0t0 UDP *:55146 rpc.statd 1277 rpcuser 9u IPv4 11854 0t0 TCP *:32981 (LISTEN) rpc.statd 1277 rpcuser 10u IPv6 11858 0t0 UDP *:55800 rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN) |
7. 找出谁在查看哪些文件和命令?
下面的例子显示了用户rumenz
正在使用命令ping
和/etc
目录 。
1 2 3 4 5 | # lsof -i -u rumenz COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME bash 1839 rumenz cwd DIR 253,0 12288 15 /etc ping 2525 rumenz cwd DIR 253,0 12288 15 /etc |
8. 列出所有网络连接
带有选项的以下命令‘-i’
显示所有网络连接的列表'LISTENING & ESTABLISHED’
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # lsof -i COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954 rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN) avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600 rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN) cupsd 1346 root 6u IPv6 12112 0t0 TCP localhost:ipp (LISTEN) cupsd 1346 root 7u IPv4 12113 0t0 TCP localhost:ipp (LISTEN) sshd 1471 root 3u IPv4 12683 0t0 TCP *: ssh (LISTEN) master 1551 root 12u IPv4 12896 0t0 TCP localhost:smtp (LISTEN) master 1551 root 13u IPv6 12898 0t0 TCP localhost:smtp (LISTEN) sshd 1834 root 3r IPv4 15101 0t0 TCP 192.168.0.2: ssh ->192.168.0.1:conclave-cpp (ESTABLISHED) httpd 1918 root 5u IPv6 15991 0t0 TCP *:http (LISTEN) httpd 1918 root 7u IPv6 15995 0t0 TCP *:https (LISTEN) clock-app 2362 narad 21u IPv4 22591 0t0 TCP 192.168.0.2:45284->www.gov.com:http (CLOSE_WAIT) chrome 2377 narad 61u IPv4 25862 0t0 TCP 192.168.0.2:33358->maa03s04- in -f3.1e100.net:http (ESTABLISHED) chrome 2377 narad 80u IPv4 25866 0t0 TCP 192.168.0.2:36405->bom03s01- in -f15.1e100.net:http (ESTABLISHED) |
9. 按 PID 搜索
下面的例子只显示了谁PID
是1
[One
]。
1 2 3 4 5 6 7 8 | # lsof -p 1 COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME init 1 root cwd DIR 253,0 4096 2 / init 1 root rtd DIR 253,0 4096 2 / init 1 root txt REG 253,0 145180 147164 /sbin/init init 1 root mem REG 253,0 1889704 190149 /lib/libc-2 .12.so init 1 root mem REG 253,0 142472 189970 /lib/ld-2 .12.so |
10. 杀死特定用户的所有活动
有时你可能必须终止特定用户的所有进程。下面的命令将杀死所有进程rumenz
用户。
1 | # kill -9 `lsof -t -u rumenz` |
初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能