在 Debian 控制台环境中,有一些工具程序可以帮助我们更高效地进行各种活动。本教程将介绍一些常用的工具程序和技巧,包括支持控制台活动的程序列表、清晰的记录shell活动、screen程序、在目录间游走、Readline封装以及扫描源代码树等。
支持控制台活动的程序列表:
软件包 | 流行度 | 大小 | 说明 |
mc | V:50, I:213 | 1542 | / |
bsdutils | V:513, I:999 | 356 | script (1) 命令来记录终端会话 |
screen | V:74, I:235 | 1003 | VT100/ANSI 终端模拟器混合复用的终端 |
tmux | V:42, I:145 | 1114 | 终端复用的备选方案(使用 “Control-B”代替) |
fzf | V:4, I:15 | 3648 | 模糊的文本查找器 |
fzy | V:0, I:0 | 54 | 模糊的文本查找器 |
rlwrap | V:1, I:15 | 330 | 具备 readline 特征的命令行封装 |
ledit | V:0, I:11 | 331 | 具备 readline 特征的命令行封装 |
rlfe | V:0, I:0 | 45 | 具备 readline 特征的命令行封装 |
ripgrep | V:4, I:18 | 5129 | 在源代码树中快速递归搜索字符串,并自动过滤 |
一、清晰的记录shell活动
简单地使用 script(1) 记录 shell 活动会产生一个有控制字符的文件。这些控制字符可以按下面的方式,使用 col(1) 去掉。
$ script Script started, file is typescript
做些操作……按 Ctrl-D 退出 script.
$ col -bx < typescript > cleanedfile $ vim cleanedfile
有替代的方式来记录 shell 活动:
使用 tee (在 initramfs 的启动过程中可用):
$ sh -i 2>&1 | tee typescript
- 使用 gnome-terminal 增加行缓冲,用滚动条查看;
- 使用 screen 和 “^A H”来进行控制台记录;
- 使用 vim 输入 “:terminal” 进入终端模式。使用 “Ctrl-W N” 从终端模式退出到普通模式。使用 “:w typescript” 将缓存写到一个文件;
- 使用 emacs 和 “M-x shell”, “M-x eshell”, 或 “M-x term” 来进入记录控制台。使用 “C-x C-w” 将缓存写到文件。
二、screen程序
screen(1) 不但允许一个终端窗口运行多个进程,还允许远程 shell 进程支持中断的连接.这里是一个典型的 screen(1) 使用场景.
1、登录到一个远程机器。
2、在单个控制台上启动 screen。
3、使用 ^A c (“Control-A” 接着 “c”)在 screen 中创建的窗口执行多个程序.
4、按 ^A n (“Control-A” 接着”n”)来在多个 screen 窗口间转换.
5、突然,需要离开终端,但不想丢掉正在做的工作,而这些工作需要连接来保持。
6、可以通过任何方式分离 screen 会话。
- 残忍地拔掉网络连接;
- 输入 ^A d (“Control-A” 接着 “d”) 并手工从远程连接退出登录;
- 输入 ^A DD (“Control-A” 接着 “DD”) 分离 screen 并退出登录。
7、重新登录到同一个远处主机(即使从不同的终端)。
8、使用 “screen -r” 启动 screen.
9、screen 魔术般的重新附上先前所有的 screen 窗口和所有在活动运行的程序.
注意:对于拨号或者按包计费的网络连接,可以通过 screen 节省连接费用,应为可以在断开连接时让一个进程继续运行,当稍后再次连接时重新附上它。
在 screen 会话里,除了命令按键外的所有键盘输入都会被发送到当前窗口。 screen 所有命令按键是通过 ^A (“Control-A”) 加单个键[加任何参数] 来输入.这里有一些重要的命令按键需要记住。
screen 键绑定列表:
键绑定功能 | 说明 |
---|---|
^A ? |
显示帮助屏幕(显示键绑定) |
^A c |
创建一个新的窗口并切换到该窗口 |
^A n |
到下一个窗口 |
^A p |
到前一个窗口 |
^A 0 |
到 0 号窗口 |
^A 1 |
到 1 号窗口 |
^A w |
显示窗口列表 |
^A a |
作为键盘输入发送 Ctrl-A 到当前窗口 |
^A h |
把当前窗口的硬拷贝写到一个文件 |
^A H |
开始/结束 当前窗口到文件的记录 |
^A ^X |
锁定终端(密码保护) |
^A d |
从终端分离 screen 会话 |
^A DD |
分离 screen 会话并退出登录 |
三、在目录间游走
如果使用模糊文本过滤程序,能够不输入精准路径。对于fzf 软件包,在 ~/.bashrc 里面包括下列内容:
FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash if [ -f $FZF_KEYBINDINGS_PATH ]; then . $FZF_KEYBINDINGS_PATH fi FZF_COMPLETION_PATH=/usr/share/doc/fzf/examples/completion.bash if [ -f $FZF_COMPLETION_PATH ]; then . $FZF_COMPLETION_PATH fi
例如:
- 能够最小化的操作跳入非常深的子目录。首先输入 “cd **” 后按 Tab,然后将被提示候选路径,输入部分路径字符串,比如 s/d/b foo,将会缩窄候选路径,通过有光标和回车键的 cd,选择将要使用的路径;
- 可以用最小化的操作,从命令历史里面选择一个命令,在命令行提示符下按 Ctrl-R ,然后将被提示候选的命令。输入部分命令字符串,比如 vim d,将会缩窄候选项,使用光标和回车键选择将要使用的命令。
四、Readline封装
比如 /usr/bin/dash命令,它缺少命令行历史编辑能力,但在 rlwrap 或它的等价物下运行就能够透明的增加这样的功能。
$ rlwrap dash -i
这提供一个便利平台来测试 dash 的细微之处,使用类似 bash 的友好环境。
五、扫描源代码树
在 ripgrep 软件包中的 rg(1) 命令,在扫描源代码树的典型场景中,提供了一个比 grep(1) 命令更快速的替代。它充分利用了现代多核 CPU,并自动使用适当的过滤器来忽略一些文件。