Linux命令-lsof命令列出打开的文件并终止进程

时间:2020-02-23 14:39:27  来源:igfitidea点击:

在本教程中,我们将学习lsof命令。

列出所有打开的文件

我们运行" lsof"命令列出所有打开的文件。

$lsof
COMMAND     PID         USER   FD      TYPE             DEVICE    SIZE/OFF                NODE NAME
lsof        239 theitroad  cwd       DIR                1,4         736                   2 /

FD列代表文件描述符。

FD列可以具有以下值。

  • rtd-根目录
  • cwd-当前工作目录
  • txt-程序文本(代码和数据)
  • mem-内存映射文件

FD列也可以具有类似" 1u"的值。
其中" u"表示读写模式。
还有其他模式,例如用于读的" r"和用于写的" w"。

TYPE列的值可以是以下值。

  • REG-常规文件
  • DIR-目录
  • CHR-特殊字符文件
  • FIFO-先进先出

列出用户打开的所有文件

要列出用户打开的所有文件,我们使用lsof -u username命令,其中username是用户名。

要知道您的用户名,请运行" whoami"命令。

在以下示例中,我们列出了用户theitroad打开的所有文件。

$lsof -u theitroad

列出所有打开的IPv4文件

要列出所有打开的IPv4网络文件,我们运行以下命令。

$lsof -i 4

列出所有IPv6打开的文件

要列出所有打开的IPv6网络文件,我们运行以下命令。

$lsof -i 6

列出具有给定PID的所有打开文件

为了列出给定PID的所有打开文件,我们运行lsof -p PID命令。

如果文件没有正确列出,那么我们可以将sudo添加到命令中,例如sudo lsof -p PID。

在以下示例中,我们列出了所有带有PID 1的过程。

$lsof -p 1

列出具有给定PID的所有打开文件

如果要列出一组PID中的所有打开文件,则运行lsof -p PID1,PID2,...命令,其中PID1,PID2是PID值。

在以下示例中,我们列出了PID 1和2的所有打开文件。

$lsof -p 1,2

列出在给定端口上运行的所有进程

为了列出在给定端口上运行的所有进程,我们使用以下命令lsof -i:PORT_NUMBER

在以下示例中,我们列出了端口80上运行的所有进程。

lsof -i :80

在以下示例中,我们列出了在端口443上运行的所有进程。

lsof -i :443

列出在给定端口上运行的所有进程

为了列出在一组端口号上运行的所有进程,我们使用以下命令lsof -i:PORT1,PORT2,...,其中PORT1,PORT2是端口号。

在以下示例中,我们列出了在端口80和443上运行的所有进程。

$lsof -i :80,443

列出所有TCP连接

要列出所有TCP连接,我们运行以下命令。

$lsof -i tcp

列出所有UDP连接

要列出所有UDP连接,我们运行以下命令。

$lsof -i udp

杀死属于给定用户的所有进程

为了杀死属于特定用户的所有进程,我们运行以下命令kill -9 $(lsof -t -u username)

在以下示例中,我们将杀死所有属于用户johndoe的进程。

kill -9 $(lsof -t -u johndoe)

杀死在给定端口上运行的所有进程

要终止在特定端口上运行的所有进程,我们运行以下命令kill -9 $(lsof -t -i:PORT_NUMBER)

在以下示例中,我们将终止端口80上运行的所有进程。

$kill -9 $(lsof -t -i :80)

同样,如果要终止端口443上的所有进程,则将运行以下命令。

$kill -9 $(lsof -t -i :443)

杀死在给定端口上运行的所有进程

为了杀死在给定的一组端口号上运行的所有进程,我们使用以下命令kill -9 $(lsof -t -i:PORT1,PORT2,...),其中PORT1,PORT2是端口号。

在以下示例中,我们将终止端口80和443上运行的所有进程。

$kill -9 $(lsof -t -i :80,443)