*nix ファイルシステムが改行を含むファイル名をサポートするのはなぜですか?

*nix ファイルシステムが改行を含むファイル名をサポートするのはなぜですか?

によるとこのページ:

Linux のファイル名には、(1) スラッシュ (/) (ルート ディレクトリ (つまり、他のすべてのディレクトリとファイルを含むディレクトリ) の名前およびディレクトリ区切り文字として使用するために予約されています)、および (2) ヌル文字 (テキスト セグメントを終了するために使用されます) 以外の任意の文字を含めることができます。スペースは許可されていますが、場合によってはレガシー ソフトウェアと互換性がなくなる可能性があるため、使用を避けることをお勧めします。

素晴らしい。どちらの制限も非常に理にかなっています。ファイル名に特定の文字を含めることを禁止することは明らかに可能なのに、なぜ改行が許可されているのでしょうか。私が知る限り、改行の唯一の用途はスクリプトを複雑にするファイル名に改行を入れる正当な理由はありますか?

答え1

NUL/指定されたシステム機能を持ちます。他の文字にはその機能はありません。

これが基本です。残りは意見、推測、歴史です。聞いたり読んだりして、フィラー議論や口論ではありません:

  • 特定の文字を禁止すると、ファイル システム自体が複雑になり、ファイル システムが危険にさらされるのと同じことになります。
  • さまざまなシステムでどのバイトが改行として構成されるかについてはどうでしょうか? <CR>vs<LF>など。
  • リモート システムが NFS 上に改行を含むファイルを作成することにした場合はどうなりますか?
  • ファイルの内容はそのままでファイル名が破損した場合はどうなるでしょうか?
  • アプリケーションがファイル名に情報をエンコードするとどうなるでしょうか?

そしてそれは続く

  • ユーザー ソフトウェアのバグを修正するのはシステムの仕事ですか?
  • システムは、そのルートレベルで、ユーザーを自分自身から保護する必要がありますか?
  • さまざまなシェルの内部実装方法によって、どのファイル名が有効であるかが決定されるべきでしょうか?

基本的なオペレーティング システムでは制限は設定されません。システムとの間でやり取りされる情報はバイト ストリームです。バイトに特別な意味がない場合は、ユーザー空間で処理する必要があるチェックを追加してオーバーヘッドを発生させないでください。


いずれにせよ、最大の問題は、改行文字やその他の制御文字が許可されてきたかなり長い歴史である可能性が高いでしょう。

もう 1 つのケースは、何を禁止するかです。改行文字について言及されていますが、UNIX の石器時代からの議論では、これについては他の文字も含めて議論されてきました。*禁止すべきでしょうか? で始まるファイル名はどうでしょうか-?DELおよび はどうでしょうかESC? すべての制御文字を禁止すべきでしょうか? などなど。

残念ながら、このトピックに関して創始者やコード管理者が引用した言葉を思い出せません。

関連情報