教你在 Linux 下时光穿梭

简介: 教你在 Linux 下时光穿梭

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


非也非也,良许在这里要给大家介绍 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 后面跟上对应的时区就可以:

目录
相关文章
|
4天前
|
安全 算法 Linux
探索Linux命令gpgv2:安全通信与数据验证的利器
`gpgv2`是GPG的签名验证工具,用于确保文件完整性和来源真实性。基于公钥密码学,支持多种加密算法和OpenPGP标准。通过`--verify`等参数验证签名,例如`gpgv2 --verify signature_file file`。重要注意事项包括保护私钥、定期更新密钥、验证签名来源及使用强密码。在数据安全场景中,`gpgv2`是保障信息安全的利器。
|
4天前
|
安全 Linux 数据处理
深入探索Linux中的gpgsplit命令
`gpgsplit`是GPG套件的一部分,用于分割大型加密文件或合并加密的OpenPGP消息。它支持ASCII armored和二进制格式,提供按字节数、行数或消息数分割的灵活性,并可合并消息。在处理大型加密文件、安全管理及数据传输中发挥作用。使用时注意保护私钥、备份数据、正确指定格式,并遵循安全实践。示例:使用`--split 10M`将大文件按10MB分割,`cat`多个消息文件并用`gpgsplit --output`合并。
|
4天前
|
Linux 开发者
Linux基础:常用命令及其用途
这些命令只是Linux命令行的冰山一角,但它们构成了日常工作的基础。通过掌握这些基本命令,你可以更有效地利用Linux系统的强大功能。随着你对这些基础命令的熟练应用,你会发现自己能够更快地完成任务并解决问题。
12 2
|
1天前
|
Unix Linux Python
10个必会的Linux命令
10个必会的Linux命令
|
1天前
|
Linux
【Linux】一条命令,转发所有请求到另一台服务器上 -高级技巧
【Linux】一条命令,转发所有请求到另一台服务器上 -高级技巧
6 0
|
1天前
|
Linux 数据处理 Windows
探索Linux中的hexdump命令:数据处理的瑞士军刀
`hexdump`是Linux下的命令行工具,用于以十六进制格式显示和解析二进制文件内容,适用于分析文件结构、查找特定字节序列。它支持多种显示格式(如八进制、十进制)、数据分组和过滤功能。常用参数包括`-C`(混合十六进制和ASCII显示)、`-d`(十进制格式)、`-o`(八进制格式)、`-s`(跳过字节)、`-n`(显示字节数)。通过与`grep`等工具结合使用,可实现更复杂的任务。注意文件大小和选择合适显示格式,对于大文件使用`-n`限制输出。
|
2天前
|
监控 Linux 数据处理
探秘Linux命令行神器:head命令
`head`命令是Linux命令行中的利器,用于显示文件开头的部分内容,常用于快速检查文件类型、结构或日志分析。默认显示前10行,可通过`-n`指定行数或`-c`指定字节数。结合管道与其他命令如`grep`、`sed`、`awk`可实现更多功能。注意在处理大文件和自动化脚本时,合理使用能提高效率。
|
2天前
|
Linux Shell 程序员
【Linux操作系统】命令的运行原理
【Linux操作系统】命令的运行原理
|
2天前
|
Linux
linux命令【JavaPub版】
linux命令【JavaPub版】
8 0
|
2天前
|
Linux 开发工具
Linux下视频截取命令 使用【ffmpeg】使用
Linux下视频截取命令 使用【ffmpeg】使用
8 1