레이블이 Linux & Shell인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Linux & Shell인 게시물을 표시합니다. 모든 게시물 표시

2009년 9월 10일 목요일

[Shell] 날짜로 파일 필터링 하기

쉘에서 작업을 하다보면 파일들을 날짜로 필터링 해야하는 경우가 생긴다.

 

예를 들면, 어떤 날짜와 다른 어떤 날짜 사이에 수정한 파일들만 가지고 와서 따로 백업을 해준다든지,

 

공동으로 작업하는 사람이 오늘 어떤 파일을 수정하였는지 보고 싶다든지 하는 경우가

 

파일을 날짜로 필터링해야 하는 경우이다.

 

 

그럴 때는 편법으로 이런 방법이 있다.

 

$ touch -t 200901010000 file1

$ touch -t 200902010000 file2

$ find / -newer file1 -a ! -newer file2 -ls  > result

 

여기서 이 명령어들을 이해하려면 몇 가지 알고 있어야 하는 것들이 있다.

 

1. touch 명령어
  1) 용도 : 파일의 시간을 원하는 시간으로 생성하거나 수정

  2) -t 옵션 : 수정하고자 하는 시간을 지정하는 옵션. -t 를 쓴 후 뒤에 원하는 시간을 적으면 됨.

 

2. find 명령어

  1) 용도 : 원하는 조건의 파일을 찾음

  2) -newer 옵션 : 옵션 뒤의 파일보다 최근에(이후에) 내용이 수정된 파일을 검색

  3) -a 옵션 : 'and' 연산자와 같은 의미

  4) ! : 'not' 연산자와 같은 의미

 

 

자 그렇다면, 이제 명령어를 이해해보자.

 

1. 첫 번째 줄을 보면 'file1'이라는 파일을 2009년 1월 1일 00시 00분 00초로 생성한다.

 

2. 두 번째 줄을 보면 1번과 마찬가지 방법으로 'file2'이라는 파일을 2009년 2월 1일 00시 00분 00초로 생성한다.

 

3. 세 번째 줄에 대해서 설명하면, find 명령어 다음의 '/'는 전체 범위에서 찾으라는 의미이고, file1이 수정된 시간보다 최근에, file2가 수정된 시간보다는 이전의 파일을 찾으라는 의미의 명령어 문장이다.

 

그러므로, 저 세 명령어 문장으로 수정된 시간이 원하는 범위 내에 있는 파일을 찾을 수 있다.

2009년 8월 21일 금요일

[Linux-CVS-4] CVS 클라이언트 작업2 - Eclipse

많은 사람들이 CVS로 프로젝트 작업 시 Eclipse를 이용한다.

 

실제로 많이 편리하다. ^^;

 

 

CVS 서버 등록 및 접속

 

이클립스 화면에서 'CVS Repositaries Perspective'를 연다.

 

 

이미지에 보이는 'Other ..' 을 클릭하면 다음 화면이 뜬다.

거기서 'CVS Repository Exploring'을 클릭한 후 'OK'를 클릭한다.

 

그러면 좌측의 Perspective들이 있는 부분에 'CVS Repository Perspective' 패널이 추가된다.

 

그 패널 위에서 오른쪽 마우스를 클릭하고 'New'에 마우스 오버하면 'Repository Location..'이라는

메뉴가 있다. 클릭한다.

 

 

클릭하면 다음과 같은 화면이 뜨는데 빨간 네모가 되어 있는 곳에 기입해야 할 것이

CVS 서버의 정보이다. 모두 입력 후, 'Finish'를 클릭한다.

 

 

이제 'CVS Repository Perspective' 패널에 추가되어 있는 CVS 서버 정보가 보일 것이다.

 

 

 

checkout 명령어

 

'CVS Repository Perspective' 패널에 추가되어 있는 CVS 서버 정보를 아래로 펼치면

'HEAD', 'Branches'.. 등등의 메뉴가 보일 것인데 'HEAD' 메뉴를 아래로 펼친다.

아래로 펼치면 CVS 서버에 있는 프로젝트들을 볼 수 있는 원하는 프로젝트를 클릭한 후

마우스 오른쪽 클릭한 다음 'Check Out'을 클릭한다.

 

 

그러면 자신의 Eclipse의 'Workspace'에 해당 프로젝트가 복사된다.

만약에 'Workspace'가 아닌 다른 장소에 복사하고 싶으면 'Check Out As'를 클릭하면 된다.

 

 

 

CVS로 프로젝트 작업하기

 

이제 'Navigator View'를 열어서 확인해보면 프로젝트가 추가되어 있는 것을 볼 수 있다.

 

Eclipse에서는 굳이 status 명령어 없이도 파일 우측에 파일 및 디렉토리의 버전 정보가 표시된다.

게다가 아직 update되지 않은 정보는 파일이나 디렉토리명 앞에 '>'라는 표시가 되어 있어서

구분하기가 용이하다.

 

update 및 commit 실행 시 실행시키고 싶은 파일이나 디렉토리에, 혹은 프로젝트 이름에서

마우스 오른쪽 버튼 클릭 후 'team' 메뉴에 마우스 오버하게 되면 update 및 commit이 보인다.

 

이상으로 Eclipse에서 간단히 CVS로 작업해보았다.

 

CVS를 처음 다루기를 어렵지만 한번 익혀놓으면 협업 작업 시 아주 편리하다.

물론 관리 차원에서의 효율성도 증대될 것이다.

 

더 나은 개발자가 되기 위해서..!

[Linux-CVS-3] CVS 클라이언트 작업1 - 쉘

이제 서버에서 할 수 있는 대부분의 설정은 끝났다고 보면 된다.

 

클라이언트 작업이 필요한데, 익히 알고 있는 checkout, update, commit 등이 그것이다.

 

많은 사람들이 eclipse에서 작업하기도 하고 쉘에서 작업하기도 하는데,

 

먼저 쉘에서 하는 것에 대해서 알아보겠다.

 

 

CVS 계정 로그인

 

첫 번째에서 cvs 계정을 생성했었는데, 예를 들어서 user1 이라고 해보자.

제일 먼저 해야하는 것은 당연히 cvs 로그인이다.

물론 로컬 디스크에서 작업할 때는 로그인이 필요없다. root가 모든 권한을 가지고 있기 때문이다.

 

$ cvs -d:pserver:user1@myhost.com:/home/cvs login


차례대로 설명해보면,

1. -d : 저장소의 위치를 나타낼 때 쓰는 옵션

2. pserver : pserver 프로토콜

3. user1 : 클라이언트의 cvs 계정

4. myhost.com : cvs 서버의 host

5. /home/cvs : cvs 서버의 repository 경로

6. login : 로그인 명령어

 

로그인할 때마다 저 긴 명령어를 타이핑하려면 힘들 것이다. 그래서 환경 변수로 등록해두면 편하다.

 

$ export CVSROOT=:pserver:user1@myhost.com:/home/cvs
$ cvs login

 

 

 

checkout 명령어

 

checkout 명령어는 cvs로 작업 중인 프로젝트의 복사본을 클라이언트에게 가지고 오는 것이다.

클라이언트에서 원하는 경로에 checkout 명령어를 실행시킨다.

 

$ cd /home/client/
$ cvs checkout project_name
$ ls /home/client/

project_name

 

cvs checkout 뒤에는 원하는 프로젝트 이름을 적는다.
ls 명령어로 디렉토리 내용을 보면 해당 프로젝트 이름으로 디렉토리가 생성되어 있는 것을

확인할 수 있다. 그리고 그 디렉토리 아래에는 프로젝트 파일들이 모두 복사되어 있을 것이다.

checkout 명령어는 프로젝트 작업 시작 시 한 번만 실행시켜 주면 된다.

 

 

 

CVS로 프로젝트 작업하기

 

1. update

 

update 명령어는 실제 프로젝트 진행 시 다른 팀원이 변경한 데이터를 자신의 프로젝트에 적용시키는

작업이다.

 

클라이언트에서 진행 중인 프로젝트 내의 update를 원하는 경로에서 명령어를 실행시키면 된다.

예컨대, 클라이언트 프로젝트에서 갱신하고 싶은 디렉토리가 project_name/my_directory1이라고

하면,

 

$ cd project_name
$ cvs update my_directory1


이렇게 실행시키면 된다.

물론 그냥

 

$ cvs update


라고만 해도 실행된다. 이것은 현재 디렉토리 내의 하위 경로까지 모두 update 하는 명령어이다.

클라이언트의 프로젝트 정보가 서버 상의 정보로 완전히 갱신이 되지 않았을 경우, commit 명령이

실행되지 않으므로 소스 수정 전에 반드시 update 명령을 수행하는 것이 좋다.

 

 

2. add & remove

 

파일이나 디렉토리를 추가할 때도 cvs 명령어를 사용해야 한다.

예를 들면 project_name 디렉토리 아래에 my_directory2 디렉토리를 추가하고자 한다면,

 

$ mkdir project_name/my_directory2
$ cvs add project_name/my_directory2


이렇게 하면 된다. 파일도 마찬가지이다.

 

파일을 삭제하는 경우도 추가 시와 유사하다.

가령, project_name 디렉토리 아래의 my.jsp 파일을 삭제한다고 하자.

 

$ rm project_name/my.jsp
$ cvs remove project_name/my.jsp


그러나 디렉토리를 삭제하는 경우는 좀 다른데, 아까 생성했던 project_name/my_directory2를

삭제한다고 했을 때, 클라이언트의 프로젝트에서 해당 디렉토리를 삭제 후 직접 CVS 서버로

가서 해당 디렉토리를 삭제해줘야 한다.

 

 

3. status

 

staus 명령어는 현재 버전을 확인하는 명령어이다.

 

$ cvs status project_name/index.jsp
===================================================================
File: index.jsp         Status: Up-to-date
   Working revision:    1.3     Fri Aug 21 05:14:03 2009
   Repository revision: 1.3     /home/cvs/project_name/index.jsp,v
   Sticky Tag:          (none)
   Sticky Date:         (none)
   Sticky Options:      (none)


이런 식으로 출력된다.

뒤에 파일 이름이나 디렉토리 이름을 적지 않으면 프로젝트 내의 모든 파일에 대한 정보가

출력된다.

 

 

4. commit

 

commit 명령어는 클라이언트에서 수정한 정보를 서버에 등록시키는 것이다.

클라이어트에서 project_name/index.jsp 파일을 수정했을 경우,

 

$ cvs commit project_name/index.jsp


이렇게 실행시키면 된다. 위의 명령어들과 마찬가지로 뒤에 파일 이름이나 디렉토리 경로를

쓰지 않으면 프로젝트 내의 모든 파일의 수정된 정보가 업로드된다.

 

 

 

이상으로 가장 많이 쓰이는 명령어들을 살펴 보았다.

사용해보니 역시 쉘보다는 이클립스가 편한 것 같다.

대부분의 개발자들이 그렇게 생각하겠지만 ^^;

 

 

 

참고1 : CVS User Guide

참고2 : cvs 설정 및 사용법

2009년 8월 20일 목요일

[Linux-CVS-2] CVS 프로젝트 등록 및 시작

난생 처음으로 CVS 세팅은 맞아 무수한 삽질과 성공을 거듭하고 있다.

 

끝나게 되면 정말 뿌듯하겠지?

 

막상 하고 나면 정말 별거 아닌 작업들이다.

 

 

CVS 프로젝트 초기화

 

프로젝트를 초기화하는 import 명령어를 실행하기 위해서는 반드시 환경 변수 CVSROOT가

설정되어 있어야 한다.

CVSROOT 설정 방법은 로컬 디스크에 있을 때와 리모트에 있을 때에 따라서 방법이 나뉜다.

 

먼저 로컬 디스크에 있는 경우,

 

$ export CVSROOT="/home/cvs"

 

다음은 리모트에 있을 경우,

 

$ export CVSROOT=":pserver:user_id@host_name:/home/cvs"


이렇게 하면 CVSROOT가 설정된다.

이제 프로젝트를 초기화할 수 있다.

새 프로젝트를 초기화시키기 위해서는 뭔가 선행되어 있는 작업이 있어야 한다.

만약, 완전히 새롭게 시작하는 프로젝트 일 경우, 빈 디렉토리를 하나 생성한 후,

import 명령어를 실행시키면 될 것이고, 이미 작업되어 있는 프로젝트를 수정하거나

프레임워크가 구성된 프로젝트를 시작할 경우는 해당 디렉토리 내에서 import 명령어를

실행시키면 된다.

 

가령, 생성된 빈 디렉토리거나 구축된 프로젝트가 있는 디렉토리가 /home/my/myproj 라고 하자.

그러면 해당 디렉토리로 옮겨간 후 명령어를 실행한다.

 

$ cd /home/my/myproj
$ cvs import -m "설명" project_name my_name release_0


두 번째 줄을 차례대로 설명해보면,

1. cvs import : 프로젝트 추가 명령어

2. -m : import 시 기록할 수 있도록 문자를 넣을 수 있는 옵션

3. "설명" : 프로젝트에 관련된 간단한 설명글

4. project_name : 프로젝트 이름, 이 이름으로 프로젝트 디렉토리가 생성된다.

5. my_name : vendor_tag라고 하며, 프로젝트는 만드는 사람 이름이나 팀 이름을 적을 수 있다.

6. release_0 : release_tag라고 한다.

 

5, 6번인 vendor_tag와 release_tag는 크게 중요하지 않다고 한다.

 

명령어를 실행시키고 나면 /home/cvs 아래에 4번 project_name으로 설정했던 이름으로

생성된 디렉토리를 볼 수 있을 것이다.

 

$ ls /home/cvs
CVSROOT project_name


자, 이제 프로젝트 추가가 완료되었다. 이젠 공동으로 사용가능한 모든 작업이 완료되었으며

각 팀원들이 클라이언트 환경에서 세팅해 줄 일만 남았다.

 

참고 : CVS User Guide

2009년 8월 19일 수요일

[Linux-CVS-1] CVS 서버 설정

개발 프로젝트 진행 시, 웬만한 프로젝트는 대부분 팀을 이뤄서 하게 된다.

 

그럴 때, 버전 관리가 필수적인데, 필요한 프로그램이 CVS이다.

 

 

CVS의 정의

 

CVS(Current Versions System, 동시 버전 시스템)은 소프트웨어 프로젝트를 진행할 때, 파일로 이뤄진 모든 작업과 변화를 추적해서 여러 개발자가 협력적이고 효율적으로 작업을 할 수 있게 한다. CVS는 GPL(GNU General Public License, GNU 일반 공중 허가서) 하에서 배포되는 오픈 소스 프로그램이다.

 

 

CVS 설치

 

1. CVS 설치 여부 확인

 

$ cvs -v
$ cvs -version

 

위 방법으로 확인이 가능하다. CVS가 설치되어 있다면 버전 정보가 보일 것이다.

설치되어 있지 않다면 CVS를 먼저 설치해야한다.

 

2. CVS 설치

 

CVS는 http://ftp.gnu.org/non-gnu/cvs/binary/stable/x86-linux/RPMS/i386/에서 패키지를 다운받을 수 있다.

 

 

 

CVS 리눅스 계정 추가

 

CVS를 관리할 계정을 생성해야 한다. 계정을 따로 생성하지 않고 관리해도 되지만 따로 계정을 두고 관리하는 것이 관리 차원에서 효율적이다.

 

추가되는 사용자 계정의 홈 디렉토리가 CVS의 저장소가 될 것이다.

 

$ groupadd cvs              - cvs 그룹 추가
$ useradd -g cvs cvs
    - cvs 그룹에 계정 추가
$ passwd cvs                 - cvs 계정 패스워드 설정

 

 

 

CVS 저장소(repository) 설정

 

여러 명이 동시에 작업해야 하므로 공통으로 저장할 장소가 필요하다. 그 장소를 저장소(repository)라고 부르며 CVS의 전반적인 설정 파일, 버전 관리에 관련된 정보, 파일 별 작업 기록 등이 저장된다. 설정 파일 및 작업 기록은 CVS 프로그램이 자동으로 관리하므로 사용자가 건드릴 필요는 전혀 없다.

 

$ cvs -d /home/cvs init


/home/cvs 디렉토리를 CVS 저장소로 초기화한다. -d 옵션은 저장소가 될 디렉토리 경로를 지정하기 위한 옵션이고, 'init'은 저장소를 초기화하기 위한 cvs 명령어이다.

 

명령어 실행 후 /home/cvs 디렉토리를 확인해 보면 'CVSROOT'라는 이름의 디렉토리가 생성되어 있으며 각종 설정 파일이 그 디렉토리 내에 들어있다는 것을 알 수 있다.

 

 

 

CVS 디렉토리 사용 권한 설정

 

설정했던 디렉토리를 cvs 계정이 사용 가능하도록 지정해 준다.

 

$ chown -R cvs:cvs /home/cvs
$ chmod 770 /home/cvs /home/cvs/CVSROOT


 

 

CVS 서비스 설정

 

1. 2041 포트 확인

 

CVS 전용 계정으로 관리하는 경우 클라이언트는 CVS 서버에 pserver 프로토콜을 사용해 접근한다. 이 프로토콜을 사용하려면 몇 가지 준비 사항이 필요하다.

 

우선 pserver 프로토콜이 사용하는 포트가 사용 가능하게 설정되어 있는지 확인한다.

 

$ cat /etc/services | grep 2401


이 명령어의 결과가 출력이 된다면 pserver 프로토콜을 사용할 준비가 되어 있는 것이다.

 

 

2. pserver 환경 파일 작성

 

pserver 프로토콜을 사용하기 위해서는 환경 파일을 작성해야 한다. 슈퍼 데몬인 xinetd를 사용하는 경우 우선 /etc/xinetd.d 디렉토리에 cvspserver 파일이 있는지 확인하고 없으면 파일을 만든다.

 

$ vi /etc/xinetd.d/cvspserver


새 파일로 vi 에디터가 뜨면 다음 내용을 입력한다.

 

service cvspserver
{
     disable = no
     flag = REUSE
     socket_type = stream
     wait = no
     user = root
     server = /usr/bin/cvs
     server_args = -f --allow-root=/home/cvs pserver
     log_on_failure += USERID
}


--allow-root는 cvs 저장소가 /home/cvs 임을 명시하기 위해서 사용된다.

만약에 새로운 프로젝트 project1을 생성하였을 경우, 이 프로젝트는 /home/cvs/project1 디렉토리에 저장된다.

 

cvspserver 파일 편집을 완료했으면 저장 후 xinetd 서비스를 재시작한다.

 

$ service xinetd restart


 

 

CVS 전용 사용자 계정 추가

 

CVS 사용자 계정은 실제로 프로젝트를 진행하는 팀원 개개인의 계정이다. 팀원들은 이 계정을 통해 프로젝트 파일에 접근해서 작업을 수행할 것이다.

 

CVS 계정을 더 쉽게 추가하기 위해 /usr/local/bin 디렉토리에 cvspasswdgen 파일을 생성하고 다음의 내용을 스크립트를 기록한다.

 

$ vi /usr/local/bin/cvspasswdgen

 

#!/usr/bin/perl

 

($u, $p)=@ARGV;

@d=(A..Z,a..z);

$s=$d[rand(52)].$d[rand(52)];

print $u.":".crypt($p, $s).":cvs\n"


이어서 cvspasswdgen 파일에 대해 다음과 같이 실행 권한을 부여한다.

 

$ chmod 755 /usr/local/bin/cvspasswdgen

 

이제 다음과 같은 명령어로 CVS 전용 사용자 계정을 추가할 수 있다. cvspasswdgen 명령어의 첫 번째 파라미터는 사용자 계정 이름이고, 두 번째 파라미터는 해당 계정의 패스워드이다.

 

$ cd /home/cvs/CVSROOT
$ cvspasswdgen cvsuser1 cvsuser1_passwd >> passwd


위 명령어를 입력하면 passwd 파일에 계정 정보가 입력될 것이다. 이제 이클립스와 같은 IDE에서 CVS 전용 계정을 통해 접속하면 된다.

 

다음 번에는 프로젝트 초기화에 대해서 정리해 봐야지.

 

참고 : [강좌] Linux 에서 CVS 서버 세팅하기.