繁体   English   中英

在文件系统上区分文件

[英]Distinguishing file on the filesystem

我正在尝试通过以下要求来区分文件系统上的文件(假设所有文件都在同一文件系统内):

  1. 如果将文件A重命名为文件B,则应该看起来相同
  2. 如果文件A被删除然后创建,那么它应该看起来与其他文件不同

由于我假设所有文件都在同一文件系统中,因此我倾向于使用inode_number 但这并不满足要点2. 其实:

root@spc:~/test# touch test
root@spc:~/test# ls -li
total 0
2098203 -rw-r--r-- 1 root root 0 Jan 15 14:55 test
root@spc:~/test# rm test
root@spc:~/test# touch test
root@spc:~/test# ls -li
total 0
2098203 -rw-r--r-- 1 root root 0 Jan 15 14:55 test

因此,两个不同的文件似乎具有相同的inode编号。 有没有办法针对linux/ext4做到这一点? 也许我们可以使用某些文件系统特定的api来存储一些meta uid

las,这是不可能的,因为:

  1. 对于在用户控制下的所有数据/元数据(包括扩展属性等),可以将其值/内容设置为与“原始”文件完全相同的值。

  2. 对于inode号,它取决于内核中文件系统的支持,其中许多(FS)回收inode号。

您可以设置扩展文件系统属性(在支持的情况下,即在与选项user_xattr一起安装时使用ext4):

#include <sys/types.h>
#include <attr/xattr.h>

int main (void) {
    setxattr("test", "user.fileguid", "someuniqueguid", 15, 0);
}

然后读回去

char uuid[100];
int len = getxattr("test", "user.fileguid", uuid, sizeof(uuid), 0);

如果仅应由特权进程修改此属性,则可以使用security名称空间代替user (即,属性名称security.fileguid )。 在这种情况下,文件所有者本身无法自行修改属性。 如果不使用user名称空间,则甚至不需要安装选项user_xattr

但是,创建文件后不会立即设置这些属性。 但是,使用工具访问文件时(即尚未设置guid时),在第一次设置随机guid应该就足够了。

这些文件属性与索引节点一起保存,因此重命名文件或(硬链接)将保留这些属性。 但是,不会删除并重新创建它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM