如何检查某个端口是否已打开且未使用?

时间:2012-12-22 09:54:47

标签: linux

我想在使用端口号80的Linux平台上安装webserver-apache,但我不确定端口是否打开,是否被其他应用程序使用。

  1. grep 80 /etc/services的输出为:
  2. http 80/tcp www www-http #World Wide web Http

    http 80/udp www www-http #Hypertext transfer protocol

    2. netstat -an | grep 80 | more

    它提供了一些IP,其中一个是IP:80 TIME_WAIT

    请您帮忙告诉我如何确定端口80是否已打开且未使用,以便我可以开始安装。

7 个答案:

答案 0 :(得分:6)

sudo netstat -anp | grep ':80 '

那应该给你pid&保存端口80的进程的名称

答案 1 :(得分:3)

尝试将lsof连接到grep并搜索端口号:

lsof|grep <port>

如果没有显示任何表示端口未使用

您可以使用

终止特定端口上的进程
kill -9 <pid>

其中pid是从第一个命令获得的进程ID。

答案 2 :(得分:3)

       netstat -tln | tail -n +3 | awk '{ print $4 }'  

这个显示tcp侦听端点的绑定地址。所有其他端点都是免费的; 此外,如果在Unix上并且您不是root用户,则无法绑定到“特权”端口号(端口号低于1024)

更详细地解释:

netstat -tln - 所有侦听tcp端口

tail -n +3 - netstat标题的剪切

awk'{print $ 4}' - 打印由[ip]组成的第四列:[port]

对于一般情况,你仍然需要关心切断所有不相关的接口; 如果IP地址不是网络汽车/网络接口的特定IP,则监听地址0.0.0.0正在侦听所有网卡。

答案 3 :(得分:3)

作为脚本的一部分,您可能希望使用以下内容:

resp=`netstat -tunl | grep ":80 "`
if [ -z "$resp" ]; then
    echo "80 Port is free"
else
    echo "80 Port is not free"
fi

答案 4 :(得分:2)

这可以使用nc命令来实现,如下所示:

# nc -z IP PORT

如果端口已在使用中,则返回TRUE,否则返回FALSE(即,当前未在监听)。

我不建议使用lsofnetstat方法,因为它首先尝试扫描所有正在运行的PID以获取所有有界端口:

# time lsof -i:8888
real    0m1.194s
user    0m0.137s
sys 0m1.056s```

# time nc -z 127.0.0.1 8888
real    0m0.014s
user    0m0.011s
sys 0m0.004s

此处8888是未使用的端口。在以上示例中,nc命令的速度提高了约85倍。

例如1:

$ nc -z 127.0.0.1 80 && echo "IN USE" || echo "FREE"
IN USE

$ nc -z 127.0.0.1 81 && echo "IN USE" || echo "FREE"
FREE

例如2:

如果您尝试使用远程IP,则最好在指定时间内未接受连接的情况下将超时添加到自动退出中。

$ nc -w 2 -z 216.58.196.174 81

它的Google IP未使用,因此尝试2秒后将超时。

答案 5 :(得分:1)

这是您需要杀死的命令

netstat -tulpno | grep ':80'

答案 6 :(得分:0)

以下带有输出的命令 表示端口已打开,而没有输出的表示未打开

 sudo fuser -i 80/tcp

您可以使用以下命令终止监听过程:

sudo fuser -k 80/tcp