stat
是一个命令,它用来显示文件或者文件系统的详细信息。
本文详细讲解如何使用stat
命令.
使用 stat 命令
stat
命令的语法如下:
stat [OPTION]... FILE...
stat
接受一个或者多个输入的FILE
,和一系列的选项,用来控制命令的行为和输出结果。
让我们看看下面的例子:
代码语言:javascript复制stat file.txt
输出结果如下:
代码语言:javascript复制 File: file.txt
Size: 4030 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 13633379 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ linuxize) Gid: ( 1000/ linuxize)
Access: 2019-11-06 09:52:17.991979701 0100
Modify: 2019-11-06 09:52:17.971979713 0100
Change: 2019-11-06 09:52:17.971979713 0100
Birth: -
当没有添加任何选项时, stat
显示下面的文件信息:
- File - 文件名称
- Size - 文件大小,以比特为单位展示
- Blocks - 文件占用块数目
- IO Block - 每个块所占比特数
- File type - 文件类型(例如:正则文件,目录,软连接…)
- Device - 以 16 进制和 10 进制表示的设备数
- Inode - 节点数
- Links - 硬连接数
- Access - 用数字和符号表示的权限
- Uid - 用户 ID 和拥有者的名字
- Gid - 用户组 ID 和拥有者的名字
- Context - SELinux 安全内容
- Access - 文件最后被访问的时间
- Modify - 文件内容最后被修改的时间
- Change - 文件属性或者内容最后被修改的时间
- Birth - 文件创建时间(Linux 下不支持)
显示关于文件系统的信息
为了获取文件归属的文件系统相关信息,而不是获取文件本身的信息,我们使用-f
,(--file-system
)选项:
stat -f file.txt
这个命令的输出看起来是这样:
代码语言:javascript复制 File: "package.json"
ID: 8eb53097b4494d20 Namelen: 255 Type: ext2/ext3
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 61271111 Free: 25395668 Available: 22265851
Inodes: Total: 15630336 Free: 13979610
当stat
和-f
选项一起运行时,它会展示如下信息:
- File - 文件名称
- ID - 以 16 进制表示文件系统 ID
- Namelen - 文件名字的最长长度
- Fundamental block size - 文件系统上每个块的大小
- Blocks:
- Total - 文件系统上的总块数
- Free - 文件系统上的剩余块数
- Available - 对于非 Root 用户的可用剩余块数
- Inodes:
- Total - 文件系统上的总节点数
- Free - 文件系统上的剩余节点数
间接(跟进)软连接
默认情况下,stat
不会跟进软连接。如果你对一个软连接运行这个命令,输出结果将会包含软连接的信息,而不是它所指向文件的信息。
stat /etc/resolv.conf
代码语言:javascript复制 File: /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
Size: 39 Blocks: 0 IO Block: 4096 symbolic link
Device: 801h/2049d Inode: 8126659 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-11-06 21:12:26.875956073 0100
Modify: 2018-07-24 11:11:48.128794519 0200
Change: 2018-07-24 11:11:48.128794519 0200
Birth: -
为了间接跟进软连接,并且显示软连接指向文件的信息,请使用-L
,(--dereference
)选项。
stat -L /etc/resolv.conf
代码语言:javascript复制 File: /etc/resolv.conf
Size: 715 Blocks: 8 IO Block: 4096 regular file
Device: 17h/23d Inode: 989 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 101/systemd-resolve) Gid: ( 103/systemd-resolve)
Access: 2019-11-06 20:35:25.603689619 0100
Modify: 2019-11-06 20:35:25.555689733 0100
Change: 2019-11-06 20:35:25.555689733 0100
Birth: -
定制输出结果
stat
命令有两个选项,允许你根据需要定制结果: -c
,(--format="format"
) 和 --printf="format"
。
这两个选项的主要不同点在于,当命令最后有两个或者更多个文件时,--format
在每个输出结果后面添加一个换行符,而--printf
则会解释反义符号。
对于文件和文件系统来,有很多格式指令可以和--format
,--printf
一起搭配使用。
例如,仅仅查看文件的类型,你可以使用:
代码语言:javascript复制stat --format="%F" /dev/null
代码语言:javascript复制character special file
你也可以合并任何数量的格式指定,并自定义分隔符。分隔符可以是单个字符或者一个字符串。
代码语言:javascript复制stat --format="%n,%F" /dev/null
代码语言:javascript复制/dev/null,character special file
为了解释换行或者制表符号,请使用--printf
选项:
stat --printf='Name: %nnPermissions: %an' /etc
n
打印出一个新行
Name: /etc
Permissions: 755
stat
也可以以简明扼要的方式展示信息。这种格式在使用其他工具进行解析时很有用处。
配合选项-t
(--terse
)选项输入命令,可以以简明扼要的方式打印输出结果。
stat -t /etc
代码语言:javascript复制/etc 12288 24 41ed 0 0 801 8126465 147 0 0 1573068933 1573068927 1573068927 0 4096
为了获取关于文件或者文件系统的完整格式指令列表,请在终端输入man stat
或者 stat --help
。
总结
stat
命令打印了文件和文件系统的信息。
在 Linux 下,还有其他几个命令可以显示文件信息。ls
就是最有用的一个,但是它只显示stat
信息中的一部分。