zoukankan      html  css  js  c++  java
  • Linux系统stat指令用法

    stat指令:文件/文件系统的详细信息显示。

    stat命令主要用于显示文件或文件系统的详细信息,该命令的语法格式如下:

    stat命令-->用来显示文件的详细信息,包括inode, atime, mtime, ctime

    适用场景:

    查看文件或目录的诸如atime,mtime,ctime等信息即可使用stat命令,也可使用ls命令,但相比而言,stat还可以看到设备号,环境等信息。

    备注:

    1) stat常用输出示意图:

    2) 用于查看atime,mtime,ctime的ls命令用法:

    3) stat命令的几点说明:

    -f  不显示文件本身的信息,显示文件所在文件系统的信息

    -L  显示符号链接

    -C  文件权限

    -t  简洁模式,只显示摘要信息

       事实上,stat命令显示的是文件的I节点信息。Linux文件系统以块为单位存储信息,为了找到某一个文件所在存储空间的位置,用I节点对每个文件进行索引。

        所谓的I节点,是文件系统管理的一个数据结构,是一个64字节长的表,包含了描述文件所必要的全部信息,其中包含了文件的大小,类型,存取权限,文件的所有者 

    查询rc.d文件的信息

    [root@redhat rc.d]# stat rc0.d/  //可以清楚的分析文件或目录的信息
      File: `rc0.d/'
      Size: 4096       Blocks: 8          IO Block: 4096   directory
    Device: fd00h/64768d Inode: 1309217     Links: 2
    Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2014-06-26 21:02:26.776082938 +0800
    Modify: 2014-06-12 15:16:57.848087079 +0800
    Change: 2014-06-12 15:16:57.848087079 +0800

    [root@redhat rc0.d]# du -sh   //这个目录下的所有文件共4K和上面大小差不多
    4.0K .

    查询ec.d文件所在文件系统的信息:

    [root@redhat rc.d]# stat -f rc0.d/  //这个显示的跟当前系统的文件系统信息一样,因为rc.0就在当前系统的文件系统
      File: "rc0.d/"
        ID: 303116b72802c784 Namelen: 255     Type: ext2/ext3
    Block size: 4096       Fundamental block size: 4096
    Blocks: Total: 7558388    Free: 5545748    Available: 5161800
    Inodes: Total: 1921360    Free: 1850717

    也可以查看硬盘的信息

    [root@redhat rc.d]# stat /dev/sda
      File: `/dev/sda'
      Size: 0          Blocks: 0          IO Block: 4096   block special file
    Device: 5h/5d Inode: 6308        Links: 1     Device type: 8,0
    Access: (0660/brw-rw----)  Uid: (    0/    root)   Gid: (    6/    disk)
    Access: 2014-06-27 20:57:07.213940088 +0800
    Modify: 2014-06-27 20:57:05.037938949 +0800
    Change: 2014-06-27 20:57:05.037938949 +0800

    sda硬盘文件系统的信息

    [root@redhat rc.d]# stat -f /dev/sda
      File: "/dev/sda"
        ID: 0        Namelen: 255     Type: tmpfs
    Block size: 4096       Fundamental block size: 4096
    Blocks: Total: 61793      Free: 61734      Available: 61734
    Inodes: Total: 61793      Free: 61080

    Linux下使用stat命令所显示出来的三个时间

    #1. [root@localhost tmp]# stat 1.txt 

      File: `1.txt'
      Size: 8               Blocks: 8          IO Block: 4096   regular file
    Device: 802h/2050d      Inode: 196617      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2013-10-20 21:43:54.000000000 +0800
    Modify: 2013-10-20 21:35:42.000000000 +0800
    Change: 2013-10-20 21:35:42.000000000 +0800

    #2. stat显示出inode的内容--inode包含文件的元信息,具体来说有以下内容:
      * 文件的字节数
      * 文件拥有者的User ID
      * 文件的Group ID
      * 文件的读、写、执行权限
      * 文件的时间戳,共有三个
      * 链接数,即有多少文件名指向这个inode
      * 文件数据block的位置

    #3. IO Block:逻辑块的大小为4096个字节
        Blocks:物理最小块是512,而IO Block为4096,所以这里就占用了8个物理块的意思
        Access:atime
        Modify:mtime,修改时间,注意这个不是建立时间,m不是make的意思
        Change:ctime,改变时间

    #4. 通过ls怎么查询这三个时间?
        ls -lc filename         列出文件的 ctime
        ls -lu filename         列出文件的 atime
        ls -l filename          列出文件的 mtime --ll默认显示的就是这个时间

    #5. 这三个时间不好区别,但必须区别好,因为很多应用会考虑到这些时间,比如在做同步备份时,会判断时间,大于上次备份时间的文件要再次同步等,或在查找文件何时变化,何时被黑客入侵,都会用到这个。
        atime:访问时间,读取文件或者执行文件时会更改,命令如cat,vi
        mtime:修改时间,文件的内容被改变时,就会更改,如vi
        ctime:改变时间,文件的标签如属性、用户、用户组、权限、内容等被改变时,就会更改,如chmod,chown,vi

    #6. 文件的时间戳(timestamp)是inode的内容之一,从inode来理解:ctime指inode上一次改变的时间,mtime指文件内容上一次修改的时间,atime指文件上一次打开的时间。

    #7. atime不一定在访问文件之后被修改,因为:使用ext3文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的信息,就是不想filesystem做太多的修改,而改善读取效能。

    在linux系统下,使用stat(显示inode信息)命令可以查看一个文件的某些信息,我们先来尝试一下。 
    这里写图片描述 
    简单的介绍一下stat命令显示出来的文件其他信息: 
    - File:显示文件名 
    - Size:显示文件大小 
    - Blocks:文件使用的数据块总数 
    - IO Block:IO块大小 
    - regular file:文件类型(常规文件) 
    - Device:设备编号 
    - Inode:Inode号 
    - Links:链接数 
    - Access:文件的权限 
    - Gid、Uid:文件所有权的Gid和Uid。

    Linux下的三个时间: 
    1. Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间 
    2. Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。 
    3. Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。

    上面最开始的三个时间是一模一样的,原因是我在创建它的同时修改了它的内容,所以它的大小,Blocks也发生变化,也相当于一次访问,所以,我退出保存后三个时间一致。

    下面进行一一验证。

    1.atime(访问时间)的更新 
    这里写图片描述 
    2.mtime(修改时间)的更新 
    这里写图片描述 
    这里我使用echo指令向hello.cpp文件中写入了一行内容,惊讶的发现,不止mtime被更新了,而且ctime也被更新了。这是问什么呢?原因很简单,前面说过,ctime在文件大小,Blocks发生变化时也会被更新,所以仔细观察上图,这两项信息是否发生变化了呢? 
    3.ctime(状态时间)的更新

    这里写图片描述 
    使用chmod指令修改hello.cpp的文件权限后,状态时间再次更新。 
    那如果不采取这些操作导致系统自己更新这三个时间,有没有办法人为改变这三个时间呢?答案是有的,请继续往下看~

    touch命令 
    我们都知道touch命令是用来创建文件的,其实它的用法还有一个,就是修改文件的时间戳。 
    用法: 
    -a 或–time=atime或–time=access或–time=use 只更改访问时间。 
    -m 或–time=mtime或–time=modify  只更改修改时间 
    -d、-t  使⽤指定的⽇期时间,⽽⾮现在的时间 
    我们来试一试: 
    这里写图片描述 
    通过上图可以发现,我只是通过-a选项试图修改hello.cpp的访问时间,结果ctime(状态时间)也发生了改变。虽然实际上我用touch操作只改变了atime,但是由于文件的状态发生了变化,所以ctime就自己更新了。 
    这里写图片描述 
    没错,和上面一样,我只是通过-m选项改了文件的修改时间,ctime依然更新了。touch指令依然只是修改了修改时间,而状态时间是系统自己更新的。

  • 相关阅读:
    【转载】MFC与ARX结合开发完美的AutoCAD应用程序
    【转载】SDK中调用COM的例子
    Visual Studio 2010 Beta 2 官方下载地址公布
    【转载】WPF中DataTemplate基本原理与缺陷分析
    【转载】曲线打断、求交点
    【转载】MFC单文档视图穷追猛打
    【转载】在对话框中加入属性页
    【项目】08年度科创项目“绘图助手工具箱”项目成果发布
    【项目】ARX程序开发:框裁直线(Rect Trim Line)功能开发
    【转载】ARX程序再VS2002中的调试初探
  • 原文地址:https://www.cnblogs.com/klb561/p/9241228.html
Copyright © 2011-2022 走看看