운영중인 Web Site의 테스트 환경을 구축하기 위해서 홈디렉토리와 DB 복제 후 권한을 변경 해주어야 했는데,

이 부분에서 문제가 생겼다.

 

만약 모든파일의 권한을 한꺼번에 변경한다면 굉장히 간단하다.

예를 들어, 아래와 같이 /home/rubi 하위 디렉토리 모두를 rubi 계정에서 naver계정으로 변경 하고자 할 경우 -R 옵션만 주게 되면 naver의 권한으로 변경 된다.

[rubi] /home/rubi > # chown -R naver.naver /home/rubi

 

하지만 문제는 하위 디렉토리에는 rubi 라는 유저의 계정만 가지고 있는 것.

웹 서비스라고 한다면 nobody 혹은 apache, daemon과 같은 권한을 가지고 있는 디렉토리와 웹소스들이 존재하게 되는데,

이 파일들의 권한들을 모두 변경해 버린다면 똑같은 테스트 환경이라고 볼 수 없게 되어버린다.

web에서 불러와야 할 파일들은 불러올 수 없는 상황들이 발생할 수 밖에 없다.

 

자 ~!! 그래서 Point는 특정 디렉토리 아래에 특정 계정을 내가 원하는 계정의 권한으로 변경 하는 것.

find 와 xargs을 혼합해서 해당 역할을 수행할 수 있다.

 

 

[rubi] / >find /home/rubi/ -user rubi | xargs chown naver.naver

해당 명령을 수행하게 되면 find를 통해 /home/rubi 아래에 rubi 계정의 권한을 갖는 파일리스트가 출력되며,

xargs를 통해 해당 리스트를 chown 통해 권한을 변경하게 됩니다.

 

 

* 만약! 파일명 중에 띄어쓰기가 들어간 파일들이 있는 경우 위의 명령으로 모두 실행되지 않습니다.

물론.. 다른 방법도 가능하겠지만, 저의 경우에는 약간의 꼼수를 썻습니다.

[rubi] / >find /home/rubi/ -user rubi > /rubi_user_list.txt

[rubi] / >vi /rubi_user_list.txt

:%s/^/”/g

각줄의 맨앞에 ” 삽입

:%s/$/”/g

각줄의 마지막에 ” 삽입

:wq

저장

 

위와 같이 하는 이유는 치환구문을 이용해 각 줄의 맨앞과 맨뒤에 ” 표시를 붙여줌으로써 공백처리를 인식해주기 위함.

 

저장한 다음 아래와 같이 수행 한다면 파일이름에 공백이 있는 경우도 권한 변경 완료.

[rubi] / >cat /rubi_user_list.txt | xargs chown naver.naver

 

위 작업들은 다른 명령어들과 혼합할 경우 굳이 vi 편집기를 이용하지 않아도 치환 가능할 것입니다.

응용해서도 다른 작업들도 가능할 것으로 생각 됩니다.