文件系统扩展属性操作(setfattr, getfattr)

最近研究文件系统的扩展属性,在特殊情况下可以实现令人想象不到的效果,现在还没有搞太明白,先记录
几条命令,有时间再深入研究。
attr -s status -V "In Progress" test.txt
Attribute "status" set to a 11 byte value for test.txt:
status

getfattr test.txt
# file: test.txt
user.status

getfattr -n user.status test.txt
# file: test.txt
user.status="In Progress"

如果出现“Operation not supported”错误,要注意两个事情:
1) 文件系统的挂载选项是否包括user_xattr选项,可以用mount命令来查看,比如
/dev/cciss/c0d0p2 on / type ext3 (rw)
/dev/cciss/c0d0p1 on /boot type ext3 (rw)
/dev/sda3 on /data01 type ext3 (rw)
/dev/sdb on /data02 type ext3 (rw,user_xattr)
比较诡异的事情是,/, /data01虽然没有user_xattr选项,但是可以使用setfattr,而/data02去掉
user_xattr选项的话就报“Operation not supported”。因此必须要增加该选项,在/etc/fstab表中格式如下:
LABEL=/ / ext3 defaults 1 1
LABEL=/data01 /data01 ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
/dev/sdb /data02 ext3 defaults,user_xattr 1 2
这里区别是/, data01,/boot是安装操作系统时自动生成的,/data02是后来格式化挂载的,不知道其中到底是什么区别。
2)即使使用了user_xattr的选项,照样也会出现这个错误,比如
# setfattr -n "test" -v bigfs f1000
setfattr: f1000: Operation not supported
这里的错误原因是,name 一定是要以 user. 开头项目 (为namespace,一般称呼为命名空间),比如:
# setfattr -n "user.test" -v bigfs f1000

ACL Extended Attribute 新增与检视

setfacl 
程序使用的方式如下:

   setfattr -n name [-v value] pathname...  (新增标注)

   setfattr -x name pathname...      
(取消标注)

 

其中 -n 表示属性名称,-v 后面接属性的储存内容。 -x 表示删除该属性数据。

假设目前已经建立了 file.txt 档案,操作 setfacl 使用如下:

   setfattr -n user.author -v "kenduest" file.txt
   setfattr -n user.desc -v "test only file" file.txt


要注意的是,name 一定是要以 user. 开头项目 (namespace,一般称呼为命名空间),要不然执行期会出现 operation not supported 错误。

getfacl 
程序使用的方式如下:

   getfattr -n name pathname...

其中 -n 表示属性名称,表示取出该属性的数据内容。若是都没指定参数只有接文件名,会列出所有设定上去的属性名称列表。

执行如下命令可以取出属性的纪录内容:

   getfattr -n user.author file.txt
   getfattr -n user.desc file.txt


程序执行结果分别显示输出如下:

   # file: file.txt
   user.author="kenduest"

   # file: file.txt
   user.desc="test only file"


可以发现到刚刚设定的属性数据已经可以正确检视了。

Extended Attribute
其他事宜

 POSIX ACL 权限的一些问题等,并不是所有的程序都支持 Extended Attribute,所以可能程序于存取读写后可能会遗失这类信息纪录,尤其是常使用的 GNU tar 程序就尚未正式纳入该支持,所以在档案目录备份上还需要另外处理细节问题。

若是 Linux Distribution 对于 POSIX ACL Extended Attribute已经整合完备的话,常见的档案目录管理工具应该都会正确支持。而至于 GNU tar 程序问题,到是可以另外安装 star 程序来解决。

你可能感兴趣的:(linux,File,user,ext,扩展,byte)