#!/bin/bash # 权限问题修复脚本 echo "=== 云盘后端权限修复工具 ===" # 检查当前用户 echo "当前用户: $(whoami)" echo "用户ID: $EUID" echo "主目录: $HOME" echo "当前目录: $(pwd)" # 1. 检查和创建.config目录 echo "" echo "1. 检查用户配置目录..." if [ ! -d "$HOME/.config" ]; then echo "创建 .config 目录..." mkdir -p "$HOME/.config" || { echo "错误: 无法创建 .config 目录" exit 1 } echo "✓ .config 目录创建成功" else echo "✓ .config 目录已存在" fi # 2. 检查和创建systemd用户目录 echo "" echo "2. 检查systemd用户目录..." SYSTEMD_USER_DIR="$HOME/.config/systemd/user" if [ ! -d "$SYSTEMD_USER_DIR" ]; then echo "创建systemd用户目录..." mkdir -p "$SYSTEMD_USER_DIR" || { echo "错误: 无法创建systemd用户目录" echo "尝试使用sudo创建..." sudo -u $(whoami) mkdir -p "$SYSTEMD_USER_DIR" || { echo "错误: 无法创建systemd用户目录,尝试使用临时目录" SYSTEMD_USER_DIR="/tmp/$(whoami)-systemd" mkdir -p "$SYSTEMD_USER_DIR" echo "使用临时目录: $SYSTEMD_USER_DIR" } } echo "✓ systemd用户目录创建成功: $SYSTEMD_USER_DIR" else echo "✓ systemd用户目录已存在: $SYSTEMD_USER_DIR" fi # 3. 检查目录权限 echo "" echo "3. 检查目录权限..." echo ".config 目录权限: $(ls -ld $HOME/.config | awk '{print $1,$3,$4}')" echo "systemd用户目录权限: $(ls -ld $SYSTEMD_USER_DIR | awk '{print $1,$3,$4}')" # 4. 测试写入权限 echo "" echo "4. 测试写入权限..." TEST_FILE="$SYSTEMD_USER_DIR/.test_write" if touch "$TEST_FILE" 2>/dev/null; then echo "✓ 写入权限正常" rm -f "$TEST_FILE" else echo "✗ 写入权限不足,尝试修复..." chmod 755 "$HOME/.config" 2>/dev/null chmod 755 "$SYSTEMD_USER_DIR" 2>/dev/null if touch "$TEST_FILE" 2>/dev/null; then echo "✓ 权限修复成功" rm -f "$TEST_FILE" else echo "✗ 权限修复失败" echo "可能的解决方案:" echo "1. 检查磁盘空间: df -h" echo "2. 检查用户配额: quota -u $(whoami)" echo "3. 检查文件系统权限: mount | grep home" echo "4. 联系系统管理员" exit 1 fi fi # 5. 检查systemd用户服务是否启用 echo "" echo "5. 检查systemd用户服务..." if systemctl --user list-units --type=service --state=running &>/dev/null; then echo "✓ systemd用户服务可用" else echo "⚠ systemd用户服务可能不可用" echo "尝试启用用户systemd服务..." # 对于某些系统,需要启用linger if command -v loginctl &> /dev/null; then if loginctl show-user $(whoami) | grep -q "Linger=no"; then echo "启用用户linger服务..." loginctl enable-linger $(whoami) || echo "无法启用linger,可能需要管理员权限" fi fi fi # 6. 创建测试服务文件 echo "" echo "6. 创建测试服务文件..." SERVICE_FILE="$SYSTEMD_USER_DIR/cloud-drive.service" cat > "$SERVICE_FILE" << EOF [Unit] Description=Cloud Drive Backend Service Documentation=https://github.com/your-repo/cloud-drive After=network.target [Service] Type=simple WorkingDirectory=$(pwd) ExecStart=$(pwd)/venv/bin/python $(pwd)/main.py Restart=always RestartSec=10 StandardOutput=journal StandardError=journal SyslogIdentifier=cloud-drive [Install] WantedBy=default.target EOF if [ -f "$SERVICE_FILE" ]; then echo "✓ 服务文件创建成功: $SERVICE_FILE" echo "文件权限: $(ls -l $SERVICE_FILE | awk '{print $1,$3,$4}')" else echo "✗ 服务文件创建失败" exit 1 fi # 7. 测试systemd命令 echo "" echo "7. 测试systemd命令..." if systemctl --user daemon-reload 2>/dev/null; then echo "✓ systemd用户服务重载成功" else echo "⚠ systemd用户服务重载失败" echo "错误信息: $(systemctl --user daemon-reload 2>&1)" fi echo "" echo "=== 权限修复完成 ===" echo "" echo "服务管理命令:" echo "重载服务: systemctl --user daemon-reload" echo "启用服务: systemctl --user enable cloud-drive" echo "启动服务: systemctl --user start cloud-drive" echo "查看状态: systemctl --user status cloud-drive" echo "查看日志: journalctl --user -u cloud-drive -f" echo "" echo "如果systemd命令不可用,请使用手动管理脚本:" echo "启动: ./start.sh" echo "停止: ./stop.sh" echo "状态: ./status.sh"