我们常见的文件:mode、owner、类型、大小、修改时间。是file status,使用stat()系统调用和stat命令进行统计。
而file attributes是文件属性,是一个32位的flags。这个属性只存在于ext4等部分文件系统。
使用chattr命令,来设置文件属性。
chattr +-=[aAcCdDeFijmPsStTux] <path>
比较有用的属性:
a:只允许以append模式写
i:immutable,文件不能被修改:包括删除和重命名。
比如我们修改了一个系统配置文件,为了防止系统再次修改,可以:
cp /dev/null /etc/systemd/zram-generator.conf
chattr +i /etc/systemd/zram-generator.conf
清空zram配置,并且防止系统再次修改。这样可以永久禁止基于zram的swap。
使用lsattr命令,可以查看属性。
$ sudo chattr +i access.c
$ lsattr access.c
----i----------------- access.c
$ > access.c
-bash: access.c: Operation not permitted
file attributes使用ioctl的方式进行设置和读取:
ioctl(3, FS_IOC_GETFLAGS, [FS_IMMUTABLE_FL]) = 0
ioctl(3, FS_IOC_SETFLAGS, [0]) = -1 EPERM (Operation not permitted)
值得注意的是:
修改file attributes需要root权限。文件所有者也不能修改。