一、lsof介绍
lsof是List Open Files的缩写,是一款功能强大的系统管理员工具,用于列出当前系统打开的所有文件及进程信息。它能够监视系统中所有文件的状态,包括哪些文件被哪些进程打开,哪些用户正在使用文件,哪些文件被遗留在磁盘中,还可以查看网络连接情况等。
在Linux系统中,文件被看作是文件描述符(file descriptor)。每个进程可以通过文件描述符读取或写入文件。因此,通过分析进程的文件描述符可以获得对系统资源使用的整体情况。
二、常用参数
1. -p参数:输入指定进程信息。
2. -u参数:输入指定用户信息。
3. -c参数:输入指定程序名信息。
4. -d参数:输入指定文件号信息。
5. -i参数:输入指定各种网络状态信息(如TCP, UDP等)。
6. -t参数:输入指定进程号信息。
//例:查看进程号为1234的进程所打开的文件 lsof -p 1234
三、常用输出信息
1. COMMAND:进程的名称。
2. PID:进程的ID号。
3. USER:进程的所有者。
4. FD:文件描述符,应用程序通过文件描述符读写文件,stdin、stdout、stderr分别用0、1、2表示。
5. TYPE:文件类型,如DIR(目录)、CHR(字符设备)、REG(常规文件)等。
6. DEVICE:文件所在的磁盘设备名。
7. SIZE:文件的大小。
8. NODE:文件的索引节点(Inode)编号。
9. NAME:打开文件的确切名称。
//例:查看所有以/home/abc/开头的打开文件 lsof /home/abc/*
四、进程连接网络的情况
1. TCP:进程连接TCP协议的端口。
2. UDP:进程连接UDP协议的端口。
3. RAW:进程连接IP协议的原始套接字。
4. UNIX:进程连接Unix域套接字。
//例:查看所有连接本机22端口的进程 lsof -i :22
五、lsof引申出的应用
1. 查找被锁住的文件
lsof | grep DEL | awk '{print $9}' | xargs ls -l
2. 查找正在写文件的进程
lsof -r1 /path/to/file
3. 查看目录和子目录中哪些文件被哪些进程打开
lsof +D /path/to/dir
六、总结
lsof是一款功能强大的工具,可以监视系统中所有文件的状态,并能查看网络连接情况等。在日常运维和故障排除中,lsof能够帮助管理员轻松定位文件和进程信息,提升系统管理效率。