Watch at Ease看見世界,讀懂生活。

Technology · 實用指南

Linux 顯示「File name too long」?先證明路徑、元件與資料邊界

固定原始呼叫與參數,按編碼位元組量測並查詢真實目標,在截短前區分資料誤傳、NAME_MAX 與 PATH_MAX。

原創示意圖:區分資料誤傳、單一元件超限與完整路徑超限。
原創示意圖:先證明哪個物件越過哪個邊界。 Watch at Ease

「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、讀回與清理。

記錄介面契約、位元組長度、查詢限制、修復分支、名稱映射與驗收結果;錯誤移到別處時重新調查。

原創流程圖:固定證據、量測位元組、查詢限制、定向修復並重播原呼叫。
原創示意圖:讓診斷、修復與驗收綁定原呼叫。 Watch at Ease