该死的端口占用,教你用 Shell 脚本一键干掉它

2644 篇文章 26 订阅
2361 篇文章 14 订阅

1. 前言

在 Web 开发中,经常会遇到「端口被占用」的场景

常规解决方案是:

使用 lsof -i 命令查询占用端口的进程 PID

利用 kill -9 PID 干掉目标进程

虽然只有 2 步,我也觉得很繁琐,即:既要记住命令,又要输入两次

本篇文章将编写 Shell 脚本,来实现一键干掉端口占用

2. 实现

相比 Python,Shell 脚本常用于处理偏操作系统底层的业务,简单、开发效率高

以 Mac OSX 为例,在本地创建一个 .sh 文件,实现步骤如下:

2-1 定义端口号及过滤内容参数

将要处理的端口号及命令行过滤内容参数化,然后在 Shell 脚本中赋值给两个变量

$1

执行脚本的第一个参数,即:端口号

$2

执行脚本的第二个参数,即:过滤进程命令内容

# 要干掉的端口号
port_be_kill=$1

# 过滤内容
filter_content=$2

2-2 获取端口占用进程返回值

使用端口号组成 lsof -i 命令,执行这条命令,将返回值赋值给变量 ip_status

# 获取Shell返回值
ip_cmd='lsof -i tcp:'$port_be_kill

echo "获取端口号对应的进程命令:"$ip_cmd
echo "过滤命令字符串为:"$filter_content

# 执行命令
ip_status=`$ip_cmd`

注意:ip_status 数据类型为字符串

2-3 转为数组

由于字符串不便于 PID 过滤,我们需要将上面的 ip_status 变量按「空格」分割成一个数组

# 以空格来分隔,转为一个数组变量
array=(${ip_status// / })

2-4 遍历数组,过滤 PID

首先,遍历上面的数组,提取每一个元素

然后,过滤出所有类型为 number、并且上一个值包含过滤内容的数据

# 判断数据的类型
function check(){
    local a="$1"
    printf "%d" "$a" &>/dev/null && echo "integer" && return
    printf "%d" "$(echo $a|sed 's/^[+-]\?0\+//')" &>/dev/null && echo "integer" && return
    printf "%f" "$a" &>/dev/null && echo "number" && return
    [ ${#a} -eq 1 ] && echo "char" && return
    echo "string"
}

最后,使用 kill -9 PID 命令处理对应的进程

# 遍历数组
for i in "${!array[@]}"; do
    # 注意:赋值等号=前后不能有空格
    item="${array[i]}"

    # 注意:过滤十六进制字符串
    # 先转为字符串,然后判断是否以0x开头
    # echo $item
    if [[ $item != 0x* ]]
    then
        # 非十六进制数据,即:PID
        if [ $(check $item) = "integer" ]
        then
            # 判断上一个元素是否包含关键字
            # 命令行是否包含关键字
            item_pre="${array[i-1]}"
            # echo $item_pre
            # echo $filter_content
            if [[ $item_pre =~ $filter_content ]]
            then
                # echo $item
                # 调用kill-9 pid命令干掉进程
                kill_cmd="kill -9 "$item
                echo $kill_cmd
                # 执行命令,干掉进程
                $kill_cmd
            fi
        fi
    fi  
done

2-5 设置 Alias

为了一键运行 Shell 脚本,我们使用 Alias 给命令设置一个别名

修改「.bash_profile」文件,将 Shell 脚本文件的完整路径及执行命令写入到一个自定义的函数中

# vim .bash_profile
# alias定义
kill_port() {
  cd /Users/xingag/Desktop/work
  ./kill_port_with_args.sh $1 $2
}
alias kp=kill_port

2-6 实战一下

使用 source .bash_profile 命令刷新配置文件,让 Alias 配置立即生效

假如现在 8000 被占用,我们只需要打开终端输入「kp 8000 python」命令即可以快速干掉目标进程

运行截图如下:

在这里插入图片描述

4. 最后

需要指出的是,Linux 下需要预先安装 lsof 命令,以 CentOS 为例

# Centos安装lsof
yum install lsof

如果是 Windows,处理端口占用的 Shell 脚本不一样;它需要使用 netstat/tasklist/taskkill 命令去改写

另外,PC 端执行 Shell 脚本建议使用 Git Bash

# Win处理端口占用
# 1、打开cmd终端
cmd

# 2、查找端口占用的进程及PID
netstat -aon|findstr PORT

# 3、根据PID查询进程名称
tasklist|findstr PID

# 4、使用taskkill命令或在任务管理器中关掉进程

如果今天的分享对你有帮助的话,请毫不犹豫:关注、分享、点赞、在看、收藏呀~


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 安装 Oracle 数据库需要准备一些软件和配置,并且会涉及到一些系统设置,因此不能简单地写一个脚本一键安装。下面是一些基本步骤,但是注意,这只是一个概述,安装过程可能比这更复杂。 1. 准备安装所需的软件和配置,包括 Oracle 数据库软件安装包、Oracle 的环境变量配置文件、安装所需的系统库文件等。 2. 在系统上创建一个Oracle用户和组,并设置相应的权限. 3. 配置系统内核参数,使其满足 Oracle 数据库的安装需求 4. 安装 Oracle 数据库软件,并进行初始化配置 5. 创建数据库并进行相应的配置。 6. 启动数据库并进行测试 7. 根据实际情况添加相应的脚本,例如开机自启动,设置监控等 注意,以上步骤只是大致的描述,还需要根据实际环境进行调整,并且实际安装过程中还需要考虑很多细节问题。 ### 回答2: 编写一个shell脚本一键安装Oracle数据库的过程是比较复杂的,下面是一个简单的示例: ```bash #!/bin/bash # 检查是否为root用户 if [[ $EUID -ne 0 ]]; then echo "使用root用户执行此脚本。" exit 1 fi # 设定Oracle安装相关参数 ORACLE_VERSION="XX.X.XX" ORACLE_EDITION="enterprise" ORACLE_INSTALL_DIR="/opt/oracle" ORACLE_SID="ORCL" # 下载Oracle安装文件 wget -P /tmp "http://www.oracle.com/xxx/xxx/xxx" # 解压缩安装文件 unzip /tmp/oracle_installer.zip -d /tmp # 运行Oracle自动安装脚本 /tmp/oracle_installer/install.sh -s RESPONSE_FILE=/tmp/oracle_installer/response_file.rsp # 运行Oracle配置助手 $ORACLE_INSTALL_DIR/oraInventory/orainstRoot.sh $ORACLE_INSTALL_DIR/product/$ORACLE_VERSION/dbhome_1/root.sh # 配置Oracle环境变量 echo "export ORACLE_HOME=$ORACLE_INSTALL_DIR/product/$ORACLE_VERSION/dbhome_1" >> /etc/profile echo "export ORACLE_SID=$ORACLE_SID" >> /etc/profile echo "export PATH=$ORACLE_HOME/bin:$PATH" >> /etc/profile source /etc/profile echo "Oracle数据库安装完成。" ``` 注意,以上脚本只是一个示例,实际使用时需要根据Oracle安装文件的不同版本进行相应的修改。此外,需要提供一个包含Oracle安装参数的响应文件(response_file.rsp),其中包括数据库文件的位置、用户密码和其他安装选项。 ### 回答3: 编写一个Shell脚本实现一键安装Oracle数据库的步骤如下: 1. 首脚本需要检测操作系统的类型和版本,以确定所需的Oracle数据库安装程序和补丁; 2. 下载并解压数据库安装程序和补丁文件,可以使用wget或curl命令从Oracle官方网站获取; 3. 创建一个安装响应文件(Response File),其中包含数据库安装的配置选项; 4. 修改响应文件中的参数,根据实际需求配置数据库的安装路径、端口、数据库名等信息; 5. 执行安装程序并使用安装响应文件作为配置的输入参数; 6. 等待安装程序完成数据库的安装和配置; 7. 配置Oracle环境变量,将ORACLE_HOME、PATH和LD_LIBRARY_PATH添加到系统环境变量中; 8. 启动Oracle数据库实例,并检查是否成功启动; 9. 验证数据库的连接,可以使用sqlplus命令连接数据库并执行一些简单的查询语句; 10. 如果一切正常,则输出安装成功的提示信息; 11. 清理临时文件和安装程序。 编写这样一个一键安装脚本需要考虑到安装过程中的错误处理和异常情况处理,例如空间不足、权限不足、依赖软件未安装等。在脚本中可以加入合理的判断和处理逻辑,保证安装过程的稳定性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值