概述

一个 ACL 由一系列 ACL 记录(简称ACE)组成,其中每条记录都针对单个用户或用户组定义了对文件的访问权限。
ACL记录,每条 ACE 都由3部分组成:

  • 标记类型:表示该记录作用于一个用户、组,还是其他类别的用户。该值为一系列ACL_开头的常量
  • 标记限定符(可选项)标识特定的用户或组(亦即,某个用户ID或组ID)
  • 权限集合:本字段包含所授予的权限信息

Linux系统是以系统扩展属性来实现ACL的。


- 阅读剩余部分 -

概述

EA可用于实现访问列表和文件能力。EA 需要有底层文件系统的支持。

EA 命名空间

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

可供 namespace 使用的值有4个:

  • user
  • trusted
  • system
  • security

通过shell 创建并查看 EA

在shell中,可执行 setfattr(1)getfattr(1)命令来设置和查看文件的 EA。

- 阅读剩余部分 -

获取文件信息:stat()

利用系统调用stat()lstat()以及fstat,可获取与文件有关的信息,其中大部分提取自文件i节点

#include <sys/stat.h>

int stat(const char *pathname, struct stat *statbuf);
int lstat(const char *pathname, struct stat *statbuf);
int fstat(int fd, struct stat *statbuf);
                                        All return 0 on success, or -1 on error

- 阅读剩余部分 -

设备专用文件

设备专用文件与系统的某个设备相对应。在内核中,每种设备类型都有与之相对应的设备驱动程序,用来处理设备的所有I/O请求。如前面所讲,每个驱动程序所提供的接口一致,即通用I/O模型。
某些设备是实际存在的,比如鼠标、磁盘。而另一些设备则是虚拟的,亦即并不存在相应硬件,但内核会(通过设备驱动程序)提供一种抽象设备,其所携带API与真实设备无异。
可将设备划分为以下两种类型:

  • 字符型设备基于每个字符来处理数据。终端和键盘都属于字符型设备
  • 块设备则每次处理一块数据。块的大小取决于设备类型,但通常为512字节的倍数。磁盘等设备属于块设备


- 阅读剩余部分 -

文件I/O的内核缓冲:缓冲区高速缓存

read()write()系统调用在操作磁盘文件时不会直接发起磁盘访问,而是仅仅在用户空间缓冲区与内核缓冲区高速缓存之间复制数据。
Linux内核对缓冲区高速缓存对大小没有固定上限。内核会分配尽可能多的缓冲区高速缓存页,而仅受限于两个因素:可用的物理内存总量;以及出于其他目的对物理内存的需求。

缓冲区大小对I/O系统调用性能的影响

如果与文件发生大量的数据传输,通过采用大块空间缓冲数据,以及执行更少的系统调用,可以极大地提高I/O性能。


- 阅读剩余部分 -