导读 | 很多时候,Linux机器被不同的用户使用。因此,这些用户有机会访问一组共同的文件。这就为一些问题打开了大门,比如意外删除或编辑重要文件,而作为管理员,你肯定不希望发生这样的事情。值得庆幸的是,存在一个名为“chattr”的命令,它可以在上述场景中帮助到你。下面,我们使用一些容易理解的示例来讨论这个工具。本页面所有的例子都在Ubuntu 16.04 LTS上进行了测试。 |
一般,“chattr”命令用于更改Linux文件上属性。以下是它的语法:
chattr [ -RVf ] [ -v version ] [ mode ] files…
下面是man手册对它的描述:
chattr 改变一个Linux文件系统上的文件属性。
一个通用格式是:+-=[aAcCdDeijsStTu]
‘+’选项,将给文件添加属性;‘-’选项,移除文件中的属性;‘=’选项,使得文件只有这些属性。
字母 ‘aAcCdDeijsStTu’ 可以赋予文件的新属性:
a:只能附加数据A:不修改访问时间c:压缩文件,C:不执行写入时复制(COW) 。多个调用者获取同一个资源,这时,另一个调用者对这资源进行了修改,不生成一个副本给d:不 dump D: 同步更新目录e:extent格式(一种文件系统格式)i:不能修改。不能删除或重命名,不能创建到该文件的链接,也不能向该文件写入数据。只有超级用户或拥有 CAP_LINUX_IMMUTABLE 能力的进程才能设置或清除此属性。j:数据日志s:安全删除S:同步更新t:不知道文件尾部合并T:目录层次的顶部u:文件被删除时,其内容会被保存,后面可以请求恢复
下面的只读属性,可以使用 lsattr列出,但不能被 chattr 修改:
E:压缩错误h:巨大的文件I:索引目录N:内联数据X:压缩原始访问Z:压缩文件是脏的
并不是所有文件系统都支持所有标志;参考文件系统手册了解如btrfs(5), ext4(5), 和 xfs(5)文件格式的更多详情。
下面是一些问答式的例子,这些例子应该能让你对chattr命令的工作原理有一个很好的了解。
假设您想要使一个文件成为只读的。因此,您所要做的就是使用+i选项和文件的名称作为参数来运行chattr命令。
如:
chattr +i test.txt
下面的截图显示,一旦使用chattr成为只读文件,就不会有其他操作在文件上取得成功。
注意:正如您已经观察到的,您需要拥有使用chattr命令的root权限。
这很简单–你所要做的就是使用-i选项替换+i。例如:
chattr -i test.txt
有时,您可能不希望对文件进行完全限制。我的意思是,您可能想要为用户提供对文件的追加的访问,这样就可以添加新的内容,但是现有的内容不能被删除或编辑。这也可以通过+a选项。
chattr +a test.txt
现在可以附加内容到文件中,但是不能编辑文件中的现有信息,也不能删除文件。要取消这种行为,只需使用-a选项。
chattr -a test.txt
这可以使用标记-R来完成,它允许您递归地改变目录及其内容的属性。例如,如果您想让test-dir目录中的所有文件都是只读的,那么请使用以下方式:
chattr -R +i ./test-dir/
下面的截图显示了只读限制被成功地应用到目录中的所有文件中。
到目前为止,为了检查是否成功执行了chattr目录,我们尝试执行一些操作,如编辑文件或删除它。但是有一个单独的命令,可以让您轻松地查看文件是否有某个属性。这个命令是lsattr。
lsattr [FILENAME]
例如,下面的截图显示了lsattr的输出,清楚地表明“i”属性被应用到目录中的所有文件中。
再确认一下,这是使用-i选项后的输出。
您可以在上面的截图中看到,只读属性从所有文件中删除了。
如果您是一个系统管理员,或者在Linux机器上管理用户,那么您现在明白了,chattr是一个必须知道的命令行工具。有效地使用这个命令可以避免很多麻烦。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/118714.html