為什麼 *nix 檔案系統支援帶有換行符的檔案名稱?

為什麼 *nix 檔案系統支援帶有換行符的檔案名稱?

根據這一頁:

Linux 中的檔案名稱可以包含除 (1) 正斜線 ( / ) 之外的任何字符,正斜線保留用作根目錄(即包含所有其他目錄和檔案的目錄)的名稱和目錄分隔符,以及(2) 空字元(用於終止文字段)。允許使用空格,但最好避免使用空格,因為在某些情況下它們可能與舊版軟體不相容。

太好了,這兩個限制都很有意義。既然顯然可以禁止在檔案名稱中包含某些字符,為什麼允許換行符呢?據我所知,它們唯一的用途是使我們的腳本複雜化。文件名中是否有一個新行的有效理由?

答案1

NUL/具有其指定的系統功能。其他角色則不然。

這就是它的基礎——剩下的就是觀點、猜測和歷史。聽到、讀到等,僅作為填料不是辯論或爭論:

  • 透過禁止某些字符,您會增加檔案系統本身的複雜性,這與損害它是一樣的。
  • 在各種系統上哪些位元組構成換行符呢?<CR>對比<LF>
  • 如果遠端系統決定在 NFS 上建立帶有換行符的檔案怎麼辦?
  • 如果檔案名稱損壞而檔案內容完好怎麼辦?
  • 如果應用程式在檔案名稱中編碼資訊怎麼辦?

繼續下去

  • 修復使用者軟體中的錯誤是系統的工作嗎?
  • 系統是否應該在其根級別上保護使用者免受自身侵害?
  • 各種 shell 的內部實作方式是否應該決定哪些檔案名稱被視為合法?

基本作業系統沒有設定限制。進出系統的資訊是位元組流。如果位元組沒有特殊意義,則不要透過添加應在使用者空間處理的檢查來建立開銷。


無論如何,最大的問題很可能是允許換行符和其他控製字元的相當長的歷史。

另一種情況是禁止什麼。你提到了換行符,但在 UNIX 石器時代的討論中,這個問題一直存在爭議,然後還包括其他字元。應該*禁止嗎?以 開頭的檔名怎麼樣-?和DELESC?是否應該禁止所有控製字元?等等等等。

不幸的是,我不記得創始人或程式碼維護者對這個主題的任何引用。

相關內容