chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,如果Linux内核版本低于2.2,那么许多功能不能实现。同样-D检查压缩文件中的错误的功能,需要2.5.19以上内核才能支持。另外,通过chattr命令修改属性能够提高系统的安全 性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr比较简单,只是显示文件的属性。
这两个命令是用来改变文件、目录属性的,和chmod,ls这些命令相比,chmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr来改变的。
假设您想要使一个文件成为只读的。因此,您所要做的就是使用+i选项和文件的名称作为参数来运行chattr命令。
[root@docker-01 tmp]# echo 'yunweimao' > test.txt
[root@docker-01 tmp]# ls
test.txt
[root@docker-01 tmp]# chattr +i test.txt
[root@docker-01 tmp]# rm test.txt
rm:是否删除普通文件 "test.txt"?y
rm: 无法删除"test.txt": 不允许的操作
这很简单--你所要做的就是使用-i选项替换+i。
[root@docker-01 tmp]# chattr -i test.txt
[root@docker-01 tmp]# rm test.txt
rm:是否删除普通文件 "test.txt"?y
有时,您可能不希望对文件进行完全限制。我的意思是,您可能想要为用户提供对文件的追加的访问,这样就可以添加新的内容,但是现有的内容不能被删除或编辑。这也可以通过+a选项。
[root@docker-01 tmp]# echo 'yunweimao' > test.txt
[root@docker-01 tmp]# chattr +a test.txt
[root@docker-01 tmp]# echo 'maoxiaopu' > test.txt
-bash: test.txt: 不允许的操作
[root@docker-01 tmp]# rm -rf test.txt
rm: 无法删除"test.txt": 不允许的操作
##要取消这种行为,只需使用-a选项
这可以使用标记-R来完成,它允许您递归地改变目录及其内容的属性。例如,如果您想让test-dir目录中的所有文件都是只读的,那么请使用以下方式。
[root@docker-01 tmp]# echo 'maoxiaopu' > test1.txt
[root@docker-01 tmp]# echo 'maoxiaopu' > test2.txt
[root@docker-01 tmp]# echo 'maoxiaopu' > test3.txt
[root@docker-01 tmp]# ls
test1.txt test2.txt test3.txt test.txt
[root@docker-01 tmp]# chattr -R +i ./test*
[root@docker-01 tmp]# rm -rf test*
rm: 无法删除"test1.txt": 不允许的操作
rm: 无法删除"test2.txt": 不允许的操作
rm: 无法删除"test3.txt": 不允许的操作
rm: 无法删除"test.txt": 不允许的操作
到目前为止,为了检查是否成功执行了chattr目录,我们尝试执行一些操作,如编辑文件或删除它。但是有一个单独的命令,可以让您轻松地查看文件是否有某个属性。这个命令是lsattr。
[root@docker-01 tmp]# lsattr *
----i-----------test1.txt
----i-----------test2.txt
----i-----------test3.txt
----ia----------test.txt
如果您是一个系统管理员,或者在Linux机器上管理用户,那么您现在明白了,chattr是一个必须知道的命令行工具。有效地使用这个命令可以避免很多麻烦。