내가 아는 한, 모든 운영 체제에는 EOL(줄 끝) 문자를 표시하는 방법이 다릅니다. 상업용 운영 체제에서는 EOL에 캐리지 리턴을 사용합니다(Windows에서는 캐리지 리턴 및 줄 바꿈, Mac에서만 캐리지 리턴). 반면에 Linux는 EOL을 구현하기 위해 개행 문자만 사용합니다.
Linux가 EOL에서 캐리지 리턴(라인 피드만)을 사용하지 않는 이유는 무엇입니까?
답변1
CRLFWindows에서는 MS-DOS에서 상속되었기 때문에 이를 사용합니다 .
MS-DOS는 CRLF이미 사용중이기 때문에 사용합니다 CRLF.
CP/M과 80년대 이전의 많은 운영 체제는 CRLF텔레타이프라이터에 인쇄된 줄을 끝내는 방법(일반 타자기처럼 줄의 시작 부분으로 돌아가서 다음 줄로 점프)이었기 때문에 이를 사용했습니다. 이는 전처리가 덜 필요하거나 전혀 필요하지 않기 때문에 파일 인쇄를 단순화합니다. 개별 문자의 사용을 방지하는 기계적 요구 사항도 있습니다. 일정 기간 동안필요로 할 수도있다캐리지 리턴 및 플래튼 회전을 허용합니다.
Gnu/Linux는 LFUnix이기 때문에 사용합니다.클론.1
LF유닉스는 공간을 절약하고 정식 줄 끝으로 정규화하기 위해 처음부터 단일 문자를 사용했습니다 . 두 문자를 사용하는 것은 비효율적이고 모호합니다. 이 옵션은 1964년 초에 사용되었던 Multics에서 상속되었습니다. 메모리, 스토리지, CPU 성능 및 대역폭은 모두 매우 희박하므로 행당 1바이트를 절약하는 것은 그만한 가치가 있습니다. 파일을 인쇄할 때 드라이버는 줄 바꿈 문자(개행 문자)를 대상 장치에 필요한 제어 문자로 변환합니다.
LFCR후자는 여전히 특정한 용도로 사용되기 때문에 선호됩니다 . 이미 입력한 문자는 인쇄된 문자를 같은 줄의 시작 부분으로 재배치하여 덮어쓸 수 있습니다.
Apple은 원래 단일 문자도 사용하기로 결정했지만 어떤 이유로 다른 문자를 선택했습니다 CR. BSD 인터페이스로 전환하면서 LF.
이러한 선택은 운영 체제가 상업용인지 여부와 아무런 관련이 없습니다.
1 귀하의 질문에 대한 답변입니다.
답변2
"Newline"에 대한 Wikipedia 기사에서는 1964년 Multics까지 라인 종결자(또는 구분 기호)로 NL을 선택한 것을 추적합니다. 불행하게도 이 기사에서는 출처를 거의 인용하지 않지만 이것이 정확하다는 점을 의심할 이유는 없습니다. 이 선택은 CR-LF에 비해 공간 절약과 장치 독립성이라는 두 가지 분명한 이점을 제공합니다.
주요 대안인 CR-LF는 텔레타이프 기계에서 용지 캐리지를 물리적으로 이동하는 데 사용되는 제어 코드에서 파생되었습니다. 여기서 CR은 용지 캐리지를 원래 위치로 되돌리고 LF는 용지 롤러를 회전하여 인쇄 위치를 한 단계 아래로 이동합니다. 선 . 이 두 제어 문자는 1924년으로 거슬러 올라가는 ITA2 코드에 나타나며 여전히 사용 중입니다(Wikipedia 참조). ITA2는 1901 Baudot 코드의 Murray 변형에서 가져온 것 같습니다.
어린 독자의 경우, 메인프레임 전통에는 줄바꿈이 없다는 점에 주목할 가치가 있습니다. 대신 파일은 고정 길이(보통 펀치 카드 기준으로 80자)이거나 가변 길이일 수 있습니다. -length 레코드는 일반적으로 각 레코드의 시작 부분에 문자 수를 저장합니다. 일련의 가변 길이 레코드로 구성된 메인프레임 파일이 있고 각 레코드에는 임의의 바이너리 콘텐츠가 포함되어 있는 경우 이를 UNIX 스타일 파일로 손실 없이 변환하는 것은 까다로운 변환이 될 수 있습니다.
물론 리눅스는 유닉스를 재구현한 것일 뿐이고 유닉스의 설계 결정 중 많은 부분이 Multics에서 나왔기 때문에 핵심 결정은 1964년에 내려진 것으로 보인다.
답변3
다른 대답은 상속 사슬을 1960년대와 텔레타이프 기계로 거슬러 올라갑니다. 그러나 그들은 이 부분을 다루지 않았습니다.
텔레타이프 시대에는 재타자라는 작업이 필요할 때도 있었습니다. 비밀번호를 삭제하는 것이 불가능하기 때문에 비밀번호를 숨기기 위해 두꺼운 줄을 사용하는 경우도 있습니다. 다른 경우에는 글꼴에 없는 기호를 얻기 위해 다시 그리기가 수행됩니다. 예를 들어 문자 O와 슬래시는 새 기호를 만듭니다.
백스페이스 키를 사용하는 경우도 있지만 줄바꿈 없이 캐리지 리턴을 입력하여 다시 그리기를 수행합니다. 이러한 이유로 유닉스 사용자들은 캐리지 리턴을 줄 구분 기호로 사용하지 않고 대신 줄 바꿈을 선택했습니다. 이는 CRLF 규칙을 사용하여 생성된 텍스트를 읽는 데에도 효과적입니다. CR은 삼키고 LF는 구분자가 됩니다.
답변4
역사적인 질문을 C 언어에 대한 질문으로 바꿀 수 있지만 Linux 및 모든 POSIX 호환 또는 POSIX 같은 시스템의 이유~ 해야 하다LF
개행 문자로 (또는 적어도 C 문자가 무엇 이든) 사용하는 '\n'
것은 C와 POSIX 요구 사항 간의 교차 결과입니다. C에서는 "텍스트 파일"과 "바이너리 파일"이 다를 수 있지만 실제로 텍스트 파일은 일련의 라인 레코드로 구성된 레코드 기반일 수 있으며, 예를 들어 DOS/Windows에서 '\n'
변환하는 것과 같이 덜 특이한 파일도 있습니다. 에서), POSIX에서는 텍스트 모드와 바이너리 모드가 동일하게 작동해야 합니다. 이것이 바로 이와 같은 명령줄 도구가 강력하고 유용한 이유입니다. 바이너리만 사용하거나 텍스트로만 작업하지만 둘 다 사용할 수는 없다면 훨씬 덜 유용할 것입니다.CR
LF
cat