Linux中触摸命令的9个有用示例

Linux中的触摸命令

触摸命令 在 Linux 中用于更改文件时间戳,但是 touch 命令最常见的用法之一包括创建一个新的空文件。

使用 touch 命令,您可以在 Linux 中更改文件和文件夹的访问、修改和更改时间。 您可以更新时间戳或将其修改为过去的日期。

touch 命令的语法非常简单:

touch [option] file

Linux 中的文件时间戳又是什么?

我在之前的一篇文章中详细介绍了 Linux 中的时间戳。 我建议阅读它以获得更好和更清晰的理解。 为了快速回忆,我将在此处列出时间戳:

  • 访问时间 – 上次访问文件的时间
  • 修改时间 – 上次修改文件的时间
  • 更改时间 – 上次更改文件元数据(文件权限、所有权等)的时间

您可以通过以下方式使用 stat 命令查看文件的时间戳:

stat abhi.txt 
  File: abhi.txt
  Size: 10        	Blocks: 8          IO Block: 4096   regular file
Device: 10305h/66309d	Inode: 11940163    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/abhishek)   Gid: ( 1000/abhishek)
Access: 2018-09-02 14:12:24.476483367 +0530
Modify: 2018-09-02 14:12:24.476483367 +0530
Change: 2018-09-02 14:12:24.476483367 +0530
 Birth: -

Stat 命令甚至显示文件的 inode 号。

9 Linux中touch命令的实际例子

现在让我们通过一些简单但有用的示例来看看如何使用 touch 命令。

1.创建一个空文件

正如我前面提到的,这是 touch 命令最常见的用法。 您所要做的就是对文件名使用 touch。

touch <filename>

如果文件不存在,这将创建一个空文件。

touch empty_file
ls -l empty_file 
-rw-r--r-- 1 abhishek abhishek 0 Sep  2 14:37 empty_file

但是如果文件已经存在怎么办? 在这种情况下,它将文件的所有三个时间戳更新为当前时间。

2.创建多个空文件

您也可以使用 touch 创建多个空文件。 只需提供您要创建的文件的名称。

touch <file1> <file2> <file3>

如果您认为编写所有文件名很累,您可以通过以下方式自动生成文件名:

touch new-file-{1..10}.txt

这将创建 new-file-1.txt、new-file-2.txt 到 new-file-10.txt。

3. 如果文件不存在,请避免使用触摸创建文件

如果输入文件存在,Touch 将更新其时间戳,如果输入文件不存在,Touch 将创建一个空文件。

但是如果你不想通过 touch 创建一个新的空文件呢? 您希望它更新文件的时间戳,但如果文件不存在,则不应创建它。

在这种情况下,您可以使用带有 -c 选项的 touch 命令:

touch -c <filename>

记住:如果不存在,Touch 将创建一个新的空文件,否则它将修改现有文件的时间戳。 您可以使用 -c 选项停止创建新文件。

4.更改文件的所有时间戳

如果您对现有文件使用触摸,它将更改该文件的访问、修改和更改时间。

为了 example,我有这个名为 sherlock.txt 的文件,其时间戳如下:

stat sherlock.txt 
  File: sherlock.txt
  Size: 356       	Blocks: 8          IO Block: 4096   regular file
Device: 10305h/66309d	Inode: 11928277    Links: 1
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/abhishek)   Gid: ( 1000/abhishek)
Access: 2018-08-25 09:44:56.092937000 +0530
Modify: 2018-08-09 09:41:05.028309000 +0530
Change: 2018-08-25 09:44:56.096937182 +0530

如果我在此命令上使用 touch,所有时间戳都将更改为当前时间戳。

touch sherlock.txt 
stat sherlock.txt 
  File: sherlock.txt
  Size: 356       	Blocks: 8          IO Block: 4096   regular file
Device: 10305h/66309d	Inode: 11928277    Links: 1
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/abhishek)   Gid: ( 1000/abhishek)
Access: 2018-09-02 15:22:47.017037942 +0530
Modify: 2018-09-02 15:22:47.017037942 +0530
Change: 2018-09-02 15:22:47.017037942 +0530
 Birth: -

注意:您不应该为 ctime(更改时间)而烦恼。 这是一个系统属性,不能/不应该由用户控制。 您的重点应该放在访问和修改时间上。

5.只更新文件的访问时间

您可能并不总是希望更改文件的所有时间戳。 如果您只想更改文件的访问时间,可以使用 -a 选项与 touch。

touch -a sherlock.txt 
stat sherlock.txt 
  File: sherlock.txt
  Size: 356       	Blocks: 8          IO Block: 4096   regular file
Device: 10305h/66309d	Inode: 11928277    Links: 1
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/abhishek)   Gid: ( 1000/abhishek)
Access: 2018-09-02 15:29:08.796926093 +0530
Modify: 2018-09-02 15:22:47.017037942 +0530
Change: 2018-09-02 15:29:08.796926093 +0530
 Birth: -

6.只更新文件的修改时间

如果只想将文件的修改时间更新为当前时间戳,请使用 touch 命令的 -m 选项。

touch -m sherlock.txt 
stat sherlock.txt 
  File: sherlock.txt
  Size: 356       	Blocks: 8          IO Block: 4096   regular file
Device: 10305h/66309d	Inode: 11928277    Links: 1
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/abhishek)   Gid: ( 1000/abhishek)
Access: 2018-09-02 15:29:08.796926093 +0530
Modify: 2018-09-02 15:31:25.770866881 +0530
Change: 2018-09-02 15:31:25.770866881 +0530
 Birth: -

7.使用另一个文件的时间戳

您还可以通过以下方式使用 -r 选项将另一个文件的时间戳作为参考:

touch -r <source_file> <target_file>

这会将目标文件的访问和修改时间设置为与源文件的访问和修改时间相同。

8.设置具体的访问和修改时间

您可能已经注意到,在几乎所有情况下(参考文件除外),时间戳都会更改为当前时间戳。

但你不受此约束。 触摸允许您将访问和修改时间设置为过去或未来的日期。 您可以使用 -t 选项和以下格式的时间戳:

[[CC]YY]MMDDhhmm[.ss]

  • CC – 年份的前两位数
  • YY – 年份的后两位数
  • MM – 一年中的月份 (01-12)
  • DD – 一个月中的某一天 (01-31)
  • hh – 一天中的小时 (00-23)
  • mm – 分钟 (00-59)
  • ss – 秒 (00-59)

在上述情况下,CC 是可选的。 事实上,CCYY 也是可选的,在这种情况下需要当前年份。 同样,秒也是可选的,默认为 00。

让我给你看一个 example 通过将时间戳更改为 12021301,即当年的第 12 个月、第 2 天、第 13 小时和第 1 分钟:

touch -t 12021301 agatha.txt 
stat agatha.txt 
  File: agatha.txt
  Size: 457       	Blocks: 8          IO Block: 4096   regular file
Device: 10305h/66309d	Inode: 11928279    Links: 1
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/abhishek)   Gid: ( 1000/abhishek)
Access: 2018-12-02 13:01:00.000000000 +0530
Modify: 2018-12-02 13:01:00.000000000 +0530
Change: 2018-09-02 15:59:47.588680901 +0530
 Birth: -

如果您尝试输入无效的日期,您会看到一个错误。 您还会注意到更改时间使用当前时间戳,与访问和修改不同。 这是因为它是系统属性。

您还可以将 touch 命令与符号链接一起使用。 您只需要在处理符号链接时使用 -h 选项。 其余部分与常规文件相同。

touch -h <symbolic_link>

我希望这些在 Linux 中的触摸命令示例对您有所帮助。 如果您有任何问题或建议,请告诉我。