Linux shell编程学习笔记40:stat命令

程序员必备的面试技巧

“程序员必备的面试技巧,就像是编写一段完美的代码一样重要。在面试战场上,我们需要像忍者一样灵活,像侦探一样聪明,还要像无敌铁金刚一样坚定。只有掌握了这些技巧,我们才能在面试的舞台上闪耀光芒,成为那个令HR们心动的程序猿!”

目录

  1. 0 前言
  2. 1 DOS、Windows、Linux中的文件存储
    1. 1.1 扇区
    2. 1.2 DOS、Windows:簇(Cluster)
    3. 1.3 Linux:块(block)和索引节点(inode)
  3. 2 stat命令的功能、格式和选项说明
    1. 2.1 stat命令的功能
    2. 2.2 stat命令的格式
    3. 2.3 stat命令的选项
  4. 3 stat命令使用实例
    1. 3.1 stat 文件或目录:查看文件或目录信息
    2. 3.2 stat -t 文件或目录:以简洁的形式显示文件或目录状态
    3. 3.3 stat -f 文件或目录:显示文件或目录的系统状态而不是文件或目录状态
    4. 3.4 stat -L 文件 或 stat --dereference 文件:取消对引用(跟随)符号链接显示并显示该符号链接指向的文件的信息
    5. 3.5 stat -c "格式" 文件 或 stat --format="格式" 文件 或 stat --printf="格式":自定义输出
  5. 4 其它查看Inodes的命令

0 前言

4 其它查看Inodes的命令

中,我们提到  df -i或--inodes的功能是 列出索引节点而不是块使用情况信息。

那么什么inode(索引节点)呢?我们一起来探讨看看……

1 DOS、Windows、Linux中的文件存储

1.1 扇区

文件一般是存储在磁盘上的,磁盘的最小存储单位叫做扇区(sector),每个扇区大小为512字节。

扇区是磁盘的最小存储单元。

1.2 DOS、Windows:簇(Cluster)

为了提高磁盘读取效率,操作系统通常会一次读取多个扇区的内容。

在微软的DOS、WINDOWS等操作系统中,把一次读取多个扇区称为簇(Cluster),簇是DOS、WINDOWS等操作系统中磁盘文件存储管理的最小单位。1个长度非0的文件,至少占用1簇的存储空间。

1.3 Linux:块(block)和索引节点(inode)

在Linux操作系统中,把一次读取多个扇区称为块(block),最常见的是4KB,即连续八个扇区组成一个块。文件数据存储在块中,块是Linux操作系统中文件存取的最小单位。

索引节点(inode)是文件元信息的存储区域,文件元信息包括以下信息,但不包含文件名,文件名存放在目录当中。

  • 文件的字节数
  • 文件拥有者的 User ID
  • 文件的 Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳,共有三个:ctime 指 inode 上一次变动的时间,mtime 指文件内容上一次变动的时间,atime 指文件上一次打开的时间。
  • 链接数,即有多少文件名指向这个 inode
  • 文件数据 block 的位置

Linux系统内部不使用文件名,而是使用索引节点号码识别文件。对于系统来说文件名只是为便于识别索引节点号码而使用的别称。

在Linux系统中,一个文件必须占用一个索引节点(inode),占用至少一个块(block)。

要查看索引节点(inode)的信息,除了使用df命令,我们还可以使用stat命令。

2 stat命令的功能、格式和选项说明

我们可以使用 stat --help命令查看 stat 命令的帮助信息。

purpleEndurer @ bash $ stat --help
Usage: stat [OPTION]... FILE...
Display file or file system status.

Mandatory arguments to long options are mandatory for short options too.
  -L, --dereference     follow links
  -f, --file-system     display file system status instead of file status
  -c  --format=FORMAT   use the specified FORMAT instead of the default;
                          output a newline after each use of FORMAT
      --printf=FORMAT   like --format, but interpret backslash escapes,
                          and do not output a mandatory trailing newline;
                          if you want a newline, include \n in FORMAT
  -t, --terse           print the information in terse form
      --help     display this help and exit
      --version  output version information and exit

The valid format sequences for files (without --file-system):

  %a   access rights in octal
  %A   access rights in human readable form
  %b   number of blocks allocated (see %B)
  %B   the size in bytes of each block reported by %b
  %C   SELinux security context string
  %d   device number in decimal
  %D   device number in hex
  %f   raw mode in hex
  %F   file type
  %g   group ID of owner
  %G   group name of owner
  %h   number of hard links
  %i   inode number
  %m   mount point
  %n   file name
  %N   quoted file name with dereference if symbolic link
  %o   optimal I/O transfer size hint
  %s   total size, in bytes
  %t   major device type in hex, for character/block device special files
  %T   minor device type in hex, for character/block device special files
  %u   user ID of owner
  %U   user name of owner
  %w   time of file birth, human-readable; - if unknown
  %W   time of file birth, seconds since Epoch; 0 if unknown
  %x   time of last access, human-readable
  %X   time of last access, seconds since Epoch
  %y   time of last modification, human-readable
  %Y   time of last modification, seconds since Epoch
  %z   time of last change, human-readable
  %Z   time of last change, seconds since Epoch

Valid format sequences for file systems:

  %a   free blocks available to non-superuser
  %b   total data blocks in file system
  %c   total file nodes in file system
  %d   free file nodes in file system
  %f   free blocks in file system
  %i   file system ID in hex
  %l   maximum length of filenames
  %n   file name
  %s   block size (for faster transfers)
  %S   fundamental block size (for block counts)
  %t   file system type in hex
  %T   file system type in human readable form

NOTE: your shell may have its own version of stat, which usually supersedes
the version described here.  Please refer to your shell's documentation
for details about the options it supports.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report stat translation bugs to <http://translationproject.org/team/>
For complete documentation, run: info coreutils 'stat invocation'
purpleEndurer @ bash $ 

2.1 stat命令的功能

显示文件或文件系统状态。

2.2 stat命令的格式

stat [选项]... 文件...

注意:

1.使用stat命令必须指定要显示信息的文件

purpleEndurer @ bash $ stat
stat: missing operand
Try 'stat --help' for more information.
purpleEndurer @ bash $ 

2.不同的Linux shell 可能会有自己的 stat 版本,请参阅自己所用的 shell 的文档了解有关其支持的选项的详细信息。 

2.3 stat命令的选项

选项功能

-L

--dereference

取消对引用(跟随)符号链接显示并显示该符号链接指向的文件的信息

-f

--file-system

显示文件系统状态而不是文件状态

-c FORMAT

--format=FORMAT

使用指定的 FORMAT 而不是默认值; 每次使用 FORMAT 后输出换行符
--printf=FORMAT与 --format 类似,但解释反斜杠转义,并且不输出强制性的尾随换行符; 如果需要换行符,请在 FORMAT 中包含 n

-t

--terse

以简洁的形式打印信息
--help显示此帮助并退出
--version输出版本信息并退出

3 stat命令使用实例

3.1 stat 文件或目录:查看文件或目录信息

例3.1.1:在当前目录下用mkdir命令创建test目录并用stat查看test目录的信息

purpleEndurer @ bash $ mkdir test
purpleEndurer @ bash $ stat test
  File: ‘test’
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: 4ch/76d Inode: 1319986     Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/    csdn)   Gid: ( 1000/    csdn)
Access: 2024-01-17 19:23:39.555845513 +0800
Modify: 2024-01-17 19:23:39.555845513 +0800
Change: 2024-01-17 19:23:39.555845513 +0800
 Birth: -
purpleEndurer @ bash $ 

 命令返回了如下信息:

  • File:文件名
  • Size:文件大小,以字节表示
  • Blocks:文件占用(已分配)的块数。
  • IO Block:文件系统块大小
  • directory:文件类型(普通文件、目录、文件系统)
  • Device:文件所在的设备(十六进制和十进制)
  • Inode:文件所在的 Inode 号
  • Links:与文件关联的硬链接数
  • Access (0775/drwxrwxr-x)  :数字/符号格式的文件权限
  • UID:所有者的用户ID和用户名
  • GID:所有者的群组ID和组名
  • Access 2024-01-17 19:23:39.555845513 +0800上次访问文件的时间
  • Modify 2024-01-17 19:23:39.555845513 +0800:上次修改文件内容的时间
  • Change 2024-01-17 19:23:39.555845513 +0800:上次更改文件文件元数据的时间
  • Birth:文件状态被更改的的时间戳,Linux不支持

例3.1.2 在当前目录创建文件test.txt并用并用stat查看test.txt文件的信息

purpleEndurer @ bash $ ls > test.txt
purpleEndurer @ bash $ stat test.txt
  File: ‘test.txt’
  Size: 27              Blocks: 8          IO Block: 4096   regular file
Device: 4ch/76d Inode: 1319971     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    csdn)   Gid: ( 1000/    csdn)
Access: 2024-01-17 19:40:48.612393492 +0800
Modify: 2024-01-17 19:40:48.613393535 +0800
Change: 2024-01-17 19:40:48.613393535 +0800
 Birth: -
purpleEndurer @ bash $ 

对于文件,stat显示的信息不同之处在于:

  • directory:普通文件

3.2 stat -t 文件或目录:以简洁的形式显示文件或目录状态

例3.2 分别以stat -t 和 stat 命令查看文件test.txt 的状态 

purpleEndurer @ bash $ ls > test.txt
purpleEndurer @ bash $ stat -t test.txt
test.txt 14 8 81b4 1000 1000 4c 1319933 1 0 0 1705553539 1705553539 1705553539 0 4096

purpleEndurer @ bash $ stat test.txt
  File: ‘test.txt’
  Size: 14              Blocks: 8          IO Block: 4096   regular file
Device: 4ch/76d Inode: 1319933     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    csdn)   Gid: ( 1000/    csdn)
Access: 2024-01-18 12:52:19.515288704 +0800
Modify: 2024-01-18 12:52:19.516288743 +0800
Change: 2024-01-18 12:52:19.516288743 +0800
 Birth: -
purpleEndurer @ bash $ 

3.3 stat -f 文件或目录:显示文件或目录的系统状态而不是文件或目录状态

例3.3.1 查看test目录的文件系统状态

purpleEndurer @ bash $ stat -f test
  File: "test"
    ID: d52c0294601b7508 Namelen: 255     Type: overlayfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 7584002    Free: 6796649    Available: 6441294
Inodes: Total: 1933312    Free: 1870694
purpleEndurer @ bash $ 

 

命令返回信息包括以下内容: 

  • File:文件名。
  • ID:十六进制文件系统ID。
  • Namelen: 文件名称最大的长度。
  • Fundamental block size: 文件系统上每个块大小。
  • Blocks:块信息,包括以下内容:
  1. Total:文件系统中的总块数。
  2. Free:文件系统中可用的块数。
  3. Available:非root用户可用的可用块数。
  • Inodes:索引节点信息,包括以下内容:
  1. Total :文件系统中的总索引节点数。
  2. Free:文件系统中空闲索引节点的数量。

例3.3.2 查看文件test.txt的文件系统状态

purpleEndurer @ bash $ stat -f test.txt
  File: "test.txt"
    ID: d52c0294601b7508 Namelen: 255     Type: overlayfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 7584002    Free: 6796654    Available: 6441299
Inodes: Total: 1933312    Free: 1870694
purpleEndurer @ bash $ 

3.4 stat -L 文件 或 stat --dereference 文件:取消对引用(跟随)符号链接显示并显示该符号链接指向的文件的信息

例 3.4.1 用stat命令查看文件 /usr/share/zoneinfo/America/Cayman 的信息

purpleEndurer @ bash $ stat /usr/share/zoneinfo/America/Cayman
  文件:'/usr/share/zoneinfo/America/Cayman' -> 'Panama'
  大小:6          块:0          IO 块:4096   符号链接
设备:802h/2050d Inode:1986380     硬链接:1
权限:(0777/lrwxrwxrwx)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2024-01-18 12:30:25.329503131 +0800
最近更改:2021-05-25 16:19:07.819859046 +0800
最近改动:2021-05-25 16:19:07.819859046 +0800
创建时间:-

从命令返回信息可以看到,/usr/share/zoneinfo/America/Cayman 的文件类型是符号链接,文件大小只有6个字节,指向的文件是 Panama 

要想获取/usr/share/zoneinfo/America/Cayman  指向的文件  Panama 的信息,可以使用 -L选项。

例 3.4.2 用stat -L 命令查看文件  /usr/share/zoneinfo/America/Cayman 的信息

purpleEndurer @ bash $ stat -L /usr/share/zoneinfo/America/Cayman
  文件:'/usr/share/zoneinfo/America/Cayman'
  大小:203        块:8          IO 块:4096   普通文件
设备:802h/2050d Inode:1986451     硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2023-05-06 12:37:04.230304278 +0800
最近更改:2019-10-13 09:36:01.000000000 +0800
最近改动:2021-05-25 16:19:07.835859046 +0800
创建时间:-

返回信息表示这个文件的大小是203字节,文件类型是普通文件,那么这是不是文件  Panama 的信息呢?

例 3.4.3 用stat命令查看文件 /usr/share/zoneinfo/America/Panama  的信息

purpleEndurer @ bash $ stat -L /usr/share/zoneinfo/America/Panama
  文件:'/usr/share/zoneinfo/America/Panama'
  大小:203        块:8          IO 块:4096   普通文件
设备:802h/2050d Inode:1986451     硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2023-05-06 12:37:04.230304278 +0800
最近更改:2019-10-13 09:36:01.000000000 +0800
最近改动:2021-05-25 16:19:07.835859046 +0800
创建时间:-

命令返回的文件信息与例 3.4.2中的信息是一致的。

 3.5 stat -c "格式" 文件 或 stat --format="格式" 文件 或 stat --printf="格式":自定义输出

stat命令有两个选项,可让我们根据需要自定义输出:-c "格式" (--format="格式")和 --printf="格式"

其中的格式 可以使用许多文件和文件系统的格式指令:

  • %a 以八进制格式显示访问权限。

  • %A 以易于阅读的格式显示访问权限。

  • %b 这是分配的块数(请参见%B)。

  • %B 由%b报告的每个块的字节大小。

  • %C 显示SELinux安全上下文字符串。

  • %d 以十进制格式显示设备编号。

  • %D 十六进制格式的设备号。

  • %f 以十六进制显示原始模式。

  • %F 显示文件类型。

  • %g 打印所有者的组ID。

  • %G 打印所有者的组名。

  • %h 显示硬链接数。

  • %i 打印出索引节点号。

  • %m 打印安装点。

  • %n 显示文件的文件名

  • %N 显示带符号引用的文件名,如果使用符号链接则取消引用

  • %o 打印最佳I/O传输大小提示。

  • %s 总大小(以字节为单位)。

  • %t 主要设备类型(十六进制),用于字符/块设备特殊文件

  • %T 次要设备类型(十六进制),用于字符/块设备特殊文件

  • %u 显示所有者的用户ID。

  • %U 打印所有者的用户名。

  • %w 显示文件的产生时间,易于阅读;–如果未知。

  • %W 打印文件诞生的时间,距离纪元后的秒数;如果未知,则为0。

  • %x 上次访问的时间,易于我们理解的格式。

  • %X 上次访问的时间,距离纪元以来的秒数。

  • %y 显示上次修改的最后时间,便于阅读。

  • %Y 打印上次修改的时间,距离纪元以来的秒数。

  • %z 这是上次更改的时间,人类可以理解。

  • %Z 最后一次更改的时间,距离纪元以来的秒数。

这两个选项的区别在于:

  • 当两个或多个文件用作操作符时,--format在每个操作数的输出之后自动添加换行符。 
  • --printf解释反斜杠转义字符。

例 3.5.1 用stat -c命令显示Code目录和test.txt 的文件类型、所有者的组ID和组名信息。

purpleEndurer @ bash $ stat -c "%F,%g,%G" Code test.txt
directory,1000,csdn
regular file,1000,csdn
purpleEndurer @ bash $ 

例3.5.2 用stat --printf命令显示Code目录和test.txt 的文件类型、所有者的组ID和组名信息。

purpleEndurer @ bash $ stat --printf "%F,%g,%G" Code test.txt
directory,1000,csdnregular file,1000,csdnpurpleEndurer @ bash $ 

 

可见,返回的目录和文件信息在同一行,不容易区分,因此我们可以改进一下,在格式串末尾加上换行符\n:

purpleEndurer @ bash $ stat --printf "%F,%g,%G\n" Code test.txt
directory,1000,csdn
regular file,1000,csdn
purpleEndurer @ bash $ 

这样看起来就清晰多了。

4 其它查看Inodes的命令

除了上节介绍的df -i或--inodes命令,以及本节介绍的 stat命令,我们还可以使用ls -i命令。

例如,查看当目前下的目录和文件的inodes:

purpleEndurer @ bash $ ls -i
1051744 Code  1319965 test.txt
purpleEndurer @ bash $ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/413893.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习(1)--基础概念

一.计算机视觉(CV) (1).计算机视觉中图像表示为三位数组&#xff0c;其中三维数组中像素的值为0~255&#xff0c;像素的值越低表示该点越暗&#xff0c;像素的值越高表示该点越亮。 (2).图像表示 A*B*C&#xff0c;其中A,B分别为图像的长和宽&#xff0c;C则表示图像的颜色通道…

PBR材质纹理下载

03:10 按照视频里的顺序 我们从第6个网站开始倒数 点击本行文字或下方链接 进入查看 6大网站地址 网址查看链接&#xff1a; http://www.uzing.net/community_show-1962-48-48-35.html 06 Tectures Wood Fence 001 | 3D TEXTURES 简介&#xff1a;最大的纹理网站之一&#x…

【前后端的那些事】15min快速实现图片上传,预览功能(ElementPlus+Springboot)

文章目录 Element Plus SpringBoot实现图片上传&#xff0c;预览&#xff0c;删除效果展示 1. 后端代码1.1 controller1.2 service 2. 前端代码2.1 路由创建2.2 api接口2.2 文件创建 3. 前端上传组件封装 前言&#xff1a;最近写项目&#xff0c;发现了一些很有意思的功能&…

Maven《二》-- Maven的安装与配置(亲测成功版)

目录 &#x1f436;2.1 Maven的安装条件 &#x1f436;2.2 Maven安装步骤 1. 检查本地%JAVA_HOME% 2. 解压maven 3. 配置maven的环境变量 4. 校验maven是否配置成功 5. 配置本地仓库 &#x1f436;2.3 Idea配置本地Maven软件 &#x1f436;2.1 Maven的安装条件 各个工具…

three.js 缓动算法.easing(渐入相机动画)

效果&#xff1a;淡入&#xff0c;靠近物体 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div c…

基于网络爬虫的天气数据分析

二、网络爬虫设计 网络爬虫原理 网络爬虫是一种自动化程序&#xff0c;用于从互联网上获取数据。其工作原理可以分为以下几个步骤&#xff1a; 定义起始点&#xff1a;网络爬虫首先需要定义一个或多个起始点&#xff08;URL&#xff09;&#xff0c;从这些起始点开始抓取数据…

Spring | Spring中的Bean--下

Spring中的Bean: 4.Bean的生命周期5.Bean的配装配式 ( 添加Bean到IOC容器的方式 依赖注入的方式 )5.1 基于XML的配置5.2 基于Annotation (注解) 的装配 (更常用&#xff09;5.3 自动装配 4.Bean的生命周期 Spring容器可以管理 singleton作用域的Bean的生命周期&#xff0c;在此…

DBA技术栈(三):MySQL 性能影响因素

文章目录 前言一、影响MySQL性能的因素1.1 商业上的需求1.2 应用架构规划1.3 查询语句使用方式1.4 Schema的设计1.5 硬件环境 总结 前言 大部分人都一致认为一个数据库应用系统&#xff08;这里的数据库应用系统概指所有使用数据库的系统&#xff09;的性能瓶颈最容易出现在数…

Go 中 slice 的 In 功能实现探索

文章目录 遍历二分查找map key性能总结 之前在知乎看到一个问题&#xff1a;为什么 Golang 没有像 Python 中 in 一样的功能&#xff1f;于是&#xff0c;搜了下这个问题&#xff0c;发现还是有不少人有这样的疑问。 补充&#xff1a;本文写于 2019 年。GO 现在已经支持泛型&am…

TDengine 企业级功能:存储引擎对多表低频场景优化工作分享

在去年 8 月份发布的 3.1.0.0 版本中&#xff0c;TDengine 进行了一系列重要的企业级功能更新&#xff0c;其中包括对多表低频场景写入性能的大幅优化。这一优化工作为有此需求的用户提供了更大的便捷性和易用性。在本文中&#xff0c;TDengine 的资深研发将对此次优化工作进行…

Spring-BeanPostProcessor PostConstruct init InitializingBean 执行顺序

执行顺序探究 新建一个对象用于测试 Component public class Student implements InitializingBean {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}pu…

从matlab的fig图像文件中提取数据

这里用的是openfig&#xff08;&#xff09;函数打开的fig文件 →→→【matlab 中 fig 数据提取】 很简洁 →→→【MATLAB提取 .fig 文件中的数据】 这个给出了包含多个曲线的情况 →→→【提取matlab fig文件里的数据和legend】 chatgpt给出的方法 打开fig文件并保存数据 我的…