文件的元数据

文件的元数据

2025 南京大学《操作系统原理》
文件的元数据

文件:操作系统中的对象

对象就有属性

  • ls -l 就可以查看对象的属性
$ ls -l example.txt
-rw-r--r-- 1     alice staff 1024 Mar 10 12:34 example.txt
mode       link  owner group size modified     name

元数据

  • Type: d (directory), l (link), p (pipe), c (char), b (block)
  • Mode: rwx (user, group, other)
    • 例子:0o755 = rwx (111) r-x (101) r-x (101)
  • Links: 引用计数 (硬链接,包括目录)
2025 南京大学《操作系统原理》
文件的元数据

更多的元数据

Extended Attributes (xattr)

ssize_t fgetxattr(int fd, const char *name,
                  void value[.size], size_t size);
int fsetxattr(int fd, const char *name,
              const void value[.size], size_t size,
              int flags);
  • 每个文件可以维护一个任意的 key-value dictionary
    • 例子:macOS 的 com.apple.metadata 会保存每个互联网下载文件的 url
2025 南京大学《操作系统原理》
文件的元数据

“好用不火” 的操作系统特性

我们可以用它做很多事!

  • 文件系统的向量索引:vectorfs
    • vfs search cat ~/Photos/ | ag --summary
    • 这不比 iPhone 的 Photo Search 好用多了?

致命的缺陷

  • 这是后加的特性
    • 不是所有的文件系统都支持
  • 兼容性奇差
    • cp 文件时,xattrs 就会丢失,需要 cp --preserve=xattr
    • 期待革命时刻
2025 南京大学《操作系统原理》
文件的元数据

Access Control List (访问控制列表)

比 user, group, other 更精细的访问控制

  • 格式
    • [d:]<u | g | m | o>:name:perms
  • 用法
    • setfacl -m u:jyy:--- file
    • getfacl file
    • 通过 xattr system.posix_acl_access 实现
      • 我怎么知道的?
  • (Access Control 专门用一次课讲)
2025 南京大学《操作系统原理》