리눅스의 chmod 명령어를 사용하면 특정 파일 하나가 아니라 여러 파일과 디렉터리의 권한을 재귀적으로(recursively) 한 번에 변경할 수 있습니다. 이 글에서는 chmod의 기본 개념부터 -R 옵션을 활용한 재귀적 권한 변경, 그리고 find 명령어와 조합하는 실전 팁까지 차근차근 살펴봅니다.
자주 마주치는 권한 관련 오류
리눅스를 사용하다 보면 다음과 같은 오류 메시지를 자주 접하게 됩니다.
[Permission Denied]
"Linux-Screw" [Permission Denied]
"Linux-Screw" [readonly]
시스템 파일을 수정할 때는 sudo로 편집하는 것이 가장 안전합니다. 시스템 컨텍스트를 그대로 유지할 수 있기 때문입니다. 반면, 평소 자신의 사용자 파일을 다룰 때는 매번 권한을 상승시키기보다 파일 권한 자체를 변경하는 것이 좋습니다. 바로 이럴 때 chmod가 유용합니다. 불필요한 권한 상승 없이 필요한 순간에 접근 권한을 확보할 수 있습니다.
chmod란 무엇인가?
chmod(change mode)는 지정한 파일의 파일 모드 비트(file mode bits), 즉 권한을 변경하는 명령어입니다. 권한은 두 가지 방식으로 지정할 수 있습니다.
- 심볼릭(symbolic) 표기법: r, w, x 문자를 조합해 권한을 나타내는 방식
- 8진수(octal) 표기법: 755, 644처럼 숫자로 권한을 나타내는 방식
chmod 기본 문법과 주요 옵션
chmod [OPTION] MODE FILE
또는
chmod [OPTION] OCTAL-MODE FILE
옵션:
-c, --changes : 실제 변경이 발생한 경우에만 상세 정보 출력
-f, --silent, --quiet : 대부분의 오류 메시지 출력 생략
-v, --verbose : 처리되는 모든 파일에 대한 진단 정보 출력
-R, --recursive : 파일과 디렉터리를 재귀적으로 변경
예를 들어 파일에 실행 권한을 추가하고 싶다면 심볼릭 모드로 아래처럼 입력하면 됩니다.
chmod +x [FILE]
chmod -R로 재귀적으로 권한 변경하기
실제 작업 환경에서는 단일 파일의 권한만 바꿔야 하는 경우가 드뭅니다. 대개 해당 파일뿐 아니라 현재 폴더의 모든 파일과 하위 디렉터리까지 함께 변경해야 하죠.
이럴 때 chmod -R 옵션을 사용하면 모든 파일과 디렉터리를 재귀적으로 처리할 수 있습니다.
chmod -R 755 *
ls -altrR
권한 변경 후 위 명령어로 결과를 확인하면, 디렉터리와 파일이 모두 755(rwxr-xr-x)로 변경된 것을 볼 수 있습니다. 이제 소유자인 우리에게는 읽기·쓰기·실행 권한이, 그룹과 기타 사용자에게는 읽기·실행 권한이 부여됩니다. 참고로 이전 사용자가 남긴 폴더를 정리하는 상황이라면 chown으로 소유권 자체를 변경하는 것이 더 깔끔합니다.
755의 함정: umask 기본값과의 불일치
그런데 위 방식에는 한 가지 문제가 있습니다. umask가 일반적인 0022로 설정된 환경에서는 새로 생성되는 디렉터리와 파일의 기본 권한이 서로 다릅니다.
- 디렉터리: 755로 생성 → cd(디렉터리 이동) 명령이 정상 동작하려면 실행(x) 권한 필요
- 파일: 644로 생성 → 일반 파일은 실행 권한이 필요 없으므로 디렉터리보다 한 단계 낮게 설정
즉, chmod -R로 일괄 755를 적용하면 일반 파일에도 불필요한 실행 권한이 붙어버립니다. 이 문제는 find와 -exec를 조합하면 깔끔하게 해결됩니다.
find + exec로 디렉터리와 파일 구분해서 권한 적용
find <dir> -type d -exec chmod 755 {} \;
find <dir> -type f -exec chmod 644 {} \;-type d는 디렉터리만, -type f는 일반 파일만 찾습니다. 이렇게 하면 디렉터리에는 755, 파일에는 644를 각각 적용해 umask 기본값과 완벽하게 일치하는 상태를 만들 수 있습니다. 실행 권한이 없는 일반 파일과, 실행 가능한 디렉터리 — 바람직한 구조가 완성됩니다.
마무리
파일 권한 문제는 생각보다 자주 발생하지만, chmod를 제대로 활용하면 손쉽게 해결할 수 있습니다. 이제 -R 옵션과 find 조합까지 익혔으니, 여러분의 디렉터리와 파일 권한을 진정으로 내 손안에 넣어 관리할 준비가 된 것입니다. 셸 명령어로 리눅스 환경을 더 능숙하게 다루고 싶다면 ls, chown 등 관련 튜토리얼도 함께 확인해 보세요.