*nix 파일 시스템이 개행 문자가 포함된 파일 이름을 지원하는 이유는 무엇입니까?

*nix 파일 시스템이 개행 문자가 포함된 파일 이름을 지원하는 이유는 무엇입니까?

에 따르면이 페이지:

Linux의 파일 이름에는 (1) 슬래시( / )를 제외한 모든 문자가 포함될 수 있습니다. 슬래시( / )는 루트 디렉터리(예: 다른 모든 디렉터리와 파일이 포함된 디렉터리)의 이름과 디렉터리 구분 기호로 사용하도록 예약되어 있습니다. 및 (2) 널 문자(텍스트 세그먼트를 종료하는 데 사용됨)입니다. 공백은 허용되지만 경우에 따라 레거시 소프트웨어와 호환되지 않을 수 있으므로 피하는 것이 가장 좋습니다.

좋습니다. 두 가지 제한 사항 모두 의미가 있습니다. 파일 이름에 특정 문자를 포함하는 것을 금지하는 것이 분명히 가능한데 개행 문자가 허용된 이유는 무엇입니까? 내가 알 수 있는 한 그들의 유일한 용도는스크립트를 복잡하게 만들다. 파일 이름에 새 줄을 넣어야 할 타당한 이유가 있나요?

답변1

NUL/지정된 시스템 기능을 가지고 있습니다 . 다른 캐릭터는 그렇지 않습니다.

이것이 기본입니다. 나머지는 의견, 추측, 역사입니다. 듣고 읽은 것 등이 포함되며,필러토론이나 논쟁이 아닙니다.

  • 특정 문자를 금지하면 파일 시스템 자체가 복잡해지며 이는 파일 시스템을 손상시키는 것과 같습니다.
  • 다양한 시스템에서 어떤 바이트가 개행 문자로 구성됩니까? <CR><LF>
  • 원격 시스템이 NFS에 개행 문자가 포함된 파일을 생성하기로 결정하면 어떻게 됩니까?
  • 파일 내용은 그대로인데 파일 이름이 손상되면 어떻게 되나요?
  • 응용 프로그램이 파일 이름에 정보를 인코딩하면 어떻게 되나요?

그리고 계속된다

  • 사용자 소프트웨어의 버그를 수정하는 것이 시스템 업무인가요?
  • 시스템은 루트 수준에서 사용자를 스스로 보호해야 합니까?
  • 다양한 셸이 내부적으로 구현되는 방식에 따라 어떤 파일 이름이 합법적인 것으로 간주되는지 결정해야 합니까?

기본 운영 체제에는 제한이 없습니다. 시스템과 주고받는 정보는 바이트 스트림입니다. 바이트에 특별한 의미가 없는 경우 사용자 공간에서 처리해야 하는 검사를 추가하여 오버헤드를 생성하지 마세요.


어쨌든 가장 큰 문제는 줄바꿈 및 기타 제어 문자가 허용된 다소 오랜 역사일 것입니다.

또 다른 경우는 금지하는 것입니다. 개행 문자에 대해 언급하셨지만 유닉스 석기 시대의 토론에서는 이에 대한 논의가 있었으며 다른 문자도 포함되었습니다. 금지되어야 하는가 *? 로 시작하는 파일 이름은 어떻습니까 -? DEL그리고 는 어떻습니까 ESC? 모든 제어 문자를 금지해야 합니까? 등등.

불행하게도 창립자나 코드 유지관리자가 이 주제에 관해 인용한 내용은 기억나지 않습니다.

관련 정보