欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

51. 文件权限 - 文件属性

程序员文章站 2024-03-24 14:17:28
...

开篇词

要使我们的文件更加安全,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

51. 文件权限 - 文件属性
lsattr 命令默认情况下遍历指定目录中的所有文件及目录但不遍历其子目录中的文件或目录:

lsattr attr_dir

51. 文件权限 - 文件属性

递归遍历

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

lsattr -R attr_dir

51. 文件权限 - 文件属性

包含目录自身及其父目录

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

lsattr -a attr_dir

51. 文件权限 - 文件属性

只包含目录自身

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

lsattr -d attr_dir

51. 文件权限 - 文件属性

长名称而不是字母缩写

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

lsattr -l attr_dir

51. 文件权限 - 文件属性

版本或生成号

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

lsattr -v attr_dir

51. 文件权限 - 文件属性
 

更改文件属性

这里是 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 选项来查看根路径所属分区的文件系统类型:
51. 文件权限 - 文件属性

分配属性

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

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

51. 文件权限 - 文件属性
或者我们可以在设置属性时打印过程:

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

51. 文件权限 - 文件属性
当我们尝试打开并保存文件时,vi 提示其为一个只读文件并无法保存对其的变更:

vim attr_dir/file1
:wq

51. 文件权限 - 文件属性
哪怕保存命令后跟一个感叹号,还是不可能保存该文件:

:wq!

51. 文件权限 - 文件属性

追加属性

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

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

51. 文件权限 - 文件属性

删除属性

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

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

51. 文件权限 - 文件属性
 

我所撰写的英文版本

51. File Permissions - File Attributes
 

引用

参见

上一篇:

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