目录
Bash 无疑是使用最多的一种 shell。作为用户向操作系统“发号施令”的重要通道,Bash 必须具备接收各种命令,并“安排”各种命令执行的能力(参见Bash 点滴)。为此,Bash 为用户提供了一个命令编辑环境,在该环境下,用户可以输入编辑各种指令,并对命令执行方式进行各种控制。了解并熟练掌握 Bash 命令编辑环境下的各种操作,是高效使用 Bash,充分发挥 Bash 威力的必然前提。
一、命令编辑控制
Bash 首要定位是一个“命令编辑器”,需为高效编辑各种指令和控制提供便利。无论光标移动抑或编辑,减少方向键操作,提供整体性操作都必不可少,典型如 line 操作和 word 操作。当前已有很多久经考验、广泛使用高效编辑工具,Bash 无需“重新发明轮子”,提供充分融合利用当前高效编辑工具的机制即可。Bash 命令编辑器模式默认即采用 “emacs” 模式,Bash 的编辑快捷键与 emacs 基本一致。当然,Bash 也可根据用户需要配置为其他编辑模式(如 vim 模式)。
1. 命令光标移动
a)行操作
- Ctrl + a :移动光标到行首 (与 vim 对 a 的定位完全相反)
- Ctrl + e :移动光标到行尾
b)word 操作
- Alt + f :以 word 为单位前移 (与 vim 对 f 的定位一致)
- Alt + b :以 word 为单位后移 (与 vim 对 b 的定位一致)
c)character 操作
- Ctrl + f :以 character 为单位前移
- Ctrl + b :以 character 为单位后移
2. 命令基本编辑操作
1) 删除
a)行操作
- Ctrl + u :从光标处删除至行首(带剪切功能,可与 Ctrl + y 配合使用)
- Ctrl + k :从光标处删除至行尾(带剪切功能,可与 Ctrl + y 配合使用)
b)word 操作
- Ctrl + w :从光标处向前删除一个 word(带剪切功能,可与 Ctrl + y 配合使用)
- Alt + d :从光标处向后删除一个 word(带剪切功能,可与 Ctrl + y 配合使用)
c)character 操作
- Ctrl + d :从光标处向后删除一个 character(相当于backspace)
当整个行没有 character 时,此操作关闭整个 Bash。
2) 复制
- Ctrl + y :在光标后粘贴 (yank 操作)
注:< c – y> 也是 bash 的进程内复制,想要跨进程,必须借助操作系统剪切板,使用 < c – s – v>,这一点 vim 也有类似设置。
3) 屏幕控制
- Ctrl + l :清屏操作。清除 Bash 屏幕已有显示内容,光标置顶行。
- Ctrl + s :锁屏操作。输入编辑操作可继续执行,但内容不在屏幕显示。
- Ctrl + q :解锁操作。Ctrl + s 的逆操作。
3. Bash 默认编辑模式设置
在 ~/.bashrc 中,添加 set -o vi / emacs
来调整 Bash 默认编辑模式。
4. 历史命令的搜索
- ctrl + r :输入关键字,即可在历史命令中查找与关键字匹配的命令并输出。
这项操作可极大提高 bash 的使用效率,非常重要!
二、命令执行控制
Bash 为命令提供了 “前台” 和 “后台” 两种执行方式。
1. Bash 启动关闭
- Ctrl + Alt + T :启动 Bash
- Ctrl + d :关闭 Bash
2. 前后台切换
- & :将命令 “前台–>后台” 执行
- Ctrl + z :将命令 “前台–>后台” 暂停
- fg :将命令 “后台–>前台” 处理
Ctrl + z 与 fg 命令在只用单 bash 进行编辑时非常有用。例如,进行 vim 编辑时,有时需要获取外部信息填入 vim,则此时使用 Ctrl + z 退出 vim,在 bash 中找到相关信息后,再使用 fg 进入 vim,拷贝复制相关信息后继续编辑,可有效提升 vim 的编辑效率。
3. 执行控制
- Ctrl + c :前台命令终止
- kill :后台命令终止或重启
- bg :后台命令执行
三、跨进程(全环境)的复制粘贴(非 Bash 编辑器)
Bash 命令编辑器提供了 “利用 emacs 模式” 的剪切粘贴,但这类操作(参见”命令基本编辑操作“)只局限于 Bash 命令编辑光标环境,即仅限于单个 Bash 进程内部。除此之外,Bash 还提供了利用操作系统剪切板的范围更广的全环境(跨进程)复制粘贴操作。这些操作不仅适用于命令编辑光标环境中的字符串复制粘贴操作,还可应用于其他不可编辑字符的复制粘贴,如 prompt 提示符等;以及其他外部进程(如浏览器)与目标 Bash 进程之间的字符的复制粘贴。
选中要操作的内容(高亮),可进行如下操作:
- Ctrl + Shift + c :复制
- Ctrl + Shift + v :粘贴
这里涉及一个 linux 软件进行数据交换的共性的问题,即软件既有进程内部进行数据交换的需求,也有不同进程之间进行数据交换的需求,尤其是数据处理类软件,类似的需求更为凸显(如 vim,bash),软件也必须提供相应的机制满足上述两种需求。一般来说,软件进程内部数据交换用内部存储机制(如寄存器)完成,软件与外部(不同进程之间)进行数据交换通过操作系统剪切板来实现。在交互式软件中(如 vim,bash),这种不同往往也对应着不同的按键操作。