« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 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 | | | | | |
| 公告 |
|
Blog信息 |
blog名称:FoxWolf 日志总数:127 评论数量:246 留言数量:0 访问次数:854634 建立时间:2006年5月31日 |

| |
[Linux工具]lsof 快速起步 文章收藏, 软件技术, 电脑与网络
FoxWolf 发表于 2008/5/19 11:01:56 |
lsof 快速起步
lsof 工具介绍作者: etony来自: Linuxsir.org提要: lsof(lsof的全称是list open files),此工具可以用来查看正在运行中的进程打开了哪些文件、目录和套接字;是系统监测工具之一。在服务器管理中,我们还是常用到这个工具的。如果有需要的弟兄,建议还是看看。最少也知道lsof是做什么用的。
关于本文:
本文是etony兄所写,lsof工具可以说是系统监测工具之一。在我看来这个工具还是比较重要的,虽然本文很短,但入门足够。此文权当抛砖引玉吧; 我们倒是希望看到一个更权威的lsof工具说明书。当然最好是有实例的,而不是简单的翻译MAN; —— 北南南北 at 2006/08/17
Abstract:通过大量的示例介绍使用lsof的方法.
Contents 查看对某个文件的使用情况 查看对文件系统的使用 查找打开,但是不能连接的文件
无法卸载 查看监听socket 查看某个网络连接 识别 Netstat 连接 查找针对某个命令打开的文件 查看某个用户的操作 更多信息 Bibliography
查看对某个文件的使用情况 查看哪些进程对某个文件进行了调用:
$ lsof /etc/passwd 1
查看对文件系统的使用 /tmp目录被垃圾文件塞满了, 但是, 用ls 又看不到太大文件, 谁干的?
$ lsof /tmp
查找打开,但是不能连接的文件 一个进程打开一个文件, 然后将其设为 unlinked 状态, 则此文件资源仍能被进程使用, 但是其访问路径已经被删除了. 因此, 使用ls不能将其列出. 只有当进程结束时, 才能释放文件占用的资源
查找unlinked 文件, 选项 +L, 作用: 列出打开文件的连接数
$lsof +L
指定连接数的上限 $lsof +L1
同时指定文件系统, 则需要使用 -a(AND) 选项
$ lsof -a +L1 /home
无法卸载 查看谁令mount的分区无法卸载
$ lsof <file_system_name>
查看监听socket 查看网络服务 $ lsof -i
查看某个网络连接 $ lsof -i@aaa.bbb.ccc
$ lsof -iTCP@aaa.bbb.ccc:ftp-data *指定协议*
$ lsof -i4 *指定IP版本*
$ lsof -i6
识别 Netstat 连接 例如: netstat -p -t -n 的输出为: Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 218.56.203.246:52634 202.109.72.72:7000 ESTABLISHED
则可以: tony@tony:~$ lsof -iTCP@202.109.72.72:7000
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
xchat 4505 tony 12u IPv4 5775 TCP 218.56.203.246:52634->202.109.72.72:afs3-fileserver (ESTABLISHED)
查找针对某个命令打开的文件 使用命令的PID
$ lsof -p <PID>
使用命令名称
$ lsof -c <first_characters_of_command_name_that_interest_you>
$ lsof -c sendmail
查看谁在使用设备文件
$ lsof /dev/hda6
查看某个用户的操作 $ id -u tony
1000
$ lsof -u1000 or $ lsof -utony
$ lsof -u^tony * 则是取反的意思*
更多信息 更多信息参阅 lsof 的联机手册losf(1).
Bibliography
附:Lsof命令详解
一般root用户才能执行lsof命令,普通用户可以看见/usr/sbin/lsof命令,但是普通用户执行会显示“permission denied”
我总结一下lsof指令的用法:
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的进程
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
tcp@ohaha.ks.edu.tw:ftp - TCP protocol hosthaha.ks.edu.tw service name:ftp
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
例子: lsof -i tcp@ohaha.ks.edu.tw:ftp -n
lsof -p 12 看进程号为12的进程打开了哪些文件
lsof +|-r [t] 控制lsof不断重复执行,缺省是15s刷新
-r,lsof会永远不断的执行,直到收到中断信号
+r,lsof会一直执行,直到没有档案被显示
例子:不断查看目前ftp连接的情况:lsof -i tcp@ohaha.ks.edu.tw:ftp -r
lsof -s 列出打开文件的大小,如果没有大小,则留下空白
lsof -u username 以UID,列出打开的文件
一般root用户才能执行lsof命令,普通用户可以看见/usr/sbin/lsof命令,但是普通用户执行会显示“permission denied”
我总结一下lsof指令的用法:
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的进程
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
tcp@ohaha.ks.edu.tw:ftp - TCP protocol hosthaha.ks.edu.tw service name:ftp
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
例子: lsof -i tcp@ohaha.ks.edu.tw:ftp -n
lsof -p 12 看进程号为12的进程打开了哪些文件
lsof +|-r [t] 控制lsof不断重复执行,缺省是15s刷新
-r,lsof会永远不断的执行,直到收到中断信号
+r,lsof会一直执行,直到没有档案被显示
例子:不断查看目前ftp连接的情况:lsof -i tcp@ohaha.ks.edu.tw:ftp -r
lsof -s 列出打开文件的大小,如果没有大小,则留下空白
lsof -u username 以UID,列出打开的文件
[root@tcx160 FILES]# lsof -i tcp:22
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 3261 root 3u IPv6 7301 TCP *:ssh (LISTEN)
sshd 19692 root 3u IPv6 348642 TCP 9.186.96.160:ssh->9.186.96.117:32914 (ESTABLISHED) |
|
|