安装 依赖程序 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