lsattr命令因不属于shell基础命令,而是e2fsprogs工具包组件,故未安装时会报“command not found”;需在ubuntu/debian执行sudo apt install e2fsprogs、centos/rhel执行sudo yum/dnf install e2fsprogs、alpine执行apk add e2fsprogs;且仅ext2/ext3/ext4文件系统支持,xfs/btrfs等不兼容。

lsattr命令为什么找不到或报“command not found”
因为 lsattr 不是基础 shell 自带命令,它属于 e2fsprogs 工具包,常见于 ext2/ext3/ext4 文件系统。如果你用的是 XFS、Btrfs 或某些精简版容器镜像(比如 Alpine),默认没有安装,直接运行会提示 command not found。
解决方法很简单:
- Ubuntu/Debian:运行
sudo apt install e2fsprogs - CentOS/RHEL:运行
sudo yum install e2fsprogs或sudo dnf install e2fsprogs - Alpine:运行
apk add e2fsprogs
注意:lsattr 只对 ext 系文件系统有效,XFS 上执行会报 Operation not supported —— 这不是权限问题,是底层不支持,别白费劲去 chmod 或 sudo。
lsattr 查不到隐藏属性?可能是没加 -a 或路径不对
lsattr 默认不显示隐藏文件(即以 . 开头的文件),也不会递归查看子目录。如果你在当前目录下执行 lsattr 却看不到 .bashrc 的属性,是因为它被跳过了。
常用组合:
- 查当前目录所有文件(含隐藏):
lsattr -a - 递归查整个目录树:
lsattr -R /path/to/dir - 查指定文件(哪怕它是隐藏的):
lsattr .bashrc - 结合 grep 筛选不可修改项:
lsattr -a | grep 'i$'(i表示 immutable)
注意:-a 和 -R 可以一起用,但 lsattr -aR 会报错,必须写成 lsattr -a -R 或 lsattr -aR(部分老版本不支持连写)。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
看到 “----e-------e----” 这种输出,各字段代表什么
lsattr 输出格式固定为 16 位字符(旧版是 12 位),例如:
----e-------e---- /etc/passwd
从左到右每 1 位对应一个属性标志,关键常用项有:
-
i:immutable,文件不可删、不可改、不可重命名(需 root +chattr -i才能解除) -
a:append-only,只能追加写,不能覆盖或截断 -
e:extents(ext4 特有),表示使用 extent 方式存储,普通用户无需干预 -
h:huge file(仅 ext4),启用大文件优化,一般自动设置
注意:不同内核版本和文件系统支持的属性不同,man chattr 最后一节的 “ATTRIBUTES” 列表才是权威参考;你看到某位是 e,不代表你能手动设它——那是内核自动管理的。
chmod 和 lsattr 冲突时,哪个优先级更高
权限系统里,lsattr 显示的属性比 chmod 更底层。比如一个文件设置了 i 属性,即使你是 root,执行 rm、mv、echo > file 全都会失败,错误信息是 Operation not permitted,而不是 Permission denied。
典型场景:
-
/etc/shadow常被设i防篡改,此时chmod 777 /etc/shadow成功,但内容依然无法修改 -
a属性下,chmod改权限没问题,但echo "x" > file会失败,echo "x" >> file才行
所以排查文件“明明有权限却改不了”,先跑一遍 lsattr 文件名 —— 很多运维事故就卡在这一步没查。










