新小誌:《終端機的秘密規則》
原文由 Julia Evans 于 發布,訂閱此部落格
嗨!在花了好幾個月撰寫關於終端機的深度部落格文章後,我在週二推出了一本名叫「The Secret Rules of the Terminal」的新小誌!
你可以用 12 美元在這裡入手:https://wizardzines.com/zines/terminal,或一次收藏全部 15 本小誌的合集。
封面長這樣:
目錄
目錄如下:
為什麼要談終端機?
我每天使用終端機已經 20 年了,雖然我對終端機很有把握,但心裡總是有點不踏實。平常大多都運作正常,但偶爾一出問題,就感覺根本無從查起,至少感覺一碰就會牽出一大堆麻煩。
所以我開始試著把在終端機遇過的各種怪問題列出來,才發現終端機藏著好多細微的不一致,例如:
- 有時候可以用方向鍵移動游標,有時候按方向鍵卻只會印出
^[[D - 有時候可以用滑鼠選取文字,有時候卻不行
- 有時候執行的指令會被存到歷史紀錄裡,有時候卻不會
- 有些 shell 可以用上方向鍵叫出上一道指令,有些卻不行
如果你每天使用終端機,用個 10 年、20 年,就算不完全懂這些事為什麼會發生,大概也能培養出一種直覺。
但有直覺跟真正理解為什麼會發生是兩回事。為了寫這本小誌,我其實花了很多功夫去釐清終端機裡到底發生了什麼,才有辦法說明該怎麼去理解它。
這些規則從來沒有被好好寫下來
結果發現,終端機運作的「規則」(要怎麼編輯輸入的指令?要怎麼離開程式?要怎麼修正顏色?)其實非常難完全搞懂,因為「終端機」實際上是由許多不同的軟體拼湊而成的(你的終端機模擬器、作業系統、shell、像 grep 這類的核心工具程式,以及你安裝過的各種終端機程式),而這些軟體又是由不同的人、抱持著不同的想法所寫出來的。
所以我想寫點東西來解釋:
- 終端機的 4 個組成部分(你的 shell、終端機模擬器、應用程式和 TTY 驅動程式)是如何協同運作的
- 你可以預期終端機裡的事物會遵循哪些核心慣例
- 以及大量使用終端機程式的實用技巧
這本小誌只講終端機內部運作中最有用的部分
終端機的內部運作一團亂。很多設計就只是因為有人在 80 年代做了某個決定,現在已經改不掉了,老實說我也不覺得把所有細節都學起來是值得的。
但有些部分其實不難理解,而且真的能讓你用起終端機更順手,例如:
- 如果你搞懂你的 shell 負責哪些事,你就能設定 shell(或換一個 shell!)來更輕鬆地取用歷史紀錄、獲得超好用的 Tab 自動補齊,還有更多功能
- 如果你搞懂跳脫序列,當你用
cat把二進位檔案印到標準輸出而搞亂終端機時,就不會那麼驚慌,只要輸入reset就能恢復正常 - 如果你搞懂顏色的運作方式,就能解決終端機裡難看的顏色對比,讓文字真正看得清楚
寫這本小誌時我自己也學到驚人地多
當我寫 How Git Works 的時候,我自認已經懂 Git 是怎麼運作的,事實上也真的懂。但終端機不一樣。儘管我對終端機非常有把握、儘管我已經每天用了 20 年,我對終端機的運作還是有很多誤解,而且(除非你是 tmux 的作者之類的)我覺得你很可能也是如此。
有幾件事是我學到後真的對自己很有用的:
- 我更了解終端機的結構,所以在遇到奇怪的終端機問題時更有把握除錯(甚至還能向 fish 提了一個小改進建議!)。要精準判斷是哪個軟體造成終端機的怪現象,依然不算容易,但我現在已經進步很多了。
- 你可以寫一個 shell 腳本,透過 SSH 複製到剪貼簿
reset在底層是怎麼運作的(它等同於執行stty sane; sleep 1; tput reset)——基本上我學到以後根本不用去記stty sane或tput reset,直接執行reset就好- 要怎麼查看程式印出的那些看不見的跳脫序列(執行
unbuffer program > out; less out) - 為什麼我 Mac 上內建的 REPL 像
sqlite3用起來那麼難用(因為它們用的是libedit而不是readline)
一路以來寫的相關部落格文章
跟往常一樣,這段期間我也寫了一堆關於各種支線探索的部落格文章:
- 如何把目錄加入你的 PATH
- 終端機問題背後的「規則」
- 為什麼 pipe 有時會「卡住」:緩衝處理
- 一些終端機讓人抓狂的地方
- 我終端機裡的 ASCII 控制字元:關於「Ctrl+A、Ctrl+B、Ctrl+C 等到底是怎麼回事?」
- 在終端機輸入文字其實很複雜
- 打造「現代化」終端機環境需要做哪些事?
- 使用 shell 工作控制的好理由
- ANSI 跳脫序列的標準,這篇其實是在釐清我到底覺不覺得
terminfo資料庫在今天還派得上用場
幫忙完成這本小誌的人們
很久以前我大多是自己一個人寫小誌,但每做一個新計畫,就得到越來越多人的幫忙。這本小誌從九月到六月,我每個平日都和 Marie Claire LeBlanc Flanagan 一起工作。
封面由 Vladimir Kašiković 繪製,Lesley Trites 負責文字編輯,Simon Tatham(PuTTY 的作者)負責技術審校,我們的營運經理 Lee 幫忙謄寫以及處理其他大大小小的事務,還有 Jesse Luehrs(他是我少數認識真的搞懂終端機那些惱人內部運作的人之一)和我進行了無數次非常有幫助的對談,讓我弄懂終端機裡到底發生了什麼事。
入手這本小誌
再附上一次入手小誌的連結:
跟往常一樣,你可以選擇在家自行列印的 PDF 版本,或是寄到府上的紙本版本。唯一要注意的是,紙本訂單會在八月才出貨——我需要等訂單進來,先掌握大概要印多少本,再送去印刷。
隨機一篇部落格


留言
登入後參與討論