七、使用lsof查看文件信息

在unix里面,一切皆文件;而Linux秉承了这一特性,将unix下的工具lsof移植过来得很成功。lsof可以列出被进程所打开的文件的信息。

被打开的文件可以是

1.普通的文件

2.目录  

3.网络文件系统的文件

4.字符设备文件  

5.(函数)共享库  

6.管道,命名管道 

7.符号链接

8.底层的socket字流。网络socket,unix域名socket,用得比较多的用法是lsof -i:端口号,列出谁在使用某个端口,例如:lsof -i :3306,我喜欢用此用法来判断服务到底有没有正常启用。

八、使用fuser查看和杀死相关进程

与lsof –i的用法相法,如果我想查找占用3306端口的程序,则用fuser –n tcp -v 8080,另外,fuser的其它功能也是很强大的,我常用的它的两个功能:查看我需要的进程和我要杀死我查到的进程(抚琴煮酒是一般用来解决device is busy的问题)

比如当你想umount光驱的时候,结果系统提示你设备正在使用或者正忙,可是你又找不到到底谁使用了他。这个时候fuser可派上用场了。

  1. [root@lancy sbin]# eject  
  2. umount: /media/cdrom: device is busy  
  3. umount: /media/cdrom: device is busy  
  4. eject: unmount of `/media/cdrom' failed  
  5.  
  6. [root@lancy sbin]# fuser /mnt/cdrom  
  7. /mnt/cdrom: 4561c 5382c  
  8.  
  9. [root@lancy sbin]# ps -ef |egrep '(4561|5382)' |grep -v grep  
  10. root 4561 4227 0 20:13 pts/1 00:00:00 bash  
  11. root 5382 4561 0 21:42 pts/1 00:00:00 vim Autorun.inf 

示例中,我想弹出光驱,系统告诉我设备忙着,于是采用fuser命令,参数是你文件或scoket,fuser将查出那些使用了他。4561c,5382c表示目前用两个进程在占用着/mnt/cdrom,分别是4561,5382,进程ID后的字母表示占用资源的方式。


相关内容