Linux命令-lsof命令列出打开的文件并终止进程
在本教程中,我们将学习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)