xattr和chattr之间的区别


9

什么是关系之间的差异xattrchattr?我想知道当我chattr在Linux中设置属性时,Linux内核和inode元数据内部发生了什么。


昨天我在一个相关问题上写了很长的答案,这可能会有所帮助-unix.stackexchange.com/questions/118840/…。请注意,该attr命令适用于XFS文件系统,等效的文件系统独立命令是setfattr
Graeme 2014年

Answers:


13

在Linux上由lsattr/ 处理的属性chattr,其中一些属性可以由相当多的文件系统存储(ext2 / 3/4,reiserfs,JFS,OCFS2,btrfs,XFS,nilfs2,hfsplus ...),甚至可以通过CIFS查询/ SMB(带有POSIX扩展名时)是标志。仅比可以打开或关闭以禁用或启用属性的位(如不可变存档 ...)。它们的存储方式是特定于文件系统的,但通常作为inode中的16/32/64位记录。

在Linux本机文件系统(ext2 / 3/4,btrfs ...)上可以找到标志的完整列表,尽管并非所有标志都适用于所有FS,对于其他非本机FS,Linux会尝试将它们映射到等效文件相应文件系统中的功能。例如,OSX在HFS +文件系统上存储的simmutable标志被映射到Linux中相应的不可变标志chattr。几乎没有文档说明什么文件系统支持什么标志。通常,读取内核源代码是唯一的选择。

另一方面,在Linux 上setfattrattrLinux上设置的扩展属性存储的不仅仅是标志。它们也附加到文件,并且是键/值对,可以是(字节和值)字节的任意数组(尽管在某些文件系统上大小受限制)。

密钥可以是例如:system.posix_acl_accessuser.rsync.%stat。该system命名空间保留给系统(你不会有改变POSIX的ACL setfattr,但多与setfacl,POSIX的ACL只是碰巧被存储为至少某些文件系统的扩展属性),而user命名空间可以通过应用程序使用(这里rsync使用它作为--fake-super选项,以在您不是超级用户时存储有关所有权或权限的信息。

同样,它们的存储方式是特定于文件系统的。有关更多信息,请参见WikiPedia 。


难道lsattr/ chattr非工作的ext文件系统?如果不是,您将如何ext在Linux的非系统上更改标志?另外,attr手册页说,这是对XFS写入(即使它为我的作品上ext4)。昨天我实际上花了很长时间研究这个问题,很难获得好的信息。请参阅-unix.stackexchange.com/questions/118840/…–
Graeme,

@Graeme,这些问题的答案都在我的答案中。lsattr/chattr用于文件标志。并非所有文件系统都支持所有标志,例如,其中某些标志(例如压缩)不适用于ext4,但适用于btrfs。
斯特凡Chazelas

如果您有兴趣,我编写了一个脚本来在一些文件系统上测试这些标志,并将结果放在上面链接的答案上。我没有成功设置/读取其中的任何一个reiserfs
Graeme

-1

一切都已存储。inode当您更改文件时,的确可以更改其inode.for脚本,您有一个不错的命令:

stat --format=%a yourfile

您可以使用%variable并返回有用的inode

但是你的答案:

xattr在MacOS和chattrLinux机器上。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.