ls -l 用于日常查看文件权限、大小、时间等信息,输出直观;stat 提供更详细的元数据,适合脚本处理和精确时间戳获取。

在 linux 系统中,ls -l 和 stat 是查看文件属性的两个核心命令。虽然它们都能显示文件信息,但用途和输出格式各有侧重。掌握它们的使用技巧,有助于更高效地管理文件和排查权限问题。
理解 ls -l 的输出结构
ls -l 命令以长列表格式展示文件详情,每行输出包含七个关键字段:
- 权限位:如 -rwxr-xr–,第一位表示文件类型(-为普通文件,d为目录,l为链接等),后九位分三组表示用户、组、其他人的读(r)、写(w)、执行(x)权限
- 硬链接数:该文件名对应的 inode 被硬链接的次数
- 所有者:文件所属用户
- 所属组:文件所属用户组
- 大小(字节):普通文件显示字节数,目录通常显示为4096
- 修改时间:最近一次修改内容的时间,格式为月 日 时:分 或 年份
- 文件名:若为符号链接,会附加指向的目标路径
常用技巧包括:
- 使用 ls -lh 显示人类可读的大小(如 1K、2.3M)
- 添加 –time-style=full-iso 可显示完整时间戳,便于脚本处理
- 查看隐藏文件用 ls -la
- 按修改时间排序加 -t,逆序加 -rt
深入使用 stat 命令获取精确元数据
stat 提供比 ls 更详细的文件状态信息,适合需要精确时间或调试场景。
执行 stat filename 输出包含:
实用技巧:
- 提取特定字段,例如获取 mtime 时间戳:stat -c %Y filename
- 自定义输出格式:stat -c “%n 的大小是 %s 字节,权限为 %A” filename
- 批量处理多个文件时,结合循环或 find 使用,避免重复调用
- 在脚本中判断文件是否存在且可执行,可用 stat –format=’%f’ file | grep -q ‘1ed’ 检查权限位
对比使用场景与性能考量
ls -l 更适合日常浏览,输出简洁直观,适合管道配合 grep、awk 处理列数据。而 stat 更适合脚本中获取精确值,尤其是时间戳和 inode 相关操作。
注意:
- 某些系统上频繁调用 stat 可能影响性能,特别是网络文件系统
- 符号链接行为不同:ls -l 显示链接本身及目标,stat 默认显示目标文件信息,加 -L 参数才解析链接
- 当需要判断文件是否被改动过,优先比较 mtime;若关注权限变更,则看 ctime
基本上就这些。熟练运用这两个命令,能快速掌握文件状态,在运维和开发中事半功倍。


