收起左侧

团队文件加入相册/docker/音乐等

1
回复
96
查看
[ 复制链接 ]

1

主题

0

回帖

0

牛值

江湖小虾

2026-3-11 17:51:56 显示全部楼层 阅读模式

#团队文件加入相册/docker/音乐等

希望团队能推进

貌似别的板块没权限发帖~~

目前我手工实现的方法

使用mount 挂载到个人目录下, 相册,docker 都可以挂载

个人加AI 的脚本自用,有需要可以参考(日志没细调,不会出现在日志app里),按需调整

!/bin/bash
# 飞牛团队目录自动挂载到所有用户目录脚本
# 适配飞牛用户目录:/vol1/[UID],团队目录:/vol2/@team/照片、/vol2/@team/音乐

# ===================== 配置项(可根据实际修改)=====================
# 团队源目录(含@符号,全程用双引号包裹)
TEAM_PHOTO="/vol2/@team/照片"
TEAM_MUSIC="/vol2/@team/音乐"
# 用户目录根路径
USER_ROOT="/vol1"
# 挂载目录名称
MOUNT_PHOTO="共享相册"
MOUNT_MUSIC="共享音乐"
# 源目录默认权限/归属(按实际:root:root 755)
SOURCE_OWNER="root:root"
SOURCE_PERM="755"
# 日志配置(飞牛系统日志格式)
SCRIPT_NAME="team_mount.sh"
LOG_LEVEL_INFO="INFO"
LOG_LEVEL_ERROR="ERROR"
# =================================================================

# 日志输出函数(符合飞牛系统日志格式:时间戳 主机名 脚本名[进程ID]: [级别] 内容)
log_to_syslog() {
    local LEVEL=$1
    local MESSAGE=$2
    # 输出到系统日志(兼容syslog和journald)
    logger -t "${SCRIPT_NAME}[$$]" "[$LEVEL] $MESSAGE"
    # 同时输出到控制台(可选)
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] [$LEVEL] $MESSAGE"
}

# 检查并创建团队源目录(不存在则自动创建,适配@路径)
check_and_create_source_dir() {
    local SRC_DIR="$1"
    if [ ! -d "$SRC_DIR" ]; then
        log_to_syslog $LOG_LEVEL_INFO "团队源目录 $SRC_DIR 不存在,正在自动创建..."
        mkdir -p "$SRC_DIR"
        chmod -R $SOURCE_PERM "$SRC_DIR"
        chown -R $SOURCE_OWNER "$SRC_DIR"
        log_to_syslog $LOG_LEVEL_INFO "成功创建目录:$SRC_DIR(权限:$SOURCE_OWNER $SOURCE_PERM)"
    fi
}

# 根据UID获取用户名(参数改为USER_UID,避免冲突)
get_username_by_uid() {
    local USER_UID=$1  # 改用USER_UID作为变量名
    USERNAME=$(grep -E "^[^:]+:[^:]+:$USER_UID:" /etc/passwd | awk -F ':' '{print $1}')
    if [ -z "$USERNAME" ]; then
        USERNAME="未知用户"
    fi
    echo "$USERNAME"
}

# 主执行逻辑
log_to_syslog $LOG_LEVEL_INFO "开始执行团队目录挂载脚本"

# 执行检查/创建逻辑
check_and_create_source_dir "$TEAM_PHOTO"
check_and_create_source_dir "$TEAM_MUSIC"

# 读取系统所有有效用户UID
USER_UIDS=$(ls -d "$USER_ROOT"/10* 2>/dev/null | grep -E "/10[0-9]+" | awk -F '/' '{print $3}')

# 检查是否有有效用户
if [ -z "$USER_UIDS" ]; then
    log_to_syslog $LOG_LEVEL_INFO "未找到匹配 $USER_ROOT/10* 的用户目录,挂载任务跳过"
    exit 0
fi

# 遍历每个用户UID(变量名改为USER_UID,避免与内置UID冲突)
for USER_UID in $USER_UIDS; do
    # 获取用户名
    USERNAME=$(get_username_by_uid $USER_UID)
    # 定义用户目录路径(全程加引号,避免特殊字符)
    USER_DIR="$USER_ROOT/$USER_UID"
    USER_PHOTO="$USER_DIR/$MOUNT_PHOTO"
    USER_MUSIC="$USER_DIR/$MOUNT_MUSIC"

    log_to_syslog $LOG_LEVEL_INFO "处理用户:$USERNAME (UID:$USER_UID)"

    # 1. 创建用户挂载目录(不存在则创建,路径加引号)
    if [ ! -d "$USER_PHOTO" ]; then
        mkdir -p "$USER_PHOTO"
        log_to_syslog $LOG_LEVEL_INFO "已创建目录:$USER_PHOTO"
    fi
    if [ ! -d "$USER_MUSIC" ]; then
        mkdir -p "$USER_MUSIC"
        log_to_syslog $LOG_LEVEL_INFO "已创建目录:$USER_MUSIC"
    fi

    # 2. 赋予该用户目录的专属权限(改用USER_UID)
    chown -R $USER_UID:100 "$USER_PHOTO" "$USER_MUSIC"
    chmod -R 700 "$USER_PHOTO" "$USER_MUSIC"  # 仅该用户可访问,保证隐私
    log_to_syslog $LOG_LEVEL_INFO "已赋权:用户$USERNAME (UID:$USER_UID) 拥有 $USER_PHOTO 和 $USER_MUSIC 权限"

    # 3. 先卸载已挂载的目录(避免重复挂载,路径加引号)
    umount "$USER_PHOTO" 2>/dev/null
    umount "$USER_MUSIC" 2>/dev/null

    # 4. 绑定挂载团队目录到用户目录(路径加引号,增加错误判断)
    # 挂载相册(关键:源/目标路径都加引号,适配@符号)
    if mount --bind "$TEAM_PHOTO" "$USER_PHOTO"; then
        log_to_syslog $LOG_LEVEL_INFO "已挂载:$TEAM_PHOTO → $USER_PHOTO"
    else
        log_to_syslog $LOG_LEVEL_ERROR "挂载失败:$TEAM_PHOTO → $USER_PHOTO,请检查源目录或权限!"
    fi
    # 挂载音乐
    if mount --bind "$TEAM_MUSIC" "$USER_MUSIC"; then
        log_to_syslog $LOG_LEVEL_INFO "已挂载:$TEAM_MUSIC → $USER_MUSIC"
    else
        log_to_syslog $LOG_LEVEL_ERROR "挂载失败:$TEAM_MUSIC → $USER_MUSIC,请检查源目录或权限!"
    fi
done

# 输出挂载结果
log_to_syslog $LOG_LEVEL_INFO "所有用户挂载完成!当前挂载状态:"
mount | grep -E "$MOUNT_PHOTO|$MOUNT_MUSIC" | while read -r line; do
    log_to_syslog $LOG_LEVEL_INFO "$line"
done

log_to_syslog $LOG_LEVEL_INFO "团队目录挂载脚本执行完毕"

收藏
送赞
分享

6

主题

1万

回帖

0

牛值

管理员

社区上线纪念勋章社区共建团荣誉勋章飞牛百度网盘玩家fnOS1.0上线纪念勋章

2026-3-12 10:59:41 显示全部楼层

感谢反馈,这个需求先记录下来,我们会根据评估结果推进

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则