当前位置: 首页 > Linux

通过18个示例掌握lsof命令

时间:2023-04-06 23:41:17 Linux

在本指南中,我们将通过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查看设备打开的文件/dev/sda2#lsof/dev/sda210)查看某个NFS文件系统中打开文件的进程在某些情况下,你已经在linux机器上挂载了一个nfs文件系统,但是nfs服务器是不可访问的,你想列出在那个nfs文件系统上打开的所有进程#lsof-b11)showsterminal-relatedopenfiles以下命令用于终端上所有打开的文件lsof/dev/tty{number}#lsof/dev/tty1COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEbash2442root0uCHR4,10t0andOpenfilesassociatedwithapplications假设我们要列出所有与httpd相关的打开文件#lsof-chttpd13)列出所有网络连接使用-i选项列出所有与网络相关的进程,例如#lsof-i14)查看IPv4/IPv6套接字文件查看IPv4套接字文件#lsof-i@192.168.1.189查找IP版本6套接字文件的冒号形式地址和相关数字后跟一系列零,例如,循环地址(127.0.0.1)#lsof-i@[::1]COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEmaster2433root14uIPv6210270t0TCPlocalhost:smtp(LISTEN)#15)列出属于某个进程ID的所有进程假设我们要列出所有属于特定进程id的进程,示例如下#lsof-p159816)killuser的所有进程killall属于linuxtechi用户的进程#kill-9`lsof-t-ulinuxtechi`17)查看特定目录下所有打开的文件语法如下:lsof+D列出/var/log目录下所有打开的文件#lsof+D/var/log/注意:在上面的命令,如果我们使用+D选项,那么lsof会递归列出目录下所有打开的文件,如果不想递归列出目录下打开的文件,那么使用+d选项18)检查谁打开了logfile(FindthePID)以下命令用于查找谁打开了/var/log/httpd/access.log文件,进程的PID是多少然后使用“ps-ef”命令我们可以找到确切的用户#lsof-t/var/log/httpd/access_log310931103111311231133114##grep-E"3109|3110|3111|3112|3113|3114"|grep-vgrepor#ps-fp"$(lsof-t/var/log/httpd/access_log|xargsecho)"root31091003:36?00:00:00/usr/sbin/httpd-DFOREGROUNDapache31103109003:36?00:00:00/usr/sbin/httpd-DFOREGROUNDapache31113109003:36?00:00:00/usr/sbin/httpd-DFOREGROUNDapache31123109003:36?usr/sbin/httpd-DFOREGROUNDapache31133109003:36?00:00:00/usr/sbin/httpd-DFOREGROUNDapache31143109003:36?00:00:00/usr/sbin/httpd-DFOREGROUND#my开源项目course-tencent-cloud(酷瓜云课堂-gitee仓库)course-tencent-cloud(酷瓜云课堂-github仓库)