自动修复文件权限的脚本怎么写

wen 实用脚本 2

本文目录导读:

自动修复文件权限的脚本怎么写

  1. 基础版本 - 修复目录和文件权限
  2. 高级版本 - 包含多种修复选项
  3. Web应用专用版本
  4. 使用示例
  5. 注意事项

我来提供一个自动修复文件权限的Shell脚本,适用于Linux系统:

基础版本 - 修复目录和文件权限

#!/bin/bash
# 自动修复文件权限脚本
# 用法: ./fix_permissions.sh [目标目录]
# 设置目标目录,默认为当前目录
TARGET_DIR="${1:-.}"
# 检查目标目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
    echo "错误: 目录 '$TARGET_DIR' 不存在"
    exit 1
fi
echo "开始修复权限: $TARGET_DIR"
# 修复目录权限: 755 (rwxr-xr-x)
find "$TARGET_DIR" -type d -exec chmod 755 {} \;
echo "✓ 目录权限已修复为 755"
# 修复文件权限: 644 (rw-r--r--)
find "$TARGET_DIR" -type f -exec chmod 644 {} \;
echo "✓ 文件权限已修复为 644"
echo "权限修复完成!"

高级版本 - 包含多种修复选项

#!/bin/bash
# 自动修复文件权限脚本 - 高级版
# 功能: 修复目录、文件、脚本、配置文件等的权限
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 默认配置
TARGET_DIR="${1:-.}"
OWNER="${2:-$(whoami)}"
GROUP="${3:-$(id -gn)}"
# 显示帮助信息
show_help() {
    echo "用法: $0 [目标目录] [所有者] [组]"
    echo ""
    echo "选项:"
    echo "  -h, --help     显示帮助信息"
    echo "  -v, --verbose  详细输出模式"
    echo ""
    echo "示例:"
    echo "  $0                         修复当前目录"
    echo "  $0 /var/www               修复 /var/www 目录"
    echo "  $0 /home/user/www user www 修复目录并设置所有者"
    exit 0
}
# 处理参数
VERBOSE=0
while [[ $# -gt 0 ]]; do
    case $1 in
        -h|--help)
            show_help
            ;;
        -v|--verbose)
            VERBOSE=1
            shift
            ;;
        *)
            if [ -z "$TARGET_DIR" ] || [ "$TARGET_DIR" = "." ]; then
                TARGET_DIR=$1
            elif [ -z "$OWNER" ]; then
                OWNER=$1
            elif [ -z "$GROUP" ]; then
                GROUP=$1
            fi
            shift
            ;;
    esac
done
# 检查目录
if [ ! -d "$TARGET_DIR" ]; then
    echo -e "${RED}错误: 目录 '$TARGET_DIR' 不存在${NC}"
    exit 1
fi
echo -e "${YELLOW}开始修复权限:${NC} $TARGET_DIR"
echo -e "${YELLOW}所有者:${NC} $OWNER:$GROUP"
echo "----------------------------------------"
# 进度显示函数
progress() {
    if [ $VERBOSE -eq 1 ]; then
        echo -e "${GREEN}$1${NC}"
    fi
}
# 1. 修复目录权限为 755
echo -n "修复目录权限... "
find "$TARGET_DIR" -type d -exec chmod 755 {} \; 2>/dev/null
progress "✓ 目录权限已设置为 755 (rwxr-xr-x)"
# 2. 修复普通文件权限为 644
echo -n "修复文件权限... "
find "$TARGET_DIR" -type f ! -name "*.sh" ! -name "*.pl" ! -name "*.py" ! -name "*.rb" \
    ! -name "*.exe" ! -name "*.bin" -exec chmod 644 {} \; 2>/dev/null
progress "✓ 文件权限已设置为 644 (rw-r--r--)"
# 3. 修复脚本文件权限为 755
echo -n "修复脚本文件权限... "
find "$TARGET_DIR" -type f \( -name "*.sh" -o -name "*.pl" -o -name "*.py" \
    -o -name "*.rb" -o -name "*.exe" -o -name "*.bin" \) -exec chmod 755 {} \; 2>/dev/null
progress "✓ 脚本文件权限已设置为 755 (rwxr-xr-x)"
# 4. 修复配置文件权限为 640
echo -n "修复配置文件权限... "
find "$TARGET_DIR" -type f \( -name "*.conf" -o -name "*.cfg" -o -name "*.ini" \
    -o -name "*.config" \) -exec chmod 640 {} \; 2>/dev/null
progress "✓ 配置文件权限已设置为 640 (rw-r-----)"
# 5. 修复密钥文件权限为 600
echo -n "修复密钥文件权限... "
find "$TARGET_DIR" -type f \( -name "*.key" -o -name "*.pem" -o -name "*.cert" \
    -o -name "id_rsa" -o -name "id_dsa" \) -exec chmod 600 {} \; 2>/dev/null
progress "✓ 密钥文件权限已设置为 600 (rw-------)"
# 6. 设置所有者
if [ -n "$OWNER" ] && [ -n "$GROUP" ]; then
    echo -n "设置文件所有者... "
    chown -R "$OWNER:$GROUP" "$TARGET_DIR" 2>/dev/null
    if [ $? -eq 0 ]; then
        progress "✓ 所有者已设置为 $OWNER:$GROUP"
    else
        echo -e "${RED}✗ 设置所有者失败(需要root权限)${NC}"
    fi
fi
echo "----------------------------------------"
echo -e "${GREEN}权限修复完成!${NC}"
# 显示修复统计
echo ""
echo "文件权限统计:"
DIR_COUNT=$(find "$TARGET_DIR" -type d | wc -l)
FILE_COUNT=$(find "$TARGET_DIR" -type f | wc -l)
echo "  目录数: $DIR_COUNT"
echo "  文件数: $FILE_COUNT"

Web应用专用版本

#!/bin/bash
# Web应用文件权限修复脚本
# 适用于 Laravel, WordPress, Drupal 等PHP应用
APP_DIR="${1:-/var/www/html}"
if [ ! -d "$APP_DIR" ]; then
    echo "错误: 目录不存在"
    exit 1
fi
# Web服务器用户
WEB_USER="www-data"  # Ubuntu/Debian
# WEB_USER="nginx"   # CentOS/RHEL
# WEB_USER="apache"  # 其他
echo "修复Web应用权限: $APP_DIR"
# 1. 目录权限
find "$APP_DIR" -type d -exec chmod 755 {} \;
echo "目录权限: 755"
# 2. 文件权限
find "$APP_DIR" -type f -exec chmod 644 {} \;
echo "文件权限: 644"
# 3. 可写目录(上传、缓存、日志等)
if [ -d "$APP_DIR/storage" ]; then
    chmod -R 775 "$APP_DIR/storage"
    echo "Storage目录: 775 (可写)"
fi
if [ -d "$APP_DIR/bootstrap/cache" ]; then
    chmod -R 775 "$APP_DIR/bootstrap/cache"
    echo "Cache目录: 775 (可写)"
fi
if [ -d "$APP_DIR/wp-content/uploads" ]; then
    chmod -R 775 "$APP_DIR/wp-content/uploads"
    echo "Uploads目录: 775 (可写)"
fi
# 4. 设置所有权
chown -R "$WEB_USER:$WEB_USER" "$APP_DIR"
echo "所有者: $WEB_USER"
echo "修复完成!"

使用示例

# 1. 保存脚本
chmod +x fix_permissions.sh
# 2. 基本使用 - 修复当前目录
./fix_permissions.sh
# 3. 修复指定目录
./fix_permissions.sh /var/www/myapp
# 4. 高级版本 - 带详细输出
./fix_permissions.sh -v /home/user/projects
# 5. 指定所有者和组
./fix_permissions.sh /var/www/www user www-data
# 6. Web应用专用
./fix_permissions_web.sh /var/www/html
# 7. 使用crontab定期执行
# crontab -e
# 每天凌晨3点修复
# 0 3 * * * /path/to/fix_permissions.sh /var/www/html

注意事项

  1. 备份重要数据:在执行权限修复前,建议备份重要文件
  2. 测试环境先行:先在测试环境验证脚本
  3. 权限要求:某些操作需要root权限
  4. 特殊文件:注意保留特殊文件的原始权限设置
  5. 安全考虑:不要过度开放权限,遵循最小权限原则

这个脚本可以根据你的具体需求进行调整,比如添加更多文件类型、修改默认权限设置等。

抱歉,评论功能暂时关闭!