1. 程式人生 > >從零開始的linux 第十六章

從零開始的linux 第十六章

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 第十六章