zoukankan      html  css  js  c++  java
  • Linux下文件的三种时间标记:访问时间、修改时间、状态改动时间 (转载)

    在windows下,一个文件有:创建时间、修改时间、访问时间。
    而在Linux下,一个文件也有三种时间,分别是:访问时间、修改时间、状态改动时间。


    两者有此不同,在Linux下没有创建时间的概念,也就是不能知道文件的建立时间,但如果文件建立后就没有修改过,修改时间=建立时间;如果文件建立后, 状态就没有改动过,那么状态改动时间=建立时间;如果文件建立后,没有被读取过,那么访问时间=建立时间,因为不好判断文件是否被改过、读过、其状态是否 变过,所以判断文件的建立时间基本上能为不可能。
     
    如何查一个文件的三个时间呢?

    先用下面的命令来建立一个文件

    echo "new file" > file.txt  
    [root@CDNTest69 wm]# stat file.txt 
      File: `file.txt'
      Size: 9            Blocks: 8          IO Block: 4096   regular file
    Device: 801h/2049d   Inode: 5255731     Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2014-08-22 17:41:15.058576627 +0800
    Modify: 2014-08-22 17:41:15.058576627 +0800
    Change: 2014-08-22 17:41:15.058576627 +0800


    说明:Access访问时间。Modify修改时间。Change状态改动时间。可以stat *查看这个目录所有文件的状态。
    ctime=change time
    atime=access time
    mtime=modifiy time

    因为这是一个新的文件(filetime.txt),没做过内容、属性的更改,也没读过这个文件,所以三者(访问时间、修改时间、状态改动时间)的时间是一致的,这时文件的修改时间与这三个时间是一样的,是没有疑问的。
     
    1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件运用 more、cat等命令(这里注意,有时候输入vi也会修改访问时间,因为也需要访问内容)。ls、stat命令都不会修改文件的访问时间。
    2、修改时间,修改时间是文件内容最后一次被修改时间。比如:vi后保存文件。ls -l列出的时间就是这个时间。
    3、状态改动时间。是该文件的i节点最后一次被修改的时间,通过chmod、chown命令修改一次文件属性,这个时间就会更新。
     
    另个除了可以通过stat来查看文件的mtime,ctime,atime等属性,也可以通过ls命令来查看,具体如下:
    ls -lc filename 列出文件的 ctime (最后更改时间)
    ls -lu filename 列出文件的 atime(最后存取时间)
    ls -l filename 列出文件的 mtime (最后修改时间)
     
    Linux中 stat函数中,用st_atime表示文件数据最近的存取时间(last accessed time);用st_mtime表示文件数据最近的修改时间(last modified time);使用st_ctime表示文件i节点数据最近的修改时间(last i-node's status changed time)。
     
     字段           说明                  例子           ls(-l)
     st_atime  文件数据的最后存取时间       read            -u
     st_mtime  文件数据的最后修改时间       write           缺省
     st_ctime  文件数据的最后更改时间       chown,chmod     -c
     
     
    linux系统中,系统把文件内容数据与i节点数据是分别存放的,i节点数据存放了文件权限与文件属主之类的数据。
     
    另外,可以格式化输出文件的三种时间,如:
    find . -name file -printf "%AY-%Am-%Ad %AH:%AM:%AS"
    find . -name file -printf "%TY-%Tm-%Td %TH:%TM:%TS"
    find . -name file -printf "%CY-%Cm-%Cd %CH:%CM:%CS"
     
    linux的ctime代表的是文件修改时间,如果文件被修改过就很难知道文件的创建时间,在某些特殊情况下,需要查看文件的创建时间,正常情况下查看文件的ctime是无法实现的。可以使用一个变通的方法来实现保留文件创建时间,但是同时也会牺牲一些其它特性。
     
    可以在mount文件的时候使用参数-o noatime,来把系统更新atime的特性关闭。使用了noatime参数挂载后,在文件被修改后文件的atime是不会被改变的,使用stat查看到的atime就是文件的创建时间。
    如:

    [root@CDNTest69 wm]# stat file.txt 
      File: `file.txt'
      Size: 9             Blocks: 8          IO Block: 4096   regular file
    Device: 801h/2049d    Inode: 5255731     Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2014-08-22 17:41:15.058576627 +0800
    Modify: 2014-08-22 17:41:15.058576627 +0800
    Change: 2014-08-22 17:41:15.058576627 +0800
    [root@CDNTest69 wm]# cat file.txt 
    new file
    [root@CDNTest69 wm]# stat file.txt 
      File: `file.txt'
      Size: 9             Blocks: 8          IO Block: 4096   regular file
    Device: 801h/2049d    Inode: 5255731     Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2014-08-22 17:44:31.512576521 +0800
    Modify: 2014-08-22 17:41:15.058576627 +0800
    Change: 2014-08-22 17:41:15.058576627 +0800
    [root@CDNTest69 wm]# 

    获取文件名,文件大小,生成日期

    [root@CDNTest69 wm]# ls -ltr --full-time | grep -v total
    -rw-r--r-- 1 root root  1394 2014-08-18 20:38:31.548634852 +0800 epollserver.c
    -rw-r--r-- 1 root root  4651 2014-08-18 21:54:20.000000000 +0800 a.cc
    -rw-r--r-- 1 root root   123 2014-08-18 22:00:12.734631459 +0800 utils.h
    -rw-r--r-- 1 root root  1699 2014-08-18 22:00:47.147630750 +0800 local.h
    -rw-r--r-- 1 root root 24678 2014-08-18 22:01:12.171631554 +0800 server.cpp
    -rw-r--r-- 1 root root  1399 2014-08-18 22:01:27.522631532 +0800 tester.cpp
    -rw-r--r-- 1 root root 43637 2014-08-18 22:07:43.033631333 +0800 client.cpp
    -rw-r--r-- 1 root root     9 2014-08-22 17:41:15.058576627 +0800 file.txt
    [root@CDNTest69 wm]# ls -ltr --full-time | grep -v total | awk -F " " '{printf "%-40s %-10d %-10s %-20s
    ",$9,$5,$6,$7}'
    epollserver.c                            1394       2014-08-18 20:38:31.548634852  
    a.cc                                     4651       2014-08-18 21:54:20.000000000  
    utils.h                                  123        2014-08-18 22:00:12.734631459  
    local.h                                  1699       2014-08-18 22:00:47.147630750  
    server.cpp                               24678      2014-08-18 22:01:12.171631554  
    tester.cpp                               1399       2014-08-18 22:01:27.522631532  
    client.cpp                               43637      2014-08-18 22:07:43.033631333  
    file.txt                                 9          2014-08-22 17:41:15.058576627  
    [root@CDNTest69 wm]# 

    转自:

    http://blog.csdn.net/wmengbeyond/article/details/38759953

  • 相关阅读:
    远程下载文件并设置进度显示
    python调用函数超时设置
    Ubuntu安装PostgreSQL
    sessionStatMap is full
    LdapTemplate忽略ssl证书
    MySQL5.6 Online DDL
    Mysql5.7编译调试(windows环境)
    Disruptor
    mybatis generator自定义文件后缀名
    maven占位符$变量无法替换
  • 原文地址:https://www.cnblogs.com/Cccarl/p/6994372.html
Copyright © 2011-2022 走看看