码迷,mamicode.com
首页 > 系统相关 > 详细

从零开始的linux 第十六章

时间:2017-11-05 17:31:37      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:rm -rf /*     glob通配符的用法详解

从零开始的linux 第十六章


路人乙:“啊,小编你越来越过分了,这次居然推迟了一天才来!!”

(嬉皮笑脸)嘻嘻~~抱歉啦同学们,小编昨天因为做LNMP以及负载均衡的DR工作模式的时候出了点小问题,原理部分与小编理解的有点误差~~不过小编这么厉害肯定是已经解决啦~~

技术分享

那么,虽然迟到了一天,今天小编打算加班,嗯,没错~~小编这次会把上一章因为紧急事态遗留的问题和这章的内容一起讲~

唉??什么?你说为什么上一章不推迟一天?这个嘛,因为小编是很守时的~~就算讲的内容少,也要坚决在周六更新~~怎么可能会推迟一天党务大家学习呢~~

(教室中的声音):“胡说八道!!明明每次给我们讲课都迟到!而且这次就推迟了一天更新!!”

 ......

(小编面带微笑地背对着这名正在被保安拖出教室的学生)

(面带微笑)那么~同学们还有什么问题吗~~小编都会给同学们解答的哦~~

技术分享

(↑同学们):“没有了~小编说什么都是对的~~”

很好,那小编就开始讲课啦~~


上一章,因为紧急事态,小编的内容有点少,补充了一下第十四章的内容~shutdown的定时关机或重启的广播,以及rm删除文件的一些选项和简单用法~这章小编接着上一章遗留下来的部分给同学们介绍一下为什么rm是一个危险的命令~~


上次小编跟同学们说,可以用 -f 选项来强制删除,-r 可以删除目录,那么,在删除普通文件的时候用 -r 依然是不会报错的~

技术分享

需要确认删除,是因为系统默认加了一个别名 rm = "rm -i" 至于别名的用法,小编在很久以前跟同学们讲过,相信不用再做什么过多的介绍了~~不过,关于别名,小编在这里还是要补充一下,至于当存在命令别名的时候,但我们不想用这个别名的功能,而想用这个命令本身的功能什么办呢??可以在命令前面加上"\"反斜杠,可以让这个别名不生效,而使用这个命令本身的功能

技术分享


以上,rm 命令的用法是非常简单的,而对于这个命令,常用的组合选项就是 -rf,也就是 -r -f 两个选项一起使用,因为要删除的既有普通文件,又有目录文件,-f 强制删除也可以省去很多麻烦。

技术分享

删除文件的时候没有任何的提示信息,那我是不是可以删除"/"目录呢~~学了文件系统,同学们应该明白删除"/"意味着什么~那小编就来试试~~

技术分享

很遗憾是不会让你删除的~~这是因为之前很多运维工作者都因为这个而吃尽苦头呢~~什么??你说让我进到"/"目录下再试试??

技术分享

哼哼,没有用的~~为什么之前的运维工作者会产生这种悲剧呢~~当然是误操作啦~rm -rf 这个命令删除时可不会有任何的提示信息,并且立即删除的~~至于为什么会误操作,小编给同学们举个栗子~~

比如小编现在在家目录下,要删除一个在/app/目录下的zzc文件

技术分享

因为手快,把目录给打错了,这时候手快按Backspace键返回操作

技术分享

直到返回到这个位置,还没来得及输入正确的目录,返回键与回车键中间间隔比较近,然后手快“啪叽”按了一下回车。

技术分享

美好的日常生活就这么结束~~赶紧背上行李箱,慌忙的跑路....

不过这种事情是不会发生在同学们身上的~~现在已经不能直接删除咯~~听过之前的版本是可以直接删除的~~现在呢,要删除的话需要在根后面加上一个通配符~~

技术分享

比如像这样,然后“啪叽”按一下回车

.....小编已经按了回车.....

技术分享

..没..没关系,没有执行过 rm -rf /* 的运维工程师不是好工程师。

不过,同学们看小编的截图上的内容,似乎提示的是没有删除,但是请仔细目录,小编的截图中是/proc/目录下的文件。而真实的情况是...系统已经不可用了

技术分享

技术分享

大部分命令都已经不能用了~~咦??cat 命令还能使用,不过这个命令也就相当于不能用,因为,现在系统中的所有文件,都已经被删除了~~那小编现在重启一下,应该就不行了

技术分享

啊~~连 reboot 重启命令都不行惹~~那就只有拔电源啦~~

技术分享

启动不起来呢~~不仅仅是少了截图上的这个东西,而是所有系统中的东西,启动需要依赖的东西都会没有惹~~~


所以这个命令是很危险的,虽然删除根目录可能不太现实,因为就算误操作,也不会多输入一个"*",但是系统中的文件,以及库文件~~同学们可要小心点哦~~


那么,以上就是上一章遗留的内容,上面小编提到了一个概念叫“通配符”,并且在删除根的时候也用到了,通配符是什么呢?小编下面就给同学们介绍一下通配符


在linux中,有时候我们要去寻找一个文件,或者对一类文件做一些操作,当我们要寻找一个文件的时候,忘记了这些文件的名称,但知道这个文件名的部分名称,而根据我们已知的部分模糊的查询文件名中包含我们已知的字符的文件,这个操作就叫"模糊匹配"。所用到的匹配的符号,就叫"通配符"

而通配符也是有多种风格,我们经常使用的是"glob风格"的通配符,这些通配符为:

*:匹配0或多个字符

技术分享

不知道我们不知道文件,但只知道目录时,可以用这种方法列出指定目录下的所有内容,但是这个目录下的子目录中的内容也会被显示出来,这是"*"最简单的用法,当然,它既然是匹配0个或多个字符的,小编是不是可以在文件名的前面或后面加,表示以指定字符开头或指定字符结尾的呢?

技术分享

小编创建的以A开头的文件是一个目录,使用这种方法,会把所有以A开头的文件列出,但所有以A开头的目录会显示其目录下面的内容

技术分享

这种用法,可以表示任何以wa结尾的文件

注意哦~小编说的是通配符是可以匹配字符的,不仅仅是能匹配文件名!

?:匹配任意一个单一字符

上面的*是可以匹配任何长度的字符,但 ? 只能匹配一个字符

技术分享

以上两个仅能匹配连续的字符,若是不连续,且不知道顺序,这时候就需要用到范围匹配

[]:匹配指定范围内的单个字符

将要匹配的范围写在[]中,不需要隔开,隔开也无所谓啦~但是!要用","隔开

  [0-9]:匹配数字范围,范围是0-9

技术分享

匹配以 a 字符开头,后面是 0-9 任何一个数字的字符

技术分享

这个意思就是,以 23 字符开头,后面是0-9中任何数字,并匹配0次或多次。

技术分享

匹配以 a 字符开头,后面是一个0-9中任何一个数字,再后面是任何一个字符的字符

  [a-z]:匹配字母范围,范围是[a-z],不区分大小写

这个用法和上面的范围一样,小编就不再做演示了

  [A-Z]:匹配字母范围,范围是[A-Z],区分大小写

这个根据小编说的意思就可以知道区别啦~~小编也不做演示了


那么,根据以上两个的示例,匹配包含 mnl 字符要怎么做呢?路人甲回答~~

路人甲:“唉??内个...在 mnl 字符的前面和后面加上*”

没错~~看来路人甲同学有认真听课呢~~相比那边的男生们可真是强太多了

路人丁:“哇~~小编大人,我和路人丙也有好好听课的,你只是,没有提问我们而已”

那好吧,路人甲已经说出来解题的思路咯,你们就来操作一下吧

技术分享

(↑路人丙的做法)


技术分享

(↑路人丁的做法)


技术分享

(↑突然暴躁)你们两个笨蛋没有听题吗!!还说有好好听课!!小编说的是包含mnl字符!!你们两个写的是以 m 或 n 或 l 开头的所有字符!!

技术分享

↑这才是小编那道题的正确做法哦~~路人丙和路人丁的做法是另一种含义~~


  [[:upper:]]:匹配任意大写字母

这种用法,小编先解释一下,两个[]的意思,最外层的[]才是范围匹配用到的[],而里面的[]号则是固定的格式,是这个通配符自带的

技术分享

前面是大写字母,后面是一个字母不区分大小写,再后面是任意字符。小编这是举个栗子,而这个通配符,实际上是可以换成 [A-Z] 的,这些用法,同学们可在不同的场景下选择使用不同的通配符

 [[:lower:]]:匹配任意小写字母

用法与上面一样,小编就不做过多的演示了

 [[:alpha:]]:匹配所有字母,不区分大小写

 [[:digit:]]:匹配所有数字

 [[:alnum:]]:匹配所有字母和数字

这个要注意,匹配的是所有字母和数字,字母是不区分大小写的,与"*"通配符不相同,*通配符是会将所有字符都匹配到,而这个字符不一定会是字母或数字,有可能是特殊符号,所以有时候要匹配所有字母和数字,使用这个通配符更为准确。

技术分享

很明显,c> 文件带有特殊字母


路人甲:“小编大人,我怎么创建不了带特殊符号的文件?”

同学们不要急嘛~~特殊符号是有特殊含义的,有些情况要是用这些符号,不想使其带有特殊含义,需要将这些特殊符号转译,至于如何操作,小编以后给同学们介绍。


 [[:space:]]:匹配所有(水平或垂直)空白字符

这个通配符也是很有用处的一个,但是小编现在一直都在一起文件名方式给同学们演示这些匹配如何操作,是因为匹配文件中的内容需要用到的管道以及文本过滤的命令还没有给同学们讲到,在匹配文件中的内容,对文件内容过滤时是很有用的。

水平字符就相当于同学们平时使用的空格,以及TAB键所产生的字符,空格也是占一个字符的~~

垂直字符则相当于回车键

这个用法与上面都相同,所以就不再演示了

 [[:blank:]]:匹配水平空白字符

对于什么是水平字符,小编上面已经说过,用法同样与上面相同,在文本内容过滤中也是有很大作用,但相对于[[:space:]]通配符来说,所匹配的空白字符的范围较小

 [[:punct:]]:匹配所有标点符号

这个通配符相对于以上的一些通配符来说,就显得不那么重要,用到的地方并不多,反正小编到现在还没有用到过这个通配符

 [[:print:]]:匹配可打印字符

这个可打印字符,小编还是演示一下跟同学们解释

技术分享

所谓可打印字符,就是所有可以输出的字符,所有可以看得见的字符,这个感觉就相当于"*"通配符一样,同样,小编到现在还没有使用过,包括下面的两,同学们了解一下就好。

 [[:cntrl:]]:控制(非打印)

对于这个,小编也不是很理解其中的意思,没有用到过这个,包括下面的,同学们了解一下就好(吐槽:这不靠谱的小编!!)

 [[:graph:]]:匹配图形字符

 [[:xdigit:]]:十六进制字符


上面这些就是glob风格的文件通配符,注意咯:这些通配符不仅仅只是用来匹配文件名的,文件中的内容也可以用这种方法匹配,不要仅仅局限于小编举的这些例子哦~这些通配符都是可以组合起来使用


虽然很想继续和大家讲~但是同学们要熟练的掌握通配符可能也需要时间呢~~所以小编这次就到这里吧~~


                                             The END

本文出自 “13125850” 博客,请务必保留此出处http://13135850.blog.51cto.com/13125850/1979098

从零开始的linux 第十六章

标签:rm -rf /*     glob通配符的用法详解

原文地址:http://13135850.blog.51cto.com/13125850/1979098

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!