web-dev-qa-db-ja.com

LinuxがLF=を改行文字として使用するのはなぜですか?

私の知る限りでは、オペレーティングシステムごとに行末(EOL)文字をマークする方法が異なります。商用オペレーティングシステムでは、EOLにキャリッジリターンを使用します(Windowsではキャリッジリターンとラインフィード、Macではキャリッジリターンのみ)。一方、LinuxはEOLに改行を使用します。

LinuxがEOLにキャリッジリターンを使用しないのはなぜですか(代わりにラインフィードのみ)。

89
Bagas Sanjaya

Windowsの用途 CRLF MS-DOSから継承したためです。

MS-DOSは CRLF すでに使用しているCP/Mに触発されたため CRLF

CP/Mおよび80年代以前の多くのオペレーティングシステムを使用 CRLF それは、テレタイプで印刷された行を終了する方法だったからです(通常のタイプライターのように、行の先頭に戻って次の行にジャンプします)。これにより、前処理がほとんどまたはまったく不要になったため、ファイルの印刷が簡略化されました。また、1つの文字を使用できないようにする機械的な要件もありました。しばらく 必要になる場合があります キャリッジが戻り、プラテンが回転できるようにします。

Gnu/Linuxは LF Unixなので clone1

Unixは単一の文字を使用し、 LF、最初からスペースを節約し、正規の行末に標準化するために、2つの文字を使用することは非効率で曖昧でした。この選択は、1964年にはそれを使用していたMulticsから継承されました。メモリ、ストレージ、CPUパワー、および帯域幅は非常にまばらで、1行あたり1バイトを節約することは価値があります。ファイルが印刷されたとき、ドライバーは改行(改行)をターゲットデバイスに必要な制御文字に変換していました。

LF より好まれた CR 後者にはまだ特定の使用法があったためです。印刷された文字を同じ行の先頭に再配置することにより、すでに入力された文字を上書きすることができました。

Appleは当初、単一の文字も使用することを決定しましたが、何らかの理由で他の文字を選択しました。 CR。 BSDインターフェースに切り替わると、 LF

これらの選択は、OSが商用であるかどうかとは関係ありません。

1 これがあなたの質問への答えです。

337
jlliagre

「ニューライン」に関するウィキペディアの記事は、1964年にマルチックのラインターミネータ(またはセパレータ)としてNLを選択したことを追跡しています。残念ながら、この記事には出典への引用はほとんどありませんが、これが正しいことを疑う理由はありません。 CR-LFを超えるこの選択には、スペースの節約とデバイスの独立という2つの明らかな利点があります。

主な代替手段であるCR-LFは、テレタイプマシンで紙のキャリッジを物理的に移動するために使用される制御コードから始まります。CRはキャリッジをホームポジションに戻し、LFは紙のローラーで印刷位置を1行下に移動します。2つの制御文字がITA2コードに表示されます。これは1924年にさかのぼり、明らかにまだ使用されています(Wikipediaを参照)。 1901年まで。

若い読者にとって、メインフレームの伝統には改行文字がなかったことに注目する価値があります。むしろファイルは、固定長(パンチカードに基づいて80文字であることが多い)または可変長のレコードのシーケンスでした。可変長レコードは通常、各レコードの先頭に文字カウントを付けて格納されていました。それぞれが任意のバイナリコンテンツを含む一連の可変長レコードで構成されるメインフレームファイルがある場合、これを無損失でUNIXスタイルのファイルに変換することは、難しい変換になる可能性があります。

もちろん、LinuxはUnixの再実装にすぎず、UnixはMulticsから多くの設計上の決定を下したため、重要な決定は1964年に行われたようです。

17
user32929

他の答えは、1960年代に遡る継承チェーンとテレタイプをたどっています。しかし、ここに彼らがカバーしなかった一面があります。

テレタイプの時代には、オーバーストライキングと呼ばれることを行うことが望ましい場合がありました。パスワードの消去は実行不可能だったため、パスワードを覆い隠すためにオーバーストライキングが使用されることがありました。また、フォントにないシンボルを取得するために、重ね打ちが行われました。たとえば、文字Oとスラッシュは新しいシンボルを生成します。
バックスペースを使用することもありましたが、改行なしでキャリッジリターンを挿入することにより、オーバーストライキングが実現しました。このため、UNIXの人々は改行として改行を行わないことに決め、代わりに改行を選択しました。これは、CRLF規則を使用して作成されたテキストを読む場合にもうまく機能しました。 CRが飲み込まれ、LFがセパレーターになります。

13
Walter Mitty

歴史的な質問をC言語に関する質問に変換することもできますが、LinuxとすべてのPOSIX準拠またはPOSIX風のシステム必須LF(または少なくともC '\n'文字が何であれ)を使用する理由改行はCとPOSIXの要件の共通部分の結果であるからです。 Cでは「テキストファイル」と「バイナリファイル」を区別できます(実際、テキストファイルは、'\n'CR/LFとの間で変換するなど、それほどエキゾチックなものに加えて、行レコードのシーケンスで構成されるレコードベースにすることができます。 DOS/Windows)、POSIXでは、テキストモードとバイナリモードの動作が同じであることを義務付けています。これが、catのようなコマンドラインツールが強力で便利な理由です。バイナリのみ、またはテキストのみで機能し、両方では機能しない場合は、はるかに少なくなります。