README.md가 실행 파일로 나타나는 이유는 무엇입니까?

README.md가 실행 파일로 나타나는 이유는 무엇입니까?

이것은 Mac에 있지만 Unixy 문제인 것 같습니다.

방금 Github 저장소를 포크했습니다(이것) USB 스틱(저장소를 만든 장치와 함께 제공된 USB 스틱)에 복제합니다. ing 후 lsREADME.md가 빨간색으로 강조 표시되는 것을 확인했습니다. 물론 권한은 다음과 같습니다.

-rwxrwxrwx  1 me  staff   133B 15 Jun 08:59 README.md*

달려봤지만 chmod 644 README.md아무 것도 바뀌지 않았습니다. 여기서 무슨 일이 일어나고 있는 걸까요?

답변1

파일의 "실행 가능성"은 Windows와 같은 파일 유형이 아닌 UNIX 시스템에서 파일 항목의 속성이기 때문입니다.

즉, ls소유자, 그룹 또는 모든 사람이 파일에 대한 실행 권한을 갖고 있는 경우 파일은 실행 파일로 나열됩니다. 파일 형식이 무엇인지는 중요하지 않으며 권한만 무엇인지는 중요하지 않습니다. 이 동작에는 두 가지 중요한 이점이 있습니다.

  1. 새로운 실행 파일 형식을 처리하기 위해 특별한 작업을 수행할 필요는 없습니다. 이는 #!파일 상단에 한 줄로 인터프리터를 내장 할 수 있는 스크립팅 언어에 특히 유용합니다 . .py권한을 통해 알 수 있으므로 커널은 파일이 실행 가능하다는 것을 알 필요가 없습니다 . Linux 지원과 결합하면 binfmt_miscWine이 설치된 경우 Windows 콘솔 프로그램을 기본 바이너리로 처리하는 등 매우 깔끔한 작업을 수행할 수도 있습니다.
  2. 기술적으로 기계 코드인 특정 파일을 실행할 수 없거나 실행할 수 없다고 말할 수 있습니다. 이는 또한 파일 형식 형식 실행 파일 측면에서 구별할 수 없는 라이브러리를 갖는 것이 드문 일이 아닌 스크립팅 언어와 함께 주로 사용됩니다. 따라서 위의 Python 예제를 사용하면 확장자가 있더라도 Python 표준 라이브러리에서 임의의 모듈을 직접 실행할 수 없어야 한다고 말할 수 있습니다 .py.

그러나 POSIX 권한(또는 사용자 매핑을 설정하지 않은 경우 NTFS)을 지원하지 않는 FAT와 같은 파일 시스템을 발견하면 이 모든 것이 무너집니다. 파일 시스템이 POSIX 권한을 저장하지 않는 경우 운영 체제는 이를 에뮬레이트해야 합니다. Linux에서는 사용자가 파일에 대해 원하는 작업을 수행할 수 있도록 읽기, 쓰기 및 실행 권한이 모든 사람에게 기본적으로 설정됩니다. 이것이 없으면 커널이 해당 파일 시스템에 대한 파일별 권한 수정을 허용하지 않기 때문에 USB 플래시 드라이브에서 스크립트나 바이너리를 실행할 수 없습니다.

특정 경우에는 git커밋될 때 파일에 표시되는 속성을 저장하며 README.md 파일의 원래 커밋(또는 후속 커밋 중 하나)은 아마도 이러한 작업이 매우 다르게 처리되는 Windows 시스템에서 발생했을 것입니다. , 따라서 gitLinux가 권한 지원 없이 파일 시스템을 처리하는 방법과 유사하게 권한을 모든 사람에 대한 전체 액세스로 저장하면 됩니다.

관련 정보