实用脚本能批量高CIFS吗?

wen 实用脚本 70

本文目录导读:

实用脚本能批量高CIFS吗?

  1. 批量挂载多个Windows共享(SMB/CIFS)到Linux
  2. 批量卸载所有已挂载的CIFS共享
  3. 批量从CIFS共享复制大量文件(带重试与日志)
  4. 批量修改CIFS挂载选项(将现有挂载改为只读等)
  5. 注意事项(重要)
  6. 如果“高CIFS”指的不是这些...

我理解您的问题可能是关于批量处理 CIFS(Common Internet File System) 相关的操作,例如批量挂载、卸载、复制文件或修改权限等。

需要提醒您:“批量高CIFS”可能不是标准术语,如果您指的是 “批量搞CIFS”(如批量操作CIFS共享)或 “批量搞CSF”(某些安全策略格式),请确认具体方向。

以下提供几个常见且实用的批量处理CIFS的Shell脚本方案,您可以根据需求选择:

批量挂载多个Windows共享(SMB/CIFS)到Linux

如果有一堆共享文件夹要挂载到系统,可以用脚本批量处理。

脚本示例:batch_mount_cifs.sh

#!/bin/bash
# 定义共享列表:格式为 "//server/share 本地挂载点"
SHARES=(
    "//192.168.1.10/data /mnt/data"
    "//192.168.1.10/backup /mnt/backup"
    "//192.168.1.20/docs /mnt/docs"
)
# Windows认证信息(建议使用凭据文件,避免明文密码!)
USERNAME="your_username"
PASSWORD="your_password"
DOMAIN="WORKGROUP" # 或域名称
# 循环处理
for share in "${SHARES[@]}"; do
    # 提取服务器路径和挂载点
    set -- $share
    server_path=$1
    mount_point=$2
    # 创建挂载点目录(如果不存在)
    [ ! -d "$mount_point" ] && mkdir -p "$mount_point"
    # 尝试挂载
    echo "挂载 $server_path 到 $mount_point ..."
    sudo mount -t cifs "$server_path" "$mount_point" \
        -o username="$USERNAME",password="$PASSWORD",domain="$DOMAIN",uid=$(id -u),gid=$(id -g),iocharset=utf8
    if [ $? -eq 0 ]; then
        echo "成功挂载 $server_path"
    else
        echo "挂载失败: $server_path"
    fi
done

批量卸载所有已挂载的CIFS共享

#!/bin/bash
# 查找所有CIFS类型挂载点并卸载
mount | grep "type cifs" | awk '{print $3}' | while read -r mntpoint; do
    echo "正在卸载: $mntpoint"
    sudo umount "$mntpoint"
    if [ $? -eq 0 ]; then
        echo "已卸载: $mntpoint"
    else
        echo "卸载失败 (可能正忙): $mntpoint"
    fi
done

批量从CIFS共享复制大量文件(带重试与日志)

适用于需要从多个CIFS共享复制特定模式的文件。

#!/bin/bash
# 从多个远程目录复制日志文件到本地
REMOTE_SHARES=(
    "/mnt/server1/logs"
    "/mnt/server2/logs"
    "/mnt/server3/logs"
)
LOCAL_DEST="/backup/logs"
PATTERN="*.log*"
mkdir -p "$LOCAL_DEST"
for share in "${REMOTE_SHARES[@]}"; do
    if [ -d "$share" ]; then
        echo "从 $share 复制日志..."
        # 使用rsync而非cp,支持断点续传和增量复制
        rsync -avh --progress "$share/$PATTERN" "$LOCAL_DEST/"
    else
        echo "警告: $share 未挂载,跳过"
    fi
done

批量修改CIFS挂载选项(将现有挂载改为只读等)

#!/bin/bash
# 将已挂载的所有CIFS共享重新挂载为只读
mount | grep "type cifs" | awk '{print $3}' | while read -r mnt; do
    echo "重新挂载 $mnt 为只读..."
    sudo mount -o remount,ro "$mnt"
done

注意事项(重要)

  1. 凭据安全:生产环境切勿直接在脚本中写密码!应使用 credentials=/path/to/.smbcredentials 文件:

    # /root/.smbcredentials
    username=your_user
    password=your_password
    domain=WORKGROUP

    然后挂载选项改为:credential=/root/.smbcredentials

  2. 依赖软件:确保已安装 cifs-utils

    sudo apt install cifs-utils   # Debian/Ubuntu
    sudo yum install cifs-utils   # CentOS/RHEL
  3. 网络连通性:批量执行时,建议先测试网络连通性(如 pingsmbclient -L)。

  4. 错误处理:如果某个共享失败,脚本默认继续执行下一个,可按需添加 set -e 使脚本在第一个错误时退出。


高CIFS”指的不是这些...

请补充说明您的具体需求场景,

  • 是想批量压缩/解压CIFS上的文件?(gzip + find
  • 还是批量调整共享权限?(使用 smbcacls 工具)
  • 或者是其他领域(如安全扫描、配置审计)中的“高”?

提供更多上下文,我可以为您提供更精确的脚本解决方案。

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