命令详解 lsattr
lsattr 用于显示 Linux 文件系统上的 inode 标志,通常与 chattr 配合使用。它只负责查看,不会修改文件。这里的“标志”不是用户自定义扩展属性、ACL 或 SELinux 安全上下文。
基本用法
lsattr [options] [files...]
常用示例:
# 查看文件标志
lsattr -- /etc/example.conf
# 查看目录本身,而不是列出目录内容
lsattr -d -- /srv/data
# 包含隐藏文件
lsattr -a /srv/data
# 递归查看(大目录慎用)
lsattr -R /srv/data
# 显示项目 ID 或 inode 版本等额外信息(取决于版本和文件系统)
lsattr -p -v /srv/data/file
不同版本支持的选项可能不同,以本机 lsattr --help 和手册为准。-V 通常显示程序版本,-l 以长名称显示标志(如果版本支持)。
读懂输出
典型输出:
----i---------e------- /etc/example.conf
每个位置代表一个 inode 标志,连字符表示未设置。常见字母:
| 字母 | 含义 |
|---|---|
i |
immutable,不可修改 |
a |
append only,仅追加 |
A |
不更新 atime |
d |
dump 可忽略 |
S |
同步更新 |
e |
使用 extents;常见于 ext4,由文件系统管理 |
不要看到陌生字母就直接清除。部分标志由文件系统自动维护,部分只对特定文件系统有意义。
与 chattr 配合验证
sudo chattr +i /tmp/demo.conf
lsattr /tmp/demo.conf
sudo chattr -i /tmp/demo.conf
生产环境应在修改前后都记录 lsattr 输出,并验证应用写入、日志轮转、备份和升级流程。
它看不到什么
以下信息需要其他命令:
# POSIX 权限和所有者
ls -l /path/to/file
# ACL
getfacl /path/to/file
# 用户扩展属性
getfattr -d /path/to/file
# SELinux 上下文
ls -lZ /path/to/file
# 挂载方式和文件系统
findmnt -T /path/to/file
因此“文件删不掉”不能只看 lsattr。还要检查目录写权限、只读挂载、ACL、SELinux/AppArmor、NFS 策略、进程占用和容器命名空间。
文件系统与容器注意事项
- ext 系列通常支持较完整,其他文件系统可能仅支持部分标志。
- overlayfs、容器卷、网络文件系统可能返回不支持或只呈现底层的一部分能力。
- 递归扫描大型目录会产生额外 I/O,应先缩小范围。
- 对符号链接的处理与选项、系统实现有关,应明确核对最终目标。