Debian-端口80被阻止,但我不知道是什么


8

我无法让lighttpd监听端口80。

~# /etc/init.d/lighttpd start
Starting web server: lighttpd2013-03-16 23:15:02: (network.c.379) can't bind to port:  80 Address already in use
 failed!

实际上,我也已经在服务器上安装了apache2(侦听端口80),但是它不是活动的。

我使用了netstat / netstat -npl,但是没有帮助

我如何找出正在使用的端口?

Answers:


27

厌倦了习惯于netstat此类操作的人们,很高兴知道Linux有另一个出色的(实际上是更出色的)网络工具ss。例如,要找出哪个进程打开了端口80,可以这样运行:

sudo ss -pt state listening 'sport = :80'

因此无需通过外部过滤器进行传递。当然,它还有许多有用的旋钮,因此请熟悉一下它。

为了完整起见,从最近开始man fuser,我还提到:

  • sudo fuser 80/tcp—这也使您不必修改cut/ grep/ awk…请记住,此表示法是一种捷径,万一有歧义,则应使用允许使用的名称空间之一-n …,例如sudo fuser -n tcp 80

  • sudo lsof -n -sTCP:LISTEN -i:80— 由@wallenborn 指出。同时,不严格要求这样做,强烈建议您这样做,否则会使用DNS解析,这通常会严重降低输出速度。-n


@Goot,如果您是二进制的话,至少ls -l /proc/PID/exe可以。您的意思是它当前的工作目录,请参见…/cwd
poige

5

Address already in use 表示另一个进程已经在侦听端口80。一次只能有一个进程在给定的端口侦听。

要找到该过程,请以根用户身份运行:

netstat -tnlp | grep -w 80

将会列出违规程序。


谢谢,我发现还有另一个lighttpd实例正在运行。如果可以的话,我会接受你的回答。
2013年

4

减少击键次数的另一种选择是lsof:

lsof -i :80

不。它不仅显示侦听过程。
poige

1
正确使用的时间更长一些:lsof -n -sTCP:LISTEN -i:22
poige

1
正确使用的时间更长:sudo lsof -n -sTCP:LISTEN -i:80。最好sudo明确使用,以强调除非用户拥有高级权限,否则他可能无法获得正确的结果。
poige

0

旧线程,但谁知道,有人遇到了与我相同的问题。在Apache2中,我启用了多个站点。在一个站点配置(/ etc / apache2 / sites-available)中,第一行是

listen 80

这引起了与Apache本身的冲突!因为它已经在侦听端口80上的全局配置。如果Apache将端口80作为默认端口,则只需从yoursite.conf中删除“ listen 80”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.