我今天解决了一个问题:
当我启动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
我从此命令得到了正确的输出。
我知道lsof
和netstat
之间存在一些差异,但我真的不知道为什么我无法从lsof -i:8086
获得任何输出?
以下是我从谷歌搜索的两个命令之间的一些差异:
netstat(net statistic)是基于连接的,它显示了NW连接(udp / tcp端口),路由表,接口,多播成员资格等。
lsof(打开文件列表)是基于应用程序的,这有点像netstat + ps,在那里你可以看到所有被访问的端口,NW连接等。 但是lsof包含像本地emacs窗口终端会话(tty dev / pts / n)这样的东西,它不是netstat的一部分
答案 0 :(得分:1)
LSOF:打开文件列表。它列出了属于所有活动进程的所有打开文件。
示例:
sudo lsof -n -i
sudo lsof -n -i4
sudo lsof -n -i :80
NETSTAT:这是获取网络统计信息的工具。默认情况下,netstat显示打开的套接字列表。如果不指定 地址系列,然后是所有已配置地址的活动套接字 家庭将被打印。
示例:
netstat -r
显示内核路由表
netstat -plunt
显示具有PID数据的TCP和UDP的所有侦听和已建立的连接。
此外,您还可以使用另一个命令行工具SS。
SS:用于转储套接字统计信息。它允许显示类似于netstat的信息。它可以显示更多的TCP和状态 信息而不是其他工具。
示例:
sudo ss -plunt
答案 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
问题得到正确的答案。假设确实有某个端口在监听该端口,那么您的命令就可以了。