公众号旧文
为什么鼠标可以随意定位,命令行却不行?
刚接触命令行时,你肯定会有一种强烈的不适感。
因为在 GUI 图形界面里,你可以用鼠标,想点哪里就点哪里。
但到了命令行,却好像突然回到了 DOS 时代。
只能靠方向键一格一格的移动光标。
很多人会觉得命令行落后。
但 GUI 和命令行,本就不是同一种东西。
一、GUI 是二维世界
GUI 的本质,是屏幕坐标。
比如:
- 按钮在 (300,200)
- 窗口在 (100,50)
整个 GUI,本质上就是把东西摆在一个二维平面上。
于是鼠标天然就适合这种模式。
因为鼠标本身也是二维的。
它就是我指哪里,就操作哪里。
所以 GUI 非常适合:
- 拖动
- 缩放
- 框选
- 多窗口并排
- 随意点击
因为整个系统,从底层开始,就是按平面空间设计的。
二、命令行不是界面
而命令行不一样,命令行更像打字机。
你看到的终端:
root@server:~# ls
a.txt
b.txt
c.txt
并不是窗口里的对象,而是一串字符。
终端并不知道 a.txt 是一个文件图标。
它只知道第 2 行第 1 列开始,有几个字符。
所以命令行里的光标,并不是鼠标指针。
而是文字插入点,它更像 Word 里的那个闪烁竖线。
三、很多终端最早都不是屏幕
最早的终端,甚至都没有显示器,而是真正的电传打字机。
当你输入:
ls
机器就会:
“哒哒哒”打印出来。
后来有了 CRT 显示器,Unix/Linux 也依然沿用了字符终端的模型。
直到今天,Linux 里很多地方还叫 TTY(Teletypewriter)
翻译过来就是电传打字机。
四、那命令行不能精准定位吗?
也不是。
只是 GUI 用的是空间定位,CLI 用的是语义定位。
比如 GUI 里,你找一个文件靠眼睛,靠滚轮,靠鼠标指针。
但命令行里,你会直接说:
find / -name "*.log"
或者:
grep 1.2.3.4 access.log
意思是:帮我找包含这个内容的地方。
你会发现命令行根本不关心它在屏幕上的哪里。
它只关心它是什么。
五、CLI 有时反而更精准
如果让你在 1GB 的网站访问日志里找某个 IP。
GUI 你可能得滚半天。
而命令行:
grep 1.2.3.4 access.log
可以瞬间定位。
因为 CLI 的优势,不是看,而是描述。
你不是用鼠标去点,而是在告诉计算机你要什么。
六、现代终端已经偷偷 GUI 化了
现在很多终端,已经开始慢慢 GUI 化了。
比如:
- 鼠标选中文本
- 点击链接
- 文件拖拽
现在大家看到的命令行,已经不是当年的原始 CLI 了,而是披着终端皮肤的现代图形程序。
七、所以两者根本不是谁高级
真正的区别不是 GUI 能精准定位,CLI 不能。
而是 GUI 更擅长:
- 空间操作
- 可视化
- 直觉交互
CLI 则更擅长:
- 描述规则
- 批量处理
- 自动化
- 精确筛选
所以很多程序员到最后,反而会觉得有些事情,用鼠标才是真的累。