linux基本功系列之touch命令实战

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux基本功系列之touch命令实战相关的知识,希望对你有一定的参考价值。

(文章目录)


前言

平时在linux操作系统中创建文件,我们都用touch命令,touch命令算的上最常用命令之一了吧,经常有人说,企业常用150个命令,现在学习到第5个,距离150个还有145的距离。冲! :smile:


一、touch 命令的参数

1.1 touch命令的用户

touch [选项]... 文件名...            []表示可选参数

我们根据 --help来查看相关的参数:

[root@itlaoxin41 ~]# touch --help
用法:touch [选项]... 文件...
Update the access and modification times of each FILE to the current time.

A FILE argument that does not exist is created empty, unless -c or -h
is supplied.

A FILE argument string of - is handled specially and causes touch to
change the times of the file associated with standard output.

Mandatory arguments to long options are mandatory for short options too.
  -a			只更改访问时间
  -c, --no-create	不创建任何文件
  -d, --date=字符串	使用指定字符串表示时间而非当前时间
  -f			(忽略)
  -h, --no-dereference		会影响符号链接本身,而非符号链接所指示的目的地
				(当系统支持更改符号链接的所有者时,此选项才有用)
  -m			只更改修改时间
  -r, --reference=FILE   use this files times instead of current time
  -t STAMP               use [[CC]YY]MMDDhhmm[.ss] instead of current time
      --time=WORD        change the specified time:
                           WORD is access, atime, or use: equivalent to -a
                           WORD is modify or mtime: equivalent to -m
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

1.2 我们使用表格整理出最常用的参数

日常工作中我们最常用的参数如下:

参数 含义
-a 创建文件的时候,只改变访问时间
-c,--no-create 不创建任何文件
-d,--data=STRING 解析STRING,并将该时间作为touch要更新的时间,而不是当前时间,STRING格式可以参考date 命令
-h,--no-dereference 不援引只影响符号链接本身,而不修改链接指向的链接源文件的时间戳(前提是系统支持修改链接文件的时间戳
-m 只改变文件的修改时间
-r,--referenc=FILE 使用这个文件的时间,而不是当前时间,即将其他文件的时间戳改得和这个文件相同
--time=string 修改特定的时间:string为access、atime或use时,等同于-a,为modify或mtime时,等同于-m

二、touch使用案例

2.1 创建一个空文件

创建空文件,我们可以直接在touch后面加上文件名

[root@mufenggrow ~]# touch mufeng.txt

2.2 批量创建空文件

[root@mufenggrow test]# touch mufeng1..3.txt
[root@mufenggrow test]# ls
mufeng1.txt  mufeng2.txt  mufeng3.txt

也可以直接写文件名字:

[root@mufeng test]# touch a b c
[root@mufeng test]# ll
总用量 0
-rw-r--r--. 1 root root 0 2月  16 08:00 a
-rw-r--r--. 1 root root 0 2月  16 08:00 b
-rw-r--r--. 1 root root 0 2月  16 08:00 c

2.3 改变或者更新文件和目录的访问时间

这里使用-a参数,加上-a参数只改变文件的访问时间,不加的话,三个时间都会改变。 如果不加-a 参数,三个时间都会变化

图片中有个创建时间,但没有显示任何内容,因为在linux中一般是用访问时间,修改时间和改变时间来去判断创建时间。

3. 拓展: 三种不同的时间

  • 访问时间:atime 查看内容 比如 cat a.txt 会改变访问时间,也就是只要文件的内容被读取,访问时间就会更新
  • 修改时间:mtime 修改内容 比如 vim a.txt会改变修改时间,也就是当文件的内容数据发生改变,此文件的数据修改时间就会跟着相应改变。
  • 改变时间:ctime 修改的是文件属性,比如权限 change time。 chmod +x a.sh,也就是当文件的状态发生变化,就会相应改变这个时间。比如说,如果文件的权限或者属性发生改变,此时间就会相应改变

这里有个创建时间- , linux中没有文件创建时间的概念, 只有访问时间,修改时间和状态改变时间。

如果文件创建后没有被修改过,那么文件修改时间==文件的创建时间 如果文件状态没有改变过,那么文件的状态改变时间==文件的创建时时间

3. 1 单纯访问只修改atime

代码实例:

[root@mufenggrow test]# touch mufenggrow.txt
[root@mufenggrow test]# stat mufenggrow.txt |tail -4
最近访问:2023-01-12 08:26:23.700013272 +0800
最近更改:2023-01-12 08:26:23.700013272 +0800
最近改动:2023-01-12 08:26:23.700013272 +0800
创建时间:-
[root@mufenggrow test]# cat mufenggrow.txt 
[root@mufenggrow test]# stat mufenggrow.txt 
  文件:"mufenggrow.txt"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:16789113    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2023-01-12 08:27:35.870135257 +0800
最近更改:2023-01-12 08:26:23.700013272 +0800
最近改动:2023-01-12 08:26:23.700013272 +0800
创建时间:-

3.2 修改ctime

ctime是文件属性的修改,比如权限 change time。 chmod +x a.sh

改变权限,ctime发生了改变。

3.3 mtime的修改

只要进行修改,三个时间都会变化

通过时以上实验我们得出一个结论: touch 命令可以只修改文件的访问时间,也可以只修改文件的数据修改时间,但是不能只修改文件的状态修改时间。因为,不论是修改访问时间,还是修改文件的数据时间,对文件来讲,状态都会发生改变,即状态修改时间会随之改变(更新为操作当前文件的真正时间)。

其他问题补充

  1. 如果文件已经存在,当我们创建一个同名的文件的时候,会不会覆盖原来的内容?

经过测试,我们发现,文件内容在,意味着创建同名文件不会覆盖原来的文件,但是会修改访问时间

  1. 使用echo追加内容,访问时间会变化吗?

实验结果: 如果使用echo命令追加内容,访问时间不会有变化,但是ctime和mtime都会响应改变。


总结

touch命令我们就学完了,今天是150个基础命令的第5个,继续加油。

以上是关于linux基本功系列之touch命令实战的主要内容,如果未能解决你的问题,请参考以下文章

linux基本功系列之sort命令实战

linux基本功系列之kill命令实战

linux基本功系列之rpm命令实战

linux基本功系列之grep命令实战

linux基本命令touch实战

linux基本功系列之cat命令实战