卸载php的shell脚本

保存文件:uninstall_php7.sh

执行:chmod +x uninstall_php7.sh

执行:./uninstall_php7.sh

bash 复制代码
#!/bin/bash

# PHP 7.4.33自动化卸载脚本 for CentOS 7
# 日期:$(date +%Y-%m-%d)

set -e  # 遇到错误时退出脚本

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

log_step() {
    echo -e "${BLUE}[STEP]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

# 检查是否以root用户运行
check_root() {
    if [[ $EUID -ne 0 ]]; then
        log_error "此脚本必须以root用户运行"
        exit 1
    fi
}

# 配置参数(与安装脚本一致)
PHP_VERSION="7.4.33"
INSTALL_DIR="/usr/local/php7"
CONF_DIR="${INSTALL_DIR}/etc"
LOG_DIR="/var/log/php"
NGINX_HTML="/usr/share/nginx/html"
TMP_DIR="/tmp/php_build"
PHP_USER="www"
PHP_GROUP="www"

# 停止并禁用PHP-FPM服务
stop_php_fpm_service() {
    log_step "停止并禁用PHP-FPM服务..."
    
    # 停止服务
    if systemctl is-active --quiet php-fpm; then
        systemctl stop php-fpm
        log_info "PHP-FPM服务已停止"
    else
        log_info "PHP-FPM服务未运行"
    fi
    
    # 禁用开机自启
    if systemctl is-enabled --quiet php-fpm; then
        systemctl disable php-fpm
        log_info "PHP-FPM开机自启已禁用"
    else
        log_info "PHP-FPM开机自启已禁用"
    fi
    
    # 重新加载systemd
    systemctl daemon-reload
}

# 删除systemd服务文件
remove_systemd_service() {
    log_step "删除systemd服务文件..."
    
    # 删除服务文件
    if [ -f "/lib/systemd/system/php-fpm.service" ]; then
        rm -f /lib/systemd/system/php-fpm.service
        log_info "已删除 /lib/systemd/system/php-fpm.service"
    else
        log_info "服务文件不存在"
    fi
    
    # 重新加载systemd
    systemctl daemon-reload
}

# 删除PHP安装目录
remove_php_installation() {
    log_step "删除PHP安装目录..."
    
    if [ -d "${INSTALL_DIR}" ]; then
        rm -rf ${INSTALL_DIR}
        log_info "已删除安装目录: ${INSTALL_DIR}"
    else
        log_info "安装目录不存在: ${INSTALL_DIR}"
    fi
}

# 删除日志目录
remove_log_directory() {
    log_step "删除PHP日志目录..."
    
    if [ -d "${LOG_DIR}" ]; then
        rm -rf ${LOG_DIR}
        log_info "已删除日志目录: ${LOG_DIR}"
    else
        log_info "日志目录不存在: ${LOG_DIR}"
    fi
}

# 删除运行时目录
remove_runtime_directories() {
    log_step "删除PHP运行时目录..."
    
    # 删除PHP-FPM运行目录
    if [ -d "/var/run/php-fpm" ]; then
        rm -rf /var/run/php-fpm
        log_info "已删除运行目录: /var/run/php-fpm"
    else
        log_info "运行目录不存在: /var/run/php-fpm"
    fi
    
    # 删除PHP会话目录
    if [ -d "/var/lib/php" ]; then
        rm -rf /var/lib/php
        log_info "已删除会话目录: /var/lib/php"
    else
        log_info "会话目录不存在: /var/lib/php"
    fi
}

# 删除临时目录
remove_temp_directory() {
    log_step "删除临时目录..."
    
    if [ -d "${TMP_DIR}" ]; then
        rm -rf ${TMP_DIR}
        log_info "已删除临时目录: ${TMP_DIR}"
    else
        log_info "临时目录不存在: ${TMP_DIR}"
    fi
}

# 删除测试文件
remove_test_files() {
    log_step "删除测试文件..."
    
    # 删除phpinfo.php测试文件
    if [ -f "${NGINX_HTML}/phpinfo.php" ]; then
        rm -f ${NGINX_HTML}/phpinfo.php
        log_info "已删除测试文件: ${NGINX_HTML}/phpinfo.php"
    else
        log_info "测试文件不存在: ${NGINX_HTML}/phpinfo.php"
    fi
}

# 删除用户和组
remove_php_user_group() {
    log_step "删除PHP用户和组..."
    
    # 删除用户
    if id -u ${PHP_USER} >/dev/null 2>&1; then
        userdel ${PHP_USER}
        log_info "已删除用户: ${PHP_USER}"
    else
        log_info "用户不存在: ${PHP_USER}"
    fi
    
    # 删除组
    if getent group ${PHP_GROUP} >/dev/null 2>&1; then
        groupdel ${PHP_GROUP}
        log_info "已删除组: ${PHP_GROUP}"
    else
        log_info "组不存在: ${PHP_GROUP}"
    fi
}

# 删除环境配置文件
remove_environment_config() {
    log_step "删除环境配置文件..."
    
    # 删除profile.d中的PHP配置
    if [ -f "/etc/profile.d/php.sh" ]; then
        rm -f /etc/profile.d/php.sh
        log_info "已删除环境配置文件: /etc/profile.d/php.sh"
    else
        log_info "环境配置文件不存在: /etc/profile.d/php.sh"
    fi
}

# 删除软链接
remove_soft_links() {
    log_step "删除软链接..."
    
    # 删除PHP命令链接
    for cmd in php phpize php-config; do
        dst="/usr/bin/$cmd"
        if [ -L "$dst" ]; then
            rm -f "$dst"
            log_info "已删除软链接: $dst"
        fi
    done
    
    # 删除PHP-FPM链接
    if [ -L "/usr/sbin/php-fpm" ]; then
        rm -f /usr/sbin/php-fpm
        log_info "已删除软链接: /usr/sbin/php-fpm"
    fi
}

# 删除Composer
remove_composer() {
    log_step "删除Composer..."
    
    # 删除Composer可执行文件
    if [ -f "/usr/local/bin/composer" ]; then
        rm -f /usr/local/bin/composer
        log_info "已删除Composer: /usr/local/bin/composer"
    else
        log_info "Composer不存在: /usr/local/bin/composer"
    fi
}

# 清理系统配置
cleanup_system_config() {
    log_step "清理系统配置..."
    
    # 清理limits.conf中的配置
    if grep -q "${PHP_USER}" /etc/security/limits.conf; then
        sed -i "/${PHP_USER}/d" /etc/security/limits.conf
        log_info "已清理limits.conf中的PHP配置"
    else
        log_info "limits.conf中无PHP配置"
    fi
    
    # 清理sysctl.conf中的配置
    if grep -q "# PHP优化参数" /etc/sysctl.conf; then
        sed -i '/# PHP优化参数/,+6d' /etc/sysctl.conf
        # 应用内核参数
        sysctl -p 2>/dev/null || true
        log_info "已清理sysctl.conf中的PHP配置"
    else
        log_info "sysctl.conf中无PHP配置"
    fi
}

# 主函数
main() {
    log_step "开始卸载PHP ${PHP_VERSION}"
    
    echo -e "${YELLOW}警告: 此操作将完全删除PHP及其所有相关文件和配置!${NC}"
    echo -n "确认继续吗? (输入 'yes' 确认): "
    read confirmation
    
    if [ "$confirmation" != "yes" ]; then
        log_info "取消卸载操作"
        exit 0
    fi
    
    # 执行卸载步骤
    check_root
    stop_php_fpm_service
    remove_systemd_service
    remove_php_installation
    remove_log_directory
    remove_runtime_directories
    # remove_temp_directory
    remove_test_files
    remove_php_user_group
    remove_environment_config
    remove_soft_links
    remove_composer
    cleanup_system_config
    
    log_step "==================== PHP卸载完成 ===================="
    echo "PHP ${PHP_VERSION} 已成功卸载!"
    echo "以下项目已被删除:"
    echo "  - PHP安装目录: ${INSTALL_DIR}"
    echo "  - PHP日志目录: ${LOG_DIR}"
    echo "  - PHP运行时目录: /var/run/php-fpm, /var/lib/php"
    echo "  - PHP临时目录: ${TMP_DIR}"
    echo "  - PHP用户和组: ${PHP_USER}:${PHP_GROUP}"
    echo "  - systemd服务: php-fpm.service"
    echo "  - 环境配置: /etc/profile.d/php.sh"
    echo "  - 软链接: /usr/bin/php, /usr/bin/phpize, /usr/bin/php-config, /usr/sbin/php-fpm"
    echo "  - Composer: /usr/local/bin/composer"
    echo "  - 测试文件: ${NGINX_HTML}/phpinfo.php"
    echo ""
    echo "注意: 系统级别的依赖包未被删除,如需删除请手动处理"
    log_step "====================================================="
}

# 执行主函数
main "$@"
相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端