리눅스 파일권한 설정

리눅스의 특정 파일을 실행할 경우 아래의 에러메세지를 마주하게 될 때가 있다.

bash: ./foo.pl: Permission denied

이는 현재 사용자가 해당 파일을 실행할 권한이 없을 때 나오는 에러 메세지이다.

ls -al 을 입력하면 현재 디렉토리의 모든 파일 및 디렉토리의 권한이 표시된다. 하나의 파일 또는 디렉토리는 아래와 같이 표시된다.

-rw-rw-rw-   2 user      group       2351 May 11 20:56 a.sh
drwxrwxr-x   2 user      group       2351 May 11 20:56 b

위 예에서 앞줄에 나온 -rw-rw-rw- 형태(9개의 문자)가 현재 파일의 권한을 나타내는 것인데, 의미는 순서대로 아래와 같다.

[d:디렉토리?] [r:owner의 읽기권한] [w:owner의 쓰기권한] [x:owner의 실행권한] [r:group의 읽기권한] [w:group의 쓰기권한] [x:group의 실행권한] [r:all의 읽기권한] [w:all의 쓰기권한] [x:all의 실행권한]

위 예에서 첫번째 줄에 있는 a.sh 의 권한은 owner/group/all 모두가 읽기/쓰기가 가능하고 맨 앞에 d 가 없으므로 파일 이라는 의미이다.

두번째 줄인 b 의 경우 맨 앞에 d 가 있으니 디렉토리이고, owner/group 의 경우 읽기/쓰기/실행 모두 가능하고 all 의 경우 읽기/실행 만 가능하다는 의미이다.

이 상태에서 a.sh 를 수행해봤자 실행되지 않는다. 따라서 chmod 커맨드를 이용해 권한을 변경해줄 필요가 있다.

chmod 775 a.sh

775 의 의미는 2진수 111 111 101 의 의미이다. 위에 설명한 9개의 필드중에 2~9 번째 필드를 나타낸 것이다.1)

따라서 위 명령 수행 후 ls -al 을 해보면 아래와 같이 나오게 된다.

-rwxrwxr-x   2 user      group       2351 May 11 20:56 a.sh
drwxrwxr-x   2 user      group       2351 May 11 20:56 b

이제 a.sh 를 실행할 수 있게 되었다.

chmod 의 더 자세한 용례는 여기를 참고

1) 첫번째 필드 d 는 수정할 수 없다.