linux中查看和修改文件时间的命令

linux下文件时间主要有下面三种:

1.1 modification time(mtime)

文件修改时间,即文件内容的修改时,更新这个时间,不包括文件权限和属性的修改。使用ls -l查看,默认显示时间为mtime

$ ls -l uconv.h
-rw-rw-r--  1 work work 1808 Jul 23  2013 uconv.h

1.2 status time(ctime)

文件状态status的修改时间,如文件的权限和属性修改时更新这个时间。使用 ls --time=ctime 查看

$ ls -l --time=ctime uconv.h
-rw-rw-r--  1 work work 1808 Jul 23  2013 uconv.h

1、stat查看文件时间

[root@web10 ~]# stat install.log
  File: “install.log”
  Size: 33386           Blocks: 80         IO Block: 4096   一般文件
Device: fd00h/64768d    Inode: 7692962     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2012-07-13 16:02:34.000000000 +0800
Modify: 2011-11-29 16:03:06.000000000 +0800
Change: 2011-11-29 16:03:08.000000000 +0800
说明:Access访问时间。Modify修改时间。Change状态改变时间。可以stat *查看这个目录所有文件的状态。

而我们想要查看某文件的三个时间中的具体某个时间,并以年月日时分秒的格式保存。我们可以使用下面的命令:

[root@web10 ~]# stat install.log|grep -i Modify | awk -F. '{print $1}' | awk '{print $2$3}'| awk -F- '{print $1$2$3}' | awk -F: '{print $1$2$3}'
20111129160306

1.3 access time(atime)

文件访问时间,当文件内容被获取时,更新这个时间。使用 ls --time=actime 查看

$ ls -l --time=atime uconv.h
-rw-rw-r--  1 work work 1808 Dec 12  2013 uconv.h

相应的通过ls 查看时也有三个时间:

• modification time(mtime,修改时间):当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性。
• status time(ctime,状态时间):当该文件的”状态(status)”改变时,就会更新这个时间,举例来说,更改了权限与属性,就会更新这个时间。
• access time(atime,存取时间):当“取用文件内容”时,就会更新这个读取时间。举例来说,使用cat去读取 ~/.bashrc,就会更新atime了。

[root@web10 ~]# ls -l --time=ctime install.log
-rw-r--r-- 1 root root 33386 2011-11-29 install.log
[root@web10 ~]# ls -l --time=atime install.log
-rw-r--r-- 1 root root 33386 07-13 16:02 install.log

注意:ls参数里没有--mtime这个参数,因为我们默认通过ls -l查看到的时间就是mtime 。

2. 修改文件的时间

如果需要修改上述三个时间,使用touch命令来修改。 touch filename ,如果文件不存在,则新建一个文件。

$ touch --help

Usage: touch [OPTION]... FILE...
Update the access and modification times of each FILE to the current time.

  -a                     change only the access time
                         修改访问时间
  -c, --no-create        do not create any files
                         修改文件三个时间,不存在则不创建
  -d, --date=STRING      parse STRING and use it instead of current time
                         指定时间代替当前时间
  -f                     (ignored)
  -m                     change only the modification time
                         修改mtime
  -r, --reference=FILE   use this file's times instead of current time
  -t STAMP               use [[CC]YY]MMDDhhmm[.ss] instead of current time
                         指定修改时间
例如:

$ touch -d "2 days ago" uconv.h
$ ll uconv.h ; ll --time=atime uconv.h ; ll --time=ctime uconv.h ;
-rw-rw-r--  1 work work 1808 Jun 13 18:17 uconv.h
-rw-rw-r--  1 work work 1808 Jun 13 18:17 uconv.h
-rw-rw-r--  1 work work 1808 Jun 15 18:17 uconv.h

将mtime和atime修改为两天前,ctime没变。

$ touch -t 201406142020 uconv.h  

$ ll uconv.h ; ll --time=atime uconv.h ; ll --time=ctime uconv.h ;
-rw-rw-r--  1 work work 1808 Jun 14 20:20 uconv.h
-rw-rw-r--  1 work work 1808 Jun 14 20:20 uconv.h
-rw-rw-r--  1 work work 1808 Jun 15 18:23 uconv.h
atime和mtime都变了,但是ctime变成了当前时间。

使用cp命令,-a保持原属性。

$ cp -a uconv.h uconv.h1

$ ll uconv.h1 ; ll --time=atime uconv.h1 ; ll --time=ctime uconv.h1 ;
-rw-rw-r--  1 work work 1808 Jun 14 20:20 uconv.h1
-rw-rw-r--  1 work work 1808 Jun 15 18:25 uconv.h1
-rw-rw-r--  1 work work 1808 Jun 15 18:27 uconv.h1

mtime和atime都保持原文件不变,但是ctime变成当前时间

注:如果touch后面接一个已经存在的文件,则该文件的3个时间(atime/ctime/mtime)都会更新为当前时间。若该文件不存在,则会主动建立一个新的空文件。

[root@web10 ~]# touch install.log
[root@web10 ~]# stat install.log
  File: “install.log”
  Size: 33386           Blocks: 80         IO Block: 4096   一般文件
Device: fd00h/64768d    Inode: 7692962     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2012-07-13 16:21:50.000000000 +0800
Modify: 2012-07-13 16:21:50.000000000 +0800
Change: 2012-07-13 16:21:50.000000000 +0800

同样,使用ls ,查看到的结果也一样。

[root@web10 ~]# ls -l --time=ctime install.log
-rw-r--r-- 1 root root 33386 07-13 16:21 install.log
[root@web10 ~]# ls -l --time=atime install.log
-rw-r--r-- 1 root root 33386 07-13 16:21 install.log
[root@web10 ~]# ls -l install.log
-rw-r--r-- 1 root root 33386 07-13 16:21 install.log

下面再看一个和touch不相关的例子:

[root@web10 ~]# cp /etc/profile .;ll --time=atime profile ;ll --time=ctime profile
cp:是否覆盖“./profile”? y
-rw-r--r-- 1 root root 1344 07-13 16:24 profile
-rw-r--r-- 1 root root 1344 07-13 16:25 profile
因为我之前运行过这个命令一次,所以会出现覆盖,不过这个覆盖出的好,刚才让我们看到了atime和ctime的时间的差别。

我们再回到touch利用touch修改文件时间:

1. 同时修改文件的修改时间和访问时间
touch -d "2010-05-31 08:10:30" install.log
2. 只修改文件的修改时间
touch -m -d "2010-05-31 08:10:30" install.log
3. 只修改文件的访问时间
touch -a -d "2010-05-31 08:10:30" install.log

下面再给一个rootkit木马常用的伎俩。就是把后一个文件的时间修改成和前一个相同。

touch -acmr /bin/ls /etc/sh.conf
另外touch还支持像date命令一样参数修改文件时间:

[root@web10 ~]# touch -d "2 days ago" install.log ; ll install.log
-rw-r--r-- 1 root root 33386 07-11 16:35 install.log
最后总结下常用的文件操作与时间的关系:

1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。

2、修改时间,对文件内容修改一次,这个时间就会更新。比如:vim后保存文件。ls -l列出的时间就是这个时间。

3、状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。查看文件的详细的状态、准确的修改时间等,可以通过stat命令 文件名。

时间: 2024-10-26 17:14:54

linux中查看和修改文件时间的命令的相关文章

linux基础-linux centos 查看、修改文件

问题描述 linux centos 查看.修改文件 我是菜鸟,跪求:我用vi /etc/inittab 看不到内容 就黑屏,左边一列蓝杠 谢谢

Linux 如何查看与修改文件读写权限

ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些: 查看linux文件的权限:ls -l 文件名称 查看linux文件夹的权限:ls -ld 文件夹名称(所在目录) 查看文件权限的相关参数 -rw-rw-r– 一共有10位数 其中: 最前面那个 – 代表的是类型 中间那三个 rw- 代表的是所有者(user) 然后那三个 rw- 代表的是组群(group) 最后那三个 r– 代表的是其他人(other) 然后我再解释一下后面那9位数: r 表示文件可

Linux中如何批量修改文件的扩展名

风信网(ithov.com)原创文章:在管理Linux的过程中,需要批量的对文件进行修改扩展名的操作,如果一个一个的修改,哪的确是一件非常痛苦的事,我们可以借助以下的方法以实现轻构.快速的批量修改文件扩展名. # for i in *.mp3; do mv $i `basehttp://www.aliyun.com/zixun/aggregation/11696.html">name $i .mp3`.bak ;done 将所有以.mp3结尾的文件扩展名修改为.mp3.bak结尾 在deb

linux中查看和修改Linux字符集

环境: [root@mysql ~]# cat /etc/redhat-release CentOS release 6.3 (Final) 查看 [root@mysql ~]# echo $LANG en_US.UTF-8 [root@mysql ~]# locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC

Linux下查看以及修改文件权限

  查看权限 在终端输入: ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些: -rw-rw-r-- 其中: 最前面那个 - 代表的是类型 中间那三个 rw- 代表的是所有者(user) 然后那三个 rw- 代表的是组群(group) 最后那三个 r-- 代表的是其他人(other) 然后我再解释一下后面那9位数: r 表示文件可以被读(read) w 表示文件可以被写(write) x 表示文件可以被执行(如果它是程序的话) - 表示相应的权限还没

用修改文件时间的方法来加密文件

谈到文件加密已经有很多方法了,但传统的文件型加密方法都存在一些不足.例如:让人头痛的密码技术.复杂的全文加/解 密算法.会产生垃圾文件的暗贴技术等等.这里我向大家介绍一种新的文件加密思路. 在Win 95/98中选定一个文件后单激鼠标右键可以查看文件的属性.其中会列出该文件的创建时间.修改时间和访问时间.这 些信息的设置一般都是由操作系统(也就是由Dos/Windows等等)自动完成的,不会让用户轻易修改.利用这一特性就可以实现 很隐蔽的加密技术. 加密原理 用特定的时间信息替换原来的文件时间信

Linux中误删除了某个文件后从进程相关的文件描述中恢复数据

在Linux中误删除了某个文件,但是 ps-ef|grep 文件名 发现某个进程还在使用该文件,那么可以通 过以下方式恢复文件. 例如: 创建一个简单文件/tmp/test.txt, 随便向里面写点内容 两个client模拟,client1 负责打开文件less /tmp/test.txt(模拟占用线程) client2 负责恢复文件 恢复步骤(均在client2上执行) 1. 查看/tmp/test.txt被占用的进程id [root@host tmp]# ps -ef|grep test.t

在 Linux 中查看你的时区

在这篇短文中,我们将向你简单介绍几种 Linux 下查看系统时区的简单方法.在 Linux 机器中,尤其是生产服务器上的时间管理技能,是在系统管理中一个极其重要的方面. Linux 包含多种可用的时间管理工具,比如 date 或 timedatectlcommands,你可以用它们来获取当前系统时区,也可以将系统时间与 NTP 服务器同步,来自动地.更精确地进行时间管理. 好,我们一起来看几种查看我们的 Linux 系统时区的不同方法. 1.我们从使用传统的 date 命令开始 使用下面的命令,

如何在Linux中查看你的时区

在这篇短文中,我们将向你简单介绍几种 Linux 下查看系统时区的简单方法.在 Linux 机器中,尤其是生产服务器上的时间管理技能,是在系统管理中一个极其重要的方面. Linux 包含多种可用的时间管理工具,比如 date 或 timedatectlcommands,你可以用它们来获取当前系统时区,也可以将系统时间与 NTP 服务器同步,来自动地.更精确地进行时间管理. 好,我们一起来看几种查看我们的 Linux 系统时区的不同方法. 1.我们从使用传统的 date 命令开始 使用下面的命令,