chattrlsattr 是 Linux 系统中用于管理文件和目录扩展属性的命令。这些扩展属性提供了超越传统权限(读、写、执行)的更精细控制,例如防止文件被意外删除或修改。

chattr 命令

chattr 用于设置或移除文件和目录的扩展属性。

语法:

  1. chattr [操作符][选项] 文件/目录
  • 操作符:

    • +: 添加一个或多个属性。
    • -: 移除一个或多个属性。
    • =: 设置指定的属性,并移除其他所有属性。
  • 常用选项 (属性):

    • a (append-only): 只能以追加模式打开文件进行写入。这对于日志文件非常有用,可以防止数据被覆盖或删除,但允许添加新数据。
    • i (immutable): 文件或目录是不可变的。无法对它进行任何形式的修改(包括写入、重命名、删除、设置链接等),只有 root 用户才能修改这个属性。
    • A (no atime updates): 不更新文件的访问时间(atime)。这可以减少磁盘 I/O,提高性能。
    • s (secure deletion): 当文件被删除时,其数据块会被零填充,确保数据无法恢复。
    • u (undeletable): 当文件被删除时,其原始内容会被保留,以便后续恢复。

示例:

  1. 给文件加上“只可追加”属性:

    1. chattr +a /path/to/logfile.log

    执行后,任何试图重写或删除 logfile.log 的操作都会失败,但可以向其中追加内容。

  2. 给重要文件加上“不可变”属性:

    1. chattr +i /etc/passwd

    执行后,即使是 root 用户也无法直接编辑、移动或删除 /etc/passwd 文件,必须先移除 i 属性。

  3. 移除文件的“不可变”属性:

    1. chattr -i /path/to/file.txt

lsattr 命令

lsattr 用于列出文件和目录的扩展属性。

语法:

  1. lsattr [选项] 文件/目录
  • 常用选项:
    • -R: 递归地列出子目录中的文件和目录的属性。
    • -d: 显示目录本身的属性,而不是其内容。

输出解释:

lsattr 的输出格式通常是 [属性列表] 文件名。属性列表中的字母表示该文件拥有相应的扩展属性,空位用 - 表示。

示例:

  1. 查看单个文件的属性:

    1. lsattr /etc/passwd

    可能的输出:

    1. ----i--------e- /etc/passwd

    这表示 /etc/passwd 文件设置了 i (immutable) 属性。

  2. 查看目录下所有文件的属性:

    1. lsattr /home/user/

    输出会列出 /home/user/ 目录下每个文件或子目录的属性。

重要提示

  • root 权限: 修改和查看扩展属性通常需要 root 权限。
  • ls -l 无效: 使用 ls -l 查看文件时,你不会看到这些扩展属性。它们是隐藏在文件系统底层的额外元数据,必须使用 lsattr 命令才能看到。
  • 文件系统支持: 并非所有文件系统都支持 chattrlsattr。它们在 ext2, ext3, ext4 文件系统上工作良好,但在某些网络文件系统或较旧的文件系统上可能不支持。

lsattr后显示文件只有“e”

“e” 不是一个可设置的属性,而是 lsattr 输出中的一个默认占位符。它的全称是 “extent format”,表示该文件使用了现代 Linux 文件系统(如 ext4)推荐的“区段(extent)”格式来存储其数据块的位置信息。 简单来说:
没有 “e”: 在极少数情况下,如果一个文件不显示 “e”,可能意味着它使用的是旧式的、基于间接块的存储方式。
有 “e”: 几乎所有你在现代 Linux 系统上创建的普通文件都会显示 “e”。它代表文件系统为该文件分配空间的标准、高效的方式。