为用户封装操作系统 API

我们需要一个 “用户能直接操作” 的程序管理操作系统对象。


需求分析

  • 我们每天都拿操作系统做什么?
    • 启动应用程序
      • 即时通信
      • 影音娱乐
      • 生产学术垃圾
    • 没了
  • 我们需要一个程序能协调多个应用程序

为用户封装操作系统 API

Shell: Kernel 的 “外壳”

  • “与人类直接交互的第一个程序”

The UNIX Shell

“终端” 时代的伟大设计

  • “Command-line interface” (CLI) 的巅峰

The UNIX Shell (cont'd)

Shell 是一门 “把用户指令翻译成系统调用” 的编程语言

  • 原来我们一直在编程
    • 直到有了 Graphical Shell (GUI)
    • Windows, Gnome, Symbian, Android

脾气有点小古怪的 UNIX 世界

“Unix is user-friendly; it's just choosy about who its friends are.”

  • 但如果把 shell 理解成编程语言,“不好用” 好像也没什么毛病了
    • 你见过哪个编程语言 “好用” 的?

(UNIX 世界有很多历史遗留约定)

The Shell Programming Language

基于文本替换的快速工作流搭建

  • 重定向: cmd > file < file 2> /dev/null
  • 顺序结构: cmd1; cmd2, cmd1 && cmd2, cmd1 || cmd2
  • 管道: cmd1 | cmd2
  • 预处理: $(), <()
  • 变量/环境变量、控制流……

Job control

  • 类比窗口管理器里的 “叉”、“最小化”
    • jobs, fg, bg, wait
    • (今天的 GUI 并没有比 CLI 多做太多事)

人工智能时代,我们为什么还要读手册?

今天的人工智能还是 “被动” 的

  • 它还不能很好地告诉你,你应该去找什么
  • Manual 是一个 complete source
    • 当然,AI 可以帮助你更快速地浏览手册、理解程序的行为

Let's RTFM, with ChatGPT Copilot!

  • man sh - command interpreter
  • Read the friendly manual 😃