Linux命令之chattr详解程序员

chattr [-RVf] [-v version] [mode] files…

  chattr修改文件在Linux第二扩展文件系统(E2fs)上的特有属性。符号模式(mode)有+-=[aAcCdDeijsStTu]。

       操作符+用来增加选定的属性;-用来撤消选定的属性;=用来指定文件的唯一属性。字母’aAcCdDeijsStTu’选择文件的新属性:仅附加(a),不更新atime(A),压缩(c),不受写时拷贝影响(C),没有转储(d),同步目录更新(D),扩展格式(e),不可变(i),数据日志(j),安全删除(s),同步更新(S),不支持尾部合并(t),目录层次结构(T)和不可删除(u)。

       以下属性是只读的,可以由lsattr(1)列出,但不能通过chattr修改:压缩错误(E),大文件(h),索引目录(l),内联数据(N),压缩原始访问(X),压缩脏文件(Z)。

       并非所有文件系统都支持或使用所有标志;有关特定于文件系统的详细信息,请参阅特定于文件系统的手册页,例如btrfs(5),ext4(5)和xfs(5)。

(1).选项

-R 以递归方式修改目录及其下内容属性 
-V 详尽给出chattr的输出信息,并打印出程序版本 
-f 不列出大多数错误信息 
-v version 设置文件系统的版本

(2).属性

         具有a属性集的文件只能在追加模式下打开以进入写入。只有超级用户或具有CAP_LINUX_IMMUTABLE功能的进程才能进行设置或清楚此属性。

         访问具有A属性集的文件时,不会修改其atime记录。这可以避免笔记本电脑系统的一定数量的磁盘I/O。

         设置了c属性的文件由内核自动压缩到磁盘上。从此文件读取将返回未压缩的数据,写入文件会先压缩数据再将数据存储到磁盘。注意:请务必了解(3).缺陷与限制

         设置了C属性的文件不会受写时拷贝更新的影响。仅在执行写时拷贝的文件系统上支持此标志。注意:对于dtrfs,应该在新文件或空文件上设置C标志。如果在已有数据块的文件上设置它,则当分配给文件的块完全稳定时,它是未定义的(?)。C标志在目录上设置,它对目录没有影响,但在该目录下中创建的新文件将是No_COW属性。

         设置了d属性的文件不能对其运行dump(8)程序进行备份。

         当修改了设置D属性的目录时,会在磁盘上同步写入更改;这相当于已用与文件子集的’dirsync’挂载选项。

         e属性表示该文件正在使用扩展区来映射磁盘上的块。可能无法使用chattr(1)删除它。

         实验性压缩补丁使用E属性来指示压缩文件具有压缩错误。它可能不会使用chattr(1)设置或重置,尽管它可以lsattr(1)显示。

         h属性表示文件以文件系统块大小为单位而不是以扇区为单位存储块,并且意味着该文件(或一次)大于2TB。它可能不会使用chattr(1)设置或重置,尽管它可以由lsattr显示。

         无法修改具有i属性的文件:无法删除或重命名文件,无法为此文件创建链接,也无法将数据写入文件。只有超级用户或拥有CAP_LINUX_IMMUTABLE功能的进程才能设置或清除此属性。

         Htree代码使用I属性来指示使用散列树索引目录。它可能不会使用chattr(1)设置或重置,尽管它可以由lsattr(1)显示。

         如果文件系统使用”data=ordered”或”data=writeback”选项挂载,则具有j属性的文件会在写入文件本身之前将其所有数据写入ext3或ext4日志。当使用”data=journal”选项挂载文件系统时,所有文件数据都已记录,并且此属性不起作用。只有超级用户或拥有CAP_SYS_RESOURCE功能的进程才能设置或清除此属性。

         设置了N属性的文件表示该文件在inode本身内具有内联存储的数据。它不能使用chattr(1)设置或重置,尽管它可以由lsattr(1)显示。

         删除具有s属性集的文件时,其块将归零并写入磁盘。注意:请务必了解(3).缺陷与限制

         修改具有S属性集的文件时,会在磁盘上同步写入更改;这相当于应用于文件子集的’sync’挂载选项。

         具有t属性的文件在文件末尾将没有与其他文件合并生成的部分块片段(对于那些支持尾部合并的文件系统)。这对于例如LILO这种直接读取文件系统和不能理解合并文件的应用程序是必要的。注意:在本文中(此时系统是CentOS7.2),ext2和ext3文件系统不支持尾部合并。

         对于Orlov块分配器,具有T属性的目录将被视为目录层次结构顶层。这是对于ext3和ext4使用的块分配器的一个提示,表明该目录下的子目录不相关,因此为了分配的目的应该分开。例如,在/home目录中设置T属性是一个非常好的主意,以便/home/john和/home/mary被放置在单独的块组中。对于未设置此属性的目录,Orlov块分配器将尽可能将子目录分组在一起。

         当具有u属性集的文件被删除时,其内容被保留。这允许用户请求回复删除。注意:请务必了解(3).缺陷与限制

         实验压缩补丁使用X属性来指示可以直接访问压缩文件的原始内容。它目前可能使用chattr(1)来设置或重置,尽管它可以由lsattr(1)显示。

         实验压缩补丁使用Z属性来指示压缩文件是脏的。它可能不会使用chattr(1)设置或重置,尽管它可以由lsattr(1)显示。

(3).缺陷与限制

         在当前主流Linux内核中实现的ext2、ext3和ext4文件系统不遵循c,s,u属性。

         j选项仅在文件系统挂载在ext3或ext4时才有用。

         D选项仅在Linux内核2.5.19及以上版本才有用。

(4).实例

创建一个root用户都无法删除的文件

[[email protected] ~]# touch 1 
[[email protected] ~]# ll 1 
-rw-r--r--. 1 root root 0 1月   9 13:21 1 
[[email protected] ~]# lsattr 1 
---------------- 1 
[[email protected] ~]# chattr +i 1 
[[email protected] ~]# ll 1 
-rw-r--r--. 1 root root 0 1月   9 13:21 1 
[[email protected] ~]# lsattr 1 
----i----------- 1 
[[email protected] ~]# rm -rf 1 
rm: 无法删除"1": 不允许的操作 

如果想要删除必须使用命令将第二文件系统的特有属性i去除

[[email protected] ~]# chattr -i 1 
[[email protected] ~]# ll 1 
-rw-r--r--. 1 root root 0 1月   9 13:21 1 
[[email protected] ~]# lsattr 1 
---------------- 1 
[[email protected] ~]# rm 1 
rm:是否删除普通空文件 "1"?y 

 (5).扩展

查看第二文件系统的属性lsattr [-RVadv] [files]

-R 递归目录及其下内容的属性

-V 显示程序版本

-a 列出所有,包括.开头的文件属性

-d 列出目录属性,而不是其下内容属性

-v 显示文件版本

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/2883.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论