linux stty是Linux系统下用于显示和修改终端行设置的命令行工具,全称为set tty,主要用于配置终端设备的工作参数,调整终端的输入输出规则、特殊控制字符以及串口通信相关属性,是终端管理和串口调试场景中常用的工具之一。

stty的核心作用
stty的核心功能是管理终端设备的行规程设置,主要包括以下几类配置:
- 输入输出控制:比如是否开启输入回显、是否将换行符转换为回车换行、是否忽略特定输入字符等
- 特殊控制字符定义:比如中断进程、暂停输出、结束输入等快捷键对应的字符设置
- 串口通信参数:比如波特率、数据位、停止位、校验位等,常用于串口设备调试
- 终端模式切换:比如将终端切换到原始模式或者规范模式,适配不同的交互场景
stty的常用参数与用法
查看当前终端设置
直接使用stty -a命令可以查看当前终端的所有配置参数,输出内容会包含当前的输入输出标志、控制字符定义等信息:
# 查看当前终端所有配置 stty -a # 输出示例(部分内容) # speed 38400 baud; rows 24; columns 80; line = 0; # intr = ^C; quit = ^; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; # -brkint -imaxbel iutf8 # 上面的^C表示Ctrl+C,是默认的中断进程控制字符
修改输入回显设置
默认情况下终端输入的内容会回显到屏幕上,使用stty可以关闭或者开启回显,常用于密码输入等场景:
# 关闭输入回显,输入的内容不会显示在屏幕上 stty -echo # 开启输入回显,恢复默认的输入显示行为 stty echo
设置串口通信参数
在嵌入式开发或者串口设备调试时,经常需要用stty配置串口的波特率、数据位等参数,以下是设置串口波特率为9600的示例:
# 设置/dev/ttyS0串口的波特率为9600,8位数据位,无校验,1位停止位 stty -F /dev/ttyS0 9600 cs8 -cstopb -parenb # 参数说明: # -F 指定要配置的终端设备路径 # cs8 表示8位数据位 # -cstopb 表示1位停止位(cstopb是2位停止位,加-表示关闭) # -parenb 表示无校验(parenb是开启校验,加-表示关闭)
恢复终端默认设置
如果修改终端设置后出现异常,可以使用stty sane命令快速恢复终端的默认配置:
# 恢复终端默认设置 stty sane
stty使用注意事项
使用stty修改终端设置时,需要注意以下几点:
- stty的修改仅对当前终端会话生效,关闭终端后配置会恢复默认
- 修改串口参数时需要确保指定的设备路径正确,且当前用户有对应设备的操作权限
- 如果误操作导致终端无法正常输入,可以尝试输入
stty sane然后按回车恢复默认设置 - 部分控制字符的修改可能会影响终端的常规操作,比如修改intr对应的字符后,原来的Ctrl+C可能不再能中断进程
常见应用场景
stty在实际使用中有很多常见场景:
- 串口设备调试:配置串口参数和嵌入式设备、传感器进行通信
- 脚本交互优化:在shell脚本中关闭回显,实现安全的密码输入逻辑
- 终端异常修复:终端出现乱码、输入无响应时,用stty sane恢复默认配置
- 特殊交互场景适配:比如需要读取原始输入字符时,将终端切换到原始模式