2
使用 Golang 实现 SSH 和 SSHD(三)
source link: https://pandaychen.github.io/2022/01/01/A-GOLANG-SSHD-BASH-CONTROL-CHARS/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
0x00 前言
项目中,需要实现 OpenSSH 字符终端审计及输入命令还原,因而需要了解 Bash 中的特殊按键行为及其对终端屏显的影响。本篇文章梳理下特殊按键的行为。
0x01 常用按键对应的 ascii 码
按键 | name | ASCII-HEX |
---|---|---|
ENTER | 回车 | 0x03 |
0x02 CTRL 类指令
本小节仅针对 /bin/bash
的行为:
不区分大小写:
CTRL
+A
:当前光标移动到首位(移到命令行首)CTRL
+B
:当前光标向前移动1
位 / 个字符(直至首位)(按字符移动(左向))CTRL
+C
:取消当前行指令,停止当前运行的命令。如果一个命令运行时间过久,或者你误运行了,可以使用本指令来强制停止或退出CTRL
+D
:从当前光标开始,向后依次删除1
个字符,即删除光标后的一个字符;如果当前行无字符,直接退出当前会话(和exit
指令类似)CTRL
+W
:删除光标前的一个单词(注意,和CTRL
+U
不一样,CTRL
+W
不会删除光标前的所有东西,而是只删除一个单词)。如下面的例子,输入为ifconfig eth1
,光标在h
处,本指令操作结果如下:CTRL
+E
:移到当前行命令行尾(移到命令行尾),和END
键功能类似CTRL
+R
:reverse-searchCTRL
+T
:有趣:当前光标前的两个位置字符位置相互调换(交换光标处和之前的字符,交换最后两个字符)CTRL
+U
:删除光标前的所有字符(从光标后的点删除到行首),该指令立刻删除前面的所有字符。和W
不一样的在于,本指令从光标处删除至命令行首CTRL
+I
:类似于Tab
补全的功能CTRL
+O
:类似于Enter
的功能,执行当前命令,并选择上一条命令CTRL
+P
:类似于上箭头UPARROW
的功能CTRL
+F
:从当前光标开始,依次向后移动1
个位置(B
的反向)(按字符移动(右向))CTRL
+H
:从当前光标开始,依次向前删除1
个字符,即删除光标前的一个字符,和退格键的功能相同CTRL
+J
:类似于Enter
的功能CTRL
+K
:删除当前光标位置(包含此位置的字符),之后所有的字符(U
的反向)。即删除光标后的所有字符CTRL
+L
:清屏CTRL
+X
:光标的当前位置移动到行首,再次输入,恢复到先前的位置(在命令行首和光标之间移动)CTRL
+V
:复制(插入)缓冲区的内容到当前光标处CTRL
+M
:类似于Enter
的功能CTRL
+Y
:恢复上一个删除或剪切的条目。比如使用CTRL
+W
删除了单词eth1
。你可以使用CTRL
+Y
立刻恢复
CTRL
+Z
:停止当前的命令,即终止了当前运行的命令。可以在前台使用fg
或在后台使用bg
来恢复CTRL
+[
:和ESC
键等同CTRL
+G
:退出历史搜索模式,不运行命令CTRL
+O
:运行使用反向搜索时发现的命令,即CTRL
+R
CTRL
+R
:向后搜索历史记录(使用反向搜索时)CTRL
+S
:向前搜索历史记录
有意思的点
CTRL
+J
:和ENTER
/RETURN
键相同。CTRL
+J
或CTRL
+M
可以用来替换回车键CTRL
+N
:在命令历史中显示下一行,等同于下箭头键DownArrow
CTRL
+B
:光标向前移动一个字符。等同于左箭头键LeftArrow
CTRL
+F
:光标向后移动一个字符,等同于右箭头键RightArrow
CTRL
+P
:显示命令历史的上一条命令,等同于上箭头键UpArrow
0x03 ALT 类命令
ALT
+F
:按单词后移(右向)ALT
+B
:按单词前移(左向)ALT
+D
:从光标处删除至单词尾,不一定是行尾ALT
+C
:从光标处更改为首字母大写的单词,并且光标移动到单词尾部ALT
+U
:从光标处更改为全部大写的单词,并且光标移动到单词尾部ALT
+L
:从光标处更改为全部小写的单词,并且光标移动到单词尾部ALT
+T
:交换光标处和之前位置的两个单词ALT
+Backspace
:与CTRL
+W
类似,分隔符有些差别
0x04 模拟键盘操作的状态机实现
0x05 参考
Related Issues not found
Please contact @pandaychen to initialize the comment
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK