Linux-Linux基础指令2

1.touch指令

语法: touch [选项]... 文件...

功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件

对于新建一个文件,在前面的博客里都见过如果创建的,比如,我们在/root下建一个名为code.txt的文件:

此外touch还可以创建各种类型的文件,但是如果我再创建一遍code.txt文件会发生什么?

我们发现,这样会导致文件属性被修改,那么文件内容会被修改吗?

要理解这个问题,我们需要向code.txt写入内容,再重新尝试一下:

我们再次打印code.txt里面的内容会不会打印成功呢?

很显然,这个操作是被允许的,所以结论是:如果我们在Linux创建了一个已经存在的文件,则它的属性会被修改,而内容不会被修改。

1.1stat指令

stat是state演变过来的,state翻译过来就是状态,而在这里,stat指令是用来查看文件的其他属性的,如:大小,名称等,比如,我要查看之前创建的code.txt的属性:

这里面有四个时间,英语好的应该知道这四个单词的意思,Access访问、Modify修改、Change更改、Birth出生(被创建),通过了解这些指令,我们再进行一遍重新创建操作会怎么样?

我们发现,这三个时间都会被改变,所以touch可以修改更新文件时间。

针对touch指令有几个常用选项。

1.2-c选项

我们先touch -c code.txt然后再stat code.txt会有:

正常情况下,前三个选项全都会被修改。

但是如果我们再写入一段内容并用stat code.txt试一下就会发生改变:

通过观察该图和上图我们发现,Modify和Change两个属性被修改了,所以这就代表如果我们更改了一个时间可能会带动其他的时间同步更改,这个是正常的现象。

实际上,Access在不同的系统上表现不一样,在ubuntu下,这个在touch -c的时候会被同步修改,而其他的系统可能就不会了,这个是一种差异。

1.3-m选项

若touch -m code.txt并stat code.txt会发生什么呢?

相对于-c选项的三个属性被修改来看,-m选项只修改了Modify和Change两个属性。

1.4-a选项

如果我们输入touch -a code,txt并用stat code.txt试一下呢?

可以看到,这个选项能修改Access选项和Change选项。

针对touch指令,这里只要了解它能创建文件即可,其他的选项现在看来只能修改一下,之后有用的时候会再进行讲解。

1.5touch指令批量创建文件

如果我们想要创建一百个以file开头.txt结尾的文件,就可以用:

bash 复制代码
root@lavm-dzlb5y1t8a:~# touch file{1..100}.txt

这样操作的运行结果是:

如果想要全部删除,则:

bash 复制代码
rm -f file{1..100}.txt

若不带这个-f,它会从开始删的第一个文件一直询问你是否删除,这样就可以进行批量删除不询问(实际操作过程中,还是不要带-f,防止误删!)。

至于原理,现在可能解释不清楚,需要到后面才能解释。

2.mkdir指令

mkdir是 makedirectory的简写,即新建目录。

语法:mkdir [选项] dirname

功能:在当前目录下创建一个名为"dirname"的目录。

例如,我要在/root下创建一个名字为12.14的目录,则直接mkdir 12.14即可:

-p选项

解释:可以是一个路径名称,若此时路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。

这个解释确实有点难懂,那么我们就可以这样操作:

先tree .(这个需要自己安装,各位可以去搜一下,或者试一下这个指令:ubuntu下安装tree:apt install -y tree,如果是CentOS,则为yum install -y tree)然后mkdir -p a1/a2/a3/a4,再用tree .看一下结果:

其中tree可以按照当前目录以树形结构展开,也就是和我们之前的多叉树那样展开,类似以当前目录为根节点的多叉树。

如果还是不懂的话,我们可以进入a1在ls,然后继续进入子目录看一下:

可以发现,我们创建了以a1为最初始的目录,以a4为最末目录的一串路径,也就是说mkdir -p后面接一串路径可以创建一串路径。

那么tree到底是什么呢,tree其实就是将当前目录以树形结构展开,比如我们另外一个路径/root/d1/d2/d3,我们可以不断tree看一下结果:

实际上,我们还可以把这个.换成绝对路径如:

tree输出的最后一行还会统计当前目录下的所有子目录数和所有文件数,如:

bash 复制代码
2 directories, 0 files

代表此目录下有两个子目录(子目录还有子目录也算,也就是说孩子的孩子还是我的孩子,子目录的子目录还是我的子目录)和一个文件。

3.rmdir指令

语法:rmdir [-p] [dirName]

适用对象:具有当前目录操作权限的所有使用者;

功能:删除空目录

如我要删除12.14,可以这样删:

那如果我想删除d3,则可以这样删:

那我如果想要把不存在的文件删除,比如我想删除12.07怎么办?

我们翻译一下这个报错就是:删除名为12.07的目录失败:没有匹配的文件或目录。

那么如果我删除的目录存在,但不是空目录(有子目录或文件)呢?

这个操作也会报错,大致意思是:目录不为空。

3.1-p选项

当子目录被删除后,如果父目录也变成空目录的话,就连带父目录一起删除,如:

前面几个操作是没法正确删除d2的,这个要注意。

如果我rmdir -p a4,它会删除a1吗?

实际上使用rmdir不是我们删除目录的一个常用方式,因为它只能删除空目录,对于不是空目录或者我们未知该目录是否为空的情况下,这个rmdir就不适用了,而且很多情况下,我们删除的目录下基本是不为空的,所以需要用另外一种删除方式。

3.2rm指令

rm指令可以删除所有文件:

但是不能删除目录:

如果我们使用rm指令删除有内容的文件,可以进行如下操作:

若想在使用rm的时候是询问我们是否删除,则用rm -i进行操作:

如果要删除目录,怎么办?

3.3rm -r操作

rm -r操作可以用来删除目录,如果该目录为空,会先询问你:是否要删除该目录:

此时输入y代表选择yes,也就会直接删除了;如果输入n代表选择no,则不会删除:

但是如果不为空目录呢,会怎么样?

实际上,删除不为空的目录的时候,因为它可能是一个多叉树,所以它会一层层从最底层往上进行删除,每次删除时都会问你是否删除该文件,如:

这句话代表是否进入d1目录,如果输入y则代表进入,输入n代表不进入,如果选择了n,则会直接停止询问,如果选择了y则会继续询问是否进入d2,如果一直选择y,则会有如下效果:

只要中途有一个选n,则就停止删除。

但是这样老询问,太麻烦了,所以,我们可以直接:rm -rf d1:

其中,-rf代表删除且不询问(一直选yes选项)。

但是非常不建议rm -rf 目录,因为文件不能随便删除的,如果后续学习文件多了的话,有些文件删除掉可能会导致一些问题,所以建议不要动不动就为了方便就进行rm -rf操作,也非常建议各位在删除文件时使用rm -i操作,而非rm操作,因为文件可能会直接被删除了,这样还有反悔的机会!!!

3.4Linux中的*

*:匹配当前目录下的任意文件名。如:

我们通过ls *.c以及各个*的应用知道了,*可以匹配任意类型的文件名,如*.c则匹配后缀为.c的文件,code.*则匹配前缀为code的文件,那如果有目录呢?

我们可以发现:如果是目录名,则会在查找完文件后的下面显示目录。

4.总结

这些指令是Linux中常见的指令,如果多加应用,掌握起来还是很简单的!

相关推荐
liulilittle2 小时前
TC Hairpin NAT 驱动使用手册(个人版)
服务器·开发语言·网络·c++·网络协议·tcp/ip·tc
是店小二呀2 小时前
Docker部署EasyNode+内网穿透:轻松实现服务器远程管理
服务器·docker·容器
一招定胜负2 小时前
在 Windows 11 家庭版安装 Docker Desktop解决虚拟化问题
运维·docker·容器
hweiyu002 小时前
Linux命令:screen
linux·运维·服务器
i建模2 小时前
Docker API 版本冲突问题
运维·docker·容器
Elastic 中国社区官方博客2 小时前
使用 TypeScript 创建 Elasticsearch MCP 服务器
大数据·服务器·数据库·人工智能·elasticsearch·搜索引擎·全文检索
Meya11272 小时前
告别机房 U 位管理内耗!这套系统让运维效率直接拉满 ✨
大数据·运维·人工智能
小义_2 小时前
【RH134总结】 八
linux·运维·服务器·云原生·红帽
nbsaas-boot2 小时前
AI编程的现实困境与未来路径:从“可用”到“可靠”的跃迁
java·运维·开发语言·架构