생성된 실행 파일에는 gcc
실행 권한이 있습니다.
-rwxrwxr-x
이는 소스 파일이 갖는 권한과 다릅니다.
-rw-rw-r--
이러한 권한을 어떻게 gcc
설정합니까?
답변1
파일 권한을 결정하는 데에는 네 가지 사항이 있습니다.
- 애플리케이션은 파일을 생성할 때 초기 권한 집합을 할당합니다. 이러한 초기 권한은 매개변수로 전달됩니다.시스템 호출파일 생성(
open
일반 파일의 경우,mkdir
카탈로그 등). - 권한이 숨겨져 있습니다마스크, 이는 실행 중인 프로세스의 속성입니다. umask는 애플리케이션 지정 권한에서 제거할 권한 비트를 나타냅니다. 예를 들어 umask는
022
그룹 쓰기 및 기타 쓰기 권한을 제거합니다. umask는007
그룹 쓰기 권한을 유지하지만 다른 사람이 파일에 완전히 액세스할 수 없도록 만듭니다. - 권한은 다음에 의해 추가로 수정될 수 있습니다.액세스 제어 목록. 이 기사에서는 이에 대해 더 이상 논의하지 않겠습니다.
- 애플리케이션은
chmod
원하는 대로 권한을 변경하기 위해 명시적인 호출을 수행할 수 있습니다. 파일을 소유한 사용자는 해당 권한을 자유롭게 설정할 수 있습니다.
1단계에서 자주 선택되는 권한 집합은 다음과 같습니다.
- 666(즉, 누구나 읽고 쓸 수 있음)은 일반 파일에 사용됩니다.
- 비공개로 유지되어야 하는 일반 파일(예: 이메일 또는 임시 파일)의 경우 600(예: 읽기-쓰기, 소유자 전용)입니다.
- 777(즉, 모든 사람을 위한 읽기, 쓰기 및 실행)은 디렉터리 또는 실행 가능한 일반 파일에 사용됩니다.
애플리케이션이 파일 생성 권한에 추가 쓰기 권한을 포함할 수 있고 종종 포함하더라도 umask로 인해 파일을 읽을 수 없게 될 수 있습니다.
gcc의 경우 먼저 권한 666으로 출력 파일(umask로 마스크됨)을 만든 다음 chmod를 실행하여 실행 가능하게 만듭니다. Gcc는 실행 파일을 직접 생성할 수 있지만 그렇지 않습니다. 쓰기가 완료된 후에만 파일을 실행 가능하게 만들기 때문에 불완전한 동안 프로그램을 시작할 위험이 없습니다.
답변2
당신이 무엇을 요구하는지 잘 모르겠습니다. 어떻게 설정 권한이 있다는 뜻입니까? 파일 소유자는 원하는 대로 권한을 설정할 수 있습니다. gcc
귀하의 사용자 계정으로 실행되므로 생성된 파일은 귀하의 소유이며 파일 권한 설정을 포함하여 귀하의 계정이 할 수 있는 모든 작업을 수행할 수 있는 권한을 갖습니다.
답변3
위의 @AshRj의 의견에서 말했듯이 계정에서 설정한 기본 권한에 따라 다릅니다. 기본적으로 수행되는 작업은 x
모든 권한(특히 사용자/그룹/기타 권한 포함)으로 시작한 다음 지정된 권한을 끄는 것 입니다 umask(2)
(참조 bash(1)
). 현재(각 사용자는 자신의 개인 그룹이 있음) umask
일반적으로 002(다른 사용자만 거부)로 설정되므로 실행 파일에 대한 권한은 소스에 대한 권한과 관계없이 로 w
나타납니다 . rwxrwxr-x
다른 파일을 생성하는 경우(예: 편집자를 통해) x
해당 파일을 시작할 권한이 전혀 없으므로(임의의 텍스트 파일은 실행되지 않아야 함) 권한은 rw-rw-r--
.