Linux / 명령어 / chmod - 파일·디렉터리 접근 권한 변경

chmod는 파일과 디렉터리의 읽기·쓰기·실행 권한을 바꿉니다. 숫자 모드와 기호 모드를 사용할 수 있으며, 변경 전에 대상의 현재 권한을 확인하는 것이 안전합니다.

chmod 명령어란?

권한은 소유자, 그룹, 그 밖의 사용자에게 각각 적용됩니다. 일반 파일의 실행 비트는 실행 가능 여부를, 디렉터리의 실행 비트는 그 경로를 통과하고 내부 항목에 접근할 수 있는지를 좌우합니다. 소유권을 바꾸는 명령은 chown입니다.

기본 문법

chmod [옵션] 모드 파일 ...

설치된 구현과 옵션은 배포판에 따라 다를 수 있습니다. man chmod으로 현재 시스템의 설명을 확인하세요.

사용 예제

기호 모드로 실행 권한 추가

소유자에게만 실행 권한을 더하고 다른 권한은 그대로 둡니다.

chmod u+x script.sh

숫자 모드로 권한 지정

소유자 읽기·쓰기, 그룹과 그 밖의 사용자 읽기만 허용합니다.

chmod 644 report.txt

변경 전후 확인

권한을 바꾼 뒤 대상 파일의 모드를 확인합니다.

ls -l report.txt
chmod go-rwx report.txt
ls -l report.txt

권한 숫자가 실제로 적용됐는지 확인하기

640은 소유자 읽기·쓰기, 그룹 읽기, 기타 사용자 권한 없음입니다. 다음 예제는 직접 만든 파일에만 적용한 뒤 stat으로 확인합니다.

printf 'demo\n' > demo.txt
chmod 640 demo.txt
stat -c '%a %n' demo.txt

예시 출력:

640 demo.txt

chmod 자체는 성공해도 보통 아무것도 출력하지 않습니다. 디렉터리에서는 실행 비트가 진입·탐색 권한을 뜻하므로 파일과 같은 숫자를 기계적으로 적용하면 접근 문제가 생길 수 있습니다. 재귀 변경 전에 대상 경로와 하위 항목을 확인하세요.

숫자 모드는 전체 권한 비트를 다시 지정하는 반면 chmod g+w 파일 같은 기호 모드는 기존 권한에 필요한 비트만 더합니다. 공유 디렉터리에서 협업할 때는 소유자·그룹·기타 사용자 권한을 함께 읽고, 파일을 실행 가능하게 만드는 것이 정말 필요한지 판단하세요.

주요 옵션과 형식

옵션·형식 설명
u/g/o/a 소유자·그룹·그 밖의 사용자·전체를 뜻합니다.
+ / - / = 권한 추가·제거·지정을 뜻합니다.
r/w/x 읽기·쓰기·실행 권한을 뜻합니다.
-R 하위 디렉터리와 파일까지 재귀 변경합니다.
--reference=파일 참조 파일과 같은 모드를 적용합니다.

사용할 때 주의할 점

chmod -R 777은 모든 사용자에게 광범위한 접근을 주므로 편의상 사용하지 마세요. 파일과 디렉터리는 필요한 권한이 다릅니다. 재귀 변경 전에는 find나 ls로 대상 범위를 확인하고, ACL과 SELinux처럼 기본 모드 외의 접근 제어도 살펴보세요.

자주 묻는 질문

chmod 755는 무엇을 뜻하나요?

소유자는 읽기·쓰기·실행(7), 그룹과 그 밖의 사용자는 읽기·실행(5)을 갖습니다. 일반 파일과 디렉터리에 동일하게 적용해도 의미는 다릅니다.

공식 문서

옵션의 정확한 동작과 구현별 차이는 chmod 관련 공식 문서에서 확인할 수 있습니다.

같은 카테고리의 다른 글
Linux / 명령어 / tr - 표준 입력의 문자 치환과 삭제

Linux / 명령어 / tr - 표준 입력의 문자 치환과 삭제

Linux tr 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux 강좌 / 사용자·그룹과 파일 소유권 이해하기

Linux 강좌 / 사용자·그룹과 파일 소유권 이해하기

UID, GID, 기본·추가 그룹과 파일 소유권의 의미를 설명합니다. id, groups, getent, ls, stat으로 현재 계정과 파일의 소유 정보를 안전하게 확인합니다.

Linux / 명령어 / shutdown - 시스템 종료·재시작 예약과 취소

Linux / 명령어 / shutdown - 시스템 종료·재시작 예약과 취소

Linux shutdown 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / touch - 파일 생성과 타임스탬프 변경

Linux / 명령어 / touch - 파일 생성과 타임스탬프 변경

Linux touch 명령어로 빈 파일을 만들고 접근 시각과 수정 시각을 변경하는 방법을 설명합니다. 기준 파일의 시간을 복사하는 방법과 스크립트에서 사용할 때의 주의점도 알아봅니다.

Linux / 명령어 / unzip - ZIP 파일 목록 확인과 안전한 압축 해제

Linux / 명령어 / unzip - ZIP 파일 목록 확인과 안전한 압축 해제

Linux unzip 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / uniq - 인접한 중복 행 정리

Linux / 명령어 / uniq - 인접한 중복 행 정리

Linux uniq 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / ssh - 암호화된 원격 접속과 명령 실행

Linux / 명령어 / ssh - 암호화된 원격 접속과 명령 실행

Linux ssh 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / cmp - 두 파일을 바이트 단위로 비교

Linux / 명령어 / cmp - 두 파일을 바이트 단위로 비교

Linux cmp 명령어로 두 파일을 바이트 단위로 비교하는 방법을 설명합니다. 첫 차이 위치, 조용한 검사, 모든 차이 출력과 종료 상태 활용법을 정리합니다.

Linux / 명령어 / history - 명령어 실행 기록 확인

Linux / 명령어 / history - 명령어 실행 기록 확인

Bash history 명령어로 이전 명령을 조회·검색·재실행·삭제하는 방법을 설명합니다. ~/.bash_history, HISTCONTROL, HISTTIMEFORMAT, histappend와 여러 터미널 기록 동기화 방법도 함께 정리합니다.

Linux / 명령어 / top - 프로세스 자원 사용량 실시간 확인

Linux / 명령어 / top - 프로세스 자원 사용량 실시간 확인

Linux top 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.