lsof命令的用法

2011年8月23日 发表评论 阅读评论

lsof被称为unix/linux 调试的瑞士军刀,一般root用户才能执行lsof命令,普通用户可以看见/usr/sbin/lsof命令,但是普通用户执行会显示“permission denied” ,其具体用法如下:

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

lsof的-i选项可以列出所有打开了网络套接字(TCP和UDP)的进程。
列出所有TCP网络连接

# lsof -i tcp

也可以为-i选项加上参数,比如tcp,tcp选项会强制lsof只列出打开TCP sockets的进程。

列出所有UDP网络连接

# lsof -i udp

同样udp让lsof只列出使用UDP socket的进程。语法:

# 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,列出打开的文件 

# lsof -u ucsp

-u选项限定只列出所有被用户ucsp打开的文件,你可以通过逗号指定多个用户:

# lsof -u sms,root   (该条也可使用lsof -u sms -u root)

这条命令会列出所有sms和root用户打开的文件。

找到某个用户的所有网络连接

# lsof -a -u hacker -i

使用-a将-u和-i选项组合可以让lsof列出某个用户的所有网络行为。

列出所有NFS(网络文件系统)文件

# lsof -N

这个参数很好记,-N就对应NFS。

列出所有UNIX域Socket文件

# lsof -U

这个选项也很好记,-U就对应UNIX。

列出所有对应某个组id的进程

# lsof -g 1234

复合查询(OR)被打开文件信息

#lsof -u nobody -c httpd

复合查询(AND)被打开文件信息

#lsof -a -u root -c httpd

查看除root之外所有用户的被打开文件

#lsof -u ^root

查看具体进程PID的被打开文件

#lsof -p 10101

#lsof -p 10101,10102,10103

lsof在实际操作中的一个重要应用:查看那些已经删除但仍被某个进程占用的文件。(该状况下会出现空间得不到释放的问题)当你的磁盘空间爆满时,而又发现文件所占空间并未达到磁盘上限时可以使用命令lsof |grep deleted命令查看下那些已被删除但仍未被释放的文件,如下图:

17 

发现该情况时可通过两个方法解决问题。

一、查看占用该文件的进程,杀掉该进程,文件被释放,空间也就释放了。
二、但遇到僵死进程时, kill或kill -9命令是无法结束该进程的,只有重启服务器,杀死进程,空间也就自己释放了。

所以,平时我们在删除文件时,能使用清空命令而不用删除时,尽量使用清空命令。如:echo " ">a.out,这样就将a.out文件的内容清空了。




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: Linux/unix/mac 标签: ,
  1. azhu
    2011年8月24日19:46 | #1

    😉 不错看了受益匪浅,希望更多的好东西分享出来。