기본 문법
chgrp [옵션] 그룹 파일...
chgrp(change group)는 파일과 디렉터리의 그룹 소유자를 바꾸는 명령어입니다. 리눅스의 권한 체계는 소유자(user), 그룹(group), 기타 사용자(other) 세 단계로 나뉘는데, 이 중 그룹 권한이 어느 그룹에 적용될지를 결정하는 것이 그룹 소유자입니다. 따라서 chmod로 그룹 권한을 g+rwx로 열어 두었더라도 그룹 소유자가 의도한 그룹이 아니면 해당 사용자들은 그 권한을 적용받지 못합니다.
주로 여러 사용자가 함께 쓰는 공유 디렉터리를 구성할 때 사용합니다. groupadd로 팀 그룹을 만들고, usermod로 팀원을 그룹에 추가한 뒤, 공유 디렉터리의 그룹 소유자를 chgrp로 해당 그룹에 맞추고 chmod로 2775 같은 setgid 권한을 부여하는 흐름이 일반적입니다.
리눅스마스터·RHCSA·LPIC 등의 시험에서도 협업 디렉터리 구성 문제의 한 단계로 출제됩니다. 소유자까지 함께 바꿔야 할 때는 chown user:group 형식으로 한 번에 처리할 수 있으므로, chgrp와 chown의 관계를 함께 정리해 두면 좋습니다.
자주 쓰는 옵션
| 옵션 | 의미 | 예 |
|---|---|---|
-R, --recursive | 디렉터리 하위의 모든 파일과 디렉터리까지 재귀적으로 변경 | chgrp -R demo_ops /srv/project-share |
-v, --verbose | 처리한 모든 파일에 대해 진단 메시지 출력(그룹이 유지된 파일도 표시) | chgrp -v demo_ops report.txt |
-c, --changes | 실제로 그룹이 바뀐 파일에 대해서만 메시지 출력 | chgrp -c demo_ops report.txt |
-f, --silent, --quiet | 대부분의 오류 메시지를 출력하지 않음(종료 코드는 별도로 확인 필요) | chgrp -f demo_ops nofile.txt |
--reference=RFILE | 지정한 기준 파일과 동일한 그룹으로 맞춤 | chgrp --reference=/etc/passwd report.txt |
-h, --no-dereference | 심볼릭 링크가 가리키는 대상 대신 링크 자체의 그룹을 변경 | chgrp -h demo_ops link.txt |
--dereference | 심볼릭 링크가 가리키는 대상의 그룹을 변경(기본 동작) | chgrp --dereference demo_ops link.txt |
-H | -R와 함께 쓸 때, 명령행 인자로 지정한 심볼릭 링크만 따라감 | chgrp -RH demo_ops /srv/share |
-L | -R와 함께 쓸 때, 하위에서 만나는 모든 심볼릭 링크를 따라감 | chgrp -RL demo_ops /srv/share |
-P | -R와 함께 쓸 때, 심볼릭 링크를 따라가지 않음(재귀 시 기본값) | chgrp -RP demo_ops /srv/share |
실무 예시
파일 하나의 그룹 바꾸기
준비: mkdir -p /tmp/demo/ex1; echo report > /tmp/demo/ex1/report.txt
$ chgrp daemon /tmp/demo/ex1/report.txt && ls -l /tmp/demo/ex1/report.txt
-rw-r--r--. 1 root daemon 7 Sep 16 11:11 /tmp/demo/ex1/report.txt
그룹 소유자만 daemon으로 바뀌고 소유자(root)와 권한 비트는 그대로 유지됩니다.
디렉터리 전체에 재귀 적용
준비: mkdir -p /tmp/demo/ex2/sub; echo a > /tmp/demo/ex2/a.sh; echo b > /tmp/demo/ex2/sub/b.sh
$ chgrp -R bin /tmp/demo/ex2 && ls -lR /tmp/demo/ex2
/tmp/demo/ex2:
total 4
-rw-r--r--. 1 root bin 2 Sep 16 11:11 a.sh
drwxr-xr-x. 2 root bin 18 Sep 16 11:11 sub
/tmp/demo/ex2/sub:
total 4
-rw-r--r--. 1 root bin 2 Sep 16 11:11 b.sh
-R를 주면 대상 디렉터리 자신뿐 아니라 하위 디렉터리와 그 안의 파일까지 모두 그룹이 bin으로 바뀝니다. ls -lR 출력에서 하위 디렉터리 sub의 내용도 함께 확인할 수 있습니다.
변경된 항목만 출력하기
준비: mkdir -p /tmp/demo/ex3; echo x > /tmp/demo/ex3/x.txt; echo y > /tmp/demo/ex3/y.txt; chgrp adm /tmp/demo/ex3/x.txt
$ chgrp -c adm /tmp/demo/ex3/x.txt /tmp/demo/ex3/y.txt
changed group of '/tmp/demo/ex3/y.txt' from root to adm
이미 adm 그룹인 x.txt는 메시지 없이 넘어가고, 실제로 바뀐 y.txt만 출력됩니다. -v를 쓰면 그룹이 유지된 파일도 'retained as' 메시지로 함께 표시됩니다.
다른 파일의 그룹을 그대로 복사
준비: mkdir -p /tmp/demo/ex4; echo src > /tmp/demo/ex4/src.txt; echo dst > /tmp/demo/ex4/dst.txt; chgrp daemon /tmp/demo/ex4/src.txt
$ chgrp --reference=/tmp/demo/ex4/src.txt /tmp/demo/ex4/dst.txt && ls -l /tmp/demo/ex4
total 8
-rw-r--r--. 1 root daemon 4 Sep 16 11:11 dst.txt
-rw-r--r--. 1 root daemon 4 Sep 16 11:11 src.txt
그룹 이름을 직접 적지 않고 기준 파일의 그룹에 맞출 수 있어, 기존 파일과 그룹 설정을 통일할 때 사용합니다.
협업 디렉터리에 그룹 + setgid 적용
준비: groupadd demo_ops 2>/dev/null; mkdir -p /tmp/demo/project-share
$ chgrp demo_ops /tmp/demo/project-share && chmod 2775 /tmp/demo/project-share && ls -ld /tmp/demo/project-share
drwxrwsr-x. 2 root demo_ops 6 Sep 16 11:11 /tmp/demo/project-share
그룹을 demo_ops로 지정하고 setgid 비트(2)를 주면, 이후 이 디렉터리 안에 새로 만들어지는 파일과 디렉터리가 demo_ops 그룹을 상속합니다. 권한 문자열의 그룹 실행 자리에 s가 표시되는 것으로 setgid 적용을 확인합니다. 이미 들어 있던 파일의 그룹은 바뀌지 않으므로 필요하면 chgrp -R로 따로 맞춰야 합니다.
주의할 점
- chgrp는 그룹만 바꿉니다. 소유자까지 함께 지정하려면 chown user:group 형식을 사용하세요.
- 그룹을 바꿔도 권한 비트는 그대로입니다. 그룹 구성원이 쓰기를 하려면 chmod로 g+w 권한도 함께 부여해야 합니다.
- -R 없이 디렉터리에만 실행하면 디렉터리 자신의 그룹만 바뀌고, 이미 들어 있는 파일의 그룹은 그대로입니다.
- 일반 사용자는 자신이 소유한 파일을, 자신이 속한 그룹으로만 변경할 수 있습니다. 그 외에는 root 권한이 필요합니다.
- setgid는 설정 이후 새로 생성되는 항목에만 그룹 상속이 적용됩니다. 기존 파일은 chgrp -R로 별도 정리해야 합니다.
- /etc, /usr, /var 등 시스템 경로에 chgrp -R을 실행하면 서비스가 동작하지 않을 수 있습니다. 재귀 변경은 /srv, /home 아래의 공유 디렉터리처럼 대상 경로를 명확히 한정해 실행하세요.
이 명령어로 풀 수 있는 실습 문제
브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.
관련 명령어
마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.
