clear 命令仅清空终端当前屏幕视图,发送 ansi 序列 \033[2j\033[h 将光标重置到左上角并清除可见区域,但不删除命令历史、缓冲区内容或已滚动的历史输出;ctrl+l 与其完全等效。

clear 命令到底清了什么?
它没删历史,也没清缓冲区,只是把终端“视图”往下滚一页——就像拉下一张透明幕布,遮住之前的输出,但往上滚动仍能看见所有命令和日志。clear 的本质是发送 ANSI 转义序列 \033[2J\033[H,让光标回到左上角并清空当前屏幕区域。
- 适合快速整理当前视野,比如执行完一长串
ls -la或ps aux后想重新开始输入 - 在远程 SSH 会话中完全兼容,所有终端模拟器(xterm、gnome-terminal、iTerm2、Windows Terminal)都支持
- 注意:如果终端开启了“无限滚动缓冲”,
clear后猛滚鼠标还是能看到几千行前的输出——这不是 bug,是设计如此
Ctrl+L 和 clear 是一回事吗?
是。按下 Ctrl+L 就是触发终端对 clear 的快捷绑定,行为、效果、底层机制完全一致,连发送的控制序列都一样。
- 优势在于快:不用敲 5 个字符 + 回车,尤其在频繁调试、交互式 Python/SQL 环境里省手感
- 风险点:某些终端(如早期 PuTTY 配置异常时)可能把
Ctrl+L绑定成其他功能;若失灵,优先检查终端设置里的“键盘映射”是否被覆盖 - 别误以为它比
clear“更彻底”——它俩清除的范围、保留的数据、对history的影响,100% 相同
真要彻底清掉历史内容,该用什么?
如果目标是让之前的所有输出“物理不可见”,甚至断开后重连也看不到,clear 和 Ctrl+L 都做不到。这时候得换思路:
-
reset:重置整个终端状态,包括清空滚动缓冲区、恢复默认字体/颜色、重置光标位置。但它较重,会短暂卡顿,且可能中断正在运行的 ncurses 程序(如htop) -
printf '\033c':比clear更底层,直接向终端发“全屏重置”指令,效果接近reset但更快,兼容性略差(极老终端可能不识别) - 安全场景慎用:
history -c只清 shell 命令历史,不影响终端显示;而真正擦除屏幕缓冲区的操作无法审计追踪,生产环境不建议依赖
为什么有时候 clear 后光标不见了?
不是光标消失了,是终端在清屏后把光标移到左上角(\033[H),但当前行恰好是空行或被上一条命令的输出“撑高”了,导致视觉上找不到。
- 典型诱因:执行过
cat二进制文件、含乱码的echo、或未正确终止的 ANSI 序列(比如漏了\033[0m) - 快速恢复:再按一次
Ctrl+L,或输入echo $TERM强制刷新一行文本,光标就会重现 - 长期预防:避免直接
cat非文本文件;用file或hexdump -C替代查看可疑内容










