Shell 的种类
sh -- Bourne Shell
:在 v7
版本中引入的首个标准 Unix Shell
程序,仅支持最基础的功能,但目前仍在 Unix
系统和与 Unix
相关的环境中使用。在 Linux
系统中也提供了 sh
用于实现对 Unix
程序的兼容。
bash -- GNU Bourne-Again SHell
: GNU
钦定的标准 shell
,实际上也是 大部分 Linux
发行版和 Mac OS X
上的默认 shell
。作为 sh
的超集( superset
), bash
在方便初学者使用的同时也为专业用户提供了大量的高级功能,而且有良好的兼容性。本书中所有的练习与示例都使用 Ubuntu 20.04 LTS
自带的 bash 5.3.0
。
csh -- C shell
:语法类似 C
语言的 shell
,由 Bill Joy
设计,目前很少使用。
tcsh -- TENEX C shell
: csh
的升级版,完全兼容 csh
,添加了自动补全、历史记录、作业控制等功能并具有更强大的语法支持。
zsh -- Z shell
:功能更加强大的 shell
,也是 Mac OS Catalina
版本之后的默认 shell
,相比于 bash
提供了更加智能的命令补全和提示功能以及对其他功能的优化,但是由于其运行效率较差而且语法与 bash
有细微差别,因此目前不适合在生产环境中使用。
自定义解释器
在 /etc/shells
文件中会列出当前中系统已经安装的 shell
解释器:
> cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/bin/tcsh
/usr/bin/tcsh
用户登录时默认使用的 shell
定义在 /etc/passwd
文件中,配合 USER
变量可以查看当前用户的默认 shell
:
> cat /etc/passwd | grep $USER
remilia:x:1000:1000:Remilia Scarlet,,,:/home/remilia:/bin/bash
通过在文件开头指定Shebang可以选择执行 shell
脚本时用的解释器,在 Python
和 Perl
中也有类似的设定。
#!/usr/bin/python
Bash 编辑模式
bash
有 emacs
(默认)和 vi
两种编辑模式, 可以通过 bind -V
查看当前的编辑模式, 通过 set -o
设置快捷键模式。
> bind -V | grep keymap
keymap is set to 'emacs'
> set -o vi
> bind -V | grep keymap
keymap is set to `vi-insert'
光标控制快捷键
- 光标跳转到行首
Ctrl + A
- 光标跳转到行尾
Ctrl + E
- 光标向左移一位
Ctrl + B
- 光标向右移一位
Ctrl + F
- 在行首与当前光标位置之间切换
Ctrl + XX
作业控制快捷键
- 中断前台作业(SIGINT)
Ctrl + C
- EOF(结束标准输入stdin)、退出前台作业、登出会话
Ctrl + D
- 挂起前台作业(SIGTSTP)
Ctrl + Z
文本控制快捷键
- Backspace
Ctrl + H
- Delete
Ctrl + D
- 清屏
Ctrl + L
- 删除从当前光标位置到行首的全部字符
Ctrl + U
- 删除从当前光标位置到行尾的全部字符
Ctrl + K
历史记录快捷键
- 搜索历史记录(最近最匹配原则)
Ctrl + R
- 由近到远获得一条历史记录
Ctrl + P
- 由远到近获得一条历史记录
Ctrl + N
- 由近到远获得一条历史记录的最后一个词
Alt + .
> touch /tmp/this-is-a-long-file-name.99839.op
> chmod a+x <Alt + .>
# 等价于 chmod a+x /tmp/this-is-a-long-file-name.99839.op
流控制(自信盲打模式)
- 锁定输出流(XOFF)
Ctrl + S
- 释放输出流(XON)
Ctrl + Q
> <Ctrl + S> date <Ctrl + J> uname -sr <Ctrl + J> <Ctrl + Q>
# 由于输出流会锁定,终端不会显示任何输出, 释放后会显示以下内容
> date
Sat 22 Feb 2020 01:31:04 PM CST
> uname -sr
Linux CT7GK 5.3.0-40-generic