`
rocky2com
  • 浏览: 40949 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

 
阅读更多

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

两者有此不同,在Linux下没有创建时间的概念,也就是不能知道文件的建立时间,但如果文件建立后就没有修改过,修改时间=建立时间;如果文件建立后,状态就没有改动过,那么状态改动时间=建立时间;如果文件建立后,没有被读取过,那么访问时间=建立时间,因为不好判断文件是否被改过、读过、其状态是否变过,所以判断文件的建立时间基本上能为不可能。
如何查一个文件的三个时间呢?
先用下面的命令来建立一个文件
# date && echo "this is file be used test time of file" >filetime.txt && ll --full-time filetime.txt
Tue Aug 4 15:13:44 HKT 2009
-rw-r--r-- 1 root root 39 2009-08-04 15:13:44.000000000 +0800 filetime.txt
通过stat filename.txt来查,如:
# stat filetime.txt
File: `filetime.txt'
Size: 39 Blocks: 8 IO Block: 4096 Regular File
Device: 802h/2050d Inode: 17 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 15:13:44.000000000 +0800
Modify: 2009-08-04 15:13:44.000000000 +0800
Change: 2009-08-04 15:13:44.000000000 +0800

说明:Access访问时间。Modify修改时间。Change状态改动时间。可以stat *查看这个目录所有文件的状态。
ctime=change time
atime=access time
mtime=modifiy time
因为这是一个新的文件(filetime.txt),没做过内容、属性的更改,也没读过这个文件,所以三者(访问时间、修改时间、状态改动时间)的时间是一致的,这时文件的修改时间与这三个时间是一样的,是没有疑问的。
1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件运用 more、cat等命令。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就是文件的创建时间。
如:
# /sbin/mkfs -t ext3 /dev/ram10
# mount -t ext3 -o noatime /dev/loop0 /mnt/foo
# mount
/dev/ram10 on /mnt/foo type ext3 (rw,noatime)
# cd /mnt/foo
# touch filetime1.txt
# stat filetime1.txt
File: `filetime1.txt'
Size: 0 Blocks: 0 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 12 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:51:32.000000000 +0800
Modify: 2009-08-04 20:51:32.000000000 +0800
Change: 2009-08-04 20:51:32.000000000 +0800
# echo foo.ok >> filetime1.txt
[root@logs-bak foo]# stat filetime1.txt
File: `filetime1.txt'
Size: 14 Blocks: 2 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 12 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:51:32.000000000 +0800
Modify: 2009-08-04 20:53:27.000000000 +0800
Change: 2009-08-04 20:53:27.000000000 +0800
# cat filetime1.txt
foo.ok
#stat filetime1.txt
File: `filetime1.txt'
Size: 14 Blocks: 2 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 12 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:51:32.000000000 +0800
Modify: 2009-08-04 20:53:27.000000000 +0800
Change: 2009-08-04 20:53:27.000000000 +0800
# 通过以上实验可以看出文件的access time 是不变的。
接着向下多测试一下.
# vi filetime1.txt
# stat filetime1.txt
File: `filetime1.txt'
Size: 23 Blocks: 2 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 14 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:55:05.000000000 +0800
Modify: 2009-08-04 20:55:05.000000000 +0800
Change: 2009-08-04 20:55:05.000000000 +0800
# chmod 777 filetime1.txt
# stat filetime1.txt
File: `filetime1.txt'
Size: 23 Blocks: 2 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 14 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:55:05.000000000 +0800
Modify: 2009-08-04 20:55:05.000000000 +0800
Change: 2009-08-04 20:57:36.000000000 +0800
可见,chmod后,Ctime的变化。
#########################################################
说到这里,大概大家也对在linux下文件的时间有所了解了吧!
那么以下的操作对文件的时间有什么影响呢?
操作 atime mtime ctime
----------------------------------------------------------
mv
----------------------------------------------------------
cp
----------------------------------------------------------
touch
----------------------------------------------------------
cat/more/less
----------------------------------------------------------
ls
----------------------------------------------------------
chmod/chown
----------------------------------------------------------
ln
----------------------------------------------------------
echo
----------------------------------------------------------
vi
----------------------------------------------------------
(请大家测试完成这个表吧!!!!做完测试可以给我留言啊!)
##############################################################
另外,从kernel2.6.29开,还默认集成了一个relatime的属性。可能是因为在文件读操作很频繁的系统
中,atime更新所带来的开销很大,所以很多SA都在挂装文件系统的时候使用noatime属性来停止更新atime。但是有些程序需要根据atime进行一些判断和操作,所以Linux就推出了一个relatime特性。
使用这个特性来挂装文件系统后,只有当mtime比atime更新的时候,才会更新atime。事实上,这个时候atime和mtime已经是同一个东西了。所以这个选项就是为了实现对atime的兼容才推出的。并不是一个新的时间属性。使用方法就是通过mount -o relatime /dir来挂装目录。
分享到:
评论

相关推荐

    Linux下查找指定时间内修改过的文件.docx

    Linux 下查找指定时间内修改过的文件 在 Linux 系统中,查找指定时间内修改过的文件可以使用 find 命令。find 命令提供了多种选项来限定搜索范围和时间范围。 首先,需要了解 find 命令的基本语法:`find [选项] ...

    Linux文件三种时间属性.pdf

    Linux 文件系统中的每个文件都具有三种时间属性:状态改动时间(ctime)、修改时间(mtime)和访问时间(atime)。理解这些时间属性的变化是非常重要的,特别是在文件管理和备份中。 状态改动时间(ctime) 状态...

    修改文件时间程序

    2. 修改时间:每当文件内容被更改,这个时间就会更新,记录了文件内容的最后改动时刻。 3. 访问时间:每次打开或读取文件时,访问时间会被更新,但它并不总是被所有操作系统记录,因为这可能影响性能。 在默认情况...

    西南科技大学+Linux实验报告+Linux环境文件版本控制

    在Git中,每个文件和目录都有一个称为SHA-1的唯一哈希值,代表其特定版本。每次文件更改都会生成新的哈希值,形成一个提交历史链。通过这个历史,可以追踪文件的演变过程,解决冲突,并协同多人的工作。 **二、Git...

    文件日期修改-文件日期修改

    在IT领域,对文件属性的管理是日常工作中的一个重要环节,特别是涉及到文件的日期属性,如创建日期、最后访问日期和修改日期。这些日期属性对于跟踪文件的历史、组织数据以及某些程序的功能都至关重要。"文件日期...

    Linux命令基础9:touch命令和延伸

    `Linux`的`touch`命令是系统中一个非常实用的小工具,主要用于更新文件或目录的访问和修改时间戳,或者在需要时创建新的文件。在软件开发和自动化脚本中,`touch`经常被用于管理项目文件的时间戳,特别是在执行`make...

    svn在linux下的使用(svn命令)

    svn 在 Linux 下的使用(svn 命令) svn 是一个版本控制系统,允许多人合作开发项目,追踪文件的变化历史记录,避免文件冲突和丢失。下面介绍 svn 在 Linux 下的使用和常用命令。 1. 将文件 checkout 到本地目录 ...

    Linux下联合文件系统的研究及性能分析.pdf

    联合文件系统的实现主要有两种模型:一种是基于堆栈的模型,另一种是基于绑定(bind mount)的模型。在堆栈模型中,多个文件系统像堆栈一样叠加在一起,最顶层的文件系统可读写,其余层为只读。而在绑定模型中,文件...

    Linux操作系统基础教程

    在这一讲中,我们主要是了解一下 Linux 的概况,以及对 Linux 有一个初步的感性认识。 一.什么是Linux? Linux 是一个以 Intel 系列 CPU(CYRIX,AMD 的 CPU也可以)为硬件平台,完全免费的 UNIX 兼容系统,完全...

    Linux基础知识(5-10)-文件.pdf

    文件的时间戳有三种:修改时间(mtime)、状态时间(ctime)和访问时间(atime)。mtime记录文件内容的改动,ctime记录文件权限或属性的变化,atime记录文件被读取的时间。 Linux提供了丰富的文件和目录操作命令。`...

    监视文件或文件夹是否被改动.rar_文件 监视_监视 文件_监视文件_监视目录_目录 监视

    标题中的“监视文件或文件夹是否被改动.rar”是一个关于文件和目录监控的软件或工具,主要用于检测指定的文件或文件夹是否发生任何修改、创建、删除等操作。这一技术在IT领域中有着广泛的应用,比如日志跟踪、数据...

    Linux下5个有趣的命令行技巧介绍.docx

    `stat`命令可以提供文件的元数据,如修改时间、访问时间、权限等。只需输入`stat filename_ext`,例如`stat abc.pdf`,就能查看相应文件的详细信息。 最后一个技巧适合初学者,通过`man`命令结合`ls`、`shuf`和`...

    Linux离线安装ftp安装包

    在Linux系统中,FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。本资源提供了一种离线安装FTP服务器的方法,特别适用于没有网络连接或者网络环境受限的Linux环境。这里我们将...

    鸟哥Linux私房菜

    EXT2(Second Extended Filesystem)是一种早期的Linux文件系统。 8. **fc-cache/fc-list**:在第二十四章第2.2节中提及。fc-cache和fc-list命令用于管理字体缓存和列出可用的字体。 9. **fdisk**:在第八章第3....

    Linux Squid 代理修改配置

    这篇博客将深入探讨如何在 Linux 环境下对 Squid 代理进行配置更改,以满足特定需求。 **一、Squid 安装** 首先,确保你的 Linux 系统已经安装了 Squid。如果没有,可以通过以下命令安装: 对于基于 Debian 的...

    Windows 用户转向Linux的12个步骤_skater_space的空间.

    - 掌握至少一种文本编辑器是非常必要的,如vi/vim、nano或gedit等,这对于编写脚本、配置文件等非常有帮助。 #### 步骤十:熟悉网络配置 - 学习如何配置网络接口、DNS服务器等,以便能够正常访问互联网和其他网络...

    Linux操作系统下VMware的端口映射

    总结来说,Linux下VMware的端口映射是一个涉及网络配置和VMware工具的复杂过程,主要通过修改NAT配置文件并重启网络服务来实现。这个功能对于开发、测试和远程访问虚拟机上的服务至关重要,因为它提供了从主机系统...

    linux操作系统考试试卷(含答案)J.doc

    - **选择题**: 如果想在 Linux 下实现热启,应当修改/etc/inittab 下的哪一行( )。 - A. #Trap CTRL-ALT-DELETE - B. #ca::ctrlaltdel :/sbin/shutdown -t3 -r now - C. #id:3:initdefault: - D. #10:3:wait:/...

    Linux下进程迁移机制的研究.pdf

    文章提到,目前存在两种主要的进程迁移实现方式:一种是通过附加控制软件在原有操作系统之上实现,如Condor、CoCheck和Condine系统,它们通常需要应用程序在编译时链接检查点库;另一种是内核级支持,如MoSIX、V和...

Global site tag (gtag.js) - Google Analytics