在Linux中使用lsof命令的示例 使用lsof命令是通过在终端输入lsof来执行。lsof是一个用于列出在Linux系统上打开的文件和进程的命令。它可以帮助你查看哪些文件被打开,哪些进程正在使用这些文件。下面是一些常见的lsof命令的示例: 1. 列出所有打开的文件 要列出系统上所有打开的文件,可以执行以下命令: “`shell lsof “` 这会显示所有打开的文件,包括文件名、进程ID、用户等信息。 2. 列出特定进程打开的文件 要列出特定进程打开的文件,可以使用以下命令,将`PID`替换为进程的ID: “`shell lsof -p PID “` 这将显示特定进程打开的所有文件。 3. 列出特定用户打开的文件 要列出特定用户打开的文件,可以使用以下命令,将`username`替换为用户名: “`shell lsof -u username “` 这将显示特定用户打开的所有文件。 4. 列出特定文件被哪些进程打开 要查找特定文件被哪些进程打开,可以使用以下命令,将`filename`替换为文件名: “`shell lsof filename “` 这将显示所有打开该文件的进程。 以上是一些使用lsof命令的示例。lsof命令在查找和诊断系统问题时非常有用。你可以根据你的需要使用不同的选项和参数来定制输出结果。

lsof是一个强大的实用程序,适用于linux和基于unix的系统,它字面意思是“列出打开的文件(list of open files)”。

它的主要功能是检索有关不同运行进程打开的各种类型文件的详细信息。这些文件可以是常规文件、目录、块文件、网络套接字、命名管道等。

使用lsof,您可以找到锁定文件或目录的不同进程,监听端口的进程,用户的进程列表,进程锁定的所有文件等。本文首先介绍其安装,然后介绍一些常见的用法示例。

安装lsof

lsof在大多数linux发行版中默认不可用,但可以很容易地安装。使用以下命令安装lsof:

centos / rhel / fedora:

$ sudo yum install lsof

对于centos / rhel 8,您可以使用dnf命令:

$ sudo dnf install lsof

ubuntu / debian:

$ sudo apt install lsof

获取帮助

您可以使用-?-h标志获取lsof支持的选项的摘要列表。

要检查详细的安装版本信息,请使用:

“`
lsof -v
lsof版本信息:
修订版本:4.87
最新修订版:ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
最新常见问题解答:ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/faq
最新手册页:ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
构建时间:2018年10月30日星期二16:28:19 utc
构建者和构建时间:[email protected]
编译器:cc
编译器版本:4.8.5 20150623 (red hat 4.8.5-36) (gcc)
编译器标志:-dlinuxv=310000 -dglibcv=217 -dhasipv6 -dhasselinux -d_file_offset_bits=64 -d_largefile64_source -dhas_strftime -dlsof_vstr=”3.10.0″ -o2 -g -pipe -wall -wp,-d_fortify_source=2 -fexceptions -fstack-protector-strong –param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic
加载器标志:-l./lib -llsof -lselinux
系统信息:linux x86-01.bsys.centos.org 3.10.0-693.17.1.el7.x86_64 #1 smp thu jan 25 20:13:58 utc 2018 x86_64 x86_64 x86_64 gnu/linux
任何人都可以列出所有文件。
/dev警告已禁用。
内核id检查已禁用。
“`

输出字段

默认情况下,lsof输出字段的结构如下:

command    pid  tid         user   fd      type device  size/off     node name

这些字段中大部分都是自解释的,除了 fdtype 字段,它们在lsof中有些独特,稍后将进行简要介绍。

fd 指的是文件的文件描述符号,type 指的是与文件相关联的节点的类型。我们将逐个讨论这两个字段的支持值。

fd 字段可以包含以下值:

cwd  当前工作目录;
lnn  库引用(aix);
err  fd信息错误(参见name列);
jld  监狱目录(freebsd);
ltx  共享库文本(代码和数据);
mxx  十六进制内存映射类型号xx。
m86  dos合并映射文件;
mem  内存映射文件;
mmap 内存映射设备;
pd   父目录;
rtd  根目录;
tr   内核跟踪文件(openbsd);
txt  程序文本(代码和数据);
v86  vp/ix映射文件;

fd 字段后面跟着一个或多个字符,描述文件的打开模式:

r 表示读取权限;
w 表示写入权限;
u 表示读取和写入权限;
空格表示未知模式,且没有锁字符跟随;
`-' 表示未知模式,且有锁字符跟随。

fd 字段后面的模式字符还可以跟随 lock 字符,其描述如下:

n 表示未知类型的solaris nfs锁;
r 表示文件的部分读锁;
r 表示文件的完全读锁;
w 表示文件的部分写锁;
w 表示文件的完全写锁;
u 表示任意长度的读写锁;
u 表示未知类型的锁;
x 表示sco openserver xenix文件的部分锁;
x 表示sco openserver xenix文件的完全锁;
空格表示没有锁。

类似地,type 字段可以包含 gdir, greg, vdir, vreg, ipv4, ipv6 等。要获取lsof中支持的所有type的完整列表,请参考其man页面。

常见用法

以下是lsof命令的一些常见用法。该命令适用于linux的各个变种,下面示例中列出的所有命令行参数应该适用于所有平台,只要使用相同的 lsof 版本。

列出所有打开的文件

运行lsof而不带任何选项将列出所有当前由活动进程打开的文件。

$ sudo lsof | less

输出:

command pid tid user fd type device size/off node name
systemd 1 root cwd dir 253,0 224 64 /
systemd 1 root rtd dir 253,0 224 64 /
systemd 1 root txt reg 253,0 1632776 308905 /usr/lib/systemd/systemd
systemd 1 root mem reg 253,0 20064 16063 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem reg 253,0 265576 186547 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem reg 253,0 90248 16051 /usr/lib64/libz.so.1.2.7
systemd 1 root mem reg 253,0 157424 16059 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem reg 253,0 23968 59696 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem reg 253,0 19896 59686 /usr/lib64/libattr.so.1.1.0
systemd 1 root mem reg 253,0 19248 15679 /usr/lib64/libdl-2.17.so
systemd 1 root mem reg 253,0 402384 16039 /usr/lib64/libpcre.so.1.2.0
systemd 1 root mem reg 253,0 2156272 15673 /usr/lib64/libc-2.17.so
systemd 1 root mem reg 253,0 142144 15699 /usr/lib64/libpthread-2.17.so
systemd 1 root mem reg 253,0 88720 84 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
systemd 1 root mem reg 253,0 43712 15703 /usr/lib64/librt-2.17.so
systemd 1 root mem reg 253,0 277808 229793 /usr/lib64/libmount.so.1.1.0
systemd 1 root mem reg 253,0 91800 76005 /usr/lib64/libkmod.so.2.2.10
systemd 1 root mem reg 253,0 127184 59698 /usr/lib64/libaudit.so.1.0.0
systemd 1 root mem reg 253,0 61680 229827 /usr/lib64/libpam.so.0.83.1
systemd 1 root mem reg 253,0 20048 59690 /usr/lib64/libcap.so.2.22
systemd 1 root mem reg 253,0 155744 16048 /usr/lib64/libselinux.so.1

按文件名列出

要列出打开特定文件的所有进程,可以将文件名指定为参数:

$ sudo lsof {文件名}

输出:

$ sudo lsof /var/log/messages
command   pid user   fd   type device size/off     node name
rsyslogd 1000 root    6w   reg  253,0      205 16777741 /var/log/messages
$

按用户名列出打开的文件

在多用户系统中,可以使用-u标志后跟用户名来过滤文件列表。

$ sudo lsof -u {用户名}

输出:

$ sudo lsof -u abhisheknair
command  pid         user   fd   type             device  size/off     node name
sshd    1239 abhisheknair  cwd    dir              253,0       224       64 /
sshd    1239 abhisheknair  rtd    dir              253,0       224       64 /
sshd    1239 abhisheknair  txt    reg              253,0    852856   425229 /usr/sbin/sshd
sshd    1239 abhisheknair  mem    reg              253,0     15488 17204727 /usr/lib64/security/pam_lastlog.so
sshd    1239 abhisheknair  mem    reg              253,0     15648   229829 /usr/lib64/libpam_misc.so.0.82.0
sshd    1239 abhisheknair  mem    reg              253,0    309248 17303270 /usr/lib64/security/pam_systemd.so
sshd    1239 abhisheknair  mem    reg              253,0     19616 17204728 /usr/lib64/security/pam_limits.so
sshd    1239 abhisheknair  mem    reg              253,0     11168 17204726 /usr/lib64/security/pam_keyinit.so
sshd    1239 abhisheknair  mem    reg              253,0     40800 17204735 /usr/lib64/security/pam_namespace.so

或者,如果你想列出除了特定用户之外的所有用户打开的文件,可以使用以下格式:-u标志后跟^username

$ sudo lsof -u ^{username}

输出:

$ sudo lsof -u ^root
command    pid tid         user   fd      type             device  size/off     node name
dbus-daem  630             dbus  cwd       dir              253,0       224       64 /
dbus-daem  630             dbus  rtd       dir              253,0       224       64 /
dbus-daem  630             dbus  txt       reg              253,0    223232 50590133 /usr/bin/dbus-daemon
dbus-daem  630             dbus  mem       reg              253,0     61560    15691 /usr/lib64/libnss_files-2.17.so
dbus-daem  630             dbus  mem       reg              253,0     68192    59651 /usr/lib64/libbz2.so.1.0.6
dbus-daem  630             dbus  mem       reg              253,0     90248    16051 /usr/lib64/libz.so.1.2.7
dbus-daem  630             dbus  mem       reg              253,0     99944    59680 /usr/lib64/libelf-0.176.so
dbus-daem  630             dbus  mem       reg              253,0     19896    59686 /usr/lib64/libattr.so.1.1.0
dbus-daem  630             dbus  mem       reg              253,0    402384    16039 /usr/lib64/libpcre.so.1.2.0

你可以使用lsof来快速杀死特定用户的所有进程,只需在单个命令中结合使用killlsof,如下面的示例所示(以root用户身份执行):

# kill -9 `lsof -t -u {username}`

如上面的示例所示,我们可以使用-t标志来过滤除进程id之外的所有其他信息。这在自动化和脚本编写中非常有用,可以与kill命令结合使用。

$ sudo lsof -t -u {username}

输出:

$ sudo lsof -t -u abhisheknair
1239
1240
$

使用lsof,我们可以使用or逻辑结合多个参数,如下所示:

$ sudo lsof -u {username} -c {process-name}

输出:

$ sudo lsof -u ftpuser -c bash
command  pid         user   fd   type device  size/off     node name
bash    1240 abhisheknair  cwd    dir  253,0       120   510681 /home/abhisheknair
bash    1240 abhisheknair  rtd    dir  253,0       224       64 /
bash    1240 abhisheknair  txt    reg  253,0    964536 50548532 /usr/bin/bash
bash    1240 abhisheknair  mem    reg  253,0 106172832 50548523 /usr/lib/locale/locale-archive
bash    1240 abhisheknair  mem    reg  253,0     61560    15691 /usr/lib64/libnss_files-2.17.so
bash    1240 abhisheknair  mem    reg  253,0   2156272    15673 /usr/lib64/libc-2.17.so
bash    1240 abhisheknair  mem    reg  253,0     19248    15679 /usr/lib64/libdl-2.17.so
bash    1240 abhisheknair  mem    reg  253,0    174576    16034 /usr/lib64/libtinfo.so.5.9
bash    1240 abhisheknair  mem    reg  253,0    163312    15666 /usr/lib64/ld-2.17.so
bash    1240 abhisheknair  mem    reg  253,0     26970    16003 /usr/lib64/gconv/gconv-modules.cache
bash    1240 abhisheknair    0u   chr  136,0       0t0        3 /dev/pts/0
bash    1240 abhisheknair    1u   chr  136,0       0t0        3 /dev/pts/0
bash    1240 abhisheknair    2u   chr  136,0       0t0        3 /dev/pts/0
bash    1240 abhisheknair  255u   chr  136,0       0t0        3 /dev/pts/0
bash    1425      ftpuser  cwd    dir  253,0       182 33578272 /home/ftpuser
bash    1425      ftpuser  rtd    dir  253,0       224       64 /
bash    1425      ftpuser  txt    reg  253,0    964536 50548532 /usr/bin/bash
bash    1425      ftpuser  mem    reg  253,0 106172832 50548523 /usr/lib/locale/locale-archive
bash    1425      ftpuser  mem    reg  253,0     61560    15691 /usr/lib64/libnss_files-2.17.so
bash    1425      ftpuser  mem    reg  253,0   2156272    15673 /usr/lib64/libc-2.17.so
bash    1425      ftpuser  mem    reg  253,0     19248    15679 /usr/lib64/libdl-2.17.so
bash    1425      ftpuser  mem    reg  253,0    174576    16034 /usr/lib64/libtinfo.so.5.9
bash    1425      ftpuser  mem    reg  253,0    163312    15666 /usr/lib64/ld-2.17.so
bash    1425      ftpuser  mem    reg  253,0     26970    16003 /usr/lib64/gconv/gconv-modules.cache
bash    1425      ftpuser    0u   chr    4,1       0t0     1043 /dev/tty1
bash    1425      ftpuser    1u   chr    4,1       0t0     1043 /dev/tty1
bash    1425      ftpuser    2u   chr    4,1       0t0     1043 /dev/tty1
bash    1425      ftpuser  255u   chr    4,1       0t0     1043 /dev/tty1
$

或者,如果您想使用and逻辑条件,请使用-a标志。

$ sudo lsof -u {用户名} -c {进程名称} -a

输出:

$ sudo lsof -u ftpuser -c bash -a
command  pid    user   fd   type device  size/off     node name
bash    1425 ftpuser  cwd    dir  253,0       182 33578272 /home/ftpuser
bash    1425 ftpuser  rtd    dir  253,0       224       64 /
bash    1425 ftpuser  txt    reg  253,0    964536 50548532 /usr/bin/bash
bash    1425 ftpuser  mem    reg  253,0 106172832 50548523 /usr/lib/locale/locale-archive
bash    1425 ftpuser  mem    reg  253,0     61560    15691 /usr/lib64/libnss_files-2.17.so
bash    1425 ftpuser  mem    reg  253,0   2156272    15673 /usr/lib64/libc-2.17.so
bash    1425 ftpuser  mem    reg  253,0     19248    15679 /usr/lib64/libdl-2.17.so
bash    1425 ftpuser  mem    reg  253,0    174576    16034 /usr/lib64/libtinfo.so.5.9
bash    1425 ftpuser  mem    reg  253,0    163312    15666 /usr/lib64/ld-2.17.so
bash    1425 ftpuser  mem    reg  253,0     26970    16003 /usr/lib64/gconv/gconv-modules.cache
bash    1425 ftpuser    0u   chr    4,1       0t0     1043 /dev/tty1
bash    1425 ftpuser    1u   chr    4,1       0t0     1043 /dev/tty1
bash    1425 ftpuser    2u   chr    4,1       0t0     1043 /dev/tty1
bash    1425 ftpuser  255u   chr    4,1       0t0     1043 /dev/tty1
$

按进程列出打开的文件

我们也可以使用-c选项后跟进程名称来列出特定进程打开的文件。

$ sudo lsof -c {进程名称}

输出:

$ sudo lsof -c ssh
command  pid         user   fd   type             device size/off     node name
sshd     997         root  cwd    dir              253,0      224       64 /
sshd     997         root  rtd    dir              253,0      224       64 /
sshd     997         root  txt    reg              253,0   852856   425229 /usr/sbin/sshd
sshd     997         root  mem    reg              253,0    61560    15691 /usr/lib64/libnss_files-2.17.so
sshd     997         root  mem    reg              253,0    68192    59651 /usr/lib64/libbz2.so.1.0.6
sshd     997         root  mem    reg              253,0    99944    59680 /usr/lib64/libelf-0.176.so
sshd     997         root  mem    reg              253,0    19896    59686 /usr/lib64/libattr.so.1.1.0
sshd     997         root  mem    reg              253,0    15688    75906 /usr/lib64/libkeyutils.so.1.5
sshd     997         root  mem    reg              253,0    67104   186525 /usr/lib64/libkrb5support.so.0.1

按pid列出打开的文件

或者,如果要列出进程打开的文件,但不使用进程名称,而是要指定其id,则可以使用-p标志后跟进程id

$ sudo lsof -p {进程id}

输出:

$ sudo lsof -p 663
command   pid user   fd      type             device  size/off     node name
firewalld 663 root  cwd       dir              253,0       224       64 /
firewalld 663 root  rtd       dir              253,0       224       64 /
firewalld 663 root  txt       reg              253,0      7144 50491220 /usr/bin/python2.7
firewalld 663 root  mem       reg              253,0    298828 50617647 /usr/lib64/girepository-1.0/nm-1.0.typelib
firewalld 663 root  mem       reg              253,0    343452 50507562 /usr/lib64/girepository-1.0/gio-2.0.typelib
firewalld 663 root  mem       reg              253,0     12352 17202092 /usr/lib64/python2.7/lib-dynload/grpmodule.so
firewalld 663 root  mem       reg              253,0     29184 17202105 /usr/lib64/python2.7/lib-dynload/selectmodule.so
firewalld 663 root  mem       reg              253,0    168312   388240 /usr/lib64/libdbus-glib-1.so.2.2.2
firewalld 663 root  mem       reg              253,0     11976 34028597 /usr/lib64/python2.7/site-packages/_dbus_glib_bindings.so
firewalld 663 root  mem       reg              253,0    185712 50507559 /usr/lib64/girepository-1.0/glib-2.0.typelib
  • if you want to list every open file except for the ones opened by a particular process, use -p followed by ^process-id.
$ sudo lsof -p ^{process-id}

list open files containing directory

to list processes that opened files under a specific directory, use +d option followed by directory path.

$ sudo lsof +d {path}

output:

$ sudo lsof +d /var/log
command    pid user   fd   type device size/off     node name
auditd     607 root    5w   reg  253,0  1065095   425227 /var/log/audit/audit.log
firewalld  663 root    3w   reg  253,0    13817 17663786 /var/log/firewalld
tuned      999 root    3w   reg  253,0    13395 33574994 /var/log/tuned/tuned.log
rsyslogd  1000 root    6w   reg  253,0     4302 16777753 /var/log/cron
rsyslogd  1000 root    7w   reg  253,0    64740 16777755 /var/log/messages
rsyslogd  1000 root    8w   reg  253,0     5513 16787904 /var/log/secure
rsyslogd  1000 root    9w   reg  253,0      198 16777754 /var/log/maillog
$

if you don’t want to recursively list files inside sub-directories, use -d flag followed by directory path.

$ sudo lsof +d {path}

output:

$ sudo lsof +d /var/log
command    pid user   fd   type device size/off     node name
firewalld  663 root    3w   reg  253,0    13817 17663786 /var/log/firewalld
rsyslogd  1000 root    6w   reg  253,0     4302 16777753 /var/log/cron
rsyslogd  1000 root    7w   reg  253,0    64740 16777755 /var/log/messages
rsyslogd  1000 root    8w   reg  253,0     5833 16787904 /var/log/secure
rsyslogd  1000 root    9w   reg  253,0      198 16777754 /var/log/maillog
$

repeat mode

lsof可以在重复模式下运行。在重复模式下,lsof将定期生成和打印输出。同样,lsof支持两种重复模式,即使用-r+r标志。使用-r标志,lsof重复执行直到从用户接收到中断/杀死信号,而使用+r标志,lsof重复模式将在其输出没有打开文件时结束。此外,我们可以使用-r+r标志指定时间延迟。

$ sudo lsof {参数} -r{时间间隔}

输出:

$ sudo lsof -u ftpuser -c bash +d /usr/lib -a -r3
command  pid    user  fd   type device  size/off     node name
bash    1425 ftpuser mem    reg  253,0 106172832 50548523 /usr/lib/locale/locale-archive
=======
command  pid    user  fd   type device  size/off     node name
bash    1425 ftpuser mem    reg  253,0 106172832 50548523 /usr/lib/locale/locale-archive
=======
command  pid    user  fd   type device  size/off     node name
bash    1425 ftpuser mem    reg  253,0 106172832 50548523 /usr/lib/locale/locale-archive
=======

使用网络协议列出打开的文件

lsof支持列出任何类型的linux文件,其中包括网络套接字等。因此,我们可以使用-i标志列出打开的网络连接的详细信息。

$ sudo lsof -i

输出:

$ sudo lsof -i
command  pid         user   fd   type device size/off node name
chronyd  639       chrony    5u  ipv4  14333      0t0  udp localhost:323
chronyd  639       chrony    6u  ipv6  14334      0t0  udp localhost:323
sshd     997         root    3u  ipv4  17330      0t0  tcp *:ssh (listen)
sshd     997         root    4u  ipv6  17339      0t0  tcp *:ssh (listen)
master  1229         root   13u  ipv4  18129      0t0  tcp localhost:smtp (listen)
master  1229         root   14u  ipv6  18130      0t0  tcp localhost:smtp (listen)
sshd    1235         root    3u  ipv4  18318      0t0  tcp centos7vm:ssh->192.168.1.61:23566 (established)
sshd    1239 abhisheknair    3u  ipv4  18318      0t0  tcp centos7vm:ssh->192.168.1.61:23566 (established)
$

要列出特定进程号正在使用的所有网络连接,可以使用以下命令:

$ sudo lsof -i -a -p {进程号}

输出:

$ sudo lsof -i -a -p 997
command pid user   fd   type device size/off node name
sshd    997 root    3u  ipv4  17330      0t0  tcp *:ssh (listen)
sshd    997 root    4u  ipv6  17339      0t0  tcp *:ssh (listen)
$

或者,要列出特定进程正在使用的所有网络连接,可以使用以下命令:

$ sudo lsof -i -a -c {进程名称}

输出:

我们可以使用-i标志来过滤lsof的输出,通过指定协议类型,即tcpudp来按网络协议类型过滤。

$ sudo lsof -i {protocol}

输出:

$ sudo lsof -i tcp
command  pid         user   fd   type device size/off node name
sshd     997         root    3u  ipv4  17330      0t0  tcp *:ssh (listen)
sshd     997         root    4u  ipv6  17339      0t0  tcp *:ssh (listen)
master  1229         root   13u  ipv4  18129      0t0  tcp localhost:smtp (listen)
master  1229         root   14u  ipv6  18130      0t0  tcp localhost:smtp (listen)
sshd    1235         root    3u  ipv4  18318      0t0  tcp centos7vm:ssh->192.168.1.61:23566 (established)
sshd    1239 abhisheknair    3u  ipv4  18318      0t0  tcp centos7vm:ssh->192.168.1.61:23566 (established)
$

或者

输出:

$ sudo lsof -i udp
command pid   user   fd   type device size/off node name
chronyd 639 chrony    5u  ipv4  14333      0t0  udp localhost:323
chronyd 639 chrony    6u  ipv6  14334      0t0  udp localhost:323
$

按端口列出打开的文件

我们还可以使用-i标志按端口号过滤lsof的输出,使用以下命令语法:

$ sudo lsof -i :{port-number}

输出:

$ sudo lsof -i :22
command  pid         user   fd   type device size/off node name
sshd     997         root    3u  ipv4  17330      0t0  tcp *:ssh (listen)
sshd     997         root    4u  ipv6  17339      0t0  tcp *:ssh (listen)
sshd    1235         root    3u  ipv4  18318      0t0  tcp centos7vm:ssh->192.168.1.61:23566 (established)
sshd    1239 abhisheknair    3u  ipv4  18318      0t0  tcp centos7vm:ssh->192.168.1.61:23566 (established)
$

按ipv4/ipv6列出打开的文件

我们可以通过限制为ipv4或ipv6来筛选网络连接列表。使用以下命令语法仅获得ipv4列表:

$ sudo lsof -i4

输出:

$ sudo lsof -i4
command  pid         user   fd   type device size/off node name
chronyd  639       chrony    5u  ipv4  14333      0t0  udp localhost:323
sshd     997         root    3u  ipv4  17330      0t0  tcp *:ssh (listen)
master  1229         root   13u  ipv4  18129      0t0  tcp localhost:smtp (listen)
sshd    1235         root    3u  ipv4  18318      0t0  tcp centos7vm:ssh->192.168.1.61:23566 (established)
sshd    1239 abhisheknair    3u  ipv4  18318      0t0  tcp centos7vm:ssh->192.168.1.61:23566 (established)
$

或者要仅获取ipv6详细信息,请使用:

$ sudo lsof -i6

输出:

在nfs上列出打开的文件

lsof还可以列出用户当前打开的所有nfs文件。

$ sudo lsof -n -u abhisheknair -a

列出已锁定的已删除文件

有时候在linux中删除文件时,仍然会被一个或多个进程锁定。因此,这些文件不会在正常的文件系统列表中显示,比如使用ls命令等。但是,它们仍然会占用磁盘空间,如df命令的输出所示,这种情况通常发生在有意删除用于释放进程锁的大文件时。可以使用lsof查找此类进程:

$ sudo lsof {path} | grep deleted

输出:

$ sudo lsof / | grep deleted
firewalld  654         root    8u   reg  253,0      4096 16777726 /tmp/#16777726 (deleted)
tuned      968         root    8u   reg  253,0      4096 16777720 /tmp/#16777720 (deleted)
$

结论

lsof提供了一系列选项,可以根据需要自定义其输出。它是日常系统和网络管理任务中非常有用的实用工具。能够组合不同的参数使其更加有用,并允许您轻松地获得所需的输出。请参阅lsof手册以了解所有支持的参数及其用法。

$ man lsof

类似文章