Linux 常用的 sudo 指令到底是什麼縮寫?
sudo 這個指令很常用,不知道你有沒有好奇過:它到底是哪幾個英文字的縮寫?
sudo 是 su 加上 do,這點大家沒有爭議。所以「sudo 是什麼縮寫」這個問題,其實是在問 su 是什麼。網路上的答案主要分兩派:
- superuser do:以超級使用者身分做事
- substitute user do:換成另一個使用者做事
英文維基百科兩個都收了,說 sudo 原本是 superuser do,現代意思則是 substitute user do。兩派都講得很有把握,我就直接去翻一手資料:Unix 原始手冊、1985 年貼在 Usenet 上的 sudo 原始碼、sudo 官方的 git 歷史,還有 sudo 官網二十幾年來的存檔。
先講結論
- sudo 的原意是 superuser do。1985 年的原始碼和 2014 年創作者本人的訪談都對得上。
- 1996 到 2007 年,sudo 官方 FAQ 和首頁都寫 superuser do。2007 年改成 su “do”,一直用到現在。
- substitute user do 在 sudo 的 git 歷史和官網快照裡都找不到。這是後人用 su 的現代定義推出來的說法。
- su 自己也換過說法:1971 年的手冊寫「變成 super-user」,1979 年的 V7 才出現「substitute user」。
下面照時間順序一站一站講。
1971 年:su 只會做一件事
Unix 第一版手冊(1971 年 11 月 3 日)裡,su 的 NAME 行是這樣寫的:
su — become privileged user
手冊目錄頁寫得更直接:su ... become super-user。
用法也很陽春:su password,密碼直接當參數打在指令後面。說明文字是這樣開頭的:
su allows one to become the super-user, who has all sorts of marvelous powers.
意思是 su 讓你變成超級使用者,擁有各種神奇的力量。到了 1973 年的第三版,這句多了一個括號:「marvelous (and correspondingly dangerous) powers」,神奇的力量後面補上「相對也很危險」。兩年之內就有人覺得該加這句警告。
1975 年第六版的 su.c,第一行註解是:
/* su -- become super-user */
整支程式的核心就是 setuid(0),沒有參數可以指定要變成誰。從第一版到第六版,su 都只能變成 root,把它讀成 super-user 完全合理。
要注意的是,這幾版手冊都只描述 su 做什麼,沒有任何一版寫過「su 是 xxx 的縮寫」。super-user 這個讀法來自目錄頁和原始碼註解,不是官方定義。
1979 年:su 換了一個說法
1977 年的 PWB/UNIX 已經讓 su 接受一個 [ name ] 參數,可以切成任何使用者,但 NAME 行還是「become privileged user」。功能先改了,名字的說明還沒跟上。
1979 年 1 月的 Unix 第七版(V7),NAME 行改成:
su - substitute user id temporarily
用法變成 su [ userid ],不指定使用者就預設 root。之後的 3BSD、4.1BSD 到 4.3BSD 都沿用這句。現在 Linux 上 util-linux 的 man page 寫的是「run a command with substitute user and group ID」,也是同一個脈絡。
所以 substitute user 這個讀法也有一手出處,出自 V7 的 NAME 行。
1980 年代初:sudo 誕生,作者心裡的 su 還是 super user
sudo 官網的歷史頁說,sudo 是 Bob Coggeshall 和 Cliff Spencer 在紐約州立大學水牛城分校(SUNY/Buffalo)資工系寫的,跑在一台裝 4.1BSD 的 VAX-11/750 上。
年份有好幾種說法:官網現在寫「around 1980」;官方歷史文件在 2003 年曾有一版寫 Cliff Spencer 在 1983 年寫出第一版;Coggeshall 在 2014 年的訪談裡則說,1981 年左右他剛從水牛城分校畢業。保險的講法是 1980 年代初。
這裡有個小諷刺:4.1BSD 上 su 的 man page 早就寫著 substitute user id temporarily,但 sudo 的作者還是把 su 讀成 super user。證據是 1985 年 12 月貼在 Usenet net.sources 新聞群組上的 sudo 原始碼,前後有兩份。
第一份是 Cliff Spencer 在 1985 年 12 月 9 日貼的。那幾天群組裡有好幾個人在交流同一類小工具(asroot、enable),都是讓指定的使用者用 root 身分跑指令。他回文的開頭是一句「Okay I’ll bite」(好吧,我也來湊一腳),接著貼出自己的 sudo,說它會試著管住誰能用它。man page 的 NAME 行是:
sudo \- do a super thing
原始碼註解寫的是:
* sudo - run a command as su.
五天後,水牛城的 Don Gworek 貼出另一份,作者欄列了五個人。NAME 行寫得比較正經:
sudo \- do a command as the superuser
兩份都寫死 setuid(0),只能變成 root。水牛城那份的 man page 裡,連 sudoers 檔的說明都是「list of superusers」,超級使用者名單。
那幾天還有人貼出另一支 force,也有人回文潑冷水:這類工具不就跟 su -f root -c 一樣嗎?何必重新發明輪子。四十年後,幾乎每台 Linux 機器上都裝著 sudo。
取名的人怎麼說
2014 年 Hackaday 訪問了 Bob Coggeshall,影片大約 4 分 05 秒開始講取名的經過。他說 sudo 要取代的指令是 su,而 Unix 的哲學是指令越短越好:兩個字母很好,三個還可以,四個就不行。所以他在 su 後面加上 do,意思是:
do a super user thing
他還說,這句就是當時 man page 的標題,正好和 1985 年那份「do a super thing」對上。(上面的引述是對照 YouTube 自動字幕整理的,關鍵句「do a super user thing」在字幕裡很清楚。)
1996 到 1999 年:sudo 學會變成別人,名字的說明卻沒跟上
1996 年 4 月 28 日,外部貢獻者 Keith Garry Boyce 的 patch 被合進 sudo,加上 -u 選項,從此可以用 root 以外的身分執行指令(commit da33d14c)。官方封存裡最早能下載到、帶 -u 的版本是 1996 年 8 月的 cu-sudo 1.5。
但 man page 的 NAME 行沒有跟著改,一直寫到 1999 年:
sudo - execute a command as the superuser
直到 1999 年 8 月 1 日的 commit 29974bceb,commit 訊息寫著「Update to reality」,才改成現在的樣子:
-sudo - execute a command as the superuser
+sudo - execute a command as another user
功能在 1996 年就變了,說明晚了三年才追上「現實」。
同一時期,sudo 官方對名字的說法很明確。1996 年 8 月的 FAQ(commit 6ec8aba27)有一題:
Q) How do you pronounce `sudo'?
A) soo-doo (for superuser do).
Wayback Machine 裡最早的官網首頁存檔是 1998 年的,第一句就是「Sudo (superuser do) allows a system administrator to…」。
2007 年:官方把答案改成 su “do”
Wayback Machine 的快照顯示,官網首頁到 2007 年 3 月 29 日都還寫著 superuser do。到了 2007 年 5 月 16 日,變成:
Sudo (su “do”) allows a system administrator to…
同年 6 月 9 日,FAQ 那題也改了(commit 7323cbb50):
The official pronunciation is soo-doo (for su “do”). However, an alternate pronunciation, a homophone of “pseudo”, is also common.
這兩段到今天還在 sudo.ws 的介紹頁和 troubleshooting 頁上。
為什麼要改?這次 commit 的訊息只寫「Mention alternate sudo pronunciation」,也就是補充另一種唸法,完全沒提為什麼 superuser 不見了。sudo 兩個郵件列表的封存我也找過,沒有相關討論。所以改寫的動機沒有一手資料可查。
我自己的解讀(純屬推測):1996 年以後 sudo 已經可以變成任何人,繼續寫 superuser do 就不精確了。改成 su “do” 之後,官方不用替 su 下定義,讀成 super user 或 substitute user 都說得通。
那 substitute user do 是從哪來的?
我在 sudo 的完整 git 歷史(從 1993 年一路到 2026 年)裡搜「substitute user」,只找到兩筆 2002 年的程式碼,講的是提示字串裡 %u、%h 要「替換成使用者名稱、主機名稱」,跟 sudo 這個名字無關。官網歷年快照裡也沒有。
維基百科「substitute user, do」這個說法引用的是 ArchWiki 和一本 Linux 考照書。它的推論是:現代 su 的定義是 substitute user,sudo 又能以任何使用者身分執行,所以 sudo 等於 substitute user do。
這個推論本身說得通,用來記功能也很好記,但它是後人推出來的,不是 sudo 作者或官方講的話。
所以該怎麼唸?
官方唸法是 soo-doo,後半跟英文的 do 同音。官方 FAQ 也承認,唸成跟 pseudo 同音(後半是 doh)也很常見。
Coggeshall 在訪談裡被問到會不會介意別人唸成 pseudo,他說完全不會,他自己唸 soo-doo,但大家愛怎麼唸就怎麼唸。
整理成一條時間線
flowchart TB
A["1971 Unix V1<br/>su:become privileged user<br/>只能變成 super-user"] --> B["1977 PWB/UNIX<br/>su 可以指定使用者<br/>名字的說明沒改"]
B --> C["1979 Unix V7<br/>su:substitute user id temporarily"]
C --> D["1980 年代初 SUNY/Buffalo<br/>寫出 sudo,只能變成 root"]
D --> E["1985 貼上 Usenet<br/>sudo:do a super thing"]
E --> F["1996 sudo 加入 -u 選項<br/>FAQ:soo-doo (for superuser do)"]
F --> G["1999 man page<br/>改成 as another user"]
G --> H["2007 官方說法<br/>改成 su #quot;do#quot;"]
一句話回答標題的問題:sudo 是 su 加上 do。創作者心中的 su 是 super user,所以原意是 superuser do;官方現在只寫 su “do”,su 要讀成哪個字,留給你自己決定。
想自己驗證的話
這篇的關鍵證據都可以用一兩行指令重現:
# Unix V7(1979)su 的 NAME 行
curl -s https://raw.githubusercontent.com/dspinellis/unix-history-repo/Research-V7/usr/man/man1/su.1 | sed -n 1,3p
# Unix V6(1975)su.c 的第一行註解
curl -s https://raw.githubusercontent.com/dspinellis/unix-history-repo/Research-V6/usr/source/s2/su.c | head -1
# sudo 的 man page 在 1999 年從 superuser 改成 another user(完整歷史,clone 要等一下)
git clone https://github.com/sudo-project/sudo && cd sudo
git show 29974bceb -- sudo.pod | grep -A3 NAME
# 官方 FAQ 的唸法說明:1996 年版 vs 2007 年版
git show 6ec8aba27:TROUBLESHOOTING | grep -A1 pronounce
git show 7323cbb50 -- TROUBLESHOOTING | grep '^+A)'
參考資料
- Unix 第一版手冊 su(1)(1971):man.cat-v.org;目錄頁掃描檔:manindex.pdf
- Unix V6 su.c、V7 su.1(unix-history-repo)
- PWB/UNIX 1.0 su.1(TUHS)
- 1985 年
net.sources封存:Internet Archive Usenet Historical Collection - sudo 官方:History、Intro、Troubleshooting
- sudo 原始碼:sudo-project/sudo
- Hackaday 訪談影片:Inventing the Unix “sudo” command - Interview with Bob Coggeshall(2014)
- 英文維基百科:sudo