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 / 명령어 / unzip - ZIP 파일 목록 확인과 안전한 압축 해제

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

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

Linux / 명령어 / curl - URL 요청과 HTTP 응답 확인

Linux / 명령어 / curl - URL 요청과 HTTP 응답 확인

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

Linux 강좌 / systemd 서비스와 부팅 로그 확인하기

Linux 강좌 / systemd 서비스와 부팅 로그 확인하기

리눅스 부팅 흐름과 systemd 유닛을 이해하고 서비스의 실행 상태와 자동 시작 설정을 구분합니다. systemctl과 journalctl로 상태·부팅 로그를 확인합니다.

Linux / 명령어 / realpath - 절대 경로와 실제 경로 확인

Linux / 명령어 / realpath - 절대 경로와 실제 경로 확인

Linux realpath 명령어로 상대 경로와 심볼릭 링크를 정규화하고 절대·상대 경로를 출력하는 방법을 설명합니다. 경로 존재 조건과 보안상 주의점도 함께 정리합니다.

Linux / 명령어 / split - 큰 파일을 크기·행 수별로 분할

Linux / 명령어 / split - 큰 파일을 크기·행 수별로 분할

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

Linux / 명령어 / help - 셸 내장 명령어 도움말 확인

Linux / 명령어 / help - 셸 내장 명령어 도움말 확인

Bash help 명령어로 셸 내장 명령과 문법의 도움말을 확인하는 방법을 설명합니다. 출력 형식, 패턴 검색, type·man·--help와의 차이 및 스크립트 활용법을 정리합니다.

Linux / 명령어 / w - 로그인 사용자와 실행 중인 작업 확인

Linux / 명령어 / w - 로그인 사용자와 실행 중인 작업 확인

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

Linux / 명령어 / apt-get - APT 패키지 작업을 스크립트와 명령행에서 실행

Linux / 명령어 / apt-get - APT 패키지 작업을 스크립트와 명령행에서 실행

Linux apt-get 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux / 명령어 / alias - 명령어 별칭 만들기

Linux / 명령어 / alias - 명령어 별칭 만들기

Bash alias 명령어로 자주 쓰는 명령과 옵션 조합에 짧은 별칭을 만드는 방법을 설명합니다. 별칭 저장, 우회, 함수와의 차이 및 확장되지 않는 경우도 정리합니다.

Linux / 명령어 / env - 환경 변수 설정과 명령 실행

Linux / 명령어 / env - 환경 변수 설정과 명령 실행

Linux env 명령어로 환경 변수를 추가·제거하거나 깨끗한 환경에서 프로그램을 실행하는 방법을 설명합니다. env -i·-u·-C, shebang 활용과 printenv와의 차이를 다룹니다.