时间旅行?电影里的桥?也许你又在诈唬了?更改时间戳以达到时间旅行的目的。touch命令在我们的工作中也用得比较频繁,所以我们就由浅入深地详细讲解一下。touch命令的基本用法说到touch命令,大家肯定会想到它的两个用法:更改时间戳和创建新文件这两个用法在工作中早就用过了,这里不再赘述。防止创建文件如果一个文件名直接跟touch,如果该文件不存在,将创建一个对应名称的文件。那么如果我们只想改变文件的时间戳,如果文件不存在我们不创建文件怎么办?这里我们需要添加-c选项。[alvin@VM_0_16_centostest]$touch-calvin[alvin@VM_0_16_centostest]$llalvinls:cannotaccessalvin:Nosuchfileordirectoryonlychangesthefileaccesstime我们知道如果不带任何选项执行touch命令,文件访问时间和修改时间会在与当前系统时间相同。如下:[alvin@VM_0_16_centostest]$statfileFile:'file'Size:10Blocks:8IOBlock:4096regularfileDevice:fd01h/64769dInode:371115Links:1Access:(0664/-rw-rw-r--)Uid:(1000/alvin)Gid:(1000/alvin)访问:2019-02-2014:20:21.154819675+0800修改:2019-02-2014:20:21.154819675+0800更改:2019-02-2014:20:21.191819649+0800-file[]$_VM:touch#这里使用touch命令[alvin@VM_0_16_centostest]$statfileFile:'file'Size:10Blocks:8IOBlock:4096regularfileDevice:fd01h/64769dInode:371115Links:1Access:(0664/-rw-rw-r--)Uid:(1000/alvin)Gid:(1000/alvin)Access:2019-02-2021:51:24.848774158+0800#文件的访问时间/修改时间修改为当前系统时间Modify:2019-02-2021:51:24.848774158+0800Change:2019-02-2021:51:24.848774158+0800Birth:-这里使用stat命令查看文件更详细的信息。如果我们只想改变文件的访问时间,只需加上-a选项即可,a是access一词的缩写。[alvin@VM_0_16_centostest]$touch-afile[alvin@VM_0_16_centostest]$statfileFile:'file'Size:10Blocks:8IOBlock:4096regularfileDevice:fd01h/64769dInode:371115Links:1Access:(0664/-rw-rw-r--)Uid:(1000/alvin)Gid:(1000/alvin)Access:2019-02-2021:56:40.858021859+0800#只是修改了访问时间的时间戳Modify:2019-02-2021:51:24.848774158+0800#Modify时间不变Change:2019-02-2021:56:40.858021859+0800Birth:-只改变修改时间如果我们只想改变文件的修改时间,加上-m选项即可,m是的缩写词修改。[alvin@VM_0_16_centostest]$touch-mfile[alvin@VM_0_16_centostest]$statfileFile:'file'Size:10Blocks:8IOBlock:4096regularfileDevice:fd01h/64769dInode:371115Links:1Access:(0664/-rw-rw-r--)Uid:(1000/alvin)Gid:(1000/alvin)访问:2019-02-2021:56:40.858021859+0800修改:2019-02-2022:07:39.138701655+0800更改:2019-02-2022:07:39.1387+th:160508-Changetoacustomtimestamp无论是不带选项还是带-a或-m选项,都会将文件对应的时间改为当前系统时间戳。那么如果我们想更改为自定义时间戳怎么办?如何处理?不然怎么能算是穿越呢?我们有两种方法可以更改为自定义时间戳。1.添加-t选项。比如我们把文件的时间戳改成未来的时间:[alvin@VM_0_16_centostest]$touch-t202001012020.20file[alvin@VM_0_16_centostest]$statfileFile:'file'Size:10Blocks:8IOBlock:4096regularfileDevice:fd01h/64769dInode:371115Links:1访问:(0664/-rw-rw-r--)Uid:(1000/alvin)Gid:(1000/alvin)访问:2020-01-0120:20:20.000000000+0800修改:2020-01-0120:20:20.000000000+0800Change:2019-02-2022:13:01.526965566+0800Birth:-这里-t后面时间戳的格式是:[[CC]YY]MMDDhhmm[.SS]具体来说是这样的:CC-年份的前两位YY-年份的后两位MM-月[01-12]DD-日[01-31]hh-时[00-23]mm-分[00-59]SS-second[00-61]2。使用-d选项,我们将使用一种新方法将文件的时间戳更改为过去的时间(2008年奥运会开幕式):[alvin@VM_0_16_centostest]$touch-d'08-August-2008'文件[alvin@VM_0_16_centostest]$statfileFile:'file'Size:10Blocks:8IOBlock:4096regularfileDevice:fd01h/64769dInode:371115Links:1Access:(0664/-rw-rw-r--)Uid:(1000/alvin)Gid:(1000/alvin)Access:2008-08-0800:00:00.000000000+0800Modify:2008-08-0800:00:00.000000000+0800Change:2019-02-2022:25:47.8084900725+th:08-这里的格式时间是:天-month-year不过这里的时间可以很灵活,比如也支持昨天、1年前等模糊时间:[alvin@VM_0_16_centostest]$touch-d'yesterday08-August-2008'file[alvin@VM_0_16_centostest]$statfileFile:'file'Size:10Blocks:8IOBlock:4096regularfileDevice:fd01h/64769dInode:371115Links:1Access:(0664/-rw-rw-r--)Uid:(1000/alvin)Gid:(1000/alvin)Access:2008-08-0700:00:00.000000000+0800Modify:2008-08-0700:00:00.000000000+0800Change:2019-02-2022:31:57.564725604+0800Birth:-除了改变时间,它还可以也改变时区。要更改时区,只需在相应的时区后面加上-d。本文经授权转载自公众号“良墟Linux”。世界500强外企Linux开发工程师梁旭,在公众号分享大量Linux干货,欢迎关注!
