shell-检查服务端口的监听状态

该博客介绍了一个Linux脚本,用于检查系统中指定或所有服务的监听端口和进程信息。通过定义一个关联数组`server_port`来存储服务名和对应的端口号,然后使用`ss`命令结合`awk`进行过滤和格式化输出,展示进程号、进程名称和IP:端口。脚本还提供了一个彩色输出函数`echo_color`,以增强终端显示效果。当不传入参数时,脚本会列出所有配置的服务的监听状态;反之,将检查指定服务的监听情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 检查并打印出本机处于监听状态的 服务名 监听端口 进程号
# 定义一个关联数组
declare -A server_port

# 添加值,格式:
# server_port[服务名]=端口
# 服务名称可以自定义,主要用于查询时,方便传递参数,端口需要是程序实际的监听端口
server_port[nginx]=8080
server_port[mysql]=3306
server_port[redis]=7001
server_port[some-a]=8762
server_port[some-b]=8888

echo_color() {
# 输入彩色文字
# 使用方法:
# 输出红色的 hello
#  echo_color red hello

    declare -A col_arr
    local col_arr=(
        [red]="\033[31m"
        [green]="\033[32m"
        [yellow]="\033[33m"
        [blue]="\033[34m"
        [purple]="\033[37m"
    )
    end="\033[0m"
    echo -e "${col_arr[$1]} $2 $end"
}

# 删除表头
echo "" |awk 'BEGIN {printf "%-5s %-15s %-s\n", "进程号","进程名称","IP:端口"}'

# 如果没有传递参数,就检查数组中的所有服务的监听情况
if  [ -z $1 ];then
        n=0
        for name in ${!server_port[@]}
        do
            # 每次循环 n 的值加 1
            ((n++))
           # ss -ntalp |grep ${server_port[${name}]}|awk -v name=${name} -F '[:= ,]+' '{printf "%-8s %-12s %-s\n", $13,$6,name}'
            ss -ntalp |grep ${server_port[${name}]}|awk '{print $NF,$4}'| awk -v name=${name} -F '[=, ]+' '{printf "%-8s %-18s %s\n", $3,name, $NF}'
            # 每 5 行内容输出一个空行
            if (( n % 5  == 0 ));then
                echo
            fi
        done
        echo "当前处于监听状态的服务共: $(echo_color red $(ss -ntalp |wc -l)) 个"
else
    # 输入参数了,就校验输入的参数是否在数组的 key 中
    for name in ${!server_port[@]}
    do
        if [ "${1}" == "${name}"  ];then
           # 匹配上,就定义一个零时变量用于后续进行判断
           server=${1}
           break
        fi
    done
    if [ ! -z "${server}" ];then
        # server 变量不为空,说明输出的参数可以匹配,就检查当前的服务是否监听
        ss -ntalp |grep ${server_port[${1}]}|awk '{print $NF,$4}'| awk -v name=${1} -F '[=, ]+' '{printf "%-8s %-18s %s\n", $3,name, $NF}'
    else
        # 不匹配,打印出所有配置好的服务名称,也就是数组所有的 key
        echo "输入有误,可以用的值是:"
        echo ${!server_port[@]}
    fi
fi
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shark_西瓜甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值