linux一步一脚印---stat

1、命令功能说明

  stat命令用于显示文件系统和文件的源或者说是属性信息;

2、stat命令的使用参数

-f,--file-system  不显示文件本身的信息,显示文件所在文件系统的信息
-Z,--context 打印SElinux安全上下文信息
-L,--dereference  显示符号链接
-c,--format=格式 自定义输出格式,结尾有换行
-t,--terse  简洁模式,只显示摘要信息

 格式参数:

  有效的文件格式序列(不使用 --file-system):

%a 八进制权限
%A 用可读性较好的方式输出权限
%b 计算已分配块数(参见%B)
%B 以字节为单位输出%b 所报告的每个块的大小
%C SELinux 安全环境字符串
%d 十进制设备编号
%D 十六进制设备编号
%f 十六进制原始模式
%F 文件类型
%g 文件的属组ID
%G 文件的属组组名
%h 硬链接数量
%i Inode 编号
%n 文件名
%N 如果对象是一个符号链接,显示引用到的其它文件名
%o I/O 块大小
%s 总计大小,以字节为单位
%t 十六进制主设备类型
%T 十六进制子设备类型
%u 文件的属主ID
%U 文件的属主用户名
%x 上次访问时间
%X 从UNIX 元年起计的上次访问时间
%y 上次修改时间
%Y 从UNIX 元年起计的上次修改时间
%z 上次更改时间
%Z 从UNIX 元年起计的上次更改时间

有效的文件系统格式序列:

%a 非超级用户可用的剩余块数
%b 文件系统的总数据块数
%c 文件系统中文件节点总数
%d 文件系统中空闲文件节点数
%f 文件系统中空闲块数
%C SELinux 安全环境字符串
%i 十六进制文件系统ID
%I 允许的文件名最大长度
%n 文件名
%s 块大小(用于快速传输)
%S 基本块大小(用于块计数)
%t 十六进制类型描述
%T 可读性较好的类型描述

3、使用实例

  (1)查看文件信息

[root@localhost command_test]# ls
test_dir  test.txt
[root@localhost command_test]# ll test.txt  
-rw-r--r--. 1 root root 0 8月  30 19:36 test.txt
[root@localhost command_test]# stat test.txt
  File: "test.txt"
  Size: 0               Blocks: 0          IO Block: 4096   普通空文件
Device: 802h/2050d      Inode: 26          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-08-30 19:36:08.439981055 +0800
Modify: 2018-08-30 19:36:08.439981055 +0800
Change: 2018-08-30 19:36:08.439981055 +0800
[root@localhost command_test]# stat -f test.txt
  File: "test.txt"
    ID: 4f2b948b696e2979 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 503956     Free: 494998     Available: 469398
Inodes: Total: 128000     Free: 127970
[root@localhost command_test]# 

  (2)stat格式化输出 都要使用-c 参数

[root@localhost command_test]# stat -c %y test.txt 
2018-08-30 19:36:08.439981055 +0800
[root@localhost command_test]# 

  (3)细说stat查询文件后展示的信息项

1 [root@localhost command_test]# stat test.txt 
2   File: "test.txt"
3   Size: 0               Blocks: 0          IO Block: 4096   普通空文件
4 Device: 802h/2050d      Inode: 26          Links: 1
5 Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
6 Access: 2018-08-30 19:36:08.439981055 +0800
7 Modify: 2018-08-30 19:36:08.439981055 +0800
8 Change: 2018-08-30 19:36:08.439981055 +0800
9 [root@localhost command_test]# 

简单的介绍一下stat命令显示出来的文件其他信息:
- File:显示文件名
- Size:显示文件大小
- Blocks:文件使用的数据块总数
- IO Block:一次IO块传递大小
- regular file:文件类型(常规文件)
- Device:设备编号
- Inode:Inode号 (这个参数可以查找阮一峰的博客有详细讲解,而且讲的特别好http://www.ruanyifeng.com/blog/2011/12/inode.html)
- Links:链接数
- Access:文件的权限
- Gid、Uid:文件所有权的Gid和Uid,

三个时间戳

- Access: 2018-08-30 19:36:08.439981055 +0800   #访问时间,当文件被访问时修改这个时间
- Modify: 2018-08-30 19:36:08.439981055 +0800 #修改时间,当文件数据内容被修改是修改这个时间
- Change: 2018-08-30 19:36:08.439981055 +0800  #状态修改时间,当文件的状态被更改时修改这个时间,例如一些状态参数-链接数,大小,权限等等

  (4)验证上述三个时间戳字段

 下面开始验证对文件操作影响到时间的变化,注意一开始三个时间是一样。

第一步,(针对Access-访问时间)验证查看文件对文件时间的影响,使用cat命令查看文件,结果发现文件的访问时间已经改变,如下图所示

第二步,(针对Modify-修改时间)对文件进行写入操作,可使用echo命令对文件写入内容,请注意查看,因为插入一行内容导致Modify和Change都改变了,为什么呢?

你可以注意看下文件的Size、Blocks等属性都改变了,因为插入文件内容影响了文件的大小,Blocks也会被更新,所以导致Change时间也改变了!

 第三步,(针对Change-状态修改时间),前文已经说过,可修改文件状态影响该时间,这里使用chmod命令改变文件权限来验证Change时间的改变,

可查看到当前文件访问权限的改变会影响到Change时间的变化!

 当然我们也可以不经过上述操作直接对时间进行更改操作

touch命令
我们都知道touch命令是用来创建文件的,其实它的用法还有一个,就是修改文件的时间戳。
用法:
-a 或–time=atime或–time=access或–time=use 只更改访问时间。
-m 或–time=mtime或–time=modify  只更改修改时间
-d、-t  使用指定字符串的时间,而非当前时间


我们来试一试:

 

观察上图,咱们使用touch -a file 命令更新文件的访问时间,也会导致Change时间更新,这是由于文件状态已经发生改变,所以也会影响Change时间!

再来,试一试

观察上图,咱们使用touch -m file  更新文件的Modify时间,也会导致Change时间更新,为什么呢?

由于我们每次更新的时候都会更新文件的inode信息,也即文件的状态信息发生改版,所以Change时间也会随着更新!

 咱们再试试使用touch -d、-t参数修改文件时间

-d   更改指定日期时间,而不是当前系统时间,可设定多种格式。

-t    以 [[CC]YY]MMDDhhmm[.ss] 的格式指定新时间戳的日期和时间,相关信息如下。

CC 指定年份的前两位数字。
YY 指定年份的后两位数字。
MM 指定一年的哪一月, 1-12。
DD 指定一年的哪一天, 1-31。
hh 指定一天中的哪一个小时, 0-23。
mm 指定一小时的哪一分钟, 0-59。

 

 观察上面图片可看出使用命令touch -d更改时间,但是只更改到Access时间,Modify时间,而Change时间则更新为系统当前最新时间。

同理可使用touch -t 更改文件格式,如下图

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/king-of-purple/p/9563237.html