Linux学习笔记:fuser和lsof
fuser 和 lsof 可以用于系统安全检查。
用fuser查看哪些用户和进程在某些地方作什么:
fuser -cu /root 简略显示
fuser -muv /mnt3 分列显示
lsof 拥有更多的功能
# lsof -i 看系统中有哪些开放的端口,哪些进程、用户在使用它们,比 netstat -lptu 的输出详细。
# lsof -i 4 查看IPv4类型的进程
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
exim4 2213 Debian-exim 4u IPv4 4844 TCP *:smtp (LISTEN)
dhclient3 2306 root 4u IPv4 4555 UDP *:bootpc
# lsof -i 6 查看IPv6类型的进程
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
exim4 2213 Debian-exim 3u IPv6 4820 TCP *:smtp (LISTEN)
# lsof -i @192.168.1.2 查看与某个具体的IP相关联的进程
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
amule 3620 root 16u IPv4 11925 TCP 192.168.1.2:42556->77.247.178.244:4242 (ESTABLISHED)
amule 3620 root 28u IPv4 11952 TCP 192.168.1.2:49915->118-166-47-24.dynamic.hinet.net:5140 (ESTABLISHED)
# lsof -p 5670 查看PID为5670的进程打开的文件。
通过lsof命令工具可以查看某个进程占用了哪些句柄。同时也可以看某个文件被哪些进程使用了。
2.lsof常见的用法
(A)查找应用程序打开的文件
lsof -p pid 可以查看进程号为pid的进程打开了哪些文件或者占用了哪些fd。
(B)查找打开某个文件的应用程序
lsof filename 可以查看名称为filename的文件被哪些进程打开了。
(C)使用lsof查看网络连接
命令格式为:
lsof -i protocol:@ip:port
其中protocol可以是tcp或udp,ip是主机ip,port是端口
具体使用命令有:
lsof -i #列出所有网络连接的进程
lsof -i tcp #列出所有正式使用tcp协议的进行网络通信的进程
lsof -i :8080 #列出正在监听8080端口的进程
lsof -i tcp:80 #列出正在使用tcp协议监听80端口的进程
(D)lsof还有一些其他高级的用法
例如,恢复已经被删除的文件等等。
备注:
(1)使用/usr/sbin/lsof |grep delete查看被rm的文件,仍然被进程占用,最终导致磁盘空间释放不了。当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录条目。
(2)lsof输出的信息中,有一列SIZE值,表示文件的大小,单位是Byte
学习资料来源:
http://www.ibm.com/developerworks/cn/aix/library/au-lsof.html
二、fuser介绍和使用
1.fuser
fuser能识别出正在对某个文件或端口访问的所有进程,类似于lsof。但从区别上来说,lsof可以通过文件名找到正在使用该文件的所有进程,同时也可以根据进程id找出该进程使用的哪些文件。fuser则是可以通过文件名找到使用该文件的所有进程。但是fuser有一个特别的用法在于它可以一次杀死那些正在访问指定文件的进程。
2.fuser的命令格式和常用选项
命令格式:
fuser [option] filename
常用的选项:
-v 列出进程的详细信息,而不仅仅是进程id
-u 列出进程所属的用
-k signal 如果不指定signal,那么默认是SIGKILL。当然用户自己指定信号,例如SIGHUP
-l 列出所有支持的信号
3.fuser命令使用举例
fuser /home/work/wahaha.txt #列出所有使用/home/work/wahaha.txt文件的进程
fuser -v /home/work/wahaha.txt #列出进程的详细信息,而不仅仅是进程id
fuser -u /home/work/wahaha.txt #同时列出进程的user
fuser -k /home/work/wahaha.txt #杀死所有正在使用/home/work/wahaha.txt文件的进程
fuser -k SIGHUP /home/work/wahaha.txt #向所有正在使用/home/work/wahaha.txt文件的进程发送HUP信号
fuser -l #列出所有支持的信号
---------------------