你必须非常努力,才能看起来毫不费力!
微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero !
前言
上篇文章我们学习了什么是 Shell
,并了解到 Bash
是我们最常使用的 Shell
,那么本篇文章我们就来一起学习下Bash的基本功能。
历史命令与命令补全
Bash
中可以查看历史输入的命令,并且可以通过上下箭头或者其他方式,快捷执行历史命令。当前终端的命令会缓存在内存中,当退出终端后,内存中的命令会写入到文件中。我们一般不会轻易清空历史命令文件,否则后续遇到问题难以追溯。
历史命令
history [选项] [历史命令保存文件]
-c:清空历史文件
-w: 把缓存的历史命令写入历史命令保存文件 ~/.bash_history
-n: 列出最近几条命令
- 历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中修改 HISTSIZE=1000
- 使用上、下箭头调用以前的命令
- 使用"!n"重复执行第n条历史命令
- 使用"!!"重复执行上一条命令
- 使用"!字符串"重复执行最后一条以该字符串开头的命令
# 查看历史命令
[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
中,执行的命令优先级如下:
- 使用绝对或相对路径执行的命令
- 别名
- Bash内部命令
- 按照
$PATH
环境变量定义的目录顺序查找到的第一个命令
使用绝对路径或相对路径指定的命令,相当于指定了这个命令,优先级肯定最高,其次就是别名,然后就是Bash自带的一些命令,最后是$PATH包含的目录中的命令。可以看出别名的优先级很高,我们在定义别名的时候,尽量保证不要和已有的命令重名。
别名相关的命令如下:
# 设定命令别名
alias 别名="原命令"
# 查询命令别名
alias
# 让别名永久生效
vim /root/.bashrc
# 删除别名
unalias 别名
# 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 | 恢复屏幕输出 |
上图中,我们输入了一个命令,然后 “Ctrl+A
” 光标移动到了命令开头,"Ctrl+E
“光标移动到了命令最后,”Ctrl+U
“剪切光标之前的命令,”Ctrl+Y
" 又粘贴了回来。
比如当我们输入一个很长的命令,发现输错了之后,不需要使用退格键一个个删除,而是使用"Ctrl+U"直接删除所有,可以大大提高效率。
管道符
我们可以使用管道符,将命令1的正确输出作为命令2的输入。管道符使用前提是:第一个命令正确执行
。
命令1 | 命令2
# 命令1的正确输出作为命令2的输入
示例:
[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 的部分基本功能,熟练掌握这些技巧,可以极大的提升我们的工作效率。
- 历史命令与命令补全
- 命令别名
- 常用快捷键
- 管道符
更多
个人博客: https://lifelmy.github.io/
微信公众号:漫漫Coding路