51. 文件权限 - 文件属性

开篇词

要使我们的文件更加安全,Linux 提供了一个叫文件属性的特性。通过配置文件的属性,我们可以指定其是只读或不可删除又或者是处于其他状态。
 

列出文件属性

这里是 lsattr 命令的一些选项:

选项用途
-R输出一个指定目录下的文件、目录及子目录的所有属性。
-a输出一个指定目录的文件、目录、目录自身以及父目录的所有属性。
-d只输出目录本身而不包含其地下的所有文件。
-l显示选项的长名称而不是缩写。
-v列出文件或目录的版本或生成编号。

我们首先来准备一些文件和目录:

mkdir -p attr_dir/attr_dir_child
touch attr_dir/{file{1,2},attr_dir_child/file_child{1,2}}
tree attr_dir

准备一些文件和目录。
lsattr 命令默认情况下遍历指定目录中的所有文件及目录但不遍历其子目录中的文件或目录:

lsattr attr_dir

遍历 attr_dir 目录的文件及目录,忽略其子目录的文件及目录。

递归遍历

使用 -R 选项,我们可以遍历目录及其子目录下的所有内容:

lsattr -R attr_dir

遍历目录及其子目录下的所有内容。

包含目录自身及其父目录

使用 -a 选项,我们可以遍历指定目录下的左右,包含目录自身及其父目录:

lsattr -a attr_dir

遍历指定目录下的所有内容,包含目录自身及其父目录。

只包含目录自身

使用 -d 选项,我们可以只显示目录自身而不包含其下的任何内容:

lsattr -d attr_dir

只显示目录自身而不包含其下的任何内容。

长名称而不是字母缩写

使用 -l 选项,我们可以显示选项的长名称而不是缩写:

lsattr -l attr_dir

显示选项的长名称而不是缩写。

版本或生成号

使用 -v 选项,我们可以列出文件及目录的版本或生成号

lsattr -v attr_dir

列出文件及目录的版本或生成号。
 

更改文件属性

这里是 chattr 命令的一些选项:

选项用途
-R递归更改目录及其所有内容的属性。
-V打印属性更改过程。

这里是 chattr 命令的所有模式选项:(大部分选项只在老式文件系统类型上工作。)

选项用途
a仅追加。
A没有 atime 更新。
c压缩。
C无写复制。
d无 dump。
D目录同步更新。
e扩展格式。
F大小写不敏感目录查找。
i不可变。
j数据日志。
P项目层次结构。
s安全删除。
S同步更新。
t无尾合并。
T目录层次结构顶层。
u不可删除。

支持 xfs 文件系统的模式选项:

选项用途
a仅追加。
A没有 atime 更新。
d无 dump。
i不可变。
S同步更新。

支持 ext4 文件系统的模式选项:

选项用途
a仅追加。
A没有 atime 更新。
d无 dump。
D目录同步更新。
e扩展格式。
i不可变。
j数据日志。
S同步更新。
u不可删除。

模式操作符:

选项用途
+追加。
-删除。
=分配。

我们可以使用 df 命令后跟 -T 选项来查看根路径所属分区的文件系统类型:
根路径所处分区的文件系统类型为 xfs。

分配属性

使用等号 =,我们可以将属性分配给文件或目录:

lsattr attr_dir
chattr =i attr_dir/file1    # 将不可变属性分配给目录下的 file1 文件
lsattr attr_dir

分配不可变属性给 file1。
或者我们可以在设置属性时打印过程:

chattr -i attr_dir/file1    # 删除不可变属性
lsattr attr_dir
chattr -V =i attr_dir/file1
lsattr attr_dir

分配不可变属性给 file1 时打印过程。
当我们尝试打开并保存文件时,vi 提示其为一个只读文件并无法保存对其的变更:

vim attr_dir/file1
:wq

vi 提示其为一个支付文件并无法保存对其的变更。
哪怕保存命令后跟一个感叹号,还是不可能保存该文件:

:wq!

强制保存对不可变文件来说也是无效的。

追加属性

使用加号 +,我们可以追加属性至文件或目录:

lsattr -R attr_dir
chattr -R +aAdS attr_dir/*    # 追加 aAdS 属性至 attr_dir 目录下的所有文件和目录
lsattr -R attr_dir

追加更多属性至文件和目录。

删除属性

使用减号 -,我们可以从文件或目录删除属性:

lsattr -R attr_dir
chattr -R -aAdiS attr_dir/*    # 从 attr_dir 目录下的所有文件及目录删除 aAdiS 属性
lsattr -R attr_dir

从所有文件及目录删除所有属性。
 

我所撰写的英文版本

51. File Permissions - File Attributes
 

引用

参见

上一篇:

想看手册的其他内容?请访问该手册的所属专栏:《Linux 管理员手册:既简单又深刻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值