服务端口的查看和释放

监控一个服务端口

有三种方法

  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
    
    

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值