20

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

  1. 的输出grep 80 /etc/services是:
http  80/tcp  www www-http   #World Wide web Http
http  80/udp  www www-http   #Hypertext transfer protocol
  1. netstat -an | grep 80 | more

它提供了一些 IP,其中之一是

IP:80 TIME_WAIT

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

4

9 回答 9

17
sudo netstat -anp | grep ':80 '

那应该给你 pid 和持有端口 80 的进程的名称

于 2017-09-18T06:58:56.803 回答
12

这可以使用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

它的谷歌IP没有被使用,所以它会在尝试2秒后超时。

于 2018-12-24T13:40:52.703 回答
6
netstat -tln | tail -n +3 | awk '{ print $4 }'  

这个显示 TCP 监听端点的绑定地址。所有其他端点都是免费的;此外,如果在 Unix 上并且您不是 root,那么您不能绑定到“特权”端口号(端口号低于 1024)。

更详细地解释:

  • netstat -tln - 所有监听 tcp 端口

  • tail -n +3 - 切断 netstat 命令的头部

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

对于一般情况,您仍然需要注意删除所有不相关的接口;监听地址 0.0.0.0 正在监听所有网卡,如果有 IP 地址,则这是网卡/网络接口的特定 IP。

于 2013-12-05T10:16:48.753 回答
5

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

resp=`netstat -tunl | grep ":80 "`
if [ -z "$resp" ]; then
    echo "80 Port is free"
else
    echo "80 Port is not free"
fi
于 2017-09-18T06:15:07.477 回答
4

尝试通过管道将 lsof 导入 grep 并搜索端口号:

lsof|grep <port>

如果没有显示,则表示该端口未在使用中

您可以使用终止特定端口上的进程

kill -9 <pid>

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

于 2012-12-22T09:59:17.493 回答
1
#!/bin/bash
#this function will exist from bash script if any of the port in argument list is in used 
function seek_port()  {
for i in $@
do
 echo $i
 netstat -nat | grep LISTEN | grep -E "\b:$i\b"
 if [ $? -eq 0 ]
 then
   echo "TCP port $i opened"
   exit 0
 fi
done
}
#calling function
seek_port 80 443 
于 2022-01-07T04:46:15.397 回答
1

这是您需要杀死的命令

netstat -tulpno | grep ':80'
于 2018-07-25T10:21:13.560 回答
0

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

 sudo fuser -i 80/tcp

您可以使用以下命令终止侦听进程:

sudo fuser -k 80/tcp
于 2020-07-01T14:03:55.500 回答
0
grep  '443' /etc/httpd/conf.d/*
于 2021-12-20T12:43:04.787 回答