卸载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 "$@"
相关推荐
coding随想2 小时前
JavaScript Notifications API:告别alert弹窗,开启沉浸式用户体验革命!
开发语言·javascript·ux
码界奇点2 小时前
基于Python与GitHub Actions的正方教务成绩自动推送系统设计与实现
开发语言·python·车载系统·自动化·毕业设计·github·源代码管理
JienDa2 小时前
JienDa聊PHP:从Laravel到ThinkPHP的现代Web开发实践
前端·php·laravel
kaikaile19952 小时前
MATLAB计算卫星星下点轨迹
开发语言·算法·matlab
二狗哈3 小时前
Cesium快速入门15:图元Primitive创建图像物体
开发语言·javascript·3d·webgl·cesium·地图可视化
lljss20203 小时前
C# 定时器类实现1s定时器更新UI
开发语言·c#
白杨攻城狮3 小时前
C# 关于 barierr 心得
开发语言·c#
zhglhy3 小时前
Jaccard相似度算法原理及Java实现
java·开发语言·算法
catchadmin3 小时前
PHP 8.5 容器化实战指南
开发语言·php