跟老男孩学Linux运维:核心系统命令实战
上QQ阅读APP看书,第一时间看更新

2.5 touch:创建空文件或改变文件的时间戳属性

2.5.1 命令详解

【命令星级】 ★★★★★

【功能说明】

touch命令有两个功能:一是创建新的空文件;二是改变已有文件的时间戳属性。

【语法格式】

touch  [option]  [file]
touch  [选项]    [文件]

特别说明:

1)touch命令以及后面的选项和文件,每个元素之间都至少要有一个空格。

2)注意区分touch和mkdir命令的功能,mkdir命令是创建空目录,而touch是创建空文件。

3)在Linux中,一切皆文件。虽然touch命令不能创建目录,但是可以修改目录的时间戳。

【选项说明】

表2-6针对该命令的参数选项进行了说明。

表2-6 touch命令的参数选项及说明

2.5.2 使用范例

基础范例

范例2-21:创建文件示例(文件事先不存在的情况)。

[root@oldboy ~]# mkdir /test            #<==在根下新建一个test目录。
[root@oldboy ~]# cd /test/            #<==切换到/test目录。
[root@oldboy test]# touch oldboy.txt       #<==创建空文件oldboy.txt。
[root@oldboy test]# ls                   #<==可以看到oldboy.txt文件创建成功。
oldboy.txt
[root@oldboy test]# touch a.txt b.txt      #<==同时创建多个文件,类似mkdir创建多个目录。
[root@oldboy test]# ls
a.txt  b.txt  oldboy.txt
[root@oldboy test]# touch stu{01..05}      #<==可以利用大括号“{}”输出的字符序列批量创
                                        建文件。
[root@oldboy test]# ls
a.txt  b.txt  oldboy.txt  stu01  stu02  stu03  stu04  stu05

范例2-22:更改文件的时间戳属性。

[root@oldboy ~]# stat oldboy.txt #<==stat命令可以查看文件的时间戳属性,具体用法见stat
                                 命令讲解。
  File: 'oldboy.txt'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 272247      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-07-30 17:37:32.295105308 +0800
Modify: 2015-07-30 17:37:32.295105308 +0800
Change: 2015-07-30 17:37:32.295105308 +0800
#<==说明:文件的时间戳属性分为访问时间、修改时间、状态改变时间。
[root@oldboy ~]# touch -a oldboy.txt #<==-a参数更改最后访问的时间。
[root@oldboy ~]# stat oldboy.txt
  File: 'oldboy.txt'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 272247      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-07-30 17:48:20.502156890 +0800
Modify: 2015-07-30 17:37:32.295105308 +0800
Change: 2015-07-30 17:48:20.502156890 +0800
[root@oldboy ~]# touch -m oldboy.txt  #<==-m参数更改最后修改的时间。
[root@oldboy ~]# stat oldboy.txt
  File: 'oldboy.txt
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 272247      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-07-30 17:48:20.502156890 +0800
Modify: 2015-07-30 17:48:45.006106223 +0800
Change: 2015-07-30 17:48:45.006106223 +0800

范例2-23:指定时间属性创建/修改文件。

可利用选项-d指定创建文件后的文件修改时间:

[root@oldboy ~]# ls -lh oldboy.txt
-rw-r--r-- 1 root root 0 Oct 23 20:20 oldboy.txt      #<==修改前的文件修改时间10
                                                   月23日。
[root@oldboy ~]# touch -d 20201001 oldboy.txt            #<==指定创建文件后的文件修改
                                                   时间为2020年10月01日。
[root@oldboy ~]# ls -lh oldboy.txt
-rw-r--r-- 1 root root 0 Oct  1  2020 oldboy.txt      #<==文件修改时间已改为2020                                                   年10月01日。

也可利用选项-r,修改oldboy.txt的时间属性,使其和a.txt的时间属性一致:

[root@oldboy ~]# ls -lh a.txt
-rw-r--r-- 1 root root 0 Oct 23 20:20 a.txt            #<==查看a.txt的修改时间。
[root@oldboy ~]# touch -r a.txt oldboy.txt            #<==使用-r参数让oldboy.txt
                                                    的时间属性和a.txt一致。
[root@oldboy ~]# ls -lh oldboy.txt
-rw-r--r-- 1 root root 0 Oct 23 20:20 oldboy.txt      #<==oldboy.txt文件的修改
                                                    时间已和a.txt一致了。

还可以利用选项-t,将文件设置为201512312234.50时间格式:

[root@oldboy ~]# touch -t 201512312234.50 oldboy.txt
[root@oldboy ~]# ls -lh --full-time oldboy.txt
-rw-r--r-- 1 root root 0 2015-12-31 22:34:50.000000000 +0800 oldboy.txt      #<==查看设置的属性。

上面案例涉及的ls命令的用法见后面ls相关章节。

2.5.3 扩展知识

这里扩展一点有关时间戳属性的知识。

GNU/Linux的文件有3种类型的时间戳:

Access: 2015-07-30 17:48:20.502156890 +0800    #<==最后访问文件的时间。
Modify: 2015-07-30 17:48:45.006106223 +0800    #<==最后修改文件的时间。
Change: 2015-07-30 17:48:45.006106223 +0800    #<==最后改变文件状态的时间。

对应ls命令,查看上述时间戳的选项如下:

mtime: 最后修改时间(ls -lt) #<==修改文件内容,文件的修改时间(modify time)会改变。
ctime: 状态改变时间(ls -lc) #<==修改文件内容、移动文件或改变文件属性等,文件的change时间会改变。
atime: 最后访问时间(ls -lu) #<==查看文件内容时,文件的访问时间(access time)会改变。