lsof---列出当前系统打开的文件信息
lsof---list open file,一个列出当前系统打开文件的工具
1.lsof查找原理
在Linux系统中,系统为了方便管理进程,会在/proc下为每一个运行中的进程创建一个目录,目录名就是进程号,而在进程的目录下有一个叫作fd的目录,这个目录下存放的是进程打开的所有文件。而lsof命令搜寻的其实就是/proc/$PID/fd下面的文件。
[root@localhost ~]# lsof
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 4096 128 /
systemd 1 root rtd DIR 253,0 4096 128 /
systemd 1 root txt REG 253,0 1214424 353923 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 61624 67175738 /usr/lib64/libnss_files-2.17.so
systemd 1 root mem REG 253,0 90632 67211369 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,0 19888 67211548 /usr/lib64/libattr.so.1.1.0
systemd 1 root mem REG 253,0 115848 67175725 /usr/lib64/libnsl-2.17.so
systemd 1 root mem REG 253,0 153184 67176234 /usr/lib64/liblzma.so.5.0.99
systemd 1 root mem REG 253,0 398264 67176278 /usr/lib64/libpcre.so.1.2.0
......
# COMMAND:进程的名称,如果进程的名字很长,则这里只会显示前9个字符。
# PID:进程标识符。如果执行命令时指定-R参数,则父进程标识符PPID也会显示出来。
# USER:进程所有者。如果执行命令时指定-g参数,则进程所属组标识符PGID也会显示出来。
# FD:一般是指文件描述符。
# TYPE:文件类型,如DIR、REG等,常见的文件类型。
◇ DIR:表示目录。
◇ REG:表示普通文件。
◇ CHR:表示字符类型。
◇ BLK:块设备类型。
◇ UNIX:UNIX域套接字。
◇ FIFO:先进先出(FIFO)队列。
◇ IPv4/IPv6:网际协议(IP)套接字。
# DEVICE:磁盘的名称。
# SIZE:文件的大小。
# NODE:索引节点(文件在磁盘上的标识)。
# NAME:打开文件的确切名称。
FD:两种文件描述符 | desc |
---|---|
第一类是文件描述符 | 0表示标准输入。 1表示标准输出。 2表示标准错误输出。 n表示其他文件描述符的数值 |
第二类的描述文件特征的标识 | cwd:应用程序的当前工作目录,也是该应用程序启动的目录。 txt:该类型文件是程序代码或数据。 mem:内存映射文件。 pd:父目录。 rtd:根目录。 DEL:表示文件已经被进程删除但还在内存中存在。 |
2.查看谁正在使用某个文件
lsof /filepath/file
3:查看端口被谁占用
lsof -i:port
lsof -i udp:55
4.列出某个程序打开的文件信息
lsof -c sshd
5.通过某个进程号显示该进行打开的文件
lsof -p 1
6.列出所有tcp 网络连接信息
lsof -i tcp
7.列出某个用户打开的文件信息
lsof -u username