如何使用linux lsof命令

如果Linux中的所有东西都是一个文件,那么除了硬盘上的文件之外,还必须有更多的内容。本教程将向您展示如何使用lsof查看作为文件处理的所有其他设备和进程。...

如果Linux中的所有东西都是一个文件,那么除了硬盘上的文件之外,还必须有更多的内容。本教程将向您展示如何使用lsof查看作为文件处理的所有其他设备和进程。

在linux上,一切都是一个文件

经常被引用的一句话是,Linux中的所有东西都是一个文件。文件是字节的集合。当它们被读入程序或发送到打印机时,它们似乎会生成一个字节流。当它们被写入时,它们接受字节流。

许多其他系统组件接受或生成字节流,例如键盘、套接字连接、打印机和通信进程。因为它们要么接受、生成,要么接受并生成字节流,所以这些设备可以在非常低的级别上进行处理,就好像它们是文件一样。

这个设计概念简化了Unix操作系统的实现。这意味着可以创建一小组处理程序、工具和api来处理各种不同的资源。

硬盘上的数据和程序文件是普通的旧文件系统文件。我们可以使用ls命令列出它们并找出它们的一些细节。

我们如何找出所有被当作文件处理的其他进程和设备?我们使用lsof命令。列出系统中打开的文件。也就是说,它列出了正在处理的所有内容,就像它是一个文件一样。

相关:在Linux中,“一切都是文件”是什么意思?

lsof命令

lsof可以报告的许多进程或设备属于root或者是由root启动的,因此您需要对lsof使用sudo命令。

因为这个列表会很长,所以我们将通过更少的管道来完成它。

sudo lsof | less

如何使用linux lsof命令

在lsof输出出现之前,GNOME用户可能会在终端窗口中看到一条警告消息。

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete.

lsof尝试处理所有装入的文件系统。引发此警告消息的原因是lsof遇到了GNOME虚拟文件系统(GVFS)。这是用户空间文件系统(FUSE)的一个特例。它充当了GNOME、其API和内核之间的桥梁。除了挂载它的所有者(在本例中是GNOME),没有人甚至连根用户都不能访问这些文件系统。您可以忽略此警告。

lsof的输出很宽。最左边的列是:

如何使用linux lsof命令

最右边的列是:

如何使用linux lsof命令

列的lsof

并非所有列都适用于所有类型的打开文件。其中有些是空白是正常的。

  • Command:与打开文件的进程关联的命令的名称。
  • PID:打开文件的进程的进程标识号。
  • 任务(线程)标识号。空列表示它不是任务,而是进程。
  • User:进程所属用户的用户ID或名称,或lsof在/proc中查找进程信息的目录所有者的用户ID或登录名。
  • FD:显示文件的文件描述符。文件描述符描述如下。
  • 类型:与文件关联的节点的类型。注意类型如下所述。
  • 设备:包含字符特殊、块特殊、常规、目录或NFS文件的设备号(用逗号分隔),或标识该文件的内核引用地址。它还可能显示Linux AX.25套接字设备的基址或设备名。
  • Size/Off:以字节为单位显示文件大小或文件偏移量。
  • 节点:显示本地文件的节点号,或服务器主机中NFS文件的inode号,或internet协议类型。它可能显示流的STR或Linux AX.25套接字设备的IRQ或inode号。
  • 名称:显示文件所在的装载点和文件系统的名称。

fd列

FD列中的文件描述符可以是许多选项之一;手册页列出了所有选项。

FD列条目可以由三部分组成:文件描述符、模式字符和锁字符。一些常见的文件描述符包括:

  • cwd:当前工作目录。
  • 错误:FD信息错误(请参阅“名称”列)。
  • ltx:共享库文本(代码和数据)。
  • m86:DOS合并映射文件。
  • 内存映射文件。
  • 内存映射设备。
  • pd:父目录。
  • rtd:根目录。
  • txt:程序文本(代码和数据)
  • 表示文件描述符的数字。

模式字符可以是以下之一:

  • r:读访问。
  • w:写访问。
  • u:读写访问。
  • '':如果模式未知且没有锁定字符,则为空格字符。
  • –:模式未知,存在锁定字符。

锁定字符可以是以下字符之一:

  • r:读取部分文件的锁。
  • R:读取整个文件的锁。
  • w:在文件的一部分写锁。
  • W:在整个文件上写锁。
  • u:任意长度的读写锁。
  • U:未知的锁类型。
  • '':一个空格字符。没有锁。

“类型”列

类型列中可能会出现70多个条目。您将看到一些常见条目:

  • 常规文件系统文件。
  • 目录:目录。
  • 先进先出:先进先出。
  • 字符特殊文件。
  • BLK:阻止特殊文件。
  • INET:互联网插座。
  • unix:unix域套接字

请参阅已打开文件的进程

要查看已打开某个文件的进程,请将文件名作为lsof的参数提供。例如,查看已打开的进程内核日志文件,使用以下命令:

sudo lsof /var/log/kern.log

如何使用linux lsof命令

lsof通过显示由用户syslog启动的单个进程rsyslogd来响应。

如何使用linux lsof命令

查看从目录打开的所有文件

要查看从目录中打开的文件以及打开这些文件的进程,请将目录作为参数传递给lsof。必须使用+D(目录)选项。

要查看在/var/log/目录中打开的所有文件,请使用以下命令:

sudo lsof +D /var/log/

如何使用linux lsof命令

lsof用该目录中所有打开文件的列表来响应。

如何使用linux lsof命令

要查看从/home目录打开的所有文件,请使用以下命令:

sudo lsof +D /home

如何使用linux lsof命令

显示已从/home目录打开的文件。请注意,由于某些列中的描述较短,因此整个列表的范围较窄。

如何使用linux lsof命令

列出进程打开的文件

要查看由特定进程打开的文件,请使用-c(命令)选项。请注意,您可以一次向lsof提供多个搜索项。

sudo lsof -c ssh -c init

如何使用linux lsof命令

lsof提供已由命令行上提供的任一进程打开的文件的列表。

如何使用linux lsof命令

查看用户打开的文件

要将显示限制为特定用户已打开的文件,请使用-u(用户)选项。在本例中,我们将查看由代表Mary拥有或启动的进程打开的文件。

sudo lsof -u mary

如何使用linux lsof命令

列出的所有文件都已代表用户Mary打开。这包括已被桌面环境打开的文件,例如,或者仅仅由于Mary已登录而打开的文件。

如何使用linux lsof命令

排除用户打开的文件

要排除用户已打开的文件,请使用“^”运算符。将用户排除在列表之外可以更容易地找到您感兴趣的信息。必须像以前一样使用-u选项,并在用户名的开头添加“^”字符。

sudo lsof +D /home -u ^mary

如何使用linux lsof命令

这次,/home目录的列表不包括用户Mary打开的任何文件。

如何使用linux lsof命令

列出进程打开的文件

要列出由特定进程打开的文件,请使用-p(进程)选项并提供进程ID作为参数。

sudo lsof - p 4610

如何使用linux lsof命令

您提供的进程ID已打开的所有文件都将列出。

如何使用linux lsof命令

列出已打开文件的进程ID

要查看已打开特定文件的进程的进程ID,请使用-t(简写)选项并在命令行中提供文件名。

sudo lsof -t /usr/share/mime/mime.cache

如何使用linux lsof命令

进程ID显示在一个简单的列表中。

如何使用linux lsof命令

使用和或搜索

让我们列出用户Mary打开的与SSH进程相关的文件。我们知道我们可以在命令行上提供多个搜索项,所以这应该很容易。

sudo lsof -u mary -c ssh

如何使用linux lsof命令

现在让我们看看lsof的输出。这看起来不对;输出中有由root启动的条目。

如何使用linux lsof命令

这不是我们所期望的。怎么搞的?

当您提供多个搜索项时,lsof将返回与第一个搜索项或第二个搜索项匹配的任何文件,依此类推。换句话说,它执行OR搜索。

要使lsof执行AND搜索,请使用-a(AND)选项。这意味着只列出与第一个搜索项和第二个搜索项匹配的文件,依此类推。

让我们再试一次,然后使用-a选项。

sudo lsof -u mary -c ssh -a

如何使用linux lsof命令

现在,清单中的每个文件都是由Mary或代表Mary打开的,并且与SSH命令关联。

如何使用linux lsof命令

自动刷新显示

我们可以使用+|-r(repeat)选项将lsof置于repeat模式。repeat选项有两种应用方式,+r或-r。我们还必须添加lsof在刷新显示之前要等待的秒数。

在任何一种格式中使用repeat选项都会使lsof像往常一样显示结果,但会在显示的底部添加一条虚线。它等待命令行提供的秒数,然后用一组新的结果刷新显示。

对于-r选项,此操作将继续,直到您按Ctrl+C为止。对于+r格式,此操作将继续,直到没有要显示的结果,或者直到您按Ctrl+C为止。

sudo lsof -u mary -c ssh -a -r5

如何使用linux lsof命令

请注意清单底部的虚线。当输出被刷新时,这将分隔每个新的数据显示。

如何使用linux lsof命令

显示与internet连接关联的文件

i(internet)选项允许您查看与网络和internet连接相关联的进程打开的文件。

lsof -i

如何使用linux lsof命令

将显示通过网络和internet连接打开的所有文件。

如何使用linux lsof命令

按进程id显示与internet连接关联的文件

要查看与特定进程ID关联的internet连接打开的文件,请添加-p选项和-a选项。

在这里,我们正在寻找通过internet或网络连接打开的文件,通过ID为606的进程。

sudo lsof -i -a -p 606

如何使用linux lsof命令

显示由进程ID 606打开的与因特网或网络连接相关联的所有文件。

如何使用linux lsof命令

显示与internet连接和命令关联的文件

我们可以使用-c(command)选项来查找由特定进程打开的文件。要查找已由internet或与ssh进程关联的网络连接打开的文件,请使用以下命令:

lsof -i -a -c ssh

如何使用linux lsof命令

由于ssh进程而打开的所有文件都列在输出中。

如何使用linux lsof命令

显示与internet连接和端口关联的文件

我们可以在特定端口上对通过internet或网络连接打开的文件进行lsof报告。为此,我们使用:字符后跟端口号。

在这里,我们要求lsof列出通过网络或internet连接使用端口22打开的文件。

lsof -i :22

如何使用linux lsof命令

所有列出的文件都是由与端口22(SSH连接的默认端口)关联的进程打开的。

如何使用linux lsof命令

显示与internet连接和协议相关的文件

我们可以要求lsof显示与使用特定协议的网络和internet连接相关联的进程所打开的文件。我们可以从TCP、UDP和SMTP中进行选择。让我们使用TCP协议,看看我们得到了什么。

sudo lsof -i tcp

如何使用linux lsof命令

列出的文件只有那些由使用TCP协议的进程打开的文件。

如何使用linux lsof命令

我们只触及了表面

在lsof的一些常见用例中,这是一个很好的基础,但是还有更多的地方。手册页的长度超过2800行,这就可以判断出还有多少内容。

lsof命令可以用来深入到打开文件和伪文件的地层中。我们提供了一张示意图,地图册在手册页上。

  • 发表于 2021-04-03 10:30
  • 阅读 ( 163 )
  • 分类:互联网

你可能感兴趣的文章

如何在linux上安装和使用powershell

... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 307 )

如何在android和termux上使用linux命令行

...许您在Android设备上安装诚实善良的Linux应用程序。下面是如何使用Termux应用程序。 ...

  • 发布于 2021-03-18 07:26
  • 阅读 ( 373 )

如何在windows10上获得linux bash shell

... 如何在windows10上安装linux bash shell ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 287 )

linux下如何重命名文件

要在Linux中重命名文件吗?如果您知道如何在Windows、macOS或Chrome操作系统中完成这项工作,那么您就知道如何在这里完成这项工作。在大多数版本的Linux上,您只需右键单击一个文件并选择Rename选项。 ...

  • 发布于 2021-03-22 02:48
  • 阅读 ( 276 )

如何在linux中使用ls命令

如果您不知道如何使用ls命令,那么获取与存储上的文件相关的详细信息是很困难的。在这里,我们将讨论Linux上与ls命令相关的所有内容,以及它使用的一些不同的标志。 ...

  • 发布于 2021-03-26 18:01
  • 阅读 ( 188 )

如何在linux中添加用户

想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...

  • 发布于 2021-03-26 23:29
  • 阅读 ( 334 )

如何使用mv命令移动linux文件

虽然您可能已经知道如何使用GUI文件浏览器在Linux中移动文件,但您可能想知道终端中是否有move命令允许您将文件快速移动到不同的目录。mv命令就是您想要的命令,它的简单语法和一些可选的安全标志很容易使用。 ...

  • 发布于 2021-03-28 17:18
  • 阅读 ( 242 )

命令行:为什么人们还在为它们烦恼?

...它。你的脚本就会运行。 命令行是最小的公分母。学习如何使用它,无论Linux发行版和图形桌面环境如何,您都可以执行所需的所有任务。不同的桌面有自己的做事方式。不同的Linux发行版捆绑了各种实用程序和程序。 但是打开...

  • 发布于 2021-04-03 05:30
  • 阅读 ( 181 )

如何使用linux type命令

...ell函数、内置命令或保留字。使用type可以发现Linux命令是如何执行的,并更好地理解系统。 照我的吩咐做 当我们打开一个终端窗口并开始向我们的Linux计算机发出命令时,我们很少停下来思考操作系统中的哪些软件组件正在对...

  • 发布于 2021-04-03 10:23
  • 阅读 ( 197 )

windows10的新bashshell所能做的一切

...些指南汇总到一个大列表中。 windows上linux入门 相关:如何在windows10上安装和使用Linux Bash Shell 您可以在任何版本的windows10(包括windows10home)上安装Linux环境和bashshell。但是,它确实需要64位版本的Windows10。您只需启用Windows Subs...

  • 发布于 2021-04-06 14:44
  • 阅读 ( 264 )
nkheyc0345
nkheyc0345

0 篇文章

相关推荐