Technology · 實用指南
Linux 顯示「File name too long」?先證明路徑、元件與資料邊界
固定原始呼叫與參數,按編碼位元組量測並查詢真實目標,在截短前區分資料誤傳、NAME_MAX 與 PATH_MAX。

「File name too long」不是單一診斷:單一元件、完整路徑或符號連結解析的中間路徑都可能超限;把 JSON、URL 或憑證本文傳入檔名介面也會產生相似錯誤。
不要先套用統一字數。先確認物件是資料還是路徑,再量測元件與完整路徑的編碼位元組,查詢真實目標,最後只修復已證明的分支。
固定原呼叫與原參數
記錄 API、errno、時間、程序、工作目錄、目標掛載點及參數的安全表示;敏感內容只保留長度與雜湊。
核對介面需要路徑、位元組、串流或已解析物件;若檔名像 JSON、HTML、PEM、base64 或完整回應,改用資料或解析介面。
按位元組量測並拆分路徑
對真實路徑,在失敗情境轉為絕對路徑,拆分元件並以 len(os.fsencode(component)) 量測。
分別記錄最長元件與完整路徑,保留前後綴、副檔名、編碼與 Unicode 正規化資訊。
查詢真實目標限制
對實際父目錄執行 getconf NAME_MAX、getconf PATH_MAX,或以 os.pathconf 查詢 PC_NAME_MAX、PC_PATH_MAX。
網路掛載、加密層與應用程式 API 可能更嚴格;同時保留符號連結與解析後路徑證據。
只修復已證明的分支
資料誤傳就換成解析、位元組、串流或檔案物件 API;單元件超限就縮短該元件或使用防碰撞的確定性識別碼。
完整路徑超限就縮短受控根目錄或層級;不要廣泛吞掉 OSError,也不要靜默截短。
重播原呼叫並關閉紀錄
用相同輸入型別、程序情境、工作目錄與目標重試,驗證建立、寫入、必要時 fsync、讀回與清理。
記錄介面契約、位元組長度、查詢限制、修復分支、名稱映射與驗收結果;錯誤移到別處時重新調查。
