目录
46. shell命令--stat
功能说明
stat 命令在 Linux 和类 Unix 系统中用于显示文件或文件系统的状态信息。它提供了关于文件或目录的详细元数据,包括文件大小、块大小、块数、权限、所有者、组、最后访问时间、最后修改时间、最后状态改变时间(inode 更改时间)、以及设备ID等。
stat命令来自英文单词status的缩写,其功能是显示文件的状态信息。在Linux系统中,每个文件都有3个“历史时间”——最后访问时间(ATIME)、最后修改时间(MTIME)、最后更改时间(CTIME),用户可以使用stat命令查看到它们,进而判别有没有其他人修改过文件内容。
使用touch命令可以轻易修改文件的ATIME和MTIME,因此请勿单纯以文件历史时间作为判别系统有无被他人入侵的唯一标准。
语法格式
stat [选项]... 文件...
SYNOPSIS
stat [OPTION]... FILE...
选项说明
-f:显示文件系统的状态,而不是文件的状态。这通常与一些格式化选项一起使用来指定要显示的信息。
-L:如果遇到符号链接,则显示链接指向的文件的状态,而不是链接本身的状态。
--format:使用自定义格式显示信息。这允许用户指定输出中包含哪些字段。
-c --format=%s:仅显示文件的大小(以字节为单位)。
-t:以简洁的方式显示信息,不输出所有可能的细节。
实践操作
1. 显示单个文件的状态
#这将显示文件的详细信息,包括文件大小、块大小、权限、所有者、组、访问和修改时间等
stat /etc/passwd
touch -m /etc/passwd #更改文件的最后访问时间
stat /etc/passwd
touch -a /etc/passwd #更改文件的最后修改时间
stat /etc/passwd
2. 仅显示文件大小
#这将仅输出文件的大小(以字节为单位)
stat -c %s /etc/passwd
stat --format=%s /etc/passwd
ll /etc/passwd
3. 显示文件系统的状态
#这将显示指定目录所在文件系统的类型。
#注意,-f 选项与 -c 或 --format 一起使用时,需要指定文件系统级别的信息,而不是文件级别的信息
stat -f /etc/passwd #仅查看指定文件的文件系统信息
stat -f -c %T /etc/passwd #文件系统的类型
4. 以简洁的方式查看指定文件的状态信息
stat -t /etc/passwd
输出解释
stat 命令的输出通常包括以下几个部分:
- 文件:文件的名称。
- 大小:文件的大小(以字节为单位)。
- 块:文件占用的磁盘块数。
- IO 块:文件系统的 I/O 块大小。
- 硬链接:指向该文件的硬链接数。
- 权限:文件的权限(如 -rw-r--r--)。
- 所有者:文件的所有者用户名。
- 组:文件所属的组名。
- 设备:文件所在的设备ID。
- inode:文件的 inode 号。
- 链接:如果是符号链接,显示链接指向的文件名(需要 -L 选项)。
- 访问:文件的最后访问时间。
- 修改:文件的最后修改时间。
- 改变:文件的最后状态改变时间(inode 更改时间)。
stat 命令是理解和诊断文件系统问题的重要工具,特别是当需要查看文件的详细元数据信息时。
注意事项
- 当你使用stat命令时,特别是结合--format选项时,请确保你了解每个格式化选项的含义,以避免误解输出信息。
- 在处理包含特殊字符(如空格、换行符等)的文件名时,请确保你的命令或脚本能够正确处理这些文件名。例如,使用引号将文件名括起来或在find命令中使用-print0选项与xargs -0结合来安全地处理文件名。
- stat命令的输出可能会受到文件系统类型、文件权限和其他系统配置的影响。因此,在解读输出信息时,请考虑这些因素。
- --format 选项允许用户自定义输出格式,这对于脚本编写或自动化任务特别有用。除了上面提到的%s(文件大小)之外,还有其他许多格式化选项可供选择,如%n(文件名)、%U(所有者用户名)、%G(组名)等。你可以根据需要组合这些选项来定制输出。例如 stat --format='%n %s'
- 虽然stat命令本身不直接提供持续监控文件变化的功能,但你可以结合其他工具(如watch命令)来定期执行stat命令,从而观察文件状态的变化。例如:watch -n 1 stat example.txt