連載 / てくてく 26 eqnarray 環境の場合、それぞれの数式を区切る \ \ を境にして参照番号カ飲の番号に変わります。 ・ table 環境の \caption コマンド→表番号 table 環境の \ capt 土 0 Ⅱコマンドの引数に \label コマンドを指定すると、ラベルには表番号が割り当 てられます。 table 環境の \caption コマンドより後ろに指定さ れた \label コマンドに対しても、参照番号は表番 号になります。 ・ figure 環境の \caption コマンド→図番号 境の \caption コマンドの引数に \label コマンドを指定すると、ラベルには図番号が割り当 てられます。 表番号と同様に、 \caption コマンドより後ろに \label コマンドがあるとき、 figure 環境内であ れよ参照番号が図番号になります。 enumerate 環境→リストの項目番号 enumerate 環境のなかで \label コマンドを使う と、ラベルには項目番号が割り当てられます。 ・ \footnote コマンド→脚注番号 \footnote コマンドの引数のなかに \label コマ ンドを指定すると、ラベルには脚注番号が割り当て られます。 ・上記以外のテキスト中→章や節の番号 これら以外の場所で \label コマンドを使うと、そ のセクション番号を参照するようになります。 最初の例でも、セクション付けコマンドの引数のな かでなくても、コマンドの直後などに \label コマ ンドを指定すれば、セクション番号を参照すること はできたのでした。 細かい話になりますが、 figure 環境や table 環境 の \caption コマンドの月リ、 enumerate 環境の最 初の \item コマンドの月リに \label コマンドカ : あ れま、これも参照番号がセクション番号になります。 いままでこの連載で説明したことはありませんが、 \newtheorem というコマンドを使うと、番号管理をと もなう環境が定義できます。 \newtheorem コマンドで 作成した環境の内部で \label コマンドを使用したと きにも、その環境の番号になります。 UNIX MAGAZINE 1991.6 次の例では、 enumerate 環境のなかで \label コ マンドを使用し、項目番号を参照しています。これが 2 回目以降のい T の結果であることは、もう言わなく ても分かります牙 スポンジ・ケーキを上手につくるには \begin{enumerate} \item\label{en:flr} 小麦粉をよくふるう \item\label{en:egg} 卵か新鮮てある \item\label{en:wht} 卵白をしつかり泡立てる \item\label{en:msr} 計量をしつかリおこなう \end{enumerate} ことが大事てす。 \ref{en:wht} は、 卵黄が混ざってしまうとうまくいきません。 くいきません。 ことが大事です。 3 は、卵黄が混ざってしまうとうま 計量をしつかりおこなう 卵白をしつかり泡立てる 卵が新鮮である 小麦粉をよくふるう スポンジ・ケーキを上手につくるには 4. 3. 2. 1. 眠っているあいだに胃のなかに食物があると脂肪の 42 ペーシ 詳しくは 42 ページを参照してください 脂肪 \ label { ( fat , } の原因となリます。 眠っているあいだに胃のなかに食物があると 参照してください。 詳しくは \pageref{'fat'}R—シを を参照することができます。 えば、ラベルをブナたテキストが出力されたページ番号 \ref コマンドの代わりに \pageref コマンドを使 ペーシの参照 原因となります。 139
連載 / てくてく価び 26 \ref コマンドの位置には「 ? ? 」が出力されています ね。 I*TEX は定義されていないラベルがあると、この ような警告メッセージを画面に表示し、 \ref コマンド の位置に「 ? ? 」を出力します。 しかし nothing というラベルは、たしカこ定義した はずです。おかしいですねえ Rerun to get cross-references right 前回お話しした目次では、最初の I 'FfX で目次ファ イルを作成し、 2 度目のい TFfX で目次を出力するよう になっていました。 相互参照も同じように、最初の INIbX でラベルの 定義をおこない、 2 度目の I*TEX で \ref コマンド で参照した位置にラベルに対応する番号を出力します。 つまり、前回 IMbX を実行したときの結果にもとづし、 て、出力される参照番号が決まるナです。 ラベルと番号との対応を保持しているのは、 aux ファ イルです。最初のの実行時には \label コマ ンドで定義されているラベルをどんどん aux ファイル に書き込んでいきます。途中に \ref コマンドがある と、 "LaTex warning' を表示し、参照番号の代わり 「 ? ? 」を出力していきます。 2 度目の I ?X の実行時には、 aux ファイルの内容 をもとに \ref コマンドの位置に正しい参照番号を出力 してくれます。 もちろん 2 度目の T の実行中にも \label コ マンドは、ラベルと番号の対応を aux ファイルに書ぎ 込んでいきます。そのとき、前回にはなかったラベル が定義されていたり、前回と今回とで番号が変わって しまったラベルがあると、最後に次のような警告メッ セージを表示します。 LaTeX Warning : Labe1 (s) may have changed. Rerun tO get cross—references right この警告メッセージは、「どこかの相互参照の番号が 実際とは違っているかもしれません」と注意していま す。この警告メッセージが表示されたときには、同し 入力ファイルに対してもう 1 度獰 TEX を実行してくだ さい。 138 さきほどハ Tj さを実行したときにも、最後にこの警 告メッセージが表示されており、もう 1 度 I*TEX を 実行するように言っていましたれ もう 1 度 I 1 度目のハさの実行の最後の警告メッセージは、 新しいラベルが定義されたために表示されたのでしょ う。ということは、いまは「Ⅱ。 t 五土 ng 」という名前の ラベルが定義されて、 aux ファイルに登録されている 同じファイルにもう 1 度ハ TEX を実行します。 This is TeX, C Version 2 .99 (kame . tex Chapt er 1. [ 1 ] Chapter 2. [ 2 ] (kame . aux) Output vritten on kame. dvi ( 2 pages , Transcript vritten 0 Ⅱ kame ・ 10g. ほら、もう最初のような警告メッセージは表示され ないでしよう ? 出力にも、正しい番号が出力されます。 2.3 何も思いつかない日 今日は何も思いつかない日。空は青いし、気温も 暑すぎず、寒すぎず。 こはどこ ? 「こ一 は 2.3 節だよ」誰かが答えた。 参照てきる番号 I*TEX の相互参照では、セクション番号たけではな く、図表番号や enumerate 環境の番号なども扱うこ とができます。 ラベルにどの番号が割り当てられるカ寸よ、 \label コ マンドの指定位置によって決まります。 equation 環境→数式番号 equation 環境や eqnarray 環境など、数式番号カ : 出力される環境のな力に \label コマンドを指定す ると、ラベルには数式番号が割り当てられます。 UNIX MAGAZINE 1991.6
また、 passwd -s でも同しことができます。 % finger okayama Login name : okayama 、ゝルドを変更します。このフィールドは、ユーサーの個人情 報 ( フルネームや電話番号など ) を書いておくためのコメ ント用のフィールドですが、 finger コマンドでこれを見る ことができます。 chfn コマンドは、ノヾスワードファイルの gecos フィー / D irect ory : /home ln real life : Kiyohiko Okayama SheII : /bin/csh On since Apr 2 14 : 08 : 39 0 Ⅱ ttyp4 from neptune % chfn たとえば、引っ越しで部屋や内線番号が変わって自分の や部屋番号などを表示してくれるものもあります。 これは Sun での実行例ですが、はかの機種では電話番号 No PI 田 1. No unread mail 5 minutes 47 seconds ldle Time ゝ gecos フィールドを変更したい場合、 chfn コマンドを次 のように実行します ( 、、 passwd -f" でも同しことができ ます ) 。 Changing finger infomation for okayama 0 nadia. DefauIt values are printed inside 0f ' ロ ) To acc ept the def ault , type く return>. To have a blank entry , type the word 'none ) Name CKiyohik0 Okayama , G506 , 4827 ] : Kiyohik0 Okayama, G507 , 4828 なお、スーパーユーザーはこれらのコマンドを使って、 任意のユーザーのノヾスワード、ログインシェル、 gecos フ ィールドを書き換えることができます ( コマンドのあとに ューサー名 ( ログイン名 ) を指定します ) 。 バスワードに関する注意 皆さんは、自分のパスワードを忘れてしまった経験はあ りませんか ? パスワードとはちょっと違いますが、私は銀 行のキャッシュカードの暗証番号を忘れてしまったことが あります。 ある日、できたてのホヤホヤのカードを片手に銀行に出 かけたときのことです。カードを自動引出し機に突っ込み、 暗証番号と金額を打って待っこと数十秒。、、最初から手続き をやりなおせ〃のメッセージとともにカードと紙切れが出 てきました。読んでみると、なんと暗証番号が間違ってい るとのこと。あれ一、なんやったかなあと思いながらもう 1 度試してみましたが、それでも駄目です。ちょうど給料 日の直後で人が多く、後ろに並んでいる人たちの冷たい視 線に負けてしまい、あきらめて窓口で問い合わせることに 56 しました。、、しようがないわね〃といった感しのお姉さんに 番号を教えてもらったところ ( メモではなく、ちゃんと口頭 でした ) 、自分でも、、なんでこんなんつけたんやろ〃と思う はど凝った番号でした ( どんな番号かって ? それはひ・ み・つ ) 。 銀行の暗証番号と同しように、マシンのパスワードを忘 れてしまったときも自分ではどうすることもできません ( あなたがスーパーユーサーになれるなら別ですが ) 。っ いうときは、スーパーユーザーに頼んで書き換えてもらい ましよう。 ただし、このとき ( ューザーを登録したときも同様です が ) 、 /etc/passwd ファイルのパスワード・フィールドに何 も書かすにおいて、ユーサーにあとから passwd コマンド でパスワードを設定してもらうのはやめたほうが賢明です。 パスワード・フィールドに何も書かれていないとパスワー ドのチェックはおこなわれす、誰でもそのユーサーになり すましてマシンが使える危険な状態になるからです。なる べく仮のパスワードを設定し、その人だけにそっと教える ようにしましよう。 UNIX MAGAZINE 1991.6
インタ 才、 ッ トへの接続■ 図ー 地域ネットワーク ノードへ ローカル シリアル回線 t hernet セスは 1 , 200 ~ 9 , 600bps と低速だが、 Sun から直接ドラ イバの提供を受けることができる。しかし、いくっかの理 由から lnternet ヘアクセスするときには専用ルータを使 用したほうがよい ( 詳細は後述 ) 。 次のステップは、カリフォルニア州メンロバークの SRI にある Network lnformation Center (NIC) に IP ネッ トワーク番号を登録することである。この IP ネットワー ク番号は A 、 B 、 C の 3 つのクラスに分けることができる。 クラス A のアドレスでは、最初の 1 バイトがネットワーク 番号、続く 3 バイトがホストアドレスに割り当てられる。 このクラスでは、ネットワーク上で 1 , 677 万 7 , 213 までの ホストを扱うことができる。クラス B ではネットワーク番 号とホストアドレスにそれぞれ 2 バイトすつが割り当て られ、 65 , 533 までのホストが可能である。クラス C のアド レスでは、最初の 3 バイトがネットワーク番号、残りの 1 バイトがホストアドレスである。このクラスでは、 253 のホ ストが可能である。 よはどの大企業でもないかぎり、クラス A のアドレスは 考慮しなくてもよい。中堋莫の組織の大半ではクラス B の アドレス、小さな組織ではクラス C のアドレスが採用され る。自社のネットワーク上のマシンが 200 台以上になると 予想されるなら、クラス B の IP 番号を取得すべきである。 NIC は、クラス B の番号を得るのが適切と考えるだろう。 IP 番号の取得にあたっては、現在運用中のネットワーク E のホスト数と今後どの程度の増加が見込まれるかという点 を考慮すべきである。そのかわりに、クラス C の IP 番号を ネットワーク番号とドメイン登録 UNIX MAGAZINE 1991.6 連続して取得する方法もある。だが管理面から考えると、 クラス B の単一のネットワークを管理し、サプネットを使 うほうが簡単である。 未登録の IP 番号を使っている場合、登録された IP 番号 を使うには、すべてのホストでアドレスの変更が必要にな る。これは、 Sun から提供されたデフォルトの IP アドレス を使ってネットワークを構築した場合に考えられる 1 。 次に、ドメイン名を NIC に登録する。 2 つのドメインを 登録する必要がある。 1 つは (widget.com などの ) 普通の ドメインである。これは、後述する、、逆 IP アドレスドメイ ン (reverse IP address domain) クに対して forward domain とも呼はれる。このドメインは、各ホストに独自の 名前をつけるために使われる。ここでいう、、ドメイン名〃 とは、 NIS (Network lnformation Service) ドメイこと は無関係である点に注意しよう。残念ながら、これらは同 名ではあるが 2 つの別個のコンセプトである。トップレベ ルのドメイン名にはいくつかの選択肢がある。企業の場合、 もっとも一般的なのは c 。 m である。そのほかに、教育機関 であれは edu、政府機関は gov 、軍関連は mil などがあ る。登録されたドメインは、、、 antares ・ widget.com/ など のように各ホスト名に追加するかたちでつけられる。 もう 1 つは、逆 IP アドレスドメインである。たとえは、 あなたの組織のネットワーク番号が 139.18.0.0 である とすると、逆 IP アドレス・ドメインは 18.139. in-addr. arpa となる。一見して分かるように in-addr. arpa" が 追加され、ネットワーク番号が逆転している。このドメイ ンは、 IP アドレスと gethostbyaddr( ) ライプラリ・ルー チンに必要なホスト名を位置づけるために用いられる。 これらのドメインとともに ドメインのためのプライマ リ・ネームサーバーとして利用するホストを 1 つ決めなけ ればならない。さらに、セカンダリもしくは・備ネームサ ーを自分の組織とは分離し、別個に決める必要があ る。通常、これは地域ネットワークに接続するもう 1 台の マシンとなる。こうした措置を講しておけば、プライマリ・ サーバーに障害が生したり、ルータがダウンした際にホス ト名を参照するための冗長性が獲得できる。 この情報の登録には、 NIC から提供されるいくっかの書 類 (anonymous FTP で nic. ddn. mil から入手できる ) 1 訳注 : Sun に付属のインストーラを使い、 IP アドレスを何も指定せすにインス トールした場合を指す。この場合、 IP アドレスとして 192 . 9.200 が使われる。 73
UN Ⅸへの招待 # cd /usr/sys/conf # cp GENERIC SNOOPY # vi SNOOPY ←コンフィキュレーション・ファイルの編集 # mkdir /usr/sys/SNOOPY # /etc/config SNOOPY # cd /usr/sys/SNOOPY # make depend # make # mv /vmunix /vmunix. 01d cp vmunix /vmunix このあと、新たに作成したカーネルを立ち上げるため、 りますにれがシンポリックリンクが提供されるにいたっ ドがそれぞれのファイルシステムに存在していることにな ステム内で一意ですから、同し i ノード番号をもつ i ノー i ノード番号と呼びます。 i ノード番号は 1 つのファイルシ システム内で一意な番号がふられています。この番号を、 システムを作ったときにたくさん用意され、そのファイル 割り当てられることになっています。 i ノードは、ファイル よう。 UNIX では、 1 つのファイルには 1 つの i ノードが めの機能です。ここでは、その仕組みを簡単に説明しまし ル名を使って同しファイルにアクセスできるようにするた 前号でもすこし触れましたが、リンクとは異なるファイ クも可能です。 リのリンクも、異なるファイルシステムのファイルのリン もできません。一方シンポリックリンクでは、ディレクト 中のファイルをほかのファイルシステムにリンクすること トリのリンクはおこなえませんし、あるファイルシステム ァイルしかリンクできません。ハードリンクではディレク ードリンクでは、同しファイルシステム内の通常のフ 呼ぶ ) の 2 種類があります。 ードリンクとシンポリックリンク ( 、、ソフトリンク〃とも リンクについて説明します。リンクには、前号で紹介した リックリンクされています。ここでは、そのシンポリック さて、さきほど述べたように /sys は /usr/sys にシンポ シンポリックリンク ちんと読み、その記述にしたがって操作をおこなってくだ ネルを構築する場合には、提供されているマニュアルをき 個々にさまざまな改良を施しているようです。実際にカー 以上の操作については、 UNIX マシンの各メーカーが システムをリプートします。 158 た重要なポイントです ) 。 さて、ファイルを作ったディレクトリには、ファイル名 とそのファイルに割り当てられた i ノード番号のペアが登 録されています。 i ノードには、ファイルの種類、ファイル の保護モード、ファイルの所有者 / グルーフ。所有者、ファイ ルの時刻情報、ファイルの実体が格納されているディスク 上のプロックのアドレスなどの情報が収められています。 ューサーがあるファイル名を指定すると、カーネルはディ レクトリのなかからそのファイル名を検出し、ファイル名 とべアになっている i ノード番号をもとに、そのファイル に割り当てられた i ノードをアクセスします。 i ノードには ディスク上のプロックアドレスが入っていますから、その 情報をもとに実際のファイルの内容がアクセスされるわけ さて、 A というファイルを B というファイルにハー ンクしたとしましよう。 A には、 i ノード番号 10 の i ノー ドが割り当てられているとします。すると以下に示すよう に、 B が登録されたディレクトリには、 B という名前と A と同し i ノード番号の 10 番のペアが登録されます。 この結果、 A という名前でアクセスしても B という名前 でアクセスしても、いすれも i ノード番号 10 番の i ノード がアクセスされることになり、同しファイルの実体にいき つくことになるわけです。これが、ハードリンクです。ハ ードリンクで異なったファイルシステムのファイルをリン クできない理由は、こにあるのです。ファイルシステム には、それぞれ一意な i ノード番号をもつ i ノードが存在 していますが、ファイルシステムが異なれば、それは一意 なものとはいえなくなってしまいます。というのは、ファ イルシステム / usr にもファイルシステム / tmp にも 10 と いう番号の i ノードが存在しているからです。 10 B UNIX MAGAZINE 1991.6
単独のフリープロックがすべて記されていなければならな い。しかしスーパープロックは明らかに、ファイルシステ ム内のすべてのフリープロックのアドレスを保持できな い (NICFREE は通常 50 程度にすぎない ) 。フリーリスト に十分な容量を与えるには、リンクプロックと呼ばれるフ リー・データブロックにチェインされなければならない。 s ー free がいつばいのときにフリーになるプロックは、リン クプロックになる。 s ー free の内容は新しいリンクプロック の先頭に移され、 s-free を空にし、リンクプロックのアド レスが s ー free の最初の要素に置かれる。リンクプロック がない場合には、 s-freeC0] は 0 である。 フリーリストの代わりに、ビットマップをプロック割当 ての追跡に使用することもできる。この方法は、ファイル システムの一部 ( 通常は、 i ノードリストとデータブロック のあいだ ) をビットマップのために必要とする。記憶領域の オーバーヘッドは重要ではない ( 1 プロックにつき 1 ピッ トにすぎない ) 。しかし、プロックが割り当てられるときの ビットマップ・サーチにかかるオーバーヘッドは、あっさ り見過ごすわけにはいかない。問題は、フリープロック・ アドレスを i ノードの場合と同様にキャッシュすることに よって解決される。 ロ ファイルシステムへの直接アクセス デバイスは、 open 、 read 、 lseek などを用いて、通常の ファイルと同様にアクセスされる。ファイルシステムに直 接アクセスするには、デバイス・スペシャルファイル名が 必要である。共通デバイスの命名には厳格な規則が適用さ れる。 通常、ファイルシステムは固定されたディスク・パーテ イションに格納され、 c / の s んの形式のファイル名がえ られる ( / はコントローラ番号、ゾはコントローラ上のドラ イプ番号、んはドライプ上のパーティション番号 ) 。これら はすべて、 0 から始まる 1 桁の小文字の 16 進数である。コ ントローラ 0 のドライプ 0 である c0d はなくなり、 0s 々の 形式の名前が残っている。パーティション番号 0 は物理デ イスク全体を表す。これより、ルート・ファイルシステム のためのデバイス・スペシャルファイルは 0S1 になる。 ディスクデバイスには、プロック・スペシャルファイル とキャラクタ・スペシャルファイルがある。両者は同し名 UNIX MAGAZINE 1991.6 UNIX ファイルの復元■ 前だが、 / dev 下の別々のサプディレクトリに置かれる。プ ロック・スペシャルファイルは / dev / ホんに格納され、キ ャラクタ・スペシャルファイルは / dev / S んに格納され る。キャラクタ・デバイスドライバは raw デバイスドライ バとも呼ばれる。これは、キャラクタ・テンヾイスドライバ がバッファリングされていないためである。そこで、ディ レクトリ名が r 赤々なのである。 キャラクタ・テンヾイスドライバはバッファリングされて いないので、読取りと書込みは全プロックに対しておこな われなければならない。一方、プロック・テンヾイスドライ バはデータのバッファリングをおこなうので、プロセスが 一部のプロックにアクセスすることができる。また、対応 するキャラクタ・スペシャルファイルとプロック・スペシ ャルファイルは同しデバイスに結びつけられるので、どち らも同しメジャーデバイス番号とマイナーデバイス番号を もっことになる。 指定されたファイル・ディレクトリをそのファイルシス テムから読み取るには、ファイルシステムのデバイスファ イル名がなんらかの方法で得られなけれはならない。 stat システムコールは、ファイルシステムのデバイス id を提 供するので第 1 段階としてはよい。しかし、いかにしてこ れからファイル名を導くかがはっきりしない。この答は、 固定ディスクのマイナーデバイス番号がどのように作成さ れているかということにある。 SystemV/386 では、マイ ナーデバイス番号のピット 0 ~ 3 にパーティション番号が、 ピット 4 ~ 5 にドライプ番号が、そしてピット 6 ~ 7 にコ ントローラ番号が含まれている。ほかのシステムの方法も 似通っているが、これは明らかに可搬性がいちしるしく低 いと考えられる。このためデバイス id とファイル名の変換 は、次ページのリスト 1 に示した関数 devtonam および namtodev のなかにまとめられている。 前述したように、 bat はファイルシステムから i ノード を直接読み取ることによってのみ得られる。リスト 2 ( 113 ページ ) に getdinode 関数を示す。これは、 ここに小した 原理と技法を用いて、ファイルのパス名だけが与えられた マウント中のファイルシステムからディスク i ノードを読 み取るのに使う。このために getdinode 関数は、 statfs を 用いて論理プロックサイズを、 stat を用いてデバイス id と i ノード番号を取得し、 devtonam を用いてデバイス id をデバイスファイル名に変換する。 i ノードはプロックの 111
てくてく T X , こはどこ ? H : あれ ? 亀之助くん。 亀 : あ、はるみちゃん。 H : 今日も黒川にいたの ? 亀 : うん。 H : それなら、私のところに寄ってくれればよかった ない ? H : 時間があるなら、 INIbX の話の続きを聞いていか 亀 : そっか。 れているのよ。 H : ふふふ、今日出荷カ鮗って、いまはちょっと解放さ から、遠慮したんた。 亀 : 最近はるみちゃん忙しそうだよ、って聞いたものだ のに。 H : クロスリファレンス。 亀 : ところで、なんの話をしてくれるの ? H : うん。そうしな、そうしな。 亀 : それしゃあ、そうしようかなあ。 H : どうせ、私はぼおっとしているところだし。 亀 : はるみちゃんからお誘いなんて・・・ 136 にも使用されます。 います」などのように、関連している参照箇所を示すの 照してください」や「 2.1 節ではのこついて説明して きに便利なだけではなく、文章のなかで「表 11.1 を参 りました。このような番号は、説明箇所を捜しだすと 使って式番号を自動生成する方法も説明したことがあ でセクション番号をつけたり、 equation 環境などを た、すし、ぶん前の話ですが、セクション付けコマンド 前々回は、図表に番号をふる方法を説明しました。ま 藤浦はる美 ただし、文書の構成に変更があったり、図表が増え たりすると、表 11.1 は表 11.2 になる可能性もありま すし、 2.1 節は 3.1 節になっているかもしれません。と いうことは、最初によほどよく構成を練っておかない とあとで苦労することになります。 また、もともと book スタイルで書いた文書のある 章を article スタイルで出力するときには、表 4.5 が 表 5 になっていなければなりません。ということは、 参照箇所を洗いだして修正していかなければならない のてす。 これでは、 I*TEX の長所と思っていたところに力、え ってケチがついてしまいます。 でも、ご安心を。には、相互参照 (Cross Ref- erence) という機能があります。これよ、このような数 字を直接入力ファイルに書ぎ込むかわりにラベルをつ けておき、キー (key) あるいはラベル名と呼んでいる 文字列と番号とを対応づけ、ラベル名を指定するだけで 対応する番号を出力してくれる機能です。 相互参照の手順 相互参照には、 \label と \ref という 2 つのコマ ンドを使用します。コマンド名のとおり、 \label コマ ンドでラベルを、つナ、 \ref コマンドで参照します。 とりあえすここでは、セクション番号を参照する場 合を例にとって相互参照の手順を説明します。 ラベル名を決める \label コマンドでラベルをブナるのにも、 \ref コ UNIX MAGAZINE 1991.6
連載 An lntroduction to X Window System X プロトコルの例 ( イベント ) 図ー X Y X Y 0 イベント送受ウインドウの関係 モディファイアキーの状態 イベント発生ウインドウ上の位置 ルートウインドウ上の位置 イベントの発生したウインドウ番号 ルートウインドウ番号 イベントの発生 ( キーが押された ) 時間 順番を示すシーケンス番号 キー固有の番号 ( キーコード ) キーが押されたイベントを示す ( マウスポタンが押されたときは 4 ) 図 2 情報の送受 Ethernet プロトコノレ IP プロトコル TCP フ朝トコル X プロトコル コ ′キ のワークステーションで操作、表示できるのです。 X プロ りませんが、情報はそれぞれの役割をもった箱に詰め込ま トコルの例を図 1 に挙けておきます。 れ、送り手から受取先に届けられます ( 図 2 ) 1 。 X11 では、 120 あまりの種類の基本プロトコルが用意さ クライアントとサーバーはそれぞれウインドウを操作す れていますが、プロトコルは大別すると以下の 4 種類に分 るための情報をもっていて、必要に応してこの X プロトコ けられます ( 詳細は後述します ) 。 ルに乗せて情報交換や孑バをおこなうわけです。さきに挙 げたように、 X プロトコルは動作の要求、それに対する返 1 ) 動作の要求 答、イベント、エラー情報に大別されます。 2 ) 1 ) に対する返答 3 ) イベント 動作の要求と返答 4 ) ェラー情報 さて、ネットワークを介して X プロトコルの情報を届け 動作の要求は、クライアントからサーバーに向かって送 るには、どのメディアで、どこに向かって、いかに信頼性 られます。このなかには、文字を表示したり線を描いたり をもって送り届けるかが問題になります。これは、さきは 1 かくして、 lbyte のキーコードは、 Ethernet に乗るときには 106byte に膨れあ ど触れた TCP/IP などが受け持ちます。過剰包装ではあ がります。 146 UNIX MAGAZINE 1991.6
IJN Ⅸへの招待⑩ 納されています。前述のとおり、 i ノード番号とは個々の i ノードにつけられた一意な番号です。さて、 1 つのファイ ルには 1 つの i ノードが割り当てられることになっており、 その i ノードにはファイルの所有者、リンク数、時刻情報、 ファイルの内容がディスク上のどのプロックに書き込まれ ているかなどの情報が格納されています。、、リンク数クと は、その i ノードを参照しているファイルの数のことです。 たとえば、ファイル A を B にハードリンクすると、 A に割 り当てられていた i ノードのリンク数は 2 となります。 ファイルシステム内には、このようにファイルが格納さ れています。したがってコマンドなどの引数でファイルを 指定すると、カーネルはディレクトリ内のファイル名から そのファイルに割り当てられている i ノード番号を検出し、 i ノード内の情報からファイルの実体を捜しあてていくわ けです。 今度は、ファイルの作成や削除の際のカーネルの働きを 考えてみます。皆さんがファイルを作成するとき、ごく大 雑把にいうと次のような作業がカーネルによっておこな われます ( カーネル内では、実際にはもっと複雑な操作がお こなわれています ) 。 cl ) ファイルの名前をメモリ上に読み込まれたディレクト リに書き込む。 (2) 未使用の i ノードが、新しいファイル用の i ノードとし て割り当てられる。 i ノードにはファイルの所有者や時 刻などに関する情報が書き込まれるが、それは ( ディス ク上に直接ではなく ) メモリ上でおこなわれる。 c3 ) 割り当てられた i ノードの番号が、メモリ上のディレク トリに書き込まれる。 (4) (2) の i ノードがメモリ上からディスク上へ書き込ま (5) (4) のディレクトリがメモリ上からディスク上へ書き 込まれる。 一方、ファイルを削除すると次のような作業がおこなわ れます。 % grep fsck /etc/rc /etc/fsck -p 162 dl ) 削除するファイルの名前が登録されているディレクト リで、該当ファイルに対する i ノード番号を 0 に設定す る。 (2) i ノード中のリンク数を 1 つ減らす。リンク数が 0 にな れば、その i ノードを未使用の i ノードとする ( さらに、 ファイルが使用していたディスク上のプロックを解放す る ) 。 こで、 UNIX マシンの電源がふいに切られてしまった としましよう。そのとき、不幸にもファイルを作成してお り、カーネルは c4 ) の作業が終ったところだったとします。 すると、ディスク中では使用されていることになっている i ノードの番号は、 c5 ) の作業が終っていないので、ディス ク上のどのディレクトリ中にも含まれないことになってし まいます。したがって、ファイルは作成したのにディスク 中のどのディレクトリにもその名前は登録されていないわ けですから、実際にはそのファイルが扱えなくなってしま います。 一方、電源が切られたとき、ファイルを削除していたと しましよう。カーネルは (l) の作業を終えたところだった とすると、 i ノードは未使用になってません ( 使用中になっ たままです ) 。そこで、ディレクトリから参照されていない i ノードが、使用中となったままになります。また、たとえ 別のディレクトリからその i ノードが参照されていたとし ても、リンク数が減らされていない ( (2) が終っていない ) ので、 i ノード中のリンク数は実際の参照数より 1 つ大き いままになってしまいます。 皆さんも、、、 UNIX ワークステーションの電源はいきな り切ってはいけない〃と聞いたことがあるのではないでし ようか。その理由は、このあたりにあるのです。ふいに電 源を切ると、ディスク中の情報が誤ったものになってしま います。そこで UNIX では、万が一ふいに電源を切った場 合でもディスクの情報を正しく回復できるよう、 fsck とい うコマンドが提供されています。そして、立ち上け時のシ ェルスクリプト / etc / rc では、この fsck コマンドが実行さ れるようになっています。 >/dev/console 2 > & 1 UNIX MAGAZINE 1991.6
毎年春になるとどこの大学のキャンパスも新入生でご った返し、休み中とは打って変わって賑やかになります。 サークル勧誘のチラシとにらめっこしている女の子や、は しゃぎまわっている女の子 ( 女の子にしか目がいかへんの かって ? ふだん女の子とは無縁の生活なんやから、しよう がないやん ) などを見ていると、なんだかこっちまで新鮮 な気分にさせられます ( とはいっても、どこも人だらけで昼 食もおちおちとれす、うっとうしくもありますが ) 。 彼らほど初々しくはありませんが、私たちの研究室にも 新しい 4 年生が配属されてきます。そこでますマシンの管 理者がやらなけれはならないのは、彼らが研究室にあるマ シンを使えるようにアカウントを作ることです。マシンが 多けれはマシンごとに登録するのも面倒な作業ですし 21 、 どのようにアカウント名をつけるかといったことも考えな くてはなりません。登録する人数が多い場合などは、これ も頭痛の種ですね。 また、管理者の仕事はユーサーの登録だけではありませ ん。これとは逆に、アカウントを抹消しなけれはならない こともあるでしようし、グループを設定したり、新たにソ フトウェアをインストールすれはそれをユーサーに知らせ るのも管理者の重要な仕事です。そこでここでは、このよ うな、、ユーサー管に関するコマンドや必要なファイル、 方法などについてみていくことにしましよう。 冖ログイン名のつけ方 新規にユーサーを登録する場合、ます考えなけれはなら ないのは、、ログイン名 ( アカウント名 ) をどうつけるか〃と root : NaMEtEnNOKaUK : 0 : 1 : Operator : / : /bin/csh nobody : * : 65534 : 65534 : : / : daemon : * : 1 : 1 : : / : sys:*:2:2::/:/bin/csh bin : * : 3 : 3 : : /bin : uucp : * : 4 : 8 : : /var/spool/uucppublic : news : * : 8 : 8 : : /var/spool/news : /bin/csh ユーサー管理 、ゝいうことでしよう。学生実験のように使用期間も限られて いて人数が多い場合、何も考えすに eXP1011 のように学 籍番号を使うこともできます。しかし、これでは誰のこと かさつばり分かりませんし、メールを出すにも番号を間違 えてはかの人に送ってしまわないともかぎりません。した がって、通常はなるべくその人であることが分かるような ログイン名を選びます。私たちの研究室の場合、ログイン 名はその人の姓 ( たとえば okayama) を使い、はかの人と かち合うときにはファーストネームを使ったりしています。 そのほかにも、ニックネームやイニシャルなどいろいろ考 えられますが、これは管理者のセンスの見せどころといえ るでしよう。 また、名前のつけ方に関連しますが、あるマシンをプロ ジェクト専用にしたいとか、プロジェクト専用のディレク トリを作ってそこに関連するファイルを入れておきたいこ とがあります。とくに、そのプロジェクトが極秘に進めら れているような場合、ホスト名やディレクトリ名にそのプ ロジェクトの名前をつけるのは避けたほうが賢明です。万 が一情報が漏れてしまうと困るのは自分ですから、気をつ けるに越したことはありません。 さて、実際にユーザーを登録するには、 /etc/passwd フ ァイルにユーサーのエントリを追加します。しはらくのあ いだ、このファイルについて説明していくことにします。 ーバスワード・ファイルの構造 /etc/passwd ファイルには、ユーサーのエントリが 1 行 ごとに書かれています。たとえば、私たちの研究室のある マシンの / etc / passwd ファイルは次のようになっていま す ( 一部省略してあります ) 。 baba: Muoqntkaehy6B : 6228 : 600 : Kenichi Baba : /home/newmercury/baba: /bin/csh katayama: aH0kAyekc3nx. : 4044 : 400 : Katayama yoshiaki : /home/shinobu/katayama: /bin/csh okayama: Sh01 加 ON 訌 110. : 6222 : 600 : Kiyohik0 Okayama: /home/neptune/okayama: /bin/csh 21 NIS(YP) を使えば楽ですが、 慢してくださいわ。 54 1 つのエントリに注目すると、コロン ( 、、 : 〃 ) でいくつか のフィールドに区切られているのが分かります。これらの これは次号以降で紹介します。もうしばらく我 UNIX MAGAZINE 1991.6