时光穿梭?电影里的桥段吧?良许你又在唬人?

非也非也,良许在这里要给大家介绍 touch 命令,有了它你就可以改变时间戳,达到时光穿梭的目的。

touch 命令在我们的工作中使用也相当频繁,我们就由浅到深来详细讲解。

touch 命令基本用法

提起 touch 命令,大家想到的肯定是它的两个用法:

  • 改变时间戳
  • 创建新文件

这两种用法大家在工作中早已用腻了,良许就不再赘述了。

防止创建文件

如果在 touch 后面直接跟上一个文件名,该文件如果不存在的话,将创建一个相应名字的文件。那么如果我们只想改变文件的时间戳,如果文件不存在时不进行文件创建该怎么做?这里需要加上 -c 选项。

[alvin@VM_0_16_centos test]$ touch -c alvin
[alvin@VM_0_16_centos test]$ ll alvin
ls: cannot access alvin: No such file or directory

仅改变文件访问时间

我们知道,如果不带任何选项执行 touch 命令时,文件的访问时间及修改时间都是同时被改变成当前系统时间。如下所示:

[alvin@VM_0_16_centos test]$ stat file
File: ‘file’
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 371115 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ alvin) Gid: ( 1000/ alvin)
Access: 2019-02-20 14:20:21.154819675 +0800
Modify: 2019-02-20 14:20:21.154819675 +0800
Change: 2019-02-20 14:20:21.191819649 +0800
Birth: -
[alvin@VM_0_16_centos test]$ touch file # 在这里使用 touch 命令
[alvin@VM_0_16_centos test]$ stat file
File: ‘file’
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 371115 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ alvin) Gid: ( 1000/ alvin)
Access: 2019-02-20 21:51:24.848774158 +0800 # 文件的访问时间/修改时间均已改成当前系统时间
Modify: 2019-02-20 21:51:24.848774158 +0800
Change: 2019-02-20 21:51:24.848774158 +0800
Birth: -

这里使用到 stat 命令,可以查看文件更详细的信息。

如果我们只想改变文件的访问时间,只需加上 -a 选项即可, a 即是单词 access 的缩写。

[alvin@VM_0_16_centos test]$ touch -a file
[alvin@VM_0_16_centos test]$ stat file
File: ‘file’
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 371115 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ alvin) Gid: ( 1000/ alvin)
Access: 2019-02-20 21:56:40.858021859 +0800 # 只有访问时间的时间戳被改变了
Modify: 2019-02-20 21:51:24.848774158 +0800 # 修改时间保持不变
Change: 2019-02-20 21:56:40.858021859 +0800
Birth: -

仅改变修改时间

如果我们只想改变文件的修改时间,只需加上 -m 选项即可, m 即是单词 modify 的缩写。

[alvin@VM_0_16_centos test]$ touch -m file
[alvin@VM_0_16_centos test]$ stat file
File: ‘file’
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 371115 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ alvin) Gid: ( 1000/ alvin)
Access: 2019-02-20 21:56:40.858021859 +0800
Modify: 2019-02-20 22:07:39.138701655 +0800
Change: 2019-02-20 22:07:39.138701655 +0800
Birth: -

更改为自定义时间戳

不管是不带选项,还是带上 -a-m 选项,都会将文件相应的时间改为当前系统时间戳。那如果我们想改为自定义的时间戳呢?要怎么处理?否则怎么算得上时光穿梭?

我们有两种方法来更改为自定义时间戳。

1. 加上 -t 选项

比如我们将文件的时间戳改为一个将来时间:

[alvin@VM_0_16_centos test]$ touch -t 202001012020.20 file
[alvin@VM_0_16_centos test]$ stat file
File: ‘file’
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 371115 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ alvin) Gid: ( 1000/ alvin)
Access: 2020-01-01 20:20:20.000000000 +0800
Modify: 2020-01-01 20:20:20.000000000 +0800
Change: 2019-02-20 22:13:01.526965566 +0800
Birth: -

在这里, -t 后面所带的时间戳的格式为:

[[CC]YY]MMDDhhmm [.SS]

具体来讲,是这样的:

CC - 年份的前两位
YY - 年份的后两位
MM - 月份 [01-12]
DD - 日期 [01-31]
hh - 时 [00-23]
mm - 分 [00-59]
SS - 秒 [00-61]

2. 加上 -d 选项

我们再用新方法将文件的时间戳改成一个过去的时间(2008年奥运会开幕式):

[alvin@VM_0_16_centos test]$ touch -d '08-August-2008' file
[alvin@VM_0_16_centos test]$ stat file
File: ‘file’
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 371115 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ alvin) Gid: ( 1000/ alvin)
Access: 2008-08-08 00:00:00.000000000 +0800
Modify: 2008-08-08 00:00:00.000000000 +0800
Change: 2019-02-20 22:25:47.808490725 +0800
Birth: -

在这里,时间的格式为:日-月-年 。但是,这里的时间可以相当灵活,比如也支持 yesterday1 year ago 等等模糊时间:

[alvin@VM_0_16_centos test]$ touch -d 'yesterday 08-August-2008' file
[alvin@VM_0_16_centos test]$ stat file
File: ‘file’
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 371115 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ alvin) Gid: ( 1000/ alvin)
Access: 2008-08-07 00:00:00.000000000 +0800
Modify: 2008-08-07 00:00:00.000000000 +0800
Change: 2019-02-20 22:31:57.564725604 +0800
Birth: -

除了更改时间,它还可以改时区。

更改时区,只需在 -d 后面跟上对应的时区就可以。


公众号:良许Linux

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

教你在 Linux 下时光穿梭的更多相关文章

  1. 5分钟教你在Linux下安装VMware

    如果我们只有一台笔记本,又想要搭建一个小集群,怎么办?虚拟机帮你实现梦想,市面上较为常用的虚拟机软件有VMware.VirtualBox.Xen.KVM.hyper-v等,本文主要介绍如何在Linux ...

  2. 教你修改Linux下高并发socket最大连接数所受的各种限制

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开 文件数量的限制(这是因为系统为 ...

  3. 手把手教你nginx/linux下如何增加网站

    先进入到nginx的配置文件目录请输入以下命令 cd /alidata/server/nginx/conf/vhosts 再输入   ll 看看是不是像下面截图的一样 用神器xftp将default. ...

  4. Linux下安装JDK,Tomcat,Mysql详细教程

    1. 概述 今天教大家在linux下安装jdk,mysql以及tomcat.在javaweb开发中,最后完成的项目代码,一般都是布在linux服务器下的.因为linux服务器可以说是安全性稳定性都比w ...

  5. 一步一步教你如何在linux下配置apache+tomcat(转)

    一步一步教你如何在linux下配置apache+tomcat   一.安装前准备. 1.   所有组件都安装到/usr/local/e789目录下 2.   解压缩命令:tar —vxzf 文件名(. ...

  6. 10分钟 教你学会Linux/Unix下的vi文本编辑器

    10分钟 教你学会Linux/Unix下的vi文本编辑器 vi编辑器是Unix/Linux系统管理员必须学会使用的编辑器.看了不少关于vi的资料,终于得到这个总结.不敢独享,和你们共享. 首先,记住v ...

  7. Linux入门基础教程之Linux下软件安装

    Linux入门基础教程之Linux下软件安装 一.在线安装: sudo apt-get install 即可安装 如果在安装完后无法用Tab键补全命令,可以执行: source ~/.zshrc AP ...

  8. Intellij idea史上最简单的教程之Linux下安装与破解Intellij idea2017

    一.前言 这一节我们介绍在Linux下如何安装与破解Intellij idea2017.现在有很多公司开发环境都是Linux,所以掌握在Linux环境下使用Idea办公也是咱们必须得掌握的技能. 记住 ...

  9. 【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)

    Oracle 11G RAC数据库安装(九) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

随机推荐

  1. html转义字符大全_网页html特殊符号,特殊字符查看对照表(整理)

    在HTML中,某些字符是预留的.比如不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签.如果希望正确地显示预留字符,我们必须在 HTML 源代码中使用字符实体HTML中一 ...

  2. POJ 3463 Sightseeing 题解

    题目 Tour operator Your Personal Holiday organises guided bus trips across the Benelux. Every day the ...

  3. Spreading the Wealth,思维

    题目去洛谷 题意: 很清晰,n个人,每人有一些硬币硬币总数sum≡0(mod n),通过一些互相交换,使硬币数平均(即每人有相同个数的硬币) 分析: 还是有点思维含量的,我们这样想,我们其实就是要确定 ...

  4. 树的深度———树形DP

    题目描述 输入 输出 样例 样例输入 样例输出 7 分析 这道题数据有1000000,把每一个顶点都枚举一次显然不现实,肯定会T掉 所以,我们还是从图中找规律 按照习惯,我们先把1号节点作为根节点模拟 ...

  5. day32 异常处理、网络编程

    目录 一.异常处理 1 什么是异常 2 为什么要处理异常 3 如何处理异常 3.1 语法错误 3.2 逻辑错误 3.3 两种处理逻辑异常的方式 3.3.1 可预知型错误 3.3.2 不可预知型错误 4 ...

  6. Java中的堆和栈以及堆栈的区别

    在正式内容开始之前要说明一点,我们经常所说的堆栈堆栈是堆和栈统称,堆是堆,栈是栈,合在一起统称堆栈: 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Jav ...

  7. 机器学习实战基础(三十七):随机森林 (四)之 RandomForestRegressor 重要参数,属性与接口

    RandomForestRegressor class sklearn.ensemble.RandomForestRegressor (n_estimators=’warn’, criterion=’ ...

  8. ValueError: X needs to contain only non-negative integers.

    for feature in short_cate_feature: enc.fit(data[feature].values.reshape(-1, 1)) base_train_csr = spa ...

  9. Reface.AppStarter 类型扫描 —— 获得系统中所有的实体类型

    类型扫描 是 Reface.AppStarter 提供的最基本.最核心的功能. AutoConfig , ComponentScan 等功能都是基于该功能完成的. 每一个使用 Reface.AppSt ...

  10. 关于PowerShell调用Linq的一组实验

    Windows PowerShell 版权所有 (C) Microsoft Corporation.保留所有权利. 尝试新的跨平台 PowerShell https://aka.ms/pscore6 ...