Golang中如何在Linux下挂载共享文件夹
Golang中如何在Linux下挂载共享文件夹 你好,如何在 Linux 下使用 syscall.Mount() 挂载共享文件夹?
致意
Phuoc
// 示例代码
func main() {
// 这里可以添加 syscall.Mount 的使用示例
}
您是否尝试挂载Samba(或微软)CIFS共享?
更多关于Golang中如何在Linux下挂载共享文件夹的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
是的,这是一个带有凭据的CIFS共享。
通过终端使用ssh命令可以正常工作:
sudo mount -t cifs //servername/TEST /mnt/TEST -o username=test,password=xxx,vers=3.0
但我想使用:
syscall.Mount(…)
我尝试参考这个链接(C++代码)中的方法,但没有成功。
在Linux中使用C++挂载网络驱动器
c++, c, linux, mount
有什么建议吗?
首先,我从未真正用Go语言实现过这个功能,请考虑到这一点。
通常,简单的解决方法是设置环境,使得在mount命令中无需提供凭据。(除了不方便之外,这种方式也不安全。)将用户名和密码存入文件,并确保文件设置了适当的权限。
文件内容大致如下:
username=用户名
password=密码
其中用户名是有权访问共享的用户名,密码是该用户的SMB密码。
然后在客户端的/etc/fstab中添加一项来挂载CIFS共享。内容大致如下:
//172.16.21.1/share1 /share1 cifs credentials=/home/jay/.smb_auth,uid=1000,gid=1000,iocharset=utf8 0 0
这类似于我在Linux系统上挂载局域网CIFS共享的方式。文件服务器的IP地址是172.16.21.1,名为“share1”的CIFS共享在客户端挂载为/share1。用户名和密码存储在/home/jay/.smb_auth中。我在此处还设置了挂载文件的UID和GID。
通用格式为:
//<server_ip_addr>/<cifs_share_name> <local_mount_point> cifs credentials=<pw_file>,uid=<UID>,gid=<GID>,iocharset=<charset> 0 0
之后,只需使用命令
sudo mount /share1
即可挂载共享。实际上,如果不希望客户端在系统启动时自动挂载共享,可能需要在挂载选项中添加noauto。或者,可以在启动时自动挂载,并(假设一切顺利)在Go程序启动前已经挂载好共享。
在启动时挂载CIFS共享并不总是顺利,因此在Go程序中,可能需要检查共享是否可用,并在必要时进行挂载。
在 Linux 下使用 syscall.Mount() 挂载共享文件夹(如 NFS 或 CIFS)时,需要正确指定文件系统类型、挂载选项和目标路径。以下是具体实现示例:
package main
import (
"fmt"
"syscall"
)
func main() {
source := "192.168.1.100:/shared" // NFS 共享路径
target := "/mnt/shared" // 本地挂载点
fstype := "nfs" // 文件系统类型
flags := 0 // 挂载标志
data := "" // 文件系统特定数据
err := syscall.Mount(source, target, fstype, uintptr(flags), data)
if err != nil {
fmt.Printf("挂载失败: %v\n", err)
return
}
fmt.Println("共享文件夹挂载成功")
}
对于 CIFS/SMB 共享文件夹,需要调整参数:
func mountCIFS() {
source := "//192.168.1.100/share" // CIFS 共享路径
target := "/mnt/cifs" // 本地挂载点
fstype := "cifs" // 文件系统类型
flags := 0 // 挂载标志
data := "username=user,password=pass" // 认证信息
err := syscall.Mount(source, target, fstype, uintptr(flags), data)
if err != nil {
fmt.Printf("CIFS 挂载失败: %v\n", err)
return
}
fmt.Println("CIFS 共享文件夹挂载成功")
}
关键参数说明:
source: 共享文件夹的网络路径target: 本地挂载点目录(需提前创建)fstype: 文件系统类型(nfs、cifs、smb3 等)flags: 挂载选项,如syscall.MS_RDONLY用于只读挂载data: 文件系统特定选项,如认证信息、挂载参数
卸载挂载点使用 syscall.Unmount():
err := syscall.Unmount("/mnt/shared", 0)
if err != nil {
fmt.Printf("卸载失败: %v\n", err)
}
注意:执行挂载操作通常需要 root 权限,确保程序以足够权限运行。

