那接下来看看文件的创建和删除,那我们怎么去创建一个文件?各种方式都能实现,当然,这里先说一说,就像mkdir创建空目录一样,我们如何创建一个空文件?创建空文件其实很简单,有一个命令歪打正着,它本来不是用于创建文件的,却可以用拿来创建文件,这个命令叫做touch,touch什么意思?摸一下,是不是这意思,所以我们touch一个,比如说,touch a,如下图,
底下有个a,file a,如下图,
那么,这是个空文件,没错吧?好,这就创建空文件了,现在有个文件叫a了,我在创建目录a行不行?可不可以?为什么呢?目录是文件吗?它其实是文件,只不过是一种非常独特的文件,它是用于引用其他文件的文件,那所以能创建目录叫a吗?mkdir a,如下图,
它说a已经存在了,你创建不了a目录的,一定要注意,在linux下,目录和文件是不能同名的,
那在Windows下,为什么可以?那我明确告诉你Windows下,它也不可以,事实上,不可以,Windows下创建的任何文件默认都有后缀的,只是你看不见而已,不是吗?创一个a.txt,再创建目录a呢,也没问题啊,比如我先看我创一个目录叫x,我再创建个文件叫x.doc,它俩文件名一样吗?显然不一样,这个Windows没让你看见而已。文本文件叫什么,.txt,所以在Windows下它也不可以,这个要记得好。那我们touch的时候可以创建一个文件,但是要记得touch的命令的主要目的不是用来创建文件的,是用来干什么呢?摸一下显然不是为了创建,对吧?来看,man touch,如下图,
叫change file timestamps,叫修改文件的时间戳,它是用于修改文件的时间戳的,说过一个文件都有三个戳是吧?最近一次的访问时间,最近一次的修改时间,最近一次的改变时间,
其实我们可以查看的来看下这个命令叫stat,man stat,如下图,
叫display file or file system status,什么意思?显示文件或文件系统的状态信息,当然我们先不考虑那么复杂,我就直接打开一个文件看看,state a,如下图,
看显示信息是什么?文件名、大小、数据块、IO块、等等,叫a没错,看底下这三个,最近一次的访问时间、修改时间、改变时间,并且这里显示为东八区的,看到没有?就是我们时区,那再看,那么touch下会有什么结果?看当前时间,我们使用date是不是?如下图,
是23点40分11秒,然后我touch a,再state a,看看效果,如下图,
什么改了,全改了,是不是时间戳改掉了,所以touch a并不是创建a的,只不过a不存在的时候,它会自动创建而已。touch主要目的是改时间戳的,来看man touch,如下图,
有个选项叫做-c,它有个长选项叫--no-create什么意思?叫不创建任何文件,什么意思?我本来是修改时间戳的,如果你不存在,那就创建,默认是不是这样子?否则的话,加-c就不常见了,看看我们底下有个文件叫c吗?没有那,touch -c 看看,ls有没有叫c的文件,如下图,
所以我说这是touch的作用,所以touch歪打正着它能创建空文件。
那我们接下来看看,既然说到touch了,就来看看touch怎么去修改文件时间戳,在某些情况下,这个还是很有用的一种手段,尤其是对那些黑客们,可能会经常用这个命令。它应该怎么用?我们怎么去改变一个文件的时间戳,比如说我只想改变它一个时间戳,而不是全部的,看-a只改变访问时间,再看-m只改变修改时间,没有说只改变改变时间,好像没有,是不是,为什么呢?因为你的任何属性修改,包括时间戳修改,它是不是也就意味着属性给改了?无论如何,属性改是绕不过去的,这点是无法作假的,不然文件系统就错乱了。
所以修改时间和访问时间都可以改,但改变时间不能改,这个要记得,那改成什么时间呢?比如再看date,再state看一下,如下图,
访问时间改了,发现这个访问时间一改,它的文件属性是不是就改了,因为时间戳也是文件的属性,所以最后一个改变时间是不是也改了,但最近一次的修改时间没改,同样的道理,如下图,
最近一次访问时间没动,但修改时间改变了,修改时间也是属性信息,它一改改变时间也会变,我们指定的修改,实际上都改为了当前时间,对吗?那如果我们想指定时间怎么办?比如说本来这个文件上一次的修改时间是过去的某个时刻,我们偷偷的在里边新增了一些内容,那时间戳是不是改变了?我想做成好像从来没改过的样子,那该怎么改回去呢?把它改为一个过去的时间,-t直接指定时间,使用这种格式,年月日小时分钟.秒钟。那因此你看我使用 touch -m -t 202312121212.30 a,再看stat a,如下图,
这样就把它的最近一次的修改时间指定到了某个时间而不是当前时间这就是我们的touch命令。其实它还是挺常用的命令,当然,我们也讲了state命令的用法。这两个命令都要记得的,touch和state,touch的选项的-a、-m和-t,对吧?还有-c不创建文件。好,这是如何去创建一个文件。