CI(1)

명칭
ci - RCS 파일에 리버젼을 체크인 한다

서식
ci [options] file ...

해설
ci (은)는 RCS 파일에 새로운 리버젼을 격납합니다. 인수 가운데, RCS 파일의 확장자(extension) 형식에 일치한다 파일명을 RCS 파일로 간주합니다. 그 이외의 파일명은, 새로운 리버젼을 포함한 워크파일로 간주합니다. ci (은)는 워크파일의 내용을 대응한 RCS 파일에 격납합니다. 만약 워크파일만이 지정되었다면, ci (은)는 서브 디렉토리 RCS, 다음에 워크파일이 있는 디렉토리의 순서에 대응하는 RCS 파일을 검색합니다. 자세한 것은 후술의 파일명 규칙 의 항을 참조해 주세요.

ci 하지만 동작하려면 , ci (을)를 기동한 유저가 RCS 파일의 액세스 리스트 에 등록되어 있는지, 액세스 리스트가 하늘인지, 유저가 RCS 파일의 소유자인지, 혹은 슈퍼 유저일 필요가 있습니다. 벌써 존재하는 가지 (branch)에 새로운 리버젼을 추가하려면 , 가지의 첨단 (tip) 리버젼이, 추가하려고 하는 유저에 의해 락되어 있지 않으면 안됩니다. 락되어 있지 않은 경우, 새로운 가지만 작성 가능합니다. 비엄격 모드 ( rcs(1) 참조)의 경우, 파일의 소유자에 대해서는 이 제한은 없습니다. 타인이 가고 있는 락은, rcs 명령에 의해 해제할 수 있습니다.

-f 옵션이 지정되어 있지 않으면, ci (은)는 추가하려고 하는 리버젼과 직전의 리버젼이라는 비교를 실시합니다. 차이가 없었던 경우, 새로운 리버젼을 작성하는 대신에, 워크파일을 원래의 리버젼의 것에 복원합니다. 복원할 때는, ci 들어간 워크파일을 삭제해, 락을 해제합니다. ci -l (은)는 잠그어, ci -u (은)는 락을 해제합니다. 이러한 옵션이 지정되어 있으면, 마치 직전의 리버젼에 대해서 co -l 또는 co -u (을)를 실행했는지와 같이 해 직전의 리버젼의 내용을 꺼냅니다. 복원을 하는 경우, -n (와)과 -s 옵션은 복원되는 리버젼에 대해서 작용합니다.

리버젼을 격납할 경우에, ci (은)는 로그 메세지의 입력을 재촉하는 prompt를 표시합니다. 로그 메세지는, 그 리버젼의 변경점의 요약입니다. 파일 종단 (EOF) 혹은, 피리어드 . 만으로부터 되는 행에 의해 입력을 완료시킵니다. 복수의 파일이 등록되는 경우, ci (은)는 전에 입력한 로그 메세지를 재이용하는지 어떤지를 (들)물어 옵니다. 만약 표준 입력이 단말이 아니면, ci (은)는 확인을 실시하지 않고, 등록되는 모든 파일에 대해서 같은 로그 메세지를 사용합니다. -m 옵션의 항도 참조해 주세요.

만약 RCS 파일이 존재하지 않으면, ci (은)는 신규에 RCS 파일을 작성해, 워크파일의 내용을 초기 리버젼 (디폴트에서는 1.1) (으)로서 격납합니다. 그 경우, 액세스 리스트는 하늘에 초기화됩니다. 초기 리버젼을 격납할 때는, 로그 메세지의 대신에 파일의 내용을 기술한 텍스트를 입력합니다 (후술의 -t 옵션의 항을 참조해 주세요).

등록하는 리버젼 번호 ( rev ) (은)는, -f, -i, -I, -j, -k, -l, -M, -q, -r, -u 의 옵션 중 어느쪽이든으로 지정할 수가 있습니다. rev (은)는 심볼, 수치, 혹은 양자가 조합한 것입니다. rev 그리고 사용하는 심볼명은 정의가 끝난 상태가 아니면 안됩니다; 체크인시에 심볼명을 할당하는 방법에 대해서는 -n 및 -N (을)를 참조해 주세요. 만약 rev 하지만 $ (이)라면, ci (은)는 워크파일중의 키워드로부터 리버젼 번호를 결정합니다.

만약 rev 하지만 피리어드로부터 시작되는 경우, 디폴트의 가지 (통상은 간 (trunk))에 격납됩니다. 만약 rev 하지만 가지 번호에 이어 피리어드인 경우, 해당가지의 최신의 리버젼이 사용됩니다.

rev 하지만 리버젼 번호의 경우, 그것은 등록하는 가지 속에서 가장 큰 값일 필요가 있습니다. 아주 없으면, 새로운 가지를 작성할 필요가 있습니다.

rev 하지만 리버젼 번호는 아니고 가지 번호의 경우, 그 가지에 대한 새로운 리버젼이 작성됩니다. 새로운 리버젼 번호는, 그 가지의 첨단 리버젼 번호에 1 을 더한 것이 됩니다. 만약 rev 하지만 존재하지 않는 가지 번호라면, 새로운 가지가 작성되어 초기 리버젼으로서 rev.1 하지만 작성됩니다.

rev 하지만 생략 되었을 경우, ci (은)는 유저가 간 마지막 락으로부터 리버젼 번호를 결정합니다. 유저가 있는 가지의 첨단 리버젼을 잠그고 있는 경우는, 새로운 리버젼이 그 가지에 추가됩니다. 새로운 리버젼 번호는 첨단 리버젼 번호에 1 을 더한 것이 됩니다. 유저가 첨단이 아닌 리버젼을 잠그고 있는 경우는, 새로운 가지가 작성됩니다. 새로운 가지 번호는, 락 대상의 리버젼의 가장 큰 가지 번호에 1 을 더한 것이 됩니다. 디폴트에서는, 새로운 가지나 리버젼의 번호는 1 됩니다.

rev 하지만 생략 되어 유저가 락을 실시하지 않고, 그 파일의 소유자이며, 한편 락이 비엄격 모드 이다면, 디폴트의 가지 (통상은 간 (trunk); rcs(1) 의 -b 옵션의 항을 참조)에 새로운 리버젼이 작성됩니다.

예외: 간 (trunk)에 대해 리버젼을 추가할 수 있습니다만, 도중에 삽입할 수 없습니다.

옵션

-rrev
    리버젼 rev (을)를 체크인 합니다.

-r  -r 옵션을 리버젼 빼고 사용했을 경우, ci 에 있어 특별한 의미가 있습니다. 다른 RCS 명령에서는 -r 옵션을 단체로 사용하면(자) 디폴트가지의 최신의 리버젼을 지정합니다. 그러나, ci 그럼 락 해제, 워크파일 삭제를 실시해, 쉘의 앨리어스(alias)나 스크립트에 의해 디폴트로 여겨져 버렸다 -l (이)나 -u 옵션의 효과를 지웁니다.

-l[rev]
    -r (와)과 같은 동작을 실시한 뒤, co -l (와)과 같은 동작도 실시합니다. 즉, 등록된 리버젼은 즉석에서 락 되어 체크아웃 됩니다. 이것은, 리버젼을 체크인 해 한층 더 편집을 계속하고 싶은 경우에 편리합니다.

-u[rev]
    -l (와)과 거의 같은 동작을 합니다만, 등록된 리버젼은 락 되지 않습니다. 이것은, 체크인 한 리버젼의 내용을 곧바로 참조하고 싶은 경우에 편리합니다.

    -l , 리버젼 없음 -r, -u 옵션은, 마지막에 지정했지만 보고가 효력을 가집니다. 예를 들어, ci -u -r 하 ci -r (와)과 등가입니다. 리버젼 없음 -r 하지만 -u 에 우선하기 때문입니다.

-f[rev]
    강제적으로 등록합니다. 직전의 리버젼과의 차이가 없는 경우에도, 새로운 리버젼으로서 등록합니다.

-k[rev]
    리버젼 번호등을 로컬에 산출하지 않고 , 워크파일로부터 키워드를 찾아, 리버젼 번호, 작성 일시, 상태, 저자 ( co(1) (을)를 참조)를 검색해, 등록되는 리버젼에 할당합니다. 게다가 ci (을)를 기동한 유저명과 실제로 체크인 된 일자를 포함한다 디폴트의 로그 메세지를 작성합니다. 본옵션은, 배포된 소프트웨어를 등록하는데 편리합니다. 복수의 사이트에 배포된 리버젼은, 원래의 리버젼 번호, 작성 일자, 상태, 저자를 보존하기 위해서, -k 옵션을 사용해 등록해야 합니다. 워크파일의 키워드로부터 꺼낸 값과 로그 메세지는, -d, -m, -s, -w (이)나, 다른 리버젼 번호를 생성하는 것 같은 옵션에 의해 변경할 수가 있습니다.

-q[rev]
    침묵 모드입니다. 진단 메세지를 표시하지 않습니다. 직전의 리버젼으로부터 변경이 없는 경우, -f 옵션을 지정하고 있지 않으면, 등록을 실시하지 않습니다.

-i[rev]
    최초의 체크인; RCS 파일이 이미 있을 때에는 에러 보고합니다. 특정의 어플리케이션의 레이스 상태를 피합니다.

-j[rev]
    초기화를 실시하지 않고, 체크인 합니다; RCS 파일이 없으면 에러 보고합니다.

-I[rev]
    대화 모드로 동작합니다. 비록 표준 입력이 단말이 아니어도, 유저에 대해서 문의를 실시합니다.

-d[date]
    체크인 일자로서 지정되었다 date (을)를 이용합니다. date 하 co(1) 그리고 기술된 자유형식에서 지정할 수가 있습니다. 이것은, 체크인 일시를 속이고 싶은 경우나, 일자 키워드가 워크파일에 없음에도 불구하고 -k 옵션을 사용하고 싶은 경우에 편리합니다. date 하지만 지정되지 않았던 경우, 워크파일의 최종 갱신 일자가 이용됩니다.

-M[rev]
    작성되는 워크파일의 최종 갱신 일자를, 꺼내진 리버젼의 일자로 합니다. 예를 들어, ci -d -M -u f (은)는, f 의 내용이 키워드 치환에 의해 변경되었을 경우도 최종 갱신 일시를 변경하지 않습니다. 본옵션을 지정하면(자) make(1) 에 영향을 주므로, 주의해 사용할 필요가 있습니다.

-mmsg
    체크인 하는 모든 리버젼의 로그 메세지로서 msg (을)를 이용합니다. 관습적으로 # 그리고 시작되는 로그 메세지는 코멘트이며, GNU Emacs 의 vc 패키지와 같은 프로그램은 이것을 무시합니다. 또, {clumpname} (의 후에 공백이 계속된다) 로그 메세지는 가능하면 정리하는 것을 의미합니다. 그것은 비록 다른 파일에 관련 지을 수 있고 있어도입니다; {clumpname} label는, 정리하는 목적에서만 사용됩니다. 그것 자신은 로그 메세지이다고는 보여지지 않습니다.

-nname
    체크인 한 리버젼에 상징적명 name (을)를 붙입니다. 만약 같은 상징적명이 다른 리버젼에 할당할 수 있고 있었을 경우, ci (은)는 에러 메세지를 출력합니다.

-Nname
    -n (와)과 같은 동작을 실시합니다. 다만, 같은 상징적명이 다른 리버젼에 할당할 수 있고 있었을 경우는, 재할인 맞히고를 실시합니다 (이쪽을 우선합니다).

-sstate
    체크인 되는 리버젼 상태를 state (으)로 합니다. 디폴트는 Exp (Experimental: 실험적)입니다.

-tfile
    RCS 파일중의 내용 기술 텍스트를 파일 file 의 내용으로 옮겨놓습니다. 벌써 내용 기술 텍스트가 있는 경우는 이것을 삭제합니다. 파일명 file 하 - 그리고 시작되어서는 안됩니다.

-t-string
    RCS 파일중의 내용 기술 텍스트를 캐릭터 라인 string 그리고 옮겨놓습니다. 벌써 내용 기술 텍스트가 있는 경우는 삭제됩니다.

    -t 옵션은, 어느 쪽의 형식에서 사용하는 경우도, 최초의 체크인시 밖에 의미를 가지지 않습니다. 그 이외의 경우는 단지 무시됩니다.

    최초의 체크인시에 -t 옵션이 지정되지 않았던 경우, ci (은)는 표준 입력으로부터 내용 기술 텍스트를 읽어들입니다. 텍스트는, 파일 종단 (EOF) 혹은 피리어드 ( . )만의 행으로 종료합니다. 유저에게로의 문의가 가능한 경우에는, 텍스트의 입력을 재촉하는 prompt가 표시됩니다 ( -I 옵션 참조).

    구버젼과의 호환성이기 때문에, 인수가 없다 -t 옵션은 무시됩니다.

-T  새로운 리버젼이 존재해, RCS 파일의 수정 시각이 새로운 리버젼의 시각보다 낡으면, RCS 파일의 수정 시각에 대해서 새로운 리버젼의 시각을 대입합니다; 그렇지 않은 경우는 RCS 파일의 수정 시각은 유지됩니다. 리버젼을 잠그었을 경우는, ci (은)는 통상 RCS 파일의 수정 시각을 현재의 시각으로 설정합니다. 왜냐하면 락이 RCS 파일에 격납되어 락의 삭제는 RCS 파일의 변경을 필요로 하기 때문입니다. RCS 파일이 워크파일보다 새로워지는 방법으로서 2 방법 있습니다: 우선, ci -M (은)는 현재 시각 이전의 일자로 워크파일을 작성합니다; 2 번째에, 직전의 버젼을 회복할 때, 워크파일을 변경하지 않는 경우에도 RCS 파일은 변경될 수 있습니다. RCS 파일의 워크파일에 있어서의 make(1) 의존에 의해, 상기 2 케이스는 과잉의 재컴파일이라고 하는 결과가 될 수 있습니다. -T 옵션을 사용하는 것으로, RCS 파일의 일자를 속여, 재컴파일을 금지합니다. 이 옵션은 주의해 사용해 주세요; 어느 워크파일의 체크인이, 같은 RCS 파일에 관련 지을 수 있고 있는 다른 워크파일에 영향을 미쳐야 한다 때라도, 재컴파일을 억제 할 수 있습니다. 예를 들면, RCS 파일의 시각을 01:00, (변경된) 워크파일의 시각을 02:00, 다른 워크파일의 카피의 시각을 03:00, 현재의 시각을 04:00 로 합니다. 여기서, ci -d -T (으)로 하면(자), RCS 파일의 시각은 통상의 것 04:00 은 아니게 02:00 가 됩니다; 이 결과, make(1) (은)는 다른 카피가 RCS 파일보다 새롭다고 (잘못해) 인식합니다.

-wlogin
    지정되었다 login (을)를 리버젼의 저자로서 등록합니다. 저자명을 속이고 싶은 경우나, 저자 키워드가 워크파일에 없음에도 불구하고 -k 옵션을 사용하고 싶은 경우에 편리합니다.

-V  RCS 의 리버젼 번호를 표시합니다.

-Vn RCS 시스템의 버젼 n 의 에뮬레이션을 실시합니다. 자세한 것은 co(1) (을)를 참조해 주세요.

-xsuffixes
    RCS 파일의 확장자(extension)를 지정합니다. 확장자(extension)가 하늘이 아닌 경우, 확장자(extension)까지 포함한 모든 패스명을 RCS 파일명이라고 간주합니다. 확장자(extension)가 하늘의 경우는, RCS/path 또는 path1/RCS/path2 형식의 것을 RCS 파일명이라고 간주합니다. 본옵션의 경우, / 그리고 단락짓는 것으로, 복수의 확장자(extension)를 지정할 수 있습니다. 예를 들어, -x, v/ (은)는, , v (와)과 하늘의 확장자(extension)의 2 개의 확장자(extension)를 가지는 RCS 파일을 지정합니다. 복수의 확장자(extension)가 지정되었을 경우, 지정된 순서에 RCS 파일을 검색합니다. 최초로 발견된 사픽스가 RCS 파일에 대해서 이용됩니다. RCS 파일을 생성할 수 있지만, RCS 파일이 발견되지 않을 때는, 이러한 사픽스를 새로운 파일명에 대해서 이용합니다. 디폴트의 확장자(extension)는, 인스톨 되는 환경에 의해 다릅니다. UNIX 와 같은 콤마를 파일명중에 포함할 수가 있는 계산기에서는, 통상 -x, v/ 하지만, 그 이외의 계산기에서는 하늘의 확장자(extension)가 이용됩니다.

-zzone
    키워드 치환에서의 일자의 출력 서식의 지정을 실시해, 또, -ddate 옵션에서의 date 의 디폴트의 타임 존의 지정을 실시합니다. zone (은)는, 생략 하는 일도, UTC 로부터의 수치차이로 지정하는 일도, 특별한 캐릭터 라인 LT (을)를 사용해 로컬 시간에 지정하는 일도 할 수 있습니다. 디폴트에서는 zone (은)는 하늘이며, 이 경우는 전통적인 RCS 포맷, 즉 타임 존 없음의 UTC 이며 일자를 slash로 단락짓습니다; 그렇지 않은 경우는 시각은 타임 존부의 ISO 8601 포맷입니다. 예를 들면, 로컬 타임이 1990 년 1 월 11 일 태평양 표준시간 (UTC 의 8 시간서) 오후 8 시의 경우, 시간의 출력은 다음과 같이 됩니다:

        옵션시각의 출력
        -z	1990/01/12 04:00:00	(디폴트)
        -zLT	1990-01-11 20:00:00-08
        -z+05:30	1990-01-12 09:30:00+05:30

    -z 옵션은 RCS 파일에 격납되고 있는 일자 (항상 UTC 입니다) 에는 영향을 주지 않습니다.

파일명 규칙
RCS 파일과 워크파일의 편성은 3 방법의 방법으로 지정할 수가 있습니다 (사용 예의 항목도 참조해 주세요).

1) RCS 파일과 워크파일의 양쪽 모두를 지정한다. RCS 파일의 패스명은 path1/workfileX 형식, 워크파일의 패스명은 path2/workfile 형식을 취합니다. 이 경우의 path1/ (와)과 path2/ (은)는 패스 (다른 패스나, 하늘에서도 가능)를 나타내, workfile (은)는 파일명, X (은)는 RCS 파일의 확장자(extension)입니다. 만약 X 하지만 하늘이라면, path1/ 하 RCS/ 그리고 시작되는지, /RCS/ (을)를 포함하지 않으면 되지 않습니다.

2) RCS 파일만을 지정한다. 워크파일이 커런트 디렉토리에 작성되어 RCS 파일명으로부터 path1/ (와)과 확장자(extension) X (을)를 없앤 파일명이 됩니다.

3) 워크파일만을 지정한다. ci (은)는 우선, 각 RCS 확장자(extension) X 에 대해서, path2/RCS/workfileX 형식의 이름으로 검색을 실시합니다. 게다가(만약 이것이 발견되지 않고, X 하지만 하늘이 아니면, ) path2/workfileX (을)를 검색합니다.

1) 또는 2) 방법으로 RCS 파일이 지정되어 있지 않은 경우, ci (은)는 우선 디렉토리 . /RCS (을)를 검색해, 다음에 커런트 디렉토리를 검색합니다.

비정상으로보다 RCS 파일의 오픈에 실패하면(자), ci (은)는 에러 보고합니다. 그 밖에 RCS 파일의 패스명의 후보가 있어도입니다. 예를 들어 디렉토리 d 그리고 RCS 명령을 이용할 수 없게 하려면 , d/RCS 되는 이름의 통상 파일을 작성해 둡니다. 그러자(면), RCS 명령은 d/RCS (을)를 디렉토리로서 오픈하려고 합니다만, 디렉토리는 아니기 때문에 오픈하지 못하고 실패합니다.

사용예
RCS 확장자(extension)가 , v , 커런트 디렉토리에는 RCS 파일을 포함한다 RCS 그렇다고 하는 서브 디렉토리가 있어, io.c, v (이)가 있으면(자) 가정합니다. 여기서, 이하에 나타낸 명령을 실행하면(자), 모두 커런트 디렉토리에 있다 io.c (을)를 RCS/io.c, v 에 체크인 해, io.c (을)를 삭제합니다.

    ci  io.c;    ci  RCS/io.c, v;   ci  io.c, v;
    ci  io.c  RCS/io.c, v;    ci  io.c  io.c, v;
    ci  RCS/io.c, v  io.c;    ci  io.c, v  io.c;

RCS 확장자(extension)가 하늘, 커런트 디렉토리에는 RCS 파일을 포함한다 RCS 그렇다고 하는 서브 디렉토리가 있어, io.c (이)가 있으면(자) 가정합니다. 여기서 이하에 나타내는 명령은, 모두 새롭다 리버젼의 체크인을 실시합니다.

    ci  io.c;    ci  RCS/io.c;
    ci  io.c  RCS/io.c;
    ci  RCS/io.c  io.c;

파일 모드
ci 하지만 작성한 RCS 파일은, 워크파일의 읽기와 실행의 허가 속성을 계승합니다. 벌써 RCS 파일이 존재하면, ci (은)는 그 읽기와 실행의 허가 속성을 보관 유지합니다. ci (은)는, 항상 RCS 파일의 기입 허가 속성을 불허가로 합니다.

관련 파일
몇개의 일시파일이, 워크파일의 존재하는 디렉토리 또는 일시 디렉토리 (환경 변수의 항의 TMPDIR 참조)에 작성됩니다. semaphore 파일등의 파일이 RCS 파일이 존재하는 디렉토리에 작성됩니다. 하늘이 아닌 확장자(extension)를 이용하고 있는 경우, semaphore 파일명의 선두 캐릭터에는, 확장자(extension)의 선두 캐릭터와 같은 캐릭터가 이용됩니다; 따라서, 확장자(extension)로서 워크파일의 확장자(extension)의 선두 캐릭터와 같은 캐릭터를 지정하지 않게 주의해 주세요. 하늘의 확장자(extension)를 지정해 있는 경우, semaphore 파일명의 마지막 캐릭터가 언더스코어 ( _ )됩니다.

ci (은)는, RCS 파일이나 워크파일을 변경하지 않습니다. 통상 ci (은)는 그러한 파일을 안린크 해, 새로운 파일을 작성합니다; 다만, RCS 파일에의 기호 연결의 쇠사슬을 망가뜨리는 대신에, 목적의 파일을 안린크 합니다. 따라서, ci (은)는 변경되는 워크파일에의 하드 링크, 기호 연결을 모두 부숩니다; 게다가 RCS 파일에의 하드 링크는 무효가 되어, 기호 연결은 보존됩니다.

실효 유저는, RCS 파일을 포함한 디렉토리의 검색 및 기입해 권을 가지고 있지 않으면 안됩니다. 통상열매 유저는, RCS 파일과 워크파일의 읽기 허가와 그것들을 포함한 디렉토리의 검색 및 기입해 권을 가지고 있지 않으면 안됩니다. 그러나, 낡은 계산기 속에는 열매 유저와 실효 유저의 사이를 용이하게 왕래할 수가 없는 것도 있습니다. 이러한 계산기에서는, 실효 유저만이 이용됩니다. ci (이)나 co 의 카피에 setuid 가 설정되어 있지 않으면, 열매 유저와 실효 유저는 동일합니다. 차절로 설명하도록(듯이), 만약 실효 유저가 전 RCS 파일과 그것을 포함한 디렉토리를 소유해, 실효 유저만이 RCS 디렉토리에 기입할 수 있도록(듯이) 설정할 수 있다면, RCS 파일의 보안를 강화하는 것이 가능합니다.

유저는 RCS 파일을 포함한 디렉토리의 허가 속성을 변경하는 것으로, RCS 파일에 대한 액세스를 제한할 수 있습니다; 그 디렉토리에 기입해 권이 있는 유저만이, RCS 파일을 변경하는 RCS 명령을 사용할 수가 있습니다. 예를 들어, 유저가 복수의 그룹에 속할 수가 있는 계산기에서는, RCS 디렉토리를 있는 그룹만이 기입권을 가지도록(듯이) 설정합니다. 이것은, 약식의 프로젝트로는 충분합니다만, 그룹에 소속하는 유저가 자유롭게 RCS 파일을 변경할 수가 있어 RCS 파일 모든 것을 삭제할 수도 있습니다. 그 때문에, 정식적 프로젝트에서는, RCS 파일을 자유롭게 조작 오는 RCS 관리자와 새로운 리버젼을 체크인 하는 것 이외의 조작은 할 수 없는 다른 유저를, 구별하는 일이 있습니다.

SETUID 의 사용
RCS 관리자 이외의 유저가 리버젼을 삭제할 수 없게 하려면 , 이하와 같이 setuid 특권을 사용할 수가 있습니다.

•   그 계산기로 RCS 에서 setuid 를 사용할 수 있는지 확인합니다. 의문이 있을 때는, 신뢰할 수 있는 전문가에게 의견을 들어 주세요. 가장 좋은 것은, seteuid() 시스템 콜이 Posix 1003.1a Draft 5 에 기술되고 있도록(듯이) 동작하는 것입니다. 왜냐하면, 열매 유저가 root
    에서 만나도, RCS    는 열매 유저와 실효 유저를 간단하게 바꿀 수가 있기 때문입니다.
    그 다음에 좋은 것은, setuid() 시스템 콜이 saved setuid (Posix 1003.1-1990의 {_POSIX_SAVED_IDS} 의 동작)(을)를 서포트하고 있는 경우입니다; 이 경우, 열매 유저 혹은 실효 유저가 root 일 때 마셔 실패합니다. RCS 는 setuid 에 실패하면(자), 즉시 종료합니다.

•   유저 그룹의 RCS 관리자로서 유저 A (을)를 선택합니다. A 만이, RCS 파일에 대해서 rcs 명령을 실행할 수가 있습니다. A 하 root (이)나, 특권을 가진 유저여서는 안됩니다. 서로 다른 유저 그룹에는, 다른 관리자를 사용해야 합니다.

•   유저가 실행하는 파일의 디렉토리에, 패스명 B (을)를 선택합니다.

•   이하와 같이, 통상의 인스톨 디렉토리 D (으)로부터, ci (와)과 co (을)를 B 에 카피해, A 에 setuid 합니다:

    mkdir  B
    cp  D/c[io]  B
    chmod  go-w, u+s  B/c[io]

•   이하와 같이, 각 유저 패스에 B (을)를 더합니다:

    PATH=B:$PATH;  export  PATH  # ordinary shell
    set  path=(B  $path)   # C shell

•   이하와 같이, A 만이 기입 허가를 가지는 RCS 디렉토리 R (을)를 작성합니다:

    mkdir  R
    chmod  go-w  R

•   특정의 유저인 만큼 RCS 파일의 읽기를 허가하고 싶은 경우, 그 유저를 유저 그룹 G 에 넣어, 한층 더 A 하지만 이하와 같이, RCS 디렉토리를 보호합니다:

    chgrp  G  R
    chmod  g-w, o-rwx  R

•   (존재하면) 낡은 RCS 파일을 R 에 카피해, A 하지만 소유인 것을 프로텍션합니다.

•   RCS 파일의 액세스 리스트는, 리버젼을 체크인 및 잠글 수 있는 유저를 제한합니다. 디폴트의 액세스 리스트는 하늘에서, RCS 파일을 읽을 수 있는 모든 유저에게, 등록의 권한을 줍니다. 체크인을 제한하고 싶은 경우는, A 하지만 그 파일에 대해서 rcs -a (을)를 실행합니다; rcs(1) (을)를 참조해 주세요. 특히 rcs -e -aA (은)는, A 인 만큼 액세스를 제한합니다.

•   처음으로 체크인을 실시하기 전에, A 하 rcs -i 에 의해 새로운 RCS 파일을 초기화합니다. 체크인을 제한하고 싶은 경우, -a 옵션을 덧붙입니다.

•   setuid 특권은, ci, co, rcsclean 에만 줍니다; rcs (이)나 다른 명령에, setuid 특권을 주어 되지 않습니다.

•   RCS 명령에 대해서, 다른 setuid 커멘드를 실행하지 말아 주세요. setuid 는 당신이 생각하는 것보다 취급하기 어려운 것입니다.

환경 변수

RCSINIT
    본변수에 공백에서 단락지은 옵션을 설정하는 것으로, 명령행 인수에 앞서 처리됩니다. 공백은 backslash에 의해 이스케이프 할 수가 있습니다. RCSINIT (은)는 대부분의 RCS 명령로 참조됩니다. 특히 -q, -V, -x, -z 옵션을 지정해 두면(자) 편리합니다.

TMPDIR
    일시 디렉토리명을 지정합니다. 설정되어 있지 않은 경우는, 환경 변수 TMP (와)과 TEMP (을)를 조사해 초에 발견된 값을 이용합니다; 어느 것도 설정되어 있지 않은 경우는, 계산기 의존의 디폴트의 디렉토리 (대부분은 /tmp )(을)를 사용합니다.

진단
각 리버젼에 대해서, ci (은)는 RCS 파일명, 워크파일명, 추가하는 리버젼 번호, 직전의 리버젼 번호를 표시합니다. 모든 처리가 성공했을 경우만, 종료 스테이터스가 0 이 됩니다.

저자
Author: Walter F. Tichy.
Manual Page Revision: ; Release Date: .
Copyright © 1982, 1988, 1989 Walter F. Tichy.
Copyright © 1990, 1991, 1992, 1993, 1994, 1995 by Paul Eggert.

관련 항목
co(1), ident(1), make(1), rcs(1), rcsclean(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1), setuid(2), rcsfile(5)
Walter F. Tichy, RCS--A System for Version Control, Software--Practice & Experience 15, 7 (July 1985), 637-654.