终端活力
自从 Douglas Engelbart 翻转轨迹球并发现鼠标以来,我们与计算机的互动方式已经从语言学转向象形文字。也就是说,我们不再在现在称为命令行界面 (CLI) 的提示符下键入命令,而是点击小图标并将它们拖到其他小图标,以指导我们的机器执行我们希望的任务。
苹果公司率先将这个概念商业化,我们现在称之为图形用户界面 (GUI),用最初的纯 GUI Macintosh 取代了其开创性的、主要由键盘驱动的 Apple // 微型计算机。微软在迅速推出几乎无法使用的 Windows 1.0 版本后,在后来的版本中加入了“开始”菜单和按钮工具栏,共同巩固了鼠标驱动的操作系统作为我们其余人的默认界面。Linux 及其灵感来源 Unix 长期以来一直倡导许多用户通过极其强大的 CLI 同时运行许多程序。因此,它后来加入了 GUI 阵营,推出了同样极其强大但以不安全著称的 X-Windows 框架以及它最终支持的许多 GUI,例如 KDE 和 Gnome。
GUI Linux
但是多年来,X-Windows 在 Linux 上的主要作用与其名称非常相符——管理大量的 xterm 窗口,每个窗口都运行一个 CLI。这并不是说 Linux 在任何方面与 Windows / 图标 / 鼠标 / 指针 风格的程序交互不兼容——这次的缩写留给有眼光的读者练习。而是因为我们喜欢完成工作。在查尔斯·巴贝奇最初的分析引擎的后代有用的许多领域中,通过语言学指导我们希望的任务通常比点击和拖动图标要快得多。
GUI 确实使在 Linux 上组织许多终端会话更直观,尽管不一定更实用。在我漫长的工程职业生涯中的一段时期,我使用网络上的数十台计算机构建了大量软件,并发现了通过 Gnu 的 screen 工具管理所有这些计算机的魅力和挑战。单个终端或 xterm 不仅可以包含来自网络上多台计算机的多个命令行会话,而且我还可以断开与所有这些会话的连接,让他们继续工作,然后开车回家,重新连接以查看工作进展情况。这在 1990 年代初期非常了不起,当时 Windows 2 和 Mac OS 6 统治着世界。即使在今天,这也相当了不起。
抨击 GUI
但是终端始终专注于效率。作为 1971 年 Unix 系列操作系统的首次亮相界面,当时 110 波特是“高速连接”,将“copy”缩短为“cp”,将“list”缩短为“ls”使效率提高了一倍,这被认为是一个巨大的胜利。想象一下将“concatenate”缩短为“cat”所取得的改进!但是,与收集命令(用于 bash 或 shebang 指定的任何其他脚本语言)到一个文本文件中相比,这些都只是小菜一碟,只需键入其名称即可根据需要重复执行。
像大象一样,bash 永远不会忘记。history 命令于 1978 年添加,用于回忆最近的命令,现在默认情况下最多可回忆一千个命令。虽然许多人谴责 Facebook 坚定地试图了解你最深的秘密,但 bash 正确地做到了这一点,将你的命令历史记录存储在你本地机器上的私有文件中,这才是它应该在的地方。这些命令被编号,以便您可以使用字面意义上的 bang 重复它们——也就是说,!42
将重复编号为 42 的较早命令。并且 bash 的历史记录功能也预见了 Google。CTRL-R 启动在整个命令历史记录中反向搜索以查找匹配的命令,您可以编辑或直接执行该命令。我仍在等待一个实用的点击和拖动历史记录。
某些交互当然受益于点击。即使我能以其他方式创作伟大的艺术,我也不会用键盘创作伟大的艺术,而且古老的纯文本 Lynx 网络浏览器现在并没有真正挑战 Firefox 或 Chromium。
但是对于我们这些懒惰的人来说,这种懒惰不是让你受到父母和老师的训斥甚至更糟的那种懒惰,而是引导你进入计算机和自动化世界的懒惰,用语言学而不是象形文字执行你的任务为你打开了效率和生产力的光辉世界的大门。这是值得写的东西,你不觉得吗?
更多关于讨论的技术
- Gnu screen 允许在许多虚拟会话之间复用物理接口,例如 Gnome 终端或 Konsole 窗口、ssh 连接或非 GUI 终端。与安全外壳 (ssh) 特别有用,终端会话可以在断开连接时保持运行,然后在下一个 ssh 会话开始时重新连接。可以在大多数 Linux 发行版中使用 CTRL-Alt F1 到 F7 在桌面的同时打开非 GUI 终端(称为 tty,用于电传打字机 - 它们曾经通过电话线实际键入字母),Gnu screen 在这里也非常好用。其中一个 tty 正在运行你的 GUI,但找到它取决于你自己。
- Shebang(“hash bang”的缩写)是要作为脚本运行的文本文件的第一行,指定应该将文件中其余行的内容传递给哪个解释器程序。对于 bash,传统的、更安全的和更灵活的 shebang 是 `#!/bin/bash`
,尽管我草坪上的一些年轻人告诉我他们更喜欢更便携的 `#!/usr/bin/env bash`
。如果您更喜欢编写 Python 命令而不是 bash,那么 `#!/usr/bin/env python3`
就是适合您的 shebang。
```bash #!/bin/bash # Convert all office documents to PDF find . -name '*.od?' -o -name '*.xls*' -o -name '*.doc*' -o -name '*.ppt*' | while read file ; do soffice --headless --convert-to pdf "$file" done ```
- 要翻转一个位并使您的名为 linguistic_brilliance 的文本文件像二进制程序一样运行,请尝试 `chmod a+x linguistic_brilliance`
。此命令 [ch]
anges 更改文件 [mod]
e 模式以授予 [a]
ll 所有用户执行该文件的权限 [x]
ecute。看看这些短命令节省了多少时间?并且您也可以尝试 `lin[TAB]`
而不是完整的文件名来节省您的手指头,因为 Tab 键请求您的 shell 从上下文中完成您想要键入的内容。如果它粗鲁地对您发出哔哔声,请再次敲击它(我的意思是 Tab 键),您的 shell 应该会给您一个它认为快乐的结局列表,以帮助您。
- CTRL-R 开始在您的命令历史记录中搜索您键入的任何内容。额外的 control-r 按键将搜索下一个匹配项,向后移动时间。Tab 键将选择当前找到的命令,并将光标放在匹配项的开头以进行编辑。Enter 键将执行显示的命令。这一切都非常规范和高效,但并非完全显而易见。