通过lsattr和chattr命令,可以对Linux文件系统的一些功能进行管理,开关一些特性,以及控制文件的访问权限等。
chmod命令主要是修改文件或文件夹的mode bit,通过user/group/other的用户分组控制文件的访问权限,不同用户有不同的访问权限。
lsattr、chattr相对来说更底层一些,对用户一视同仁,如果设置禁止删除,即使root用户也不能删除,从file system层面直接控制。
通过一些例子理解这两个命令的功能:
# 有一个log文件,内容就一行log
$ ls -l
total 4
-rw-r--r-- 1 dev dev 477 2月 27 11:04 log.txt
$ cat log.txt
2023-02-23 03:38:05.202991 12624 12624 I b : post exception : fragrance_state
# 查看log.txt当前的attribute
$ lsattr
--------------e--- ./log.txt
# 修改attribute前,正常修改文件,追加一行文字
$ echo "before change attribute: +i" >> log.txt
$ cat log.txt
2023-02-23 03:38:05.202991 12624 12624 I b : post exception : fragrance_state
before change attribute: +i
# +i,增加i属性(imutable),禁止修改。修改文件,提示不允许。
$ sudo chattr +i log.txt
$ lsattr
----i---------e--- ./log.txt
$ echo "after change attribute: +i" >> log.txt
bash: log.txt: Operation not permitted
# -i,去掉i属性,正常修改文件
$ sudo chattr -i log.txt
$ lsattr
--------------e--- ./log.txt
$ echo "after change attribute: -i" >> log.txt
$ cat log.txt
2023-02-23 03:38:05.202991 12624 12624 I b : post exception : fragrance_state
before change attribute: +i
after change attribute: -i
# +a,增加a属性,append,只能追加内容,不能删除文件和内容。
$ sudo chattr +a log.txt
$ lsattr
-----a--------e--- ./log.txt
# 替换文件内容,不允许
$ echo "after change attribute: +a" > log.txt
bash: log.txt: Operation not permitted
# 向文件追加内容,OK
$ echo "after change attribute: +a" >> log.txt
# 删除文件,不允许
$ rm log.txt
rm: cannot remove 'log.txt': Operation not permitted
总结一下:
- chattr +/- 增加或删除某个属性,例如:chattr -i
- 部分常用属性参考:
a: append only
c: compressed
e: extend format
i: imutable
j: data journalling
s: secure deletion
u: undeletable - 部分属性和file system版本或kernel版本有关,可查询manual确认。