저는 Mac OS X, BSD, Linux에 대한 "chmod"매뉴얼 페이지를 다시 읽고 몇 가지 실험을했습니다. 다음은 상징적 모드에 대해 배운 내용입니다. 복잡해질 수 있지만 이해할 가치가 있습니다.
- 일반적인 형식은 조항 [, 조항 …]입니다. 여기서 :
- 조항 : = [ugoa] [+-=] [rwxXstugo]
- [ugoa] ( who ) (복수 지정)는 사용자, 그룹, 기타 또는 모두에 대한 권한을 설정하는 것을 의미합니다. 지정하지 않으면 기본값은 'a'이지만 umask 는 적용됩니다.
- [+-=] ( action ) (하나 지정)는 다음을 의미합니다.
- +는 지정된 권한을 이미 유효한 권한에 추가 함을 의미합니다.
- -이미 유효한 권한에서 지정된 권한을 제거합니다.
- =는 권한을 지정된 권한으로 설정하고 다른 모든 권한을 지우는 것을 의미합니다.
- [rwxXstugo] ( permission ) (rwxXst의 배수 또는 ugo 중 하나 지정)는 다음과 같이 지정된 사용자의 권한을 설정합니다.
- r — 읽기
- w — 쓰기
- x — 실행 / 검색
- X — 디렉토리 실행 또는 검색 또는 실행 비트가 이미 설정되어 있습니다.
- s — suid 또는 sgid
- t — 끈적임
- u — 사용자 권한 복사
- g — 그룹 복사 권한
- o — 다른 허가 복사
예를 들어, a+x
모든 사람이 파일을 실행 가능하게 만듭니다. a+X
누군가가 실행할 수 있다면 모든 사람이 파일을 실행 가능하게 만듭니다.
a+x
모든 사람이 디렉토리를 검색 할 수있게합니다. a+X
또한 모든 사람이 디렉토리를 검색 할 수있게합니다.
BSD와 Linux의 주요 차이점은 BSD에서는 chmod가 실행 되기 전에 파일의 권한에 따라 결정된다는 것입니다 . Linux에서는 + X 절이 실행되기 직전에 결정됩니다.
따라서 BSD와의 조합 a-x,a+X
은 실행 / 검색 권한을 제거한 다음 모든 사람이 디렉토리를 검색 할 수있게하고 누군가가 원래 실행 가능했던 경우 모든 사람이 파일을 실행할 수있게합니다 .
Linux를 사용하면 a-x,a+X
실행 / 검색 권한을 제거한 다음 모든 사람이 디렉토리를 검색 할 수있게하고 아무도 파일을 실행할 수 없게합니다.
구체적인 예는 다음과 같습니다. BSD 시스템 : 디렉토리, 실행 파일 및 비 실행 파일 :
drwxr-x--- 2 falk staff 68 Jul 19 18:01 fee/
-rwxr-x--- 1 falk staff 0 Jul 19 18:01 fie*
-rw-r----- 1 falk staff 0 Jul 19 18:01 foe
디렉토리와 "fie"는 모두 사용자가 실행할 수 있고 검색 할 수 있지만 다른 사용자는 실행할 수 없습니다.
이제 우리는 실행 chmod a-x,a+X *
합니다. 첫 번째 절은 모든 파일에 대해 모든 사용자의 실행 / 검색 비트를 제거하지만 두 번째 절은 "fee"및 "fie"에 대해 다시 추가합니다. "fee"는 디렉토리이기 때문에 "fie"이고 적어도 하나의 실행 가능한 비트가 있기 때문에 "fie"입니다.
drwxr-x--x 2 falk staff 68 Jul 19 18:01 fee/
-rwxr-x--x 1 falk staff 0 Jul 19 18:01 fie*
-rw-r----- 1 falk staff 0 Jul 19 18:01 foe
나는 같은 결과를 실행했다 chmod -x+X
.
결론 : Jak Gibb의 솔루션은 Linux에서 작동하지만 BSD의 경우 두 단계를 거쳐야합니다.
SVr4 또는 다른 Unix 변형에서는 이것을 테스트하지 않았습니다.