Linux上的lsof和netstat有什么区别?

时间:2018-03-20 09:57:56

标签: linux netstat lsof

我今天解决了一个问题:

当我启动HDP泊坞窗容器时,发生错误:

  

listen tcp 0.0.0.0:8086:bind:地址已在使用中

根据错误消息,我知道端口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(打开文件列表)是基于应用程序的,这有点像netstat + ps,在那里你可以看到所有被访问的端口,NW连接等。 但是lsof包含像本地emacs窗口终端会话(tty dev / pts / n)这样的东西,它不是netstat的一部分

4 个答案:

答案 0 :(得分:1)

  

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 

显示内核路由表

netstat -plunt

显示具有PID数据的TCP和UDP的所有侦听和已建立的连接。

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

  

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

示例:

sudo ss -plunt
  • -plunt提供建立和侦听过程信息的TCP和UDP连接的数据。

答案 1 :(得分:0)

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

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

netstat -tunlp |grep :8086

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

lsof -p PID

答案 2 :(得分:0)

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

sudo lsof -i:8086 

应打印所需的输出。

答案 3 :(得分:0)

您应该扎根,以对您的lsof问题得到正确的答案。假设确实有某个端口在监听该端口,那么您的命令就可以了。