一、【说在前面】
玩Linux,基本大家都知道对于权限管理有 chmod 和 chown 用来更改文件的rwx权限和所有者,如果想要更加细化,则需要设置ACL。getfacl和setfacl就是用来设置ACL的。
其中getfacl是用来获取文件的acl信息的,setfacl则是用来设置的
ACL(Access Control Lists)是一种文件系统权限管理机制,允许对文件和目录的权限进行更加精细的控制。传统的 Unix 文件权限模型只允许对文件的所有者、所在组和其他用户设置权限,而 ACL 允许为任意用户或组设置特定的权限。
所以今天说一下 setfacl 命令和 getfacl 命令,这两个命令就是chmod chown的进阶版本。如果说后者是散修级别,那么 setfacl 命令和 getfacl 命令就是元婴级别。
二、【命令介绍】
setfacl [option] [acl_spec] filename
参数介绍
-m 或 --modify
用于修改文件或目录的 ACL。
语法:setfacl -m u:username:permission file
示例:setfacl -m u:bob:rw example.txt
-x 或 --remove
用于移除文件或目录的 ACL 条目。
语法:setfacl -x u:username file
示例:setfacl -x u:bob example.txt
-b 或 --remove-all
移除文件或目录的所有 ACL。
示例:setfacl -b example.txt
-k 或 --remove-default
移除文件或目录的默认 ACL。
示例:setfacl -k directory
-d 或 --default
用于设置目录的默认 ACL,默认 ACL 会被目录下的新文件和子目录继承。
语法:setfacl -d -m u:username:rw directory
示例:setfacl -d -m u:bob:rw exampledir
-n 或 --no-mask
在设置 ACL 时不修改掩码(mask)条目。
示例:setfacl -n -m u:bob:rw example.txt
-R 或 --recursive
递归设置目录及其子目录和文件的 ACL。
示例:setfacl -R -m u:bob:rw exampledir
-P 或 --physical
不跟随符号链接,只设置符号链接本身的 ACL。
-L 或 --logical
跟随符号链接,设置符号链接指向的文件的 ACL。
-v 或 --version
显示 setfacl 的版本信息。
-h 或 --help
显示帮助信息和用法。
三、【效果展示】
1. getfacl
getfacl example.txt
之后会显示
# file: example.txt
# owner: user
# group: group
user::rw-
user:bob:rw-
group::r--
mask::rw-
other::r--
2. 输入ls -l发生变化
ls -l example.txt
会显示在权限位有一个+
-rw-r--r--+ 1 user group 0 Jul 15 12:00 example.txt