每日命令 | touch、mkdir – 作者:noobsec

01 命令简介

任何事物都有生命周期,Linux中的文件和目录也一样:创建、修改、删除。今天我们来讲一讲文件和目录的创建。

touch——修改文件的访问时间和修改时间(可用来创建空文件)


1-touch.jpg

mkdir——make directory,创建目录


2-mkdir.jpg

02 命令详解

语法

mkdir  [选项] 目录名
touch  [选项] 文件名

mkdir和touch两条命令,都有选项和参数。只不过mkdir命令的参数是目录名,而touch命令的参数是文件名而已。

这里跟大家强调一下:选项和参数的可选,不同命令的要求是不一样的。

选项对命令来说,一般都是可选的。参数是否可选,不同命令有各自的规定。如果可选,我会添加方括号“[ ]”;如果不可选,也就是必需,则不会添加方括号“[ ]”。

因此,语法中选项加了“[ ]”,代表选项不是必需的,可以省略;但两条命令的参数,我都没加“[ ]”,证明这两条命令在使用时必需提供参数。请各位校友注意这些细节。


3-touch.jpg

可以看到,系统明确提示命令缺少操作数,也就是参数。

参数

mkdir  目录名

mkdir命令的参数是要创建的目录的名字。严格来讲,参数是要创建的目录的路径名。

我们可以只提供要创建的目录的名字。这种情况下,系统会在当前的工作目录中创建目录。


4-touch.jpg

可以看到,在当前的工作目录中创建了new_dir目录。另外目录名可以包含空格,但这个时候目录名需要用引号括起来。


5-touch.jpg

我们也可以指定目录的路径。这个时候,就会在我们指定的路径下创建目录。


6-touch.jpg

这两者可以想象成软件的默认安装和自定义安装,这样可能形象些,方便大家理解。

如果要创建的目录已经存在,系统则会报错,提示目录已经存在。


7-touch.jpg

touch命令,主要是用于修改文件和目录的访问时间和修改时间,但默认情况下,参数指定的文件不存在的话,touch命令会创建该文件。


8-touch.jpg

和创建目录一样,不指定路径的话,会在当前工作目录创建文件。我们也可以指定文件路径。


9-touch.jpg

选项

mkdir命令和touch命令可以同时处理多个参数。在提供多个参数时,我们只需要用空格分隔参数即可。


10-touch.jpg

可以看到,在同级目录中创建了两个目录和文件。那可以在新建目录的同时,再在其中新建一个目录吗?

试试看。通过如下命令在创建father_dir目录的同时,在其中新建son_dir目录。

mkdir father_dir/son_dir

11-touch.jpg

发现系统报错,原因我在图片中已经标明。这条命令的意思根本不是在新建father_dir目录的同时,在其中新建son_dir目录,而是在当前目录的father_dir中新建son_dir目录,这其实是在指定新建目录的相对路径。但此时当前目录并不存在father_dir目录,所以系统才会报错。

那难道只能新建一个目录,然后切换到新目录中再新建子目录,这样一层一层进行吗?

当然不是的,如果只能这样的话,几十层的目录创建不得创建半天?当然一般也不会有这么多层。

mkdir命令提供了一个很人性化的”-p“选项,让我们可以很轻松的实现这些工作。

mkdir -p  目录名/目录名/.../目录名

12-touch.jpg

加了”-p“选项后,系统没有报错,在新建father_dir目录的同时,在其中新建了son_dir目录。

这就是”-p“选项的功效:创建通向指定目录但尚不存在的所有目录。换句话说,就是将路径中不存在的目录全部创建。

father_dir/son_dir,最开始,当前目录不存在father_dir目录,就先创建father_dir目录;创建完后发现father_dir目录下没有son_dir目录,就继续创建son_dir目录,直到路径中所有目录都存在。也有人把这称为“递归创建”。


13-touch.jpg

mkdir命令常用的选项还有“-v”选项和“-m”选项。“-v”选项的作用是每创建一个目录就打印一条信息,“-m”选项的作用是设置目录的权限。这里先介绍一下“-v”选项,“-m”选项等以后介绍权限时再讲。

上一章节说到要创建的目录如果已经存在,系统则会报告,那么如果创建的文件已经存在,系统会报错吗?

14-touch.jpg

可以看到,系统并没有报错,但好像也看不出有啥区别。这就涉及时间属性了。


15-touch.jpg

利用长格式查看详细信息,发现两次命令后,文件时间不一样。我们可以使用stat命令查看文件更为详细的状态信息。


16-touch.jpg

列出的信息中有三个时间。

Access:访问时间;读取但不修改文件内容
Modify:修改时间;修改文件内容
Change:改动时间;属性和位置的改动

在文件存在的情况下,touch命令默认会修改文件的访问时间和修改时间。但它提供了“-a”选项和“-m”选项,分别只修改访问时间或修改时间。

touch -a file.txt

17-touch.jpg

“-a”选项,只改变访问时间。

touch -m file.txt

18-touch.jpg

“-m”选项,只改变修改时间。

除了可以指定修改哪种时间属性,还可以指定时间属性的值(默认是当前时间)。

指定时间属性的值有两种选项:”-t“选项和”-d“选项。效果一样,只是值的格式不一样而已。


19-touch.jpg

“-t”选项的时间格式为:

[[CC]YY]MMDDhhmm[.ss]

其实就是世纪、年、月、日、时、分、秒的英文首字母。


20-touch.jpg

“-d”选项相对“-t”选项,时间格式会多一些。图片中是其中的一种,其他格式这里不再赘述,有兴趣的校友可自行查询资料。

touch命令还有个“-c”选项。在默认情况下,如果文件不存在,touch命令会新建空文件;加了“-c”选项之后,就不会创建文件。


21-touch.jpg

03 知识总结

语法:
   mkdir  [选项] 目录名
   touch  [选项] 文件名 用途:
   mkdir————创建空目录
   touch————修改文件和目录的访问时间和修改时间(默认情况下创建空文件) 参数:
   mkdir:目录的路径名(若只提供目录名,则在当前工作目录中创建目录)
   touch:文件的路径名(若只提供文件名,则在当前工作目录中创建文件)选项:
   mkdir:-p————递归创建
   touch:-a————只更新访问时间
          -m————只更新修改时间
          -t、-d————指定时间属性的值
          -c————即使文件不存在也不创建文件
其他:
   stat命令:查看文件或文件系统的状态信息

来源:freebuf.com 2019-05-06 11:16:08 by: noobsec

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论