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
.
- th
- 속성
- 파일
- 디렉토리
- td
r
- 파일 열기와 읽기를 허용한다.
- 실행 속성이 설정되어 있으면 디렉토리의 내용물을 나열할 수 있게끔 허용한다.
- td
w
- 이 속성은 파일 쓰기 또는 잘라내기는 허용하지만, 이름 변경이나 파일 삭제는 허용하지 않는다. 파일 삭제나 파일 이름 변경은 디렉토리 속성에 의해 결정된다.
- 실행 속성이 설정되어 있으면 디렉토리 내의 파일들을 생성, 삭제, 이름 변경이 가능하도록 허용한다.
- td
x
- 파일이 프로그램으로 처리되고 파일이 실행되도록 허용한다. 스크립트 언어에서 작성된 프로그램 파일들은 읽기 기능으로 설정되어 있어야만 실행 가능하다.
- 디렉토리에 들어올 수 있도록 허용한다(예를 들어
cd directory
와 같이).
니모닉 구문 사용
니모닉(mnemonic) 구문을 사용하면 퍼미션 비트를 모두 지정하는 게 아니라 일부만 수정할 수 있다.
8진수 표기법과 니모닉 구문이 함께 있는 이유는 초기 유닉스 시스템에서는 8진수 표기법만 가능했기 때문이다.
초기 유닉스 시스템에서는 이 명령을 사용하고자 비트의 8진수 표현법을 배워야 했지만 현재 버전에서는 8진수 표기와 니모닉mnemonic 구문을 모두 사용할 수 있다. 일반적으로 시스템 관리자에게는 8진수 구문이 더 편리하지만 사용 권한 비트를 절댓값으로 지정할 때만 사용될 수 있다. 니모닉 구문은 비트의 일부만 수정하고 나머지는 그대로 둘 수 있다.2
소유자 표기
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
명령을 실행하면 의도한 결과를 얻지 못할 것이다. 일반 파일만 골라 모드를 바꾸려면 다음과 같이 [[/cmd/find]]{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