Linux命令-stat(显示文件/文件系统状态)

📅 2026/8/12 20:22:00
Linux命令-stat(显示文件/文件系统状态)
Linux命令-stat显示文件/文件系统状态快速参考基本用法文件状态自定义格式输出-c常用格式说明符文件系统状态-f实用脚本示例stat vs ls -lstat用于显示文件或文件系统的详细元数据信息。与ls -l相比stat提供了更精确的时间戳纳秒级、inode 号、块数、文件系统 ID 等深层信息。在脚本中stat -c的自定义格式功能使其成为获取文件属性的首选工具。快速参考stat[选项]文件...stat-f[选项]文件...stat直接调用stat()/lstat()系统调用获取信息。纳秒精度的时间戳是其区别于ls的重要特征。基本用法文件状态# 查看文件完整状态statfile.txt# 示例输出解析# File: file.txt# Size: 1234 Blocks: 8 IO Block: 4096 regular file# Device: 801h/2049d Inode: 123456 Links: 1# Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)# Access: 2024-01-15 10:30:45.123456789 0800# Modify: 2024-01-14 15:20:30.987654321 0800# Change: 2024-01-14 15:20:30.987654321 0800# Birth: -# 查看多个文件statfile1.txt file2.txt file3.txt# 跟随符号链接默认行为stat/usr/bin/python# 不跟随符号链接查看符号链接自身stat-L/etc/resolv.conf自定义格式输出-c# 仅显示文件大小stat-c%sfile.txt# 仅显示文件名和大小stat-c%n: %s bytesfile.txt# 显示权限八进制stat-c%afile.txt# 644# 显示完整权限字符串stat-c%Afile.txt# -rw-r--r--# 显示用户名和组名stat-cOwner: %U Group: %Gfile.txt# 时间戳Unix 时间戳stat-cAccess: %X Modify: %Y Change: %Zfile.txt# 时间和文件名stat-c%n 修改时间: %y*.txt# 显示 inode 号stat-cinode: %ifile.txt# 显示设备号stat-cDevice: %dfile.txt# 显示块数和块大小stat-cBlocks: %b (Block Size: %o)file.txt# 显示文件类型stat-c%Ffile.txt# 显示纳秒精度修改时间stat-c%n %.Yfile.txt常用格式说明符格式符含义示例输出%n文件名file.txt%s文件大小字节12345%a八进制权限644%A人类可读权限-rw-r–r–%U所有者用户名root%G所属组名wheel%iinode 号123456%h硬链接数1%X最后访问时间Unix 时间戳1609459200%Y最后修改时间Unix 时间戳1609459200%Z最后状态变更时间1609459200%x最后访问时间人类可读2024-01-15%y最后修改时间人类可读2024-01-14%z最后状态变更时间人类可读2024-01-14%F文件类型regular file%d设备号十进制2049文件系统状态-f# 查看文件系统信息stat-f/# 输出含义# File: /# ID: ab12cd34ef567890 Namelen: 255 Type: ext2/ext3# Block size: 4096 Fundamental block size: 4096# Blocks: Total: 25600000 Free: 12800000 Available: 12000000# Inodes: Total: 6553600 Free: 6000000# 查看挂载点文件系统stat-f/homestat-f/mnt/usb# 自定义文件系统格式输出stat-f-c类型: %T 可用: %a blocks/stat-f-c总计: %b Block 空闲: %f Block/实用脚本示例# 查找最近 24 小时内修改的文件find.-typef-newermt24 hours ago-execstat-c%n %y{}\;# 比较两个文件的时间戳compare_timestamps(){localmod1$(stat-c%Y$1)localmod2$(stat-c%Y$2)if[$mod1-gt$mod2];thenecho$1较新 ($(date-d$mod1))elseecho$2较新 ($(date-d$mod2))fi}compare_timestamps file_a.txt file_b.txt# 批量显示目录内文件大小排行find.-typef-execstat-c%s %n{}\;|sort-rn|head-20# 检查文件权限是否正确check_perms(){localexpected$1file$2localactual$(stat-c%a$file)if[$actual!$expected];thenecho⚠️$file权限为$actual期望$expectedreturn1fireturn0}check_perms600~/.ssh/id_ed25519# 磁盘使用预警脚本USAGE$(stat-f-c100 - 100 * %a / %b/home|bc)if[$USAGE-gt90];thenecho⚠️ 磁盘使用率:${USAGE}%fistat vs ls -l特性statls -l纳秒时间戳支持不支持Inode 号直接显示ls -i块信息详细不显示设备号直接显示不显示自定义格式强大-c有限文件系统信息支持-f不支持一眼可读性信息量大更直观# 功能对比ls-lfile.txt -rw-r--r--1user user1234Jan1510:30 file.txtstatfile.txt# 提供了 inode、block、三个时间戳、链接数、设备号等# 比 ls -l 多出约 3 倍的元数据信息# 获取特定信息ls-lfile.txt|awk{print $5}# 大小方式一stat-c%sfile.txt# 大小方式二更清晰ls-ifile.txt# inode方式一stat-c%ifile.txt# inode方式二脚本友好脚本建议在编写需要文件元数据的 Shell 脚本时优先使用stat -c而非解析ls输出。stat的格式稳定可预测不依赖人类可读格式的解析。