http://www.superuser.co.kr/superuserboard/view.html?id=27&code=linuxcom&start=50&position=


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] file...

 

사용예 #1

위의 file1라는 소유주를 bible로 변경해 보겠다.

[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로 변경이 되었다. 
물론 이런 명령어가 허용이 되려면 파일에 대한 소유권이 있어야만 가능한 일이다. 
아무나 파일또는 디렉토리의 퍼미션을 변경할 수 있는 것은 아니다.

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


사용예 #2

다음과 같이 :(콜론)으로 구분하여 "소유주:소유그룹"을 지정하면 소유주와 소유그룹이 변경이 된다.

[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라는 파일의 소유주를 bible, 그리고 소유그룹을 bible2로 변경한 예이다.


사용예 #3

이번에는 디렉토리의 소유주와 소유그룹을 변경해 보자.
리눅스에서는 디렉토리도 파일로 취급하므로 소유주와 소유그룹을 변경하는 방법은 파일과 동일하다.

[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이라는 디렉토리의 소유주를 bible1으로 변경하고 소유그룹을 bible2로 변경한 예이다.

사용예 #4

서버작업을 하다보면 특정 디렉토리내의 모든 파일과 디렉토리들을 특정 소유주와 소유그룹으로 변경해야하는 경우가 흔히 발생한다. 
예를 들어 웹에서 자료실등의 파일업로드 디렉토리의 소유주와 소유그룹을 nobody와 nobody로 해줘야 할때가 종종 있을 것이다.
즉, Apache에서 특정 디렉토리로 파일을 저장하려면 읽기, 쓰기 권한이 있어야하는데 디렉토리의 소유주와 소유그룹을 nobody로 설정해 버리면 간단히 해결할 수 있으므로 이런 작업이 필요하다.

그렇다면 특정 디렉토리내에 있는 모든 파일과 서브디렉토리의 소유주와 소유그룹을 한꺼번에 변경하려면 어떻게 할까?

이는 다음예와 같이 -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]# 
[root@host1 commmand]# cd dir1           (dir1 디렉토리로 들어간다)
[root@host1 dir1]# 
[root@host1 dir1]# ls -l                 (dir1의 파일들의 소유주와 소유그룹 확인)
합계 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 ..                 (다시 dir1에서 빠져나온다.)
[root@host1 commmand]# 
[root@host1 commmand]# chown -R nobody:nobody dir1    (dir1과 그 안에 있는 파일과 디렉토리들의 소유주를 nobody로 소유그룹을 nobody로 변경한다.)
[root@host1 commmand]# 
[root@host1 commmand]# ls -l             (dir1의 소유주와 소유그룹 변경확인)
합계 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           (dir1으로 들어간다)
[root@host1 dir1]# 
[root@host1 dir1]# ls -l                 (dir1내에 있는 파일과 디렉토리들의 소유주와 소유그룹이 변경되었는가를 확인한다.)
합계 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옵션을 사용하면 된다.


사용예 #5

아래의 예와 같이 -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]#

 

+ Recent posts