使用背景
chattr
命令可以修改 Linux 的文件属性,在类 Unix 等发行版中,该命令能够有效防止文件和目录被意外的删除或修改。文件在 Linux 中被描述为一个数据结构,chattr
命令在大多数现代 Linux 操作系统中是可用的,可以修改文件属性,一旦定义文件的隐藏属性,那么该文件的拥有者和 root 用户也无权操作该文件,只能解除文件的隐藏属性。这就可以有效的避免被误删除。
命令格式
一个完整的命令一般由命令 (chattr),可选项 (option),操作符 (operator) 与属性 (attribute) 组成:
chattr [option] [operator] [attribute] file
[option] 可选项:
-R, 递归更改目录及其内容的属性。
-V, 详细说明chattr的输出并打印程序版本。
-f, 隐藏大多数错误消息。
[operator] 操作符:
+,追加指定属性到文件已存在属性中
-, 删除指定属性
=,直接设置文件属性为指定属性
[attribute] 属性如下:
a, 只能向文件中添加数据
A,不更新文件或目录的最后访问时间
i, 文件或目录不可改变
使用实例
lsattr 命令检查文件已有属性
-d:如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息
-R:作用于目录时,会显示所有的子目录和文件的隐藏信息
$ lsattr clash
--------------e------- clash/glados.yaml
--------------e------- clash/clash-linux-386-v1.10.0
--------------e------- clash/Country.mmdb
--------------e------- clash/cache.db
--------------e------- clash/clash-linux-amd64-v1.10.0
--------------e------- clash/dashboard
$ lsattr -d clash
--------------e------- clash
$ lsattr -R clash
--------------e------- clash/glados.yaml
--------------e------- clash/clash-linux-386-v1.10.0
--------------e------- clash/Country.mmdb
--------------e------- clash/cache.db
--------------e------- clash/clash-linux-amd64-v1.10.0
--------------e------- clash/dashboard
clash/dashboard:
--------------e------- clash/dashboard/manifest.webmanifest
--------------e------- clash/dashboard/assets
clash/dashboard/assets:
--------------e------- clash/dashboard/assets/logo.b453e72f.png
--------------e------- clash/dashboard/assets/index.408383.js
--------------e------- clash/dashboard/assets/index.966f8a.css
--------------e------- clash/dashboard/assets/vendor.ca5569.js
--------------e------- clash/dashboard/sw.js
--------------e------- clash/dashboard/workbox-7ce28d.js
--------------e------- clash/dashboard/index.html
禁止对文件test.md
重命名,移动或删除,也不能修改其内容
sudo chattr +i test.md
尝试修改该文件,将会被拒绝:
$ rm -f ./test.md
rm: cannot remove './test.md': Operation not permitted
$ echo 'Hello World!' > test.md
bash: ./test.md: Operation not permitted
$ mv ./test.md ./fileDir
mv: cannot move './test.md' to './fileDir/test.md': Operation not permitted
禁止修改文件夹fileDir
及文件夹中的数据
mkdir ./fileDir && touch ./fileDir/test.md
sudo chattr +i -R ./fileDir
尝试修改文件夹中的内容:
$ rm -rf ./fileDir
rm: cannot remove './fileDir/test.md': Operation not permitted
允许向文件添加内容,禁止修改或删除内容,禁止移动文件
$ sudo chattr +a ./test.md
$ lsattr ./test.md
-----a--------e--- ./test.md
$ echo "Hello World!" >> ./test.md # 追加内容 OK
$ echo "hello"> ./test.md # 修改内容 NO
bash: ./test.md: Operation not permitted
只允许在目录fileDir
中建立和修改文件,但是禁止删除、移动文件
sudo chattr +a ./fileDir
取消某个属性
使用-
操作符即可:
# 先给文件添加属性a
$ sudo chattr +a ./test.md
$ lsattr ./test.md
-----a--------e--- ./test.md
# 取消属性a
$ sudo chattr -a ./test.md
$ lsattr ./test.md
--------------e--- ./test.md