Linux에서 chgrp 명령을 사용하는 방법

리눅스 환경에서 chgrp 명령어는 파일이나 디렉터리의 그룹 소유권을 변경하는 데 사용됩니다. 왜 굳이 chown 대신 chgrp를 사용할까요? 때로는 스위스 군용 칼이 유용하지만, 특정 작업에는 오직 메스만이 필요한 것처럼, 특정 목적에 맞는 도구가 더 효율적일 수 있습니다.

chgrp를 사용하는 이유

chgrp 명령어는 파일 또는 디렉터리의 그룹 소유자만 변경하는 데 특화되어 있습니다. chown 명령어는 사용자 소유자 및 그룹 소유자를 모두 변경할 수 있어 더 광범위한 기능을 제공하지만, 그룹 소유자만 변경할 때는 복잡하고 오류를 유발할 수 있습니다. 특히 콜론(:)의 위치에 따라 의도치 않은 결과를 초래할 수 있습니다.

반면, chgrp의 구문은 더욱 직관적이며, 변경 사항을 명확하게 알려줍니다. 이는 유닉스 철학에 따른 것으로, 하나의 작업을 효율적으로 수행하는 데 초점을 맞춘 전문 도구입니다.

파일 그룹 소유권 수정

파일의 그룹 소유권을 변경하려면 sudo 권한이 필요합니다. 이는 파일이나 디렉터리가 한 그룹에서 다른 그룹으로 이동하는 것이 일반 사용자의 결정 사항이 아니기 때문입니다. 따라서, 루트 권한을 가진 사용자만이 이 작업을 수행할 수 있습니다.

예를 들어, “gc.c”라는 C 소스 파일의 그룹 소유권을 “devteam”으로 변경해 보겠습니다. 현재 소유권은 ls -l 명령어를 통해 확인할 수 있습니다.

ls -l

이제 그룹 소유권을 변경하는 명령어는 다음과 같습니다. sudo, 공백, chgrp, 공백, 변경하려는 그룹 이름, 공백, 파일 이름 순으로 입력합니다.

sudo chgrp devteam gc.c

변경된 사항을 확인하려면 다시 ls -l 명령어를 실행합니다.

ls -l

그룹 소유권이 “dave”에서 “devteam”으로 변경된 것을 확인할 수 있습니다. 여러 파일의 그룹 소유권을 한 번에 변경하려면 와일드카드를 사용할 수 있습니다. 예를 들어, 현재 디렉터리의 모든 C 소스 파일의 그룹 소유권을 변경하려면 다음과 같은 명령어를 사용할 수 있습니다.

sudo chgrp devteam *.c

ls -l 명령어를 통해 변경 사항을 다시 확인해 볼 수 있습니다.

ls -l

이 디렉터리의 모든 C 소스 파일의 그룹 소유권이 “devteam”으로 변경되었습니다. 또한, -c (변경) 옵션을 사용하면 chgrp는 변경된 각 파일에 대한 변경 사항을 나열하여, 작업이 올바르게 수행되었는지 확인할 수 있습니다. 만약 그룹 소유권을 “researchlab”으로 설정하고자 했다면 다음과 같이 수정할 수 있습니다.

sudo chgrp -c researchlab *.c

변경 사항이 적용되고 각 변경 사항이 나열되어, 변경 사항이 올바른지 확인할 수 있습니다.

디렉터리 그룹 소유권 변경

디렉터리의 그룹 소유권을 변경하는 것도 매우 간단합니다. “backup” 디렉터리의 그룹 소유권을 변경하려면 다음 명령어를 사용할 수 있습니다.

sudo chgrp -c devteam ./backup

이 명령어는 디렉터리 내부의 파일이 아닌, 디렉터리 자체의 그룹 소유권을 변경한다는 점에 주의해야 합니다. ls -l 명령어를 -d(디렉터리) 옵션과 함께 사용하여 확인할 수 있습니다.

ls -l -d

디렉터리 자체의 그룹 소유권이 “devteam”으로 변경된 것을 확인할 수 있습니다.

재귀 옵션

디렉터리에 저장된 파일과 디렉터리의 그룹 소유권을 변경하려면 -R(재귀) 옵션을 사용할 수 있습니다. 이 옵션은 chgrp가 대상 디렉터리 아래의 모든 파일과 하위 디렉터리에 대한 그룹 소유권을 변경하도록 합니다.

“backup” 디렉터리에 이 옵션을 적용해 보겠습니다.

sudo chgrp -R devteam ./backup

ls 명령어를 사용하여 중첩된 하위 디렉터리 중 하나에 있는 파일을 확인하고, 해당 하위 디렉터리의 설정도 확인합니다.

ls -l ./backup/images
ls -l -d ./backup/images

중첩된 하위 디렉터리의 파일과 해당 하위 디렉터리의 그룹 소유권이 모두 변경된 것을 확인할 수 있습니다.

참조 파일 사용

지금까지 chgrp에 변경하고자 하는 그룹 이름을 명시적으로 지정했습니다. 하지만 “이 파일의 그룹 소유권을 다른 파일과 동일하게 설정”하는 방식으로 chgrp를 사용할 수도 있습니다.

“gc.h”의 그룹 소유권을 “gc.c”와 동일하게 설정해 보겠습니다. ls 명령어를 사용하여 “gc.c” 및 “gc.h”의 현재 설정을 확인합니다.

ls -l gc.c
ls -l gc.h

이때 사용해야 할 옵션은 --reference 옵션입니다. 그룹 소유권이 참조 파일에서 다른 파일로 복사됩니다. 이때 파일의 방향에 주의해야 합니다.

sudo chgrp --reference=gc.c gc.h

ls 명령어를 사용하여 설정이 “gc.h”로 전송되었는지 확인합니다.

ls -l gc.h

“gc.h” 파일이 이제 “gc.c”와 동일한 그룹 소유권을 갖게 되었습니다.

심볼릭 링크와 함께 chgrp 사용

chgrp를 사용하여 심볼릭 링크 또는 심볼릭 링크가 가리키는 파일의 그룹 소유권을 변경할 수 있습니다. 이 예에서는 심볼릭 링크의 이름을 “button_link”라고 하겠습니다. 이 링크는 “./backup/images/button_about.png”라는 파일을 가리킵니다. 파일의 그룹 소유권을 변경하려면 --dereference 옵션을 사용해야 합니다. 이렇게 하면 파일의 설정이 변경되고 심볼릭 링크는 변경되지 않습니다.

ls -l 명령어를 사용하여 심볼릭 링크에 대한 설정을 확인합니다.

ls -l button_link

파일을 변경하는 명령어는 다음과 같습니다.

sudo chgrp --dereference devteam button_link

ls 명령어를 사용하여 심볼릭 링크가 변경되지 않았는지 확인하고, 파일에 대한 그룹 소유권 설정도 확인합니다.

ls -l button_link
ls -l ./backup/images/button_about.png

심볼릭 링크는 변경되지 않았고, “button_about.png” 파일의 그룹 소유권이 수정되었습니다. 심볼릭 링크 자체의 그룹 소유권을 변경하려면 --no-dereference 옵션을 사용해야 합니다.

사용할 명령어는 다음과 같습니다.

sudo chgrp --no-dereference devteam button_link

ls -l 명령어를 사용하여 심볼릭 링크의 새 그룹 소유권이 설정되었는지 확인합니다.

ls -l button-link

이번에는 심볼릭 링크 자체가 변경되었고, 링크가 가리키는 파일은 변경되지 않았습니다.

간결함의 미학

단순함은 큰 장점입니다. 기억해야 할 내용이 적고 혼동할 여지가 줄어들면 오류 발생 가능성도 줄어듭니다. chgrp 명령어는 그룹 소유권 변경이라는 특정 작업을 위해 설계된 단순하고 강력한 도구입니다.