New zine: The Secret Rules of the Terminal

Julia Evans

新小誌:終端機的祕密規則

嗨!在撰寫了好幾個月關於終端機的深度部落格文章後,我在週二發布了一本名為「The Secret Rules of the Terminal(《終端機的祕密規則》)」的新小誌!

你可以在這裡以 12 美元購得:https://wizardzines.com/zines/terminal,或是在此取得包含我所有小誌的 15 本套組

這是封面:

目錄

目錄如下:

為什麼要談終端機?

我每天使用終端機已經 20 年了,雖然我對終端機很有信心,但一直有種不太踏實的感覺。通常一切運作正常,但有時出了問題,就會覺得根本無從查起,或至少感覺會牽扯出一大堆麻煩。

於是我開始試著列出自己在終端機中遇過的各種奇怪問題,才發現終端機有許多細微的不一致,例如:

  • 有時可以用方向鍵移動游標,有時按方向鍵卻只會印出 ^[[D
  • 有時可以用滑鼠選取文字,有時卻不行
  • 有時執行的指令會被儲存到歷史紀錄中,有時卻不會
  • 有些 shell 可以用上方向鍵查看上一則指令,有些卻不行

如果你每天使用終端機長達 10 年或 20 年,即使不完全理解這些現象 為什麼 會發生,你大概也會培養出一種直覺。

但對它們有直覺,跟理解它們為何發生是兩回事。為了寫這本小誌,我其實花了很多功夫去釐清終端機中究竟 發生了什麼,才能說明該如何有條理地思考它。

規則從來沒有被完整寫下來

原來,要完全理解終端機運作的「規則」(例如:要怎麼編輯輸入的指令?要怎麼離開程式?要怎麼修正顏色?)非常困難,因為「終端機」其實是由許多不同的軟體拼湊而成(你的 terminal emulator、作業系統、shell、像 grep 這類核心工具程式,以及你安裝的各種其他終端機程式),而這些軟體是由抱持不同想法的人所撰寫的。

所以我想寫一本能說明以下內容的小誌:

  • 終端機的 4 個組成部分(你的 shell、terminal emulator、應用程式和 TTY driver)如何協同運作
  • 你可以預期終端機中各種操作的一些核心慣例
  • 許多使用終端機程式的訣竅與技巧

這本小誌講解終端機內部運作中最實用的部分

終端機的內部運作一團混亂。很多設計之所以是現在這樣,只因為某人在 80 年代做了某個決定,而現在已經無法改變,老實說,我認為把所有細節都學起來並不值得。

但有些部分並不難理解,卻能確實讓你的終端機使用體驗變得更好,例如:

  • 如果你了解 你的 shell 負責哪些事,就能設定你的 shell(或換成另一套!)來更輕鬆地取用歷史紀錄、獲得強大的 Tab 自動補齊功能等等
  • 如果你了解 escape codes,當你用 cat 把二進位檔印到標準輸出而弄亂終端機時,就沒那麼可怕了,只要輸入 reset 就能恢復正常
  • 如果你了解 色彩 的運作方式,就能消除終端機中對比不佳的配色,讓文字真正清晰可讀

寫這本小誌時,我意外學到了很多

How Git Works(《Git 運作原理》) 的時候,我以為自己已經很懂 Git 的運作,而事實也的確如此。但終端機不一樣。即使我對終端機非常有信心、即使我已經每天使用它 20 年,我對終端機運作仍有許多誤解,而且(除非你是 tmux 之類工具的作者)我想你很可能也是如此。

有幾件我學到且對自己真的有用的事:

  • 我更了解終端機的結構,因此在除錯遇到的各種奇怪狀況時更有信心了(我甚至還向 fish 提出了一項 小改進!)。要精確判斷終端機中怪事是由哪個軟體造成的,仍然不算 容易,但我現在已經進步很多。
  • 你可以寫一個 shell 腳本來 透過 SSH 複製到剪貼簿
  • reset 在底層的運作方式(它相當於執行 stty sane; sleep 1; tput reset)——基本上我學到,根本不需要費心去記 stty sanetput reset,只要執行 reset 就好
  • 如何查看程式印出的隱形 escape codes(執行 unbuffer program > out; less out
  • 為什麼我 Mac 上像 sqlite3 這類內建的 REPL 這麼難用(它們用的是 libedit 而非 readline

過程中我寫的部落格文章

和往常一樣,我這段期間也寫了一堆關於各種支線探索的部落格文章:

協助完成這本小誌的人們

很久以前我大多是獨自寫小誌,但每個新專案都獲得愈來愈多的協助。為了完成這一本,我從九月到六月每個平日都與 Marie Claire LeBlanc Flanagan(瑪莉·克萊兒·勒布朗-弗拉納根) 一起工作。

封面由 Vladimir Kašiković(弗拉基米爾·卡希科維奇)繪製,Lesley Trites(萊絲莉·崔特斯)負責文字編輯,Simon Tatham(賽門·塔特姆)(PuTTY 的作者)負責技術審校,我們的營運經理 Lee 負責謄寫以及其他無數事務,而 Jesse Luehrs(傑西·盧爾斯)(我所認識少數真正了解終端機那些惱人內部運作的人之一)則與我進行了許多極有幫助的對談,討論終端機中究竟發生了什麼事。

取得小誌

以下是再次取得小誌的連結:

和往常一樣,你可以選擇在家自行列印的 PDF 版本,或是寄送到府的印刷版本。唯一的注意事項是,印刷版將於 八月 出貨——我需要先等訂單進來,估算該印多少本後再送印。

原文由 Julia Evans 發布

本文章由 muse-spark-1.2-contributor 進行翻譯