emacs 入門 # ファイル名 # ます。 (setq delete—auto—save-files nil) ろが、 さきほど、オートセープ・ファイルの名前は、 おけば、オートセープ・ファイルも保存されたままになり のように delete-auto-save-files 変数に、、 nil 〃を設定して visited-file-name 変数は、そんな面倒くさがり屋さんの なんて考える人もいるかもしれませんね。 auto-save- いちいち recover-file なんてしなくてすむのに」 「どうせなら、もとのファイルに直接書き込んでくれりゃ だよ、って説明しましたが、 「やつばり、これまでの変更はやめた ! 」 と設定してください。ただしこれだと、 (setq auto—save—visited—file—name にする前に ために用意されている設定です。オートセープ機能を on t ) のように nil 以外の値をセットすれば、もとのファイル名 (setq make—backup—file t) の make-backup-file 変数です。この変数は、 ますは、自分のそそっかしさに自信をもっている人向け files. el のなかから探ってみましよう。 ファイルを残しておくことだってできます。その方法を、 をバックアップする機能でしたが、もっと積極的に過去の オートセープは、万一の障害に備えて自動的にファイル ファイルのバージョン管理 V 安全運転のためのバージョン管理 と組み合わせて使うほうがいいでしよう。 まく避けたいのなら、次に説明するンヾージョン管理機能〃 なんて気が変わったときにはすでに手遅れです。これをう の最後に 122 をつけたファイル名でバックアップ・ファ イルを作ってくれます 4 。 たとえば、もとのファイル名が、 になります。 osyougatsu なら、バックアッフ・ファイルは、 osyougatsu ァイルや /. emacs" に誓いておくとよいでしよう。 4 すべてのファイルについてバックアップをとっておきたいのなら、初期設定フ (setq version—control never) version-control 変数には、 t 以外の値も設定できます。 のようなファイル名で残してくれます。 osyougatsu. ~ 3 ~ osyougatsu. ~ 2 ~ osyougatsu. ~ 1 ~ なら、最初にセープするときにもとのファイルを、 osyougatsu す。たとえば、 イル名の最後に、、 . 番号〃をつけたファイル名になりま 作ってくれます。バックアップ・ファイルは、もとのファ と設定すれば、一連番号つきのバックアップ・ファイルを (setq verslon—control t) v ersion-control 変数に イルを残しておく方法を紹介しましよう。 もとないですね。そこで、次は複数のバックアップ・ファ とっては、バックアップ・ファイルが 1 つしかないのは心 なぜかこんな目にしょっちゅう遭ってしまうューサーに なんてこともあります。 3 ) 後日、自分の失敗に気づいたときには手遅れだった 2 ) そのまま、セープしてしまった 1 ) 気づかすにファイルの一部を消してしまい はすいぶん減りますが、 これだけでも、間違ってファイルを壊してしまう危険性 UNIX MAGAZINE 1991.9
連載 UNIX Communication Notes / v 矼 / SP001 / locks / lßく . を消します。 Uutry での確認 . cula Uutry は、 uucico をデバッグオプションをつけて起動 したあとでログファイルを出力します。、、 tail -f かお なわれているので、 C などで割り込まないかぎり終了し name ( 0 ) not found; return FAIL list (mail) num = 1 name (nadia) not found; return FAIL list (mail) 皿皿 = 1 mchFind called (nadia) # /usr/l ib/uucp/uuci co ません。 —rl —snadia —x9 Uutry —x9 ーて nadia ー x の後ろの数がデバッグレベルで、これが大きいほど詳 しいメッセージが出力されます。 Uutry のデフォルトはレ ベル 5 です。 設定が間違っていて uucico がエラーで終了すると、ス テータスファイル /var/spool/uucp/. Status/nadia にそ の記録が残ります。これがあると、次のように TIME NOT REACHED 〃になって、しばらくは uucico を起動しても通信は試みられません。 —Swit ch (TRUE) , —CaIIBack (FALSE) , —Request (FALSE) , -MyName ( ) , Commands mail REI'RY TIPE ( 300 ) NOT REACHED exit code 101 Conversation Comp1ete : Status FAII. 団 ー r は、リトライ時間を無視して強行するためのフラグで す。ステータスファイルを手動で消してもかまいません。 筆者は、 Uutry に頼らすに、 UUCiCO —rl —snadia ¯X9 などと直接操作しますが、これは趣味の問題でしよう。 ます、電話をかけ、ログイン名、パスワードを入力し、 、、、という操作が正しくおこなわれているかどうか確認します。 デバッグ・メッセージのなかに、何を受け取って何を送っ たかが逐ー記録されています 1 。 リモートシステムの Systems に登録されていない場合、 次のようなエラーがデバッグ・メッセージに交しって出て きます。 imsg >APRYou are Ⅲ 1 own t0 meAQnsg—RYou are un 0m1 t0 me HANDSHAKE FAILD : 犯旺 DO NOT OW 、ゝなります。 リモートシステムの Systems に登録されているが、 Per- missions には登録されていない場合、次のようなエラーに imsg >APRLOGINACnsg—RI. OGIN HANDSHAKE FAII. ED : {OTE REJEff AFTER LOGIN 接続が完了し、送るべきジョブがないので即座に終了する。つまり、 uumadoka madoka ( 4 / 27 ー 23 : 51 : 15 , 18173 , 0 ) OK (startup) uumadoka madoka ( 4 / 27 ー 23 : 51 : 33 , 18173 , 2 ) OK (conversation complete ttyb 20 ) というログが /var/spool/uucp/. Log/uucico/ システム 名に出るようになれは、 Devices 、 Systems 、 Dialers の設 定はほば完了です。 このような接続テストの際、 uucico が異常終了してロッ UNIX MAGAZINE 1991.9 クファイルが消えすに残ることがあります ( 本来はないは すですが ) 。このようなときには、ロックファイルを手で消 1 指定したデバッグレベルが十分大きければですが・・・ 63
こで、今回はいきなり C 言語でのファイルの読込み方 法から入ることにします。とはいっても、この方法に 関しては連載の開始当初にも触れています。そのときに 使ったのは、 ・ 1990 年 11 月号 : getchar() による読込み ・ 1990 年 12 月号 : gets() や fgets() による読込み でした。 ます、 getchar() を使って前回と同様なプログラムを 作成してみましよう。読み込むファイルはホームディレ クトリの . test-file で、その内容は、オプションを設定 するための a から c までの文字が 1 行に 1 文字すっ書 かれている数行のものです。 ところで、標準入力以外のファイルの読込み方法に ついてはまだ何もお話ししていませんでしたね。今回 は、この説明から始めましよう。 ファイルのオープン C 言語でファイルを読み込む場合には、 ( 標準入力の ときは不要だった ) ファイルのオープンという操作が必 要になります。いったんファイルをオープンするとそ のファイルを示すものが返され、以降はその返されたも のを使ってそのファイルか躱作できるのです。これに は、 fopen という関数を利用します。この関数をオンラ イン・マニュアルで調べてみると、 #include く stdio . h> DZ—X 流プログラミング 今泉貴史 前回は、ファイルを利用してカスタマイズするコマン FILE *fopen(filename, type) ドを B シェルや C シェルを使って書いてみました。最 char *filename , *type ; 後に触れましたが、実際にはこのようにファイルを利用 してカスタマイズしているシェル・プログラムははとん と出てきます。これはマニュアルの SYNOPSIS の部 どなく、たいていは C 言語を使って作成されています。 分に出ているものですが、意味を簡単に紹介しておきま しよう。 今回も、前回に引き続きファイルを利用してカスタ ます、この関数 (fopen) を使うためには stdio. h と マイズするコマンドについてお話ししますが、今度は C いうインクルードファイルを読み込んでおく必要があり 言語を使うとどうなるかに重点をおいて説明します。 ます。この関数の戻り値は FILE 型へのポインタであ り、引数としては文字へのポインタ型 ( つまり文字列 ) C 言語でのファイルの読込み を 2 つ渡します。最初の引数は、その名前が示すとおり 処理対象のファイルのファイル名 ( パス名 ) です。問題 カスタマイズ用のファイル名や複数のファイルを使 は 2 つ目の引数です。 うときの優先順位については、すでに説明しました。そ 134 UNIX MAGAZINE 1991.9
emacs 入門 ,/ へ、/ N 書きに関係する変数や関数を中心に紹介しました。次回は、 今回の続きということで、ディレクトリに関するお話をす れると、ユーザーの不快指数も上がりますから、プログラ ミングや文書の作成にも悪影響を及ほ、します。 次回の予告 M-x pwd 今回は files. el ファイルから読み取ったファイルの読み コマンド ・今回出てきたコマンドの一覧 ることにしましよう。 ( あらい・みちこ ASTEC) recover—file auto—save—mode M-x toggle¯read—only revert—buffer info M-x undo (C-- 、 C-x u) save—some—buffers (C-X M-x kill—some—buffers M-x cd M-X UNIX MAGAZINE 1991.9 save-abbrevs require-final-newline buffer-read-only trim—verslons—withotlt—asking kept—new—verslons kept-old-versions verslon—control make-backup-file auto-save—visited-file-name delete- auto-save- files auto—save—interval auto-save-default p 変数 set-buffer-modified-p buffer-modified-p isp 関数 s) ファイルをリカバーする オートセープ・モードの切替え バッフアの変更状態を設定する関数 バッフアが変更されたかどうかを返す関数 複数のバッフアを確認しながら削除 複数のファイルを確認しながらセープ デフォルトディレクトリの変史 デフォルトディレクトリの表示 1 つ前の変史をもとに戻す ⅲ fo システムの起動 これまでのバッフアの変更を無効にし、もとのファイルから読み込む ヾッフアの変更可能 / 変更禁止状態の切替え オートセープ先のファイル名の選択 オートセープ・ファイルを残すかどうかの指定 オートセープの間隔の指定 オートセープ機能の有効 / 無効の切替え 文書ファイルの読み書きと同時にアプレピエーション定義ファイルを読 ファイルの最後にニューライン文字を追加するかどうかの指定 バッフアが変更できるかどうかの指定 削除する際にユーザーに確認を求めるかどうかの指定 シリアル番号つきのバックアップ・ファイルのうち、中間のファイルを ファイルを何個残しておくかの指定 シリアル番号つきのバックアップ・ファイルのうち、もっとも新しい イルを何個残しておくかの指定 シリアル番号つきのバックアップ・ファイルのうち、もっとも旧いファ バックアッフ・ファイルにシリアル番号をつけるかどうかの指定 バックアップ・ファイルを作るかどうかの指定 み書きするかどうかの指定 133
LJN Ⅸ流プログラミング 11 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 break ; break; break ・ fclose(fp) ; printf ("a %s\nb = %s\nc "off" 0 Ⅱ ” off ” C ? 0 Ⅱ exit(O) ; いかがですか ? ファイルポインタを得るまでの処理 グラムを終了します ( 17 行目 ) 。 20 ~ 25 行目では得られ がやや長いので見かけはすこし違いますが、基本的には たホームディレクトリにファイル名をつなぎ、ファイル 前号のシェルのプログラムと同しことをしています。 を読込みのモードでオープンしています。この場合も、 オープンできたかどうかを検査していますね。このよう では、プログラムを順番に見ていきましよう。最初の にエラーを返すことがある関数を呼び出すときは、かな include の行は、プログラムのなかで NULL や EOF らず工ラーの検査をおこなうように心掛けましよう。 などの値を使用するために指定しています。次の define 27 ~ 39 行目の while 文の処理が実際にオプションを の行は、ファイル名をイ尉寺するための配列の長さを定義 設疋している部分です。ファイルのなかに書かれた文字 するものです。この配列の長さはユーザーのホームディ それぞれに対してループし、 a 、 b 、 c のいすれかの場合 レクトリのパス名によって異なりますが、普通は 256 も には対応する変数の値を真 ( 1 ) に設定しています。 あれば十分でしよう。どんな状況でも動作するプログラ EA . ′ ~ → 取に printf でそれぞれのオプションの値を出力し、 ムにしたいのなら、この値では十分とはいえないかもし プログラムは終了しています。 れません。しかし、 C 言語でそれを実現しようとすると ファイルの位置を指定するためにすこし面倒なこと ちょっと複雑になってしまうので、今回はこれでよしと をしていますが、お分かりいただけたでしようか。あと しておきましよう。 は、このファイルに書かれた文字を角斤する部分を要求 さてプログラム本体ですが、最初は変数の宣言です。 に沿って手直しすればいいのです。 7 ~ 9 行目 (a 、 b 、 c の宣言 ) では、各オプションの値 を一尉寺するための変数を宣言しています。それらのオプ 書式つきの入力ー scanf() ションは、デフォルトでは偽 ( 0 ) になるように初期設定 されています。 11 行目の fp はファイルポインタで、オ 「プログラムは簡単にしたいが、もうすこし体裁よくオ フションの設定か書かれているファイルをオープンする フションの設定を書きたい」というなら、 fscanf 関数を ために使います。 12 ~ 13 行目の buf と ptr はそのファ 使うこともできます。この関数は、簡単にいうと fprintf イルのパス名を得るために、 14 行目の ch はファイルの の逆の操作をおこなうものです。 fprintf は、指定され 中身を読むときに使います。 たファイルポインタの指す先へ書式を指定して文字列を プログラム本体では、ますホームディレクトリの位置 書き込みます。これに対し、 fscanf は指定されたファイ を竟変数 HOME から得ています ( 16 行目 ) 。この値 ルポインタの指す先から書式を指定して文字列を読み込 か得られない場合は、エラーメッセージを出力してプロ みます。次のプログラムを見てください。 138 UNIX MAGAZINE 1991.9
ernacs 入門 //へ、/ N 図 9 バックアップ・ファイルをセープするときに表示されるメッセージ delete excess backup versions 0f /home/ara/osyougatsu? (y or n) 図田 kept-old-versions 変数と kept-new-versions 変数 osyougatsu-r kept-old- versions 個 osyougatsu¯n- ・一中間のバージョンは削除 osyougatsu-t- とすれは、バックアップ・ファイルに一連番号がつきませ んし、 (setq version¯control nil) とすれば、現状維持ーーっまり、 ・すでに一連番号つきのバックアップ・ファイルがあれは、 バックアップ・ファイルにもシリアル番号をつける 一連番号つきのノヾックアップ・ファイルがなけれは、バ ックアップ・ファイルに一連番号はつけない となります。 いらないファイルを消しましよう さてさて、一連番号つきのバックアップにしていると、 ファイルをセープしようとしたときに図 9 のようなメッセ ージが表示されることがあります。これって、 y ( ええで ) と 答えればいいのでしようか、 n ( いやや ) と答えれはいいの でしようか ? これを判断するには、ます 2 つの Emacs Lisp 変数、 kept-old-versions kept¯new—versions の働きを理解する必要があります。 一連番号つきのバックアップにしておけば過去のファイ ルがす一つと残っているかというと、しつはそうではあり osyougatsu¯s¯ kept-new-versions イ固 UNIX MAGAZINE 1991.9 ません。むやみにバックアップ・ファイルを作ってディス クを喰い荒らしてしまうと、またまたシステム管理者から お小言が飛んできますし、彼 ( 彼女 ? ) の勘気に触れたりし たらせつかくのバックアップ・ファイルもまとめて cron で消されちゃったりするかもしれません。 そこで、 Nemacs ではもっとも旧いバージョンを kept- old-versions 個、もっとも新しいバージョンを kept-new ー versi 。 ns 個だけとっておいて、残りは自動的に消す仕組 みになっています ( 図 10 ) 。 さきほどの、、 delete excess . というメッセージは、 「あいだのバージョンを消去してもいいですか ? 」 という意味だったのです。 このメッセージが煩わしければ、 (setq trim—versions—without—asking t) としてください。なかなか長い変数名で覚えづらいのです が、忘れてしまっても、、 trim" とは、 余分なものを切り取ってきれいにする 意味だということさえ覚えておけば 5 、あとは trim で始ま る変数名を捜すだけですみます。 不要なバージョンを消す方法って、これだけしかないの でしようか ? さきほどの files. el をよくよく眺めてみる 5 小学校の家庭科で。トリミング〃なんて言葉が出てきませんでしたか ? 123
ユーサーへの道 5 表 2 マシンタイプ ースーバー 表 3 CPU のタイプ sun3 sun3x sun4 sun4c Sun3 / 50 , 60 , 75 , 140 , 150 , 160 , 180 , 260 , 280 Sun3 / 80 , 460 , 470 , 480 Sun4 / 110 , 260 , 280 SPARCsystem 330 , 370 , 390 , 470 , 480 , 490 SPARCstation1,1 十 ,2,SLC IPC イギュレーション・ファイルです。 のテープルのサイズを決めるためのものです。 大ューサー数を表すものではありません。カーネル内部 この数は、かならすしもそのマシンにログインできる最 カーネルがサポートするユーサーの最大数を指定します。 ・ maxusers motd) で表示されます。 ここで指定する名前はログイン時のメッセージ (/etc/ という名前がついていますが、これは変更が可能です。 ュレーション・ファイル GENERIC では、℃ ENERIC" システム名 ( カーネル名 ) を指定します。このコンフィギ ・ ident になっています。 、、 SUN4C ー 60 〃となります。ほかのマシンは表 3 のよう CPU のタイプを指定します。 SPARCstation の場合は ・ cpu っています。 はヾ sun4c 〃となります。ほかのマシンは表 2 のようにな マシンのタイプを指定します。 SPARCstation の場合 ・ machine リをみていきましよう。 1 行で 1 つのエントリとなっています。それぞれのエント コンフィギュレーション・ファイルの中身は、基本的に ・ config ョンを表 4 ( 46 ページ ) に記しておきます。 プションにはたくさんの種類があります。おもなオプシ カーネルのオプション機能を指定します。カーネルのオ ・ options UNIX MAGAZINE 1991.9 config vmunix swap generic は、 ファイル名は vmunix としておきます。 GENERIC で スワップのファイルシステムを指定します。カーネルの カーネルファイルの名前、ルート・ファイルシステム、 SUN3X-80 SUN3X-470 SUN3-50 SUN3-60 SUN3 」 10 SUN3 ー 160 SUN3-260 SUN4-60 SUN4 ー 110 SUN4-160 SUN4-330 Sun3/80 Sun3 / 460 , 470 , 480 Sun3/50 Sun3/60 Sun3 / 110 Sun3 / 2601280 Sun3 / 75 , 140 , 150 , 160 , 180 Sun4 / 260 , 280 Sun4 / 110 , 150 SPARCstation1,1 十 ,2,SLC IPC SPARCsystem330 , 370 , 39014701480 , 490 となっていますが、次のように明示することもできます。 config vmunix root on sdOa swap on sdOb さらに、ファイルシステムの指定を root on sd だけ にすると自動的にルート・ファイルシステムが sdOa 、ス ワップが sdOb となります。 また、システムがクラッシュしたときのダンプを書き出 すファイルシステムも dump on sdlb のように指 定することができます。 ・ pseude—device 仮想デバイス名を指定します。これら仮想デバイスもた くさんあります。おもなものを表 5 ( 46 ページ ) に記して おきます。 ・ controller システムノヾス、ディスク・コントローラ、テープ・コン トローラ、 SCSI ホストアダブタなどを指定します。 ・ disk (SCSI) ディスクドライプを指定します。 ・ tape ( SCSI ) テーブドライプを指定します。 ・ device そのほかのデバイスを指定します。 ・ device—driver SPARCstation では、組み込むデバイスのデバイスド ライバを指定します。 カーネルの調整 ルを書き換えてみましよう。 いてはすでに説明しました。そこで、今度は実際にカーネ カーネルのリコンフィギュレーションが必要な場合につ 45
これは、オープンするファイルに施したい処理を指 定します。ここに指定できる文字列は r 、 w 、 a の 3 つ で、それぞれ読込み (r) 、書込み (w) 、追加 (a) に使う という意味になります。各文字列の後ろに、十という文 字をつけることもできます。この場合には、読み書きの 両方をおこなうことができます。「読込み用と書込み用 に別の文字を使っているのに、十と書くと両方できるの はどうして ? 」と思われる方もいらっしやるでしようが、 r や w は読込みや書込みという意味だけを示しているの ではありません。これらの 3 つの文字と、それぞれに十 をつけた場合の違いを表にしてみました ( 次ページの表 1 参照 ) 。 この表だけではちょっと分かりにくいので、すこし説 明しておきましよう。たんにファイルを読み込みたいだ けなら、 r を使えば十分です。新たにファイルを作成し たいときは、 w か a を使ってください。この 2 つは、 指定したファイルがすでに存在している場合だけ異なる 動作をします。ます、 w では存在しているファイルは捨 てられ、 0 から新たにファイルを作成していきます。ま た、 a では既存のファイルの後ろに付け加えるかたちで ファイルを作成していきます。 次は、十をつけた場合です。 r 十は、既存のファイル の先頭から読み書きをおこなうときに使います。 w 十は、 既存のファイルを捨て、新たにファイルを読み書きする ときに使います。 a 十は基本的には r 十と同しですが、最 初に処理をおこなう場所が先頭ではなくファイルの最後 になります。もっとも、処理をおこなう位置はほかの関 数 (fseek など ) を利用して変更できますから、この違 いは些細なものといえるでしよう。 このような相違がありますので、ファイルをオーフ ファイルのクロース ンするときは方法に注意してください。 UNIX MAGAZINE 1991.9 3 main(argc , argv) #include く stdio . h> や stdout に対して使用した getc や putc などの関数 は、 stdin や stdout などと同じ型です。つまり、 stdin ンすると、 FILE * 型の値が返されます。この FILE* 型 さて、このように f 。 pen を使ってファイルをオープ LJN Ⅸ流プロクラミング 11 がこれらの引数を使って簡単に利用できるのです。 もう 1 つ、お話ししておきましよう。それは fclose 関数です。これは、 fopen 関数を使ってオープンしたも の ( ファイルポインタと呼はれます ) を正しくクローズ するために使います。 UNIX では、 1 つのプロセスで オープンできるファイルの数が決まっています。その 数を超えてファイルをオープンしようとしてもできませ ん。ですから、不要になったファイルポインタはきちん とクローズする習慣をつけておきましよう。 この関数の使い方はとても簡単で、 #include く stdio . h> ファイルの読み書き これで、前処理としてのファイルのオープンと後処 理としてのファイルのクローズについてはお話ししまし た。あとは、実際にファイルを読み書きする方法だけ です。 fopen を使ってファイルをオープンした場合、スト リーム I/O を利用してファイルに対する読み書きがお こなえます。たとえは文字単位の入出力を考えると、読 み込むときには getc(fp) 、書き出すときには putc(c, (p) を使えは実現できます。簡単ですね。 1990 年 11 月号で作った cat コマンドを例に、引数 か指定された場合にはそのファイルを出力するように変 更してみます。できるかぎり本物の cat コマンドに近く なるように、複数のファイルカ甘旨定されたときは指定さ れたファイルを順番に標準出力に表示するようにし、何 も指定されなかったときは標準入力を入力として使うも のとします。 作成したプログラムは、次のようなものです。 fclose(stream) FILE *stream; となっています。つまり、クローズしたいファイルポ インタを引数としてこの関数を呼び出すだけでよいの です。 135
カーネルのリコンフィギュレーション さて、 OS のインストールの話が終ったところで、次はカ ーネノレのリコンフィギュレーション (reconfiguration) に ついてみていきましよう。 カーネル (/vmunix) というのは OS の本体であり、実際 にワークステーション ( ハードウェア ) を動かしているも のです。最初にインストールしたカーネルは、すべてのハ ードウェアやオプション機能をサポートしているので、 個々のシステムにとっては不必要なものも含んでいます。 このため、それぞれのシステムに合ったカーネルを作りな おす必要が出てきます。詳しくは、マニュアル [ 3 ] を参照し てください。 カーネルを作りなおすのは、次のようなケースが考えら カーネルの作りなおし れます。 2 ) カーネルが管理するテープルのパラメータを変更する 1 ) インストール直後のカーネルから必要のない機能を取り 2 ) のパラメータの変更は、カーネルで指定できるパラメ モリが多くなるわけです。 てカーネルを小さくすると、そのぶんューサーの使えるメ ら、必要のない ( 使わない ) 機能などのサポートを取り去っ スが利用できるメモリが少なくなってしまいます。ですか カーネルのサイズが大きいと、それだけューサーやプロセ カーネルは、つねにメモリに常駐しています。そのため、 3 ) 新しいデバイスを追加する ータ ( プロセスや端末の数など ) を増やしたり ( 減らした り ) する場合におこないます。 3 ) の標準サポート以外のデバイスを追加する場合には、 そのデバイスをサポートするように ( デバイスドライバを カーネルに組み込みます ) 、カーネルを作りなおさなけれは なりません。 コンフィギュレーション・ファイル さて、カーネルを作るといっても組み込むデバイスや機 能などにあったファイル ( プログラム ) を自分で集めてコ ンパイルするのはたいへんです。そこで必要な機能をファ イルに書いておき、自動的にコンパイルに必要なファイル を集めてくれるコマンドがあります ( 後述の c 。 nfig コマ ンドです ) 。必要な機能を書いておくファイルというのがカ ーネルのコンフィギュレーション・ファイルです。ここで はこのコンフィギュレーション・ファイルの中身について みていきましよう。 OS は SunOS 4.1.1 です。 コンフィギュレーション・ファイルは /usr/kvm/sys/ 〃ん / conf の下にあります ( マシンによってコンフィギュ レーション・ファイルのある場所は異なります ) 。〃尾んに は、マシンのアーキテクチャによって sun3 、 sun3x 、 sun4 、 sun4c が入ります。さらに、コンフィギュレーショ ン・ファイルが用途に応していくつか用意されています ( 表 1 参照 ) 。 以降では、コンフィギュレーション・ファイルの例とし て標準でサポートする機能をすべて含んでいる GENERIC を使うことにします。ちなみに、 GENERIC は インストールしたときに最初に作られるカーネルのコンフ 44 表ーコンフィキュレーション・ファイル ファイル名 GENERIC GENERIC-SMALL DL60 NFS60 DLS60 SDST60 8 台の SCSI ディスク、 2 台のテーブドライプ、 2 台の CD-ROM データレス用。ローカルディスクにスワップをもつ ディスクレス用。ただし SCSI デバイスをサポート ディスクレス用。 SCSI デバイスがなく、最小限のオプション機能 8 台の SCSI ディスク、 4 台のテーブドライプ、 2 台の CD-ROM sun4c でサポートしているすべてのハードウェア、オプション機能が入っている 説明 UNIX MAGAZINE 1991.9 * 詳細は、マニュアル 'SunOS 4.1.1 Release ManuaI', S 社れ OS イコ . 1 Release 8 わ〃 , Chapter 5 , p. 38 を参照。 *GENERICSMALL は一部のオプション機能が省かれているので、必要な機能が含まれているか確認して使うこと
クトリに存在するコマンドがコマンド名だけで実行でき るようになります。 /usr に存在するコマンド用のディレクトリとして、 最後に /usr/old を紹介しておきましよう。 /usr/old に は、旧い UNIX のコマンドが置かれています。これは、 旧いバージョンとの互換生を考慮してのことだと思われ ます。たとえは、かってファイルの圧縮には compact コマンドを使用していました。また、 compact で圧縮 IJN Ⅸへの招待⑩ したファイルは uncompact コマンドで復元していま した。現在では、これに代わるコマンドとして com- pact よりも圧縮率の高い compress か提供されていま す。しかし、すっと以前に compact で圧縮したファ イルは、 uncompact がなけれは復元できません。そこ で、 /usr/old には compact や uncompact などが置 かれているわけです。ですから、とくに必要がなけれ ß/usr/old を path に含めなくてもよいでしよう。 スプール用ディレクトリ usr/spool /usr ファイルシステムには、スプールファイル ( 一 定期間だけデータを保存しておくためのファイル ) を作 成するための、 spool という名前のディレクトリがあり % ls -F /usr/spool at / lpd/ lpd. lock mail/ mqueue / r 0 / たとえば、 at コマンドである時刻にシェルスクリプ トを実行する要求をおこなうと、その要求はスプールフ ァイルとして /usr/spool/at の下に作成されます。この ファイルは、要求した時刻に cron から /usr/lib/atrun が実行されたときに処理されます。このように spool にはある一定期間データを保存しておき、それがあとで なんらかのプロセスによって処理されるためのファイル が置かれるわけです。以降では、これらのうちいくっか のディレクトリを覗いてみましよう。 第 1p ー Laser Sh0t with portrait format : \ :lp=/dev/lp : sd=/usr/spool/lpd: lf=/usr/adm/lpd-errs : \ : of=/usr/1ib/1pfi1ters/1pf7 : \ :vf=/usr/lib/lpfilters/imgf : この例の場合は。、 sd=/usr/spool/lpd" となって いますから、プリンタ lp のスフールディレクトリは /usr/spool/lpd になります。プリンタ用のスプールデ ィレクトリに作成されたスプールファイルは、立ち上 け時に起動されるプリンタデーモン (/usr/lib/lpd) に 、、ます。 spool には、スプールファイルを作成するコマン ドごとにディレクトリが用意されています。 uucppublic/ uucp/ らすしも /usr/spool にあるとはかぎりませんが、通常 の記述 (sd=) によって決まります。したがって、かな ルディレクトリは、 /etc/printcap のなかのプリンタ て置かれるディレクトリか、存在しています。このスプー 発生するプリンタへの出力要求がスプールファイルとし usr/spool には、 lpr コマンドの実行にともなって lpq のスプールディレクトリ メール用のスプールティレクトリ よって処理されます。 は /usr/spool に作ります。 UNIX MAGAZINE 1991.9 UNIX では、ユーザーどうしが電子メールを送 受信できる機能が提供されています。これに関連 159