『酷同事』的 Linux Shell 使用小技巧

『酷同事』的 Linux Shell 使用小技巧

刚工作的时候,我总会想 ———『为啥那个同事比我酷?』

你知道的,这个『酷』的来源,切切又隐隐,它并不从编码一方面来。而是…ta用一种很酷的技巧,便把问题轻松秒杀。那些技巧通常并不深奥,只是很多时候,我们并不知道它们存在。

多年的积淀,become『酷同事』,总结成果,如下几点:1. 擅用 Shell 快捷键;2. 熟练使用一些 Shell Bash 命令;3. 编写简易 Shell 脚本;4. 在 Vim 中编程。

可能有人会想,这些有什么可『酷』呢?那我先举个 Shell 快捷键的例子,在终端里,我们通常会按很多次键,去找之前的 ssh 记录或者执行命令,那如果我说可以直接用ctrl+r命令,搜索执行历史,那岂不是更高效。 你也可能会说用history命令,但是有些环境,是没有这个命令的,比如开发跳板机。

像我我大厂工作十多年的同事,每次要 ssh 到服务器,就是先按很多次键,如果还一直找不到,那就再去翻一遍文档。而我 ctrl+r 两秒搞定。真的,任何人不知道这个技巧,我都会难过的 🙃

Vim 编程的是个比较大的话题,网上资料也很多,本文暂时不讨论。对于每个技巧,我只是抛砖引玉,希望能给你一些帮助。


一. 擅用 Shell 快捷键

TOP 推荐:逆向搜索命令历史 ctrl+r, 切换到上次访问的目录 cd -, 光标移动到命令行首ctrl+a、.

  • 个人常用快捷键整理如下:
# 逆向搜索命令历史 【极力推荐 非常好用】
ctrl+r

# 切换到上次访问的目录 【也很推荐 互逆的】
cd -

# 光标移动到命令行首
ctrl+a

# 光标移动到命令行尾
ctrl+e

# 从光标处擅长至字首
ctrl+w

# 清屏
ctrl+l

# 终止前台命令的执行
ctrl+c

# 阻止屏幕输出(比如程序在执行,但不想看日志一直在屏幕上输出的时候)
ctrl+s

# 允许屏幕输出
ctrl+q


二. 熟练使用一些 Shell Bash 命令

1. Linux 三剑客 ——— grep, sed, awk.

grep在给出文件列表或标准输入后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配的行或文本。

通常字符串匹配或者过滤用它就够了。

sed 是一个使用简单紧凑的编程语言来解析和转换文本Unix实用程序。

比较适合用来做文本替换。

awk是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言的最大功能取决于一个人所拥有的知识。AWK提供了极其强大的功能:可以进行正则表达式的匹配,样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。

超级强大的工具,它不仅仅是一个工具,还是一个语言,有很多这方面的数据。一个比较典型的应用场景,从日志里捞某一些数据,并将其结构化的输出出来。

2. 常用命令

推荐的有,Vim 编辑器的diff 模式 vimdiff, 将一个文件分割成数个split, 去除文件中的重复内容行 uniq, 对个文本文件内容进行排序 sort等.

  • 个人常用快捷键整理如下:
# vimdiff 是 Vim 编辑器的diff 模式, 等同于 vim -d 命令
# 例子:对比 a.txt 和 b.txt 文件
vimdiff a.txt b.txt


# split 可以将一个文件分割成数个
# 例子:将 a.txt 分隔为 200行一个的小文件,文件名前缀是 data-
split -l 200 a.txt data-


# uniq 去除文件中的重复内容行、sort 对个文本文件内容进行排序、head 指定显示文件前多少行内容的命令
# 例子: 查询一个文件重复最多的前10条记录
sort a.txt | uniq -c | sort -n -r | head -10


三. 编写简易 Shell 脚本

能简单解决的问题,绝不用复杂方式处理,我想这就是『酷』的定义吧。写 Shell 脚本,有时候就是这样。

1. 使用 Linux expect 实现 ssh 自动登录

#!/usr/bin/expect

set timeout 30
spawn ssh -p [lindex $argv 0] [lindex $argv 1]@[lindex $argv 2]
expect {
        "(yes/no)?"
        {send "yes\n";exp_continue}
        "password:"
        {send "[lindex $argv 3]\n"}
}
interact

2. 简单方便的运维脚本


# 查找并删除 /log/ 文件夹里的 .log 文件
rm  -rf $(find . -iregex ".*\/log\/.*\.log.*$")

# 查找超过 800M 的大文件
find  . -type f -size +800M -print0 | xargs -0 du -h | sort -nr

# 在二级目录里查找大文件夹
du -h --max-depth=2 | sort -n


3. 轻量但是实用的小脚本


# 批量添加后缀 
for i in * ; do mv $i $i".csv"; done


〇. 『One More Thing』Linux 中的有趣的命令

Linux 拥有丰富的命令,有一些强大且有用,但也有一些有趣且异想天开。最经典的比如 sl 小火车,cowsay 小牛说,下面会再举一些,我觉得很有意思的命令,喜欢的朋友可以安装玩玩。这些命令都不是系统自带,不过用系统自带的包管理工具,都可以轻松安装。

  • sl: 一辆火车从屏幕右边开往左边
  • cowsay: 是一个生成ASCII图片的程序,显示一头牛的消息
  • cmatrix: 一个模拟黑客帝国风格的屏幕保护命令
  • fortune: 用于显示随机引用、俏皮话或财富消息
  • fortune-zh: fortune 的中文版
  • htop: 比 top 更人性化的一个进程查看器
  • figlet: 一款能够将文字转换为放大艺术字的命令
  • hollywood: 在终端上伪造一个好莱坞黑客的屏幕(假装自己是黑客)

参考资料: