本文目录导读:

我来提供一个自动修复文件权限的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
注意事项
- 备份重要数据:在执行权限修复前,建议备份重要文件
- 测试环境先行:先在测试环境验证脚本
- 权限要求:某些操作需要root权限
- 特殊文件:注意保留特殊文件的原始权限设置
- 安全考虑:不要过度开放权限,遵循最小权限原则
这个脚本可以根据你的具体需求进行调整,比如添加更多文件类型、修改默认权限设置等。