|
HOME > Linux Tips ( 目次 ) > Linux コマンド 一覧表 > c > ci - コマンド (プログラム) の説明 ci - コマンド (プログラム) の説明 - Linux コマンド集 一覧表名称ci - RCS ファイルにリビジョンをチェックインする 書式ci [ options ] file ... 解説ci は r ファイルに新たなリビジョンを格納します。 引数のうち、r ファイルの拡張子形式に一致する ファイル名を r ファイルとみなします。 それ以外のファイル名は、新たなリビジョンを含んだワークファイルとみなします。 ci はワークファイルの内容を対応した r ファイルに格納します。 もしワークファイルのみが指定されたなら、 ci はサブディレクトリ r、次にワークファイルがあるディレクトリの順に 対応する r ファイルを検索します。 詳細は後述の "ファイル名規則" の項を参照してください。 ci が動作するには、 ci を起動したユーザが r ファイルのアクセスリスト に登録されているか、アクセスリストが空であるか、 ユーザが r ファイルの持ち主であるか、 あるいはスーパユーザである必要があります。 すでに存在する枝 (branch) に新しいリビジョンを追加するには、 枝の先端 (tip) リビジョンが、 追加しようとするユーザによってロックされていなければなりません。 ロックされていない場合、新たな枝のみ作成可能です。 非厳格モード ( rcs (1) 参照) の場合、 ファイルの所有者に対してはこの制限はありません。 他人が行っているロックは、 rcs コマンドによって解除できます。 -f オプションが指定されていなければ、 ci は追加しようとするリビジョンと直前のリビジョンとの比較を行います。 違いがなかった場合、新たなリビジョンを作成するかわりに、 ワークファイルを元のリビジョンのものに復元します。 復元するときには、ci はいったんワークファイルを削除し、 ロックを解除します。 "ci-l" はロックし、 "ci-u" はロックを解除します。 これらのオプションが指定されていれば、あたかも直前のリビジョンに対して "co-l" または "co-u" を実行したかのようにして直前のリビジョンの内容を取り出します。 復元が行われる場合、 -n と -s オプションは復元されるリビジョンに対して作用します。 リビジョンを格納するときに、 ci はログメッセージの入力を促すプロンプトを表示します。 ログメッセージは、そのリビジョンの変更点の要約です。 ファイル終端 (EOF) あるいは、 ピリオド . のみからなる行によって入力を完了させます。 複数のファイルが登録される場合、 ci は前に入力したログメッセージを 再利用するかどうかを聞いてきます。 もし標準入力が端末でなければ、 ci は確認を行わず、 登録されるすべてのファイルに対して同じログメッセージを使用します。 -m オプションの項も参照してください。 もし r ファイルが存在しなければ、 ci は新規に r ファイルを作成し、 ワークファイルの内容を初期リビジョン (デフォルトでは 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) においてリビジョンを追加することはできますが、 途中に挿入することはできません。 オプション
ファイル名規則r ファイルとワークファイルの組み合わせは 3 通りの方法で指定することができます (使用例の項目も参照してください)。 1) r ファイルとワークファイルの両方を指定する。 r ファイルのパス名は path1 / workfileX 形式、ワークファイルのパス名は path2 / workfile 形式をとります。この場合の path1 / と path2 / はパス (異なるパスや、空でも可) を示し、 workfile はファイル名、 X は r ファイルの拡張子です。もし X が空なら、 path1 / は RCS/ で始まるか、 /RCS/ を含まねばなりません。 2) r ファイルのみを指定する。 ワークファイルがカレントディレクトリに作成され、r ファイル名から path1 / と拡張子 X を取り除いたファイル名になります。 3) ワークファイルのみを指定する。 ci はまず、各 r 拡張子 X に対して、 path2 /RCS/ workfileX 形式の名前で検索を行います。 さらに、(もしこれが見つからず、 X が空でなければ、) path2 / workfileX を検索します。 1) または 2) の方法で r ファイルが指定されていない場合、 ci はまずディレクトリ ./RCS を検索し、次にカレントディレクトリを検索します。 異常により r ファイルのオープンに失敗すると、 ci はエラー報告します。 他に r ファイルのパス名の候補があってもです。 たとえばディレクトリ d で r コマンドを利用できないようにするには、 d /RCS なる名前の通常ファイルを作成しておきます。 すると、r コマンドは d /RCS をディレクトリとしてオープンしようとしますが、 ディレクトリではないのでオープンすることができず失敗します。 使用例r 拡張子が ,v 、カレントディレクトリには r ファイルを含む 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; r 拡張子が空、カレントディレクトリには r ファイルを含む RCS というサブディレクトリがあり、 io.c があると仮定します。ここで以下に示すコマンドは、どれも新しい リビジョンのチェックインを行います。 ci io.c; ci RCS/io.c; ci io.c RCS/io.c; ci RCS/io.c io.c; ファイルモードci が作成した r ファイルは、 ワークファイルの読み込みと実行の許可属性を受け継ぎます。 すでに r ファイルが存在すれば、 ci はその読み込みと実行の許可属性を保持します。 ci は、つねに r ファイルの書き込み許可属性を不許可にします。 関連ファイルいくつかの一時ファイルが、ワークファイルの存在するディレクトリまたは 一時ディレクトリ (環境変数の項の -1TMPDIR0 参照) に作成されます。 セマフォファイル等のファイルが r ファイルが存在するディレクトリに作成されます。 空ではない拡張子を用いている場合、 セマフォファイル名の先頭文字には、 拡張子の先頭文字と同じ文字が用いられます; よって、拡張子として、ワークファイルの拡張子の先頭文字と同じ文字を 指定しないように注意してください。 空の拡張子を指定している場合、 セマフォファイル名の最後の文字がアンダスコア ( _ ) となります。 ci は、 r ファイルやワークファイルを変更しません。通常 ci はそれらのファイルをアンリンクし、新しいファイルを作成します; ただし、r ファイルへのシンボリックリンクの鎖を壊す代わりに、 目的のファイルをアンリンクします。 よって、 ci は変更されるワークファイルへの ハードリンク、シンボリックリンクを全て壊します; さらに、r ファイルへのハードリンクは無効となり、 シンボリックリンクは保存されます。 実効ユーザは、r ファイルを含むディレクトリの 検索および書き込み権を持っていなければなりません。 通常実ユーザは、 r ファイルとワークファイルの読み込み許可と、 それらを含むディレクトリの検索および書き込み権を持っていなければなりません。 しかし、古い計算機のなかには実ユーザと実効ユーザの間を 容易に行き来することができないものもあります。 これらの計算機では、実効ユーザのみが利用されます。 ci や co のコピーに setuid が設定されていなければ、 実ユーザと実効ユーザは同一です。 次節で説明するように、 もし実効ユーザが全 r ファイルとそれを含むディレクトリを所有し、 実効ユーザのみが r ディレクトリに書き込めるように設定できるなら、 r ファイルのセキュリティを強化することが可能です。 ユーザは r ファイルを含むディレクトリの許可属性を変更することで、 r ファイルに対するアクセスを制限できます; そのディレクトリに書き込み権のあるユーザだけが、 r ファイルを変更する r コマンドを使用することができます。 たとえば、ユーザが複数のグループに属することが出来る計算機では、 r ディレクトリをあるグループのみが書き込み権を持つように設定します。 これは、略式のプロジェクトでは十分ですが、 グループに所属するユーザが自由に r ファイルを変更することができ、 r ファイルすべてを削除することもできます。 そのため、正式なプロジェクトでは、 r ファイルを自由に操作きる r 管理者と、 新たなリビジョンをチェックインすること以外の操作はできない他のユーザとを、 区別することがあります。 SETUID の使用
r 管理者以外のユーザがリビジョンを削除できないようにするには、
以下のように setuid 特権を使用することができます。
3mkdir 2B 3cp 2D3/c[io] 2B 3chmod go-w,u+s 2B3/c[io] 以下のように、各ユーザのパスに B を加えます: 3PATH=2B3:$PATH; export PATH # ordinary shell 3set path=(2B 3$path) # C shell 以下のように、 A だけが書き込み許可を持つ r ディレクトリ R を作成します: 3mkdir 2R 3chmod go-w 2R 特定のユーザだけに r ファイルの読み込みを許可したい場合、 そのユーザをユーザグループ G に入れて、さらに A が以下のように、r ディレクトリを保護します: 3chgrp 2G R 3chmod g-w,o-rwx 2R (存在すれば) 古い r ファイルを R にコピーし、 A が所有であることを保証します。 r ファイルのアクセスリストは、 リビジョンをチェックインおよびロックできるユーザを制限します。 デフォルトのアクセスリストは空で、 r ファイルを読むことのできる全てのユーザに、登録の権限を与えます。 チェックインを制限したい場合は、 A がそのファイルに対して "rcs-a" を実行します; rcs (1) を参照してください。 特に rcs-e-a A は、 A だけにアクセスを制限します。 初めてチェックインを行う前に、 A は "rcs-i" によって新しい r ファイルを初期化します。 チェックインを制限したい場合、 -a オプションを付け加えます。 setuid 特権は、 ci , co , rcsclean のみに与えます; rcs や他のコマンドに、setuid 特権を与えてはなりません。 r コマンドに対して、他の setuid コマンドを実行しないでください。 setuid はあなたが考えるより扱いにくいものです。 環境変数
診断各リビジョンに対して、 ci は r ファイル名、ワークファイル名、追加するリビジョン番号、直前の リビジョン番号を表示します。全ての処理が成功した場合のみ、 終了ステータスが 0 になります。 作者
Author: Walter F. Tichy.
関連項目
co(1),
ident(1), make(1), rcs(1), rcsclean(1), rcsdiff(1),
rcsintro(1), rcsmerge(1), rlog(1), setuid(2), rcsfile(5)
|
|