Debian控制台技巧分享

2024-11-09 2

在 Debian 控制台环境中,有一些工具程序可以帮助我们更高效地进行各种活动。本教程将介绍一些常用的工具程序和技巧,包括支持控制台活动的程序列表、清晰的记录shell活动、screen程序、在目录间游走、Readline封装以及扫描源代码树等。

支持控制台活动的程序列表:

软件包流行度大小说明
mcV:50, I:2131542/
bsdutilsV:513, I:999356script (1) 命令来记录终端会话
screenV:74, I:2351003VT100/ANSI 终端模拟器混合复用的终端
tmuxV:42, I:1451114终端复用的备选方案(使用 “Control-B”代替)
fzfV:4, I:153648模糊的文本查找器
fzyV:0, I:054模糊的文本查找器
rlwrapV:1, I:15330具备 readline 特征的命令行封装
leditV:0, I:11331具备 readline 特征的命令行封装
rlfeV:0, I:045具备 readline 特征的命令行封装
ripgrepV:4, I:185129在源代码树中快速递归搜索字符串,并自动过滤

一、清晰的记录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,并自动使用适当的过滤器来忽略一些文件。