티스토리 뷰

728x90
반응형

Chmod Recursive (-R)

재귀적으로 주어진 디렉토리 하위의 모든 파일과 모든 디렉토리들에 대해서 권한 설정을 하려면 일반적으로 -R 또는 --recursive 옵션을 사용하여 처리할 수 있습니다.

 

기본 문법으로는 아래와 같습니다.

chmod -R MODE DIRECTORY

 

예를 들어, /var/www/html 밑에 있는 모든 파일과 하위 디렉토리 들의 권한을 755(-rwxr-xr-x)으로 바꾸기 위해서는 아래 명령어를 사용합니다.

chmod -R 755 /var/www/html

MODE 부분에 해당하는 값을 꼭 숫자로 입력할 필요는 없습니다. 아래와 같이 symbolic method로도 변경할 수 있습니다.

chmod -R u=rwx,go=rx /var/www/html

그리고 오직 root 또는 파일의 소유자 또는 sudo 권한을 사용할 수 있는 사용자만이 해당 파일에 대한 권한(permission)을 변경할 수 있습니다. 그렇기 때문에 더욱 권한 변경에 있어서는 조심해서 변경해야될 것 같습니다.

 

위 방법 외에도 다른 방법이 있겠습니다만, 만약 하위 디렉토리에 있는 모든 파일들 또는 디렉토리에 대한 변경이 아닌, 파일 종류 또는 폴더 종류들에 대한 권한만 변경하고 싶다고 할 때는 어떻게 해야할까요? 이 때는 바로 find 명령어와 chmod 명령어를 함께 사용해서 이루어낼 수 있습니다.

 

find 명령어와 chmod 함께 사용하기

일반적으로 파일과 디렉토리는 서로 같은 권한을 가지지 않습니다. 대부분의 파일들은 실행(execute) 권한을 가지지 않습니다. 그리고 디렉토리도 마찬가지로 디렉토리가 실행 권한을 가지는 일은 본 적이 없습니다.

 

그렇기에 가장 일반적인 시나리오로는 모든 파일들은 644 권한으로 변경하고, 모든 디렉토리들은 755 권한으로 변경해야하는 상황이 일반적일 겁니다.

 

이 때 사용할 수 있는 명령어는 아래와 같이 있습니다.

find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;

find /var/www/html -type d -exec chmod u=rwx,go=rx {} \;
find /var/www/html -type f -exec chmod u=rw,go=r {} \;

위 명령어에서 find 명령어는 /var/www/html 경로에서 모든 파일과 디렉토리를 탐색하면서 만약 파일이나 디렉토리를 찾았을 경우 chmod 명령어를 실행시켜 일련의 권한을 변경하게 됩니다.

 

여기서 find 와 -exec 옵션을 사용했다는 것은, chmod 명령어를 find 명령어가 한 개체를 찾았을 때마다 실행하게 됩니다. 이런 원리 때문에 속도저하 문제가 올 수 있는데, 이를 해결하기 위해서는 xargs 명령어를 사용해서 여러 개체들을 한번에 처리하게 만들 수 있습니다.

find /var/www/html -type d -print0 | xargs -0 chmod 755
find /var/www/html -type f -print0 | xargs -0 chmod 644

 

결론

chmod 명령어와 -R 옵션을 사용해서 파일들의 권한을 재귀적으로 변경할 수 있습니다.

 

그리고

 

파일 또는 디렉토리만 지정해서 권한을 변경하고 싶을 때는 find 명령어와 chmod 명령어를 함께 사용함으로써 해결할 수 있습니다.

 

- 끝 -

728x90
반응형
댓글