00. 目录
01. 命令概述
获取文件访问控制列表
02. 命令格式
getfacl [选项] 文件 ...
- 1
03. 常用选项
-a, --access 仅显示文件访问控制列表
-d, --default 仅显示默认的访问控制列表
-c, --omit-header 不显示注释表头
-e, --all-effective 显示所有的有效权限
-E, --no-effective 显示无效权限
-s, --skip-base 跳过只有基条目(base entries)的文件
-R, --recursive 递归显示子目录
-L, --logical 逻辑遍历(跟随符号链接)
-P, --physical 物理遍历(不跟随符号链接)
-t, --tabular 使用制表符分隔的输出格式
-n, --numeric 显示数字的用户/组标识
-p, --absolute-names 不去除路径前的 '/' 符号
-v, --version 显示版本并退出
-h, --help 显示本帮助信息
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
04. 参考示例
4.1 获取文件访问控制列表
[root@itcast ~]# getfacl test
# file: test
# owner: deng
# group: itcast
# flags: -s-
user::rwx
user:tom:r-x
group::r-x
mask::r-x
other::r-x
default:user::rwx
default:user:itcast:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@itcast ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
4.2 仅显示文件访问控制列表
[root@itcast ~]# getfacl -a test
# file: test
# owner: deng
# group: itcast
# flags: -s-
user::rwx
user:tom:r-x
group::r-x
mask::r-x
other::r-x
[root@itcast ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
4.3 仅显示默认的访问控制列表
[root@itcast ~]# getfacl -d test
# file: test
# owner: deng
# group: itcast
# flags: -s-
user::rwx
user:itcast:rwx
group::r-x
mask::rwx
other::r-x
[root@itcast ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
4.4 不显示注释表头
[root@itcast ~]# getfacl -c test
user::rwx
user:tom:r-x
group::r-x
mask::r-x
other::r-x
default:user::rwx
default:user:itcast:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@itcast ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
4.5 显示所有的有效权限
[root@itcast ~]# getfacl -e test
# file: test
# owner: deng
# group: itcast
# flags: -s-
user::rwx
user:tom:r-x #effective:r-x
group::r-x #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:itcast:rwx #effective:rwx
default:group::r-x #effective:r-x
default:mask::rwx
default:other::r-x
[root@itcast ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
4.6 显示无效权限
[root@itcast ~]# getfacl -E test
# file: test
# owner: deng
# group: itcast
# flags: -s-
user::rwx
user:tom:r-x
group::r-x
mask::r-x
other::r-x
default:user::rwx
default:user:itcast:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@itcast ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
05. 附录
虚实映射解除函数LOS_ArchMmuUnmap
解除进程空间虚拟地址区间与物理地址区间的映射关系,其中参数包含MMU结构体、解除映射的虚拟地址和解除映射的数量count
,数量的单位是内存页数。 ⑴处函数OsGetPte1
用于获取指定虚拟地址对应的L1页表项数据。⑵处计算需要解除的无效映射的数量,后文再详细分析该函数。如果页表项映射类型为L1 Section,并且虚拟地址1MiB对齐,映射的数量超过256,则执行⑶解除映射Section,后文详细分析函数OsUnmapSection
。如果页表项映射类型为Page Table,则执行⑷先解除二级页表映射,然后尝试解除一级页表映射,涉及的2个函数后文详细分析。从虚拟地址开始的需要接触映射的内存页中,可能部分是L2映射,部分是L1映射。完成L2映射后,需要判断是否存在L1映射,如果存在也需要解除映射。⑹处函数使TLB失效,涉及些cp15寄存器和汇编,后续再分析。
STATUS_T LOS_ArchMmuUnmap(LosArchMmu *archMmu, VADDR_T vaddr, size_t count)
{
PTE_T l1Entry;
INT32 unmapped = 0;
UINT32 unmapCount = 0;
while (count > 0) {
⑴ l1Entry = OsGetPte1(archMmu->virtTtb, vaddr);
if (OsIsPte1Invalid(l1Entry)) {
⑵ unmapCount = OsUnmapL1Invalid(&vaddr, &count);
} else if (OsIsPte1Section(l1Entry)) {
if (MMU_DESCRIPTOR_IS_L1_SIZE_ALIGNED(vaddr) && count >= MMU_DESCRIPTOR_L2_NUMBERS_PER_L1) {
⑶ unmapCount = OsUnmapSection(archMmu, &vaddr, &count);
} else {
LOS_Panic("%s %d, unimplemented\n", __FUNCTION__, __LINE__);
}
} else if (OsIsPte1PageTable(l1Entry)) {
⑷ unmapCount = OsUnmapL2PTE(archMmu, vaddr, &count);
OsTryUnmapL1PTE(archMmu, vaddr, OsGetPte2Index(vaddr) + unmapCount,
MMU_DESCRIPTOR_L2_NUMBERS_PER_L1 - unmapCount);
⑸ vaddr += unmapCount << MMU_DESCRIPTOR_L2_SMALL_SHIFT;
} else {
LOS_Panic("%s %d, unimplemented\n", __FUNCTION__, __LINE__);
}
unmapped += unmapCount;
}
⑹ OsArmInvalidateTlbBarrier();
return unmapped;
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: