Linux 文件管理命令sum setfacl getfacl chacl

发布于:2024-05-08 ⋅ 阅读:(28) ⋅ 点赞:(0)

2.Linux 文件管理命令

2.58 sum:计算文件的校验和,以及文件占用的块数

  • 作用:sum 命令显示文件的校验和及文件块数。

  • 用法:sum [选项]…[文件]

    为每个指定的文件输出校验和及块计数。

  • 主要选项如下:

    命令 描述
    r 使用 BSD 加和算法,以 1KB 为一个块。
    -s,--sysv 使用 SystemV 加和算法,以 51 双字节为一个块。
    --help 显示此帮助信息并退出。
    --version 显示版本信息并退出。

如果没有指定文件,或者文件为“-”,则从标准输入读取。

案例练习

显示 hello.o 和 hello.s 文件中的校验和,以及 1024 字节块数目,请输入如下命令:

# sum hello.o hello.s 
31784 1 hello.o 
48706 1 hello.s

显示的第一个字段是校验和,第二个字段是 1024 字节块数目,第三个字段是文件名。

2.59 setfacl:设定文件访问控制列表

  • 作用:设定文件访问控制列表。

  • 用法:setfacl [-bkndRLP] { -m|-M|-x|-X … } file…

  • 主要选项如下:

    命令 描述
    -m,--modify=acl 更改文件的访问控制列表。
    -M,--modify-file=file 从文件读取访问控制列表条目并更改。
    -x,--remove=acl 根据文件中的访问控制列表移除条目。
    -X,--remove-file=file 从文件读取访问控制列表条目并删除。
    -b,--remove-all 删除所有扩展访问控制列表条目。
    -k,--remove-default 移除默认访问控制列表。
    --set=acl 设定替换当前的文件访问控制列表。
    --set-file=file 从文件中读取访问控制列表条目设定。
    --mask 重新计算有效权限掩码。
    -n,--no-mask 不重新计算有效权限掩码。
    -d,--default 应用到默认访问控制列表的操作。
    -R,--recursive 递归操作子目录。
    -L,--logical 依照系统逻辑,跟随符号链接。
    -P,--physical 依照自然逻辑,不跟随符号链接。
    --restore=file 恢复访问控制列表,和“getfacl-R”作用相反。
    --test 测试模式,并不真正修改访问控制列表属性。
    -v,--version 显示版本信息并退出。
    -h,--help 显示帮助信息。

案例练习

(1)修改文件的 acl 权限,添加一个用户权限。

# setfacl -m u:zhangy:rw- test

(2)添加一个组。

#setfacl -m g:zhangying:r-w test

2.60 getfacl:获取文件访问控制列表

  • 作用:获取文件访问控制列表。

  • 用法:getfacl[-aceEsRLPtpndvh]文件

  • 主要选项如下:

    命令 描述
    -a,--access 仅显示文件访问控制列表。
    -d,--default 仅显示默认的访问控制列表。
    -c,--omit-header 不显示注释表头。
    -e,--all-effective 显示所有的有效权限。
    -E,--no-effective 显示无效权限。
    -s,--skip-base 跳过只有基条目(Baseentries)的文件。
    -R,--recursive 递归显示子目录。
    -L,--logical 逻辑遍历(跟随符号链接)。
    -P,--physical 物理遍历(不跟随符号链接)。
    -t,--tabular 使用制表符分隔的输出格式。
    -n,--numeric 显示数字的用户/组标识。
    -p,--absolute-names 不去除路径前的“/”符号。
    -v,--version 显示版本并退出。
    -h,--help 显示帮助信息。

案例练习

(1)查看 acl 权限列表。

# getfacl test 
# file: test 
# owner: root 
# group: root 
user::r-x 
user:tank:rwx #effective:--- 
group::r-x #effective:--- 
mask::--- 
other::--- 

(2)查看 acl 权限,省略头信息。

# getfacl -c test 
user::r-x 
user:tank:rwx #effective:--- 
group::r-x #effective:--- 
mask::--- 
other::--- 

2.61 chacl:更改文件或目录的访问控制列表

  • 作用:更改文件或目录的访问控制列表。

  • 用法:chacl acl filename1 filename2

  • 主要选项如下:

    命令 描述
    -b 表明这里有两个 acl 需要修改,前一个 acl 是文件
    的 acl,后一个是目录的默认 acl。
    -d 设定目录的默认 acl,这个选项是比较有用的。如果指定
    了目录的默认 acl,在这个目录下新建的文件或目录都会继承目录的 acl。
    -R 只删除文件的 acl。
    -D 只删除目录的默认 acl,是-d 的反向操作。
    -B 删除文件和目录默认的 acl,是-b 的反向操作。
    -r 递归地修改文件和目录的 acl 权限。
    -l 列出文件和目录的 acl 权限。

    chacl 是用来更改文件或目录的访问控制列表的命令。其和 chmod 有异曲同工之 妙,但是比 chmod 更为强大、更为精细

chmod 只能把权限分为 3 种:用户、组、其他人。通过 chmod 可以指定文件属主的权限、 文件所在组的用户的权限,以及其他人的权限。

如果有这样的需求,通过 chmod 能搞定吗?如果 A 用户的文件只想给 B 看,通过 chmod 能不能搞定?当然读者可能认为把 A、B 放到一个组里面就可以了,但是这样就会限制了其他 用户不能加入这个组。通过 chacl 可以轻松地解决这个问题。

chacl 命令的格式如下:

chacl acl filename1 filename2 

acl 的英文是 the access control list,直译为存取控制列表。chacl 就是一个改变文件存取控 制列表的命令。

acl 是一个可以被 acl_from_text 程序分析出各用户权限的字符串,该字符串用逗号分隔成 多个片段,每个片段的形式都如 tag:name:perm。

tag 可以是下面形式的一种:

"user"(or"u")    #表示这是一个用户的 ACL 条目。
"group"(or"g")   #表示这是一个用户组的 ACL 条目。
"other"(or"o")   #表示这是其他的 ACL 条目,即没有在 ACL 指定的用户和组的 ACL 条目。
"mask"(or"m")   #表示这是一个掩码的 ACL 条目。在指定其他非用户属主的 ACL 权限时,这个掩码条目必
                 #须被指定,否则执行 chacl 命令会出错。

name 可以是用户名或组名。如果不指定,那么默认是给文件或目录的属主或用户组指定 ACL 权限。当然,name 也可以是用户的 UID 或者组的 GID。

perm 是指该用户或组所具有的权限,它是由“rwx”组成的一个字符串。如果要使该用户 或组不具有某种权限,简单地以“-”代替指定的字母就可以了。例如“r-x”表示只具有读、 执行权限。

案例练习

# chacl u::r-x,g::r-x,o::---,u:tank:rwx,m::--- test 
# getfacl test #查看文件的 acl 权限
# file: test 
# owner: root 
# group: root 
user::r-x 
user:tank:rwx #effective:--- 
group::r-x #effective:--- 
mask::--- 
other::---