chmod 명령어
파일의 사용 권한을 변경한다
파일 모드
파일 모드는 8진수로 표기한다.
- 4: read. 읽기 권한.
100
.r
. - 2: write. 쓰기 권한.
010
.w
. - 1: execute. 실행 권한.
001
.x
.
위의 수를 조합해 읽기, 쓰기, 실행을 모두 표현해 사용하면 된다.
- 7: read, write, execute.
111
. - 6: read, write.
110
. - 5: read, execute.
101
. - 3: write, execute.
011
. - 0: none.
000
.
속성 파일 디렉토리 r
파일 열기와 읽기를 허용한다. 실행 속성이 설정되어 있으면 디렉토리의 내용물을 나열할 수 있게끔 허용한다. w
이 속성은 파일 쓰기 또는 잘라내기는 허용하지만, 이름 변경이나 파일 삭제는 허용하지 않는다. 파일 삭제나 파일 이름 변경은 디렉토리 속성에 의해 결정된다. 실행 속성이 설정되어 있으면 디렉토리 내의 파일들을 생성, 삭제, 이름 변경이 가능하도록 허용한다. x
파일이 프로그램으로 처리되고 파일이 실행되도록 허용한다. 스크립트 언어에서 작성된 프로그램 파일들은 읽기 기능으로 설정되어 있어야만 실행 가능하다. 디렉토리에 들어올 수 있도록 허용한다(예를 들어 cd directory
와 같이).
니모닉 구문 사용
니모닉(mnemonic) 구문을 사용하면 퍼미션 비트를 모두 지정하는 게 아니라 일부만 수정할 수 있다.
8진수 표기법과 니모닉 구문이 함께 있는 이유는 초기 유닉스 시스템에서는 8진수 표기법만 가능했기 때문이다.
초기 유닉스 시스템에서는 이 명령을 사용하고자 비트의 8진수 표현법을 배워야 했지만 현재 버전에서는 8진수 표기와 니모닉mnemonic 구문을 모두 사용할 수 있다. 일반적으로 시스템 관리자에게는 8진수 구문이 더 편리하지만 사용 권한 비트를 절댓값으로 지정할 때만 사용될 수 있다. 니모닉 구문은 비트의 일부만 수정하고 나머지는 그대로 둘 수 있다.2
유닉스·리눅스 시스템 관리 핸드북 5/e. 5장. 245쪽. ↩
소유자 표기
u
: user. 파일, 디렉토리의 소유자.g
: group. 그룹 소유자.o
: other. 기타 사용자.a
: all.u
,g
,o
모두.- 소유자 표기를 생략할 경우
a
로 간주한다.
- 소유자 표기를 생략할 경우
변경 기호
+
: 권한 추가.-
: 권한 제거.=
: 지정한 퍼미션만 적용하고, 나머지 퍼미션은 제거.,
: 변경 작업을 구별하는 구분자.
-R 옵션에 대해
-R
옵션을 사용하면chmod
가 한 디렉터리 내의 파일 사용 권한들을 반복 순환적으로 업데이트한다. 하지만 이 기능은 보이는 것보다 까다롭다. 포함되는 파일과 디렉터리들이 모두 같은 속성을 공유하지 않을 수 있기 때문이다. 예를 들어 일부는 실행 파일이고 일부는 텍스트 파일일 수 있다. 니모닉 구문은 명시적으로 설정하지 않은 값들은 그대로 보존되기 때문에-R
옵션과 함께 사용될 때 특히 유용하다. 예를 들어 다음과 같다.$ chmod -R g+w mydir
이 명령은
mydir
디렉터리와 그 안의 모든 내용에 대해 디렉터리와 프로그램의 실행 비트를 건드리지 않고 그룹 쓰기 권한만을 추가한다.실행 비트를 조정하길 원한다면
chmod -R
을 조심해서 사용해야 한다. 이 명령은 디렉터리의 실행 비트가 일반 파일의 실행 비트와 다르게 해석돼야 한다는 사실을 전혀 알지 못한다. 따라서chmod -R a-x
명령을 실행하면 의도한 결과를 얻지 못할 것이다. 일반 파일만 골라 모드를 바꾸려면 다음과 같이 find 명령을 사용한다.$ find mydir -type f -exec chmod a-x {} ';'
Examples
숫자로 표현하는 방법.
# 소유자만 읽기, 쓰기 가능. 그룹, 기타 사용자는 읽기만 가능.
chmod 644 filename
# 소유자, 그룹, 기타 사용자에 대해 7(읽기, 쓰기, 실행) 부여.
chmod 777 filename
# 소유자: 7(읽기, 쓰기, 실행) 부여. / 그룹, 기타 사용자: 4(읽기, 실행) 부여.
chmod 744 filename
# directory의 모든 파일에 대해 소유자에게만 7(읽기, 쓰기, 실행) 부여.
chmod -R 700 directory
# directory의 모든 파일에 대해 모든 사용자에게 7(읽기, 쓰기, 실행) 부여.
chmod -R 777 directory
변경 기호 문자로 표현하는 방법.
# 모든 사용자에게 실행 권한 추가.
chmod +x filename
chmod a+x filename
# 모든 사용자(a)에게 읽기 권한 추가.
chmod a+r filename
# 소유자(u)에게 쓰기 권한 추가.
chmod u+w filename
# 소유자(u)에게 실행 권한 추가.
chmod u+x filename
# 소유자(u)의 실행 권한 제거.
chmod u-x filename
# 소유자(u)에게 쓰기, 실행 권한 추가. directory 모든 파일에 대해 재귀적으로.
chmod -R u+wx directory
# 그룹 사용자(g)의 실행 권한 제거.
chmod g-x filename
# 기타 사용자의 읽기, 쓰기 권한 제거.
chmod o-rw filename
# file1의 권한을 file2에 복사.
chmod --reference=file1 file2
# 소유자(u)에게 실행 권한 추가.
# 그룹(g), 기타 사용자(o)에게 읽기, 쓰기 권한은 부여하고, 실행 권한은 제거.
chmod u+x,go=rw filename
참고문헌
- 리눅스 커맨드라인 완벽 입문서 / 윌리엄 E. 샤츠 주니어 저 / 이종우, 정영신 공역 / 비제이퍼블릭(BJ퍼블릭) / 초판 1쇄 발행: 2013년 01월 11일 / 원제: The Linux Command Line
- 유닉스·리눅스 시스템 관리 핸드북 5/e / 에비 네메스, 가스 스나이더, 트렌트 헤인, 벤 웨일리, 댄 맥킨 저 외 2명 / 에이콘출판사 / 발행: 2022년 01월 03일 / 원제: UNIX and Linux System Administration Handbook, 5th Edition