在本指南中,我们将通过18个不同的实际示例来学习lsof命令。lsof命令用于在Linux等操作系统中列出打开的文件。名称lsof本身就是从这个函数派生出来的。lsof在哪里使用?lsof命令主要用于检索有关每个进程打开的文件的信息。在系统中打开的文件可以是磁盘文件、网络套接字、命名管道和设备。lsof命令的这一独特功能可以更好地调试和了解Linux操作系统。如何安装lsof?当我们最小化安装RHEL/CentOS/AlmaLinux/Ubuntu/OpenSUSE时,lsof不是默认安装的一部分,所以使用下面的命令来安装lsof命令。RHEL/CentOS/AlmaLinux/Fedora系统下安装$sudoyuminstalllsof-yor$sudodnfinstalllsof-yDebian系列(Ubuntu/LinuxMint)系统安装$sudoaptinstalllsof-yOpenSUSE系统安装$sudozypperinstalllsof1)列出所有打开的文件运行不带任何选项的lsof命令将列出系统上所有活动进程的打开文件。注意:由于lsof向STDOUT输出大量信息,因此最好使用管道|操作员翻阅此输出。#lsof|more如果仔细检查,上面的命令输出提供了许多参数的信息。例如,进程systemd的进程ID(PID)为1,用户为root,文件描述符(FD)为cwd等。FD有很多值,因为在Linux系统中,任何打开的文件都会自动生成文件描述符。下面是一些众所周知的lsof命令的FD值注意:在某些情况下,mem后跟数字和各种字符,如r、u、w等。字符是r表示读取,w表示写入,u表示读取和读取写。echo中的TYPE是文件类型,下面是Linux系统中的标准文件类型。与此一起显示的其他字段是DEVICE–>DeviceidSIZE/OFF–>此进程的实际大小(在运行时获取)NODE–>通常是目录或父目录的inode编号NAME–>路径或链接2)listedFilesOpenedby特定文件系统如您所知,/proc仅在Linux操作系统的生命周期内存在,该目录包含许多与进程相关的重要信息。在/proc上执行lsof将抛出有趣的输出#lsof/proc如前所述,这里捕获lsof本身的lsof,并显示所有细节。除了lsof之外,还有systemd和rsyslogd等其他进程,它们是用于交换、挂载等的守护进程。同样,我们可以列出另一个文件系统的打开文件#lsof/var/log/在某些情况下,使用df和同一个文件系统的du命令显示不同的磁盘使用情况,使用losf变得非常方便,使用lsof命令我们可以找到在某些进程打开和使用时被删除的文件。#lsof/var/日志|grep-i"deleted"上面的命令会给你已删除文件的pid,但它们仍然存在于系统中,处于删除状态。因此,我们可以通过pid安全地杀死这些进程,以释放文件系统中的空间。3)显示lsof命令打开的文件列表lsof本身抛出错误消息#lsoflsoflsof:lsof上的状态错误:没有这样的文件或目录lsof4.874)列出用户打开的文件lsof对所有登录到a的用户可用Linux系统。在这种情况下,lsof将显示相应用户打开的所有文件。列出root用户打开的所有文件#lsof-uroot|more非root用户打开的文件列表,让我们查看linuxtechi用户打开的所有文件#lsof-ulinuxtechi|更多或#lsof-l-ulinuxtechi|更多列表列出除root之外的所有打开文件#lsof-u^root|more5)列出所有打开的Internet和UNIX域文件使用-i-U选项列出系统上所有打开的internet和UNIX域文件,示例如下#lsof-i-U6)列出所有打开的IPv4网络文件使用-i-4选项列出所有打开的IPv4网络文件#lsof-i4列出特定进程的所有打开的IPv4网络文件语法如下:lsof-i4-a-p{process_pid}#lsof-i4-a-p1633COMMANDPID用户FD类型设备大小/关闭节点名称Erpcbind1633rpc4uIPv4165760t0TCP*:sunrpc(LISTEN)rpcbind1633rpc5uIPv4:0t0UDP*sunrpcrpcbind1633rpc10uIPv4166490t0#7*:96列出所有IPv6开放网络文件假设支持ipv6域,您可以使用-i6选项列出开放网络文件。#lsof-i68)列出特定端口上运行的所有TCP和UDP进程语法如下:lsof-iTCP/UDP:port假设我们要列出80端口上运行的所有TCP进程,使用以下命令#lsof-iTCP:80COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEhttpd2594root4uIPv6227030t0TCP*:http(LISTEN)httpd2595apache4uIPv6227030t0TCP*:http(LISTEN)httpd2596apache4uIPv03TCP*:http(监听)httpd2597apache4uIPv6227030t0TCP*:http(监听)httpd2598apache4uIPv6227030t0TCP*:http(监听)httpd2599apache4uIPv6227030t0TCP*:http(监听)[root@linuxtechi~]#列出TCP端口范围(1到1048)上的所有打开文件#lsof-iTCP:1-1048列出在特定端口上运行的所有UDP进程#lsof-iUDP:16498COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEEdhclient2494root21uIPv6209520t0UDP*:16498#注:要列出linux系统上所有打开的UDP进程,请使用lsof-iUDP命令9)查看指定设备所有打开的文件语法如下:lsof
