기본적으로 "make"로 생성된 파일에는 실행 권한이 부여되지 않습니다.

기본적으로 "make"로 생성된 파일에는 실행 권한이 부여되지 않습니다.

프로젝트를 빌드하려고 하는데 이 명령을 사용하면 make다음 오류가 발생합니다.

/bin/sh: line 4: .deps/ipset_bitmap_ipmac.Tpo: Permission denied
make[2]: *** [ipset_bitmap_ipmac.lo] Error 126

.deps/ipset_bitmap_ipmac.Tpo 파일은 make빌드 중에 -rw-r--r-- 권한을 사용하여 생성됩니다. x는 없습니다. 그런데 make파일을 즉시 실행하고 싶은데 실패합니다.

파일로 이동하여 실행 권한을 수동으로 추가한 다음 다시 실행하면 다음 파일에 도달하자마자 명령이 다시 충돌합니다 make. make내 유일한 선택은 chmod모든 새 파일을 유지하는 것입니다.

제 질문은 왜 make+x 없이 새 파일이 생성되는 걸까요?

참고 사항: 저는 CentOS5를 사용하고 있는데 umask -Su=rwx,g=rx,o=rx가 반환됩니다. sudo이는 전혀 도움이 되지 않습니다.

답변1

이와 같은 이름을 사용하면 .deps/ipset_bitmap_ipmac.Tpo파일을 실행할 수 없을 가능성이 높습니다.

여기서 일어나는 일은 Makefile에 다음과 같은 줄이 있다는 것입니다.

$(SOME_VARIABLE) .deps/ipset_bitmap_ipmac.Tpo

또는 그보다 더 가능성이 높음

$(SOME_VARIABLE) $(ANOTHER_VARIABLE)

여기서 값 ANOTHER_VARIABLE.deps/ipset_bitmap_ipmac.Tpo이거나 그 변형입니다. SOME_VARIABLE변수(프로그램 이름이어야 함)는 makefile이나 이를 생성한 프로그램의 버그로 인해 정의되지 않았거나 컴퓨터에 지원되지 않는 구성이 있기 때문에 정의되지 않았습니다.

빌드하려는 프로젝트가 무엇인지, 어디서 가져왔는지, 어떻게 압축을 풀었는지, 어떻게 구성했는지, 어떤 빌드 명령을 실행했는지 알려주시면 더 많은 도움을 드릴 수 있습니다.

답변2

귀하의 경우에는 다른 권한 레이어일 수 있다고 생각합니다.

나는 다운로드했다ipset 6.17그리고 ./configure그것은 make잘 작동합니다.

/bin/sh를 호출하므로 실행 권한은 필요하지 않습니다. 다음과 같은 방법으로 테스트할 수 있습니다.

x 권한 없이 스크립트를 생성하고 셸을 통해 호출합니다.

nicolas@~> cat script
#!/bin/bash

echo "teste"

nicolas@~> ls -l script
-rw-r--r-- 1 nicolas users 26 Abr  5 07:56 script

nicolas@~> sh script
teste

몇 가지 문제:

selinux가 활성화되어 있습니까(를 사용하여 확인 getenforce)?

추출된 ipset 소스 디렉터리에는 어떤 권한이 있나요?

.deps 디렉터리에 있는 파일의 소유권은 무엇입니까?

혹시 사용하거나 실행한 적이 있습니까 config?makesudosu -s

관련 정보