18个实例掌握 lsof 命令

lsof 命令用于列出 linux 等操作系统中打开的文件 。名称 lsof 本身就是从这个功能派生出来的 。
在本指南中,我们将通过 18 个不同的实际示例学习 lsof 命令 。
在哪里使用 lsof ?
Lsof 命令主要用于检索各个进程打开的文件信息 。系统中打开的文件可以是磁盘文件、网络套接字、命名管道和设备 。lsof 命令的这一独特特性,使人们能够更好地调试和理解 Linux 操作系统 。
如何安装 lsof ?
当我们最小安装 RHEL / centos / AlmaLinux / Ubuntu / OpenSUSE 的时,lsof 不是默认安装的一部分,因此使用以下命令来安装 lsof 命令 。
RHEL / CentOS / AlmaLinux / Fedora 系统下安装
$ sudo yum install lsof -yor$ sudo dnf install lsof -y
Debian 系列 (Ubuntu / Linux Mint) 系统下安装
$ sudo apt install lsof -y
OpenSUSE 系统下安装
$ sudo zypper install lsof1) 列出所有打开的文件
不带任何选项地运行 lsof 命令将列出系统中所有活动进程打开的文件 。
注意:由于 lsof 输出给了 STDOUT 很多信息,最好使用管道 | 操作来逐页查看这个输出 。
# lsof | more

18个实例掌握 lsof 命令

文章插图
 
如果仔细检查,上面的命令输出提供了许多参数的信息 。例如,进程 systemd 的进程号 (PID) 为 1,用户为 root,文件描述符 (FD) 为 cwd 等等 。
FD 有很多值,因为在 linux 系统中,文件描述符是为任何打开的文件自动生成的 。下面是用于 lsof 命令的一些众所周知的 FD 值
18个实例掌握 lsof 命令

文章插图
 
注意:在某些情况下,mem 后面跟着数字和各种字符,如 r, u, w 等 。这些字符是 r 表示读,w 表示写,u 表示读和写 。
回显中的 TYPE 为文件类型,以下是 Linux 系统中标准的文件类型 。
18个实例掌握 lsof 命令

文章插图
 
与此一起显示的其他字段如下所示
 
  • DEVICE –> Device id
  • SIZE/OFF –> Actual size of this process (taken during run time)
  • NODE –> Typically inode number of the directory or parent directory
  • NAME –> Path or link
2) 列出特定文件系统打开的文件 
如您所知,/proc 只在 Linux 操作系统的生命周期内存在,这个目录包含了许多重要的进程相关信息 。在 /proc 上执行 lsof 将抛出有趣的输出
# lsof /proc
18个实例掌握 lsof 命令

文章插图
 
如前所述,此处捕获 lsof 本身的 lsof,并显示所有细节 。除了 lsof,还有其他进程,如 systemd 和 rsyslogd,它们是用于交换、挂载等目的的守护进程 。
同样的, 我们可以列出另一个文件系统的打开的文件
# lsof /var/log/
某些情况下,使用 df 和 du 命令相同文件系统却显示不同磁盘使用情况,使用 losf 变得非常方便,使用 lsof 命令我们可以找到在某些进程打开和使用时被删除的文件 。
# lsof /var/log | grep -i "deleted"
上面的命令会给你被删除的文件的 pid,但它们仍然存在于系统中,处于删除状态 。因此,为了释放文件系统的空间,我们可以通过 pid 来安全地杀死这些进程 。
3) 显示 lsof 命令打开的文件列表
lsof 本身抛出一个错误消息
# lsof lsoflsof: status error on lsof: No such file or directorylsof 4.874) 列出用户打开的文件
lsof 可用于所有已登录 Linux 系统的用户 。在这种情况下,lsof 将显示相应用户打开的所有文件 。
列出 root 用户打开的所有文件
# lsof -u root | more
18个实例掌握 lsof 命令

文章插图
 
非 root 用户打开的文件列表,让我们查看 linuxtechi 用户打开的所有文件


推荐阅读