当前位置: 首页 > article >正文

服务端口的查看和释放

监控一个服务端口

有三种方法

  1. 通过systemctl service 查看服务启动状态

  2. lsof 查看端口是否存在

  3. 查看进程是否存在

  4. 测试端口是否有响应 这里使用telnet协议,一般默认安装了,在这个目录下

    oot@hcss-ecs-c2b8:~# 
    root@hcss-ecs-c2b8:~# which telnet
    /usr/bin/telnet
    # 这里我们取件单测试了一下当前服务器的22端口和23端口
    root@hcss-ecs-c2b8:~# telnet 127.0.0.1 22
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1
    Invalid SSH identification string.
    Connection closed by foreign host.
    root@hcss-ecs-c2b8:~# telnet 127.0.0.1 23
    Trying 127.0.0.1...
    telnet: Unable to connect to remote host: Connection refused
    root@hcss-ecs-c2b8:~# 
    
    

    mktemp filename.XXX命令的作用是创建一个filename的文件其后缀最少有3个大写的X,临时文件创建后X变成对应的随机数.

    root@hcss-ecs-c2b8:/var/test# vim port_status.sh
    
    #!/bin/bash
    #监控一个服务端口
    
    port_status () {
    temp_file=`mktemp port_status.XXX`
    #1.判断telnet是否安装
    [ ! -x /usr/bin/telnet ]&&echo"telnet:net found command"&& exit 1
    #2.测试端口 $1 ip $2 port
    ( telnet $1 $2 <<EOF
    quit # 这里一定要换行
    EOF
     ) &>$temp_file
    # 判定分析文件中的内容是否包含^符号
    if egrep "\^]" $temp_file  &>/var/test/null;then
    echo "$1 $2 is open"
    else
    echo "$1 $2 is close"
    fi
    
    rm -f $temp_file
    
    }
    port_status $1 $2
    :wq
    # 执行一下这个脚本
    root@hcss-ecs-c2b8:/var/test# ./port_status.sh 127.0.0.1 22
    127.0.0.1 22 is open
    
    

    这里我们通过telnet 协议以及脚本可以简单判断一个服务端口的状态

    结合之前的释放端口的脚本,我们便可以先查看服务是否在运行以及对应端口是多少,对其先测试状态,在决定是否要关闭服务释放端口

    结束一个进程,kill + PID

    kill 956 # 结束进程号为956的进程  
    kill 956 957 # 结束多个进程  
    kill -9 7291 # 强制结束进程  
    
     5. 学到这里,我想到了再之前的开发中涉及到,当我们需要启动一个http服务器时,这时可能我们需要的端口号会被占用,这时我们不得不先用 `lsof -t -i:8081`找到这个端口号对应的pid有哪些,在使用kill命令将对应pid的进程结束掉
    
    # 检查输入参数
    if [ "$#" -ne 1 ]; then
            echo "用法: $0 <端口号>"
            exit 1
    fi
    Port=$1
    
    # 获取对应端口的pid列表
    
    PidList=$(lsof -t -i:$Port)
    
    if [ -z "$PidList" ];then
            echo "没有找到'$Port' 对应的进程pid"
            exit 1
    fi
    
    # 用循环去结束对应进程
    
    for Pid in "$PidList"
    do
            Res=$(kill -9 "$Pid")
            if [ $Res -eq 0 ];then
                    echo "已结束'$Pid'进程."
            else
                    echo "无法结束进程'$Pid'."
            fi
    done
    
    

    这个脚本执行之后,我们的目标端口就被释放了,就可以运行我们需要的服务程序.


http://www.kler.cn/news/341274.html

相关文章:

  • CIME2025深圳国际热管理材料与设备展览会(宝安新馆|2025年6月25-27日)
  • charAt,chartCodeAt,codePointAt,fromCodePoint,fromCharCode
  • mac本地VSCode配置LeetCode
  • 处理“navicat premium 2003 - 无法在 192.168.10.140 上连接到 MySQL 服务器(10060“未知错误“)”的问题:
  • 2024年华为OD机试真题-空栈压数-Python-OD统一考试(E卷)
  • Java中的JDBC操作详解、JDBC工具类的编写以及DBUtils工具包的使用
  • Linux高阶——0928—Github数据上传markdown语言
  • Jedis多线程环境报错:redis Could not get a resource from the pool 的主要原因及解决办法。
  • HyperWorks基于几何投影的网格变形
  • Laravel Filament 如何配置多语言支持
  • HalconDotNet实现分水岭图像分割算法详解
  • Leetcode 下一个排列
  • contact form 7设置方法与详细步骤
  • 网页前端开发之Javascript入门篇(9/9):对象
  • 自动化测试 | alert处理
  • 【深度学习总结】热力图-Grad-CAM使用
  • [持续更新]程序员每天会阅读哪些技术网站(带链接)来提升自己?
  • 谁能跟我比操作系统?
  • Python | Leetcode Python题解之第459题重复的子字符串
  • Nacos-Feign-Gateway-SpringCloud微服务