如果Linux中的所有东西都是一个文件,那么除了硬盘上的文件之外,还必须有更多的内容。本教程将向您展示如何使用lsof查看作为文件处理的所有其他设备和进程。
经常被引用的一句话是,Linux中的所有东西都是一个文件。文件是字节的集合。当它们被读入程序或发送到打印机时,它们似乎会生成一个字节流。当它们被写入时,它们接受字节流。
许多其他系统组件接受或生成字节流,例如键盘、套接字连接、打印机和通信进程。因为它们要么接受、生成,要么接受并生成字节流,所以这些设备可以在非常低的级别上进行处理,就好像它们是文件一样。
这个设计概念简化了Unix操作系统的实现。这意味着可以创建一小组处理程序、工具和api来处理各种不同的资源。
硬盘上的数据和程序文件是普通的旧文件系统文件。我们可以使用ls命令列出它们并找出它们的一些细节。
我们如何找出所有被当作文件处理的其他进程和设备?我们使用lsof命令。列出系统中打开的文件。也就是说,它列出了正在处理的所有内容,就像它是一个文件一样。
相关:在Linux中,“一切都是文件”是什么意思?
lsof可以报告的许多进程或设备属于root或者是由root启动的,因此您需要对lsof使用sudo命令。
因为这个列表会很长,所以我们将通过更少的管道来完成它。
sudo lsof | less在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的输出很宽。最左边的列是:
最右边的列是:
并非所有列都适用于所有类型的打开文件。其中有些是空白是正常的。
FD列中的文件描述符可以是许多选项之一;手册页列出了所有选项。
FD列条目可以由三部分组成:文件描述符、模式字符和锁字符。一些常见的文件描述符包括:
模式字符可以是以下之一:
锁定字符可以是以下字符之一:
类型列中可能会出现70多个条目。您将看到一些常见条目:
要查看已打开某个文件的进程,请将文件名作为lsof的参数提供。例如,查看已打开的进程内核日志文件,使用以下命令:
sudo lsof /var/log/kern.loglsof通过显示由用户syslog启动的单个进程rsyslogd来响应。
要查看从目录中打开的文件以及打开这些文件的进程,请将目录作为参数传递给lsof。必须使用+D(目录)选项。
要查看在/var/log/目录中打开的所有文件,请使用以下命令:
sudo lsof +D /var/log/lsof用该目录中所有打开文件的列表来响应。
要查看从/home目录打开的所有文件,请使用以下命令:
sudo lsof +D /home显示已从/home目录打开的文件。请注意,由于某些列中的描述较短,因此整个列表的范围较窄。
要查看由特定进程打开的文件,请使用-c(命令)选项。请注意,您可以一次向lsof提供多个搜索项。
sudo lsof -c ssh -c initlsof提供已由命令行上提供的任一进程打开的文件的列表。
要将显示限制为特定用户已打开的文件,请使用-u(用户)选项。在本例中,我们将查看由代表Mary拥有或启动的进程打开的文件。
sudo lsof -u mary列出的所有文件都已代表用户Mary打开。这包括已被桌面环境打开的文件,例如,或者仅仅由于Mary已登录而打开的文件。
要排除用户已打开的文件,请使用“^”运算符。将用户排除在列表之外可以更容易地找到您感兴趣的信息。必须像以前一样使用-u选项,并在用户名的开头添加“^”字符。
sudo lsof +D /home -u ^mary这次,/home目录的列表不包括用户Mary打开的任何文件。
要列出由特定进程打开的文件,请使用-p(进程)选项并提供进程ID作为参数。
sudo lsof - p 4610您提供的进程ID已打开的所有文件都将列出。
要查看已打开特定文件的进程的进程ID,请使用-t(简写)选项并在命令行中提供文件名。
sudo lsof -t /usr/share/mime/mime.cache进程ID显示在一个简单的列表中。
让我们列出用户Mary打开的与SSH进程相关的文件。我们知道我们可以在命令行上提供多个搜索项,所以这应该很容易。
sudo lsof -u mary -c ssh现在让我们看看lsof的输出。这看起来不对;输出中有由root启动的条目。
这不是我们所期望的。怎么搞的?
当您提供多个搜索项时,lsof将返回与第一个搜索项或第二个搜索项匹配的任何文件,依此类推。换句话说,它执行OR搜索。
要使lsof执行AND搜索,请使用-a(AND)选项。这意味着只列出与第一个搜索项和第二个搜索项匹配的文件,依此类推。
让我们再试一次,然后使用-a选项。
sudo lsof -u mary -c ssh -a现在,清单中的每个文件都是由Mary或代表Mary打开的,并且与SSH命令关联。
我们可以使用+|-r(repeat)选项将lsof置于repeat模式。repeat选项有两种应用方式,+r或-r。我们还必须添加lsof在刷新显示之前要等待的秒数。
在任何一种格式中使用repeat选项都会使lsof像往常一样显示结果,但会在显示的底部添加一条虚线。它等待命令行提供的秒数,然后用一组新的结果刷新显示。
对于-r选项,此操作将继续,直到您按Ctrl+C为止。对于+r格式,此操作将继续,直到没有要显示的结果,或者直到您按Ctrl+C为止。
sudo lsof -u mary -c ssh -a -r5请注意清单底部的虚线。当输出被刷新时,这将分隔每个新的数据显示。
i(internet)选项允许您查看与网络和internet连接相关联的进程打开的文件。
lsof -i将显示通过网络和internet连接打开的所有文件。
要查看与特定进程ID关联的internet连接打开的文件,请添加-p选项和-a选项。
在这里,我们正在寻找通过internet或网络连接打开的文件,通过ID为606的进程。
sudo lsof -i -a -p 606显示由进程ID 606打开的与因特网或网络连接相关联的所有文件。
我们可以使用-c(command)选项来查找由特定进程打开的文件。要查找已由internet或与ssh进程关联的网络连接打开的文件,请使用以下命令:
lsof -i -a -c ssh由于ssh进程而打开的所有文件都列在输出中。
我们可以在特定端口上对通过internet或网络连接打开的文件进行lsof报告。为此,我们使用:字符后跟端口号。
在这里,我们要求lsof列出通过网络或internet连接使用端口22打开的文件。
lsof -i :22所有列出的文件都是由与端口22(SSH连接的默认端口)关联的进程打开的。
我们可以要求lsof显示与使用特定协议的网络和internet连接相关联的进程所打开的文件。我们可以从TCP、UDP和SMTP中进行选择。让我们使用TCP协议,看看我们得到了什么。
sudo lsof -i tcp列出的文件只有那些由使用TCP协议的进程打开的文件。
在lsof的一些常见用例中,这是一个很好的基础,但是还有更多的地方。手册页的长度超过2800行,这就可以判断出还有多少内容。
lsof命令可以用来深入到打开文件和伪文件的地层中。我们提供了一张示意图,地图册在手册页上。
... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...
...许您在Android设备上安装诚实善良的Linux应用程序。下面是如何使用Termux应用程序。 ...
... 如何在windows10上安装linux bash shell ...
要在Linux中重命名文件吗?如果您知道如何在Windows、macOS或Chrome操作系统中完成这项工作,那么您就知道如何在这里完成这项工作。在大多数版本的Linux上,您只需右键单击一个文件并选择Rename选项。 ...
如果您不知道如何使用ls命令,那么获取与存储上的文件相关的详细信息是很困难的。在这里,我们将讨论Linux上与ls命令相关的所有内容,以及它使用的一些不同的标志。 ...
想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...
虽然您可能已经知道如何使用GUI文件浏览器在Linux中移动文件,但您可能想知道终端中是否有move命令允许您将文件快速移动到不同的目录。mv命令就是您想要的命令,它的简单语法和一些可选的安全标志很容易使用。 ...
...它。你的脚本就会运行。 命令行是最小的公分母。学习如何使用它,无论Linux发行版和图形桌面环境如何,您都可以执行所需的所有任务。不同的桌面有自己的做事方式。不同的Linux发行版捆绑了各种实用程序和程序。 但是打开...
...ell函数、内置命令或保留字。使用type可以发现Linux命令是如何执行的,并更好地理解系统。 照我的吩咐做 当我们打开一个终端窗口并开始向我们的Linux计算机发出命令时,我们很少停下来思考操作系统中的哪些软件组件正在对...
...些指南汇总到一个大列表中。 windows上linux入门 相关:如何在windows10上安装和使用Linux Bash Shell 您可以在任何版本的windows10(包括windows10home)上安装Linux环境和bashshell。但是,它确实需要64位版本的Windows10。您只需启用Windows Subs...