Linux에서 "cat" 디렉토리를 허용하지 않는 이유는 무엇입니까? [복사]

Linux에서 "cat" 디렉토리를 허용하지 않는 이유는 무엇입니까? [복사]

나는 "The Design of the UNIX Operating System"에서 디렉토리가 그 안에 포함된 각 파일의 이름을 포함하는 파일이라는 것을 읽었습니다. 그래서 catMac에서 하나를 실행하려고 시도했는데 오류가 발생했습니다.cat: ./: Is a directory

하지만 System 7 UNIX에서 테스트한 결과 제대로 작동했습니다.

cat ./(시스템 7 UNIX).

최신 운영 체제에서 이것이 작동하지 않는 이유는 무엇입니까? 디렉토리가 더 이상 파일이 아닌지, 아니면 누군가 우리가 디렉토리를 읽지 말라고 결정했습니까?

답변1

버전 7 Unix는 단일 파일 시스템만 지원한다고 생각합니다. 최신 운영 체제(Linux 포함)는 수많은 파일 시스템을 지원합니다. Linux 커널에는 이러한 다양한 파일 시스템이 Posix 및 Linux 프로그램이 기대하는 대로 작동하도록 만드는 "가상 파일 시스템" 코드 계층이 있습니다. 예를 들어. Linux는 다양한 MS-DOS 파일 시스템과 NTFS를 사용할 수 있으며 이러한 시스템의 파일 권한은 정확히 Linux가 원하는 사용자/그룹/기타, 읽기/쓰기/실행이 아닙니다. 따라서 가상 파일 시스템 코드는 이를 조정하는 역할을 합니다. 일부 파일 시스템(예: MS-DOS FAT 파일 시스템 및 ReiserFS)은 디렉터리를 파일로 처리하지 않기 때문에 가상 파일 시스템 코드는 버전 7 UFS처럼 디렉터리를 특별히 태그가 지정된 파일로 처리하지 않습니다. open()디렉토리에 대해 시스템 호출을 할 수 있지만 getdents()디렉토리에서 항목을 읽으려면 시스템 호출을 사용해야 합니다.

답변2

"UNIX(및 Linux)의 모든 것이 파일이다"라는 의미에서는 여전히 파일입니다. 프로그램 cat이 더 똑똑해지고 "이것은 디렉토리 유형 파일이므로 텍스트 파일로 표시하는 것이 의미가 없습니다"라는 것을 깨달았으므로 동작이 업데이트되었습니다.

관련 정보