如何设置不可变文件属性

Posted

技术标签:

【中文标题】如何设置不可变文件属性【英文标题】:How to set immutable file attribute 【发布时间】:2019-08-20 14:56:34 【问题描述】:

如何使用 Go 为文件设置不可变属性?

我需要一个在文件上设置/取消设置此属性的函数,类似于chattr +i file

我发现了这个:IoctlSetInt

怎么用?

    file, err := os.Open("file")

    if err != nil 
        fmt.Printf("%s\n", err)
        return
    


    err = unix.IoctlSetInt(int(file.Fd()), unix.PERF_EVENT_IOC_MODIFY_ATTRIBUTES, unix.STATX_ATTR_IMMUTABLE)

    if err != nil 
        fmt.Printf("%s\n", err)
    

错误:inappropriate ioctl for device

解决方案

我在snapd's repo找到了一段代码。

【问题讨论】:

【参考方案1】:

我不确定你在这里使用了正确的 ioctl... 至少 chattr 和 Setting Immutable Flag using ioctl() in C 的解决方案使用 FS_IOC_SETFLAGS(你可以看到 chattr 使用 strace 做了什么)。您可以查看/usr/include/linux/fs.h,尤其是关于“Inode flags”的大评论,了解更多信息。

【讨论】:

在搜索FS_IOC_SETFLAGS 时,找到了解决方案,见上文。感谢您的想法:)

以上是关于如何设置不可变文件属性的主要内容,如果未能解决你的问题,请参考以下文章

更新深层不可变状态属性时,Redux 不更新组件

公司共享文件夹如何设置某个文件夹只读属性,不可更改复制删除等操作?

如何设置扩展文件属性?

如何使类属性不可变?

如何设置文件属性 7zS.sfx 自解压可执行文件

phpcms安装时设置文件属性