【Linux】Shell - Bash 常用快捷键、命令和工具包

Posted by 西维蜀黍 on 2020-10-10, Last Modified on 2022-04-01

常用快捷键

编辑命令

  • 使用 Ctrl-R 而不是上下光标键来查找历史命令。

  • 使用 Ctrl-W 来删除最后一个单词

  • 使用 Ctrl-U 来删除一行

  • Ctrl + a :移到命令行首

  • Ctrl + e :移到命令行尾

  • Command + K:清空当前 session

  • Alt + f :按单词前移(右向) - 并不行(macOS下用Esc + F

  • Alt + b :按单词后移(左向) - 并不行(macOS下用Esc + B

  • Ctrl + u :从光标处删除至命令行首 - macOS下OK

  • Ctrl + k :从光标处删除至命令行尾 - macOS下OK

  • Ctrl + w :从光标处删除至字首 - macOS下OK

  • Alt + d :从光标处删除至字尾

在macOS下使用iTerm2,可以使用

  • Option ⌥ + ← 和 Option ⌥ + → 来按 word 移动
  • 使用Option ⌥ + ⌫ 来向左按 word 删除

(from https://apple.stackexchange.com/questions/154292/iterm-going-one-word-backwards-and-forwards)。

请man bash后查找Readline Key Bindings一节来看看bash的默认热键。

常用命令

  • 回到上一次的工作目录: cd – (回到home是 cd ~)

临时执行命令

在bash 脚本中,subshells (写在圆括号里的) 是一个很方便的方式来组合一些命令。一个常用的例子是临时地到另一个目录中,例如:

# do something in current dir
(cd /some/other/dir; other-command)
# continue in original dir

变量

在 bash 中,注意那里有很多的变量展开。如:检查一个变量是否存在: ${name:?error message}。如果一个bash的脚本需要一个参数,也许就是这样一个表达式 input_file=${1:?usage: $0 input_file}。一个计算表达式: i=$(( (i + 1) % 5 ))

生成序列

一个序列: {1..10}

截断字符串

截断一个字符串: ${var%suffix}${var#prefix}。 示例: if var=foo.pdf, then echo ${var%.pdf}.txt prints “foo.txt”.

以root的身份执行上一条命令 -sudo !!

以root的身份执行上一条命令 。

场景举例:比如Ubuntu里用apt-get安装软件包的时候是需要root身份的,我们经常会忘记在apt-get前加sudo。每次不得不加上sudo再重新键入这行命令,这时可以很方便的用sudo !!完事。

在shell下,有时候你会输入很长的命令,你可以使用!xxx来重复最近的一次命令,比如,你以前输入过,vi /where/the/file/is, 下次你可以使用 !vi 重得上次最近一次的vi命令。

python -m SimpleHTTPServer

一句话实现一个HTTP服务,把当前目录设为HTTP服务目录,可以通过http://localhost:8000访问 这也许是这个星球上最简单的HTTP服务器的实现了。

Better Command

ccat - cat

bat 增强了 cat 命令 。如果你想要有语法高亮的 cat,可以试试 ccat 命令。

$ wget https://github.com/jingweno/ccat/releases/download/v1.1.0/linux-amd64-1.1.0.tar.gz 
$ tar xfz linux-amd64-1.1.0.tar.gz 
$ cp linux-amd64-1.1.0/ccat /usr/local/bin/

htop 是 top 的一个加强版。然而,还有很多的各式各样的top,比如:用于看IO负载的 iotop,网络负载的 iftop, 以及把这些top都集成在一起的 atop

tldr - man

man 命令是好读文档的命令,但是man的文档有时候太长了,所以,你可以试试 tldr 命令,把文档上的一些示例整出来给你看。

$ npm install -g tldr

https://github.com/tldr-pages/tldr

$ ln -s /usr/local/bin/tldr /usr/local/bin/man2

hstr - 搜索以前打过的命令

如果你想搜索以前打过的命令,不要再用 Ctrl +R 了,你可以使用加强版的 hstr

HSTR (HiSToRy) is a command line utility that brings improved bash/zsh command completion from the history. It aims to make completion easier and more efficient than Ctrl-r.

# install on macOS
$ brew install hstr

Configure HSTR just by running:

# bash
hstr --show-configuration >> ~/.bashrc

# zsh
hstr --show-configuration >> ~/.zshrc

https://github.com/dvorka/hstr

ag - 比grep、ack更快的递归搜索文件内容

mycli - mysql客户端,支持语法高亮和命令补全,效果类似ipython,可以替代mysql命令

glances - 更强大的 htop / top 代替者

axel - 多线程下载工具(Replace curl, wget)

axel -n 20 http://centos.ustc.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso

cloc - 代码统计工具,能够统计代码的空行数、注释行、编程语言

$ cloc .

     296 text files.
     296 unique files.
       7 files ignored.

github.com/AlDanial/cloc v 1.90  T=1.60 s (180.8 files/s, 250149.3 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Go                             265          18945           5653         363660
Protocol Buffers                 9           1599           1349           8618
XML                              4              0              0            893
JSON                             4             13              0            320
YAML                             3             11             11             61
make                             1             13              7             35
SQL                              1              5              0             15
Markdown                         1              5              0             14
Bourne Shell                     2              2              0             11
-------------------------------------------------------------------------------
SUM:                           290          20593           7020         373627

Reference