《调教命令行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

相关文章
相关标签/搜索