linux文件中扩展信息,Linux文件扩展属性以及从内核中获得文件扩展属性

扩展属性(EA)就是以名称-值对形式将任意元数据与文件i节点关联起来的技术。EA可以用于实现访问列表和文件能力,还可以利用EA去记录文件的版本号、与文件的MIME类型/字符集有关的信息等,反正想干嘛就干嘛吧。

EA的命名格式为namespace.name。其中namespace用来把EA从功能上划分为截然不同的几大类,而name则用来在既定命名空间内唯一标示某个EA。

Linux定义了4中namespace:user、trusted、system和security。

user EA:在文件权限检查的制约下由非特权级进程操控。

trusted EA:也可由用户进程“驱使”,与user EA相似。区别在于,要操纵trusted EA,进程必须具有特权(CAP_SYS_ADMIN)。

system EA:供内核使用,将系统对象与一文件关联。目前仅支持访问控制列表。

security EA:作用有二:其一,用来存储服务于操作系统安全模块的文件安全标签;其二,将可执行文件与能力关联起来。

kvm@ubuntu:~$ touch filetest

kvm@ubuntu:~$ setfattr -n user.x -v "The past is not dead." filetest

kvm@ubuntu:~$ setfattr -n user.y -v "In fact,it's not even past." filetest

kvm@ubuntu:~$ getfattr -n user.x filetest

# file: filetest

user.x="The past is not dead."

kvm@ubuntu:~$ getfattr -d filetest

# file: filetest

user.x="The past is not dead."

user.y="In fact,it's not even past."

kvm@ubuntu:~$ setfattr -n user.x filetest //设置EA的值为一个空字符串

kvm@ubuntu:~$ getfattr -d filetest

# file: filetest

user.x

user.y="In fact,it's not even past."

kvm@ubuntu:~$ setfattr -x user.y filetest //删除一个EA

kvm@ubuntu:~$ getfattr -d filetest

# file: filetest

user.x

应用层的函数就不说了,下面简单介绍一下在内核层中获取文件的EA。一小段测试代码如下,主要是通过inode结构中操作getxattr来得到,当然之前需要得到dentry。

static int hello_init()

{

struct file *f;

struct inode *node;

struct dentry *dent;

int rc;

char in[100];

printk(KERN_ALERT "Hello, world\n");

printk(KERN_ALERT "name:%s\n",current->comm);

f = filp_open("/home/kvm/tfile",O_RDONLY,0);

dent = f->f_path.dentry;

node = dent->d_inode;

if (node->i_op->getxattr == NULL)

{

printk("inode's getxattr is null!\n");

return 0;

}

rc = node->i_op->getxattr(dent, "user.x", in, 100);

if (rc < 0)

return 0;

printk("the user.x is:%s\n",in);

return 0;

}

输出为:

the user.x is:The past is not dead.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值