lsattr用于查看linux文件系统底层隐藏属性(如i不可变、a仅追加),而非rwx权限;chattr用于修改这些属性,二者独立于chmod且优先级更高,需root权限操作,仅ext2/ext3/ext4支持。

Linux 中查看和修改文件的隐藏属性,靠的是 lsattr 和 chattr 这两个命令。它们操作的是文件系统底层的扩展属性(如不可变、仅追加等),和 chmod 设置的 rwx 权限完全独立,优先级更高,甚至 root 也受其限制。
怎么查看文件隐藏属性
用 lsattr 查看,不是 ls 或 ll —— 后者根本看不到这些属性。
- 查单个文件:
lsattr filename(例如lsattr /etc/passwd) - 查目录自身(不进里面):
lsattr -d /path/to/dir(比如锁定日志目录时常用) - 查当前目录所有文件(含 .bashrc 等隐藏文件):
lsattr -a - 递归查整个目录树:
lsattr -R /var/log - 同时查隐藏文件 + 递归:
lsattr -a -R /etc(注意不能写成 -aR,部分旧版本不支持连写)
输出形如 ----i--------e-- /etc/shadow,其中第5位是 i,表示该文件已被设为不可变;最后几位的 e 是 ext4 自动启用的 extent 标志,一般不用管。
哪些隐藏属性最常用、最需关注
真正影响操作行为的关键属性只有几个:
-
i(immutable):文件无法修改、删除、重命名、链接,root 也得先执行
chattr -i才能操作 -
a(append only):只能用
>>追加内容,不能覆盖(>)、不能截断(truncate)、不能删除文件本身 —— 日志文件常用 - A(no atime update):读取时不更新访问时间(atime),减少 SSD 写入,适合高频读场景
- S(synchronous):每次写入立即同步到磁盘,不走缓存,适合关键配置文件
其他如 s(安全擦除)、u(删除后可恢复)、c(自动压缩)等,使用频率低,且部分只在特定内核或文件系统下生效。
怎么修改(设置或清除)隐藏属性
用 chattr 命令,必须由 root 或文件属主(且有 CAP_LINUX_IMMUTABLE 能力)执行。
- 加属性:
chattr +i /etc/passwd(立刻锁死) - 删属性:
chattr -i /etc/passwd(先解锁才能编辑或删) - 同时加多个:
chattr +ia /var/log/secure(既不可变又仅追加?注意逻辑冲突,实际不会同时生效) - 清空所有可设属性(慎用):
chattr -R -i -a -A /tmp/testdir
注意:i 和 a 不能共存于同一文件;e 属性由 ext4 自动管理,不能手动增删;XFS、Btrfs 等文件系统不支持 chattr/lsattr,强行运行会提示 “Operation not supported”。
常见问题与排查提示
如果 lsattr 报 “command not found”,说明系统没装 e2fsprogs 工具包:
- Ubuntu/Debian:
sudo apt install e2fsprogs - CentOS/RHEL:
sudo dnf install e2fsprogs或sudo yum install e2fsprogs - Alpine:
apk add e2fsprogs
如果查不到预期的 i 或 a,先确认是否用了 -a(否则 . 开头文件被跳过),再检查路径是否正确、文件是否真在 ext4 分区上。











