파일 모드

파일 모드는 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.

1

  • 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

주석

  1. 리눅스 커맨드라인 완벽 입문서. 9장. 92쪽. 

  2. 유닉스·리눅스 시스템 관리 핸드북 5/e. 5장. 245쪽.