跳到主要内容

将一个远程目录文件挂载到本地

需求

  1. 运行脚本后自动挂载需要的路径
  2. 脚本有鲁棒性,不会重复挂载,会进行路径检查。

使用

  1. 请创建文件:/home/${USER_NAME}/.config/smbcredentials.conf,权限为600
  2. 第一步里面写入如下内容:
username=用户名
password=你的密码
domain=域名随便写

最后脚本代码如下

#!/bin/bash

# 配置
SMB_SERVER="你的ip"
SMB_SHARE="被共享文件夹的名字,在网络邻居里看"
MOUNT_POINT="你要挂载到本地的哪里,比如/mnt/mynas"
USER_NAME="比如eric"
SMB_CREDS_PATH="/home/${USER_NAME}/.config/smbcredentials.conf"

# 必须用 root 运行
if [[ $EUID -ne 0 ]]; then
echo "请用 sudo 或 root 权限运行此脚本。"
exit 1
fi

# 检查挂载点是否存在,否则创建并赋予所有权
if [ ! -d "$MOUNT_POINT" ]; then
mkdir -p "$MOUNT_POINT"
chown "${USER_NAME}:${USER_NAME}" "$MOUNT_POINT"
echo "已创建挂载点并设置所有者:$MOUNT_POINT"
fi

# 检查是否已经挂载
if mountpoint -q "$MOUNT_POINT"; then
echo "已挂载,无需重复操作。"
exit 0
fi

# 获取用户的UID和GID
REAL_UID=$(id -u "$USER_NAME")
REAL_GID=$(id -g "$USER_NAME")

# 检查凭据文件
if [ ! -f "$SMB_CREDS_PATH" ]; then
echo "找不到凭据文件:$SMB_CREDS_PATH"
exit 1
fi

# 挂载
echo "正在挂载 //${SMB_SERVER}/${SMB_SHARE} 到 $MOUNT_POINT ..."
mount -t cifs -o vers=3.0,credentials="${SMB_CREDS_PATH}",uid=${REAL_UID},gid=${REAL_GID},iocharset=utf8 "//${SMB_SERVER}/${SMB_SHARE}" "$MOUNT_POINT"

if [ $? -eq 0 ]; then
echo "挂载成功:$MOUNT_POINT"
else
echo "挂载失败,请检查配置、凭据和网络连接。"
exit 1
fi