Linux【2】-管理文件-6-查看和修改文件时间或建置新档(stat/touch)
一、stat
在linux系统下,使用stat(显示inode信息)命令可以查看一个文件的某些信息,我们先来尝试一下。
[sam@sam log]$ touch test.tst
[sam@sam log]$ stat test.tst
File: ‘test.tst’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 660082 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sam) Gid: ( 1000/ sam)
Access: 2020-04-19 12:17:35.446518698 +0800
Modify: 2020-04-19 12:17:35.446518698 +0800
Change: 2020-04-19 12:17:35.446518698 +0800
Birth: -
简单的介绍一下stat命令显示出来的文件其他信息:
- File:显示文件名
- Size:显示文件大小
- Blocks:文件使用的数据块总数
- IO Block:IO块大小
- regular file:文件类型(常规文件)
- Device:设备编号
- Inode:Inode号
- Links:链接数
- Access:文件的权限
- Gid、Uid:文件所有权的Gid和Uid。
Linux下的三个时间:
- Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
- Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
- Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。
上面最开始的三个时间是一模一样的,原因是我在创建它的同时修改了它的内容,所以它的大小,Blocks也发生变化,也相当于一次访问,所以,我退出保存后三个时间一致。
二、touch
我们都知道touch命令是用来创建文件的,其实它的用法还有一个,就是修改文件的时间戳。
[root@www ~]# touch [-acdmt] 文件
选项与参数:
-a :仅修订 access time;
-c :仅修改文件的时间,若该文件不存在则不建立新文件;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m :仅修改 mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]
范例一:新建一个空的文件并观察时间
[root@www ~]# cd /tmp
[root@www tmp]# touch testtouch
[root@www tmp]# ls -l testtouch
-rw-r--r-- 1 root root 0 Sep 25 21:09 testtouch
#注意到,这个文件的大小是0 呢!在预设的状态下,如果 touch 后面有接文件, #则该文件的三个时间(atime/ctime/mtime) 都会更新为目前的时间。若该文件不存在, #则会主动的建立一个新的空的文件喔!例如上面这个例子!
范例二:将 ~/.bashrc 复制成为 bashrc,假设复制完全的属性,检查其日期
[root@www tmp]# cp -a ~/.bashrc bashrc
[root@www tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rw-r--r-- 1 root root 176 Jan 6 2007 bashrc <==这是 mtime
-rw-r--r-- 1 root root 176 Sep 25 21:11 bashrc <==这是 atime
-rw-r--r-- 1 root root 176 Sep 25 21:12 bashrc <==这是 ctime
在上面这个案例当中我们使用了『ll』这个指令(两个英文L的小写),这个指令其实就是『ls -l』的意思, ll本身不存在,是被『做出来』的一个命令别名。相关的命令别名我们会在bash章节当中详谈的,这里先知道ll=“ls -l"即可。 至于分号『 ; 』则代表连续指令的下达啦!你可以在一行指令当中写入多重指令, 这些指令可以『依序』执行。由上面的指令我们会知道ll那一行有三个指令被下达在同一行中。
至于执行的结果当中,我们可以发现数据的内容与属性是被复制过来的,因此文件内容时间(mtime)与原本文件相同。 但是由于这个文件是刚刚被建立的,因此状态(ctime)与读取时间就便呈现在的时间啦! 那如果你想要变更这个文件的时间呢?可以这样做:
范例三:修改案例二的 bashrc 文件,将日期调整为两天前
[root@www tmp]# touch -d "2 days ago" bashrc
[root@www tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rw-r--r-- 1 root root 176 Sep 23 21:23 bashrc
-rw-r--r-- 1 root root 176 Sep 23 21:23 bashrc
-rw-r--r-- 1 root root 176 Sep 25 21:23 bashrc
#跟上个范例比较看看,本来是25 日的变成了 23 日了 (atime/mtime)~ #不过, ctime 并没有跟着改变喔!
范例四:将上个范例的 bashrc 日期改为2007/09/15 2:02
[root@www tmp]# touch -t 0709150202 bashrc
[root@www tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rw-r--r-- 1 root root 176 Sep 15 2007 bashrc
-rw-r--r-- 1 root root 176 Sep 15 2007 bashrc
-rw-r--r-- 1 root root 176 Sep 25 21:25 bashrc
#注意看看,日期在atime 与 mtime 都改变了,但是 ctime 则是记录目前的时间!
透过 touch 这个指令,我们可以轻易的修订文件的日期与时间。并且也可以建立一个空的文件喔! 不过,要注意的是,即使我们复制一个文件时,复制所有的属性,但也没有办法复制 ctime 这个属性的。 ctime 可以记录这个文件最近的状态 (status) 被改变的时间。无论如何,还是要告知大家, 我们平时看的文件属性中,比较重要的还是属于那个 mtime 啊!我们关心的常常是这个文件的『内容』 是什么时候被更动的说~瞭乎?
无论如何, touch 这个指令最常被使用的情况是:
建立一个空的文件;
将某个文件日期修订为目前 (mtime 与 atime)
参考资料
- 鸟哥私房菜:http://linux.vbird.org/linux_basic/0220filemanager.php#touch
- https://blog.csdn.net/youmatterhsp/article/details/80439733
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn