命令详解 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,应先缩小范围。
  • 对符号链接的处理与选项、系统实现有关,应明确核对最终目标。

官方参考

Copyright © yan-jian.com 2023 - 2026 · Powered by GitBook更新时间: 2026-10-17 14:18:57

results matching ""

    No results matching ""