前言

上篇文章我们学习了什么是 Shell,并了解到 Bash 是我们最常使用的 Shell,那么本篇文章我们就来一起学习下Bash的基本功能。

历史命令与命令补全

Bash 中可以查看历史输入的命令,并且可以通过上下剪头或者其他方式,快捷执行历史命令。当前终端的命令会缓存在内存中,当退出终端后,内存中的命令会写入到文件中。我们一般不会轻易清空历史命令文件,否则后续遇到问题难以追溯。

历史命令

1
2
3
4
5
history [选项] [历史命令保存文件]

-c:清空历史文件
-w: 把缓存的历史命令写入历史命令保存文件  ~/.bash_history
-n: 列出最近几条命令
  • 历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中修改 HISTSIZE=1000
  • 使用上、下箭头调用以前的命令
  • 使用"!n"重复执行第n条历史命令
  • 使用"!!“重复执行上一条命令
  • 使用”!字符串"重复执行最后一条以该字符串开头的命令
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 查看历史命令
[root@VM-0-5-centos ~]# history
 1221  07/11/21 21:10:52 echo `date`
 1222  07/11/21 21:11:27 name=1
 1223  07/11/21 21:11:31 echo $name
 1224  07/11/21 21:12:06 echo  \$name
 1225  08/11/21 23:31:17 history

[root@VM-0-5-centos ~]# ls
hello_world.sh  test.txt

# 重复执行上一条命令(通过上箭头更方便点)
[root@VM-0-5-centos ~]# !!
ls
hello_world.sh  test.txt

命令补全

在Bash中,命令与文件补全是非常方便的功能,我们在输入命令或者文件名的时候,输入前几个字母,然后按下 “TAB” 键,Bash就会自动为我们补全。如果没有补全,说明有多个匹配项,再按一次 “TAB” 键,就会出现所有的可选项。

命令补全

上图中,我们输入"ca",按下"TAB"键,Bash并没有为我们补全,再按一次,列出了所有符合的命令,我们手动输入"t"和一个空格,然后输入"hell",按下"TAB"键,就自动补全了 hello_world.sh,因为在当前文件夹只有一个匹配项。

命令别名

命令别名,其实就是给一个命令设置一个"小名",通过输入这个别名,实际执行的是对应的复杂命令。在 Bash 中,执行的命令优先级如下:

  1. 使用绝对或相对路径执行的命令
  2. 别名
  3. Bash内部命令
  4. 按照 $PATH 环境变量定义的目录顺序查找到的第一个命令

使用绝对路径或相对路径指定的命令,相当于指定了这个命令,优先级肯定最高,其次就是别名,然后就是Bash自带的一些命令,最后是$PATH包含的目录中的命令。可以看出别名的优先级很高,我们在定义别名的时候,尽量保证不要和已有的命令重名。

$PATH定义目录中命令

别名相关的命令如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 设定命令别名
alias 别名="原命令"

# 查询命令别名
alias

# 让别名永久生效
vim /root/.bashrc

# 删除别名
unalias 别名
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 设定别名
[root@VM-0-5-centos ~]# alias lifelmy='/root/hello_world.sh'

# 2. 查看别名
[root@VM-0-5-centos ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias lifelmy='/root/hello_world.sh'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

# 3. 执行别名
[root@VM-0-5-centos ~]# lifelmy
hello world

# 4. 删除别名
[root@VM-0-5-centos ~]# unalias lifelmy

可以看到在查看别名部分,ls 的别名为 “ls --color=auto",这也就是为什么不同的文件类型会显示不同颜色的原因。rm 的别名是”rm -i",其实"rm"命令默认不会提示是否确定删除,但是由于别名添加了"-i"参数,就会出现提示了。

默认设置的别名只在当前终端有效,关闭终端后就无法再次使用别名,如果想要别名永久生效,可以编辑/root/.bashrc文件,保存别名。

常用快捷键

命令 作用
Ctrl+A 把光标移动到命令行开头
Ctrl+E 把光标移动到命令行结尾
Ctrl+C 强制终止当前的命令
Ctrl+L 清屏,相当于clear
Ctrl+U 删除或剪切光标之前的命令,不需要退格键一个个删除
Ctrl+K 删除或剪切光标之后的命令
Ctrl+Y 粘贴Ctrl+U或Ctrl+K剪切的内容
Ctrl+R 在历史命令中搜索
Ctrl+D 退出当前终端
Ctrl+Z 暂停,并放入后台
Ctrl+S 暂停屏幕输出
Ctrl+Q 恢复屏幕输出

Bash常用快捷键

上图中,我们输入了一个命令,然后 “Ctrl+A” 光标移动到了命令开头,"Ctrl+E“光标移动到了命令最后,"Ctrl+U“剪切光标之前的命令,"Ctrl+Y” 又粘贴了回来。

比如当我们输入一个很长的命令,发现输错了之后,不需要使用退格键一个个删除,而是使用"Ctrl+U"直接删除所有,可以大大提高效率。

管道符

我们可以使用管道符,将命令1的正确输出作为命令2的输入。管道符使用前提是:第一个命令正确执行

1
2
命令1 | 命令2
# 命令1的正确输出作为命令2的输入

示例:

1
2
3
[root@VM-0-5-centos ~]# netstat | grep -i 'establish'
tcp        0     28 VM-0-5-centos:ssh       220.243.131.5:51904     ESTABLISHED
tcp        0      0 VM-0-5-centos:50908     169.254.0.55:lsi-bobcat ESTABLISHED

grep 命令后面本来是需要跟一个文件的,但是我们可以使用其他命令的正确输出,作为 grep 的输入。

总结

本文介绍了 Bash 的部分基本功能,熟练掌握这些技巧,可以极大的提升我们的工作效率。

  • 历史命令与命令补全
  • 命令别名
  • 常用快捷键
  • 管道符

更多

微信公众号:CodePlayer