Linux常用命令行指令 - lsof
lsof是list open files的简称,用于列出系统中所有打开的文件。由于在linux系统下,所有 对象都是文件,所以这个指令十分有用。
下面就给出了几种常见的用法,需要注意的是有些指令需要root权限执行。
1. 查看打开指定文件的进程
lsof /var/syslog.log
2. 查看指定目录下打开的文件
lsof +D /home/
3. 查看以指定进程名所有打开的文件
使用 -c
命令能够查看指定进程名使用的文件,允许在一个命令行指令中使用多个 -c
参数。
lsof -c procname
4. 查看使用指定挂载点的进程
在停止挂载某个目录时,系统会告诉我们“设备资源繁忙”,所以我们需要找出使用挂载点的程序,终止这些进程,解除目录的占用状态。
lsof /home
或
lsof +D /home/
5. 查看指定用户打开的文件
lsof -u username
另外还可以进行反向过滤,在输出中不显示指定用户的文件,语法如下。
lsof -u ^username
6. 查看指定进程打开的文件
lsof -p pid
7. 终止属于某个用户的所有进程
kill `lsof -t -u username`
相似的,可以使用 -t
参数打印使用某个文件的进程id。
lsof -t /var/log
8. 让结果同时满足多个选项
默认情况下,多个参数是以或(or)进行操作的,可以使用 -a
选项让结果同时满足多个参数。
lsof -a -u username -c procname
9. 让命令重复执行
可以使用 -r
参数让命令重复执行。以下命令会每隔5s执行一次,每次的执行结果会用 “====” 分割开。
lsof -u username -c procname -a -r5
10. 列出所有的网络连接
lsof -i
让结果中的ip地址和端口号显示数字而不是英文别名
lsof -i -Pn
显示所有的 AF_UNIX
socket
lsof -U
11. 列出指定进程使用的网络连接
lsof -i -a -p pid
12. 查看指定端口上的监听
lsof -i :portid
13. 列出所有tcp和udp连接
lsof -i tcp; lsof -i udp
14. 列出所有的网络文件系统
网络文件系统(network file system)
lsof -N -u username