강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

사용자및그룹관리6편 : 파일의 소유자, 소유그룹 변경 실무(chown)

작성자 정보

  • 구돌 작성
  • 작성일

컨텐츠 정보

본문

사용자및그룹관리6: 파일의 소유자, 소유그룹 변경 실무(chown)

 

 

, 이번에는 파일의 소유자와 소유그룹에 변경하는 방법에 대해서 알아보도록 하겠습니다. 

 

 리눅스는 많은 사용자들이 함께 사용하는 멀티유저 운영체제입니다. 

 

 따라서 특정 파일의 소유와 소유그룹이 엄격하게 구분되어 명시되어 있습니다. 

 

 필요에 따라서 서버관리자는 이런 정보들을 변경해야할 필요성이 있습니다. 

 

 

 

파일과 디렉토리의 소유자 및 소유그룹 변경하는 chown명령어 개론

 

chown명령어는 CHange OWNer의 약어로서 파일이나 디렉토리의 소유자와 소유그룹을 변경할 때에 사용하는 명령어 입니다. 

 

  파일과 디렉토리의 소유자와 소유그룹은 아래 예와 같이 각각 굵은글자로 표시된 부분을 의미합니다. 

 

 

 

[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 root     root         4096  9
15 20:02 dir1
-rw-r--r--    1 root     root           41  9
15 20:22 file1
-rw-r--r--    1 root     root           56  9
15 20:22 file2
[root@host1 commmand]#


위의 예에서 dir1이라는 디렉토리와 file1, file2라는 파일은 소유자와 소유그룹이 모두 root로 되어 있습니다. 

 

  즉 파일이나 디렉토리 모두 3번째 필드에 해당하는 것이 소유자며, 네번째 필드에 해당하는 것이 소유그룹입니다. 

 

 

 

사용형식
chown [-Rcfv] [--recursive] [--changes] [--help] [--version] [--silent] [--quiet] [--verbose] [user][:.][group]
파일...

 

이번 절에서 설명하는 chown명령어에 대한 예는 실무에서 사용하는 여러가지 방법들을 예로 들고 있습니다. 

 

  따라서 chown에 대한 다양한 사용법에 대해 목말랐던 여러분들의 가슴을 촉촉히 적실 수 있도록 많은 실무예와 함께 가능한 상세히 설명하였습니다. 

 

 

 

 

특정파일의 소유자 변경하기

 

먼저, 가장 간단한 예로서 file1파일의 소유자를 변경해 보겠습니다. 

 

 즉 먼저 ls로 확인한 예에서는 file1의 소유자가 root로 되어 있습니다. 

 

 그리고 “chown bible file1”이라는 명령어로 file1의 소유자를 bible로 변경 하였습니다. 

 

 그런 다음 ls로 확인하였더니 file1의 소유자가 root에서 bible로 변경되었음을 알 수 있습니다. 

 

 

[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 root     root         4096  9
15 20:02 dir1
-rw-r--r--    1 root     root           41  9
15 20:22 file1
-rw-r--r--    1 root     root           56  9
15 20:22 file2
[root@host1 commmand]#

[root@host1 commmand]# chown bible file1
[root@host1 commmand]#
[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 root     root         4096  9
15 20:02 dir1
-rw-r--r--    1 bible    root           41  9
15 20:22 file1
-rw-r--r--    1 root     root           56  9
15 20:22 file2
[root@host1 commmand]#

 

, 위의 예에서 보다시피 file1 파일의 소유자가 bible로 변경이 되었습니다. 

 

  

 

물론 이런 명령어가 허용이 되려면 파일에 대한 소유권이 있어야만 가능합니다. 

 

  아무나 파일 또는 디렉토리의 소유자를 변경할 수 있는 것은 아닙니다. 

 

 , 그럼 이번에는 소유자와 소유그룹을 한꺼번에 변경하려면 어떻게 할까요?  다음의 예를 보십시요.

 


특정파일의 소유자와 소유그룹을 동시에 변경하기

 

앞의 예에서는 chown명령어로 파일의 소유자만을 변경하는 예를 보았습니다. 

 

  chown명령어로는 파일의 소유자와 함께 소유그룹을 동시에 변경할 수 있습니다. 

 

  , 다음과 같이 :(콜론)으로 구분하여 "소유자:소유그룹"을 지정하면 소유자와 소유그룹이 동시에 변경 됩니다. 

 

 

[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 root     root         4096  9
15 20:02 dir1
-rw-r--r--    1 bible    root           41  9
15 20:22 file1
-rw-r--r--    1 root     root           56  9
15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]# chown bible:bible2 file2
[root@host1 commmand]#
[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 root     root         4096  9
15 20:02 dir1
-rw-r--r--    1 bible    root           41  9
15 20:22 file1
-rw-r--r--    1 bible    bible2         56  9
15 20:22 file2
[root@host1 commmand]#

 

, 위의 예는 file2라는 파일의 소유자를 root에서 bible로 변경하였으며  소유그룹을 root에서 bible2로 변경한 예입니다. 

 

  chown명령어에서 사용했던 bible:bible2의 의미는 대상파일의 소유자를 bible로 하고 소유그룹을 bible2로 설정하라는 의미입니다. 

 

 

 

 

특정 디렉토리의 소유자와 소유그룹 동시에 변경하기

 

앞의 예에서 특정파일을 대상으로 소유자와 소유그룹을 변경하는 예를 보았습니다. 

 

  chown명령어는 파일뿐아니라 디렉토리의 소유자와 소유그룹을 변경할 수도 있습니다. 

 

  , 리눅스에서는 디렉토리도 하나의 특수파일로 인식하기 때문에 파일의 소유자와 소유그룹을  변경하는 방법과 디렉토리의 소유자와 소유그룹을 변경하는 방법이 동일합니다. 

 

 이번에는 디렉토리의 소유자와 소유그룹을 변경해 보겠습니다. 

 

  , 리눅스에서는 디렉토리도 특수파일로 취급하므로 소유자와 소유그룹을 변경하는 방법은 파일과 동일합니다. 

 

 

[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 root     root         4096  9
15 20:02 dir1
-rw-r--r--    1 bible    root           41  9
15 20:22 file1
-rw-r--r--    1 bible    bible2         56  9
15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]# chown bible1:bible2 dir1
[root@host1 commmand]#
[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 bible1   bible2       4096  9
15 20:02 dir1
-rw-r--r--    1 bible    root           41  9
15 20:22 file1
-rw-r--r--    1 bible    bible2         56  9
15 20:22 file2
[root@host1 commmand]#

 

위의 예는 dir1이라는 디렉토리의 소유자를 root에서 bible1로 변경하고 소유그룹을 root에서 bible2로 변경한 예입니다. 

 

 

 

 

특정 디렉토리내의 모든 파일(디렉토리)의 소유자(소유그룹)을 동시에 변경하기

 

서버작업을 하다보면 특정 디렉토리내의 모든 파일과 디렉토리들을 특정 소유자와 소유그룹으로 변경해야하는 경우가 흔히 발생합니다. 

 

  예를 들어 웹에서 자료실등의 파일업로드 디렉토리의 소유자와 소유그룹을 nobody nobody로 해줘야 할 때가 종종 있을 것입니다. 

 

 

 

, Apache에서 특정 디렉토리내에 파일을 저장하려면 읽기, 쓰기 권한이 있어야하는데 디렉토리의 소유자와 소유그룹을 nobody로 설정해 버리면 간단히 해결할 수 있으므로 이런 작업이 필요합니다. 

 

 

 

그렇다면 특정 디렉토리내에 있는 모든 파일과 서브디렉토리의 소유자와 소유그룹을 한꺼번에 변경하려면 어떻게 할까요?   이는 다음예와 같이 chown명령어의 -R옵션을 사용하면 간단히 해결 할 수 있습니다. 

 

 아래의 예를 보겠습니다. 

 

 

 

[root@host1 commmand]# ls -l            
합계 12
drwxr-xr-x    7 bible1   bible2       4096  9
15 20:41 dir1
-rw-r--r--    1 bible    root           41  9
15 20:22 file1
-rw-r--r--    1 bible    bible2         56  9
15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]# cd dir1          
[root@host1 dir1]#
[root@host1 dir1]# ls -l                
합계 28
drwxr-xr-x    4 root     root         8192  9
15 20:40 admin
drwxr-xr-x    4 root     root         4096  9
15 20:40 board
drwxr-xr-x    2 root     root         4096  9
15 20:40 phplib
drwxr-xr-x    3 root     root         4096  9
15 20:41 shop
drwxr-xr-x    2 root     root         4096  9
15 20:39 system_check
-rw-r--r--    1 root     root           17  7
16  2002 test.php
[root@host1 dir1]#
[root@host1 dir1]# cd ..                
[root@host1 commmand]#
[root@host1 commmand]# chown -R nobody:nobody dir1   
[root@host1 commmand]#
[root@host1 commmand]# ls -l            
합계 12
drwxr-xr-x    7 nobody   nobody       4096  9
15 20:41 dir1
-rw-r--r--    1 bible    root           41  9
15 20:22 file1
-rw-r--r--    1 bible    bible2         56  9
15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]# cd dir1          
[root@host1 dir1]#
[root@host1 dir1]# ls -l                
합계 28
drwxr-xr-x    4 nobody   nobody       8192  9
15 20:40 admin
drwxr-xr-x    4 nobody   nobody       4096  9
15 20:40 board
drwxr-xr-x    2 nobody   nobody       4096  9
15 20:40 phplib
drwxr-xr-x    3 nobody   nobody       4096  9
15 20:41 shop
drwxr-xr-x    2 nobody   nobody       4096  9
15 20:39 system_check
-rw-r--r--    1 nobody   nobody         17  7
16  2002 test.php
[root@host1 dir1]#


위의 예는 dir1과 그 안에 있는 모든 파일과 디렉토리들의 소유자와 소유그룹을 nobody로 변경한 예 입니다. 

 

 dir1내에 또다른 서브디렉토리가 존재한다면 그 안에 있는 모든 파일과 디렉토리들의 소유자와 소유그룹도 nobody로 변경이 됩니다. 

 

 

 

, 지정된 디렉토리와 그 하위의 모든 파일과 디렉토리들을 한꺼번에 특정 소유자와 소유그룹으로 변경하고자 할 때에는 위의 예와 같이 -R옵션을 사용하면 됩니다. 

 

 

 


소유자 또는 소유그룹변경시에 변경메시지 확인하기

 

지금까지의 예를 보시면 chown명령어로 파일이나 디렉토리의 소유자 또는 소유그룹을 변경할 때에 그 결과에 대한 메시지가 출력되지 않았습니다. 

 

 하지만 chown명령어사용시에 -c옵션을 사용하시면  소유자와 소유그룹의 변경내용에 대해서 간단한 메시지를 출력해 줍니다. 

 

 

 

아래의 예와 같이 -c옵션을 사용하면 변경된 파일들에 대해서 자세한 메세지를 보여줍니다. 

 

 
참고로 알아두시기 바랍니다. 

 

 

[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    7 nobody   nobody       4096  9
15 20:41 dir1
-rw-r--r--    1 bible    root           41  9
15 20:22 file1
-rw-r--r--    1 bible    bible2         56  9
15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]# chown -c nobody:bible2 file1
changed ownership of `file1' to nobody:bible2
[root@host1 commmand]#

 

, 위의 예에서는 -c옵션 사용으로 file1파일의 소유자와 소유그룹의 변경내역메시지를 보여주고 있습니다. 

 

 

 

 

파일의 소유자와 소유그룹변경시에 UID GID로 지정하여 변경하기

 

일반적으로 chown명령어로 소유자와 소유그룹을 변경할 때에 계정명(ID)과 그룹명으로 지정합니다. 

 

  하지만 chown에서 ID와 그룹명대신 UID GID를 지정하여도 변경이 됩니다. 

 

  , 이번에는 소유자와 소유그룹을 계정명이 아닌 UID GID로 지정한 예를 보도록 하겠습니다. 

 

 

[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    7 nobody   nobody       4096  9
15 20:41 dir1
-rw-r--r--    1 nobody   bible1         41  9
15 20:22 file1
-rw-r--r--    1 nobody   bible1         56  9
15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]# chown 500:501 file1
[root@host1 commmand]#
[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    7 nobody   nobody       4096  9
15 20:41 dir1
-rw-r--r--    1 bible    bible1         41  9
15 20:22 file1
-rw-r--r--    1 nobody   bible1         56  9
15 20:22 file2
[root@host1 commmand]#

 

, 위의 예에서 file1의 소유자를 UID 500인 사용자로 변경하였으며, 소유그룹을 GID 501인 소유그룹으로 변경한 예 입니다. 

 

 

 

 

UID GID를 지정하여 모든 파일과 디렉토리의 소유자와 소유그룹을 변경하기

 

이번에는 특정 디렉토리(dir1)와 그 안에 있는 파일과 디렉토리들을 모두 특정 UID(501) GID(502)로 변경하는 예를 보겠습니다. 

 

 

[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    7 nobody   nobody       4096  9
15 20:41 dir1
-rw-r--r--    1 bible    bible1         41  9
15 20:22 file1
-rw-r--r--    1 nobody   bible1         56  9
15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]# chown -R 501:502 dir1
[root@host1 commmand]#
[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    7 bible1   bible2       4096  9
15 20:41 dir1
-rw-r--r--    1 bible    bible1         41  9
15 20:22 file1
-rw-r--r--    1 nobody   bible1         56  9
15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]# ls -l dir1
합계 28
drwxr-xr-x    4 bible1   bible2       8192  9
15 20:40 admin
drwxr-xr-x    4 bible1   bible2       4096  9
15 20:40 board
drwxr-xr-x    2 bible1   bible2       4096  9
15 20:40 phplib
drwxr-xr-x    3 bible1   bible2       4096  9
15 20:41 shop
drwxr-xr-x    2 bible1   bible2       4096  9
15 20:39 system_check
-rw-r--r--    1 bible1   bible2         17  7
16  2002 test.php
[root@host1 commmand]#

 

위의 예는 dir1디렉토리내에 존재하는 모든 파일과 디렉토리들의 소유자를 GID 501인 사용자(bible1)로 변경하였고, UID 502인 소유그룹(bible2)으로 변경한 예 입니다. 

 

 

 

위의 예에서 보다시피 소유자와 소유그룹을 변경할 때에는 ID를 사용해도 되지만 UID GID를 사용해도 동일한 결과를 얻을 수 있습니다. 

 

 

 

참고로 UID GID /etc/passwd파일에 정의되어 있습니다. 

 

 따라서 UID GID를 이용하여 소유자와 소유그룹을 변경 할 때에는 /etc/passwd파일에서 UID GID를 확인해야 합니다. 

 

  따라서 UID GID를 이용하여 변경하는 경우는 일반사용자에게는 거의 없는 일이며 서버관리자에게는 흔히 있는 일입니다. 

 

 

 

 

특정 디렉토리내의 특정파일들에 대해서만 소유자와 소유그룹 변경하기

 

다음은 많이 사용되는 경우는 아니지만 꼭 알아두어야하는 방법입니다. 

 

 , 특정 디렉토리내에 많은 파일들이 함께 들어가 있고 또한 그 디렉토리에는 한사람의 소유로 되어있는 것이 아니라 여러 사람의 소유로 된 파일들이 함께 들어가 있습니다. 

 

 

 

, 일반적인 디렉토리내에 존재하는 파일들은 그 디렉토리의 소유자와 동일한 소유자소유로 되어있습니다. 

 

 하지만 가끔씩 특정 디렉토리내에 존재하는 파일들의 소유자가 각각 다를 경우가 있습니다. 

 

 가장 쉽게 찾아 볼 수 있는 예로서는 /tmp 디렉토리가 그러합니다. 

 

 

, 이번에 예로드는 chown는 특정 디렉토리내에 존재하는 많은 파일들 중에 특정사용자의 소유로 되어있는 파일들만 변경하는 방법입니다. 

 

 

 

[root@host1 commmand]# chown -R bible:webhost uploads --from=nobody:nobody

 

, 위의 예는 uploads라는 디렉토리내에 존재하는 파일들 가운데 소유자가 nobody이고 소유그룹이 nobody로 되어있는 파일들의 소유자를 bible로 변경하고 소유그룹을 webhost로 변경하라는 명령문입니다. 

 

 

 

실제로 서버이전이나 홈페이지 이전등을 하다보면 게시판의 파일 업로드 디렉토리(대부분 data, upfiles, uploads등의 이름을 가짐)에서 nobody로 되어있는 소유자를 다른 소유자로 변경하거나 또는 다른 소유자로 되어있는 파일들을 nobody의 소유로 변경하는 예로서 가끔씩 사용합니다. 

 

 꼭 알아두시기 바랍니다. 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 전체 회원수 59,444 명
  • 전체 게시물 30,916 개
  • 전체 댓글수 11,873 개