《調教命令行06》條條大道通羅馬,羅馬羅馬你在哪(學習技巧)

原創:小姐姐味道(微信公衆號ID:xjjdog),歡迎分享,轉載請保留出處。任何不保留此聲明的轉載都是抄襲。linux

你可能遇到一些棘手的問題,經過搜索獲得想要的結果,但下次仍是要經過搜索解決問題,這種低效的手段不是咱們所想要的。典型的就是一個線上運維工程師,當問題來臨時,不會給你留太多的現場學習時間。ios

爲了達到更高效的訓練,咱們要作兩件事情:第一,總結概括;第二,舉一反三。Linux的命令也是如此,一個問題,一般會有多種解決方式,要經過變化找出其中的共性。程序員

這涉及到一些設計者對於規範約定俗成的遵照。通常的,你只須要掌握一小部分命令,而後對大批命令達到了解的程度,就能夠在命令行的世界裏遊刃有餘。舉個例子,你知道ls是列出文件目錄,你就會聯想到lscpu是列出cpu信息;lsmem是列出內存信息;lsblk是磁盤信息等。這種共性不少,好比top系列,stat系列。正則表達式

一、輔助信息

1.一、文件格式

在Linux上工做,是很是很是排斥二進制這種格式的,幾乎什麼都是能夠讀寫的文本內容。大多數命令生成的結果,也都是文本文件。這些文件有一些特色,一般列與列都是經過空格或者<TAB>鍵分隔的。好比下面lsmem的結果,這種有規律的,有章可循的文件,是很是容易被處理的。vim

[root@localhost ~]# lsmem 
RANGE                                  SIZE  STATE REMOVABLE BLOCK
0x0000000000000000-0x0000000007ffffff  128M online        no     0
0x0000000008000000-0x000000000fffffff  128M online       yes     1
0x0000000010000000-0x0000000017ffffff  128M online        no     2
0x0000000018000000-0x0000000027ffffff  256M online       yes   3-4
0x0000000028000000-0x000000004fffffff  640M online        no   5-9
0x0000000050000000-0x000000005fffffff  256M online       yes 10-11
0x0000000060000000-0x000000007fffffff  512M online        no 12-15

Memory block size:       128M
Total online memory:       2G
Total offline memory:      0B
複製代碼

有一大批針對於行操做的命令,一樣有一批針對於列操做的命令。而後,有兩個集大成者,叫作sedawk。因爲這兩個命令的內容很是多,咱們將其列爲單獨的章節。bash

1.二、幫助信息

一般linux命令都十分簡單,可是有些仍是有些複雜度的。好比findps這種命令,若是要照顧到全部的場合,可能須要很是巨大的篇幅。可是,萬一用到這種偏門的場合怎麼辦?微信

全面瞭解一下是很是有必要的,以便在使用的時候可以喚起記憶中最淺顯的印象。而後剩下的,就能夠交給相似於man的這種命令了。Linux上的每個命令,都會有配套的幫助文件,這遠比網絡上那些轉來轉去的信息,正確的多。網絡

正式介紹一下下面的兩個命令:架構

  • man 用來顯示某個命令的文檔信息。好比:man ls
  • info 你能夠認爲和man是同樣的,雖然有一些可以互補的內容。它們會在內容中進行提示的
  • --help 不少命令經過參數--help提供很是簡短的幫助信息。這一般是最有用最快捷的用例展現。若是你根本就記不住一個很是拗口的單詞,那就找找這些地方吧

注意:這些幫助信息,僅集中在命令的做用域自己。對於它的組合使用場景,並無過多信息。也就是說,它教會了你怎麼用,但並無告訴你用它可以來作什麼。併發

這些幫助命令,通常會經過高亮關鍵字,增長閱讀的體驗。但咱們能夠更近一步,把幫助文件變成彩色的。在root用戶下,執行下面的命令。而後,從新登陸虛擬機

cat >> ~/.bashrc <<EOF
function man()
{
    env \\
    LESS_TERMCAP_mb=\$(printf "\e[1;31m") \\
    LESS_TERMCAP_md=\$(printf "\e[1;31m") \\
    LESS_TERMCAP_me=\$(printf "\e[0m") \\
    LESS_TERMCAP_se=\$(printf "\e[0m") \\
    LESS_TERMCAP_so=\$(printf "\e[1;44;33m") \\
    LESS_TERMCAP_ue=\$(printf "\e[0m") \\
    LESS_TERMCAP_us=\$(printf "\e[1;32m") \\
    man "\$@"
}
EOF
複製代碼

再次執行man命令,就能夠看到彩色的信息了。

1.三、TAB補全

如今,在終端裏,輸入ca,而後快速按2次<TAB>鍵盤,命令行會進入補全模式,顯示以ca打頭的全部命令。

[root@localhost ~]# ca
cacertdir_rehash     cache_dump           cache_repair         cache_writeback      ca-legacy            capsh                case                 catchsegv
cache_check          cache_metadata_size  cache_restore        cal                  caller               captoinfo            cat                  catman
複製代碼

若是你對某個命令,只有模糊的印象,只記得前面的幾個字母,這個功能是極好的,命令範圍會一步步縮減。

二、正則表達式

爲了開始下面的內容,咱們首先介紹一下正則表達式。在前面的一些命令中,也可使用這些正則表達式,好比less、grep等。

有些書籍,可以把正則表達式寫成一本書,咱們這裏僅做簡單的介紹,但足夠用了。通常的,正則表達式能用在匹配上,還可以把匹配的內容拿來作二次利用。關於後者,咱們在sed命令中介紹。

標誌 意義
^ 行首
$ 行尾
. 任意單個字符
* 匹配0個或者多個前面的字符
+ 1個或者多個匹配
? 0個或者1個匹配
{m} 前面的匹配重複m次
{m,n} 前面的匹配重複m到n次
[] 匹配一個指定範圍內的字符
[^] 匹配指定範圍外的任意單個字符
\ 轉義字符
[0-9] 匹配括號中的任何一個字符,or的做用
| or,或者
\b 匹配一個單詞。好比\blucky\b 只匹配單詞lucky

使用下面的命令建立一個文件,咱們練習一下grep命令加上E參數後的正則表現。

cat > 996 <<EOF
996: 996 is a funcking thing . which make woman as man , man as ass .
we all on the bus , bus bus on the way . 996
way to icu. icuuuuuu......
The greedy green boss rides on the pity programmer
EOF
複製代碼

在終端執行下面命令,注意高亮的部分即爲匹配到的字符串。

# 匹配996開頭的行
[root@localhost ~]# cat 996 | grep -E ^996
996: 996 is a funcking thing . which make woman as man , man as ass .

# 匹配996結尾的行
[root@localhost ~]# cat 996 | grep -E 996$
we all on the bus , bus bus on the way . 996

# 匹配到icu和icuuuuuu
[root@localhost ~]# cat 996 | grep -E icu+
way to icu. icuuuuuu......

# 再次匹配到996
[root@localhost ~]# cat 996 | grep -E [0-9]
996: 996 is a funcking thing . which make woman as man , man as ass .
we all on the bus , bus bus on the way . 996

[root@localhost ~]# cat 996 | grep -E ^[\^0-9]
we all on the bus , bus bus on the way . 996
way to icu. icuuuuuu......
The greedy green boss rides on the pity programmer

# 匹配全部不包含996的行,良心命令,淚奔
[root@localhost ~]# cat 996 | grep -E -v [0-9]{3}
way to icu. icuuuuuu......
The greedy green boss rides on the pity programmer

# 匹配boss和icu
[root@localhost ~]# cat 996 | grep -E boss\|icu
way to icu. icuuuuuu......
The greedy green boss rides on the pity programmer

# 匹配全部行
[root@localhost ~]# cat 996 | grep -E .
996: 996 is a funcking thing . which make woman as man , man as ass .
we all on the bus , bus bus on the way . 996
way to icu. icuuuuuu......
The greedy green boss rides on the pity programmer
複製代碼

正則表達式很是的重要,在一些sed腳本中,awk腳本中,甚至是vim編輯器中,都會簡化你的操做。以上內容應該熟記,達到不須要查找文檔的地步。

三、小結

本小節是學習技巧方面的內容,但咱們依然接觸到一些硬核知識。這多是除了正統的命令集合以外,最常常被使用的技巧了。接下來,咱們介紹了一些簡單的正則,這些正則可用用在不少命令中。咱們還提供了一個把man命令變成彩色的小腳本,下面的文章中,會默認你已經把這一步給操做了。

彩色可以增長閱讀效果(色盲除外)。

四、思考&擴展

一、回過頭去,執行一下man cat,是否發現了一個叫作tac的命令?它是幹什麼的?

二、上面提到的stat系列,你能想象iostat大致是幹什麼用的麼?

三、grep -v是什麼意思?

四、瞭解一下和mv很是像的rename命令來批量修改文件,看可否使用上面的正則。

五、有些命令若是拼寫錯誤,如何快速修正?靠搜索麼?瞭解一下fuck命令。我沒有說錯。

六、下面哪一種寫法表示若是cmd1成功執行,則執行cmd2命令?

  • A. cmd1&&cmd2
  • B. cmd1|cmd2
  • C. cmd1;cmd2
  • D. cmd1||cmd2

End

咦?小王呢?

環顧四周,一片空空。別說羅馬,小王都不見了。

做者簡介:小姐姐味道 (xjjdog),一個不容許程序員走彎路的公衆號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高併發世界,給你不同的味道。個人我的微信xjjdog0,歡迎添加好友,​進一步交流。​


8 man 5 info 1 lsmem 1 lscpu 6 2 lsblk 1 stat 1 top 1 find 6 regex

相關文章
相關標籤/搜索