【问题标题】:What are the differences between lsof and netstat on linux?linux上的lsof和netstat有什么区别?
【发布时间】:2018-08-29 02:02:20
【问题描述】:

我今天遇到一个问题:

当我启动HDP docker容器时,出现错误:

listen tcp 0.0.0.0:8086: bind: address already in use

根据报错信息,我知道 8086 端口已经在使用,所以我尝试了一些命令来确定哪个程序正在使用 8086 端口。 lsof -i:8086 lsof -i tcp:8086 lsof | grep 8086

但是上面的所有命令都没有输出!

我对此感到非常困惑,在谷歌搜索后,我尝试了另一个命令: netstat -pna | grep 8086

我从这个命令得到了正确的输出。

我知道lsofnetstat 之间的一些区别,但我真的不知道为什么我无法从lsof -i:8086 获得任何输出?

以下是我从谷歌搜索的两个命令之间的一些区别:

netstat(net statistic) 是基于连接的,它显示 NW 连接(udp/tcp 端口)、路由表、接口、多播成员资格等。

lsof(list of open files) 是基于应用程序的,这有点像 netstat + ps,在那里你可以看到所有访问的端口、NW 连接等。 但 lsof 包括我的本地 emacs 窗口终端会话(tty dev/pts/n)之类的东西,它不是 netstat 的一部分

【问题讨论】:

  • lsofnetstat 之间没有区别,你应该问Why lsof -i:8086没用?否则你只会得到谷歌和手册页的答案。

标签: linux netstat lsof


【解决方案1】:

正如你已经提到的,lsof 是一个非常有用的命令,用于列出特定进程打开的文件,而netstat 是一个监控网络连接的工具。

您应该能够使用netstat 找到侦听端口8086 的进程的PID:

netstat -tunlp |grep :8086

然后使用lsof列出进程使用的文件:

lsof -p PID

【讨论】:

  • 好的,谢谢。但是为什么我无法获得lsof -i:8086 的输出?一个进程绝对在监听8086 端口,但我无法通过执行lsof 命令获得输出,这很奇怪。
  • @Alec.Zhou 您可能需要sudo lsof -i:8086 才能查看您不拥有的套接字。
【解决方案2】:

我今天遇到了类似的问题。解决方案是使用 sudo 权限运行 lsof 命令。

sudo lsof -i:8086 

应该打印所需的输出。

【讨论】:

    【解决方案3】:

    LSOF:打开文件列表。它列出了属于所有活动进程的所有打开文件。

    例子:

    sudo lsof -n -i
    sudo lsof -n -i4
    sudo lsof -n -i :80 
    
    • -n 禁止将网络号转换为网络文件的主机名。禁止转换可能会使 lsof 运行得更快。当主机
      时也很有用 查找无法正常工作
    • -i 选择任何 Internet 地址与 i 中指定的地址匹配的文件列表。如果未指定地址,此选项将选择所有 Internet 和 x.25 (HP-UX) 网络文件的列表。如果指定 -i4 或 -i6 且未指定以下地址,则仅显示指定 IP 版本 IPv4 或 IPv6 的文件。

    NETSTAT:获取网络统计信息的工具。默认情况下,netstat 显示打开的套接字列表。如果您不指定任何 地址族,然后是所有已配置地址的活动套接字 家庭将被打印出来。

    显示内核路由表:

    netstat -r 
    

    使用 PID 数据显示 TCP 和 UDP 的所有侦听和建立的连接:

    netstat -plunt
    

    此外,您还有另一个命令行工具可以使用,即 SS。

    SS:用于转储套接字统计信息。它允许显示类似于 netstat 的信息。它可以显示更多的TCP和状态 信息比其他工具。

    -plunt 为已建立的 TCP 和 UDP 连接提供数据,并使用进程信息进行侦听:

    sudo ss -plunt
    

    【讨论】:

    • 很好的反应,有很多信息!它非常有用。谢谢!
    【解决方案4】:

    您应该是 root 才能正确回答您的lsof 问题。你的命令很好,假设确实有东西在那个端口上监听。

    【讨论】:

      猜你喜欢
      • 2012-07-30
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 2023-02-10
      • 2015-01-02
      相关资源
      最近更新 更多