zoukankan      html  css  js  c++  java
  • 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 更改文件格式,如下图

     

     

     

     

  • 相关阅读:
    修改Android系统属性SystemProperties.set("sys.powerctl", "shutdown")关机分析
    android手动修改density(dpi)的方法
    nodejs+express+mongodb 快速接口开发
    《杜增强讲Unity之Tanks坦克大战》10-相机控制
    《杜增强讲Unity之Tanks坦克大战》11-游戏流程控制
    《杜增强讲Unity之Tanks坦克大战》9-发射子弹时蓄力
    《杜增强讲Unity之Tanks坦克大战》8-子弹碰撞处理
    《杜增强讲Unity之Tanks坦克大战》7-坦克血条
    《杜增强讲Unity之Tanks坦克大战》6-发射子弹
    《杜增强讲Unity之Tanks坦克大战》5-子弹
  • 原文地址:https://www.cnblogs.com/king-of-purple/p/9563237.html
Copyright © 2011-2022 走看看