使用背景 chattr
命令可以修改 Linux 的文件属性,在类 Unix 等发行版中,该命令能够有效防止文件和目录被意外的删除或修改。文件在 Linux 中被描述为一个数据结构,chattr
命令在大多数现代 Linux 操作系统中是可用的,可以修改文件属性,一旦定义文件的隐藏属性,那么该文件的拥有者和 root 用户也无权操作该文件 ,只能解除文件的隐藏属性。这就可以有效的避免被误删除。
命令格式 一个完整的命令一般由命令 (chattr),可选项 (option),操作符 (operator) 与属性 (attribute) 组成:
1 chattr [option] [operator] [attribute] file
[option] 可选项:
1 2 3 -R, 递归更改目录及其内容的属性。 -V, 详细说明chattr的输出并打印程序版本。 -f, 隐藏大多数错误消息。
[operator] 操作符:
1 2 3 +,追加指定属性到文件已存在属性中 -, 删除指定属性 =,直接设置文件属性为指定属性
[attribute] 属性如下:
1 2 3 a, 只能向文件中添加数据 A,不更新文件或目录的最后访问时间 i, 文件或目录不可改变
使用实例 lsattr 命令检查文件已有属性 1 2 -d:如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息 -R:作用于目录时,会显示所有的子目录和文件的隐藏信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 $ 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
重命名,移动或删除,也不能修改其内容
尝试修改该文件,将会被拒绝:
1 2 3 4 5 6 7 8 $ 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
及文件夹中的数据 1 2 mkdir ./fileDir && touch ./fileDir/test.md sudo chattr +i -R ./fileDir
尝试修改文件夹中的内容:
1 2 $ rm -rf ./fileDir rm: cannot remove './fileDir/test.md' : Operation not permitted
允许向文件添加内容,禁止修改或删除内容,禁止移动文件 1 2 3 4 5 6 7 $ sudo chattr +a ./test.md $ lsattr ./test.md -----a--------e--- ./test.md $ echo "Hello World!" >> ./test.md $ echo "hello" > ./test.md bash: ./test.md: Operation not permitted
只允许在目录fileDir
中建立和修改文件,但是禁止删除、移动文件 1 sudo chattr +a ./fileDir
取消某个属性 使用-
操作符即可:
1 2 3 4 5 6 7 8 9 $ sudo chattr +a ./test.md $ lsattr ./test.md -----a--------e--- ./test.md $ sudo chattr -a ./test.md $ lsattr ./test.md --------------e--- ./test.md