Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5606731
  • 博文数量: 922
  • 博客积分: 19333
  • 博客等级: 上将
  • 技术积分: 11226
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 14:33
文章分类

全部博文(922)

文章存档

2023年(1)

2020年(2)

2019年(1)

2017年(1)

2016年(3)

2015年(10)

2014年(17)

2013年(49)

2012年(291)

2011年(266)

2010年(95)

2009年(54)

2008年(132)

分类: LINUX

2010-04-09 21:08:23

fuser 

[功能] 

fuser 可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息. 


[描述] 

fuser显示使用指定文件或者文件系统的进程ID.默认情况下每个文件名后面跟一个字母表示访问类型。 

访问类型如下: 

c 代表当前目录 

e 可执行的被运行 

f 打开的文件。默认不显示。 

F 打开的文件,用于写操作。默认不显示。 

r 根目录。 

m 映射文件或者共享库。 

当指定的文件没有被访问,或者出现错误的时候,fuser会返回非零。 

为了查看使用tcp和udp套接字的进程,需要-n选项并指定名称空间。默认IpV4和IpV6都会显示。套接字可以是本地的或者是远程的端口,和远程的地址。所有的域是可选的,但是其前面的','必须存在。如下: 

[lcl_port][,[rmt_host][,[rmt_port]]] 

对于ip地址和port,名称和数字表示都可以使用。 

fuser只把PID输出到标准输出,其他的都输出到标准错误输出。 


一些常用选项: 

-a 显示所有命令行中指定的文件,默认情况下被访问的文件才会被显示。 

-c 和-m一样,用于POSIX兼容。 

-k 杀掉访问文件的进程。如果没有指定-signal就会发送SIGKILL信号。 

-i 杀掉进程之前询问用户,如果没有-k这个选项会被忽略。 

-l 列出所有已知的信号名称。 

-m name 指定一个挂载文件系统上的文件或者被挂载的块设备(名称name)。这样所有访问这个文件或者文件系统的进程都会被列出来。如果指定的是一个目录会自动转换成"name/",并使用所有挂载在那个目录下面的文件系统。 

-n space 指定一个不同的命名空间(space).这里支持不同的空间文件(文件名,此处默认)、tcp(本地tcp端口)、udp(本地udp端口)。对于端口,可以指定端口号或者名称,如果不会引起歧义那么可以使用简单表示的形式,例如:name/space (即形如:80/tcp之类的表示)。 

-s 静默模式,这时候-u,-v会被忽略。-a不能和-s一起使用。 

-signal 使用指定的信号,而不是用SIGKILL来杀掉进程。可以通过名称或者号码来表示信号(例如-HUP,-1),这个选项要和-k一起使用,否则会被忽略。 

-u 在每个PID后面添加进程拥有者的用户名称。 

-v 详细模式。输出似ps命令的输出,包含PID,USER,COMMAND等许多域,如果是内核访问的那么PID为kernel. 

-V 输出版本号。 

-4 使用IPV4套接字,不能和-6一起应用,只在-n的tcp和udp的命名存在时不被忽略。 

-6 使用IPV6套接字,不能和-4一起应用,只在-n的tcp和udp的命名存在时不被忽略。 

- 重置所有的选项,把信号设置为SIGKILL. 

 

更多参见fuser的man手册.


[举例] 

*显示使用某个文件的进程信息: 

$ fuser -um /dev/sda2 

输入之后,输出如下: 

/dev/sda2:            6378c(quietheart)  6534c(quietheart)  6628(quietheart)  6653c(quietheart)  7429c(quietheart)  7549c(quietheart)  7608c(quietheart) 

这个命令在umount的时候很有用,可以找到还有哪些用到这个设备了。 


*杀掉打开readme文件的程序,在确定之前有提示: 

$fuser -m -k -i readme 

或$fuser -kmi readme 

这里,会在kill之前询问是否确定。最好加上-v以便知道将要杀那个进程。 


*查看那些程序使用tcp的80端口: 

$fuser -n tcp 80 

或$fuser -v -n tcp 80 

或$fuser -v 80/tcp 

这里,后两种方式显示的信息比较全,因为有了-v选项。 


[其他] 

*假设无法卸载的设备为/dev/sdb1 

1)运行下面命令看一下哪个用户哪个进程占用着此设备 

fuser -m -v /dev/sdb1 


2)运行下面命令杀掉占用此设备的进程 

fuser -m -v -k /dev/sdb1 

或者fuser -m -v -k -i  /dev/sdb1(每杀掉一下进程会让你确认) 

3)再umount 


*杀掉所有以任何形式访问文件系统 /home的进程: 

$fuser -km /home 

阅读(1539) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

vaqeteart2020-01-08 17:12:11

to org