LSOF 和 FUSER

fuser 指令

用途
使用文件或文件结构识别进程。

语法
fuser [ -c | -d | -f ] [ -k ] [ -u ] [ -x ] [ -V ]文件 ...

说明
此 fuser 命令列出了本地进程的进程号,那些本地进程使用File 参数指定的本地或远程文件。对于阻塞特别设备,此命令列出了使用该设备上任何文件的进程。

每个进程号后面都跟随一个字母,该字母指示进程如何使用文件。

c 将此文件作为当前目录使用。
e 将此文件作为程序的可执行对象使用。
r 将此文件作为根目录使用。
s 将此文件作为共享库(或其它可装载对象)使用。

进程号被写入标准输出(在进程号之间有空格的行中)。一个换行符被写入标准错误(在每个文件操作数的最后一个输出之后)。其他所有输出被写入标准错误。

此 fuser 命令不会检测有 mmap 区域的进程,其中相关的文件描述符已从此被关闭。

标记

-c 包含 File的文件系统中关于任何打开的文件的报告。
-d 暗示使用了 -c 和 -x 标志。关于任何与文件系统(自父目录删除的)无链接的打开文件的报告。当与 -V 标志一起使用时,它也会报告被删除文件的节点号和大小。
-f 仅对文件的打开实例报告。
-k 将 SIGKILL 信号发送到每个本地进程。仅有根用户能终止另一用户的进程。
-u 为进程号后圆括号中的本地进程提供登录名。
-V 提供详细输出。
-x 与 -c 或 -f 连用,报告除标准 fuser 输出以外的可执行的和可载入的对象。

示例
若要列出使用 /etc/passwd 文件的本地进程的进程号,请输入:

fuser /etc/passwd要列出使用 /etc/filesystems 文件的进程的进程号和用户登录名,请输入:

fuser -u /etc/filesystems要终止全部使用给定的文件系统的进程,请输入:

fuser -k -x -u /dev/hd1 -OR-
fuser -kxuc /home任一命令都列出了进程号和用户名,然后终止每个正在使用 /dev/hd1 (/home) 文件系统的进程。仅有根用户能终止属于另一用户的进程。如果你正在试图卸下 /dev/hd1 文件系统,而一个正在访问 /dev/hd1 文件系统的进程不允许这样,您可能希望使用此命令。

要列出正在使用文件(已从给定文件系统删除的文件)的全部进程,请输入:

fuser -d /usr文件

/dev/kmem 用于系统映象。
/dev/mem 也用于系统映象。

相关信息
killall 命令、mount 命令和 ps 命令。

LSOF:

  1) lsof abc.txt 显示开启文件abc.txt的进程

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

  3) lsof -c nsd 显示nsd进程现在打开的文件

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

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

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

  7) lsof -d 4 显示使用fd为4的进程

  8) lsof -i [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 host:ohaha.ks.edu.tw service name:ftp

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

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

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

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

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

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

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

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

  13) lsof -u username 以UID,列出打开的文件
查看某个port被那些程式打开的语法如下:

lsof -i TCP:port -n
lsof -i UDP:port -n

lsof -i :port -n


# lsof -i tcp:1521 -n

 LSOF是针对Unix的诊断和分析工具,它能显示出由系统里正在运行的进程所打开的文件,也能显示出每一个进程的通讯socket。

Contents

    * 查看对某个文件的使用情况
    * 查看对文件系统的使用
          o 查找打开,但是不能连接的文件

    * 无法卸载
    * 查看监听socket
    * 查看某个网络连接
    * 识别 Netstat 连接
    * 查找针对某个命令打开的文件
    * 查看某个用户的操作
    * 更多信息
    * Bibliography

查看对某个文件的使用情况

查看哪些进程对某个文件进行了调用:

$ lsof /etc/passwd

查看对文件系统的使用

/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 [email protected]

$ lsof [email protected]: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 [email protected]: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 * 则是取反的意思* 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章