我们如何通过 Go 在 Linux 中将文件挂载为只读?

我想知道如何通过 Golang 在 Linux CentOS 7 服务器中将文件挂载为只读。我已经尝试过系统调用,但这不起作用,系统调用会挂载文件,但作为读写,我试图在数据中提供 ro 参数,但它仍然以读写方式挂载。这是我的代码:

syscall.Mount(src, dst, "auto", syscall.MS_BIND, "ro")

你可以看到我在数据中给出了ro参数,我也试图只给出rreadonly以及只读但它们都不起作用,当我编译 go 文件并执行它然后当我检查 /etc/ mtab 然后我得到这个输出:

cat /etc/mtab | grep "firewall"/dev/vda1 /root/firewall.txt ext4 rw,relatime,data=ordered,jqfmt=vfsv1,usrjquota=quota.user 0 0

在这里可以看到 firewall.txt 挂载为rw表示读写

我想将它安装为只读,任何人都可以帮助我如何在 Golang 中做到这一点?


白衣染霜花
浏览 114回答 2
2回答

MMMHUHU

我遇到了类似的问题,通过将 fstype 设置为bind并将标志设置为MS_REMOUNT MS_RDONLY和MS_BIND来修复它。您可以使用以下代码:syscall.Mount(source, destination, "bind", syscall.MS_REMOUNT|syscall.MS_RDONLY|syscall.MS_BIND, "")

子衿沉夜

只读模式由 syscall 标志定义,该标志MS_RDONLY也在syscall 包中定义。所以调用应该是:syscall.Mount(src, dst, "auto", syscall.MS_BIND | syscall.MS_RDONLY, "")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go