跳至主要內容
CITY DESK
科技 設計評論

一條指令被溫柔地通知退休:hdiutil 的棄用,是蘋果最安靜的一次介面改版

從 macOS 27 將 hdiutil 標記棄用、推薦改用 diskutil image 的消息出發,觀察一條終端指令的退休,如何在錯誤訊息與提示設計上留下痕跡。

SHAO MEDIA 新聞中心 閱讀約 4 分鐘

先從一個幾乎沒有人會主動去看的地方看起:man page。

8 月 24 日,開發者 Jeff Johnson 在 macOS 27 Golden Gate 的說明文件裡發現,hdiutil 的手冊頁被加上了棄用提示,蘋果建議改用 diskutil image。隔日 IT 之家等媒體跟進報導。對大多數使用者而言,這則消息安靜到近乎不存在;但對長年依賴終端處理磁碟鏡像的維修人員與指令碼作者來說,這是蘋果少見地對外宣告:一條服役超過二十年的指令,開始走退場流程。

一條指令的介面,其實是它的錯誤訊息

hdiutil 的資歷可以追溯到早期 Mac OS X。掛載、創建、調整、彈出磁碟鏡像,這些動作長期由它包辦,也常被拿來解決系統拒絕彈出「正在使用中的磁碟鏡像」這類疑難雜症。它沒有圖形介面,沒有按鈕與拖放,它的「介面」就是指令列的輸出:一行行的路徑、狀態與錯誤碼。

正因如此,蘋果推薦的替代品 diskutil image 與它的差異,也不在畫面上,而在那些最細微的行為縫隙裡。Johnson 舉了一個具體例子:備份流程調用 hdiutil 時,若檔案屬於 root,系統會彈出身份驗證提示,使用者輸入密碼後流程可以繼續;換成 diskutil image,提示不會出現,取而代之的是一條通用錯誤,直接返回。

這就是兩個指令在介面設計上的真正分野。hdiutil 的年代,終端工具願意在中途停下來問人;diskutil image 的設計哲學則是把問題包裝成返回值,交給調用它的程式去處理。對自動化流程來說後者更純粹,對坐在螢幕前的人來說,前者更體貼。一個會喊你輸入密碼的工具,與一個只會丟出錯誤碼的工具,即使功能相同,也是兩種表情。

棄用為何先從 man page 開始

蘋果處理退場的方式值得細看。它沒有發公告,沒有在系統偏好裡跳出通知,只是悄悄地在手冊頁裡加了一行建議。這種做法延續了蘋果近年一貫的節奏:先標記、再觀察、最後移除,時間表從不說死。蘋果至今沒有說明何時會徹底移除 hdiutil,而 diskutil image 也還沒覆蓋前者的全部功能,兩者行為仍有差異。

換句話說,這是一次還沒完成的交接。蘋果先把意圖寫進文件,讓有心的開發者提前遷移,也讓自己保留隨時調整的空間。這種「先在文件裡留話」的做法,本質上也是一種介面設計:它假設讀 man page 的人是願意提前準備的人,而這個假設在開發者社羣裡大致成立。這與我們先前討論過的蘋果因版本分支外流影片而暴露未發布功能有某種對照意味,同樣是蘋果內部機制(一為功能開關、一為文件標記)意外成為外界讀懂其產品路線的窗口。

安全性:藏在棄用背後的可能動機

媒體推測,這次棄用可能與安全有關。2025 年 10 月 15 日,蘋果發布安全更新,修復了 macOS Sonoma 的一個漏洞:執行 hdiutil 指令時可能意外執行任意程式碼,而蘋果的修復方式是直接移除存在風險的程式碼。

這個細節透露了一種務實的取捨。與其繼續維護一個歷史包袱沈重的老工具,蘋果選擇把風險程式碼剪掉,再引導使用者走向重新設計過的 diskutil image,連同支援 ASIF(Apple Sparse Image Format,蘋果稀疏鏡像格式)等新格式。老指令的退休,很多時候不是功能過時,而是它的實作方式已經難以安全地維持。這也讓 hdiutil 的棄用提示讀起來像一份體面的告別:功能會有接棒的人,只是接棒的人換了一套處理錯誤的方式。

收束:終端也在被重新設計

蘋果何時拔掉 hdiutil,沒人知道。但這次棄用提示提醒了一件事:介面設計的討論很少觸及指令列,而指令列恰恰是最誠實的介面。一個工具會不會在中途徵求你的同意、會不會把失敗原因講清楚,這些在圖形介面裡被稱為「體驗」的東西,在終端裡同樣存在,只是以提示與錯誤碼的形式出現。

hdiutil 的離場目前只走了第一步。等 diskutil image 補齊功能、錯誤處理的行為差異被文件化之後,這場交接才算真正完成。在那之前,每一個還在調用 hdiutil 的備份腳本,都是舊介面設計仍在服役的證據。

#macos終端指令設計#蘋果開發者介面#磁碟工具介面