Linux检测端口 bash 脚本

安装 依赖程序 sudo apt  install lsof -y

#!/bin/bash
#netstat -lntp
tishitishitishi="如果你的系统拥有ROOT权限"
echo -e "${tishitishitishi} 把保存后的脚本 sudo lsof 替换成lsof也就是不需要sudo 
并且把包含$USER的行删掉"
echo "${tishitishitishi} 这一行 sudo  ${dockerduankou}/kill/PORT-DATA.log.sh 把sudo删掉"
echo -e "需要管理员权限,请输入开机密码 ${tishitishitishi}请忽略"
date +%Y年%m月%d日%H:%M:%S
#------------------------------------------------------
denden_d="======================================================"
dockerduankou="/tmp/docker-duankou4d6w4wq"
rm -rf ${dockerduankou}
rm -rf "$HOME/端口占用的程序.txt"
mkdir -p  ${dockerduankou}/kill
#################
# 输出检测端口日志
#################
#更具自己需求修改
PORT_0="1314  "
PORT_1="8085  "
PORT_2="888   "
PORT_3="8888  "
PORT_4="10012 "
PORT_5="37347 "
PORT_6="9000  "
PORT_7="9200  "
PORT_8="80    "
PORT_9="21013 "
duankouA="0"
#################
# 端口 81
#################
duankou0()
{
#应为一些端口是ROOT权限启动的,还有的是用户权限启动的,合并写在一起
sudo lsof -i :${PORT_0} |grep "root"  |awk '{print $2}' >> ${dockerduankou}/0.txt
sudo lsof -i :${PORT_0} |grep "$USER" |awk '{print $2}' >> ${dockerduankou}/0.txt
sudo lsof -i :${PORT_0} >> $HOME/端口占用的程序.txt
#0.txt是0行就是没有被占用
Duankou_LONG_0=$(cat ${dockerduankou}/0.txt | wc -l)
if [[ ! X${duankouA} = X${Duankou_LONG_0} ]];then
 echo -e "33[103;01;31m端口 ${PORT_0}已被占用33[0m" 
 
else
 echo -e "33[42;01;93m端口 ${PORT_0}未被占用33[0m" 
fi
}
duankou0
#################
# 端口 8085
#################
duankou1()
{
sudo lsof -i :${PORT_1} |grep "root"  |awk '{print $2}' >> ${dockerduankou}/1.txt
sudo lsof -i :${PORT_1} |grep "$USER" |awk '{print $2}' >> ${dockerduankou}/1.txt
sudo lsof -i :${PORT_1} >> $HOME/端口占用的程序.txt
Duankou_LONG_1=$(cat ${dockerduankou}/1.txt | wc -l)
if [[ ! X${duankouA} = X${Duankou_LONG_1} ]];then
 echo -e "33[103;01;31m端口 ${PORT_1}已被占用33[0m" 
 
else
 echo -e "33[42;01;93m端口 ${PORT_1}未被占用33[0m" 
fi
}
duankou1
#################
# 端口 888
#################
duankou2()
{
sudo lsof -i :${PORT_2} |grep "root"  |awk '{print $2}' >> ${dockerduankou}/2.txt
sudo lsof -i :${PORT_2} |grep "$USER" |awk '{print $2}' >> ${dockerduankou}/2.txt
sudo lsof -i :${PORT_2} >> $HOME/端口占用的程序.txt
Duankou_LONG_2=$(cat ${dockerduankou}/2.txt | wc -l)
if [[ ! X${duankouA} = X${Duankou_LONG_2} ]];then
 echo -e "33[103;01;31m端口 ${PORT_2}已被占用33[0m" 
 
else
 echo -e "33[42;01;93m端口 ${PORT_2}未被占用33[0m" 
fi
}
duankou2
#################
# 端口 8888
#################
duankou3()
{
sudo lsof -i :${PORT_3} |grep "root"  |awk '{print $2}' >> ${dockerduankou}/3.txt
sudo lsof -i :${PORT_3} |grep "$USER" |awk '{print $2}' >> ${dockerduankou}/3.txt
sudo lsof -i :${PORT_3} >> $HOME/端口占用的程序.txt
Duankou_LONG_3=$(cat ${dockerduankou}/3.txt | wc -l)
if [[ ! X${duankouA} = X${Duankou_LONG_3} ]];then
 echo -e "33[103;01;31m端口 ${PORT_3}已被占用33[0m" 
 
else
 echo -e "33[42;01;93m端口 ${PORT_3}未被占用33[0m" 
fi
}
duankou3
#################
# 端口 10012
#################
duankou4()
{
sudo lsof -i :${PORT_4} |grep "root"  |awk '{print $2}' >> ${dockerduankou}/4.txt
sudo lsof -i :${PORT_4} |grep "$USER" |awk '{print $2}' >> ${dockerduankou}/4.txt
sudo lsof -i :${PORT_4} >> $HOME/端口占用的程序.txt
Duankou_LONG_4=$(cat ${dockerduankou}/4.txt | wc -l)
if [[ ! X${duankouA} = X${Duankou_LONG_4} ]];then
 echo -e "33[103;01;31m端口 ${PORT_4}已被占用33[0m" 
 
else
 echo -e "33[42;01;93m端口 ${PORT_4}未被占用33[0m" 
fi
}
duankou4
#################
# 端口 37347
#################
duankou5()
{
sudo lsof -i :${PORT_5} |grep "root"  |awk '{print $2}' >> ${dockerduankou}/5.txt
sudo lsof -i :${PORT_5} |grep "$USER" |awk '{print $2}' >> ${dockerduankou}/5.txt
sudo lsof -i :${PORT_5} >> $HOME/端口占用的程序.txt
Duankou_LONG_5=$(cat ${dockerduankou}/5.txt | wc -l)
if [[ ! X${duankouA} = X${Duankou_LONG_5} ]];then
 echo -e "33[103;01;31m端口 ${PORT_5}已被占用33[0m" 
 
else
 echo -e "33[42;01;93m端口 ${PORT_5}未被占用33[0m" 
fi
}
duankou5
#################
# 端口 9000
#################
duankou6()
{
sudo lsof -i :${PORT_6} |grep "root"  |awk '{print $2}' >> ${dockerduankou}/6.txt
sudo lsof -i :${PORT_6} |grep "$USER" |awk '{print $2}' >> ${dockerduankou}/6.txt
sudo lsof -i :${PORT_6} >> $HOME/端口占用的程序.txt
Duankou_LONG_6=$(cat ${dockerduankou}/6.txt | wc -l)
if [[ ! X${duankouA} = X${Duankou_LONG_6} ]];then
 echo -e "33[103;01;31m端口 ${PORT_6}已被占用33[0m" 
 
else
 echo -e "33[42;01;93m端口 ${PORT_6}未被占用33[0m" 
fi
}
duankou6
#################
# 端口 9200
#################
duankou7()
{
sudo lsof -i :${PORT_7} |grep "root"  |awk '{print $2}' >> ${dockerduankou}/7.txt
sudo lsof -i :${PORT_7} |grep "$USER" |awk '{print $2}' >> ${dockerduankou}/7.txt
sudo lsof -i :${PORT_7} >> $HOME/端口占用的程序.txt
Duankou_LONG_7=$(cat ${dockerduankou}/7.txt | wc -l)
if [[ ! X${duankouA} = X${Duankou_LONG_7} ]];then
 echo -e "33[103;01;31m端口 ${PORT_7}已被占用33[0m" 
 
else
 echo -e "33[42;01;93m端口 ${PORT_7}未被占用33[0m" 
fi
}
duankou7
#################
# 端口 80
#################
duankou8()
{
sudo lsof -i :${PORT_8} |grep "root"  |awk '{print $2}' >> ${dockerduankou}/8.txt
sudo lsof -i :${PORT_8} |grep "$USER" |awk '{print $2}' >> ${dockerduankou}/8.txt
sudo lsof -i :${PORT_8} >> $HOME/端口占用的程序.txt
Duankou_LONG_8=$(cat ${dockerduankou}/8.txt | wc -l)
if [[ ! X${duankouA} = X${Duankou_LONG_8} ]];then
 echo -e "33[103;01;31m端口 ${PORT_8}已被占用33[0m" 
 
else
 echo -e "33[42;01;93m端口 ${PORT_8}未被占用33[0m" 
fi
}
duankou8
#################
# 端口 21013
#################
duankou9()
{
sudo lsof -i :${PORT_9} |grep "root"  |awk '{print $2}' >> ${dockerduankou}/9.txt
sudo lsof -i :${PORT_9} |grep "$USER" |awk '{print $2}' >> ${dockerduankou}/9.txt
sudo lsof -i :${PORT_9} >> $HOME/端口占用的程序.txt
Duankou_LONG_9=$(cat ${dockerduankou}/9.txt | wc -l)
if [[ ! X${duankouA} = X${Duankou_LONG_9} ]];then
 echo -e "33[103;01;31m端口 ${PORT_9}已被占用33[0m" 
 
else
 echo -e "33[42;01;93m端口 ${PORT_9}未被占用33[0m" 
fi
}
duankou9
####################
# 合并端口文件xx.txt
####################
cat ${dockerduankou}/0.txt >> ${dockerduankou}/PORT.log
cat ${dockerduankou}/1.txt >> ${dockerduankou}/PORT.log
cat ${dockerduankou}/2.txt >> ${dockerduankou}/PORT.log
cat ${dockerduankou}/3.txt >> ${dockerduankou}/PORT.log
cat ${dockerduankou}/4.txt >> ${dockerduankou}/PORT.log
cat ${dockerduankou}/5.txt >> ${dockerduankou}/PORT.log
cat ${dockerduankou}/6.txt >> ${dockerduankou}/PORT.log
cat ${dockerduankou}/7.txt >> ${dockerduankou}/PORT.log
cat ${dockerduankou}/8.txt >> ${dockerduankou}/PORT.log
cat ${dockerduankou}/9.txt >> ${dockerduankou}/PORT.log
#去除重复行和空行 应为有些系统没有用户只有系统用户ROOT 这个时候 $HOME 就是root
sort -k2n ${dockerduankou}/PORT.log | awk '{if ($0!=line) print;line=$0}' |awk NF > ${dockerduankou}/PORT-DATA.log
sed -e 's/^/kill -9 /' ${dockerduankou}/PORT-DATA.log > ${dockerduankou}/kill/PORT-DATA.log.sh
echo "$HOME/端口占用的程序.txt 如果是空文件就是没有占用的"
####################
# 杀死占用端口的程序
####################
echo "${denden_d}"
杀死占用端口的程序(){
echo "如果不想杀死占用端口的程序请按 ctrl + c 结束脚本运行"
tixing_A=$(echo -e "杀死占用端口的程序 --> 输入大写字母 Y 继续执行脚本!!!
>:")
while true ; do
read -p "${tixing_A}" var;
  if [ -z $var ];then
   echo "输入不能为空"
   elif [[ ! $var =~ ^[Y]+$ ]];then
   echo "输入的不是字母,请重新输入!"
   else
   chmod -R 755 ${dockerduankou}/kill/PORT-DATA.log.sh
   
   #当满足输入条件时,跳出所有循环
   break;
 fi
done
}
run_sh_wc=$(cat ${dockerduankou}/kill/PORT-DATA.log.sh | wc -l)
if [[ ! X${duankouA} = X${run_sh_wc} ]];then
 
   `杀死占用端口的程序` 
    sudo  ${dockerduankou}/kill/PORT-DATA.log.sh
    echo "OK占用端口已释放!!!"

else
 echo "端口检查通过!!!"
fi
sleep 1

CentOS Linux 注意这个没有提醒有的话直接干掉

使用方法 复制下面代码 保存 PORT-OK.sh 给可执行权限 chmod -R 755 PORT-OK.sh

使用 ./ PORT-OK.sh 空格 端口 比如 ./ PORT-OK.sh 8888 这个有安装宝塔的话默认是这个

#!/bin/bash
#netstat -lntp
if [ ! -f /root/PORTdata-log-i8520.lock ];then
   echo "正在安装脚本依赖"
   yum  -y  install  bash net-tools lsof
   echo "" > /root/PORTdata-log-i8520.lock
 else
   echo "OK依赖已安装"
fi
date +%Y年%m月%d日%H:%M:%S
#------------------------------------------------------
denden_d="======================================================"
dockerduankou="/tmp/docker-duankou4d6w4wq"
rm -rf ${dockerduankou}
mkdir -p  ${dockerduankou}/kill
#################
# 输出检测端口日志
#################
#端口
PORT_0=$1

duankouA="0"
#应为一些端口是ROOT权限启动的,还有的是用户权限启动的,合并写在一起
lsof -i :${PORT_0} |grep "root"  |awk '{print $2}' >> ${dockerduankou}/0.txt
lsof -i :${PORT_0} |grep "$USER" |awk '{print $2}' >> ${dockerduankou}/0.txt

#0.txt是0行就是没有被占用
Duankou_LONG_0=$(cat ${dockerduankou}/0.txt | wc -l)
if [[ ! X${duankouA} = X${Duankou_LONG_0} ]];then
 echo -e "33[103;01;31m端口 ${PORT_0} 已被占用33[0m" 
 
else
 echo -e "33[42;01;93m端口 ${PORT_0} 未被占用33[0m" 
fi

cat ${dockerduankou}/0.txt >> ${dockerduankou}/PORT.log
#去除重复行和空行 应为有些系统没有用户只有系统用户ROOT 这个时候 $HOME 就是root
sort -k2n ${dockerduankou}/PORT.log | awk '{if ($0!=line) print;line=$0}' |awk NF > ${dockerduankou}/PORT-DATA.log
sed -e 's/^/kill -9 /' ${dockerduankou}/PORT-DATA.log > ${dockerduankou}/kill/PORT-DATA.log.sh

####################
# 杀死占用端口的程序
####################
echo "${denden_d}"
chmod -R 755 ${dockerduankou}/kill/PORT-DATA.log.sh
run_sh_wc=$(cat ${dockerduankou}/kill/PORT-DATA.log.sh | wc -l)
if [[ ! X${duankouA} = X${run_sh_wc} ]];then

    bash ${dockerduankou}/kill/PORT-DATA.log.sh
    echo "OK占用端口已释放!!!"

else
 echo "端口检查通过!!!"
fi
sleep 1