Linux ことはじめ

— Linux Installation and Getting Started —

Copyright \begin{matrix}c \\ ◯ \end{matrix} 1993 Matt Welsh ・山崎康宏日本語訳 JF プロジェクト

Version 1.1 + j0.2, 1993 年 12 月 26 日.

これは初心者のための Linux の解説書です。 Linux をどこでどうやって入手すればいいのか、それをどうやってインストールすればいいのか、はじめて触れる UNIX とはどうつき合えばいいのか、システム管理とは何をすればいいのかなどについて説明してあります。 Linux に興味を持った人はとりあえず読んでみてください。

所定の条件を満たせばこの本をコピーして再配布していただいてかまいません。詳しくは xiii ページの著作権と配布条件を見てください。

目次

まえがき vii 日本版へのまえがき . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii 英語初版へのまえがき . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii 対象とする読者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix 章だて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x 謝辞 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x 日本語版について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi 英語版作成スタッフについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi 表記上の約束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv

1 はじめに 1 1.1 この本について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Linux と UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.2.1 Linux がやってくる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Linux の著作権について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Linux の特徴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.5 必要なハードウェア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.5.1 推奨する機器構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.5.2 その他の周辺機器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.6 インストール作業のまえに . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.6.1 Linux と他の OS を共存させること . . . . . . . . . . . . . . . . . . . . . . . . 6 1.6.2 Linux で MS-DOS のファイルを扱う . . . . . . . . . . . . . . . . . . . . . . . 7 1.6.3 Linux の読み方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.7 わからないことに出会ったら . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2 Linux の入手 9 2.1 ftp による入手 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2 CD-ROM による入手 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3 その他の入手方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3 Linux 入門 15 3.1 はじめに . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2 UNIX の基本知識 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.2.1 アカウントの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2.2 ログインの実際 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2.3 仮想コンソール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2.4 シェルとコマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2.5 ログアウト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2.6 パスワードの変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2.7 ファイルとディレクトリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2.8 ディレクトリ・ツリー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2.9 カレントディレクトリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.10 ホームディレクトリの参照 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.3 UNIX 散歩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.3.1 歩き回る . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.3.2 ディレクトリの中身を見る . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3.3 新しいディレクトリを作る . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3.4 ファイルのコピー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3.5 ファイルの移動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3.6 ファイルやディレクトリの消去 . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.3.7 ファイルの中身を見る . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.3.8 オンラインマニュアルを使う . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.4 基本コマンドのまとめ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.5 ファイルシステムの探検 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.6 いろいろなシェル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.7 ワイルドカード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.8 UNIX での配管工事 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.8.1 標準入力と標準出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.8.2 入力と出力のリダイレクト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.8.3 パイプを使う . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.8.4 元のものをこわさずにリダイレクト . . . . . . . . . . . . . . . . . . . . . . . . 37

3.9 ファイルの許可属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.9.1 ファイルの許可属性とは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.9.2 ファイルの許可属性の見分け方 . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.9.3 許可属性どうしの依存性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.9.4 許可属性の変更方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

3.10 ジョブ制御 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.10.1 ジョブとプロセス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.10.2 表のジョブと裏のジョブ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.10.3 裏のジョブの実行と強制終了の実際 . . . . . . . . . . . . . . . . . . . . . . . . 42 3.10.4 ジョブの休止と再開の実際 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

3.11 vi を使う . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.11.1 基礎知識 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.11.2 vi の起動方方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.11.3 文章を入力する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.11.4 文書の削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.11.5 文章の書き換え . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.11.6 移動コマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.11.7 ファイルの保存と vi の終了 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.11.8 別のファイルを編集する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.11.9 他のファイルを取り込む . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.11.10 シェルコマンドを実行する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.11.11 使い方案内 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.12 個人用の環境整備 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

3.12.1 シェルスクリプト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.12.2 シェル変数と環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.12.3 シェルの初期化スクリプト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

3.13 新しい道に向かって . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4 システム管理 57

4.1 ルートの権力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.1.1 root アカウント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.1.2 システムを乱用すること . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4.1.3 一般の利用者との関係 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.1.4 決まりを作る . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.1.5 まとめ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

4.2 システムを立ち上げる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.2.1 ブートフロッピーを使う . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.2.2 ハードディスクから起動させる . . . . . . . . . . . . . . . . . . . . . . . . . . 61

4.3 Shutting Down . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.4 システムを停止させる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.5 利用者の管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

4.5.1 利用者管理の考え方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.5.2 利用者を登録する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.5.3 利用者を抹消する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.5.4 利用者の属性を変える . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.5.5 作業用のグループ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

4.6 ファイルをまとめて圧縮する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.6.1 tar コマンドを使う . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.6.2 gzip と compress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.6.3 ファイルをまとめる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

4.7 フロッピーディスクを使ってバックアップする . . . . . . . . . . . . . . . . . . . . . . 69 4.7.1 Using floppies for backups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.7.2 ファイルシステムをフロッピーディスク上に作成する . . . . . . . . . . . . . . 70

4.8 新たにソフトウェアを導入する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.8.1 カーネルを更新する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.8.2 ライブラリを更新する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.8.3 gcc を更新する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 4.8.4 その他のソフトウェアを更新する . . . . . . . . . . . . . . . . . . . . . . . . . 74

4.9 ファイルシステムの管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 4.9.1 ファイルシステムをマウントする . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.9.2 ファイルシステムを検査する . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

4.10 その他の管理作業 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 4.10.1 システムの初期化ファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 4.10.2 ホスト名を設定する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.10.3 ファイルのリンクと i ノード番号 . . . . . . . . . . . . . . . . . . . . . . . . . 79

4.11 非常事態が発生したら . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.11.1 管理用ディスクを使って問題から回復する . . . . . . . . . . . . . . . . . . . . 81 4.11.2 ルートのパスワードを修正する . . . . . . . . . . . . . . . . . . . . . . . . . . 81 4.11.3 破壊されたファイルシステムを修復する . . . . . . . . . . . . . . . . . . . . . 82 4.11.4 失われたファイルを取り戻す . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 4.11.5 損傷したライブラリを修復する . . . . . . . . . . . . . . . . . . . . . . . . . . 82

5 進んだ使い方 83

5.1 X window システム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.1.1 対応しているハードウェア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.1.2 XFree86 のインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.1.3 XFree86 の設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.1.4 X の起動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 5.1.5 X を終了させる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

5.2 MS-DOS のファイルを読み書きする . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.3 TCP/IP を用いたネットワーク接続 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

5.3.1 必要なハードウェア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.4 UUCP を使ったネットワーク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.5 電子メール (e-mail) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 5.6 ニュースと USENET ・ junet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

6 日本語拡張キット (JE) 93

6.1 JE の概略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 6.1.1 JE とは何か . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 6.1.2 何が含まれているのか . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 6.1.3 必要な環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6.2 JE のインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 6.2.1 JE インストールの手順 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 6.2.2 JE インストールのヒント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

6.3 ディスクセットの内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 6.3.1 概略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 6.3.2 JE ディスクセット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 6.3.3 j ディスクセット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 6.3.4 jd ディスクセット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 6.3.5 jw ディスクセット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 6.3.6 jc ディスクセット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 6.3.7 js ディスクセット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 6.3.8 jn ディスクセット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 6.3.9 jt ディスクセット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 6.3.10 jf ディスクセット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 6.3.11 jx ディスクセット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.3.12 jxsi ディスクセット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

6.4 将来計画 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

A ちょっとした技術と一般的な問題 105 A.1 SLS 版をハードディスクから導入する . . . . . . . . . . . . . . . . . . . . . . . . . . 105 A.2 複数のファイルシステムを使う . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 A.3 rawrite.exe の代わりに dd を使う . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 A.4 スワップファイルの使い方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 B 関連図書と情報源 109

B.1 Linux に関してよくある質疑応答の一覧 (Linux FAQ) . . . . . . . . . . . . . . . . . . 109 B.2 Linux Documentation Project の文書 . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 B.3 ネットワークで公開されているその他の文書 . . . . . . . . . . . . . . . . . . . . . . . 110

B.3.1 The Linux INFO-SHEET (Linux 情報メモ) . . . . . . . . . . . . . . . . . . . 110 B.3.2 The Linux META-FAQ (JMETA-FAQ) . . . . . . . . . . . . . . . . . . . . . 110 B.3.3 The Linux Hardware Compatibility List (Linux 互換ハードウェア一覧) … 110 B.3.4 The Linux Software Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 B.3.5 Linux HOWTO 文書 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 B.3.6 その他の文書 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

B.4 USENET の Linux 用ニュースグループ . . . . . . . . . . . . . . . . . . . . . . . . . 111 B.5 Linux メーリングリスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 B.6 関連図書 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

C FTP の使い方と FTP サイト 115 C.1 ftp を起動する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 C.2 ログインする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 C.3 ファイルを探す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 C.4 ファイルをダウンロードする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 C.5 FTP を終了する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 C.6 Linux FTP サイト一覧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

D GNU 一般公有使用許諾書 121 はじめに . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 GNU 一般公有使用許諾の条項と条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 注意 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 和文文書自体の再配布に関して . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 新しいプログラムにこれらの条項を適用する方法 . . . . . . . . . . . . . . . . . . . . . . . 127 vi

まえがき

日本版へのまえがき

UNIX は、ハッカーによるハッカーのためのＯＳとして高い評価を受けて来ただけでなく、真のマルチタスク環境と通信機能の便利さなどを買われて、広く使われるようになりました。しかし、ハッカー達は商用化してソースコードが入手できなくなくなってしまった UNIX に不満を覚えました。

専用の部屋を必要な UNIX マシンが、エンジニアリング＝ワークステーションと呼ばれ、ウルサイ音に我慢できれば机の脇におけるようになり、それに連れて世界規模のネットワークが敷かれるようになりました。通信に強い UNIX ワークステーションは、広く使われるに連れ、工業用計算機ではなくなり、どんどんと低価格化して来ました。高速の CPU 技術も普及し、パソコン用の CPU にもその技術が還元され、記憶装置の低価格化も進みました。それにもかかわらず、いわゆるパソコンで主流のオペレーティングシステムは、８ビットや１６ビット時代の影響を強くひきずり、最近のＣＰＵの能力を活かしていませんでした。インテル社の 80386 がマルチタスクを強力に支援するように設計されていることなどを知らされず、多くの人は未だに 386 を速い８ビットや速い１６ビットＣＰＵとして使っています。これではあまりにＰＣが可哀相です。

UNIX ワークステーションは個人で持つには高すぎるとしても、個人で手の届くパソコンがＷＳに並ぶ能力を持ち始めたのに、それを活かせないとは、何たる不幸でしょう？パソコンを活かす商用の UNIX も個人には投資額が大きすぎると、 UNIX の味を知った人々の不満は高まって来ました。中には、どうにも我慢し切れずワークステーションを買ってしまうひとさえ出て来ました。 Gnu プロジェクトは「フリー」なＯＳの実現を目指して進んで来ましたが、ＯＳそのものは、なかなか出来て来ませんでした。しかし世界は広いものです。そんなときに立ち上がったのがフィンランド人の Linus Torvalds さんでした。 386 の機能を活かして、 Gnu プロジェクトの C コンパイラを使える程度の小さなＯＳなら作れるはずだと一気に書き上げたものが多くのハッカーに支持され、商用の UNIX に劣らぬ、現在の Linux までに急成長したのです。既に広がっていた世界規模のネットワークが Linux を育てました。このおかげで世界中のコンピュータマニアが協力して自由なＯＳを成長させることが出来たのです。

そして、 Linux はコンピュータの専門家の手を離れて歩き出しました。 Linux は安定に動作し、頻繁なバージョンアップをしなくてもすむように成ってきたのです。その時にＰＣで使える Linux を待っていたのは、偉大なる素人集団です。とにかく使いたいという気持が一杯でしたが、 Linux を使うには「多少の UNIX の知識」が必要でした。「専門家向けの解説では分かりにくい」と、今までのパソコンの使い方とのギャップを埋めてくれる手引きを誰もが求めていたのです。そこで、 Linux の自由の精神に賛同した人の中で文書の整備に立ち上がったのが Matt Welsh さんでした。 UNIX の上級者だけではなく、 UNIX を知らない潜在的ユーザに向けて書かれたのが「Linux Installation and Getting Started」です。

さて、日本では、１６ビット時代の初期には漢字を使うために特殊なハードウェアが必要でした。ディスプレイは高解像度で専用の ROM を持ったパソコンが生まれたのは当然でしょう。当時、日本のパソコンは海外のＰＣをしのいでいました。しかし、海外では激しい競争の結果、３２ビット高速ＣＰＵ時代を迎え、ディスプレイカードもどんどん進化しました。気が付くと日本のパソコンのディスプレイの解像度はとっくに追い越され、ＰＣのレベルは特殊なハードウェア無しで問題無く日本語を扱う UNIX ワークステーションに追い付いていたのでした。こうなると、「I can’t speak English.」と言っている場合ではありません。 UNIX の味を知り、自分のコンピュータでも UNIX を使いたいという人々は、徐々に Linux を使い始め、日本語ソフトを移植して行きました。おかげで、さらに多くの日本人が Linux を使いたいと考えました。また、「自由の文化に貢献したい」と有志が集まり、日本語関連の文書を整備し「Linux Installation and Getting Started」などを翻訳して行ったのです。その結果生まれたのが「Linux ことはじめ」です。自由なＯＳを少しでも多くの人に堪能して頂きたと願い、日本版では日本事情を加えるだけでは無く、英語版の内容も多少修正してあります。今後の内容更新のさいにも、日本人の嗜好に合わせてわかりやすくして行こうという意味あいもあり、 Matt Welsh さんとわたしの共著の形になったのです。

1994 年 4 月 8 日山崎康宏

英語初版へのまえがき

いわゆる OS (Operating System) として、 MS-DOS がインテルの 80386 や 80486 系列の CPU を支配してきたというのは、まことに残念なことです。このような古い OS では最近の CPU の実力を出し切ることができないからです。しかも、商用 UNIX や OS/2 などのもっとよい OS は巨大なうえに値が張るのですから困ったものです。多くの人がこんな状況で悩んでいました。「IBM PC の救いの道はいずこにあるのだろうか？」「誰が商用 OS の足かせをはずしてくれるのだろうか？」「この肝心なときにリチャード・ストールマンさんはどこへ行ってしまったのだろうか？」と...

地平線にはマイクロソフトと IBM の暗雲が垂れ込め、状況は絶望的に思われました。しかしついに、ヘルシンキのフィヨルドの向こうから意外な救世主が現れました。 OS のカーネルを手に、多くのプログラマーやベータテスターなどの荒者どもを引き連れて、 Linus Torvalds さんがやって来たのです。この OS こそが 386 用の UNIX クローン「Linux」だったのです。

わたしは、この本でこの素晴らしい OS の片鱗を伝えられたらと思っています。 Linux は最近まで整理されていなかったので、自分の PC で使ってみることが出来たのは UNIX に詳しくてかなりコンピューターが得意な人だけでした。このような状況を何とかしようと、これまでにも文書を整備する努力がされてきました。古くなって互いに矛盾するようになってしまった Linux 関連文書の密林をかき分け、山刀を持たない初心者でも迷わずに進める道を切り開く努力をしてきたのです。しかし、いったん密林を焼き払ってしまい、ゼロからやり直すほうがよい場合もあるのです。この本はそのような破壊と再生のタマモノなのです。

ついに、今まで我慢していた凡人でも大抵の 386/486 PC に Linux をインストールして動かすことができるようになったのです。 UNIX など見たことも聞いたことも無い人でも、本物のマルチタスク・ X Window System ・ TEX ・無数の GNU ソフトウェアなどの美を堪能することができるようになったのです。しかも、それには一銭もいらないのです。これぞフリーソフト愛好家たちの夢であると言えるでしょう。そのうえ、ここには UNIX の開発に手を染めてみたかった人々にとっての様々な参加の機会があります。カーネルのプログラミング・ソフトウェアの移植・マニュアルの執筆・バグの修正などの色々な仕事があるのです。また、メモリのセグメントによる制限やニセ物の 32 ビット環境などにイライラしていたプログラマーのための救いもあるのです。 Linux は MS-DOS の世界から UNIX の新世界へと逃げだした改宗者のための新天地なのです。

この 2 年間、わたしたちは Linux の成長を見てきました。 Linux は、ひとりのハッカーが実験的に書いてみた OS からはじまり、多数のソフトウェアの対応や愛用者・プログラマーの支援などによって、全ての機能を装備した UNIX 互換ソフトウェアへと成長してきました。 Linux は、現時点で既に、世にあるフリーソフトウェアのうちでも最大級の成果といえるでしょう。わたしは Linux の更なる躍進をひたすら楽しみにしています。これを革命と呼ばせてください。きっと世界が変わるでしょうから。では、心優しき読者の皆さんに Linux を提供します。それはやがて使用料をとる OS への報復戦で、頼もしい仲間になってくれるでしょう。さあ突撃！

Matt Welsh 1993 年 8 月 5 日

対象とする読者

この本は自分のパーソナルコンピューターに Linux をインストールしたいと思っているすべての人を対象にしています。読者はパーソナルコンピューターと MS-DOS などの OS についての基本的な知識を持っていると想定していますが、 Linux や UNIX については何も知らないとして話を進めています。

章だて

この本は次のような章から構成されています。

第 1 章まえがきでは Linux とは何か、何ができるのか、そしてそれを動かすためには何が必要なのかを述べています。

第 2 章 Linux の入手では郵便やインターネットの FTP を用いて Linux を入手する方法について説明します。ここでは代表的な Slackware 版や SLS 版などの Linux と日本語拡張キット (JE) について簡単に述べています。詳しくは、付録 ??を見てください。

第 ?? 章 Linux のインストールでは Linux をどのように導入するか、つまりハードディスクのパーティションの切り方からファイルシステムの構築、そしてソフトウェアのインストールまでを説明します。ここでは、一般的なことがらを述べます。

第 3 章 Linux 入門では UNIX の経験のない人のために Linux の使い方のを解説しています。 UNIX を使ったことがある人は、この章の事柄には馴染みがあるでしょう。

第 4 章システム管理入門は、 Linux におけるシステム管理の重要なところを紹介します。これは UNIX のシステム管理の経験がある人にとっても、 Linux でのシステム管理の特徴を知る上で役立つ内容でしょう。

第 5 章進んだ使い方では Linux に実装された X Window System や TCP/IP ネットワーク機能など多くの高度な機能について紹介しています。

第 6 章日本語拡張キットは Linux 用日本語拡張キットに関する概説です。関連情報の入手法や、具体的な内容の紹介が含まれています。

付録 ?? 日本事情は Linux 関する日本事情の詳説です。関連情報の入手法や、 JF プロジェクトの案内も含まれています。

付録 A ちょっとしたヒントなどでは Linux をハードディスクから導入する方法や、 Linux で複数のファイルシステムを使う方法など、新しく Linux システムを導入する時に役立つ情報を提供します。

付録 B 参考文献と情報の入手は Linux についての情報の入手先の一覧です。ニュースグループ・メーリングリスト・オンライン文書・市販の本などについての一覧があります。

付録 C FTP の使い方と FTP サイトはインターネットから FTP でファイルを入手する方法についての解説です。

付録 D GNU 一般公有使用許諾書には GNU 一版公有使用許諾 (通称 GPL) の日本語訳があります。 Linux は GPL のもとに配布されていますので、 Linux ユーザーにとってこの条件を理解するのは重要なことです。時々、 Linux 関連のニュースグループで GNU 一版公有使用許諾に対する議論もされています。

謝辞

この本を作るのには長い時間がかかりましたが、その間多くの人たちの協力がありました。特に、第 3 章は Larry Greenfield ・ Karl Fogel 両氏の初版のおかげですし、第 4 章は Lars Wirzenius 氏のおかげです。また、このマニュアルの LaTEX のスタイルファイルも書いていただいた Michael K. Johnson 氏は Linux 文書作成プロジェクト (LDP) 全般に渡ってお世話になっています。みなさん、本当にありがとうございました。さらに、 LDP に興味を抱き、協力していただいた O’Reilly and Associates 社の Andy Oram ・ Lar Kaufman ・ Bill Hahn 各氏にも感謝しています。そしてもちろん、 Linus Torvalds 氏や Peter MacDonald 氏をはじめとする多くの活発な Linux 関係者には特に感謝しています。彼らがいなければ、この本もできていなかったでしょうから。

日本語版について

「Linux ことはじめ—」は、山崎康宏を調整役として JF プロジェクトで作成されました。この本は、 Linux 文書作成プロジェクト (Linux Documentation Project: 通称 LDP) で作成された「Linux Installation and Getting Started」を JF プロジェクト（代表：小野徹）で翻訳したものに、ガイドワーキンググループの手による「JE-HOWTO」を元にした日本語拡張キットの解説と小野徹さんの「JMETA-FAQ」の一部を加えた上、山崎康宏が編集・加筆・修正したものです。

「Linux Installation and Getting Started」の翻訳に参加した JF プロジェクトのメンバーは次の通りです。

表 0.1: 翻訳に参加したメンバー

名前電子メール
えっぐれす（山崎信明）JAC01627@niftyserve.or.jp
播口陽一 hariguti@lsidiv.kawasaki-steel.co.jp
ぺー（中込知之） NBB02702@niftyserve.or.jp
三木邦子 kuniko@dante.ori.u-tokyo.ac.jp
箕浦逸史 JBE03235@niftyserve.or.jp
山崎康宏 hiro@ice3.ori.u-tokyo.ac.jp

ガイドワーキンググループの連絡先は次の通りです。

表 0.2: ガイドワーキンググループ

Guide-WG je@roy.dsl.tutics.tut.ac.jp

JF プロジェクトでは、 Linux 関連日本語文書の整備を目的に、ニュース及びメーリングリストでなされる問答の整理・英文の HOWTO 文書郡などを元にした日本語版作成・独自の解説文書の作成などを行なっています。 JF プロジェクトに興味のある方は、付録 ??を参考にしてどんどん参加してみてください。

また、この本に関する御意見・御感想・御質問・各種の御支援などは、遠慮せずに山崎康宏までお送りください。

山崎康宏電子メール： hiro@ice3.ori.u-tokyo.ac.jp

現住所： 2696 Bloor St. W., Apt B3, Toronto Ontario, Canada M8X 1A5 自宅：〒 270 千葉県松戸市日暮 4-13-17 銀行口座：第一勧業銀行吉祥寺支店 ....... :-)

英語版作成スタッフついて

Linux 文書作成プロジェクト (LDP) では著者・校正者・編集者たちが、ゆるやかな絆のもとで Linux マニュアルの決定版を制作しています。 Lars Wirzenius 氏と Michael K. Johnson 氏の協力のもとで Matt Welsh がこのプロジェクトの調整役をしています。

この「Linux ことはじめ」の元になった「は Linux 文書作成プロジェクトが配布するいくつかのマニュアルのうちのひとつにすぎません。この他にも、「Linux ユーザーの手引き (Linux User’s Guide)」・「システム管理者の手引き (System Administrator’s Guide)」・「カーネルハッカーの手引き (Kernel Hacker’s Guide)」などがあります^{1}。これらのマニュアルは全て LaTEX のソースファイルおよび Postscript 出

力形式で、 tsx-11.mit.edu という anonymous FTP サイトの /pub/linux/ALPHA/LDP というディ

レクトリから入手可能です。

Linux の関連文書を改善するために、 LDP に参加したいという人は誰でも歓迎します。インターネットの電子メールが使えるならば、 Linux-Activists メーリングリストの DOC チャネルに参加することができます。それには次のアドレスに、

     linux-activists-request@niksula.hut.fi

行頭に次のような行を書いたメールを送ってください。

     X-Mn-Admin:  join DOC

何かあれば、気軽に著者またはプロジェクトの人に尋ねてください。このマニュアルへの質問・手紙・金銭・アイデアなども歓迎します。 Matt Welsh にはインターネットの電子メールで mdw@sunsite.unc.edu または

205 Gray Street Wilson, N.C. 27893 U.S.A.

で連絡できます。 UNIX は Unix System Laboratories の商標です。 Linux は商標ではなく、 UNIX^{TM}や Unix System Laboratories とは一切関係ありません。

1 以上日本語題名は仮のもので、必ずしも日本語版があるわけではありません。

「Linux ことはじめ」は、山崎康宏と Matt Welsh に著作権があり、配布条件は以下に翻訳された「Linux Installation and Getting Started」の配布条件に準じます。「Linux Installation and Getting Started」を「Linux ことはじめ」と読み換えてください。 Copyright \begin{matrix}c \\ ◯ \end{matrix} 1994 Yasuhiro Yamazaki 2696 Bloor St. W., Apt B3, Toronto Ontario, Canada M8X 1A5

hiro@ice3.ori.u-tokyo.ac.jp

「Linux ことはじめ」の付録 6はガイドワーキンググループに著作権があり、付録 ?? 「JMETA-FAQ」は小野徹に著作権があります。著作権表示はそれぞれの付録内に銘記されています。「Linux ことはじめ」のうちそれ以外の部分の多くは、 Matt Welsh に著作権のある「Linux Installation and Getting Started」の翻訳に基づいています。「Linux Installation and Getting Started」は、以下の通り Matt Welsh に著作権があります。 Copyright \begin{matrix}c \\ ◯ \end{matrix} 1993 Matt Welsh 205 Gray Street NE, Wilson NC, 27893 USA

mdw@sunsite.unc.edu

「Linux Installation and Getting Started 」は以下の条件を満たすかぎりにおいて、その一部または全部を複製し、配布することができます。

0. 著作権表示とこの配布許可の表示を変更しないこと。一部のみを配布するときはこれらを含めること。

1. 「Linux Installation and Getting Started 」の翻訳または派生物を配布するときは、必ず原著者の許可を得ること。

2. 「Linux Installation and Getting Started」を一部のみ配布するときは、完全なこのマニュアルの入手方法を必ずその配布物中に含めること。そしてその入手可能性が保証されていること。

3. 総説や引用としてこのマニュアルの一部を複製する場合には許可は不要である。ただし参考文献として挙げること。

4. 次に述べるように、 GNU 一般公有許諾はその中に含まれる条件にしたがって複製できる。

5. この文書の一部は別の著作権に保護されている。そのような部分には別の著作権が明記されている。「Linux Installation and Getting Started」の一部を配布する場合に、その部分が別の著作権に保護されている場合はその配布はその条件にしたがうものとする。

学術目的の場合、これらの条件の例外を認めることがあります。上記の住所宛または電子メールで mdw@sunsite.unc.edu 宛で尋ねてください。ここに示した条件は我々の著者としての権利を守るためであり、あなたの教育者・学習者としての権利を制限するためのものではありません。

「Linux Installation and Getting Started」のソースコードは GNU 一般公有許諾によって保護されています。 GNU 一般公有許諾については付録 D を見てください。

表記上の約束

ここに説明する約束はわざわざ説明しなくとも分かるかと思いますが、一応、分かりやすいように一覧にしておきます。

太字新しい概念・注意点・重要語句などを強調するために使います。

italics (イタリック体)

下の Typewriter の項の例にあるように、ユーザーが打ち込んだコマンドなどを表します。

⟨slanted⟩ (斜体)

変数などを、特にコマンド行であらわすのに使います。例えば

ls -l ⟨foo⟩

のように使います。ここで ⟨foo⟩ は /bin/cp のようなファイル名を表します。

Typewriter (タイプライター体)

以下のように画面の表示をあらわすのに使います。

$ ls –l /bin/cp

     -rwxr-xr-x  1 root    wheel    12104 Sep 25 15:53 /bin/cp

タイプライタ体は C のプログラムやシェルスクリプトなどのソースコードを表したり環境設定ファイルなどの一般的なファイルの内容を表したりするときにも使います。分かりやすくするために、細線の枠で囲むこともあります。

キーはそのキーを押すことを示します。次のような形でよく出てくるでしょう。

return キーを押してください。

◇ 本文の余白につけたこの記号は、上級者用ゲレンデをしめす黒い菱形マークと同じで、「危険」・「要注意」といった意味で使います。これがある段落は気を引き締めて読んでください。

第 1 章

はじめに

この本は「 Linux 」に関する解説書です。 Linux は 80386/80486 CPU を搭載したコンピューターで動く、フリーな UNIX 互換オペレーティングシステム (OS) です。わたしがこの本を書いた目的は明快です。以前は、古びた文書とソフトウェアの山をかき分けて目的のファイルを探しだし、何メガバイトものファイルをネットワークから入手し、すべてうまく動いてくれるように祈るというやり方で何とかなっていました。しかし現在では、 Linux は多くの人に使われるまでに成長し、もはやこのようなやり方は通用しなくなってきたのです。驚くほど多くの MS-DOS ユーザーや OS/2 ユーザーが Linux に移行しようとしており、そのほとんどの人が UNIX の使用経験がありません。そこで、 Linux のインストール方法と初歩的な使い方の案内を一冊の本にしてお届けしようというのです。

Linux はインテルの 80386 や 80486 などを搭載した PC で動きます。 TEX をはじめ、 X Window System ・ GNU C/C++ コンパイラ・ TCP/IP 通信手順など、幅広いソフトウェアに対応しています。 UNIX の持つ様々な機能をきちんと実装していて、 GNU 一般公有使用許諾書 (付録 D参照) のもとで自由に配布されています。それらについての詳しい説明に入る前に、おおまかな話をしておきます。

1.1 この本について

この本では、次のことを説明しています。

• Linux とは何か。

• Linux の入手法とインストール方法

• UNIX を使ったことのない人にもわかる Linux 入門

• Linux のシステム管理の基本

• ソフトウェアのインストールや更新の方法

この本を読むには Linux や UNIX の知識は要りませんが、インテルの CPU を使ったパーソナルコンピュータを多少なりとも使ったことのある人を対象にします。また MS-DOS や Microsoft Windows になじみのある人は、その知識が役立つでしょう。

UNIX を使ったことがる人には、第 2 章「Linux の入手」から第 ?? 章「Linux のインストール」までを読めば大丈夫でしょう。第 5 章も、さらに高度な Linux の面白い機能について書いてあるので、役に立つでしょう。その他の章は、 UNIX に馴染みのない人のための説明になっています。

1.2 Linux と UNIX

UNIX は多くの機関により配布・販売されており、世界中のコンピューターでもっとも広く使われている OS です。もともとは、中・大型計算機用のマルチタスク OS として開発され、 1970 年代中頃までに基本的な部分が出来上がりました。比較的無愛想な上に標準化されているわけでもない (何種類かの UNIX が存在する) にもかかわらず利用者を増やし続け、今では世界中で最もよく使われている OS といわれるようにまでなりました。

UNIX の人気の本当の秘密は何なのでしょうか。それは、多くのハッカーたちが UNIX こそが真の正当派 OS であると考えていることでしょう。 Linux も、自分の OS を作ってみたいと望む多くの (そして今も増え続けている) ハッカーたちによって開発されてきたのです。 UNIX の開発方針は、 Doug Gwyn さんの次の言葉にうまく表されています。「UNIX は人々に間抜けな失敗をさせないように設計されたのではない。そんな設計をしてしまったら、人々の創造力も摘みとられてしまうからです。」多くの UNIX ハッカーたちはこれに同意するでしょう。

UNIX には多くのバージョンがあり、パーソナルコンピューターからクレイの Y-MP といったスーパーコンピュータにいたるまで、多くの計算機に対応しています。しかし、パソコン用の UNIX は、大抵が非常に高価な上に扱いが厄介なのです。例えば、これを書いている時点で、 386 PC 用の AT&T 製 System V UNIX の１台向け使用料が、 1500 ドルもするのです。

1.2.1 Linux がやってくる

Linux は配布が自由な UNIX 互換 OS で、もともとはフィンランドにあるヘルシンキ大学の Linus Torvalds ^{1}さんによって作られました。その後、インターネット上で活躍する多くの UNIX プログラマーや天才たちの手によって発展してたのです。手作りの UNIX カーネルを解析する知識と意欲があり OS を改良する能力がある人なら、だれでも自由に開発グループに加わることができるのです。 Linux のカーネルは AT&T などに所有権のあるソースコードは一切使っていおらず、 Linux 関連の多くのものはマサチューセッツ州ケンブリッジにある Free Software Foundation の GNU プロジェクトで開発されたものです。それでも、世界中のプログラマーの貢献によって Linux のソフトウェアがどんどんと蓄積されてきてたのです。

Linux は商用 UNIX の持つほとんどすべての機能を備えているのみならず、既存の UNIX にはない特徴も持っています。 IEEE POSIX.1 の標準仕様に対してほぼ完全な互換性を持った上に、さまざまなソフトウェアの移植性を念頭において発展してきており、様々な UNIX の標準仕様を満たしています。また、 Linux はあなたのコンピューターのすべてのメモリーを有効利用します。事実上、扱えるメモリー量の制限や厄介なセグメントもありません。 80386 のプロテクトモードで動作し、本当の 32 ビット OS としてコンピューターを制御します。あまり知られていないことですが、 80386 や 80486 は UNIX のようなマルチタスク OS が使いやすいようにと設計されています。それなのに、 MS-DOS のバージョン 6.0 でさえこの機能を活用していないのです。

「UNIX は巨大で使いにくくハードディスクやメモリを途方もな必要とする」と思っている人がいるようですが、 Linux ならそのようなことはありません。 Linux は小さく・速く・柔軟性に富んでいます。実際、 IBM の OS/2 よりも少ない資源で動き、巨大なアプリケーション (たとえば Microsoft Word とか Lotus 1-2-3 など) を含む MS-DOS や Microsoft Windows のシステムよりも少ないディスクスペースしか必要としません。しかも、ネットワーク・マルチタスク・その他の機能を始めから備えています。 Windows NT で「新技術」といわれているものもかなりあります。そもそも、 UNIX は (そして今や Linux も) この「新技術」を 15 年以上にわたって実装してきたのです。フリーでないソフトウェア業界ではいまだにその技術を追いかけているのです。

Linux を使うに際しては、これが「ハッカーのためのオペレーティングシステム」であることを忘れてはいけません。つまりハッカーがハッカーのために開発してきた OS なのです。ハッカー向けにではなくお客様の要望に合わせて設計された商用の UNIX とは根本的に違うのです。商用 UNIX は箱から出すとすぐに使えることが期待されますが、 Linux では必ずしもそうはいきません。

1 torvalds@kruuna.helsinki.fi.

このため、初心者は Linux を使い始めるとすぐにイライラが溜るかも知れません。それは単に UNIX の知識が不足しているからなのです。 UNIX システムの設定をして立ち上げるという作業は、 UNIX に何年も馴染んでいる人でさえなかなか経験する機会のないことなのです。 Linux は UNIX の世界へやって来た人たちに、自分のシステムを持つという機会を与えているのです。誰もそれが簡単であるとは言いません。

自分の UNIX システムを動かすには多くの時間と努力（と問題を解決する一種の技）が必要です。 SLS 版のような標準的な Linux セットでさえも、全てをうまく動かすには多少の環境設定をしなくてはならないでしょう。 UNIX に慣れた人にとっては、問題点を見つけ出すのは簡単なことでしょう。しかし、 UNIX の初心者にとっては、 UNIX の海に飛びこむ前に知らなければならないことがたくさんあるのです。

思いきって、 Linux は万人のためのものでは無いと考えてください。多くの初心者はいきなりマッサカサマに飛び込んでしまうでしょう。ちゃんと頭を出して浮かんでいるために、 UNIX の使い方とシステム管理のわかりやすい解説書を是非入手してみてください。この本では、 UNIX の使い方とシステム管理の入門方法を解説しますが、必要最小限のお話しか出来ません。

Linux 文書作成プロジェクト (LDP) ではこの困難を解決するために努力しています。やがて LDP の「Linux 利用者の手引き」 (Linux User’s Guide) と「Linux システム管理者の手引き」 (Linux System Administration Guide が入手できるようになるでしょう。それまでは他本などを参考に知識を仕入れてください。

詳しくは付録 B にある、適当な UNIX の参考書などの情報入手先を参照してください。

1.3 Linux の著作権について

Linux は GNU 一般公有使用許諾 (General Public Licence) によって著作権が保護されています。 GNU 一般公有使用許諾は GPL や copyleft などとも呼ばれます。この使用権は Free Software Foundation によって全てのプログラマーが「フリー」なソフトウェアを書けるようにと作られたものです。ここで「フリー」というのは単に「無料」という意味だけではなく「自由」という意味も含みます。 GPL はそのようなフリーソフトウェアをいくつもの方法で保護しています。まず、作者がそのソフトウェアの著作権を保持することを認めています。そして、他人がそのソフトウェアを入手して、変更したり他のプログラムの土台に使うことを認めています。さらに、他の人がそのソフトウェアやそれを改変したものを配布したり、販売したりして利益を得ることことを認めているのです。しかし、そのような再配布や再販売の時にも、受け取り手にも同じ権利が保証されなければなりません。つまり、フリーソフトウェアを売ったときには、そのソースコードも追加料金無しで提供しなくてはならず、買い手はそれを改変したり再販売したりできるのです。

これをはじめて聞いたときには、馬鹿げているように思えるかもしれません。どうして他の人が無料でコピーできるものを利益のために売るのでしょうか？しかしこれが本質的な点なのです。たとえば誰かが非常に多くのフリーソフトウェアを CD-ROM にまとめて、世界中に配布したいと思ったとします。その人はそれにかかる経費と商売を考えた料金を設定する必要があるでしょう。実際、いくつかの組織が Linux を CD-ROM に入れて配布しており、そこから利益を得ています。 Linux の原作者はその利益のおこぼれにさえあずかれないかもしれません。これは GNU 一般公有使用許諾によって認められてるからです。フリーソフトウェアにとって重要な点はお金を稼ぐことではありません。誰も某利をむさぼったりしていません。これが、作者と使ったり売ったりする人との間の共通した考え方なのです。

もうひとつ大事なことがあります。 GPL で保護されているフリーソフトウェアは、 Linux も含めていかなる保証もありません。しかし、個々の販売者は保証付きでソフトウェアの保守契約を提供してもかまいません。しかし、ソフトウェアの保守契約を購入しない限り、保証は一切ないのです。仮にあなたが使ってみたフリーソフトウェアがひどいものであって、システムから全てのデータを消し去ったとしても、作者にも配布者にも法的責任は一切ないのです。^{2}

一般公有使用許諾で保護されたソフトウェアはシェアウェアでもパブリックドメイン (PDS) でもありません。またそれらの用語はフリーソフトウェアのことを正しく言いあててもいません。 GPL 全文の日本語訳が付録 D にいれてありますので読んでみてください。要約すれば、 Linux は好きなだけコピーしてもかまいませんし、そしてそれを改変することも、改変したものを独自のバージョンとして配布することも自由です。しかし、あなたに認められた権利と同じ権利を他の人から奪うことはできません。 (つまりそのソフトウェアもフリーソフトウェアにしなくてはなりません。 ) さらにそのソフトウェアには原作者の名前も入れておかなくてはなりません。

1.4 Linux の特徴

では Linux が他のシングルユーザー OS (MS-DOS など) や、他の PC 用 UNIX のよりも優れている点を挙げてみましょう。

• 完全なマルチタスク動作と 32 ビット機能 Linux は本当のマルチタスク OS です。他の UNIX と同じく、複数のユーザーが一つのマシン上で同時に複数のプログラムを実行できます。 50 MHz の 486 システムで動いている Linux システムは、 Sun や DEC など多くのワークステーションの中下位機種と同程度の処理能力があります。また、 Linux はインテルの 80386 や 80486 のプロテクトモードの機能を使い、 CPU の力を存分に発揮させる真の 32 ビット OS です。

• GNU ソフトウェアのサポート Linux では GNU プロジェクトで作られた多くのソフトウェアを利用可能です。例えば、 GNU C, C++ コンパイラ・ gawk ・ groff などです。実際、 Linux で使われている基本コマンドの多くは GNU ソフトウェアなのです。

• X Window System X Window System は UNIX マシンの事実上の標準グラフィック環境です。 Linux では、完全な X Window System(XFree86) が利用できます。 X Window System は非常に強力なグラフィックインターフェイスで、多くのアプリケーションをサポートしています。たとえば一つの画面の別々のウィンドウで、同時に複数のログインセッションを行うことができます。アプリケーションには、 Seyon という強力な通信プログラム・ Ghostscript という Postscript 言語プロセッサー・有名なゲームの X Window 版である XTetris などが使えます。第 5.1 節に X Window System の紹介があります。

• TCP/IP ネットワーク機能 TCP/IP (Transmission Control Protocol/Internet Protocol) とは、世界中の大学や企業の何百万台ものコンピューターからなる全世界規模のネットワーク「インターネット」での通信に使われている通信手順一連のプロトコルのことです。あなたの Linux PC をイーサーネットで接続すれば、インターネットやローカルエリアネットワーク (LAN) にアクセス可能です。また SLIP (Serial Line Internet Protocol) を用いればモデムを介た電話回線でインターネットに接続できます。第 5.3 節には Linux の TCP/IP ソフトウェアの利用法を紹介してあります。

• 仮想メモリと共有ライブラリ Linux はハードディスクの一部を仮想メモリとして使うことで、実際の RAM よりもたくさんのメモリーがあるかのように利用できます。また、共有ライブラリー (shared library) を利用する機構をも備えており、標準的なサブルーチンを使う様々なプログラムがこのライブラリのコードを実行時に参照します。これによってそれぞれのアプリケーションが同じルーチンを別々に保持する必要がなくなり、ディスク容量を大幅に節約することができます。

2 こんなことは、きっとないでしょうけどね。

1.5 必要なハードウェア

他の PC 用 UNIX とは異なり、 Linux は非常に小型の OS です。 2HD の 5.25” フロッピーディスク一枚で起動できるほどです。しかし、完全な Linux システムを動作させるには、もう少しハードウェアが必要となります。この節では、それらを説明します。

Linux は継続的に拡張がなされており、日夜新しい機能が付加されていますが、動作機種は開発者が使える機種に限られてしまいます。たとえば Linux 開発者のだれひとりとして Foobaz 社の Net-O-Driver 3000 カードを使う人がいなかったならば、そのボードは使えないことになるでしょう。ただし、「汎用性のある」ドライバというものもあります。例えば Linux の IDE ディスクドライバは全ての IDE ハードディスクやアダプタで動作するはずです。

お気に入りの周辺機器が Linux でサポートされていない場合でも、その機器を使うためには、専用のドライバを書けばいいのです。その機器と公開されている技術情報次第で、簡単な場合もあれば難しい場合もあるでしょう。たとえばあるハードウェアメーカーは自社のハードウェアの MS-DOS, Windows 用のドライバを自社で作り、外部には仕様の詳細を公開していません。すると Linux 用のドライバを作ることは、不可能でないにしても難しくなります。 (こういうやり方もメーカーも「ひどい」ですよね。 )

1.5.1 推奨する機器構成

次に Linux を使うために推奨するハードウェアを列挙しています。もしもこれから新しいシステムを買おうとしているならば、ここの解説に従って買えばよいでしょう。次節では、現在開発中のハードウェアドライバや、動作しないことが知られているハードウェアについて説明します。

• インテルの 80386 や 80486 CPU 搭載した PC。数値演算コプロセッサはなくてもかまいませんが、なるべくならあるほうがよいでしょう。 (80386 ならば 80387 コプロセッサが別途入手できるでしょう。それをマザーボードのソケットに挿入すればよいのです。 80486 の場合は 486 の中にコプロセッサが内蔵されています。例外は 80486SX で、これはコプロセッサが内蔵されていません。 ) 数値演算コプロセッサがなければ、 Linux カーネルは浮動小数点演算をエミュレートします。あれば、浮動小数点演算がハードウェアで扱われるので、アプリケーションによっては非常に速くなるでしょう。

386SX ・ 486SX ・ 486DX ・ 486DX2 などどれでも動作することが報告されています。ただし、 (サイリクスなどの) 互換チップよりもインテル純正の CPU の方をお薦めします。 ”Intel Inside” というロゴがついている機種を探してください。インテルのペンティアムでも動くそうです。

• ISA, EISA またはローカルバス仕様の PC でなくてはなりません。これらはマザーボードの仕様で、 CPU がどのようにしてハードウェアと情報をやりとりするかを規定したものです。 EISA は ISA バスの新版で、いくつかの機器では高速化されていることが報告されています。ローカルバス仕様はこの 3 つの中では一番速いもので、 CPU がビデオカードやその他のドライブと直接情報を交換します。ローカルバス仕様にするならば、 VESA ローカルバスをぜひお薦めします。 (ほとんどは VESA だと思いますが)

IBM PS/2 シリーズのようなマイクロチャネル技術 (MCA) を使った機種には現在のところ十分な対応が出来ていません。

• 最低限 4 MB （メガバイト）の RAM 。 2MB しかメモリーがなくても動かないわけではありませんが、 Linux セットのなかにはインストールの際に 4MB 必要とするものがあります。「メモリーはスピードなり」ですから物理的に RAM をたくさん用意しておけば、あとで正解だったと思うでしょう。あなたがパワーユーザーなら 8MB にしてみてください。ほとんどのアプリケーションでは充分すぎるくらいでしょう。ただし、 X Window System 上で大きなアプリケーションソフトをバシバシ使うなら 16MB あってもいいかも知れません。

• AT 互換のハードディスクドライバ。これには MFM, RLL, ESDI そして IDE コントローラが含まれます。 SCSI コントローラの多くも使えます。これらのアルファベットで表された用語はコントローラカードを介してハードディスクと情報を送り合う方法をあらわすものです。たいていのコントローラカードは IDE か SCSI でしょう。 XT 標準コントローラ用のドライバは現在開発中です。次節を見てください。

• ハードディスク (もちろんあなたのコントローラカードに合ったもの)。 Linux をインストールできるだけの空き容量が必要です。必要な容量は、何を使いたいかと、どれだけ空き容量を残しておきたいかによって変わります。ソフトウェアを少しだけしかインストールしないつもりなら、 10 MB 以下しか必要としません。しかし X Window System を含む多くのソフトウェアをインストールするつもりならば、ユーザー空間も含めて 80 MB か、それ以上を必要とするでしょう。それに加えて仮想メモリとして使用するためのスワップ領域も確保しておいたほうがよいでしょう。これについては第 ?? 章で説明します。

• Hercules, CGA, EGA, VGA または Super VGA などのビデオカードとモニタ。 MS-DOS や Windows で動くものならば、たいていは Linux でもうまく動くはずです。しかし X Window System ではサポートされてないハードウェアがあります。詳しくは第 5.1 節を見てください。

1.5.2 その他の周辺機器

他にも現在 Linux のために開発されているハードウェアのドライバがあります。しかしそれらのドライバを使うためには、大抵はカーネルのソースにパッチをあてなくてはならないでしょう。そのためにはあなたのシステムで Linux が既に動作していなければなりません。

Linux FAQ (Frequently Asked Questions with answers: よくある質問とそれへの解答をまとめたもの) には Linux にドライバ用パッチをあてる方法について述べられています。これについては付録 B も見てください。

Linux はほとんどの携帯用 PC でも動作するでしょう。 (なかには、メモリーの電源供給にソフトウェア割り込みを使っているものもあります。 Linux はまだこのようなコンピュータには対応していません。 ) あなたの持っているハードウェアで Linux が動作するか知るためには実際にためしてみるのが一番でしょう。

1.6 インストール作業のまえに

あなたの持っているハードウェアで Linux が動作するらしいことが分かったら、 Linux を入手してインストールすることは難しいことではありません。しかし多くの読者は、実際に始める前に聞いておきたい質問がまだたくさんあるかと思います。

1.6.1 Linux と他の OS を共存させること

一台ののコンピュータに Linux と MS-DOS ・ OS/2 などの OS を共存させることができます。それぞれの OS はハードディスクの別々のパーティションを独立に使用します。一つのドライブに MS-DOS と Linux をインストールするとしましょう。あるパーティションを MS-DOS に割り当てたら、 Linux には別のパーティションを割り当てればいいのです。 Linux のためにパーティションを切る方法については、第 ?? 節に述べてあります。

起動時に OS を選ぶためには、ハードディスクに書きこまれている MS-DOS の標準ブートローダーを変更するための LILO というプログラムをインストールすればいいのです。 LILO をインストールしておけば起動時に簡単なメニューでどの OS を使うかを選べます。また、標準のシステムを設定しておいて、それを変えたいときだけ shift キーを押して起動するという手もあります。 LILO については第 4.2.2 節で詳しく扱います。

もし OS/2 を使っているならば、 Linux を OS/2 のブートマネージャーから起動することができます。これも第 4.2.2 節に詳しく書いてあります。

1.6.2 Linux で MS-DOS のファイルを扱う

Linux では MS-DOS のファイルにアクセスする方法がいくつか用意されています。ほとんどの版の Linux パッケージには mtools というのが含まれており、 mcopy や mdir といった MS-DOS にアクセスするコマンドが使えます。また、 MS-DOS パーティションやフロッピーディスクを直接マウントすることもできます。この場合は MS-DOS ファイルシステムを使って直接ファイルを扱えます。 (詳しくは、第 5.2 節を見てください。 )

Linux で MS-DOS のソフトウェアを実行するための MS-DOS エミュレーターもあります。 X Window System で動く Microsoft Windows エミュレーターの開発も進んでいます。 MS-DOS エミュレーターは完全ではないので、 Wing Commander で遊べるとは期待しないでください。とはいっても Word Perfect や Lotus 1-2-3 などの多くの普通のアプリケーションは動作するのです。マイクロソフトさん、気を付けたほうがいいですよ。

1.6.3 Linux の読み方

「Linux」という語の発音は、 Linux の世界でも多くの人が頭を悩ませる大問題です。アメリカ人は Linux の作者の Linus という名前を「ライナス」と発音しますので「ライナックス」と発音しがちですが、 Linux は PC 用の小さな UNIX である「Minix」 (ミニックス) との合成語なので、「リヌックス」と発音するのが正しいのです。ちなみに、フィンランド語をご存知の方が「り・ぬくす」という感じの発音が良さそうだといっていました。もっとも仮名で表そうというのに無理があるのですが...

1.7 わからないことに出会ったら

Linux の初心者にアドバイスするのを楽しみにしている人はたくさんいます。導入時や使用時に問題が起こったら、まずはこの本に解説がないかを調べてください。もっとよいのは Linux FAQ と HOWTO 文書集です。これらには、この本では触れられていないことも書かれています。付録 B には Linux FAQ ・ HOWTO をはじめ他の情報源についても書いてあります。

junet のネットワークニュースが読めるなら、 fj.os.linux というニュースグループをの

ぞいてみてください。 USENET には、 comp.os.linux.help ・ comp.os.linux.development ・
comp.os.linux.admin ・ comp.os.linux.misc^{3}といったニュースグループが利用できます。また、ア

ナウンスや重要なお知らせのためには comp.os.linux.announce が利用できます。^{4}ともかく、ニュースで質問をポストするまえに、できるだけ過去の質問を調べてください。大抵の質問はこの本や Linux FAQ そして Linux HOWTO 文書でカバーされているはずです。

またこの本の内容についてでも Linux 一般のことでも、このマニュアルの著者に直接尋ねることもできます。わたしたちは質問やコメントや提案に対しては非常にオープンな姿勢を取っています。 Matt Welsh

にはインターネットの mdw@sunsite.unc.edu 宛で、 Lars Wirzenius には wirzeniu@cc.helsinki.fi
宛で、山崎康宏には hiro@ice3.ori.u-tokyo.ac.jp 宛でメールが送れます。

3

comp.os.linux はもう利用されていませんので、その下の階層を利用してください。もしもこれらにアクセスできないな

らば、ニュース管理者に相談して、利用できるようにしてもらいましょう。

4 ここに送られた文書は査読者がチェックした上で投稿されます。

8 第 1 章はじめに

第 2 章

Linux の入手

この章では、 Linux の入手法を簡単に解説します。具体的にはネットワークで ftp コマンドを使う方法、店頭や郵便で CD-ROM として入手する方法、その他の方法に分けて説明します。

2.1 ftp による入手

この節では、 Linux を ftp で入手する方法を解説します。世界中の多くの anonymous ftp サイトに、 Linux があります。 anonymous FTP サイトというのは、 ftp というプログラムを使っうと誰でも利用できるファイルの貯蔵所です。普通は、 anonymous(匿名と言う意味) というユーザー名を使い、電子メールのアドレスをパスワードとしてログインします。詳しい使い方は、付録 Cを見てください。

表 2.1は、世界中の代表的な Linux の ftp サイト一覧です^{1}。

tsx-11.mit.edu と、 fgb1.fgb.mw.tu-muenchen.de が、 Linux の GCC の公式サイトです。この表のサイトのうち、いくつかはミラーサイトです。ミラーサイトとは、どこかのサイトのコピーを置くサイトです。定期的に本拠地をのぞきにいって変更があればミラーサイトでも更新するように設定されています。

また、 sunsite は tsx-11 にはないものも多数おいています。開発者向けの最新カーネルは、 nic.funet.fi に公開されています。日本にも多くの ftp サイトで入手できるので、なるべく近くから入手してください。

日本で tsx-11 のミラーをしているのは、上にある srawgw.sra.co.jp と

        ftp.iij.ad.jp                  192.244.176.50, 192.244.176.65

が代表的です。一方、日本語ソフトの最新版は JE(日本語拡張キット) version 0.9.3 (および 0.9.5 β) として、

        colias.tutics.tut.ac.jp        133.15.144.11    /pub/linux/JE

にあります。しかし、より回線のしっかりした、以下のサイトの利用を、お勧めします。

        ftp.kuis.kyoto-u.ac.jp         130.54.20.1
        ftp.cs.keio.ac.jp              131.113.35.20
        wnoc-fuk.wide.ad.jp            133.4.14.3, 133.4.20.2
        ftp.iis.u-tokyo.ac.jp          157.82.96.67

機種別のパッチは、以下の所にあります。 FM-TOWNS 用： 10 第 2 章 LINUX の入手

1 Michael K. Johnson さん (johnsonm@stolaf.edu) の「INFO-SHEET」という文書から引用しました。

表 2.1: 世界の代表的な ftp サイト

サイト名  IP アドレス  Linux ディレクトリー
tsx-11.mit.edu  18.172.1.2  /pub/linux
sunsite.unc.edu  152.2.22.81  /pub/Linux
ftp.funet.fi  128.214.248.6  /pub/OS/Linux
net.tamu.edu  128.194.177.1  /pub/linux
ftp.mcc.ac.uk  130.88.203.12  /pub/linux
src.doc.ic.ac.uk  146.169.2.1  /packages/linux
fgb1.fgb.mw.tu-muenchen.de 129.187.200.1  /pub/linux
ftp.informatik.tu-muenchen.de 131.159.0.110  /pub/Linux
ftp.dfv.rwth-aachen.de 137.226.4.111 /pub/linux
ftp.informatik.rwth-aachen.de 137.226.112.172 /pub/Linux
ftp.ibp.fr  132.227.60.2  /pub/linux
kirk.bond.edu.au  131.244.1.1  /pub/OS/Linux
ftp.uu.net  137.39.1.9  /systems/unix/linux
wuarchive.wustl.edu  128.252.135.4  mirrors/linux
ftp.win.tue.nl  131.155.70.100 /pub/linux
ftp.stack.urc.tue.nl  131.155.2.71  /pub/linux
srawgw.sra.co.jp  133.137.4.3  /Linux
cair.kaist.ac.kr  /pub/Linux
ftp.denet.dk  129.142.6.74  /pub/OS/linux
NCTUCCCA.edu.tw  140.111.1.10  /Operating-Systems/Linux
nic.switch.ch  130.59.1.40  /mirror/linux/sunsite
monu1.ccmonash.edu.au  130.194.1.101  /pub/linux
cnuce arch.cnr.it  131.114.1.10  /pub/Linux

        ftp.kuis.kyoto-u.ac.jp    130.54.20.1     /Linux/Jp-Kit

PS55 ・ PS/V 用：

        scslwide.sony.co.jp       133.138.199.1   /pub
        wnoc-fuk.wide.ad.jp       133.4.14.3, 133.4.20.2
                                                  /pub/Linux/SLS-J/ps55note

なお、 SLS-J for PS/55note (仮称) は、 SLS-1.03 をベースにしたものです。 PC98 用 (試験公開) ：

       namp.kuamp.kyoto-u.ac.jp  130.54.42.3     /pub/linux/linux-pc98

最近「人気急上昇」中の、 Slackware 版 Linux パッケージは日本では、

        ftp.cs.titech.ac.jp       131.112.172.15  /pub/os/linux/slackware
        theta.iis.u-tokyo.ac.jp   157.82.98.129, 157.82.96.67
                                                  /pub2/Linux/slackware

などに置いてあります。

より詳しくて新しい情報が、付録??の JMETA-FAQ にあり、最新版は他の日本語文書とともに上記の ftp.kuis においてあります。

なお、直接 ftp が出来ない人でも、電子メールで入手することも可能ですが、よほど回線が太くないかぎり、文書や不足分のソフトを補うための手段だと思っていたほうがよいと思います。

2.2 CD-ROM による入手

ネットワークが利用できない人は、 CD-ROM が便利でしょう。

待望の「日本語 Linux CD-ROM」が 1993 年 11 月末日に池袋の Laser5 から発売になりました。これは、 IBM PC 用の SLS を中心に、 JE ・ XFree86- 2.0 ・ FM-TOWNS 用カーネル・日本語文書等、様々なバイナリやソースを含んでいて、ちょっと試してみるための、「マウントすればすぐに使えるセット」も入っています。 (ただし、 CD-ROM のまま試してみた場合は『遅い』ですよ)。また、最近では、第２版が発売されました。内容も一層吟味され、２月半ば現在の最新の物をそろえ、 Slackware も入っています。この CD の特徴は、ソースコードも積極的にいれている事と日本の利用者の意見をいち早く反映させている点でしょう。連絡先は：

        代理店： CD-ROM Shop Laser5 ( inquireies for Linux CD with JE )

〒 170 豊島区東池袋 2-652-8 ビッグオフィスプラザ 203

                 電話:03-5952-4639
                 FAX:03-5952-7486   ( FAX: +81 3-5952-7486 )

製作： (株) 五橋研究所〒 232 横浜市南区井戸ケ谷下町 212-2-2F

                 電話/FAX:045-721-1885

また、 Softbank 社の「UNIX USER」誌 1994 年 1 月号の付録として、 SLS 1.03 ＋ JE 入りの CD-ROM が付きました。内容的に古いものも含まれ、初心者には多少扱いにくいかも知れませんが、値段の安さが魅力ですし簡単に入手できるでしょう。 Softbank 社では、この使いにくさを改善すべく (?)、続々と付録 CD に Linux をつけているようです。評判の Slackware も付録に入入ったようですし、今後が期待できるかも知れません。

以下は、代表的な国際的 linux CD-ROM の案内です。なんと、一つ目の Trans-Ameritech の CD-ROM には、 JE まで含まれています。

ます、 Trans-Ameritech です。新し目の CD-ROM 業者ですが、 ”The best Linux plus FreeBSD CDROM ever”の１月版には、最近人気の Slackware (1.1.1) と日本語拡張キット (JE-0.9) が入っています (FreeBSD も)。この他にも、 SLS 版や 386BSD を含んだ CD も発売しているようです。日本からの注文にも素早く対応してくれるそうです。問い合わせ・注文は：

Trans-Ameritech
2342A Walsh Avenue
Santa Clara, CA 95051
phone +1-408-727-3883
FAX   +1-408-727-3882
e-mail: roman@trans-ameritech.com

Softlanding Software(SLS) では、 CD-ROM ・フロッピーディスク・ QIC テープで、配布しています。最新版は 1.05 で、含まれているカーネルは linux-1.0 を機能強化した独自のものです。連絡先は：

Softlanding Software
910 Lodge Ave.
Victoria, B.C., Canada
V8X-3A8
phone +1-604-360-0188
FAX:  +1-604-385-1292

また、 Yggdrasil Computing の Linux/Gnu/X CD-ROM も広く売られています。最新版のカーネルは linux-0.99.13 ですが、もうすぐ５月号が発売予定です。

Yggdrasil Computing, Incorporated
CDROM sales
PO Box 8418
Berkeley, California 94707--8418
phone  +1-510-526-7531

この他に、 InfoMagic Inc から、 Linux を含んだ２種類の CD が販売されています。 Linux CD は１月版が最新かと思います。これは、 tsx-11.mit.edu という Linux の公式 ftp サイトのある日の内容をそのまま納めたもので、 SLS 全体も入っています (内容未確認ですが linux-0.99.14 まで入っていると思います)。この他に、 UNIX CD-ROM があります。これには、 Linux の他 386bsd/netBSD も入っていますが、こちらは７月版が最新と思われ、カーネルはネットワーク改定前の linux-0.99.11 です。

InfoMagic Inc
PO Box 338
Pennington NJ 08534
USA
phone +1-800-800-6613, +1-609-683-5501
Fax   +1-609-683-5502

これらのうち、 Laser5, Yggdrasil, InfoMagic の CD-ROM は、秋葉原などでも入手することもできます。詳しくは、小野さんの JMETA-FAQ を御覧になるか、 IBM-PC を扱っているお店に当たったり、「DOS/V マガジン」の広告などを見たりしてみてください。

2.3 その他の入手方法

まずは、『Linux インストール済 PC』についてです。代表的な構成の PC に、 Linux をインストールし、動く状態で発売しているところがあります。

日本では三重にお店をもつ電脳工房が「PC-UNIX マシン CL-UX」という名前で提供しています。 Laser5 の CD つきだそうです。連絡先は、

電脳工房

〒 514 三重県津市栗真町 16135(三重大学前)

             TEL 0592-32-4033, FAX 0592-32-0705(24h)

通信販売有り

海外には、次のような所がさまざまなハードウェアに、希望に似合わせたインストールをしてくれるところがあります。 Slackware を入れてもらうことも出来ますが、多分、日本語環境 (JE) は無理でしょう (未確認)。

              Fintronic USA, Inc.
              1360 Willow Rd., Suite 205
              Menlo Park, CA 94025
              USA
              fax:   +1-415-325-4908
              email:  linux-sales@fintronic.com

ここの PC に関して、 Internet では、 finger linux-sales@fintronic.com で情報を入手できますが、とりあえず、 Distribution-HOWTO の案内を読んでみてください。

知り合いで、 Linux を持っている人がいれば、貸してもらったり、コピーさせてもらうというのも良いでしょう。 Linux 関連ソフトウエアのほとんどは、たとえウリモノの CD に入った物でも、コピーが許されているはずです。有志によるテープ・ CD での配布や回覧も時々行われています。これらに興味のある人は、 fj.os.linux や Linux メーリングリストなどの Linux 情報源に注意しましょう。

繰り返しますが、より詳しい情報が小野さんの JMETA-FAQ にあります。付録 ?? にあります。 14 第 2 章 LINUX の入手

第 3 章

Linux 入門

3.1 はじめに

UNIX や Linux をはじめて使う人は、システムの大きさや複雑さに少し怯えているかもしれません。世の中には、まったくの初心者用から熟練者用まで、さまざまな人を対象とした、わかりやすい解説書がたくさんあります。しかし、特に Linux を使うための入門書というものはありません。 Linux の使い方の 95% までは他の UNIX システムとそっくりですが、やはりあなたの新しい OS を探索するには、 Linux 用に書かれた入門書に頼りたくなるでしょう。この本はそのための案内役なのです。

この章では細かな問題や、高度な事柄については触れません。 Linux を使い始めたばかりの人向けに書いてあるのです。これを読んでから UNIX に関する一般的な書物を読んでみてください。そうすれば、 Linux と他の UNIX との基本的な違いも理解できるでしょう。

この章はパーソナルコンピュータや MS-DOS に少しなじんでいれば読めるように書いてあります。一見すると UNIX は MS-DOS にとても似ているように思われるでしょう。 (実は MS-DOS は CP/M という OS をモデルに作られましたが、その CP/M は UNIX をモデルに作られたものなのです。 ) しかし、 MS-DOS と似ているのは表面的な特徴だけです。この章は、 MS-DOS を使ったことのない人にでもすべてを理解できるようにと書いてみました。いままでパーソナルコンピュータを使ったことのない人にも、この入門が役に立つと思います。

本題に入る前に、もうひとことだけ言わせてください。実験してみることを怖れないでください。コンピュータは噛み付いたりしませんし、 OS をいじっても何も壊れませんので安心してください。 UNIX にはいくつかの安全機構があって、 root でない一般のユーザー（をここでは仮定してます）はシステムに必要なファイルを破壊したりできないようになっています。万一 OS を無茶苦茶にしてしまっても、もう一度インストールすればいいだけのことです。この段階では何も失うものはありませんから、どんどんいじってみてください。

3.2 UNIX の基本知識

UNIX はマルチユーザーでマルチタスクのオペレーティングシステム (OS) です。つまり、何人もの人が一台のコンピュータを同時に使え、それぞれの人が同時に別々のアプリケーションを実行することができるのです（MS-DOS では、一度にひとりしかコンピュータを使えない上に、一度に一つのことしか出来ませんよね）。 UNIX の場合、 OS に利用者（ユーザー）を判別させるためにログインということをしなくてはなりません。ログインというのは、まずログイン名を入力し、次にパスワードを入力することです。ログイン名はコンピュータを使っている間のあなたの名前で、パスワードは UNIX をあなたの名前で使うための暗証符合なのです。銀行の名義と暗証番号のようなものだと考えればいいでしょう。他の人があなたのログイン名で UNIX コンピュータを使うことはできません。あなたのパスワードは他の人は知らないはずだからです。

ふつう、 UNIX システムではシステム管理者があなたを登録する際、あなたのアカウントを作るとともにユーザー名と初期パスワードをくれます。あなた自身がシステム管理者ならば、ログインする前に自分のアカウントを作らなくてはなりません。この作業ついては、次の第 3.2.1 節で説明します。この本では、ユーザー名「larry」という架空のユーザーを例に話を進めます。本名は Larry ですが、ユーザー名としては全て小文字で登録されているとします。

それぞれの UNIX システムはホスト名を持っています。ホスト名を付けることで、あなたの機械に呼び名と個性と魅力を与えるのです。ホスト名はネットワーク上で個々のマシンを区別するためにも使われますが、ネットワークにつながっていなくとも付ける必要があります。第 4.10.2 節ではホスト名の付け方について触れてあります。この本では mousehouse という名前のコンピュータを例に話を進めます。

3.2.1 アカウントの作成

システムを使う前に、あなたは自分のアカウントを作らなくてはなりません。これは、銀行を使うための口座のようなものです。始めッから用意されているからといって、 root アカウントを通常の利用で使うのはお薦めできません。後ほど第 4.1 節で述べるように、 root アカウントは特権コマンドが使え、システムの保守のためにあるものだからです。

自分のアカウントを作るためには、 root でログインして useradd または adduser コマンドを使います。この手続きについては第 4.5 節を参照して下さい。

3.2.2 ログインの実際

ログイン時には次のようなプロンプト（入力を促す記号）が出ているでしょう。

     mousehouse login:

では、あなたのユーザー名を入力して、 Return キーを押して下さい。ここでの主人公 larry は次のように打ちこむでしょう。

     mousehouse login: larry
     Password:

続いてパスワードを入力します。パスワードは打ちこんでも画面には表示されませんので、注意深く打ちこんでください。打ち間違えると、こんなメッセージが出ます。

     Login incorrect

この場合は、ログインを始めからやり直さなくてはなりません。ユーザー名とパスワードを正しく入力して初めてログインが完了し、コンピュータを使えるようになるのです。あとは、 UNIX の世界を自由に漫遊してください。

3.2.3 仮想コンソール

コンピュータ本体に直接つながったモニターとキーボードのことを、コンソールといいます。 UNIX はマルチユーザー OS なので、シリアルポートにつながった他の端末もあるかもしれませんが、それはコンソールとは言いません。 Linux には、他のいくつかの UNIX と同様に、仮想コンソール (VC: virtual console) があります。これは一つのコンソールを複数のコンソールがあるかの様に使う機能で、これをつかうとコンソールから同時に複数のログインができるのです。

仮想コンソールを試してみるには、まず（前に示したように）ログインしてください。そして、今度は alt-F2 を押してみてください。再び「 login: 」というプロンプトが現れたでしょう。これが 2 番目の仮想コンソールなのです。 1 番目はあなたが最初にログインしたものです。 1 番目の仮想コンソールに戻るには、 alt-F1 を押します。ほら、戻れましたね。

インストールされたばかりの Linux は 1 から 4 までの仮想コンソールがあり、 alt-F1 から alt-F4 までに対応しています。もっとも、 Linux のパッケージによっては、始めから 5 番目移行も使えるようになっているものもあります。これはファンクションキーに一つずつ割り当てて、最大 12 まで増やすことができます。少し使ってみれば、仮想コンソールが非常に便利なことがわかるでしょう。複数の仮想コンソールを使えば複数の仕事を同時にできるわけですから。

仮想コンソールには制限もありますが、これによって UNIX のマルチユーザー環境の能力を実感できるでしょう。一度に一画面しか見られませんが、 1 番目の仮想コンソールで仕事をさせたまま、 2 番目のコンソールに切り替えて別のことを始められるのです。

3.2.4 シェルとコマンド

UNIX の世界を漫遊する時には、シェルを通じて UNIX と対話することになります。シェルとは単にあなたが打ちこんだ指示（コマンド）を翻訳して、 OS に伝えるだけのプログラムです。シェルは MS-DOS の COMMAND.COM と同じような働きをします。単に、 OS とユーザーの仲介役をするのです。このような仲介役には、何種類かあります。例えば、 X Window System はマウスとキーボードを通じてユーザーの指示を受けるものもあります。

ログインすると、 UNIX は先ずシェルを実行するので、そのシェルを通じてユーザーがコマンドを実行させることが出来ます。簡単な例を挙げてみましょう。 Larry がログインして、シェルのプロンプトが出たところです。

     mousehouse login: larry

Password: larry’s password

     Welcome to Mousehouse!
     /home/larry#

「 /home/larry# 」が、コマンドが入力可能であることを表す、シェルのプロンプトです。このプロンプトが表している内容については、後ほど説明します。では、システムになにか面白いことを言ってやりましょう。

     /home/larry# make love
     make:  *** No way to make target `love'.  Stop.
     /home/larry#

打ち込んだ指示の意味は、自分で調べてみてください。コンピュータからの返事は、「目的 love の make のやり方がわからないので、停止します。」というものです。実は、 make は実際にあるコマンドの名前だったのです。シェルはコマンド名が与えられたのでそのコマンドを実行しようとしました。もっとも、残念ながら、あまり友好的な返事をしてくれませんでしたね^{1}。

ここで、「コマンドとは何なのか？」「make love と打ちこんだ場合には何が起こっているのか」と疑問に思うかもしれませんね。じつは、打ち込まれたコマンド行の最初の部分（ここでは make ）が実行されるべき指示の名前（コマンド名）と解釈され、コマンド行の残りの部分はこのコマンドに与えられる付加情報（引数と呼ばれる）と解釈されます。例えば、

     /home/larry# cp foo bar

1

どうでもいい余談ですが、ある MS-DOS 用 C コンパイラに附属の make を使って同様の指示を与えたらもっと面白い

返事が返ってきました。暇な人は、色々とお試しあれ。

の場合、 cp がコマンド名で、 foo と bar が引数と解釈されます。

コマンドを打ち込まれると、それを解釈するのはシェルの仕事です。まず最初にコマンド名を見て、それがシェルの知っている別名や内部コマンドであるかどうか調べます。別名はエイリアスとも呼ばれ、他のコマンドに付けられた別名のことです。内部コマンドとはシェル自身に内蔵されたコマンドのことで、これにはたくさんあるので、後でくわしく触れます。これらのどちらでもなければ、シェルはコマンドと同じ名前のプログラムをディスクで探します。そのようなプログラムが見つかった場合には、コマンド行にある引数をつけてそのコマンドを実行します。

ここに挙げた例では、シェルが make というプログラムを呼びだし、それに love という引数を与えて実行したのです。 make は巨大なプログラムをコンパイルするのによく使われるプログラムです。引数としてコンパイルしたいプログラムなどを指定します。ここでは、 make に love というものをコンパイルせよと言ったのです。 make は love の作り方がわからなかったので、ひょうきんなエラーメッセージを出して、シェルプロンプトに戻ったのです。では、シェルが入力されたコマンド名に相当するプログラムを見つけられなかった場合はどうなるのでしょうか？そうです、やってみればいいですね。

     /home/larry# eat dirt
     eat:  command not found
     /home/larry#

とても簡単です。シェルがコマンド行で与えられた名前のプログラム（ここでは eat ですね）を見つけられないと、このようなエラーメッセージを表示します。このエラーメッセージは、今後、コマンドを打ち間違えた場合によく目にするでしょう。例えば make love ではなくて mkae love と打ったときなどです。

3.2.5 ログアウト

色々試してみる前に、ログアウトの仕方を勉強しましょう。ログアウトは、コンピュータの使用を終了する場合の手続きです。端末を離れる前にログアウトをしないと、他の人があなたの大切な文書などを壊してしまうかも知れません。ログアウトには、シェルプロンプトに対して次のコマンドを使います。

     /home/larry# exit

他の方法でログアウトすることもできますが、これが一番確実な方法でしょう。なお、仮想コンソールをお使いの場合は、コンソールを離れる前に全ての仮想コンソールでログアウトをしたか確認してくださいね。また、 UNIX コンピュータでは、使い終ったからといって電源を切ったりリセットスイッチを押したりしないでください。電源を切ったりするのは、メモリの内容をハードディスクに書き込んだりしてからにしないと、大変なことになります。電源を切る前の手続きは、システム管理者の仕事です。あなた自身がシステム管理者ならば、第 4.4 節を参考にしてください。

3.2.6 パスワードの変更

パスワードを変更する方法も覚えてください。 passwd というコマンドを使います。実行すると、先ず古いパスワードを入力するように求められます。現在のパスワードを打ち込むと、次に新しいものを入力するようにと言ってきます。新しいものを打ち込むと、もう一度新しいパスワードを入力するように求めるでしょう。うっかりうち間違えていないように、同じものを 2 度打ち込むのです。パスワードは忘れないように気を付けてください。もしも忘れたら、システム管理者に頼んで、パスワードを再登録してもらわなくてはなりません。あなた自身がシステム管理者ならば、第 4.5 節を見てください。

3.2.7 ファイルとディレクトリ

UNIX をはじめとする多くの OS には、ファイルという概念があります。ファイルとはひとまとまりの情報に、ファイル名と呼ばれる名前をつけたものです。ファイルの例としては、あなたの履歴書や電子メールのメッセージや実行可能なプログラムなどが挙げられます。要するに、ディスクにセーブされたものは全てファイルとして保存されているのです。

ファイルはそのファイル名によって区別されます。例えば、あなたの歴史学の講義ノートのファイルは history.txt というファイル名を付けて保存するとよいでしょう。ファイル名は、そのファイルを区別するためだけでなく、普通はその内容が分かるように付けられます。

なお、 UNIX のファイルにはファイル名以外の属性も与えられますが、これについては、この章で少しずつ説明してゆきます。

ファイルの概念と共にディレクトリという概念もあります。ディレクトリとは単なるファイルの集まりです。これはたくさんのファイルを挟んでおけるバインダーのようなものと考えてください。ディレクトリ自身にも名前が付けられていて、それによって区別されます。さらに、ディレクトリは別のディレクトリの中に置かれたりして、木の枝のような構造（ツリー構造）を持つのです。例えてみれば、バインダーを置く本棚もディレクトリと呼ばれ、本棚がある部屋もディレクトリと呼ばれるようなものです。

ファイルはパス名で参照できます。これはファイルのあるディレクトリ名に続いてそのファイル名をつなげたものです。例えば、 Larry が papers というディレクトリを持っているて、その中に

history-final ・ english-lit ・ masters-thesis という 3 つのファイルを置いているとしましょう

（これらには Larry の現在の仕事に関連した情報が入っています。歴史学のレポートと英文学と修士論文ですね。）。 english-lit というファイルを参照するためには Larry は次のようにパス名を指定できます。

     papers/english-lit

このように、ディレクトリとパス名は一つのスラッシュ記号 (/) で区切られます。 MS-DOS の経験がある人はこういうことには慣れているでしょう。日本語 MS-DOS ではスラッシュの代わりに円記号 (Y =) を、英語 MS-DOS ではバックスラッシュ(\) を使いますね。

すでに述べたように、ディレクトリは他のディレクトリの中に入れることもできます。あるディレクトリの中にあるディレクトリをサブディレクトリと呼びます。たとえば Larry は papers ディレクトリの中に notes というサブディレクトリを入れています。このディレクトリには math-notes と cheat-sheet というファイルが入っています。 cheat-sheat ファイルのパス名は次のようになります。

     papers/notes/cheat-sheet

このように、パス名は、文字通り、ファイルを置いてある場所へのパス（道筋）を表すのです。あるサブディレクトリのを含んでいるディレクトリは、そのサブディレクトリの親ディレクトリと呼ばれます。つまり papers ディレクトリは notes ディレクトリの親ディレクトリになります。

3.2.8 ディレクトリ・ツリー

ほとんどの UNIX システムにはシステムのリソース（サブルーチンや管理・設定ファイルなど）やプログラムを見つけやすいように、ファイルの標準的な置き場所が決まっています。この配置は「 / 」 (ルートディレクトリ) から枝分かれしてゆく木のような構造（ディレクトリ・ツリー）になっています。「/ 」の中には/bin ・ /etc ・ /dev ・ /usr などの重要なサブディレクトリがあります。これらのディレクトリ内にも別のディレクトリが含まれ、その中にシステム設定ファイルやプログラムなどが入っているのです。

また、それぞれのユーザーがホームディレクトリを持ち、その中に自分のファイルを作ります。上に示した例では Larry のファイル（cheat-sheet や history-final など）は、全て Larry のホーム

/  bin dev etc home  larry sam lib proc tmp usr  X386 bin emacs etc g++-include include lib local  bin emacs etc lib man spool src  linux tmp

図 3.1: 典型的な UNIX のディレクトリツリーの概略

ディレクトリに入っています。多くの場合、ユーザーのホームディレクトリは /home の中に作られ、ユーザーの名前が付けられます。この例では Larry のホームディレクトリは /home/larry です。

図 3.2.8 にはディレクトリ・ツリーの例が示してあります。あなたのシステムがどのように構成されているのかの参考にしてください。

3.2.9 カレントディレクトリ

シェルに入力するコマンドはいつもカレントディレクトリに対して意味を持ちます。カレントディレクトリというのは、あなたが「今いる」ディレクトリのことだと思ってください。ログインした直後は、あなたのカレントディレクトリはホームディレクトリになります。この本の例では /home/larry です。ファイルを参照するときは、ルートディレクトリを起点にしたパス名（フルパス名）を指定するよりも、カレントディレクトリからの相対位置（相対パス名）を指示するほうが簡単です。

例を挙げましょう。 Larry は papers というディレクトリを持っています。その中には history-final というファイルが入っています。 Larry がこのファイルを見たいとしたら、彼はこういうコマンドを使えます。

/home/larry# more /home/larry/papers/history-final

なお、 more というコマンドはファイルを画面に 1 ページずつ表示するものです。現在のカレントディレクトリは /home/larry なので、同じファイルを次のように相対位置で示すこともできるのです。

/home/larry# more papers/history-final

このように、ファイル名を「 / 以外の文字」で始めると、相対パス名で指定していると解釈されます。

逆に、ファイル名を「 / 」で始めると、ルートディレクトリを起点としたフルパス名であると判断されます。これは絶対パス名とも呼ばれます。

3.2.10 ホームディレクトリの参照

Linux でよく使われる Tcsh と Bash では、ホームディレクトリはチルダ ( 「 ~ 」 ) で表すことができます。たとえば次のコマンドは

/home/larry# more ˜ /papers/history-final

次のものと同じ意味です。

/home/larry# more /home/larry/papers/history-final

実は、「 ~ 」という文字はシェルによってあなたのホームディレクトリの名前に置き換えられるのです。

さらに他のユーザーのホームディレクトリもチルダで指定することができます。「 ~karl/letters 」という指定は、 Karl （ユーザー名 karl ）のホームディレクトリが「 (/home/karl 」ならば、シェルによって「 /home/karl/letters 」と解釈されます。チルダの使用は単なる省略形で、「 ~ 」という名前のディレクトリが実際に存在するわけではありません。シェルによって便宜的に提供された表現なのです。

3.3 UNIX 散歩

まず注意していただきたいのは、 UNIX システムでは (MS-DOS とは違って) 全てのコマンドとファイル名の大文字と小文字は区別されていることです。例えば、 make というコマンドは Make や MAKE とは同じではありません。ファイル名やディレクトリ名についても同じです。

3.3.1 歩き回る

さあログインも出来て、ファイルをパス名で参照する方法もわかりました。では、カレントディレクトリを変えるにはどうしたらいいのでしょうか？

ディレクトリ構造の中を歩き回るためのコマンドは、 cd です。これは change directory を省略したものです。 UNIX でよく使われるコマンドの多くは 2 文字か 3 文字のものなのです。まずは、 cd コマンドの使い方です。

cd ⟨directory⟩

⟨directory⟩ が、移動したいディレクトリの名前です。

ログイン直後には、自分のホームディレクトリにいるはずだということは前にも触れましたね。もしも Larry がそこから papers ディレクトリに移りたいいならば、こうすればよいでしょう。

     /home/larry# cd papers
     /home/larry/papers#

見てわかるように、 Larry のプロンプトはカレントディレクトリを反映して変わりました。こうして papers ディレクトリに入れたので、 Larry は歴史学のレポート (history-final) をこうやって見ることができます。

     /home/larry/papers# more history-final

Larry は今 papers ディレクトリにいますが、親ディレクトリに戻るにはこうします。

     /home/larry/papers# cd..
     /home/larry#

(cd と .. との間にスペースがあることに注意してください。 ) 全てのディレクトリには .. というサブディレクトリ名があります。これはその親ディレクトリを表します。同様にどんなディレクトリにも. というサブディレクトリがあり、そのディレクトリそのものをあらわしています。次のコマンドではカレント・ディレクトリは移動しません。

     /home/larry/papers# cd .

cd コマンドでは有難味が感じられませんが、ファイルのコピー先を指定する場合などに便利な名前なのです。

cd コマンドでは、絶対パス名を使うこともできます。 Karl のホームディレクトリに移動するには、こうします。

     /home/larry/papers# cd /home/karl
     /home/karl#

cd コマンドを引数なしで使うと、自分のホームディレクトリに戻れます。

     /home/karl# cd
     /home/larry#

これは、 MS-DOS と違うので注意してください。

3.3.2 ディレクトリの中身を見る

さて、ディレクトリの移動の仕方はわかりましたが、「それがどうした」と思われるでしょう。ディレクトリが移動できるだけでは、たしかに何の役にも立ちません。そこで ls というコマンドを紹介しましょう。 ls は、ファイルとディレクトリの一覧 (list) を表示します。特に何も指定しない場合は、カレントディレクトリの情報を表示します。例えば、

     /home/larry# ls
     Mail
     letters
     papers
     /home/larry#

こうして、 Larry のカレントディレクトリには、 Mail ・ letters ・ papers という 3 つのものが入っているのがわかりました。これでもたいしたことはありませんね。それがファイルなのかディレクトリなのかなど、詳しいことは分かりません。そこでまず、「-F」というオプションを付けてみましょう。

     /home/larry# ls –F
     Mail/
     letters/
     papers/
     /home/larry#

ファイル名の後に / が付いているので、この 3 つのものがディレクトリであることがわかります。

ls -F を使うと、 * がファイル名の後に付くかもしれません。これは、実行可能なファイル、つまりプログラムであることをあらわしています。 ls -F として何も付かないファイルは「一般的なファイル」であって、ディレクトリでもなければ実行可能なファイルでもありません。

ほとんどの UNIX コマンドは引数以外にも、いくつものオプションを取ります。上の例の ls -F のように、これらのオプションのほとんどは「- 」で始まります。この「-F 」オプションは、 ls に「ファイルの種類についてもっと多くの情報を表示せよ」と指示しています。この例では、ディレクトリ名には「/ 」を付けよということです。

さて、 ls にディレクトリ名を与えると、そのディレクトリの中身が表示されます。

     /home/larry# ls –F papers
     english-lit
     history-final
     masters-thesis
     notes/
     /home/larry#

もっと面白そうなものが見たければ、システムの /etc ディレクトリに何があるか見てみましょう。

     /home/larry# ls /etc
     Images          ftpusers        lpc             rc.new          shells
     adm             getty           magic           rc0.d           startcons
     bcheckrc        gettydefs       motd            rc1.d           swapoff
     brc             group           mount           rc2.d           swapon
     brc~            inet            mtab            rc3.d           syslog.conf
     csh.cshrc       init            mtools          rc4.d           syslog.pid
     csh.login       init.d          pac             rc5.d           syslogd.reload
     default         initrunlvl      passwd          rmt             termcap
     disktab         inittab         printcap        rpc             umount
     fdprm           inittab.old     profile         rpcinfo         update
     fstab           issue           psdatabase      securetty       utmp
     ftpaccess       lilo            rc              services        wtmp
     /home/larry#

(MS-DOS を使っている人は、ファイル名が 8 文字より多く、またピリオドがどこにでも入れられることに注目しましょう。ファイル名に 2 つ以上のピリオドを入れることさえできます。 )

さあ cd してディレクトリ・ツリーをてっぺんまで上ってみましょう。 cd .. というコマンドを使えばいいですね。そしてこんどは別の/usr/bin へ下りてみましょう。

     /home/larry# cd ..
     /home# cd ..

/# cd usr

     /usr# cd bin
     /usr/bin#

cd /usr/bin として一気にディレクトリを何段も飛び下りてもいいですね。

ls と cd を使っていろんなディレクトリを散策してみましょう。もしかしたら、 Permission denied （許可されませんでした）という嫌なエラーメッセージに出会うかもしれません。これはあるディレクトリで ls をしようとしたり、またはあるディレクトリへ cd しようとして UNIX の安全装置に触れただけです。このエラーが出るのは、 OS が許可していないことがらを実行しようとした時です詳しくは、第 3.9 節で説明します。

3.3.3 新しいディレクトリを作る

ではいよいよディレクトリの作り方です。これには mkdir コマンドを使います。次のようにやってみましょう。

     /home/larry# mkdir foo
     /home/larry# ls -F
     Mail/
     foo/
     letters/
     papers/
     /home/larry# cd foo
     /home/larry/foo# ls
     /home/larry/foo#

出来ましたね。この例では、新しいディレクトリを作って、そこへ移動しました。このディレクトリにはまだ何も入っていないので、他からファイルをコピーしてくる方法を勉強しましょう。

3.3.4 ファイルのコピー

ファイルのコピーには、 cp コマンドを使います。

     /home/larry/foo# cp /etc/termcap .
     /home/larry/foo# cp /etc/shells .
     /home/larry/foo# ls –F
     shells     termcap
     /home/larry/foo# cp shells bells
     /home/larry/foo# ls –F
     bells     shells     termcap
     /home/larry/foo#

cp コマンドはコマンド行に並んだファイルを、コマンド行の最後の引数のファイルまたはディレクトリにコピーします。カレントディレクトリを参照するための「 . 」の使い方に注目してください。 MS-DOS と異なり、必ずコピー先を指定してやります。

3.3.5 ファイルの移動

今度はファイルのコピーとは少し違う、ファイルを移動するための mv コマンドです。この使い方はとても簡単です。

     /home/larry/foo# mv termcap sells
     /home/larry/foo# ls -F
     bells     sells     shells
     /home/larry/foo#

こんどは termcap ファイルは消えて、かわりに sells ファイルになりました。このように mv はファイル名を変えるのにも使えますが、全く別のディレクトリにファイルを移動するのにも使えます。

◇ 【注意】 mv と cp を実行したとき、コピー先または移動先に指定したものと同名のファイルがある場合には、何も断らずに上書きしてしまいます。ファイルを別のディレクトリにコピーしたり移動するときにはよく注意してください。

3.3.6 ファイルやディレクトリの消去

ls コマンドの結果を見ると、へたな脚韻ができているのがわかりますね。ファイルを削除 (remove) するには rm コマンドを使います。

     /home/larry/foo# rm bells sells
     /home/larry/foo# ls -F
     shells
     /home/larry/foo#

これでもう shells しか残っていませんが、消してしまったものを復活させることは出来ません。 rm はファイルを黙って削除してしまいます。ですからこのコマンドを使うときには十分注意してください。

rm に似たコマンドに rmdir があります。このコマンドはディレクトリを消去するために使います。ディレクトリは中身が空の時にしか消去できません。消そうとするディレクトリにファイルやサブディレクトリなどが入っていると、 rmdir は文句を言います。

3.3.7 ファイルの中身を見る

more と cat はファイルの中身を見るために使われます。 more はファイルを一画面ずつ順番に見るコマンドですが、 cat はファイル全体を一度に表示します。

shells というファイルを見るためには、このようにします。

     /home/larry/foo# more shells

shells の中身に興味を持つ方にひとこと言っておくと、これは使用可能なシェルプログラムのリストです。たいていの Linux では /bin/sh ・ /bin/bash ・ /bin/csh の 3 つが入っているでしょう。これらの違いなどついては後ほど説明します。

Linux の more は Space を押して文書の次のページを表示し、 b で前のページを表示します^{2}。これ以外にも様々な機能が備わっていますので、少しずつ覚えてゆくといいでしょう。なお、 more を終了 (quit) するのは q です。

more を終了したら、 cat /etc/termcap をためしてみましょう。テキストは読むひまもなく通りすぎていくでしょう。 cat という名前は「連結」という意味の con\underline{cat}enate に由来するものです。つまり本来はいくつかのファイルをつなげて、別のファイルに保存したりするのに使われるものです。そのような使い方については、後ほどお話しします。

3.3.8 オンラインマニュアルを使う

Linux を含むほとんどの UNIX 系 OS ではオンラインマニュアルやマニュアルページ (man page) と呼ばれる機能が利用できます。これは、各種コマンド・プログラム用のサブルーチン・システム管理用ファイルなどの様々な情報をコンピュータの上で調べるための解説集です。

オンラインマニュアルを利用するためのコマンドは man です。例えば、 ls コマンドのオプションをもっと知りたいなら、こう打ちこめばいいでしょう。

     /home/larry# man ls

これで ls についての解説が表示されると思います。

残念なことに、ほとんどの解説は既にそのコマンドなどがどんなものなのかを知っている人向けに書かれています。このため、たいていのオンラインマニュアルには、技術的な細部については載っていますが、初心者向きの解説はあまりありません。それでも、コマンドの引数の与え方を忘れてしまった時などに記憶を呼び起こすのには役立つでしょう。オンラインマニュアルを見れば、この本では説明できなかった細かな点も、いろいろと学べると思います。

2

一部の more では、後戻りが出来ないと思います。この場合は、 less を探してみてください。必ずしも一般的でなく、控

えめな名前のコマンドですが、 less は more を機能強化したものです。日本語に対応した less も、日本語拡張キット

(JE) にあります。

とりあえず、いままで紹介したコマンドのオンラインマニュアルを見てみてください。これから新しいコマンドが出てきたときも同じです。すると、コマンドの中にはオンラインマニュアルが無いものがあるのに気付くでしょう。これにはいくつかの理由が考えられます。まず、まだ書かれていないものがあります。 Linux 文書作成プロジェクトは、 Linux 用のオンラインマニュアルも作らなくてはなりません。現在、完成を目指して少しずつ書いている段階です。また、 JF プロジェクトでは日本語版の作成も進めています。さて、これ以外にも、コマンドが独立したものでなく、シェルに組み込まれたものやシェルの別名機能で定義されているものである場合が考えられます。 (これらについては、第 3.2.4 節で説明します。 ) この場合は、それぞれのオンラインヘルプが用意されているわけではありませんので、シェルのマニュアルを参考にします。たとえば cd コマンドはシェルの組み込みコマンドなのでシェルが直接ディレクトリの変更をするのです。独立した cd というプログラムが用意されているわけではありません。

3.4 基本コマンドのまとめ

この節では UNIX システムの有用な基本コマンドをまとめてみます。前節ですでに触れたものを含めて紹介します。

コマンドのオプションはたいていは「 - 」で始まることに注意してください。ほとんどの場合、複数の 1 文字オプションはひとつの「 - 」の後に並べて書くことができます。例えば「 ls -l -F 」と書くかわりに「 ls -lF 」と書いても同じように振舞います。

全てのオプションを説明することはしません。重要なものや特に役に立ちそうなもののみを説明するにとどめます。実は、ほとんどのコマンドには膨大な数のオプションがあるのですが、そのほとんどはめったに使わないでしょう。必要なときは man コマンドでオンラインマニュアルを見てください。各コマンドの全てのオプションが載っています。

また、多くのコマンドは「⟨file1⟩ … ⟨fileN⟩」のような形でファイルやディレクトリを引数に取ることを覚えておいてください。例えば、 cp コマンドの引数は、コピーする複数のファイルに続いて、最後にコピー先のファイルかディレクトリを指定します。ただし、複数のファイルをコピーする時にはコピー先はディレクトリでなくてはなりません。

cd ディレクトリ（カレントディレクトリ）を変更します。（シェル組み込みコマンド）用法: cd ⟨directory⟩ ⟨directory⟩ で指定したディレクトリに変更します。 ( 「.」は今いるディレクトリを意味し、「.. 」は親ディレクトリです。 ) 例: cd ../foo はカレントディレクトリを ../foo にします。

ls 指定されたファイルやディレクトリの情報一覧 (list) を表示します。用法: ls ⟨file1⟩ ⟨file2⟩ … ⟨fileN⟩ ⟨file1⟩ から ⟨fileN⟩ までは見たいファイルやディレクトリの名前です。オプション: 考えたくないほど多くのオプションがありますが、最もよく使われるのは次のふたつです。「-F 」 (ファイルの種類についての情報を付けた表示をします) と「-l 」 (ファイルの大きさ・所有者・許可属性などを含んだ、長い (long) 形式で表示します。後で詳しく述べます。 )

              例: ls -lF /home/larry とすると /home/larry というディレクトリの中のファイ

ルやディレクトリを表示します。

cp ファイルを他のファイルやディレクトリにコピー (copy) します。用法: cp ⟨file1⟩ ⟨file2⟩ … ⟨fileN⟩ ⟨destination⟩ ⟨file1⟩ から ⟨fileN⟩ まではコピーするファイル名で、 ⟨destination⟩ はコピー先のファイルまたはディレクトリです。例: cp ../frog joe は ../frog というファイルを joe というファイルまたはディレクトリにコピーします。 (joe というディレクトリがあればそこに、なければ joe というファイルにコピーします。 )

mv ファイルを他のファイルかディレクトリに移動 (move) します。このコマンドはコピーした後に元のファイルを消去するのと同じようなものです。また、 MS-DOS の RENAME と同じ目的で、ファイルの名前を変えるコマンドとしても使います。用法: mv ⟨file1⟩ ⟨file2⟩ … ⟨fileN⟩ ⟨destination⟩ ⟨file1⟩ から ⟨fileN⟩ は移動するファイル名で、 ⟨destination⟩ は移動先のファイルまたはディレクトリです。例: mv ../frog joe とすると、 ../frog というファイルを joe というファイルまたはディレクトリに移動します。

rm ファイルを消去 (remove) します。 UNIX ではファイルを消去すると復活はできません。 (MS-DOS では、たいてい undelete で復活できますね。 ) 用法: rm ⟨file1⟩ ⟨file2⟩ … ⟨fileN⟩ ⟨file1⟩ から ⟨fileN⟩ は消去するファイル名です。オプション: -i はファイルを消去する前に本当に消去するか確認します。

例: rm -i /home/larry/joe /home/larry/frog とすると、 /home/larry ディレ

クトリにある joe と frog というファイルを、消去の意志を確認した後で消去します。

mkdir 新しいディレクトリ (directory) を作成 (make) します。用法: mkdir ⟨dir1⟩ ⟨dir2⟩ … ⟨dirN⟩ ⟨file1⟩ から ⟨fileN⟩ は作成するディレクトリです。

例: mkdir /home/larry/test とすると、 /home/larry ディレクトリの中に test

を作ります。

rmdir 空のディレクトリ (directory) を消去 (remove) します。 rmdir を使うときは消去しようとするディレクトリがカレントディレクトリであってはいけません。用法: rmdir ⟨dir1⟩ ⟨dir2⟩ … ⟨dirN⟩ ⟨file1⟩ から ⟨fileN⟩ は消去するディレクトリです。

例: rmdir /home/larry/papers とすると、 /home/larry/papers が空ならば、こ

のディレクトリは消去されます。

man 与えられたコマンドやリソース (ライブラリ関数などの、 OS のに備わったコマンドではない道具のこと) のオンラインマニュアルを表示します。用法: man ⟨command⟩ ⟨command⟩ は知りたいコマンドやリソースの名前です。例: man ls とすると ls コマンドについての解説が出ます。

more ファイルの内容を 1 画面ずつ表示します。用法: more ⟨file1⟩ ⟨file2⟩ … ⟨fileN⟩ ⟨file1⟩ から ⟨fileN⟩ が表示したいファイルです。

例: more papers/history-final とすると、 papers/history-final というファイ

ルの内容を表示します。 cat 本来はファイルを結合 (concatenate) するためのコマンドです。ファイルの内容すべ

てを一度に表示するためにも使われます。用法: cat ⟨file1⟩ ⟨file2⟩ … ⟨fileN⟩ ⟨file1⟩ から ⟨fileN⟩ が表示したいファイルです。

例: cat letters/from-mdw とすると letters/from-mdw というファイルを表示し

ます。

echo 与えられた引数を、こだま (echo) のようにそのまま表示するだけです。（シェル組み込みコマンド）用法: echo ⟨arg1⟩ ⟨arg2⟩ … ⟨argN⟩ ⟨arg1⟩ から ⟨argN⟩ が表示したい引数です。

例: echo "Hello world" とすると「 Hello world 」という文字列を表示します。

grep 正規表現 (regular expression) という形式で与えられたパターンに合う文字列を含む行がファイル中にあれば、その行全体 (global) を表示 (print) します。用法: grep ⟨pattern⟩ ⟨file1⟩ ⟨file2⟩ … ⟨fileN⟩ ⟨pattern⟩ は正規表現によるパターンで、 ⟨file1⟩ から ⟨fileN⟩ は検索対象のファイルです。

例: grep loomer /etc/hosts とすると /etc/hosts というファイルのなかで「

loomer」という文字列を含む行を全て表示します。

3.5 ファイルシステムの探検

ファイルシステムとは、コンピュータシステムにあるファイル及び階層構造をなすディレクトリの全体をいいます。以前にファイルシステムの中を御案内するとお約束しましたが、いよいよその探検に出かける時が来たのです。

ここまで読んできた皆さんには私の言っていることがどういうことなのか、分かっていただけるはずです。そして皆さんは地図も持っているはずですね。 (20ページの図 3.2.8を見てください。 )

まず、「 cd / 」でルートディレクトリに移動して、「 ls -F 」を実行してみましょう。たぶん、 bin ・

dev ・ etc ・ home ・ install ・ lib ・ mnt ・ proc ・ root ・ tmp ・ user ・ usr ・ var というディレクトリがあ

るでしょう^{3}。では、それぞれのディレクトリを順番に見てゆくことにしましょう。

bin /bin は「 binaries 」の略で、実行可能ファイルのことです。ここには OS に最低限必要なプログラムが置かれています。「 ls -F /bin 」で、ここにあるファイルを見てみましょう。一覧をよく見ると、 cp ・ ls ・ mv など、お馴染みのコマンドがあるのに気付くでしょう。ここにコマンドの実体があるのです。 cp コマンドを使うときには、実際にはこの /bin/cp プログラムを実行しているのです。

ls -F とすると /bin の中のほとんどのファイルにアスタリスク ( 「 * 」 ) がついているでしょう。これは第 3.3.2 節で説明したように、そのファイルが実行可能であることを示しているのです。

/dev 次は /dev です。また ls -F をして見てみましょう。

/dev の中のファイルはデバイスドライバというものです。それはディスクドライブ・モデム・メモリなど、コンピュータの周辺機器などのリソースと呼ばれるものを利用するために使われます。たとえば普通にファイルを読みこむのと同じように /dev/mouse を読み込むとマウスからの入力を読みこめるのです。

3 {ここに挙がっていないディレクトリがあったり、ここに一部が見つからないかもしれませんが、心配することはありませ \atop ん。 Linux はパッケージによって少しずつ違うのです。}

fd で始まるファイル名はフロッピーディスクデバイスです。 fd0 は 1 番目のフロッピーディスクドライブで、 fd1 が 2 番目です。勘の良い人はすでに気がついたと思いますが、上に挙げた二つのデバイス以外にもフロッピー用のデバイスがあります。これらのデバイスファイルは各種のフロッピーディスクに対応しています。たとえば fd1H1440 はドライブ 1 にある 3.5 インチ高密度 (HD) のディスクを参照します。

よく使われるデバイスファイルの一覧をあげます。あなたのコンピュータにこの一覧にあるデバイスがなくても、 /dev にその名前がある場合もあります。

• /dev/console はシステムのコンソール—つまりシステムに直接つながったモニターを示します。

• 各種の /dev/ttyS と /dev/cua はシリアルポートを使うためのデバイスです。例えば /dev/ttyS0 は MS-DOS では「 COM1 」と呼ばれているデバイスです。 /dev/cua デバイス呼びかけ（callout）デバイス、つまりモデム用です。

• hd で始まるデバイスはハードディスクをアクセスします。 /dev/hda は 1 番目のハードディスク全体のことで、 hda1 は /dev/hda の最初のパーティションのことです。

• sd で始まるのは SCSI ドライブです。もしも SCSI ハードディスクを持っているならば、 /dev/hda でアクセスする代わりに/dev/sda でアクセスします。 SCSI テープドライブは st デバイスとして、 SCSI CD-ROM は sr デバイスとしてアクセスします。

• lp ではじまるデバイス名はパラレルポートにつながります。多くの場合、プリンタが継がれるところです。 /dev/lp0 というのは MS-DOS では “LPT1” と呼ばれているものです。

• /dev/null は「ブラックホール」として使われます。つまり、このデバイスに送りこまれたデータは永久に消滅してしまいます。これが何の役に立つのですかって？コマンドを実行するときに画面へのメッセージがウルサイ時に出力を /dev/null に送ってしまったりします。これについては後でもう少し説明します。

• /dev/tty で始まるデバイスは、あなたのシステムの「仮想コンソール」です。 ( alt-F1 や alt-F2 などを押して切替えるのでしたね。 ) /dev/tty1 は 1 番目の仮想コンソール、 /dev/tty2 は 2 番目の仮想コンソールです。

• /dev/pty で始まるデバイスは「擬似端末」 (pseudo-terminals) です。これはリモートログインするための端末を提供するものです。例えば、あなたのマシンがネットワークにつながっているとして、外部から telnet でのログインを受け付けるときに/dev/pty デバイスが使われます。

/etc /etc には、その名のとおり「その他」に分類されるものが入っています。様々な設定ファイルやプログラム・ユーティリティなどです。 /etc にあるほとんどのプログラムはシステム管理者のみが使うものです。これらのことについては第 4 章で詳しく扱います。

/home /home は各ユーザーのホームディレクトリがあるところです。例えば/home/larry は「 larry 」というユーザーのホームディレクトリです。インストールしたばかりのシステムでは、このディレクトリにはたぶんユーザー名はないでしょう。 /lib /lib には共有ライブラリが入っています。これは、様々なプログラムが共有するよ

うなサブルーチンがはいっています。それぞれのプログラムがこれらの共通なコードのコピーを持たなくてもいいように、 /lib という共通の場所に置かれているのです。この機構によって、それぞれの実行ファイルを小さくすることができ、ディスクスペースを節約することができます。

/proc /proc は「仮想ファイルシステム」です。これはファイルをディスクドライブではなくメモリ上に保存するもので、実行中の複数のプロセスを示していて、実行されているプロセスについての情報をいつでも得ることができます。第 3.10.1 節でさらに詳しく見ることにしましょう。

/tmp 多くのプログラムでは一時ファイル（テンポラリファイル）に一時的に情報を保存するようになっています。そのようなファイルを置くための場所が /tmp です。

/usr /usr は非常に重要なディレクトリです。ここには数多くのサブディレクトリがあって、その中には、とても重要で役立つプログラムや設定ファイルなどが入っています。

ここまでで説明したディレクトリはシステムに必須のディレクトリです。これに対し、 /usr にあるののほとんどは、必須ではありません。しかし、その必要ではないものが、 OS を使いやすく面白いものにしてくれるのです。 /usr がなければ、 cp や ls といったコマンドしかない、つまらないものになってしまうでしょう。大きなソフトウェアパッケージとそれに付属する設定ファイルはほとんど /usr に入っています。

/usr/X386 X Window System がインストールされていれば、 /usr/X386 に入っています。 X Window System は、画面上に「ウィンドウ」を開いてグラフィックを利用した便利なプログラムを実行するための、大規模で強力なグラフィック環境です。 MS Windows や Macintosh の環境になじんでいる人には X Window System はわかりやすいと思います。 /usr/X386 ディレクトリには X Window System の実行ファイル、環境設定ファイルなどのすべてが入っています。これについては第 5.1 節で詳しく説明することにしましょう。

/usr/adm /usr/adm にはシステム管理用のいろいろなファイルが入っています。特に、 syslog は、コンピュータシステムで発生した問題・エラーなどを記録しているファイルです。また、ログインし損なった場合も含めて記録しているファイルもあります。詳しくは、第 4 章で扱います。

/usr/bin /usr/bin は UNIX でのソフトウェアの本当の宝庫です。ここには、 /bin などには置かれていないプログラムのほとんどがが置かれています。

/usr/etc /etc と同じように、 OS 関連プログラムや環境設定ファイルがありますが、 /usr/etc にはさらに多くのものがあります。一般的に、 /etc にあるファイルは OS に必須なものですが、 /usr/etc にあるものはそうではありません。

/usr/include /usr/include には C コンパイラのためのインクルードファイルが入っています。これらのファイルはヘッダという意味で .h で終わるファイル名を持ち、 C 言語で使われる構造体やサブルーチンや定数を宣言しているファイルです。サブディレクトリ /usr/include/sys にあるファイルは UNIX の OS レベルでのプログラミングに使われるものです。 C 言語を知っている人は stdio.h などのヘッダファイルがここにあるのに気付かいたでしょう。これには printf() などの関数を使うための宣言が含まれています。

/usr/g++-include

/usr/g++-include の中には C++ コンパイラ用のインクルードファイルが (/usr/include と同じように) 入っています。

/usr/lib /usr/lib には、 /lib にあるライブラリの「スタブ版」と「スタティック版」があります。コンパイル時には、 /usr/lib のライブラリとプログラムがリンクされます。この、ライブラリにリンクされたルーチンがプログラム内で実際に呼び出されると、これらのルーチンは /lib にあるライブラリを参照し、実際の実行用コードを取り出します。また、 /usr/lib には各種プログラムの設定ファイルも入っています。

/usr/local /usr/local は /usr ととてもよく似ています。ここにあるのはシステムに必須でないプログラムやファイルですが、それがシステムを楽しいものにします。一般的に言えば /usr/local にあるファイルはあなたのコンピュータシステムに、目的に合った個性を与えるものです。ですから、 /usr/local の中身はシステムによって大きく違っているでしょう。

ここにはたとえば TEX という文書整形システムや Emacs という強力なエディタのような大規模なソフトウェアパッケージがインストールされています。また、日本語拡張キットを導入した場合には、ほとんどのものがこの中に収められます。世界から見れば、日本語環境は個性的なものですからね。

/usr/man このディレクトリにはオンラインマニュアル (マニュアルページ) が入っています。「節^{セクション}」ごとに分類され、それぞれの節にふたつのサブディレクトリが用意されています。 (詳しい解説を見るには man man コマンドを使ってください。例えば、 /usr/man/man1 ディレクトリにはマニュアルの第一節の整形されてない元の原稿が入っていて、 /usr/man/cat1 には第一節に分類されるマニュアルが、整形され、そのまま読める形式で入っています。

なお、日本語のマニュアルは漢字コード毎に分類されたサブディレクトリに収められています。

/usr/spool /usr/spool には、「一時溜置きされた」ファイルがあります。例えば、あなたのマシンがネットワークにつながっていたとすると、届いたメールはあなたが読むか消すかするまでの間、一時的に/usr/spool/mail に溜められます。また、ニュース記事

は、 /usr/spool/news に溜められています。

/usr/src /usr/src には (コンパイルされてない) いろいろなプログラムのソースコードが入っています。この中の /usr/src/linux には Linux カーネルのソースコードも入っています。

3.6 いろいろなシェル

これまでにも、「 UNIX はマルチタスク・マルチユーザー OS である」と、くどいほど説明しましたね。マルチタスクは「たいへん」便利な機能です。いちど慣れてしまうと四六時中マルチタスクを使っているようになることでしょう。そうなれば、『裏で』プログラムを実行させたり、『タスク切り替え』をしたり、複雑な仕事を簡単なコマンドで行うために『パイプ』を使ったりできるようになるのは、もう目の前です。

この節であつかうのはシェル自身が持っている機能についての話です。まず、 UNIX （というオペレーティングシステム本体と）シェルを混同しないでください。シェルはシステムのインターフェイスにしか過ぎません。シェルは UNIX システムの上で動作し、ユーザーと直接接したりしながら様々な便利機能を提供しているものなのです。

シェルの仕事はプロンプトの後に打ちこまれたコマンドを解釈するだけではありません。シェル自身が強力なプログラム言語を持っているのです。シェルスクリプトと呼ばれるこのプログラムはシェルコマンドを並べて記述したものです。 MS-DOS ユーザーなら「バッチファイル」と同じものであることに気付くでしょう。シェルスクリプトは非常に役に立つ道具です。これによって UNIX の使い勝手を良くすることができます。詳しくは第 3.12.1 節を見てください。

UNIX の世界にはいくつかの種類のシェルがあります。これは大きく「B シェル (Bourne shell)」と「C シェル」の 2 種類に分けられます。 B シェルは (System III などの) 初期の UNIX システムと同じようなコマンド体系を使っています。 B シェルはほとんどのシステム上で /bin/sh という名前になっています（sh は「 shell 」の意味です)。 C シェルは C 言語に似た別の文法体系を持っています。ほとんどのシステムでは /bin/csh という名前になっています。

Linux 用にも、このようなシェルが何種類も用意されています。よく使われているのは Bash (Bourne Again Shell, /bin/bash) と Tcsh (/bin/tcsh) の二つです。 Bash は B シェルを拡張し、 C シェルの高度な便利機能をも取り込んだものです。 B シェルの文法を拡張したものを採用しているので、標準的な B シェルのスクリプトがそのまま動きます。 C シェルの文法が好きな人向けには Tcsh があります。これは、 C シェルをもとに拡張されたものです。

どのシェルを使うかという問題は、どの宗教を信ずるかという問題のようなもので、多分に趣味の問題です。 B shell の文法と Bash の特長が好きな人もいれば、 C シェルの構造化された文法体系が好きな人もいるでしょう。もっとも、 cp や ls といったコマンドを普通に使うだけならどのシェルを使っていても同じです。文法的な違いはありません。シェルスクリプトを書こうとしたり、シェルをもっと使い込もうとするときになって、どのシェルを使うかが問題になるのです。

以上、シェルについていろいろ議論してきました。このように B シェルと C シェルは違うわけですが、それでもこのマニュアルの範囲ではその違いを気にする必要はありません。 (どうしても気になるという方はオンラインマニュアルの bash と tcsh の項を読んでみてください。 )

3.7 ワイルドカード

UNIX のシェルの大きな特徴のひとつは特別な文字を使って、いちどに複数のファイル名を参照できることです。これがいわゆるワイルドカードです。例えば、「 n 」を含むファイルを全て参照する、ということができます。

「 * 」というワイルドカードの部分はファイル名の中のどんな文字列にでも一致するとみなされます。例えば、「 * 」という文字をファイル名の一部として指定すると、シェルはそれを「何でもいいけど何かの文字列」と考えて、ディレクトリ中にあるファイル名と比べ、一致したものを見つけるのです。

言葉で説明すると複雑ですが、以下の例を見てください。 Larry は frog ・ joe ・ stuff というファイルをカレントディレクトリに持っているとします。

     /home/larry# ls
     frog     joe     stuff
     /home/larry#

文字「 o 」を含むファイルをすべて参照するには、こうします。

     /home/larry# ls *o*
     frog     joe
     /home/larry#

わかりましたか？まず、「 * 」を含んだ文字列はカレントディレクトリのファイル名と比較されます。この時、「 * 」の部分は、どんな文字列とも一致すると考えます。そうして、一致したものが表示されたのです。

「 * 」だけを使うと単に全てのファイルを指示したことになります。「 * 」は全ての文字の組み合わせをあらわすものだからです。

     /home/larry# ls *
     frog     joe     stuff
     /home/larry#

もう少し例を示しましょう。

     /home/larry# ls f*
     frog
     /home/larry# ls *ff
     stuff
     /home/larry# ls *f*
     frog     stuff
     /home/larry# ls s*f
     stuff
     /home/larry#

「 * 」をファイル名に変換する方法はワイルドカードの展開と呼ばれ、シェルによって行われます。 ls などの個々のコマンドは、引数の中に「 * 」という文字を渡されることが決してないということを覚えておいてください。ワイルドカードはシェルによって適当なファイル名に展開されてからコマンドに渡されます。つまり、

     /home/larry# ls *o*

というコマンドは実際には

     /home/larry# ls frog joe

として実行されます。

「 * 」というワイルドカードについてひとつ気を付けてほしいのは、これはピリオド（「 . 」）で始まるファイルには適合しないということです。このようなファイルは「隠しファイル」として扱われています。といっても、実際には隠されているのではなくて、 ls などの普通のコマンドでは表示されず、「 * 」のワイルドカードの対象にならないだけです。

例を挙げましょう。全てのディレクトリには特別なファイルが必ず二つあるということを説明しましたね。そうです、「 . 」はカレントディレクトリを表わし、「 .. 」が親ディレクトリでした。しかし、 ls を使うかぎり、これらのディレクトリは表示されません。

     /home/larry# ls
     frog     joe     stuff
     /home/larry#

ls の -a オプションを使えば、「 . 」で始まるファイルも表示されます。見てみましょう。

     /home/larry# ls -a
     .     ..     .bash profile     .bashrc     frog      joe     stuff
     /home/larry#

「 . 」と「 .. 」という特別なファイルのほかにも.bash profile や .bashrc といった「隠しファイル」が見えましたね。この二つのファイルは、 Larry がログインするときに参照される bash の起動ファイルです。これに関しては、第 3.12.3 節でさらに述べます。

ともかく、「『 * 』を使うときにはピリオドで始まるファイルは対象外である」ということを覚えておいてください。

     /home/larry# ls *
     frog     joe     stuff
     /home/larry#

このしくみは安全のためのものなのです。もしも、ワイルドカード「 * 」がピリオドで始まるファイルにも対応するとしたら、ディレクトリ名「 . 」と「 .. 」にも対応することになってしまい、コマンドによっては危険なことにもなりかねないのです。

「 * 」の他にも、「 ? 」というワイルドカードがあります。「 ? 」は一文字にしか展開されません。つまり、「 ls ? 」というコマンドは一文字のファイル名をすべて表示します。「 ls termca? 」とすると「 termcap 」は表示されますが、「 termcap.backup 」は表示されません。もうひとつ例を挙げましょう。

     /home/larry# ls j?e
     joe
     /home/larry# ls f??g
     frog
     /home/larry# ls ????f
     stuff
     /home/larry#

ここまで見てきたように、ワイルドカードでいちどに多くのファイルを特定することができるのです。第 3.4 節のコマンドのまとめでは、 cp や mv コマンドは複数のファイルをコピーしたり移動することができることを説明しました。つまり

/home/larry# cp /etc/s* /home/larry

とすると /etc のディレクトリ中の「 s 」ではじまるファイル全てを/home/larry にコピーします。ですから cp コマンドの使用法は本当は

cp ⟨file1⟩ ⟨file2⟩ ⟨file3⟩ … ⟨fileN⟩ ⟨destination⟩

でしたね。 ⟨file1⟩ から ⟨fileN⟩ はコピーするファイル名で、 ⟨destination⟩ はコピー先のファイル名またはディレクトリ名です。 mv でも同じようにできます。

ただし、複数のファイルを一度にコピー（または移動）しようとするときには、コピー先「 ⟨destination⟩ 」はディレクトリでなくてはならないということに注意してください。コピー先がファイルの場合には、一度に一つのファイルしかコピーできません。

3.8 UNIX での配管工事

3.8.1 標準入力と標準出力

多くの UNIX コマンドは標準入力（英語では standard input で、よく stdin と略されます）というものから入力を受け、標準出力（英語では standard output で、 stdout と略されます）へデータを出力します。これは、シェルによって、標準入力をキーボードに、標準出力を画面にと割り当てられているからです。

ここで cat を使った例を挙げてみましょう。普通は cat はコマンドラインに与えられたファイル名のファイルからデータの入力を得て直接標準出力にデータを送ります。つまり次のようなコマンドを使えば、

/home/larry/papers# cat history-final masters-thesis

history-final の内容に続いて masters-thesis の中身を表示します。

しかし cat に引数として何もファイル名が与えられていないと、データを標準入力から読みこみ、標準出力に送り返します。例を挙げましょう。

     /home/larry/papers# cat

Hello there.

     Hello there.

Bye.

     Bye.

ctrl-D

     /home/larry/papers#

ユーザーがイタリック体で示した部分を一行入力するごとに、 cat コマンドによってその内容がすぐさま画面に表示されます。標準入力からデータを読んでいるときはコマンドは EOT (end-of-text: テキストの終わり) のシグナルが来たときに、入力が「終了した」と判断されます。一般的には、 ctrl-D を押すことでこのシグナルが発生します。

もう一つ例を挙げましょう。 sort コマンドはテキストファイル（または標準入力）から何行かを読みこみ、それを並べ替えたものを標準出力に送ります。次のようにやってみましょう。

     /home/larry/papers# sort

bananas carrots apples ctrl-D

     apples
     bananas
     carrots
     /home/larry/papers#

これでアルファベット順に並べ替えられたリストができました。 UNIX って便利でしょう？

3.8.2 入力と出力のリダイレクト

では次に、「買いたい物の一覧を sort で並べ替えてファイルにしたい」としましょう。シェルは標準出力をファイルに保存する機能を備えています。この機能を一般にリダイレクトと呼びます。次に示すように「 > 」という文字を使います。

     /home/larry/papers# sort > shopping-list

bananas carrots apples ctrl-D

     /home/larry/papers#

sort の結果は表示されません。代わりに shopping-list というファイルに保存されました。中身を見てみましょう。

     /home/larry/papers# cat shopping-list
     apples
     bananas
     carrots
     /home/larry/papers#

ほらほら、買い物リストは並べ替えられて、しかも内容がファイルに保存されましたね。では次に、並べ替えていない買い物の一覧を items というファイルに保存してあるとしましょう。このときは、ファイルに保存されているものを標準入力の代わりにコマンド行に与え、標準出力は前の例のようにリダイレクトします。

/home/larry/papers# sort items > shopping-list

     /home/larry/papers# cat shopping-list
     apples
     bananas
     carrots
     /home/larry/papers#

これとは別のやり方もあります。実は、標準出力だけでなく標準入力も「 < 」という文字を使ってリダイレクトすることができるのです。

     /home/larry/papers# sort < items
     apples
     bananas
     carrots
     /home/larry/papers#
sort < items も sort items もやっていることは同じです。しかし、はじめの方の sort < items

は item というファイルの中のデータがあたかも標準入力から打ちこまれたかのように扱われます。リダイレクトはシェルの機能で行われるので、 sort コマンドは items ファイルの名前は知らないのです。シェルが items ファイルを標準入力に結合し、 sort はデータがキーボードから打ちこまれた場合とまったく区別なく（標準入力から）読みこんでいるのです。

ここで、フィルタという考え方が重要になります。フィルタは標準入力からデータを読みこみ、なんらかの処理をして標準出力に送るプログラムのことです。リダイレクトの機能を使えば標準入力や標準出力はファイルに結合することもできます。例えば sort は簡単なフィルタです。入ってくるデータを並べ替えて標準出力に送ります。 cat も簡単なフィルタです。これは入ってくるデータを何もせずにただ標準出力に送ります。

3.8.3 パイプを使う

ここまでで、 sort をフィルタとして使う方法を示しましたね。これらの例はデータがすでにファイルにあるか、自分で打ちこむかすることを前提にしています。では ls のような他のコマンドの出力を並べ替えたいときには、どのような方法があるのでしょうか。例えばカレントディレクトリのファイル一覧をアルファベットの逆順に並べてみることにしましょう。 sort コマンドは -r オプションを付けるとアルファベットの逆順に並べ替えを行います。次の例を見てください。

     /home/larry/papers# ls
     english-list
     history-final
     masters-thesis

     notes
     /home/larry/papers# ls > file-list
     /home/larry/papers# sort -r file-list
     notes
     masters-thesis
     history-final
     english-list
     /home/larry/papers#

このように ls の出力をファイルに保存して、そのファイルに対して sort -r を実行してみました。しかしこの方法は面倒ですし、 ls の結果を保存する中間ファイルを作らなくてはなりません。

これはパイプ機能を使えば解決できます。パイプはシェルの備える機能で、あるコマンドの出力を標準出力から『パイプ』を通して別のコマンドの標準入力へ送るといったことができます。今の例では ls の標準入力を sort の標準出力に送ればいいですね。「 | 」という文字がパイプを作るために使われます。

     /home/larry/papers# ls | sort -r
     notes
     masters-thesis
     history-final
     english-list
     /home/larry/papers#

このコマンドの方がずっと短く、打ちこむのも簡単ですよね。もう一つ役に立つ例を挙げましょう。次のコマンドを実行してみてください。

     /home/larry/papers# ls /usr/bin

たぶん長いファイルのリストを表示しはじめ、読めないくらい早く画面を通りすぎてしまうでしょう。これでは困るので more を使って /usr/bin のファイルの一覧を見てみましょう。

     /home/larry/papers# ls /usr/bin | more

今度は自分で読みながら順番に見ていけますね。

これでおしまいではありません。三つ以上のコマンドをパイプでつなぐこともできるのです。 head というコマンドは入力 (ここではパイプからの入力) の最初の数行だけを表示します。例えば、カレントディレクトリのファイル名のうちアルファベット順に並べた最後のものを表示したければ、こうします。

     /home/larry/papers# ls | sort -r | head -1
     notes
     /home/larry/papers#

head -1 は入力の最初の 1 行を表示するだけです。 (この場合は ls からの入力ですね。 )

3.8.4 元のものをこわさずにリダイレクト

「 > 」を使ってリダイレクトすると、ファイルを破壊することがあります。次の例では file-list のファイルの内容を上書きしてしまいます。

     /home/larry/papers# ls > file-list

代わりに「 >> 」でリダイレクトすると、元のファイルの内容を消去せずに、結果を元のファイルに『追加』します。

     /home/larry/papers# ls >> file-list

こうすると ls の出力はもとの file-list の内容の後に追加されます。

リダイレクトとパイプはあくまでシェルの機能だということを覚えておいてください。シェルが「 > 」と「 >> 」と「 | 」という簡単な表現を提供しているので、その時に使われるコマンドには依存しません。

3.9 ファイルの許可属性

3.9.1 ファイルの許可属性とは

UNIX では複数の利用者が１台のコンピュータを共有するので、ユーザー各人のファイルを他人が勝手に扱わないよう保護するためのファイル許可属性というものがあります。このおかげで、各ユーザーはファイルやディレクトリを『所有』することができるのです。たとえば、 Larry というユーザーが自分のホームディレクトリで作ったファイルは Larry のものになり、 Larry が利用できるわけです。

さらに、だれかのファイルを全てのユーザーで共同利用したり、一群のユーザーの間だけで利用したりすることもできます。逆に、ファイルの所有者 Larry の意思で、自分のファイルを他人が利用できないようにと、他のユーザーのアクセスを一切遮断してしまうこともできます。ほとんどの UNIX システムのデフォルト設定では、他のユーザーがファイルを読むことは許すが変更や削除は禁止となっています。

既に述べたように、どのファイルもだれかの所有物ですが、さらに、ファイルはどこかのグループの所有物でもあるのです。グループとは、システム管理者が決めたユーザーの集まりのことです。ユーザーを登録するときには、少なくとも一つのグループに所属させる決まりになっていてます。ただし、一人のユーザーを複数のグループに所属させることもできます。

グループは通常、そのコンピュータを使うユーザーのタイプ別に決められます。たとえば、大学の UNIX システムでは、ユーザーが student(学生) ・ staff(技術職員) ・ faculty(教授) ・ guest(ゲスト) といったグループに分かれていたりします。これ以外にも、 bin や admin などのシステム運用に使われるグループというものもいくつかあります。これはシステム自身のリソースへのアクセスを管理するためのもので、実在のユーザーが所属することはまずありません。

ファイルの許可属性は、『読み取り』・『書き込み』・『実行』の３種類に大きく分かれています。さらに、これらの許可は、ファイルの所有者・ファイルを所有するグループ・所有グループ以外の全てのユーザーの３つのクラスのユーザーにそれぞれ与えられます。

ユーザーは、ファイルの読み取り許可が与えられていれば、そのファイルの中身を読むことができ、ディレクトリに対しての読み取り許可が与えられていれば、（ls を使って）そのディレクトリの中身を表示することができます。また、ファイルの書き込み許可があれば、ファイルへの書き込みや書き換えができ、ディレクトリに対する書き込み許可があれば、そのディレクトリの中での新しいファイルの作成や既存のファイルの削除ができるのです。そして、実行許可があればファイルをプログラムやシェルスクリプトとして実行出来るようになり（もちろん、そのファイルがプログラムやシェルスクリプトならばの話ですよ）、ディレクトリに対する実行許可が与えられている場合は、 cd でそのディレクトリに移ることができるのです。

3.9.2 ファイルの許可属性の見分け方

ファイルの許可属性を説明するために、許可属性の様子 (許可情報) の例を見てみましょう。 ls を -l オプションを付けて実行すると、ファイルの許可情報を含めた詳しい一覧 (longlist) を見せてくれます。

     /home/larry/foo#
     /home/larry/foo# ls -l stuff
     -rw-r--r--   1 larry    users         505 Mar 13 19:05 stuff
     /home/larry/foo#

表示されている１番目の項目がファイルの許可情報です。３番目はこのファイルの所有者（larry）を表し、４番目はファイルが所属するグループ（users）で、そして、最後の項目がファイル名（stuff）です。残りの項目は後ほど説明することにします。

このファイルは larry の所有物で、しかも users というグループに属していることがわかります。ファイルの許可情報に目を移しましょう。文字列 -rw-r--r-- には、順にファイルの所有者・ファイルの属するグループ・それ以外のユーザーに与えられた許可情報が含まれています。

許可情報の先頭の１文字（「- 」）にはファイルの種類が示されています。「 - 」はこのファイルが、ディレクトリやデバイスドライバでなく、普通のファイルであることを意味します。つぎの３文字（rw-）にはファイルの所有者である larry に与えられた許可情報が示されています。「 r 」は読み取り (read) を、「 w 」は書き込み (write) を意味します。結局、この結果から larry には stuff というファイルに対して読み取りと書き込みの許可が与えられているとわかります。

前にも述べたように、読み取りと書き込みの許可属性以外に「 x 」で表される『実行』 (execute) の許可属性があります。ところが、ここでは「 x 」ではなく「 - 」になっているので、 Larry はこのファイルを実行する許可をもっていないとわかります。これはこれで構わないのです。実は、このファイル stuff は実行するようなプログラムなどではなかったのですから。もちろん、このファイルは Larry が所有しているので、自分自身に対するファイルの実行許可を与えることができます。この点についてはまもなく触れます。

つぎの３文字の「 r-- 」はそのファイルに対するグループの許可情報を示しています。このファイルの所属するグループは users です。ここには「 r 」とだけあるので、 users というグループに登録されているユーザーはだれでもこのファイルを読むことができます。

最後の３文字も「 r-- 」ですが、これはこのシステムの他のすべてのユーザー（ファイルの所有者や users というグループに所属する者以外のユーザー）に与えられている許可の情報です。さっきと同じく「 r 」だけなので、他のユーザーはファイルを読むことはできますが書き込みや実行は許されていません。

最後に、グループに与えられる許可属性の他の例をいくつかあげておきます。

-rwxr-xr-x ファイルの所有者はファイルの読み取り・書き込み・実行ができます。ファイルの所属グループおよびそれ以外のユーザーはファイルの読み取り・実行のみできます。

-rw------- ファイルの所有者はファイルの読み取りと書き込みができます。それ以外のユーザーは全くアクセスできません。

-rwxrwxrwx すべてのユーザーがファイルの読み取り・書き込み・実行ともできます。

3.9.3 許可属性どうしの依存性

あるファイルに対しどんなアクセスが許されているかは、そのファイルが置かれているディレクトリに与えられた許可属性にも依存することに、十分気をつけてください。たとえばファイルの許可情報が -rwxrwxrwx に設定されていても、このファイルの置かれているディレクトリが読み取りと実行の許可をもっていなければ、他のユーザーはこのファイルにアクセスできません。たとえば、 Larry が自分のすべてのファイルに対し他人のアクセスを制限したいと思えば、単に自分のホーム・ディレクトリ/home/larry の許可情報を drwx------ に設定すればいいのです。こうすることで、他のどのユーザーも Larry のホームディレクトリとその中にある全てのファイルやディレクトリにアクセスすることができなくなります。こうしておけば、 Larry は一つ一つのファイルの許可属性の心配をしなくてもすむわけです。

逆に、そもそもあるファイルにアクセスしたければ、ファイルのパス名に並んでいるすべてのディレクトリに対する実行許可と、そのファイル自体の読み取り許可が全て必要なのです。

多くの UNIX ユーザーは、自分のファイルについてとても開放的です。ファイルに与えている許可情報は、ふつうは -rw-r--r-- です。他のユーザーは変更はまったくできませんが自由に読み取ることができます。

ディレクトリに与える許可属性は多くの場合は、 drwxr-xr-x です。他のユーザーがディレクトリの中を自由に見ることが許されていますが、その中でファイルを作成したり既存のファイルを削除したりはできないようになっています。

一方で、他人を自分のファイルから遠ざけておきたいと考えるユーザーも少なくありません。ファイルの許可を -rw------- に設定しておくと自分以外は誰もそのファイルにアクセスすることができなくなります。同様に、ディレクトリの許可を drwx------ に設定すると他のユーザーはそのディレクトリに入れなくなります。

3.9.4 許可属性の変更方法

ファイルの許可情報を変更するには、 chmod というコマンドを使います。ファイルの所有者だけがそのファイルの許可情報を変えることができます。 chmod の使い方は：

     chmod {a,u,g,o}{+,-}{r,w,x} ⟨filenames⟩

です。

まず、全ユーザー (all) ・所有者 (user) ・グループ (group) ・その他のユーザー (other) のうち１つ以上を指定します。つぎに、許可を与えるのか（+）与えないのか（-）を指定します。最後に読み取り (read) ・書き込み (write) ・実行 (execute) のうち１つ以上を指定します。例えば、次の用に使います：

chmod a+r stuff

すべてのユーザーにファイルへの読み取りを許可する。

chmod +r stuff

上に同じ。 a,u,g,o の指定がなければ a を指定したのと同じ扱いになるのです。

chmod og-x stuff

所有者以外のへの実行許可を取り消す。

chmod u+rwx stuff

ファイルの所有者にファイルの読み取り・書き込み・実行の許可を与える。

chmod o-rwx stuff

所有者でもなくファイルの所属グループに登録されてもいないユーザーへの読み取り・書き込み・実行の許可を取り消す。

3.10 ジョブ制御

3.10.1 ジョブとプロセス

ジョブ制御は多くのシェル（bash や tcsh を含む）が提供している機能で、複数の実行中のコマンドすなわちジョブをいちどに管理することを可能にします。詳しい話のまえに、まずは、プロセスの話をしましょう。

プログラムを実行するとき、毎回プロセス呼ばれているものが開始されます。プロセスというのは、単に、実行中のプログラムのかっこいい呼び方です。 ps というコマンドで現在実行中のプロセスの一覧を見ることができます。例えば、

     /home/larry# ps
       PID TT STAT  TIME COMMAND
        24  3 S     0:03 (bash)
       161  3 R     0:00 ps
     /home/larry#

などと表示されます。第１列目の PID はプロセス ID といって、実行中のすべてのプロセスに与えられる固有の番号です。最後の列にある COMMAND は、実行中のコマンド名を示します。ここで今見ているのは、 Larry が実行させているプロセスだけです^{4}。ここでは、 bash （Larry のシェル）と ps コマンドそのものの２つです。これを見て気づいたかもしれませんが、 bash は ps コマンドと同時に実行されているのです。 Larry が ps と打ち込み、 bash がそのコマンドを実行したのです。現在は、プロセス一覧の表示が終わり（ps の実行が終了したあとで）制御は bash にもどされ、 bash がプロンプトを表示しながら次のコマンドを待っているのです。

実行中のプロセスを、シェルはジョブと読んでいるのです。プロセスとジョブはたがいに置き換えられる言葉ですが、ジョブ制御に関係しているときは、プロセスのことをジョブと呼ぶのが一般的です。ジョブ制御とは、シェルの機能の一つで、複数の独立なジョブを交互に扱うような操作のことです。

多くの場合、ユーザーは一度に一つのジョブ（シェルに打ち込んだ最後のコマンド）だけを実行させています。ところがジョブ制御を利用すると、いちどに複数のジョブを走らせ、必要に応じてそれらを交互に扱うことができるのです。この機能は、いったいどんなふうに便利なのでしょうか？例えば、テキストファイルの編集中に、突然それを中断して別のことをしたくなったとします。ちょっと調べものをしたい場合などがあると思います。このような場合、ジョブ制御機能を使えば、エディターを一時的に休止させておいて、シェルが返してくるプロンプトで別の作業に取りかかれます。それが終われば再びエディターに戻り、片時もエディターを離れなかったかのように作業の続きができるのです。これは単なる一例で、ジョブ制御の役立つ利用法はたくさんあります。

3.10.2 表のジョブと裏のジョブ

ジョブは表（フォアグラウンド）と裏（バックグラウンド）のどちらでも走らせることができます。表^{フォアグラウンド}では、一度に一つのジョブしか実行されません。表のジョブは対話しながら動くものなで、キーボードから入力を受けつけて画面に出力を返してくるのです。（もちろん、第 3.8 節にあるように入力や出力を別の装置やファイルに切り替えれば別ですよ。）反対に、裏^{バックグラウンド}のジョブは端末からの入力を受けつず、普通は、対話せずにおとなしく動き続けるのです。

ジョブの中には、実行の終了までに長時間かかるうえに実行中はとくに面白くないものがあります。大きなプログラムのコンパイルや大きなファイルの圧縮などがそうです。そんなジョブが終わるまで、ただボーッと座っている必要はありません。これらは裏で実行してやればいいのです。ジョブが裏で実行されている間に自由にほかのプログラムを走らせることができるのですから。

また、ジョブは休止（サスペンド） (suspend) させておくことができます。休止中のジョブというのは、一時的に止まっていて実行されていないジョブのことです。ジョブを休止させた場合には、表のジョブとしてでも裏のジョブとしてでもお好みの側のジョブとして、いつでも再開（レジューム） (resume) させることができます。いったんジョブを休止させた場合でも、そのジョブの内容にはまったく影響がありません。ただ単に、休止したところから仕事を続けるだけです。

4 システム上で実行中のプロセスはほかにもたくさんあります。それらは、「 ps -aux 」で全部表示されます。

ジョブの休止は中断または強制終了 (interrupt) といわれるものとは異なることに注意してください。強制終了キー（ふつうは ctrl-C ^{5}）を押してプロセスを中断すると、プロセスは永久に終了してしまい、復活させることはできません。この場合、同じコマンドをはじめから実行しなおすしかありません。ただし、プログラムによっては強制終了の指示を保留（トラップ）してしまうため ctrl-C を押してもすぐにジョブが終了しないものがあるので注意が必要です。これは、そのプログラムが終了する前に必要な後始末をおこなうように作られているからです。実際のところ、強制終了をかけても絶対に終了しないプログラムというものもあります。

3.10.3 裏のジョブの実行と強制終了の実際

簡単な例から見ていきましょう。 yes というコマンドは、標準出力に延々と「 y 」を出力するという一見無意味なコマンドです。（実は、これも役に立つコマンドなのです。イエス (y) かノー (n) かをたくさん尋ねてくるようなコマンドにパイプを通して yes の出力を渡せば、流れてゆく y がそれをぜんぶ承認してくれるというわけです。）

まずは、使ってみましょう。

     /home/larry# yes
     y
     y
     y
     y
     y

「y」の出力は無限に続きます。このプロセスは、強制終了キーを押してジョウブツさせることができます。強制終了キーは、たいていは ctrl-C に設定されているでしょう。次から次へと湧いて出るうっとうしい y を指をくわえて見ている必要もないので、 yes の標準出力を/dev/null にリダイレクトしてみましょう。覚えているかと思いますが、 /dev/null はデータ用「ブラックホール」の役割をするもので、ここに送られたデータは消えてしまうのです。これは、口数の多いプログラムを静かに走らせるのに役立つ方法です。

/home/larry# yes > /dev/null

ふーっ。だいぶましになりましたね。なにも出力されませんが、シェルのプロンプトはやはり返ってきません。これはまだ yes が実行中で、あの無意味な y を/dev/null に送り続けているからです。もういちど強制終了キーを押して、ジョブを強制終了させましょう。

さて、「 yes コマンドの実行は続けたいが、ほかの仕事もしたいのでシェルのプロンプトを戻してほしい」という状況を考えましょう。 yes をバックグラウンドに移せば裏で実行してくれますし、しかも対話がいりません。

プロセスをバックグラウンドで実行するには、コマンド行の最後に「 & 」を付けて入力すればいいのです。

/home/larry# yes > /dev/null &

     [1] 164
     /home/larry#

たぶん、シェルのプロンプトは戻ってきたと思います。でも、この「 [1] 164 」ってのはなんでしょう？それに yes コマンドは本当に実行されているのでしょうか？

5

強制終了キーは stty コマンドで設定できます。ほとんどのシステムでのデフォルト設定は ctrl-C ですが、あなたのコン

ピュータでもそうなっているとは限りません。

「 [1] 」は、 yes プロセスのジョブ番号を表しています。シェルは、実行中のすべてのジョブにジョブ番号をつけます。この例の場合、 yes が現在実行中の唯一のジョブなので、ジョブ番号 1 が付けられています。「 164 」はプロセス ID、あるいは PID といい、 OS がジョブにつけた番号です。後で触れますが、このジョブを指すのにどちらの番号を使ってもかまいません。

いま、裏のジョブとして yes が実行されていて、「y 」を続々と/dev/null に送っています。このプロセスの状況を調べるにはシェルの組込みコマンドである jobs を用います。

     /home/larry# jobs
     [1]+  Running                 yes >/dev/null  &
     /home/larry#

確かにありますね。前述の ps コマンドでジョブの状況を確認することもできます。

ジョブを終了するには、 kill というコマンドを使います。このコマンドはジョブ番号かプロセス ID 番号を引数にとります。今の場合、このジョブは 1 番だったので、以下のコマンド

     /home/larry# kill %1

で終了します。ジョブをジョブ番号で指定するときは番号の前にパーセント記号（「%」）をつける必要があります。

ジョブを終了したところで、再度 jobs を使って確認してみましょう。

     /home/larry# jobs
     [1]+  Terminated              yes >/dev/null
     /home/larry#

ジョブは本当に終了したので、もういちど jobs コマンドを実行すると何も表示されないはずです。

ジョブを開始する時にジョブ番号と並べて表示される、プロセス ID (PID) 番号を用いて、ジョブを終了することもできます。先ほどの例では、プロセス ID は 164 なので、コマンド

     /home/larry# kill 164

は

     /home/larry# kill %1

と同等です。プロセス ID でジョブを指定するときには「 % 」はいりません。

3.10.4 ジョブの休止と再開の実際

ジョブを裏^{バックグラウンド}に移すには別の方法もあります。ジョブをふつうに（表^{フォアグラウンド}で）開始し、一度停止させてから、裏のジョブとして再開させるのです。では、実際にやってみましょう。

まず最初に、ふつう通りに表のジョブとして yes のプロセスを開始してみてください。

/home/larry# yes > /dev/null

この場合、 yes が表のジョブとして実行中なので、前にやったのと同じくプロンプトは返ってきません。

今度は、ジョブを ctrl-C で強制終了するのではなく、休止^{サスペンド}させてみましょう。ジョブを休止させても、終了してしまうことはありません。再開するまで一時的に実行を停止するだけです。これをおこなうには、休止キーを押します。休止キー (susp) はたいてい ctrl-Z に設定されています。

/home/larry# yes > /dev/null

ctrl-Z

     [1]+  Stopped                 yes >/dev/null
     /home/larry#

休止中のジョブは単に実行されていないだけです。 CPU 時間も割り当てられていません。それでも、このジョブを再開させることができ、再開後は、なにごともなかったかのように続行されます。停止したところから引き続き実行されるのです。

ジョブを、表のジョブとして再開するには、 fg （ foreground の fg）というコマンドを使います。

     /home/larry# fg
     yes >/dev/null

シェルはコマンド名をあらためて表示してくれるので、どのジョブを表のジョブにしたのかがわかります。もういちど、 ctrl-Z でジョブを休止させてみましょう。今度は、 bg というコマンドを使ってジョブを裏のジョブとして続行してみてください。こうすると、前の節で「 & 」をつけてコマンドを開始したときとまったく同じように実行がおこなわれます。

     /home/larry# bg
     [1]+ yes >/dev/null &
     /home/larry#

さらにプロンプトも戻ってきました。 jobs を実行すれば yes が本当に実行中だということがわかりますし、前と同じく kill でこのジョブを終了させることもできます。

さて、このジョブを再び休止させるにはどうしたらいいでしょうか？この場合、 ctrl-Z は使えません。それは、このジョブが裏のジョブとして、実行されているからです。正解は、 fg を用いてジョブを一旦表のジョブにしてから休止させるさせるというものです。やってみればわかると思いますが、 fg は休止中のジョブにも裏のジョブにも使えます。

裏のジョブは、休止中のジョブとは大きな違いがあります。休止中のジョブのはまったく実行されていません。 CPU 時間も使っていないし、なにも仕事をしていません（ただ、メモリーは占領していますし、ディスクにスワップされているかもしれません）。一方、バックグラウンドにあるジョブはきちんと実行されていて、メモリも使用していて、ほかの仕事と並行してなにか処理がなされているのです。おかげで、裏のジョブは画面にテキストを出力することさえあるのです。これでは画面を使ってほかのことをするときに邪魔になります。たとえば以下のコマンド

     /home/larry# yes &

を、標準出力を /dev/null に切り替えないまま実行すると、「y 」が画面に続々と出力されてきて強制終了もできません（バックグラウンドで実行中のジョブを強制終了するのに ctrl-C は使えないのです）。永遠に続くこの「 y 」を止めるには、（打ち込む文字が見えないまま） kill コマンドを実行するしかありません。

注意点をもうひとつ。 fg や bg コマンドは、一般に最後に休止したジョブ（jobs のコマンドで見るとジョブ番号の横に+がついているもの）をフォアグラウンドまたはバックグラウンドに移します。いちどに複数のジョブが走っている場合は、 fg や bg の引数としてジョブ番号を与えると、特定のジョブを表のジョブにしたり裏のジョブにしたりすことができます。たとえば

     /home/larry# fg %2

（2 番のジョブをフォアグラウンドに移動）、または

     /home/larry# bg %3

（3 番のジョブをバックグラウンドに移動）。なお、プロセス ID を指定して fg や bg を使うことはできません。

さらに、ジョブ番号だけを

     /home/larry# %2

のように打ち込むのは、

     /home/larry# fg %2

と打ち込むのと同じです。

繰り返しますが、ジョブ制御による操作はシェルの機能であることを忘れないでください。 fg ・ bg ・ jobs などはシェルの組込みコマンドなで、これらは独立したプログラムではないのです。何らかの理由でジョブ制御を提供していないシェルを使っているならば、これらのコマンドは無いかもしれません。その場合には、 bash や tcsh などのジョブ制御を提供しているシェルを使ってください。

さらに、ジョブ制御に関して bash と tcsh の間でも異なる点がいくつかありますので注意してください。実際のところ、ジョブ制御をまったくサポートしないシェルもあるほどですが、 Linux でわれるシェルのほとんどはジョブ制御をサポートしています。

3.11 vi を使う

テキストエディタというのは、文書（テキスト）を内容とするファイルを編集（エディット）するのに使われるプログラムのことをいいます。ただし、ここでいう文書とは、手紙・ C 言語のプログラム・システムの管理用設定ファイルなどのことです。 Linux で使えるエディタはたくさんありますが、全ての UNIX システムで使えることが確実なエディタは vi （visual editor）だけです。 vi は決して使い易いエディタではありませんし、使い方案内が組み込まれたエディタでもありません。しかしながら、 vi が UNIX の世界で非常に普及していることと、たまに vi を使わざるを得ない場合があったりすることから、 vi について解説することにします。

どんなエディタが好きかというのは、多分に個人的な趣味と指向の問題です。多くのユーザは、凝った作りで、使い方案内が組み込まれていて、非常に強力な Emacs というエディタがお好みのようです。 Emacs は、たぶん、 UNIX 関連の全てのコマンドの中で一番多くの機能をもったコマンドでしょう。 LISP に似せて作られた組み込み言語をはじめ、多くの拡張機能を持っています（“Eliza” という人工知能プログラムまであります）。しかしながら、 Emacs とその関連ファイルはけっこう大きいので、 Emacs を利用できないシステムはたくさんあります。それに対し、 vi は小さくて強力ですが、 Emacs よりも使いにくいのが難点です。それでも、一旦基本を覚えてしまいさえすれば、実はとても使い易いエディタなのです。それはちょうど、なかなか越えられない学習過程の壁のようなものです。

この章は vi の基本的な使い方をひと通り説明した入門編です。すべての機能についての話をするのではなく、 vi を使い始めるのに必要なことだけについて解説します。 vi が備えたさまざまな機能をもっと知りたいという場合にはオンラインマニュアルを参照してみてください。あるいは O’Reilly and Associates 社から出版されている「Learning the vi Editor」を読まれるのもよいでしょう^{6}。詳しくは付録 Bを御覧下さい。

3.11.1 基礎知識

vi には、三つの操作モードがあります。これは、コマンドモード・挿入 (インサート) モード・最下行モードと呼ばれているものです。常に、そのうちのどれか一つを使っていることになります。

vi を起動した直後は、コマンドモードに設定されています。このモードではファイルを編集するコマンドやモードを切替えるコマンドを使うことが出来ます。例えばコマンドモードで「x」と入力するとカーソルが指している文字が消去されます。また、矢印キーを押すとカーソルが動きます。なお、コマンドモードで使われるコマンドの長さは、たいてい 1 文字か 2 文字です。

実際に文章を入力したり書き換えたりするモードが挿入モードです。たぶん、 vi を使っているほとんどの時間は挿入モードを使うことになるでしょう。挿入モードに入るには、コマンドモードで「i」 (insert の意味です) を入力します。挿入モードにいる間は、文書中のカーソル位置に文章を加えることができます。挿入モードから抜けてコマンドモードに戻るには esc キーを押します。

6 {訳者注: この本の日本語版がアスキー出版局から「vi 入門」として出版されています。また、坂本文著の「楽しい UNIX」 \atop の後半にも詳しい解説があります。}

最下行モードは拡張されたコマンドを vi に与えるために使われる特別なモードです。これらのコマンドを入力中、コマンドはその名の通り画面の最下行に表示されます。例えばコマンドモードから「:」と入力すると最下行モードに入り、「wq」 (バッファの内容をファイルに書き込んで vi を終了) コマンドや「q! 」 (バッファの内容をファイルに書き込まずに終了) などのコマンドを使うことができます。最下行モードでは大抵、 1 文字より長いコマンドが使われます。

3.11.2 vi の起動方方

これらの基礎を理解するには、実際に vi を起動して、ファイルを編集してみるのが一番です。以下、実際の画面の例を示しながら説明していきます。なお、例では画面は (25 行ではなく)6 行しかないように扱っています。

vi コマンドの起動のさせかたは、

vi ⟨filename⟩

です。ここで ⟨filename⟩ は編集したいファイルの名前です。では、

     /home/larry# vi test

と入力して vi を起動してみてください。これで、 test というファイルを編集できます。以下のような画面が現れるはずです。

      \underline{~} ~

      ~
      ~
      ~
      ~
      "test" [New file]

「~」という文字の列はファイルの最後にいることを示しています。

3.11.3 文章を入力する

起動直後はコマンドモードになっています。文書をファイルに入力するために、 i を押してみてください。これで挿入モードに入ります。続いて、文書の入力を始めてみてください。

      Now is the time for all good men to come to the aid of the party\underline{.}
      ~
      ~
      ~
      ~
      ~

文書入力中は return キーを押して改行しながら何行でも好きなだけ入力することが出来ます。また、バックスペースキーを使って打ち間違いを直すこともできると思います。

では、 esc キーを押して挿入モードを抜けて、コマンドモードに戻りましょう。

コマンドモードではカーソルを動かすのに矢印キーを使う事ができます。ここにあげた例ではファイルの中身が 1 行だけしかないので上向き矢印キーや下向き矢印キーを使うとピッと警告音が鳴るでしょう。

文章を入力する方法は i コマンド以外にもいくつかあります。例えば a コマンドを入力すると現在のカーソル位置にではなく、現在のカーソル位置の後 (after ^{7}) に文章を入力できます。では、左矢印キーを使って、 good と men の間にカーソルを動かしてみてください。

      Now is the time for all good men to come to the aid of the party.
      ~
      ~
      ~
      ~
      ~

ここで a を押して挿入モードに入り、「wo 」と入力した後 esc キーを押してコマンドモードに戻ってみてください。

      Now is the time for all good wo\underline{m}en to come to the aid of the party.
      ~
      ~
      ~
      ~
      ~

うまくいきましたか？現在カーソルがある行の 1 行下から入力を開始するには o コマンドを使います。 o キーを押して先

程の例文の次の行に、１・２行追加してみてください。

      Now is the time for all good women to come to the aid of the party.
      Afterwards, we'll go out for pizza and beer\underline{.}
      ~
      ~
      ~
      ~

以上、コマンドモードにいるのか（この場合 i ・ a ・ o などのコマンドが使える）、挿入モードにいるのか（この場合文章を入力でき、 esc キーを押せばコマンドモードに戻る）を常に意識してください。もしわからなくなってしまったら、あわてずに esc キーを押してみてください。

3.11.4 文書の削除

コマンドモードでは、 x コマンドでカーソルの位置にある一文字を削除します。 x キーを 5 回押すと例文は以下のようになります。

      Now is the time for all good women to come to the aid of the party.
      Afterwards, we'll go out for pizza and
      ~
      ~
      ~
      ~

ここで a キーを押して文章をちょっと入力して、 esc キーを押してコマンドモードに戻ってきてください。

      Now is the time for all good women to come to the aid of the party.
      Afterwards, we'll go out for pizza and Diet Coke\underline{.}
      ~
      ~
      ~
      ~

7 {訳者は、 append （追加する）の a と覚えていました。どちらでも覚えやすいもので覚えてください。「あと」の「あ」で \atop も構いませんし。 :-)}

行全体をまとめて消去することもできます。これには、 dd コマンド（ d キーを続けて 2 回押します）を使います。いま、カーソルが２行目にありますね。 dd と入力してみてください。

      \underline{N}ow is the time for all good women to come to the aid of the party.
      ~
      ~
      ~
      ~
      ~

現在カーソルが指している単語を消去するには dw コマンドを使います。カーソルを good という単語の上に置いて dw と入力してください。例文は以下のようになります。

      Now is the time for all \underline{w}omen to come to the aid of the party.
      ~
      ~
      ~
      ~
      ~

3.11.5 文章の書き換え

R コマンドは文章の一部を上書きしながら置き換え (replace) してゆきます。カーソルを party の最初の文字（p ですね）に置いて R キーを押し、 hungry という単語を入力してみてください。

      Now is the time for all women to come to the aid of the hungry\underline{.}
      ~
      ~
      ~
      ~
      ~

R コマンドは、 i コマンドや a コマンドと同じように、文書の編集に使えますね。

r コマンドはカーソル位置の一文字を置換します。例文でカーソルを Now の最初の文字 (N ですね) に置いて、 r に続けて C と入力してみてください。すると、

      \underline{C}ow is the time for all women to come to the aid of the hungry.
      ~
      ~
      ~
      ~
      ~

と、変わるでしょう。

「~」コマンドはカーソル位置の文字の大文字・小文字を入れ換えます（カーソル位置の文字が大文字なら小文字に、小文字なら大文字に変えます）。例えばカーソルを Cow の o に置いて˜キーを繰り返し押してゆくと、最終的に、

      COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY\underline{.}
      ~
      ~
      ~
      ~
      ~

と、なるでしょう。

3.11.6 移動コマンド

矢印キーを使って文書中を自由に移動する方法は、もう知っていますね。この他にも、カーソルを動かすコマンド h ・ j ・ k ・ l があります。順に、左・下・上・右に動かすコマンドです。これらのコマンドは矢印キーが何らかの理由でうまく使えない時などに便利です。^{8}

w コマンドはカーソルを次の単語の最初へ動かします。 b コマンドはカーソルを一つ前の単語へ動かします。

0(ゼロ) コマンドはカーソルを行の先頭へ動かします。 $コマンドはカーソルを行の最後へ動かします。

大きなファイルを編集している時には次の画面や一つ前の画面に一気に移動したいことがあります。 ctrl-F キーはカーソルを次の画面へ、 ctrl-B キーはカーソルを前の画面へ動かします。カーソルを gt ファイルの最後へ動かすには G コマンドを使います。このコマンドは任意の行へカー

ソルを動かす事もできます。例えばコマンド 10G はカーソルをファイルの 10 行目に動かします。カーソルをファイルの先頭へ持って行きたい時は 1G を使います。

移動コマンドは他のコマンド、例えば消去コマンドと組み合わせて使う事ができます。例えば d$コマンドは現在のカーソル位置から行末までの全ての文字を消去し、 dG は現在のカーソル位置からファイルの最後までの全ての文字を消去するなどです。

3.11.7 ファイルの保存と vi の終了

ファイルの内容を書き変えずに vi を強制終了してみましょう。それには:q!コマンドを使います。コマンドモードで「: 」を入力するとカーソルが画面の一番下の行に移動して最下行モードに入ります。やってみてください。

      COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.
      ~
      ~
      ~
      ~
      ~
      :

最下行モードでは拡張されたコマンドが使えます。そのひとつが q!です。 q!はファイルを保存せずに vi を終了します。 :wq はファイルを保存して vi を終了（書き込み (write) と終了 (quit)）します。コマンドモードにある ZZ(コマンドモードで使うので、「: 」を入力せずにいきなり ZZ と入力します) は :wq と同じ働きをします。

vi を終了せずにファイルの保存だけをするには:w を単独で使います。

3.11.8 別のファイルを編集する

別のファイルを編集するには:e コマンドを使います。例えば例文の test というファイルを編集するのをやめて foo というファイルを編集したい場合は以下のようにします。

      COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.
      ~
      ~
      ~
      ~
      ~
      :e foo

ファイルを保存せずに:e コマンドを使った場合は以下のようなエラーメッセージがでます。

8 {昔の端末では矢印キーが無かったりします。また、最近の端末などでも設定によっては矢印キーが効かないことがありま \atop す。そうでなくても、キーボードを見ないで打つような人には、 h ・ j ・ k ・ l の方が押しやすいでしょう。}

      No write since last change (":edit!" overrides)

これは、ファイル内容の変更を保存しなままで別のファイルを編集すると、元のファイルの変更内容は保存されずに消えてしまうと言う事を示しています。この時点で:w コマンドを使って元のファイルを保存した後:e コマンドを使うこともできますし、

      COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.
      ~
      ~
      ~
      ~
      ~
      :e!  foo

のように e!コマンドを使って強制的に新しいファイルを編集し始めることもできます。「! 」を付けて「変更した元のファイルを保存せずに新しいファイルを編集する」と vi に伝えているわけです。

3.11.9 他のファイルを取り込む

:r コマンドは、現在編集中のファイルに他のファイルを取り込む（読み込む (read)）コマンドです。例えば

     :r foo.txt

というコマンドは foo.txt というファイルの内容を現在のカーソル位置に挿入します。

3.11.10 シェルコマンドを実行する

vi の中からシェルコマンドを実行することもできます。 :r!コマンドは:r コマンドのように働きますが、他のファイルを挿入するのではなく、与えられたコマンドの出力をカーソル位置に挿入します。例えば

     :r!  ls -F

というコマンドの結果、例文は

      COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.
      letters/
      misc/
      papers\underline{/}
      ~
      ~

となります。 vi の中から一時的にシェルを使うことも出来ます。つまり、シェルコマンドを実行し、その終了後

に vi に戻るということです。

     :!  ls -F

というコマンドを実行すると ls -F コマンドが実行され、結果がスクリーンに表示されますが、編集中のフィルに結果が挿入されることはありません。

     :shell

というコマンドを使うと vi はシェルを起動し、そのシェルの中でコマンドを実行中 vi は一時的に休止状態になります。 exit コマンドを使ってシェルを終了させれば vi に戻ります。

3.11.11 使い方案内

多くの UNIX プログラムと同様、 vi には、対話的な使い方案内が組み込まれていません。しかし、いつでも vi のオンラインマニュアルを読むができます。また、 vi は ex という行エディタをコントロールし、全画面を活用して便利に扱えるようにしたものです。実際、 vi の最下行モードの多くのコマンドを扱っているのは ex です。ですから、 vi のマニュアルだけでなく ex のオンラインマニュアルも読んでみてください。

3.12 個人用の環境整備

シェルには、ユーザーの作業環境を整備するための多くの仕組みが用意されています。既に述べたように、シェルは単にコマンドを実行させるだけではなく、強力なプログラミング言語を持っているのです。シェルスクリプトの書きかたの話を始めると様々な話をしなければならないので、ここでは、シェルの進んだ機能を使って UNIX 上で仕事を簡単にする方法をいくつか紹介するだけにしたいと思います。

異なるシェルでは異なった構文を使います。前にも少し触れましたが、 Tcsh では C 言語に似た構文を使いますが、 Bourrne shell とその仲間たち（ bash ・ ksh など）では別の構文を使います。この章では、 C シェル（ csh ）と B シェル（ sh ）の文法の違いについて言及することはしませんが、 B シェルの構文のシェルスクリプトを例に説明をしてゆくことにします。

3.12.1 シェルスクリプト

一連のコマンドを何度も使う場合には、それらのコマンドをひとまとめにして「一つのコマンド」にしてしまい、毎回いちいち入力する手間を省きたいと思うでしょう。例えば、

/home/larry# cat chapter1 chapter2 chapter3 > book

     /home/larry# wc -l book
     /home/larry# lp book

という一連のコマンドは、 chapter1 ・ chapter2 ・ chapter3 という３つのファイルを連結して、その結果を book というファイルに書き込み、出来上がった book の行数を表示し、 lp コマンドで book をプリントアウトします。

全てのコマンドを入力する代わりに、これらのコマンドを一つのシェルスクリプトにまとめることができます。シェルスクリプトについては 3.12.1章で簡単に述べました。上記の全てのコマンドを実行するシェルスクリプトは以下のようになります。

     #!/bin/sh
     # A shell script to create and print the book
     cat chapter1 chapter2 chapter3 > book
     wc -l book
     lp book

このスクリプトが makebook というファイルに保存されたとすると、次のような簡単なコマンドを使うだけで上記の一連の作業を実行することができます。

     /home/larry# makebook

シェルスクリプトはごく普通の文書ファイルですから、 emacs や vi のような文書エディタを使って作ることができます^{9}。

9 vi の使用法については 3.11に述べてあります。

では、いま作成したシェルスクリプトを見てみましょう。 1 行目の「#!/bin/sh 」は、このファイルがシェルスクリプトであることを示すと同時に、スクリプトをどのように実行するかを指示しています^{10}。「 #!/bin/sh 」はシェルスクリプトの実行のために /bin/sh を起動することを指示しています。ここで、 /bin/sh はプログラムとしてのシェルを意味しています。なぜこんなことが重要なのでしょう？どんな UNIX でも、 /bin/sh は、まず B シェル系のシェルだと思います。 Linux では、大抵 bash です。シェルスクリプトを実行するプログラムとして/bin/sh を使うようにと強制すれば、 C シェルなどではなく、 B シェルの構文を解釈できるものが確実に使われるからです。たとえあなたのログインシェルが Tcsh などの C シェル系のものでも、このスクリプトは B シェル系のシェルに実行されるのです。

2 行目はコメントです。「 # 」から行末までがコメントになります。コメントはシェルには無視されるだけです。一般に、シェルスクリプトの覚え書きなど、読む人のために使われます。

残りの行は、シェルに直接打ち込むコマンドをそのまま並べたものです。実際に、あたかもシェルプロンプトに続いて入力されたたかのように読み込まれ、実行さるのです。

シェルスクリプトには、そのファイルの許可属性が重要です。シェルスクリプトを作ったら、忘れずに実行許可を与えてやりましょう^{11}。

makebook というシェルスクリプトに自分の実行許可を与えるには、

/home/larry# chmod u+x makebook

とすればＯＫです。

3.12.2 シェル変数と環境

シェルでも変数が使えます。変数は、大抵のプログラム言語で使えますよね。変数とは、要するに、名前を与えられたデータのことです。

◇ Tcsh などの C シェル系のシェルは、ここで述べたのとは異なる方法で変数の設定を行います。ここでは（たぶんあなたが使っていると思われる） Bash のような B シェル系のシェルの使用を仮定しています。 Tcsh についての詳細は、オンラインマニュアルを参照してください。

変数に値を代入するには、代入演算子「 = 」を使います。変数の値を参照するには、変数名の前に「 $ 」をつけてやります。

/home/larry# foo=“hello there”

上記の例では、変数「 foo 」に「 hello there 」という値を設定しています。では、変数名の前に「 $ 」をつけて、この値を参照してみましょう。確かに、

     /home/larry# echo $foo
     hello there
     /home/larry#

となっていますね。これは、

/home/larry# echo “hello there”

     hello there
     /home/larry#

としたのと同じ結果です。

これまでに述べてきたような変数（いわゆるシェル変数）は内部変数です。これは、変数を定義したシェルだけで参照されるということを意味します。シェル変数は、シェルスクリプトに便利な機能です。例えば、ファイル名を何度も使うような場合、シェル変数に保存しておけば便利です。なお、 set コマンドを使うと、定義されている全てのシェル変数の一覧を表示することができます。

10

実は、 UNIX の種類によってこの行を解釈するのプログラムが異なります。 OS の execve システムコールで解釈される

ものが主流です。 11 文書ファイルを作る場合、実行許可が与えられないようになっているのが普通です。

一方シェルの中から、変数を環境として広める (export する) こともできます。環境とは全てのコマンドが参照できる変数の集まりのことです。多くのコマンドが、「環境」によって振舞いを変えるのです。シェルの内部で定義されてい変数を広めると、その変数は環境の一部となります。環境に変数を広めるのには、 export コマンドを使います。

◇ またもや Bash と Tcsh の違いについてです。 Tcsh では、環境変数（環境として広められた変数）を設定するのに別の方法（ setenv というコマンド）を使います。詳しくは、 Tcsh のオンラインマニュアルを見てみてください。

UNIX では、環境はとても重要です。環境変数を設定するだけで、それを参照するコマンドの振舞いを変えさせることができるのですから。

ここで簡単な例を示します。 man コマンドは PAGER という環境変数を参照します。 PAGER にコマンドの名前を設定してやると、それがオンラインマニュアルを画面毎に表示するプログラム（これを「ページャ」と言います）として使われます。何も指定しない場合に使われるのは more です。

環境変数 PAGER に「 cat 」を設定してみてください。こうすると、 man の出力は、 1 ページごとに止まることなく、どんどんと画面に表示されます。まず、

     /home/larry# PAGER=“cat”

で、シェル変数を設定し、

     /home/larry# export PAGER

で、 PAGER を環境へ広めてみてください。この後、「 man ls 」を実行してみれば、マニュアルが全く止まらずに画面から流れてしまうはずです。やってみてください。

さて、オンラインマニュアルの表示に more コマンドが使うように、 PAGER を「 more 」に設定しておきましょう。

     /home/larry# PAGER=“more”

ここで、 PAGER の値を変更した後、 export を使って変数を広める必要がないことに注意してください。環境として広められた変数は、全ての変更が自動的に環境にも反映されるのです。

各コマンドがどの環境変数を使っているかは、オンラインマニュアルを見ればわかります。例えば man のマニュアルページには PAGER がページャを指定するのに使われると書いてあります。いくつかのコマンドに共有されている環境変数もあります。例えば、多くのコマンドが環境変数 EDITOR を参照し、指定されたエディタを必要に応じて呼び出します。

また、環境は login 時の重要な情報を保存するのにも使われます。例えば、環境変数 HOME はホームディレクトリの名前を保持しています。

     /home/larry/papers# echo $HOME
     /home/larry

他にも、 PS1 という環境変数面白い環境変数があります。これで、いつも目にするシェルのプロンプトが決まります。例えば、

/home/larry# PS1=“Your command, please: ”

     Your command, please:

のようになります。プロンプトをいつも通りの（カレントディレクトリと「 # 」記号を表示する）に戻すには、

     Your command, please: PS1=“\w# ”
     /home/larry#

とします。 bash のオンラインマニュアルにプロンプトの設定に使われる記号についての説明があります。

3.12.2.1 環境変数「 PATH 」

ls コマンドを使う時、シェルはどのようにして ls の実行ファイルを見つけるのでしょうか？実際、 ls で実行されるのは、大抵のシステムでは /bin/ls なのです。実は、シェルがコマンドを実行する際、「環境変数 PATH に書かれているディレクトリ」の中にある実行ファイルを探しているのです。

PATH という環境変数は、シェルがコマンドを探す時のディレクトリ名を、「 : 」を挟んで並べたものになっているのです。例えば、 PATH の中身が

     /bin:/usr/bin:/usr/local/bin:.

と設定されているとします。この場合に ls コマンドを実行すると、シェルは最初に/bin/ls を探し、無ければその次に /usr/bin/ls をと、順にコマンドを探してゆきます。

ただし、「 PATH 」は通常のファイルを探すのには無関係ですから、注意してください。例えば、

     /home/larry# cp foo bar

というコマンドが与えられた場合、シェルは foo や bar というファイルを探すのに PATH を使ったりしません。これらのファイルはカレントディレクトリにあるとして探されます。この例でシェルが PATH を使うのは、 cp コマンドのありかを探す時だけです。

シェルが PATH という環境変数を参照してくれるおかげで、全てのコマンドの実際のありかを覚える必要がないわけです。環境変数が時間の節約に大変役に立っていることがおわかりいただけるかと思います。 UNIX システムでは、大抵、実行可能ファイルが/usr/bin や/bin などの多くの場所に分けて置かれています。「 /usr/bin/cp 」のように、いちいち絶対パス名を指定するのではなく、 PATH にコマンドを探して欲しいディレクトリの羅列を設定するだけでよいのです。

PATH が「 . 」を含んでいることに注意してください^{12}。「 . 」はカレントディレクトリでしたね。これを入れてあるおかげで、シェルスクリプトやプログラムを作った後に、カレントディレクトリを指定せずにコマンド名だけで実行できます。「 ./makebook 」のように打たなくても、「 makebook 」とだけ入力すれば実行されるのです。 PATH に無いディレクトリのプログラムは、きちんとパス名を指定しない限り実行されません。たとえカレントディレクトリにあるものでも実行されないのです。

3.12.3 シェルの初期化スクリプト

これまでに説明してきたようなスクリプトに加えて、シェル自身が特別な目的のために使うスクリプトというのもあります。その中で最も重要なのは、ログインした時にシェルが自動的に実行する初期化スクリプトです。

初期化スクリプト自体は単なるシェルスクリプトですが、ログインした時やシェルが起動された時に自動的に実行される点が、通常のシェルスクリプトと異なります。ログイン時にコマンドを自動実行することで、ユーザー環境を設定したりするのに非常に有効です。例えば、ログインした時に必ず mail コマンドでメールを確認している人は、 mail コマンドを初期化スクリプトに書いておけばいいのです。そうすれば、 mail コマンドが自動的に実行されるのです。

Bash も Tcsh もログインシェルとその他のシェルを区別します。ログインシェルはログイン時に起動されるシェルで、通常、ユーザーが使う唯一のシェルでしょう。しかし、 vi のような他のプログラムを使いながら「シェルアウト」する場合はログインシェルではない別のシェルが起動されます。また、シェルスクリプトを実行する場合にも、別のシェルが自動的に起動されています。

Bash で使われる初期化ファイルは以下の通りです。 • /etc/profile （システム管理者によって用意され、全ての Bash ユーザのログイン時に実行さ

12

PATH に「 . 」を含めるのは、危険な面もあります。良く知らないディレクトリで、予想外のコマンドを実行してしまう

ことなどがあるからです。特に、スーパーユーザーの場合は、 PATH に「 . 」を含めない方がいいでしょう。

れます）

   • $HOME/.bash profile （ログイン時に実行されます）

• $HOME/.bashrc （ログインシェルでないシェルの起動時に実行されます）

なお、 $HOME/.bash profile が存在しない場合は、代わりに$HOME/.profile が実行されます。

Tcsh の初期化ファイルは以下の通りです。

• /etc/login.csh （全ての Tcsh ユーザーのログイン時に実行されます）

• $HOME/.tcshrc （login 時及び新しい Tcsh が起動された時に実行されます）

   • $HOME/.login （login 時に$HOME/.tcshrc に続いて実行されます。
なお、 $HOME/.tcshrc が存在しない場合は代わりに$HOME/.cshrc が実行されます）。

これらの初期化スクリプトファイルの役割を完全に理解するためには、シェル自身についてもっと詳しく知る必要があります。シェルプログラミングは簡単な話ではないので、この本では説明し切れません。シェル環境のカスタマイズなどについてもっと知るためには、 bash ・ tcsh のオンラインマニュアルや適当な参考書を読んでみてください。

3.13 新しい道に向かって

この本の解説が Linux システムを使う上での基本的な考え方を十分にお伝えできていれば幸いです。ただ、この本では、 Linux の面白くて大事な大部分を扱い切れていないことを心に留めておいてください。ここで述べたことは非常に基本的なことだけなのです。これらの基礎を元にすれば、複雑なアプリケーションをインストールして走らせたり、自分のコンピュータシステムの可能性を引き出したりできるようになるでしょう。 Linux を始めてはみたものの、つまらないなと落胆しないでください。学ぶべきことは、まだまだあるのです。

UNIX について学ぶには、オンラインマニュアルを読むことが必要です。はじめは、オンラインマニュアルを読んで混乱するかもしれませんが、じっくり読んでゆくうちに、豊富な情報が得られるはずです。

また、 UNIX システムの使用法を網羅した本を読むこともお勧めします。 UNIX には、なかなか分かりにくい点がたくさんあります。残念ながらそれらの難点の多くはこの本の範囲を越えてるのです。 UNIX に関する良書を付録 Bにまとめてありますので、参考にしてみてください。

では、健闘を祈ります。 56 第 3 章 LINUX 入門

第 4 章

システム管理

この章では、 Linux システムの管理関連の話題について解説します。一般の利用者にも役立つような使い方もたくさん含まれていますので、管理者以外の人でも、 Linux に慣れてきたらぜひ読んでみてください。どんなコンピュータシステムにも、影で支える管理者がいるものです。コンピュータを「活かす」も殺すも管理者次第。 Linux も例外ではありません。例え利用者があなた自身だけだとしても、システム運営のための作業は重要です。時には手間のかかる仕事ですが頑張ってみましょう。 PC を活かす鍵は、管理者が握っているのです。 Linux の導入を決意した段階で道は開けていますので、少しだけ勉強して、コンピュータの能力を 100%引き出しましょう。

ここでは、 Linux を使うにあたってシステム管理・運用に必要不可欠な話題を網羅するように勤めました。システム管理に詳しくない人でも気楽に読めるように詳しく書いてあります。しかし、この章が長くなりすぎないように、ほんとうに重要なことがらだけにしぼって解説しています。ですから、 Linux を本格的に活用したい人は「Linux System Administrator’s Guide ^{1}」も併せて読んでみてください。これを読めば Linux システムを構成する様々な『部品』の役割や、それらがどう連係しているのかがより一層わかると思います。とりあえずザッと目を通してみれば何が書いてあるかわかるでしょうし、困った時にも役立つでしょうがら、最低でも目を通してみてくださいね。

4.1 ルートの権力

UNIX は、皆さんが知ってのとおり各利用者を区別しますから、ある利用者が他の利用者や OS に対してできることに制約があります。 (例えば、自分の恋文は他人には読まれたくないですよね。 ) 利用者はそれぞれ、利用者名やホームディレクトリなどを含む、専用のアカウントを与えられます。このような、実在の利用者が使うアカウント以外にも、システム運用に必須の、特権を持つアカウントがあります。なかでも重要なのは、利用者名が root のルートアカウントです。

4.1.1 root アカウント

UNIX では、一般の利用者が他の利用者に損害を与えないよう制限が加えられています。 /bin や /usr/bin のようなディレクトリにあるファイルは全ての利用者が共有しますから、一般の利用者には削除や変更ができないようなファイルのアクセス許可属性 (パーミッション) が設定されます。一般の利用者も、普通は他の利用者にファイルを読まれたり変更されたりしないように、ファイルにアクセス許可を設定します。

しかし、 root アカウントにはそのような制限がありません。 root は、システム上のあらゆるファイルを読み・変更し・削除し・アクセス許可や所有者を設定したりすることが許されていますし、ディスクのパーティションを切ったり、ファイルシステムを作ったりするコマンドの実行もできます。つまり、「システムを管理する人は、必要があれば root としてログインし、一般の利用者には許されていない作業をできる」というのが基本的な考え方です。 root はなんでもできるので、このアカウントでログインすると致命的な間違いを犯すことも容易です。

1 日本語版は、現時点では出来ていません。

たとえば、一般の利用者が間違って /etc ディレクトリのファイルをぜんぶ消そうとしても、 OS が削除させません。しかし、 root としてログインすると、 OS はまったく文句も言わずに削除を許してしまいます。ですから、 root はいとも簡単にシステムを破壊できます。事故を防ぐには、次のようなことに注意しましょう。

• システムに障害を及ぼす可能性があるコマンドを使う時には、リターンを押す前にひと呼吸おく。たとえば、ディレクトリを一掃しようとする時には、リターンを押す前に、コマンドの内容を読み直して本当にそのコマンドが正しいことを確かめましょう。

• root での作業に慣れてしまわないこと。 root の役割に緊張が無くなってくると、その特権をふつうの利用者のものであると勘違いするようになります。たとえば、実際には root でログインしているのに、 larry であると思うことがあるかもしれません。

• root の時には、普段とは違うプロンプトを使う。 root の .bashrc か .login ファイルで、シェルのプロンプトを普通の利用者の時とは違うものに設定しましょう。たとえば、多くの利用者は「$」を普段のプロンプトに使い、「#」は root 専用に使います。

• 本当に必要な時にだけ root でログインする。また、 root で必要な作業が終ったらログアウトする。 root アカウントを使う回数が減れば、システムを損傷する可能性も減ります。

もちろん、 root でほとんど何でもやってしまうような UNIX ハッカーも中にはいます。しかし、このような人たちは、どこかで root としてちょっとした間違いを犯し、システムを破損してしまいがちです。 root に制限がないことに慣れ、制限がなくても問題なくシステムを使えるようになるまでは、 root で繰り返しログインするのは謹むべきです。

当然、誰でも間違いは犯します。 Linux Torvalds 氏も以前、自身のカーネルディレクトリのファイルを全部間違って消してしまいまったそうです。何時間もかかった仕事が永遠に失われました。しかし、ファイルシステムの知識があった Linux 氏はシステムをリブートし、好運にもディレクトリの中のファイルを手で再生することができたそうです。

つまり、ルートは多大な力を与える魔法の帽子をかぶり、手を振り回すだけで町をひとつ破壊してしまうようなものだと思ってください。手の使い方に少し注意したほうが良いとわかるでしょう。間違えて手を動かすと、簡単に暴力的な破壊ができるのです。その感触に誘惑されて、不要な時にまで魔法の帽子を被ってしまうことがないように、気を付けましょう。

4.1.2 システムを乱用すること

権力の感覚にともなうのが、害を及ぼす傾向です。これは、 UNIX のシステム管理に付きまとうあいまいな部分ですが、皆いつかここを通り過ぎます。普通の UNIX 利用者は、このような力を使う機会は絶対に与えられません。大学や企業の UNIX システムでは、高給を取り、特別な教育を受けたシステム管理者だけが、 root としてログインします。このような所では、 root のパスワードは厳重な秘密として扱われています。 root としてログインしてみようと挑戦をする人が多いことから、 root のパスワードは、一部の人達にだけに与えられる恐ろしい力だと考えられていることがわかります。

root アカウントに対するこのような態度は、単に敵意や軽蔑を生むだけです。 root のこのような側面があまりにも誇張されているため、 (Linux や他のシステムで) 初めて root になる機会ができると、 root の特権を有害なやり方で行使する傾向があります。私は、いわゆる「システム管理者」が他人のメールを読んだり、警告なしに一般の利用者のファイルを削除したりという事例を知っています。このような人たちは、強力なオモチャを与えられた子供のようにふるまいます。

root にはシステムに関してこのような権限があるため、システムを動かすために用意されたアカウントを利用するには、たいへんな成熟度と自制心が必要とされます。システム管理者と一般の利用者のあいだには不文律があります。あなたのシステムの管理者があなたのメールやファイルを覗き見するとどう感じますか。コンピュータ上の電子的なプライバシーについては、法的に拘束力のある判例はまだありません。 UNIX の root は、システム上のあらゆる保護機能やプライバシーを守るための制限を避けて通ることが可能です。システム管理者は、システム上の一般の利用者と信頼関係を築くことが大切です。これは、いくら強調しても強調しきれません。

4.1.3 一般の利用者との関係

UNIX の機密保護はおおざっぱです。システムの機密保護は、後から思い付くままに付け足したものだからです。 UNIX はもともと、利用者が他人の邪魔をするようなことがない環境で作成されました。このため、機密保護対策を施した今でも、一般の利用者が害をおよぼすことが可能になっています。

システム管理者は、システムを乱用する利用者に対する態度は２通り考えられます。偏執的になるか信頼するかです。偏執的なシステム管理者は、害を防ぐ以上に自分で害を及ぼしてしまい勝ちです。私の好きな名言に「無知に悪意はない」があります。つまり、普通の利用者には、システムに致命的に損害を与えるような知識も能力もないということです。たとえば、ユーザー用のパーティションを大きなファイルで埋めつくしてしまって、システムに問題を起こしても、その利用者は無意識でいる場合が 9 割を占めます。私のシステムにもたいへんな問題を起こしている利用者が何人かいましたが、その人たちには悪意はなく、単に無知なだけでした。

潜在的な問題の原因になっている利用者を扱う時には、責めたてるべきではありません。「疑わしきは罰せず」という古くからの原則は、ここでも有効です。利用者には、単に話かけて問題について聞いてみるのが良いでしょう。険悪に対立しないよう心がけるべきです。その人の悪い面には触れてはいけません。システム管理者でありシステムを正常に保っているあなた自身が、疑われることになります。利用者が、管理者に信頼されていない、または嫌われていると感じたら、その人は、管理者がファイルを消したとか、システム上のプライバシーを侵害していると責めることになるかも知れません。こんな立場には絶対に置かれたくはありませんよね。

ある利用者がシステム破りをしようとしている、または意図的にシステムに害を加えようとしていることが判っても、「毒を持って毒を制す」ようなことは謹まなければなりません。単なる警告を、柔軟に発しましょう。システムに危害を加えようとしている所を発見することも多いですが、警告だけにとどめます。二度と同じことが起こらないように告げるのです。その後、同じ人がまた危害を加えようとしていたら、まずそれが意図的であるかどうか確認しましょう。利用者が問題を起こそうとしているように見えるけれども、実際には事故や自分の誤りだったという経験は、私だけでも数え切れない程しています。

4.1.4 決まりを作る

システムを動かす時には、手かせ足かせをはめるのが最善というわけではありません。軍隊を運営するにはそれが一番かも知れませんが、 UNIX はそのような秩序を保つようには設計されていないのです。利用者には、単純で柔軟な指針を与えるのが道理にかなっています。ただし、規則が少なければ違反の機会も少ないことを覚えておきましょう。システムの利用上の規則が正当で明白でも、利用者は無意識のうちにこのような規則を破ることがあります。とくに UNIX の使い方を勉強している初心者には、これが当てはまります。たとえば、「何ギガバイトものファイルをダウンロードして、そのファイルをシステムの利用者全員にメールするべきではない」、ということの意味は初心者にはあまり明らかではありません。利用者は、決まりを伝えるだけでなく、それがなぜあるのか考える助けをしてやることが必要です。

自分のシステムで利用の約束を決める時には、それぞれの約束を作った背景や理由をはっきりさせましょう。さもないと、利用者は思いもよらない方法で決まりを避けて通り、しかも決まりを破っていることにまったく気付かないことでしょう。

4.1.5 まとめ

あなたがシステムをどう運営するかについては、詳しいことは他人にはわかりません。システムをどう利用するかによって、その理念も異なります。利用者が多い状況と、小人数でシステムを使う場合や一人だけでシステムを使う場合とは、方針は違うでしょう。ですが、どんな場合も、システム管理者になるのがどういうことなのかを理解しておくのは大切なことです。

システム管理者になることは、 UNIX の魔術師になることとは違います。 UNIX の知識があまりないシステム管理者もたくさんいます。同じように、システム管理者よりも UNIX についての知識が豊富な「一般の」利用者も多数います。また、システム管理者になるからといって、そのシステムの利用者に害を与えても良いということでは決してありません。各利用者のファイルを無茶苦茶にできる特権を与えられているこからといって、そうしても良いというわけでは無いのです。

最後にひとこと。システム管理者になったというのは、だいそれたことでもありません。小さな 386 システムであろうと、 Cray のスーパーコンピューターであろうと、同じことです。 root のパスワードを知っていても、お金も名声も女の子も得られません。 root のパスワードを知っているとシステムを管理して動かせる、それだけです。

4.2 システムを立ち上げる

フロッピーからの立ち上げや、ハードディスクからの立ち上げを含め、 Linux システムを起動するにはいくつかの方法があります。 OS の起動は「ブート」と呼ばれます。

4.2.1 ブートフロッピーを使う

Linux のカーネルが入っている「起動用フロッピー」で Linux を起動している人は結構います。このカーネルには、 Linux のルートパーティションの名前が書き込まれていますから、ハードディスク上のどこにルートファイルシステムがあるかが、カーネルには判っています。 (rdev コマンドを使うと、カーネルファイル (イメージ) 内部にルートパーティションの情報を記述できます。この下を参照してください。 ) このようなフロッピーは、 Slackware や SLS をインストールした際に作成されます。

自分の起動用フロッピーを作るには、まずハードディスクのどこにカーネルのイメージ (ファイル) があるかを探します。最近ではカーネルに /vmlinuz というファイル名を使いうのが一般的です。これらは圧縮カーネルと言われるもので、起動時にまず自分自身をメモリ上に展開します。これを使うとハードディスク上で使用するディスク空間は少なくてすみます。圧縮カーネルは、 /zImage か /etc/zImage というファイル名で置かれる場合もあります。また、以前は圧縮しないかたちの、 /Image や /etc/Image が主流でした。

カーネルの所在がわかったら、 rdev コマンドを使って、カーネル内のルートデバイスの名称を Linux のルートパーティションのあるデバイスに設定します。このコマンドは次のように使います。

rdev ⟨ カーネル名 ⟩ ⟨ ルートデバイス ⟩

⟨ カーネル名 ⟩ はカーネルファイルの名前です。また、 ⟨ ルートデバイス ⟩ は Linux のルートパーティションの名前です。たとえば、 /etc/Image カーネルに /dev/hda2 を設定するには、次のようなコマンドを使います。

# rdev /etc/Image /dev/hda2

rdev は、ブート時の SVGA モードなど、他のオプションもカーネル内に設定できます。オプションを付けずに「rdev」とを実行すると、使い方が表示されます。

ルートデバイスを設定したら、フロッピーにカーネルファイルをコピーします。フロッピーにコピーする時には、まず、そのフロッピーを MS-DOS 形式でフォーマットしておくのが良いでしょう。こうするとトラックやセクターの情報がフロッピーに書き込まれるので、 2HD か 2DD かを自動的に判別できます。

たとえば、 /etc/Image カーネルを /etc/fd0 (フロッピー) にコピーするには、次のコマンドを使います。

# cp /etc/Image /dev/fd0

このフロッピーを使えば Linux を起動できます。

4.2.2 ハードディスクから起動させる

Linux を起動するには別の方法もあります。ハードディスクのブートセクタに書き込んで使用する、 LILO というプログラムを使うのです。このプログラムは、ハードディスクからシステムを起動する時に実行され、ハードディスクにあるカーネルファイルを呼び出して、自動的に Linux を起動します。

LILO は、 Linux 以外の OS(オペレーティングシステム) をブートする「ブートローダー」としても利用できます。システムが起動した時に、各種の OS (Linux や MS-DOS) の中からどれを起動するかを選択できるのです。 LILO を使って起動すると、普通は特定の OS を起動します。しかし、 LILO が起動する時に ctrl か alt か shift のどれかのキーを押すとプロンプトが表示され、ここで「linux」や「msdos」のような OS の名前を入力して選択できます。プロンプトで tab を押すと、起動可能な OS 名の一覧が表示されます。

LILO パッケージを導入してあれば、 /etc/lilo ディレクトリにこのプログラムの本体があります。

設定用のファイル/etc/lilo/config か/etc/lilo.config を編集し、次のコマンドを実行すると、

LILO を導入できます。

# /etc/lilo/lilo

LILO の設定ファイルには、 LILO からブートしたい OS 毎に、一連の設定が必要です。 LILO の仕組みを理解するに、 LILO の設定ファイル例を見てみましょう。 /dev/hda1 に Linux のルートパーティション、 /dev/hda2 に MS-DOS のパーティションがあるシステムを考えてみます。この場合、 LILO の設定ファイルは次のように記述します。

# 最初の、非 SCSI ハードディスク「/dev/hda 」のブートレコードを # 変更する。 /dev/hda 以外のドライブから起動する場合は、次の行を変更。

     boot = /dev/hda

# ブートローダーのファイル名。 LILO の仕組みを本格的に解析してみようと # する人以外はいじらない方が良い。

     install = /etc/lilo/boot.b

# LILO に最適化を指示。

     compact

# /dev/hda1 − Linux ルートパーティション用の設定。

     image = /etc/Image   # カーネルの所在
        label = linux     # LILO のブートメニューで使う OS の名
        root = /dev/hda1  # ルートパーティョンの所在

vga = ask # ブート時にカーネルが SVGA モードを使うかを質問する

     # /dev/hda2 − MS-DOS パーティション用の設定。
     other = /dev/hda2    # カーネルの所在
        table = /dev/hda  # /dev/hda2 のパーティションテーブルの所在
        label = msdos     # LILO のブートメニューで使う OS の名称

LILO は、このファイルの一番最初に記述された OS を標準と見なして、自動的に起動します。その他の OS を起動するには、上で解説したような手順を踏みます。

/etc/lilo/QuickInst プログラムは、システムの設定について入力を促し、この入力から LILO の設定ファイルを自動的に生成するものです。

カーネルを更新する時には、忘れずに lilo を実行してください。最近のシステムでは、カーネルの更新時に make zlilo というのが使えるようになっていますので、それを使っえば OK です。 LILO の実行を忘れると、カーネルの変更がハードディスクのブートセクターに反映されません。なお、新しいカーネルを追加する場合には、 LILO の実行前に LILO の設定ファイル (/etc/lilo.conf を書き換えて、項目を追加しておく必要があります。

「root =」を設定ファイルに入れておけば、 rdev コマンドを使ってルートデバイスを設定する必要はありません。 LILO がブート時に、自動的に設定してくれます。

また、 lilo と同じような働きをし、ハードディスクから起動させるプログラムに LXBoot があります。これを使うとカーネルの更新のたびに設定のし直しをしなくてすみます。また、これは日本製のプログラムなので、日本語マニュアルもついています。凝った設定が必要無ければこちらの方が使いやすいと評判です。

4.3 Shutting Down

4.4 システムを停止させる

Linux システムを停止 (shutdown) させるには、少し手間がかかります。動作中に単に電源スイッチを切ったり、リセットスイッチを押したりするのは厳禁でしたね。覚えていますか？カーネルは、ディスクに書き込むべきデータを一旦メモリ上に蓄えて、後でまとめて書き出します。この一時貯蔵所をバッファと呼びます。バッファを使ってディスクへの出力が高速化されているのです。入力時の読み出しもバッファを読むだけで済んだりします。このバッファの内容をディスクに書き込むようにカーネルに指示せずにシステムを停止させたり再起動 (リブート) させたりすると、ファイルシステムを破壊してしまうことに成りかねません。

システムを停止させる時には、その他にも予防措置が講じられます。すべてのプロセスにはシグナルが送られ、プロセスはファイルを全部ディスクに書き出すなどしてから、後を濁さず終了します。安全のため、ファイルシステムはアンマウントされ、場合によってはシステム停止の警告を利用者全員に送り、ログアウトの時間を与えます。

システムを停止させるのは、 shutdown コマンドを使えば簡単です。次のように使います。

shutdown ⟨ 時刻 ⟩ ⟨ 警告文 ⟩

⟨ 時刻 ⟩ 引数は、時:分:秒形式で停止させる時刻を指定し、 ⟨ 警告文 ⟩ は、停止前に全利用者の端末に表示させる文を書きます。 ⟨ 時刻 ⟩ の代わりに「now」を使うことも可能で、この引数を使うと、ただちにシステムの停止作業に入ります。 -r オプションは、システムを停止した後に再度起動 (reboot) するよう shutdown に指示します。

たとえば、午後 8 時にシステムを停止させるには、次のように使います。

# shutdown -r 20:00

halt コマンドは、ただちにシステムを停止させます。停止時刻や警告は無しに使います。 halt は、一人だけでシステムを利用している状況で、システムを停止させたあとすぐに電源を切りたい場合に便利です。

◇ 次の表示があるまでは、システムの電源を切ったりリセットスイッチを押してはいけません。

     The system is halted.

shutdown や halt コマンドを使って、システムを「きちんと」停止させるのはとても重要なことです。 ctrl-alt-del 監視し、この組み合わせでキーを押すと shutdown コマンドが発行されるように設定されるパッケージもありますが、このキーの組み合わせを使うとただちにリブートし、システムに損傷を与えてしまうものもあります。

4.5 利用者の管理

自分のシステムに利用者が多いかどうかにかかわらず、 Linux での利用者の管理について知っておくのは大切なことです。そのシステムを自分一人で使うとしても、 root は必要な時にのみ使い、日常の仕事をするためにはそれ用のアカウントを作るべきでしょう。

システムを利用する人は、それぞれ専用のアカウントを所有します。ひとつのアカウントを数人で共有するのは、感心できることではありません。機密保持だけが問題なのではなく、アカウントは OS が利用者を識別するために使うのです。誰が何をしているかを正確に管理できる必要があるからです。

4.5.1 利用者管理の考え方

OS にはそれぞれの利用者関して、たくさんの情報が登録されています。以下に、このような情報について解説します。

ユーザ名ユーザ名は、銀行口座の名義のようなものですが、コンピューターを使う利用者を識別するためにも使われるので、複数の人が同じ名前を使うことは出来ません。そうすると、届いたメールが誰宛のものか分からなくなってしまいます。一人に一つずつ異なったものが与えられるのです。ログイン時に入力するのもユーザ名です。たとえば、 wil, geordi, mdw, hiro などがユーザ名です。ユーザ名には、英数字と「」 (下線)、「.」 (点) を使うことができます。利用者名の長さは、普通は 8 文字までです。

ユーザ ID (UID)

ユーザ ID は ID は UID とも呼ばれ、コンピューターシステムを使う全ての人に一つずつ与えられる番号です。普通はユーザ名と一対一の対応が付くように与えられます。 OS は多くの場合、ユーザー名でなく UID でそれぞれの利用者の情報を管理します。例えば、ファイルの所有者の識別などは UID でされます。

グループ ID (GID)

グループ ID は GID とも呼ばれ、利用者が属している集団を指す番号です。 3.9 節で、ファイルに付けられるグループの許可属性について説明したように、それぞれの利用者は、コンピュータ上で決められたグループにひとつ以上属します。詳しいことは、あとで解説します。

パスワードパスワードは銀行のキャッシュカードの暗証番号のようなもので、ログイン時にユーザー名の次に入力を要求されます。パスワードは暗号化されて登録・管理されています。なお、パスワードを設定したり変更したりするには、 passwd コマンドを使います。

本名利用者の本名も、ユーザ名とともに登録されています。たとえば、 jlp という利用者の本名は「Jean-Luc Picard」といった具合で、本名を見ると実はエンタープライズ号のキャプテン・ピカードだったとわかります。 finger コマンドで参照できます。

ホームディレクトリホームディレクトリは、利用者がログインして最初に置かれるディレクトリです。すべての利用者にそれぞれのホームディレクトリが割り当てられます。このディレクトリは普通、 /home ディレクトリの中に作ります。

ログインシェル利用者のログインシェルは、ログイン時に自動的に起動されるシェルです。たとえば

              /bin/bash や /bin/tcsh などです。

以上の情報は、 /etc/passwd ファイルに、利用者ごとに保存されていて、誰でも見ることが出来るようになっています。一行に一人の利用者の情報が書かれ、書式は次のようになっています。

ユーザ名:暗号化されたパスワード:UID:GID:本名:ホームディレクトリ:ログインシェル

実際には次のように書かれます。

     kiwi:Xv8Q981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/bash

この例を見ると、最初の「kiwi」がユーザ名であることがわかります。

次の欄、「Xv8Q981g71oKK」は暗号化されたパスワードです。パスワードは、人が読める形式では保存されません。パスワード自体を鍵にして暗号化されていて、復号するにはそのパスワードを知っていなければなりません。このような暗号はかなり安全なのです。 OS でさえ復号できないので、ログイン時の照合も暗号化されたもの同士を比較しておこないます。

更なる安全を期すため、パスワードの情報は「/etc/shadow」に移し、管理者以外は読めないようにしておくシステムもあります。これが「シャドウ・パスワード」を使ったシステムと呼ばれるものです。シャドウ・パスワードを使うと、パスワードの期限を設定するなど、便利な機能が使えるようになります。ここでは、詳しいことは説明しませんが、シャドウ・パスワードを使ったシステムでは /etc/passwd のパスワード欄に「*」など、暗号に使われない文字が入っているでしょう。

三番目の「102」は UID です。この数字は、利用者ごとに違うものを使わなければなりません。四番目の「100」は GID です。この利用者は 100 番のグループに属します。グループについての情報は、 /etc/group に保持されています。 4.5.5 節でさらに解説します。

五番目の項目は、利用者の本名です。この例では「Laura Poole」です。残りの二つの項目は、それぞれ利用者のホームディレクトリ (/home/kiwi) とログインシェル (bin/bash) です。ユーザ名と利用者のホームディレクトリの名称は同じである必要はありませんが、普通は同じにして、ディレクトリを見つけるのが簡単になるようにします。

4.5.2 利用者を登録する

新しい利用者をシステムに登録するには、次のようにします。まず、 /etd/passwd ファイルにその利用者に関する情報を追加しなければなりません。このファイルには、他の人には使われていない利用者名・ UID ・ GID ・本名などの項目を追加します。つぎに、その利用者に専用のホームディレクトリを作ります。このディレクトリの許可属性を変更し、そのディレクトリが利用者の所有になるように設定します。さらに、シェルの初期化ファイルを、新しいホームディレクトリにコピーして、それらファイルの許可属性や所有者を適切に設定します。最後に、システムが必要とする設定を行ないます。たとえば、その人宛の電子メールを一時的に保存するスプールの設定などです。

新しい利用者の追加をすべて手動で行なうことはそれほど難しくはありませんが、多数の利用者を抱えているシステムを運営していると、うっかり何かを忘れがちです。そこで、簡単に利用者を追加できるように、質問に答えるだけで自動的に必要な設定をしてくれる、対話的なプログラムを使うと楽でしょう。このようなプログラムの使いかたはオンラインマニュアルで調べてください。 adduser か useradd が用意されていると思います。

4.5.3 利用者を抹消する

利用者の登録を抹消するためにも、同じようなコマンドが準備されています。 deluser か userdel が見付かるでしょう。

アカウントを完全には消さず、一時的に利用者のログインを制限したい時には、パスワードを保存しているファイル (/etc/passwd か/etc/shadow) にある、その利用者のパスワードの先頭に「*」を追加すると良いでしょう。たとえば、 /etc/passwd にある kiwi の項目を次のように設定すると、 kiwi はログインできなくなります。

     kiwi:*Xv8Q981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/bash

4.5.4 利用者の属性を変える

新しい利用者を追加してから、その人のシステム上の属性を変える必要が生じるかもしれません。たとえばホームディレクトリやパスワードの変更などです。多くの場合、 /etc/passwd の中の項目を直接編集しても問題無いでしょうが、 moduser や usermod を使うのがより安全です。パスワードを設定するには、 passwd コマンドを使います。たとえば

# passwd larry

とタイプすると、 larry のパスワードを設定できます。このような方法で他人のパスワードを変更できるのは、 root だけです。一般の利用者が変更できるのは自分自身のパスワードだけで、同じコマンドを「passwd」と引数無しで起動します。

本名やログインシェルの設定を利用者が自分自身で変更できるように、 chfn や chsh コマンドを提供しているシステムがあります。もしも、このようなコマンドが使えなければ、システム管理者に頼んでこのような属性を変更してもらわなければなりません。

4.5.5 作業用のグループ

上で解説したように、利用者は必ずどれかのグループに属します。また、２つ以上のグループに属すのは全く自由です。グループ関連で重要なのは、ファイルのグループ向け許可属性です。 3.9 節にあったように、ファイルには必ず「グループの所有権」があり、グループ向け許可属性にしたがって、そのグループに属する人がファイルを読み書きできるかどうかが決まります。

システム管理用のグループには bin ・ mail ・ sys などがあります。一般の利用者はこのようなグループに属してはいけません。これらは、専らシステム関連ファイルの許可属性に使われます。そのかわり、普通の利用者には、 users のような集団を使います。もう少し気を利かせて、 student ・ staff ・ faculty のような集団に分けるのも良いでしょう。

/etc/group ファイルにはグループについての情報が書かれています。各行の書式は次のようになっています。

グループ名:パスワード:GID:そのグループに所属する利用者名を列挙

たとえば次のように記述します。

     root:*:0:
     users:*:100:mdw,larry
     guest:*:200:
     other:*:250:kiwi
     trek:*:300:worf,data

最初の root は、 root アカウントのために予約されている、システム用の特別なグループです。次の users は、一般の利用者が使います。このグループは GID が 100 で、 mdw と larry が属しています。 /etc/passwd では、それぞれの利用者に標準の GID がひとつ設定されていたことを覚えていますね。また、利用者は複数のグループに所属することができましたね。これには、 /etc/group のグループに利用者名を追加すればよいのです。なお、 groups コマンドを使えば、自分が所属するグループの名前がぜんぶ表示されます。

三番目の guest は、一時利用者のためのグループです。その次の other は、その他の用途に使われる集団です。利用者・ kiwi はこのグループに属しています。

例を見るとわかりますが、 /etc/group の「パスワード」欄はほとんど使われません。グループのパスワードを設定するために使用されることもありますが、滅多に必要にはなりません。このパスワード欄に「*」と書いておき、一般の利用者が newgroup コマンドで特権のあるグループに移るのを防いでおきましょう。

addgroup や groupadd コマンドを使うと、新しいグループを加えることができます。 /etc/group を直接編集する方が簡単でしょうが、管理用のコマンドが用意されていれば、それを使う習慣を付けましょう。こうするとシステムが複雑になった場合でも対処できます。もっとも、グループを追加するには、このファイル以外には変更するファイルが無いと思います。グループを削除するには、 /etc/group ファイルから単にその集団の行を削除するだけでいいと思いますが、専用のコマンドが用意されている場合もあります。

4.6 ファイルをまとめて圧縮する

バックアップの話を始める前に、複数のファイルを一つにまとめるためによく使われる道具 (ユーティリティ) を紹介します。まとめられたものを、書庫とかアーカイブとかいい、まとめる作業をアーカイブするといいます。以下のコマンドはどれも、多くの UNIX システムで使われているものです。

4.6.1 tar コマンドを使う

tar コマンドは、アーカイブ用ソフト (アーカイバともいう) の中では最もよく使われています。 tar コマンドの使い方は次の通りです。

tar ⟨ オプション ⟩ ⟨ ファイル 1⟩ ⟨ ファイル 2⟩ … ⟨ ファイル N⟩

ここで、 ⟨ オプション ⟩ は tar のコマンドやオプションをまとめたものを示し、 ⟨ ファイル 1⟩ から ⟨ ファイル N⟩ は書庫 (アーカイブ) に加えたり書庫から取り出す (解凍するともいう) ファイルを指定します。

例えば、 /etc ディレクトリのファイルをすべて backup.tar ファイルにまとめるには次のようにコマンドを実行します。

# tar cvf backup.tar /etc

tar の最初の引数・「cvf」は tar の「コマンド」です。「c」は、書庫を新たに作成 (create) するよう tar に命令します。「v」オプションは、詳細表示 (書庫に記録されるファイル名を表示する) モードを指定します。「f」オプションは、その次の引数の名前 (backup.tar) で書庫を作成するよう tar に指示します。残りの引数は、書庫に格納するファイルやディレクトリの名称です。

次のコマンドを使うと、カレントディレクトリに tar 形式のファイル「backup.tar」の中身を展開します。

# tar xvf backup.tar

このようなコマンドが危険な場合もあります。 tar 形式のファイルからファイルを取り出すと、すでに存在する同名のファイルの内容が上書きされてしまうからです。

さらに、 tar 形式のファイルを展開する前に、展開するべきファイルがどこに収まるかを理解してお

くことが重要です。例えば /etc/hosts ・ /etc/group ・ /etc/passwd の３つを書庫にまとめるとしま

しょう。この時に次のコマンドを使うと、各ファイル名の先頭に /etc/ が付いて保存されます。

# tar cvf backup.tar /etc/hosts /etc/group /etc/passwd

この書庫に含まれるファイルを正しい場所に展開するには、次のコマンドを使わなければなりません。

# cd /

# tar xvf backup.tar

これは、書庫のファイルがパス名 (/etc/) 付きで展開されるためです。ただし、システムによっては、 / から始まるものは絶対パス名だと判断するかもしれません。相対パス名であることを明示するには、

# tar cvf backup.tar ./etc/hosts ./etc/group ./etc/passwd

と「.」付きで書庫を作成してやります。解凍時には、カレントディレクトリの中に、 etc というサブディレクトリが (無ければ) 作成されます。

しかし、次のようなコマンドで書庫を作成した場合、ディレクトリ名は全く保存されません。

# cd /etc

# tar cvf hosts group passwd

この場合に出来た書庫を解凍する前には「cd /etc」を実行しなければなりません。このように、 tar 形式のファイルをどうやって作成するかで、展開する時にどのディレクトリを使うかがまったく異なってしまいます。 tar 形式の書庫からファイルを展開する前に、書庫に含まれるファイルの一覧を表示するには、次のコマンドが使えます。

# tar tvf backup.tar

このコマンドを実行すれば、どのディレクトリからの相対パスでファイルが書庫に格納されたかが判り、適切なディレクトリに移動した後で書庫からファイルを取り出すことが可能になります。

4.6.2 gzip と compress

MS-DOS のアーカイバとは異なり、 tar は書庫のファイルを自動的には圧縮しません。ですから、 1 メガバイトのファイルを二つ含む書庫を作ると、約 2 メガバイトのファイルが生成されます。圧縮には gzip コマンドを、使います。 (gzip は、 tar 形式でないファイルも圧縮できます。 ) 次のコマンド

は backup.tar ファイルを圧縮し backup.tar.gz ファイルに置き換えます。

# gzip -9 backup.tar

gzip の -9 オプションを使うと、圧縮に少し時間がかかりますが圧縮率が最高になります。「９極^{きゅうきょく}」の圧縮をしてくれるのです。： )

gunzip コマンドは、 gzip で圧縮したファイルを復元 (解凍) します。「gzip -d」コマンドも同じように動作します。

gzip は UNIX の世界では比較的新しいコマンドです。長年に渡って compress コマンドが使われてきました。しかし、いくつかの要因のため^{2}、 compress コマンドは次第に使われなくなりました。

compress で圧縮されたファイルは、ファイル名の拡張子が.Z になります。例えば backup.tar を compress で圧縮すると backup.tar.Z が生成されます。一方、 gzip で同じファイルを圧縮すると backup.tar.gz が生成されます^{3}。 compress で圧縮されたファイルを復元するためのコマンドが uncompress ですが、 gunzip は compress されたファイルも扱うことが可能ですので、どちらのファイルでも気にせずに解凍できます。

2 例えば compress アルゴリズムに関する論争や、 compress よりも gzip の方が圧縮率が高いといった事など。

4.6.3 ファイルをまとめる

ここまで見てきたものを応用し、一群のファイルを書庫にまとめて圧縮するには次のようなコマンドを使用します。

# tar cvf backup.tar /etc # gzip -9 backup.tar

これらのコマンドを実行した結果が、 backup.tar.gz になります。この書庫からファイルを復元するには、逆順にコマンドを実行します。

# gunzip backup.tar.gz # tar xvf backup.tar

もちろん、 tar 形式のファイルを復元する前に、適切なディレクトリにいることを確認しなければなりません。

もっと器用に、一行で同等の作業をすることも可能です。

# tar cvf - /etc | gzip -9c ¿ backup.tar.gz

ここでは tar の標準出力である「-」に tar の結果を出力しています。この出力が gzip にパイプで繋がれ、 gzip がこれを取り込んで圧縮し、その結果を backup.tar.gz ファイルに出力します。

gzip の -c オプションは、圧縮の結果を標準出力に出すことを指します。この出力が backup.tar.gz ファイルに格納されます。

このファイルを一つのコマンドで展開するには、次のようなコマンドを使用します。

# gunzip -c backup.tar.gz | tar xvf -

ここでは、 gunzip が backup.tar.gz ファイルを復元し、その結果を標準出力に出します。この結果は tar にパイプで繋がれ、 tar は、この場合標準入力を意味する「-」から読み込みます。また、 gzip を導入すると、 compress されたファイルを展開して標準出力に出す zcat コマンドも置き換わり、 gzip 対応になるので、

# zcat backup.tar.gz | tar xvf -

を使ってもＯＫです。以前から UNIX に親しんでいる人は、この方が慣れていると思います。

幸いにも、比較的最近の tar には、ファイルを自分で圧縮または解凍する-z オプションがあります。しかし、この処理は compress のアルゴリズムを使って実現されており、 gzip のアルゴリズムは利用していません。 (最新の GNU tar では -z オプションで gzip の圧縮・展開アルゴリズムを利用できます。しかし、私のように昔から存在する tar のバイナリを使っている人は、 gzip のアルゴリズムの利用はできません。他の機械で gzip が導入されていないことも考えられますので、どちらが良いかを一概に言うのは難しいです。 )

例えば、

# tar cvfz backup.tar.Z /etc

は次のコマンドと同等の動作をします。

3

実は、 gzip は以前、拡張子に.z (小文字の .z) を使っていたのです。これが混乱の元になったので、現在は gzip の正式

な拡張子は gz です。

# tar cvf backup.tar /etc # compress backup.tar

同様に、

# tar xvfz backup.tar.Z

は次のコマンドと同等に動作します。

# uncompress backup.tar.Z # tar xvf backup.tar

詳細は、 tar や gzip のオンラインマニュアルを読んでください。

4.7 フロッピーディスクを使ってバックアップする

フロッピーディスクは、よくバックアップ用に使われます。コンピュータにテープドライブが繋がっていない場合は (少し遅く、信頼性もテープほど高くはありませんが)、フロッピーディスクでもバックアップが作れます。

また、フロッピーディスクに独立したファイルシステムを構築することも可能です。こうしておくと、フロッピーディスクを mount してその中のデータを読み書きできます。

4.7.1 Using floppies for backups

バックアップをフロッピーディスク上に作成するには、 tar コマンドを使うのが簡単です。次のようなコマンドを使えば、全ファイルシステムのバックアップを /dev/fd0 フロッピードライブに作成できます。

# tar cvfzM /dev/fd0 /

tar で「M」オプションを使うと、複数ボリューム (Multi-volume) のバックアップが可能です。その場合、あるフロッピーディスクが一杯になったら次のフロッピーディスクを挿入するように、 tar コマンドが指示を出してくるので、次々に入れてゆけばいいのです。このようにして作ったバックアップをハードディスク上に復元するには、次のコマンドを使います。

# tar xvfzM /dev/fd0

この方法はテープドライブに対しても利用できます。例えば、 /dev/rmt0 に対して同様に実行すすればテープに保存されます。

この方法を使うなら、 compress コマンドの圧縮アルゴリズムで我慢しなければなりません。 tar の「z」オプションは gzip のアルゴリズムは使いません。複数ボリュームのバックアップ (複数枚のフロッピーへのバックアップなど) を取るためのプログラムは他にも存在します。例えば tsx-11.mit.edu の backflops プログラムが便利でしょう。

完全なバックアップの作成は、時間・ディスク・メモリー・ CPU を多量に消費します。ですから大抵のシステム管理者は差分バックアップを取ります。たとえば、一ヵ月ごとに完全なバックアップを取り、前回のバックアップ以降に更新されたファイルは、一週間ごとにバックアップを取ります。こうしてバックアップを取っておけば、ファイルシステムが破壊された時にはその月の完全なバックアップと、各週分のバックアップを再生させるだけで済みます。

find コマンドを使えば、特定の日付以降に更新されたファイルを簡単に見つけられます。さらに、 sunsite.unc.edu には差分バックアップ用のスクリプトがいくつか存在します。

4.7.2 ファイルシステムをフロッピーディスク上に作成する

フロッピーディスクにはハードディスクのパーティションの場合と同様にファイルシステムを作成できます。例えば、次のコマンドは /dev/fd0 のフロッピーディスクにファイルシステムを作成します。

# mke2fs /dev/fd0 1440

ファイルシステムの大きさ (この例では 1440) は、フロッピーディスクの容量と一致しなければなりません。 3.5 インチの高密度フロッピーディスク (2HD) なら 1.44 メガバイトですので、 1440 ブロックを指定します。 5.25 インチの高密度フロッピーディスクなら 1200 ブロックです。

フロッピーディスクを読み書きするには、ファイルシステムを mount する必要があります。マウントすることで、はじめて他のファイルシステムと同様に扱えるようになるのです。ちなみに、ハードディスクはシステム起動時に時動的にマウントされているのですが、フロッピーディスクは交換する可能性があるので、手でマウントする必要があるのです。次のコマンドは /dev/fd0 のフロッピーディスクを/mnt ディレクトリにマウントします。

# mount -t ext2 /dev/fd0 /mnt

これで、フロッピーディスク内のファイルは全部、 /mnt ディレクトリから読み書きできるようになりました。「-t ext2」オプションは ext2fs ファイルシステムをマウントする事を示します。違う型のファイルシステムをフロッピーディスク上に作成した場合、 mount コマンドには別のオプションを指定します。

「マウント先」の (つまりその上にファイルシステムをマウントする) ディレクトリは、 mount コマンドを使う時点で存在しなければなりません。なければ mkdir コマンドで作りましょう。

第 4.9 章では、ファイルシステム・マウント・マウントするディレクトリ等について詳しく解説します。

◇ フロッピーディスクへの入出力も、ハードディスクと同様にバッファに溜っている点には注意しましょう。フロッピーディスクのデータに変更を加えても、すぐに書き込まれるわけではありません。カーネルが I/O バッファをディスクに反映させるまで、フロッピードライブの明りは点灯しませんし、メモリー上に保存されているだけなのです。アンマウントするまでは、フロッピーディスクは取り出さないように心がけましょう。アンマウントには次のようなコマンドを使います。

# umount /dev/fd0

MS-DOS を使っている時のように、ただ単にフロッピーを抜き取ってはいけません。フロッピーディスクを交換する前には必ず umount を実行し、新しいフロッピーディスクを挿入したら mount コマンドを実行します。

4.8 新たにソフトウェアを導入する

ソフトウェアを更新したり、新しく導入したりする作業も、システム管理者の仕事です。 Linux の世界はとても活動的です。数週間ごとに新しいカーネルが公開され、他の多くのソフトウェ

アも同じくらいのはやさで更新されています。このため、 Linux の初心者は、次々に発表されるソフトを全て更新しなれればならないような脅迫観念に取りつかるようです。しかし、このような作業は不要なばかりでなく、時間の無駄です。 Linux 界の全ての変化を追うと更新作業にばかり時間をとられ、実際にシステムを活用する時間がなくなります。

では、どのあたりでシステムを更新するべきなのでしょうか？各種の配布で新版が発表された時、例えば SLS の内容が更新された時などがちょうど良いと考えている人もいます。数ヵ月に一度程度のペースになります。 Linux 利用者の多くは、新しい版が発表されるたびに、完全にシステムを入れ換えています。しかし、これも時間の無駄です。一般には、 Slackware や SLS などに施される変更は些細なものが多く、フロッピー 30 枚分のソフトの内、たったの 10% しか更新されていないのに、全てを入れ換えるのは意味がありません。

システムの更新に関してお勧めできるのは、更新するべきだと判っているソフトウェアだけを、ひとつひとつ手作業で更新することです。なお、 X window などの大きなものを更新する場合には、関連ソフトウェアをまとめて更新する必要があるかと思います。このように、一つ一つ更新することに恐れをなす人がたくさんいます。このような人達は、自分が何をどのように更新し、更新しなければ何が破壊されるか等を克明に知りたがります。しかし、 Linux を使うには「自分でやる」ことへの恐怖を克服しなければなりません。「Linux を使う」とはそういう事です。また、システムが完全に動作し、ソフトウェアの設定が正しく終了した環境では、新たに SLS 等を導入し直すことは、今までに設定してきたものを完全に消し去る事を意味します。こうなると今までの努力は水の泡になり、最初にシステムを導入した時と同じ状態に戻ります。このような事で振り出しに戻されのは無駄なことです。システムを正しく更新するための知識さえあれば、こんな無駄はさけられます。

何か一つ、ソフトウェアを更新してみれば判ると思いますが、このような作業では何も破壊されません。例えば、私 (Matt) が使っているソフトウェアは大部分が太古の 0.96 MCC Interim 版に入っていたものです。私はこの環境を土台に最新のカーネルやライブラリを使っていますが、何も問題は起こっていません。分別なく「流行についていく」ことは、普通は不要です。 Linux は MS-DOS や MS-Windows ではないのです。最新のソフトウェアを走らせなければならない理由は特にありません。「新しいバージョンに欲しい機能が含まれている」と思えば更新すればいいのです。特に新しいものが必要でなければ、更新には意味はありません。つまり、「必要なものだけを必要な時に更新しましょう」、という事です。更新のための更新はやめましょう。時間や労力の無駄使いになります。

システムの中で更新作業が最も重要なのは、カーネル・ライブラリ・ gcc コンパイラです。この三つがシステムの根幹を成し、時にはこの三つが相互に依存して動作することもあります。その他のソフトでは、普通は定期的な更新は必要ありません。

4.8.1 カーネルを更新する

カーネルの更新作業は、ソースファイルを入手して自分でコンパイルするだけです。自分でコンパイルする理由は、各種の機能を使うか使わないか決め、自分のコンピューターに最適な状態でカーネルを動作させるためです。カーネルの構築は難しいことではありません。

カーネルのソースファイルは、 Linux FTP サイトならどこからでも取得できるでしょう。 ( C 節を

参照。 ) 例えば sunsite.unc.edu では、カーネルソースは /pub/Linux/kernel ディレクトリにあり

ます。カーネルのバージョンは、バージョン番号とパッチレベルを使って表します。例えば、バージョン 0.99 パッチレベル 11 は、普通 0.99.pl11 や 0.99.11 のように記述されます。

カーネルソースは、 tar 形式のファイルを gzip コマンドで圧縮したかたちで配布されます。^{4} 例えば、 0.99.pl11 カーネルが入っているファイルの名称は linux-0.99.11.tar.gz です。

この tar ファイルを、 /usr/src ディレクトリで開します。その結果 /usr/src/linux ディレクトリが作成され、この中にカーネルのソースファイルが収まります。新しいカーネルのソースファイルを展開する前に、古い /usr/src/linux ディレクトリを削除します。

ソースファイルが展開されたら、 /usr/include ディレクトリにある二つのシンボリックリンクが正しく設定されているかを確認します。この二つのリンクを作成するには、次のようなコマンドを使います。

# ln -sf /usr/src/linux/include/linux /usr/include/linux # ln -sf /usr/src/linux/include/asm /usr/include/asm

4 新しく発表されるカーネルは、しばしばその時点で最新のパッチレベルのカーネルと、その次のパッチレベルのカーネル との差分というかたちでも発表されます。 patch コマンドにこのような差分ファイルを与えて、一世代前のカーネルソー スファイルを最新のものに更新します。しかし、普通は新しいカーネルソースを全部導入する方が簡単です。

以上のリンクが出来上がったら、それ以降、カーネルソースファイルを導入する時には、このリンクを再度作成する必要はありません。 (シンボリックリンクに関する詳細は —refsec-manage-links 節を参照。 )

カーネルをコンパイルする際には、 gcc C コンパイラがシステムに導入されている必要があります。以前は、一時期、 g++ C++ コンパイラも必要でしたが、最近は C コンパイラだけが使われるように成りました。ただし、新しいコンパイラが必要かも知れません。詳しくは、この下の 4.8.3 節を参照してください。

カーネルをコンパイルするには、まず /usr/src/linux ディレクトリに cd して make config コマンドを実行します。これを実行すると、新しいカーネルで使うファイルシステムの型など、各種のオプションに関して質問されます。

  次に、必要に応じて、 /usr/src/linux/Makefile を編集します。普通は、 ROOT DEV のマクロ定義

に正しいデバイス名が記述されているかなどを確認するだけです。 ROOT DEV は、ブート時にルートファイルシステムになるデバイスを指定します。よくあるのは次のような記述です。

     ROOT DEV = CURRENT

ルートファイルシステムのデバイスを現在のものから変更するのでなければ。この項目を変更する理由はありません。

これが終了したら、 make dep コマンドを実行し、ソースファイルの依存関係を調べます。これは非常に重要ですので、忘れずに実行してください。

ようやくコンパイルの準備が整いました。 make コマンドでカーネルをコンパイルします。しばらくすると^{5}、新しいカーネルイメージが/usr/src/linux/zImage ファイルに保存されます。この方法で生成されたのは、圧縮されたカーネルイメージです。先頭の z はその象徴で、カーネルがブート時に自分自身を展開してから起動します。圧縮されたカーネルを使うのは、ディスクを節約するためです。

カーネルのコンパイルが完了したら、「cp zImage /dev/fd0」のようなコマンドでフロッピーにコピーするなり、ハードディスクからブートできるように LILO を使って導入するなりが必要です。最近のシステムで LILO を使う場合は、

# make zlilo

コマンドをつかってもよいでしょう。この場合、 /etc/lilo.conf ファイルの内容の確認も必要です。詳しくは 4.2.2 節を参照してください。

4.8.2 ライブラリを更新する

前にも示したように、 Linux システムのプログラムは共有ライブラリを使用するようにコンパイルされています。共有ライブラリには各種プログラムが使用する一般的なサブルーチンが含まれていて、プログラムの実行時に必要なライブラリが呼ばれて実行されるのです。

プログラムを実行しようとして、

     Incompatible library version

というメッセージが出る場合は、そのプログラムが必要としているバージョンのライブラリに更新しなければなりません。ライブラリは下位互換です。つまり、古いライブラリを使うようにコンパイルされたプログラムは、新しいライブラリが使用されているシステムでも動作するという事です。しかし、その反対は成り立ちません。

最新のライブラリは Linux FTP サイトにあります。例えば sunsite.unc.edu では /pub/Linux/GCC ディレクトリから取得できます。同じ場所にある「リリース (配布)」ファイルには、どのファイルをダウンロードして導入すれば良いかが記述されています。簡単に説明すると、 image-verison.tar.gz と incversion.tar.gz が必要です。 version には、 4.4.1 のように、導入するライブラリのバージョン番号が入ります。これらのファイルは、 gzip で圧縮された tar 形式のファイルです。 image ファイルには、 /lib ディレクトリと /usr/lib ディレクトリに導入するライブラリファイルが含まれます。また、 inc ファイルには、 /usr/include ディレクトリに導入するインクルードファイルが入っています。

5 山崎の所有するシステム (486DX2/66 + 16MB RAM では、 10〜15 分程度) でコンパイルが終ります。

release-version.tar.gz には、導入の手順が詳しく記されています。正確な導入の手順は各種配布によって異なりますので、更新時には必ず目を通してください。一般には、 /usr/lib ディレクトリに.a ファイルや .sa ファイルを導入します。これらのライブラリはコンパイル時に使用されます。また、共有ライブラリのイメージファイルは、「libc.so.version」などで、 /lib ディレクトリに導入します。この共有ライブラリは、一般のプログラムが実行時に呼び出します。 /lib にあるライブラリの主バージョン番号を使ったファイル名で、これらのライブラリにリンクが張られます。

例えば、バージョン番号 4.4.1 の libc ライブラリの主バージョン番号は 4 になります。このライブラリのファイル名は libc.so.4.4.1 で、 /lib ディレクトリにある libc.so.4 という名称のシンボリックリンクがこのライブラリを指します。ライブラリを更新するには、このリンクを張り直す必要があります。例えば lib.c.so.4.4 から lib.c.so.4.4.1 に更新するなら、シンボリックリンクを新しい方のライブラリファイルに張り替えます。幸い、最近では ldconfig というコマンドが、ライブラリの更新の面倒を見てくれます。スーパーユーザーに成って、

# ldconfig

と実行すれば更新を反映したリンクが作成されます。なお、 -v オプションを付けて、

# ldconfig -v

と実行すれば、どのバージョンのライブラリが使われているのかが表示されます。後になって、確認する場合にもこの方法が使えます。

なお、古いシステムでは以下のような注意が必要でした。今となっては昔話ですが、共有ライブラ ◇ リの重要性を忘れないようにと思い、あえて書いておきます。以下に示すように、リンクの張り替え

をするには一つのコマンドで一気に実行することが重要です。 libc.so.4 のシンボリックリンクを何らかの理由で消してしまったら、このリンクに依存する ls や cat のようなプログラムは実行が不可能になります。次のコマンドを使って、 libc.so.4 シンボリックリンクが libc.so.4.4.1 を指すように更新します。

# ln -sf /lib/libc.so.4.4.1 /lib/libc.so.4

また、 libm.so.version のシンボリックリンクも同様に更新します。バージョン番号が上の例とは異なるライブラリを更新する際には、適切なファイル名を指定してください。新しく発表されたライブラリに関するファイルで、詳しい事柄が解説されています。 (シンボリックリンクについては 4.10.3 節に詳細を記します。 )

4.8.3 gcc を更新する

gcc C/C++コンパイラは Linux でプログラムをコンパイルするために使われます。特にカーネルのコンパイルに必要です。 gcc の最新版は Linux の FTP サイトにあります。 sunsite.unc.edu では、ライブラリと同じ /pub/Linux/GCC ディレクトリにあります。一緒に gcc についての release ファイルがあるでしょう。このファイルは、必要なファイルがどれで、何をどうやって導入すればいいのかなどを解説しています。更新・導入時には必ず目を通してください。

4.8.4 その他のソフトウェアを更新する

その他のソフトウェアを更新するには、大抵はファイルを取得して展開するだけです。 Linux 用のファイルは、普通 gzip で圧縮した tar 形式で配布され、ソースファイルやバイナリが含まれています。もしも、配布されたアーカイブにバイナリが入っていない場合は、自分でコンパイルしなければなりません。まずは、 README や INSTALL などの文書を読んでみてください。プログラムをコンパイルするには、普通、ソースファイルが入っているディレクトリで make とタイプします。

USENET ニュースグループの comp.os.linux.announce を読めば、新しいソフトウェアに関する情報が簡単に手に入ります。 FTP サイトでソフトウェアを探す時には、 ls-lR という名前のファイルがあり、検索用のファイル名一覧があるので、それを最初に取得し、欲しいファイルがどこにあるかを grep コマンドで探すと良いでしょう。また、 00-readme というファイルなどに簡単な解説付の一覧が置いてある FTP サイトもあります。また、 archie コマンドが利用できれば、欲しいファイルを探すのに役立ちます^{6}。これを使うと、自分の欲しいファイルがどの FTP サイトに置いてあるか簡単にわかります。

# archie -s ’ ファイル名の断片’

とするのが一番簡単でしょう。詳細は、付録 B を参照してください。

Slackware 版や JE などのまとまった版のディスクイメージ (a1 や b6 など) は、 Linux ソフトウェアを新たに入手するにはうってつけです。各ディスクには.tgz (gzip で圧縮した tar) 形式のファイルがたくさん含まれています。これらを使う場合、ディスクイメージを全部 FTP サイトの Slackware ディレクトリからダウンロードする必要はなく、欲しい .tgz ファイルだけを取得して直接導入できます。 Slackware 版の環境では pkgtool を、 SLS 版の環境では、 sysinstall コマンドを使えば一連のディスクイメージのソフトウェアを一度に導入することが可能です。例えば英語版の TEX が入っている SLS の t シリーズのディスク全体を導入するには、次のコマンドを実行します。 Slackware の場合は、

# pkgtool

とやって指示に従えば良く、 SLS をお使いの場合は、

# sysinstall -series t

です。もちろん、大抵はシリーズを構成するディスクイメージ全部をダウンロードする必要はありません。しかし、いくつかのファイルだけを取得したら、自分でそのファイルを展開する必要があります。 gzip と tar でまとめられたものなので、戻し方は分かりますね。 4.6 にある通りです。

繰り返しますが、最新の配布パッケージ全体を導入し直す事はお勧めできません。特に SLS は、システム全体を更新する用途には不向きです。再導入すると、ホームディレクトリや設定ファイルなどを含め、それまで構築してきたシステムが間違いなくメチャクチャになります。ソフトウェアを更新するには一つひとつ対処するのが最善でしょう。つまり、よく使うソフトウェアの新版が発表された時に、それだけを更新するのです。あまり興味の無いソフトウェアは放っておきましょう。問題がなければ更新しないのが、うまいやり方です。

4.9 ファイルシステムの管理

ファイルシステムの管理もシステム管理者の仕事です。 UNIX や Linux では、『ファイル』でコンピュータ資源を管理していますから、ファイルをまとめてしまっておく『ファイルシステム』の管理は大切です。平たく言うと、ファイルシステムとはディスクの中にファイルをしまうスペースとともに管理情報を配置したものです。整備された図書館の本棚や書庫のようなものだと考えてもいいでしょう。管理者の主な仕事は、異常なファイルが無いか、ファイルシステム全体に不整合がないか、などを定期的に調べることです。もっとも、多くのシステムでは起動時に自動的にファイルシステムの整合性などを調べるように設定してありますのでそれほど大変ではありません。問題点が発見されても、ある程度までは自動修復してくれます。定期検診を忘れないようにすればまずは大丈夫です。

6

archive が利用できなければ、 archie.rutgers.edu のような archie サーバーに telnet し、「archie」でログインす

ると良いでしょう。ログイン後に help コマンドを使えば、何ができるかが分かります。

4.9.1 ファイルシステムをマウントする

まず、ファイルシステムの簡単な利用法についてです。ファイルシステムへファイルの読み書きを可能にするには、そのファイルシステムをどこかのディレクトリにマウントする必要があります。例えばフロッピーにファイルシステムがある場合、フロッピーのファイルを読み書きするためには、 /mnt 等のディレクトリにそのフロッピーをマウントしなければなりません ( 4.7.2節を参照)。あるディレクトリにマウントした後、マウントされたファイルシステムに存在するファイルは、このディレクトリにあるものとして参照できます。フロッピーの中のファイルは/mnt ディレクトリからアクセス出来るようになります。

本棚の連想でゆくとフロッピーに作られた本棚にファイルをしまったり取り出したりするために、自分の家の中のどこか本棚を『置く』のがマウントです。家具やさんで買ってきたか、物置から取り出してきた本棚は、それを家の中に置いて、「厚の部屋の本棚」というようにアクセスできますね。

なお、フロッピーをアンマウントすると/mnt ディレクトリはマウント以前の状態に戻ります。普通は、空になるでしょう。これは、本棚を中身ごと物置にしまえば、その本棚のあった場所が何も無くなってしまうのと同じです。もちろん、もともと一万円札が置いてあれば、本棚をどければ出てきますけど。

ハードディスクに存在するファイルシステムも原理的には同じです。ただし、きちんと設定されていれば、ブート時にハードディスク上のファイルシステムは自動的にマウントされます。いわゆる「ルート・ファイルシステム」は/ ディレクトリにマウントされ、 /usr 用に別のファイルシステムがあれば (第 A.2 節を参照)、これは /usr にマウントされます。なお、ルートファイルシステムだけがある場合、 /usr のファイルも含め、すべてのファイルはこのファイルシステム内に存在します。

本棚の連想を使うと、これは動く書庫を備えた近未来の図書館のようなものです。閉館時は地下に整然と置いてある書庫が、「開館ボタン」を押すと玄関を中心に使いやすく再配置されます。なお、この配置地図が/etc/fstab というファイルです。これに従って、開館準備作業 (システムのブート作業の一部) が行われます。絶対必要な玄関がルートディレクトリにあたります。これは、 Linux カーネルが自動的に準備します。もちろん、ワンルームマンション風に一部屋に全てを置いておけば、書庫の再配置は必要ありません。これが「ルートファイルシステムだけがある場合」にあたります。書庫を再配置する場合に中身に異常が無いかどうかも自動的にチェックしてくれます。このチェックに数分程度かかるでしょうが、書庫を地下にしまう時の手続きをきちんとしておけば、省略させることも可能です。

ファイルシステムのマウントには mount コマンドを使います。 /etc/rc ファイルからは自動的に次のコマンドが実行されます。

     mount -av

この、 /etc/rc というファイルは、ブート時にシステムが実行する初期化ファイルです。このファイルに関する詳細は 4.10.1 節を参照してください。 mount -av コマンドは、ファイルシステムとマウント先ディレクトリの情報を /etc/fstab ファイルから取得して、マウントを実行します。 fstab の例を次に示します。

     # device       directory      type     options
     /dev/hda2       /             ext2     defaults
     /dev/hda3       /usr          ext2     defaults

     /dev/hda4       none          swap     sw
     /proc           /proc         proc     none

最初の項目はデバイス名で、マウントするパーティションを示します。例え話の書庫名です。二番目の項目はマウント先のディレクトリを指します。三番目の項目は、ファイルシステムの型 (type) を表します。例えば、 etx2 は、 ext2fs を示し、 minix は Minix ファイルシステムを示します。 OS の種類やバージョンなどにより、いろいろなタイプの書庫があるわけです。 Linux では普通のファイルには、 ext2fs を使うのが一般的ですが、ファイルシステム作成時に選んだものと一致させる必要があります。さらに、最後の項目は mount のオプションを記述します。最後の項目には普通は「defaults」と書きます。

お気づきだと思いますが、 /etc/fstab にはスワップ用のパーティションも記述します。これは、メモリー (RAM) が足りなくなった場合に一時的に「仮想メモリー」として使われるものです。マウント先ディレクトリは none、ファイルシステムの型は swap と設定します。 /etc/rc から実行される swapon -a コマンドにより、 /etc/fstab に含まれるスワップ用デバイスが準備され、必要に応じてスワップが出来る状態になります。

fstab ファイルには特別な項目が一つあります。 /proc ファイルシステム用の項目です。第 3.10.1 節で示したように/proc ファイルシステムは、システム上のプロセスやメモリーの空き領域に関する情報等を保存するために用いられます。 /proc がマウントされていなければ、 ps などのコマンドが動作しません。

◇ mount コマンドはルート (root) だけが使用できます。この制約は、システムの安全性を高め、一般のユーザーが気まぐれにファイルシステムをマウントやアンマウントするのを防止します。ただし、 (特にフロッピーのような) ファイルシステムを、システムの安全性を犠牲にする事なく、一般のユーザーがマウント・アンマウントできるようにするパッケージも存在します。

mount -av コマンドは、ルートファイルシステム (上の表では/dev/hda2) 以外のファイルシステムを、すべて実際にマウントします。ルートファイルシステムは、ブート時にカーネルが自動的にマウントします。

mount -av を使う代わりに、手動でファイルシステムをマウントする事も可能です。上に示した fstab の例での /dev/hda3 のマウントと実質的に同じ事を、手動で実現するコマンドは、次のようになります。

# mount -t ext2 /dev/hda3 /usr

一般的に、ファイルシステムを手動でマウントやアンマウントするべきではありません。 /etc/rc の mount -av コマンドが、ブート時にファイルシステムを自動的にマウントします。 shutdown や halt コマンドは、システムを停止する前にファイルシステムを自動的にアンマウントします。

4.9.2 ファイルシステムを検査する

折を見て、ファイルシステムが損傷していないか、またファイルが破壊されていないか等を調べると良いでしょう。また、突然の停電などで破壊されてしまうこともあります。普通は、ブート時に /etc/rc ファイルで適切なコマンドを実行し、自動的にファイルシステムの整合性を調べるように設定されています。

ファイルシステムの整合性を調べるためのコマンドは、ファイルシステムの型によって異なります。 (最もよく使われている) ext2fs 型のファイルシステムでは、 e2fsck コマンドを使います。例えば、 ext2fs 型のファイルシステム（/dev/hda2）を検査し、エラーを自動的に訂正するには次のコマンドを使います。

# e2fsck -av /dev/hda2

ファイルシステムを検査する前には、そのファイルシステムをアンマウントするべきです。 Linux や UNIX では、ディスク書き込みは一旦メモリーにされますし、多くのジョブが自動的に並列に実行されるからです。例えば、 /dev/hda2 ファイルシステムをアンマウントするには、次のコマンドを使います。

# umount /dev/hda2

このコマンドを実行した後、ファイルシステムを検査します。唯一の例外は「ルート・ファイルシステム」で、これはアンマウントできません。アンマウントされた状態のルート・ファイルシステム検査するにはメンテナンス用のブート／ルート・ディスケット (第 4.11.1 節を参照) が必要です。また、ファイルシステムの中に存在するファイルが「busy」状態 (つまり実行中のプロセスが使用中) の場合はアンマウントできません。例えば、誰かのカレント・ディレクトリが含まれているファイルシステムのアンマウントは不可能です。このようなファイルシステムをアンマウントしようと試みると「Device busy」エラーが発生します。

その他の型のファイルシステムでは、 efsck や xfsck のように、 e2fsck に似た専用のコマンドを使用します。なお、 Slackware などでは、単なる fsck という名前のコマンドが使用でき、型を気にせず検査できるようになっています。このコマンドはファイルシステムの型を自動的に判別し、適切なコマンドを実行してくれるものです。

◇ ファイルシステムの検査でエラーが一つでも見つかって修正された場合、重要なのは即システムをリブートする事です。例えば、 e2fsck コマンドを実行中にファイルシステムのエラーを修正した旨が表示されたら、コマンドの実行が終了した後すぐに、 shutdown -r コマンドを実行してリブートしてください。こうする事により、 e2fsck がファイルシステムに施した変更が反映されます。

もちろん、 /proc ファイルシステムにはこのような検査は不要です。 /proc はメモリー上の内容を読めるようにと反映させているだけのファイルシステムですから、カーネルが直接管理します。

なお、最近の Linux システムでは、 shutdown コマンドなどでシステムをきちんと停止させた場合、次回の起動時のファイルシステムのチェックを省略してくれます。

4.10 その他の管理作業

信じられないかも知れませんが、大雑把な範疇にはまとめられないような各種の管理作業もいろいろあります。

4.10.1 システムの初期化ファイル

システムの起動時には、利用者がログインする前に、たくさんのスクリプトやプログラムが自動的に実行されます。以下に概略を示します。

システムのブート時に、カーネルは先ず /etc/init プロセスを起動します。 init は専用の設定ファイル「/etc/inittab」を読み、このファイルの内容に基づいて、様々なプロセスを起動します。 inittab から起動されるプロセスの中でも、とりわけ重要なのは/etc/getty プロセスで、これがログインを可能にしてくれるプロセスです。それぞれの仮想コンソール (VC) 上に一つずつ getty プロセスが割り当てられます。 getty プロセスは、まず VC の制御権を取得し、その VC に対し login プロセスを起動します。これで、 VC からのログインが可能になります。ですから、 /etc/inittab に getty プロセスの記述がない仮想コンソールからはログインできません。

/etc/rc はシステムの初期化に関する一番主だった作業をするためのファイルで、 /etc/getty と同様に /etc/inittab から起動されます。このファイルは単なるシェルスクリプトで、ブート時に必要となる様々なの初期化コマンドを呼び出し、実行します。例えば、ファイルシステムのマウント (第 ?? 節を参照) やスワップ空間の設定などです。

その他にも、 /etc/rc.local のような初期化スクリプトが実行されます。 /etc/rc.local は、通常は各システムに固有の設定を行なうコマンドを記述します。例えばホスト名の設定です (次の節を参照)。 rc.local は/etc/rc から起動しても良いですし、 /etc/inittab から直接起動しても良いで

しょう。なお、最近のシステムでは、 /etc/rc や/etc/rc.local に相当するものを /etc/rc.d にま

とめて置いておくのが一般的です。

4.10.2 ホスト名を設定する

ネットワークにつながった環境では、ホスト名はコンピュータを識別するために使用されますし、ネットワークにつながっていない「スタンドアローン環境」では、ホスト名はコンピュータに個性を与え愛着がわくようにするだけのものです。結局、コンピュータにホスト名を付けるのは、ペットに名前を付けるようなものなのです。自分の犬のことはいつも「あの犬」で通じますが、「シロ」や「ポチ」のような名前を付ける方がおもしろいでしょう。

システムのホスト名を設定するために必要なのは、 hostname コマンドだけです。ネットワーク環境では、ホスト名にきちんと取得したドメイン名を付けて、 ray3.ori.u-tokyo.ac.jp のようなホスト名を使用します。最初のピリオドの前 (ray3) がホスト固有の部分で、そのピリオドの後 (ori.u-tokyo.ac.jp) がドメイン名です。この例ようにある部署を表す正式なドメイン名は、 FQDN (Fully Qualified Domain Name) といわれます。ドメイン名は普通、その部署のコンピュータ全てで同じものになります。なお、ネットワークから完全に独立したコンピュータでは、ホスト名やドメイン名には好きなものが使えま

す。例えば maidoari.rairaikn.co.jp ・ vagabond.bakada.ac.jp ・ floof.org のような名称です。

ホスト名を設定するには、 /etc/hosts ファイルにそのホスト名を記述します。このファイルでは、いろいろなホストの IP アドレスを設定します。なお、コンピュータがネットワークにはつながっていない場合でも、 /etc/hosts にそのコンピュータ自身ののホスト名を指定しなければなりません。

例えば、 TCP/IP ネットワークには接続していない

コンピュータで、ホスト名が vagabond.bakada.ac.jp なら、 /etc/hosts には次のように記述し

ます。

     127.0.0.1       vagabond.bakada.ac.jp localhost

こうすると、 vagabond.bakada.ac.jp が 127.0.0.1 に、割り当てられます。この番号は「ループバックアドレス」と呼ばれるもので、ネットワーク環境にないコンピュータ用のアドレスです。なお、 localhost は別名で、この場合、同じくループバックアドレスに割り当てられます。

TCP/IP ネットワーク環境のコンピュータでは、正式に取得した本物の IP アドレスとホスト名を

/etc/hosts ファイルに記述します。例えば、ホスト名が ray3.ori.u-tokyo.ac.jp で IP アドレス

が 157.82.132.71 のコンピュータでは、 /etc/hosts に次のような記述を追加します。

     157.82.132.71       ray3.ori.u-tokyo.ac.jp

なお、 /etc/hosts にホスト名が存在しなければ、ホスト名の設定も不可能です。

ホスト名を設定するには、 hostname コマンドを使用します。例えば次のコマンドを使うと、ホスト

名が vagabond.bakada.ac.jp になります。

# hostname -S vagabond.bakada.ac.jp

大抵の場合、 hostname コマンドは /etc/rc や/etc/rc.local のようなシステムの初期化ファイルから起動するようになっています。この二つのファイルにある hostname コマンドの行を編集し、各自のホスト名を設定してください。次にシステムをリブートした時から、新しいホスト名が使用されます。

4.10.3 ファイルのリンクと i ノード番号

リンクを使うと、一つのファイルに複数のファイル名を付けることが可能になります。 OS はファイルの識別に i ノード番号を使います。 i ノード番号は、それぞれのファイルシステム上にある各ファイルに固有の識別子です^{7} 。ディレクトリは、実際にはそこに含まれる各ファイルの i ノード番号を列挙したファイルです。ディレクトリ内のファイルは、特定の i ノード番号へのリンクなのです。

4.10.3.1 ハードリンク

ファイルに複数のリンクを張るには ln コマンドを使います。例えばディレクトリに foo ファイルが存在するとしましょう。 ls -i コマンドで、このファイルの i ノード番号を見てみます。

# ls -i foo

     22192 foo
     #

ここでは、 foo ファイルのファイルシステム内の i ノード番号は 22192 です。 foo へもう一つ、 bar という名称でリンクを張るには、次のようにタイプします。

# ln foo bar

ls -i コマンドで、二つのファイルの i ノード番号が同じである事を確認します。

# ls -i foo bar

     22192 bar   22192 foo
     #

この状態では、ファイル名・ foo もファイル名・ bar も同一のファイルを指し示します。 foo ファイルに変更を加えると bar ファイルにも変更が反映されます。両ファイルにどんな操作を加える場合も、 tt foo ・ bar 共に一つのファイルを指す事になります。

rm コマンドでファイルを削除すると、ファイルへのリンクが一つ消去されます。次のコマンドを実行すると foo へのリンクだけが削除され、 bar は存在し続けます。ファイルが実際に消去されるのは、そのファイルへのリンクが全て消滅した時だけです。普通のファイルはリンクが一つだけですので、 rm コマンドを使うとファイルが消去されます。しかし、ファイルに複数のリンクがある場合、 rm コマンドを使うとリンクだけが削除されます。ですから、ファイルを本当に消去したい場合は、そのファイルへの全てのリンクを削除しなければなりません。

ls -l コマンドを使うと、ファイルへのリンク数も表示されます。

# ls -l foo bar

     -rw-r--r--   2 root     root          12 Aug  5 16:51 bar \\ \verb-rw-r--r-- 2
     root root 12 Aug 5 16:50 foo
     #

二番目の欄、つまり「2」がファイルへのリンク数です。

ディレクトリは、実際にはリンク・ i ノード変換用の情報を格納するファイルです。各ディレクトリは、少なくとも二つのハードリンクを含みます。そのディレクトリ自身を指す . と、親ディレクトリを指す .. です。ルートディレクトリ (/) の .. は/ 自身にリンクされます。 4.10.3.2 シンボリックリンク

7 ls -i コマンドを使うと、ファイルの i ノード番号が表示されます。

二種類あるリンク形式のうちのもう一つがシンボリックリンクです。シンボリックリンクの動作は、上の節で解説したハードリンクとは異なります。シンボリックリンクでもファイルに別名を利用できますが、 i ノード番号でリンクを張るのではありません。

ln -s コマンドでファイルへのシンボリックリンクを作成できます。次のコマンドを使うと foo ファイルを指すシンボリックリンク「bar」の作成が可能です。

# ln -s foo bar

ls -i コマンドを使うと、二つのファイルが異なった i ノード番号を持っていることが判ります。

# ls -i foo bar

     22195 bar   22192 foo
     #

また、 ls -l コマンドを実行すると bar が foo へのシンボリックリンクである事が判ります。

# ls -l foo bar

     lrwxrwxrwx   1 root     root           3 Aug  5 16:51 bar -> foo \\
     \verb-rw-r--r-- 1 root root 12 Aug 5 16:50 foo
     #

シンボリックリンクでは、アクセス許可属性ビットは使用されず、常に rwxrwxrwx と表示されます。その代わり、シンボリックリンクのアクセス許可ビットはリンク先のファイル (この例では foo) から取得されます。

機能的には、ハードリンクとシンボリックリンクは似通っていますが、いくつか違いもあります。一つには、存在しないファイルに対してシンボリックリンクを作成可能な点が挙げられるでしょう。ハードリンクの場合はリンク先のファイルが存在しなければなりません。カーネルは、シンボリックリンクとハードリンクとを区別して扱います。両者には技術的な違いがあるだけですが、この違いが重要です。シンボリックリンクでは、リンク先のファイルが簡単に判明するので便利です。一方、ハードリンクでは同じ i ノードにどのファイルが割り当てられているか、判別するのはとても困難です。

リンクは Linux システムでも頻繁に使われます。シンボリックリンクは、 /lib ディレクトリの共有ライブラリを扱う際に特に重要です。詳しくは第 4.8.2 節を参照してください。また、シンボリックリンクでは異なるディスクにあるファイルでも使えるので、便利な名前をあるディスクのあるディレクトリに置いておき、実体を余裕のある別のディスクに置くことも可能になります。

4.11 非常事態が発生したら

システム管理者は時折、ルートのパスワードを忘れたり、ファイルシステムを破壊してしまうといった、窮状からの復帰を強いられる事があります。ひとこと言えるのは、落ち着きなさいという事です。誰でも間違いを犯すものです。システム管理の教材にはこういった間違いが最適でしょう。

Linux は不安定な UNIX ではありません。私の経験では、多くの市販 UNIX 環境に比べても、システムのハングアップや問題の発生の率が低いくらいです。また Linux では、システムを束縛状態から解放してくれるウィザードの支援も強力です。

問題を調査する際には、まず自分で解決するように努力してみましょう。いろいろと試して、その結果どうなるかを観察するのです。自分で問題を解決しようもせずに、最初から助けを求めるシステム管理者が多すぎます。大抵の問題は自分で簡単に解決できるものです。こうしてゆく内に、コンピュータの使い手に成長してゆくのです。

システム全体をインストールし直す必要があるのはごく稀なことです。初心者は、重要なシステムファイルを間違って削除してしまったりすると、すぐにインストールディスクにすぐ手を伸ばしがちです。しかし、これは褒められた事ではありません。このように極端な発想をする前に問題を調べて、解決のために周りの人にも手伝ってもらいましょう。 Slackware の救援ディスクや、 (SLS の a1 のような) 管理用のディスクを使えば、かなり特殊な場合を除いて問題を解決できるものです。

4.11.1 管理用ディスクを使って問題から回復する

システム管理者にとって欠くことのできないのが、いわゆる「ブート／ルートディスク」です。これは、ハードディスクからは独立した、完全な Linux システムを立ち上げるためのものです。ブート／ルートディスクの実体は非常に単純で、フロッピーにルートファイルシステムを作成して、必要な道具類を入れ、さらに LILO とブート可能なカーネルをインストールするだけです。一枚のフロッピーに全てを詰め込む代わりに、カーネルとルートファイルシステムにそれぞれ一枚のディスクを使う方法もあります。いずれにせよ、完全な Linux システムをフロッピーから起動することが可能です。

Slackware の救援ディスクもこのようなものですし、 SLS には a1 ディスクがあります^{8} 。ブート用のカーネルとルートファイルシステムが一枚のフロッピーに収まっています。 SLS の a1 ディスクは大抵は SLS をインストールする時にだけ用いられますが、システム管理用にも便利なようにと作られています。

H.J Lu 氏のブート／ルートディスクも管理用ディスクの例で、 sunsite.unc.edu の /pub/Linux/GCC ディレクトリから取得できます。意欲的な人は、自分専用のブート／ルートディスクを作成するのも良いでしょう。しかし、普通は既成のブート／ルートディスクの方が優れたシステムを簡単に利用できるようです。やはり、 Slackware の救援ディスクを使うのが安心でしょう。

ブート／ルートディスクの利用法はとても簡単です。そのディスクを使ってシステムをブートし、 root で (普通はパスワードを使わずに) ログインします。ただし、ハードディスクのファイルを読み書きするには、手動でそのファイルシステムをマウントしなければなりません。例えば、 /dev/hda2 の ext2fs 型ファイルシステムを /mnt ディレクトリにマウントするには、次のようなコマンドを実行します。

# mount -t ext2 /dev/hda2 /mnt

ここで、 / はブート／ルートディスク自身になっている事に注意してください。ハードディスクのファイルを読み書きするには、ルートディレクトリの下にあるどれかのディレクトリにそのファイルシステムをマウントする必要があるのです。例えば、 /mnt にハードディスクのファイルシステムをマウン

トした場合、ハードディスク内の/etc/passwd ファイルは /mnt/etc/passwd になります。

4.11.2 ルートのパスワードを修正する

ルートパスワードを忘れても問題ありません。ブート／ルートディスクからブートして、ハードディスク上のルートファイルシステムを /mnt にマウントし、 /mnt/etc/passwd ファイルにある root のパスワード欄を消去すれば完了です。削除した結果、ルート用の項目は次のようになります。

     root::0:0:root:/:/bin/sh

さて、これでルートにはパスワードが無くなりました。ハードディスクからリブートすると root としてログインできるはずですから、 passwd コマンドを使って新しいパスワードを設定しましょう。

vi の使い方を勉強しておいて良かったでしょう？ブート／ルートディスクには多分 Emacs のような大きなエディターは入っていないでしょうが、 vi なら間違いなく入っていますから。

8

これらの入手法は第 2 章を参照。これらのブート／ルートディスクを入手する場合、 Slackware 全体や SLS のファイル

を全部ダウンロードする必要はありません。あわてず、必要なもののみを取得しましょう。

4.11.3 破壊されたファイルシステムを修復する

何らかの理由でファイルシステムが壊れてしまった場合、 e2fsck コマンドなどを使えば、破損したデータを修復できます。このコマンドは ext2fs 型のファイルシステムが破壊された場合に使うものですが、その他のファイルシステム用にも同様なコマンドが提供されていますし、 fsck コマンドで時動的にファイルシステムを識別して復旧してくれるようなシステムもあります。いずれにせよ、たとえば e2fsck コマンドをフロッピーから起動すればいいのです。詳しくは第 4.9 章を参照してください。

なお、フロッピーからファイルシステムを検査する時には、これから検査するファイルシステムはマウントしないでおく方が安全です。

4.11.4 失われたファイルを取り戻す

間違って重要なファイルを削除してしまったら、復活させる方法はありません。しかし、フロッピーからハードディスクに適切なファイルをコピーすることは可能です。例えばログイン処理に使われる /bin/login ファイルを消してしまった時には、ブート／ルートディスクを使って起動し、 /mnt ディレクトリにハードディスクのルートファイルシステムをマウントしてから、次のコマンドを実行します。

# cp -a /bin/login /mnt/bin/login

cp に -a オプションを使うと、コピー元のファイルの許可属性もそのまま、コピー先のファイルに複写されます。

もちろん、間違って消してしまった重要なシステムファイルに対応するものがブート／ルートディスクに存在しなければ、運が悪かったと思ってあきらめる以外に方法がありません。ただし、バックアップをとってあれば、無くなったファイルはいつでも復活できますので、こまめにバックアップをとることをお薦めします。

4.11.5 損傷したライブラリを修復する

ライブラリや /lib ディレクトリ内のシンボリックリンクを間違って損傷したら、そのようなライブラリに依存するプログラムはほぼ間違いなく動作しなくなります (第 4.8.2 節を参照。 )。この場合、いちばん簡単に修復できるのはブート／ルートディスクを使った方法でしょう。前節で説明した重要なファイルを消してしまった場合と同様に、ハードディスク上のルートファイルシステムをこのフロッピーにマウントし、 /mnt/lib ディレクトリのライブラリを復活すればいいのです。

第 5 章

進んだ使い方

この章では、 Linux の使い方のうち比較的進んだ使い方を紹介します。この章の解説では UNIX の基礎知識や経験を前提とし、これまでの章で解説した事柄を理解しているものとして話を進めます。

Linux を他の UNIX と比較した場合の最大の特徴は、オープンな姿勢とオープンな開発経緯です。他の UNIX は、大抵、限られた人々が市場調査班と相談して一つの目標に向かって開発したものですが、 Linux は違います。 Linux の開発は、数知れずのハッカーが次から次へと自分の欲しい機能を付け加えることにより進んできました。 Linux は、いわば自家製 UNIX システムです。 Linux の世界には様々なソフトウェアがあり、それらは千差万別の設計方針で作られています。このバラバラさを嫌がる人もいますが、これこそが Linux の最大の長所だと考えている人々が大勢いるのです。

5.1 X window システム

X window システムは、巨大で強力 (しかも、かなり複雑) な UNIX 用グラフック環境です。もともとのプログラムは、 MIT (マサチューセッツ工科大学) で開発され、それが、いろいろなメーカーに採用され、今では UNIX ワークステーションの業界標準になっています。事実上、世界中の全てのワークステーションで、 X window システム (か、その変種) が動いているといっても過言ではないでしょう。

MIT で開発された、 X window システム・バージョン 11 リリース 5 (通称 X11R5) は、 David Wexelblat さん^{1}を中心にして、 80386/80486 UNIX 用に移植され、「フリー」で公開されています。これは、 XFree86 と呼ばれているもので、 Linux をはじめ、様々な 386 UNIX 用に用意されています。 Linux 用以外にも、 System V/386 ・ 386BSD ・ Mach386 ・ Minix-386 用など、多数あります。 XFree86 は、必要なバイナリ・設定ファイル・ライブラリ・各種ツールを全て含んだものです。

残念ながら、 X window システムの細かな設定は、この本で扱いきれるようなものではありません。なにか、別の参考書を読んでください。例えば、 Valerie Quercia さんと Tim O’Reilly さんの書かれた The X Window SystemUser’s Guide などを参考にしてください。なお、参考書に関しては付録 B をみてください。この節では、 Linux 用 X window システムのインストールと設定の概要を説明しますが、ちょっとした「ヒント」でしかないことを覚悟してください。もう少し情報が必要なら、 Linux 用 XFree86 付属の README やオンラインマニュアルの解説がきっと役に立つと思います。

5.1.1 対応しているハードウェア

XFree86 では、様々なグラフックボードやモニタをサポートしています。

1 Wexelblat さんのインターネット・メールアドレスは、 dwex@mtgzfs3.att.com。

現時点の最新版 XFree86-2.0 では、以下のようなチップを使ったグラフィックボードをサポートしています。^{2}

アクセラレータでサポートされているのは、以下のものです。

8514/A (と、きちんとした互換チップ) ；

ATI Mach8, Mach32 ；
Cirrus CLGD5426, CLGD5428 ；
S3 86C911, 86C924, 86C801, 86C805, 86C928 ；
Western Digital WD90C31。

このうち、 Cirrus と Western Digital は、 SVGA サーバで動作します。それ以外は、専用のサーバがあります。このほか、 SVGA としてサポートされているのは以下のものです。

Tseng ET3000, ET4000AX, ET4000/W32 ；
Western Digital/Paradise PVGA1 ；
Western Digital WD90C00, WD90C10, WD90C11, WD90C30, WD90C31 ；
Genoa GVGA ；
Trident TVGA8800CS, TVGA8900B, TVGA8900C, TVGA8900CL, TVGA9000 ；
ATI 28800-4, 28800-5, 28800-a ；
NCR 77C22, 77C22E ；
Cirrus Logic CLGD5420, CLGD5422, CLGD5424, CLGD5426, CLGD5428,
CLGD6205, CLGD6215, CLGD6225, CLGD6235 ；
Compaq AVGA ；
OAK OTI067, OTI077。

大抵は、 256 色カラーと白黒モードと両方サポートされていますが、 ATI と Cirrus チップだけはカラーのみです。

この他に、白黒サーバでサポートしてるのは、

普通の VGA カード (64k メモリ) ；

Hercules ；
Hynudai HGC1280

です。

なお、コンパックの AVGA は 64k メモリのみのサポートで、 GVGA は 64k メモリでしかテストされていません。

さらに、 XFree86 2.0 には、 16 色サーバが試験的にいれてあります。これはあまりテストされていないのですが、大抵のグラフィックボードで動作すると思います (遅いかも知れないけど)。今の所、一般の SVGA 用のバンキングをサポートしていないので、メモリは 64k まで (約 800x600) です。

ただし、これまでの話には例外があります。ダイアモンド社の SpeedStar 24 (多分、 SpeedStar+ も) は、 ET4000 を使っていますがサポートされていません。ダイアモンドの S3 を使ったボードもサポートされていません。これは、ダイアモンド社がピクセルクロック周波数を設定する方法を変更し、秘密保持契約をした者以外にはプログラムの仕方を教えないという方針だからです。この契約をしてしまうと XFree86 のソースコードを公開できなくなってしまうので、ダイアモンド製のボードはサポートされていないのです。

ローカルバスのボードでも、バッチリ動きます。わたしとしては、 Linux で XFree86 を使うためには、 8MB 以上のメモリーを載んだ 486 PC をお勧めします。これに、 VL バスの ET4000 等を使えばいいでしょう。これらは、多くの人が使っている構成で、結構速く動きます。もちろん、 VL バスのグラフィックボードを使うには、 VL バスのマザーボードが必要です。わたしは、 XFree86-1.3 を 8MB の 486/50MHz の PC で使っていますが、いわゆる UNIX ワークステーションと同じくらいか、それ以上に速いくらいです。^{3}

2

この情報は、 David Dawes さんが書かれた、 XFree86-2.0 付属の README に基づいています (/usr/X386/lib/X11/etc/README)。

5.1.2 XFree86 のインストール

XFree86 の Linux 用のバイナリは、代表的な Linux FTP サイトにあります。例えば、

sunsite.unc.edu には、 /pub/Linux/X11/Xfree86-2.0 があります。最新版は、 Xfree86-2.0 です。

日本の ftp サイトは付録 ??を参照してください。

時々、新しいものが公開されます。バイナリで公開されているものは、 / ディレクトリを元に tar でまとめられ、 gzip で圧縮されていますので、 /に移ってスーパーユーザとして解凍すれば、基本的なインストールが出来ます。^{4}root になって、 ‘umask 022’ を実行してから作業してください。

なお、 XFree86-2.0 では、比較的新しい Linux 環境を必要とします。 linux-0.99.13 カーネル（SVGA サーバや ISA のグラフィックカードをお使いなら linux-0.99.12 でも可）・ libc-4.4.2 ・ ld.so-1.3 （これは、 GCC のディレクトリで見つかるでしょう）などです。

XFree86-2.0 のうち、バイナリで配布されているものは以下の通りです。

パッケージ名内容
XF86 8514-2.0.tar.gz  IBM8514 アクセラレータ用サーバ
XF86 Mach32-2.0.tar.gz ATI Mach32 アクセラレータ用サーバ
XF86 Mach8-2.0.tar.gz ATI Mach 8 アクセラレータ用サーバ
XF86 Mono-2.0.tar.gz  白黒サーバ
XF86 S3-2.0.tar.gz  S3 アクセラレータ用サーバ
XF86 SVGA-2.0.tar.gz SVGA 用サーバ
XF86 VGA16-2.0.tar.gz 16 色カラーモード用サーバ
xf86-svr-2.0.tar.gz  以上の全てのサーバ・セット
xf86-bin-2.0.tar.gz  クライアント・プログラム
xf86-cfg-2.0.tar.gz  XDM 設定ファイルと関連プログラム
xf86-fnt-2.0.tar.gz  フォント
xf86-kit-2.0.tar.gz  リンク・キット (サーバ改造用)
xf86-lib-2.0.tar.gz  動的ライブラリと最小限のフォント
xf86-man-2.0.tar.gz  マニュアル (クライアント用もプログラマ用も)
xf86-doc2-2.0.tar.gz  マニュアル (Xconfig 用)
xf86-pex-2.0.tar.gz  PEX ライブラリとサンプルプログラム
xf86-prg-2.0.tar.gz  静的ライブラリ・設定・インクルードファイルなど
xf86-doc-2.0.tar.gz  関連文書とリリースノート

• 最小構成で、 xf86-bin-2.0.tar.gz と、 xf86-lib-2.0.tar.gz と、お使いのグラフィックカードに合わせた XF86 ¡XXX¿.tar.gz をインストールすれば、動作します (必要ディスクスペース 3.5-3.7MB)。しかし、これだと、フォント不足でうまく動かないプログラムがあるかも知れません。その場合に必要なフォントは、 xf86-fnt-2.0.tar.gz に入っています (+2.1MB)。

• 様々な日本語フォントが JE パッケージに入っています。第 ?? 章を参考にしてインストールしてください。また、 XFree86 のバージョンアップの際フォント関連ファイルが変更されることがあり日本語フォントが認識されなくなるかも知れません。その場合は、 /usr/lib/X11/fonts/misc で mkfontdir を実行してみてください。 • オンラインマニュアルなどは、 xf86-man-2.0.tar.gz に入っています (+2.6MB)。ただし、重要な

3

訳者注：訳者は、 1993 年 11 月現在、 XFree86-2.0 を 16MB メモリの 466DX2/66 PC に、 VL バス用の S3/805+2M ボードを付けて使っています。「気持イイ速さ」です。ヒュ〜ン。 4 この節の話は、 Linux 版 XFree86-2.0 用の、 README に基づくものです。

Xconfig のマニュアルだけは xf86-doc2-2.0.tar.gz に入っています。

• X window システム用プログラムを自分でコンパイルする人は、 xf86-prg-2.0.tar.gz (プログラマ用キット) も入れてください (+2.8MB)。また、サーバを改造したい人は、このプログラマ用キットの他に xf86-kit-2.0.tar.gz (いわゆるリンクキット) も入れてください (+4.8MB)。なお、サーバを全部作り直すには 10MB 程度のディスクが必要です。一つのサーバなら、 2MB (PEX 付きなら 2.5MB) です。

• さらに、 PEX を使ったり、 PEX の機能を使ったプログラムを作ったりしたいのなら、 xf86-pex-2.0.tar.gz が必要です (+2.8MB)。 PEX を使うサーバーは配布されていませんので、リンクキットを使って自分で作る必要があります。

• 最後に、 XDM を使うなら xf86-cfg-2.0.tar.gz が必要です (+30k) 。

以上、全部入れると 21MB のディスクが必要です。

さて、バイナリ・キットの展開が済んだら、多少のファイル操作が必要です。まず、 /usr/X386/lib にあるライブラリを、 /lib にリンクしましょう。例えば、次のようにやります。

# ln -s /usr/X386/lib/lib*.so.? /lib

リンクでなく、実際にコピーしても構いません。

SLS 版や TAMU 版などの一般的な Linux システムを使ってるなら、以上で必要なファイルが必要な所にインストールされたはずです。なお、 Slackware ならはじめから XFree86-2.0 がついてくるので問題は無いでしょう。

では最後に、サーバの選択をしましょう。もし、 256 色 SVGA サーバを使うなら、 /usr/bin/X11/X は /usr/bin/X11/XF86 SVGA にリンクされている必要があります。確認してみてください。白黒サーバを使うなら、 XF86 MONO を、例えば次のコマンドでリンクしてください。

# ln -sf /usr/bin/X11/XF86 MONO /usr/bin/X11/X

S3 や Mach 32 など用のサーバもこれと同様にやります。

5.1.3 XFree86 の設定

XFree86 の設定は、ほとんどの場合、それほど難しくありません。ちょっと面倒になるかもしれないのは、あまり一般的でないハードウェアを使っている場合ぐらいのものです。

この本では細かな設定までは説明しきれないので、大雑把な説明だけをすることにします。 XFree86 用の主な設定ファイルは、 /usr/lib/X11/Xconfig です。このファイルには、マウスやグ

ラフィックボードのパラメータなどを設定します。参考例が、 Xconfig.sample として入っいますし、 Xconfig 用のオンラインマニュアルに詳しい解説があります。

簡単に言うと、 X は以下のような感じで動きます。まず、グラフィックボードは、様々な「ドットクロック (dot clock)」を扱えます。これは、ボードのクロック周波数です。特に変わった設定をしなければ、逆に、ドットクロックに対応する解像度があるわけです。^{5}解像度とは、例えば、 640x480 とか 1024x768 とかのことですが、これらの標準値にコダワル必要もありません。^{6}

Xconfig ファイルの中は、いくつかのグループに別れています。マウスやキーボードに関する設定をするための項目グループや、サーバ毎の項目グループもあります。たとえば、 256 色 SVGA サーバ用に vga256、白黒サーバ用に vga2、アクセラレータ・サーバ用に accel グループなどです。

5

訳者注：より正確には、画面の解像度とリフレッシュ速度に応じて適切なドットクロックが決まります。リフレッシュ速

度とは、 70Hz NI とか 45Hz Interlaced とかのことです。これらにより、各点が描かれる周波数「ドットクロック」が

決まります。

6

訳者注：訳者は、解像度 1152x900 で、ドットクロック 95MHz を使っています。この場合、リフレッシュは約 63Hz NI

です。

各サーバ用の項目グループには、仮想的なグラフィック画面の大きさ^{7} ・グラフィックカードのチップセット名などの情報を設定するための項目 (行) から成ります。また、 Modes と言う項目には、画面モードの名前が入ります。例えば、

     Modes "640x480" "800x600" "1024x768"

となります。これらの画面モードの名前に対応して、 modeDB という項目グループにグラフィックモード用の実際のパラメータが登録されています。 modeDB は、 Xconfig ファイルの最後部に入っているでしょう。また、オプション用の Clocks という項目もあります。何も設定しなければ XFree86 がグラフィックボードの持っているクロック値を自動的に検出して設定しますが、自動検出にかかる手間と時間を省き、また、他のプログラムによってその値が無効にされたりしないように、この項目を、 Xconfig で設定できるようになっています。その他のオプションは、 Option という項目で指定します。

Xconfig のうち、 modeDB の部分は、とても重要な部分です。使っているグラフィックカードの持っている内の適当なモードを、解像度毎に、ディスプレイの同期タイミングにに合わせて動作させるためのものです。様々なディスプレイやグラフィックボード用のパラメータ集が/usr/lib/X11/etc/modeDB.txt というファイルに、あります。わたしのボードとモニタの場合は、サンプルの Xconfig に入っている、 VESA 規格のタイミングで動作しました。^{8}

以上説明して来たもの以外にも、様々な関連文書が、 /usr/lib/X11/etc というディレクトリに収められています。例えば、 VideoModes.txt には、万一、 modeDB.txt で適当なものが見つからなかった場合に、モニタの周波数を解析するための手引です。この他にも、様々な Xconfig の例が、米国

の ftp サイト sunsite.unc.edu などに、置いてあります ( /pub/Linux/X11/Xconfig.tgz )。また、

XFree86 のオンラインマニュアルも参考になるでしょう。繰り返しますが、 Xconfig のマニュアルは単独で配布されています。

5.1.4 X の起動

さて、 XConfig の設定が済んだら、 X を起動してみましょう。コマンドは、 startx です。その前に、ちょっとだけ確認してください。

まず、 /usr/bin/X11 にパスが通っていますか？ここに、サーバーを含めた X 関係のプログラムが入っているのでワスレズにパスを通しましょう。

次に、使われていない VC (仮想コンソール) は、ありますか？ X サーバは、使われていない VC を必要とします。^{9}つまり、ログイン・プロセスが動いていない VC が必要なのです。もっとも、 SLS などでインストールすれは、第７・第８ VC が空いているので、普通は問題になりません。簡単・確実に空き VC を作る方法は、 /etc/inittab を編集して、 getty の行を１行削ることです。例えば、わたしの場合は、 /dev/tty1 から /dev/tty7 まで、 (つまり、 VC 1〜7 まで) に getty を走らせていますが、 /dev/tty8 は空けてあります。

startx を実行すると、 $HOME/.xinitrc が読み込まれます。これは、ちょっとしたコマンド・スクリプトです、起動直後に実行させるものを書いておきます。もし、このファイルが無ければ、代わりに、 /usr/lib/X11/xinit/xinitrc が実行されます。これは、システム全体のデフォルトといえるものです。これを元に修正して、自分用の $HOME/.xinitrc を作っても良いでしょう。

さて、「X Windows システムをどう使ったらいいのか？」というのは、それだけで本が出来てしまうようなテーマです。この本では具体的な使い方までは扱えませんので、 X window システムの解説書を読んでください。例えば、 The X Window System User’s Guide などがあります。これに関しては、付録 B を見てください。

7 {訳者注：ディスプレイに表示されるよりちょっと大きな仮想的なグラフィック画面で、 X サーバが動作します。マウスが画 \atop 面上で端に近付くと仮想画面がスクロールし、表示される部分が変わります。}

8 {訳者注： modeDB は、本来、使っているディスプレイに合わせて設定するものですが、最近のディスプレイではサンプルにあ \atop るパラメータのままで動くでしょう。表示位置がおかしい場合などの細かな修正は、第 ?? 章を参照して行ってください。}

9

X を使いながら、普通のテキスト用仮想コンソールに戻ることもできます。これには、 ctrl-alt-F1 から、 ctrl-alt-F12

のどれかを使います。再び X に戻るには、 XFree86 が動いている仮想コンソールに切替えます。起動時のメッセージ中

にどの VC が使われるか出ているはずです。

5.1.5 X を終了させる

普通は、 .xinitrc で起動された最後のクライアントプログラムを終了させ、 X 全体をクリーンに終了させます。例えば、 .xinitrc の最後が、

     exec twm

ならば、メニューなどで、 twm のプロセスを終了させることで、 X 全体を終了させます。しかし、どうしてもスグに X サーバを終了させたい場合は、 ctrl-alt-backspace と、３つのキーを同時に押して、強制終了させることができます。

5.2 MS-DOS のファイルを読み書きする

万一、過去のシガラミなどのヤンゴトナキ理由で MS-DOS のファイルを読み書きする必要があっても、 Linux でなら簡単です。

一般的な方法は、 MS-DOS のパーティションやフロッピーを Linux からマウント (umount) して使う方法です。こうすると MS-DOS のファイルに直接読み書きできます。

たとえば、 MS-DOS のフロッピー /dev/fd0 を /mnt にマウントするなら、次のようにやります。

# mount -t msdos /dev/fd0 /mnt

なお、フロッピのマウントに関しては、 4.7.2節に詳しい説明があります。ハードディスクの MS-DOS パーティション /dev/hda1 を /mnt にマウントするなら、

# mount -t msdos /dev/hda1 /mnt

とやります。使い終ったら、アンマウント (umount) を忘れないでください。

また、 Linux の立ち上げ時に自動的にマウントさせることもできます。たとえば、 /dev/hda1 を /dos にマウントするには、 /etc/fstab に次のような記述を書き加えます。

     /dev/hda1     /dos     msdos      defaults

詳しくは、第 4.9 節を見てください。

この他に、 Mtools というプログラムを使って MS-DOS のファイルにアクセスすることもできます。例えば、 mcd ・ mdir ・ mcopy などは、先頭の m をとった MS-DOS コマンドに対応します。 Mtools をインストールする時にオンラインマニュアルもインストールされると思いますので、参考にしてください。

MS-DOS のプログラムを実行させるのは、 MS-DOS のファイルを読み書きするのとは別の話です。実は、 Linux には、開発中の MS-DOS エミュレータがありますのでプログラムの実行も出来ます。 PC-DOS/V 6.02 などを使うと日本語ソフトも動作するそうです。これはかなり広まっており、 SLS 版にも入っていますし、多くの ftp サイト ( 付録 C 参照 ) にもあります。 MS-DOS エミュレータは結構強力で、ワードパーフェクトを含む様々なプログラムを実行させることができます。とはいえ、 MS-DOS と Linux はかなり異なるＯＳで、 MS-DOS エミュレータの動作はあまり速くありませんし、できることはかなり限られているともいえるでしょう。

最後になりましたが、 X Window システム下で動作する MS-Windows エミュレータ（通称 WINE）も開発中です。詳しい情報が知りたい人は、ネットワークニュースや ftp サイトをのぞいてみてください。

5.3 TCP/IP を用いたネットワーク接続

Linux は、 TCP/IP (Transport Control Protocol/Internet Protocol) とよばれる通信手順を完全にサポートしています。 TCP/IP は、日本を含めた世界中の大抵のネットワークで使われていと言えるくらい一般的なものです。イーサーネットボードがあれば Linux PC を会社や学校の LAN やその他の大規模ネットワークに接続できますし、そのネットワークがインターネットとつながっていてば世界中と情報交換できます。インターネットというのは世界規模の TCP/IP ネットワークです。

Linux および UNIX コンピュータで小規模 LAN を作るのは簡単です。各コンピュータにイーサーネットコントローラがあれば、それに合わせたケーブルなどの多少のハードウェアが必要なだけです。また、もしあなたの職場や学校などがインターネットにつながっていて、そこに Linux PC を接続させてもらえるならば、簡単にインターネットに接続できることになります。

さらに、 Linux は SLIP (Serial Line Internet Protocol) もサポートしています。これは、シリアル回線を使って IP 接続するためのものです。 SLIP により、モデムを使ってインターネットにアクセスできるのです。たとえば、企業や大学などに SLIP サーバーがあり、電話回線による接続サービスをしてくれれていれば、電話回線を使ってインターネットに接続できるこということです。逆に、 Linux PC をインターネットに接続し、 SLIP サーバーとして使うこともできます。

Linux の TCP/IP に関する解説は NET2-HOWTO にあります。これには、 SLIP の場合を含む Linux での TCP/IP の設定の仕方などが詳しく解説されていますので、ぜひ読んでみてください。日本語版も公開されていますし、最新の英語版は、 sunsite.unc.edu から ftp で入手できます。関連事項を含めてさらに詳しく扱った文書も、 LDP プロジェクトで準備中です。「Linux Network Administration Guide」というタイトルで近日中に公開される予定です。市販の本では、 Craig Hunt さんの「TCP/IP Network Administration」がオススメです。この本は UNIX で TCP/IP を設定・運用する仕方などの細かな点まで書かれています。くわしくは、巻末の付録 Bをみてください。

5.3.1 必要なハードウェア

TCP/IP は、特別なハートウェアが全く無くても使うことが出来ます。ただし、これでは、自分自身とのみ通信する『ループバック』モードしか使えません。ソフトウェアのなかには『ループバック』デバイスを必要とするものもあるので、これも必要なわけです。

Linux でイーサーネットを用いて TCP/IP を使う場合には、以下にあげるどれかのネットワークボードが必要になります。 3com 3c501, 3c503, 3c503/16, 3c509, 3c579; Novell NE1000, NE2000; Western Digital WD8003, WD8013 (SMC Elite 16 と同じもの); Hewlett Packard HP27245, HP27247, HP27250。また、以下の互換ボードも動作が報告されています： WD-80x3 互換品: LANNET LEC-45; NE2000 互換品: Alta Combo, Artisoft LANtastic AE-2, Asante Etherpak 2001/2003, D-Link Ethernet II, LTC E-NET/16 P/N 8300-200-002, Network Solutions HE-203, SVEC 4 Dimension Ethernet, 4-Dimension FD0490 EtherBoard 16。なお、主にノート PC で使われる、いわゆるポケットアダプタでは D-Link 社の DE-600 などが使えます。この他にも、対応機種はどんどん増えていますし、公開されている開発中のソフトウェアで対応しているボードも多数あります。

SLIP を使う場合には、モデムでネットワークにアクセスすることができます。この場合には、 SLIP サーバーによって使えるモデムが決ってきます。たいていは、 14.4kbps V.32bis という規格を満たしたモデムがあるといいと思います。例えば、 US Robitics Sportster や Infotel 144DF Internal などです。

5.4 UUCP を使ったネットワーク

UUCP (UNIX-to UNIX Copy) は、 UNIX システム間でデータを転送する、比較的古い方法です。 UUCP では、 UNIX コンピュータがモデムを使って電話をかけ、電子メール・ニュース記事・その他のファイルを交換します。

最近のネットワークで一般的な TCP/IP や SLIP を用いた接続ができない場合でも、 UUCP をつかえば世界中と情報交換できます。メールやニュース用のソフトウェア (5.5節や 5.6節を参照。 ) は、たいてい、 UUCP を使った接続でも動くようになっています。実際、 Internet につながった UNIX コンピュータなどが身近にあれば、そのマシン経由で UUCP を使い、自分の Linux PC からメールやニュースのやりとりが出来るのです。

Linux で UUCP をつかうための設定法などは、 Linux Network Administrator’s Guide という文書に詳しく解説されています。また、 MAIL-NEWS-HOWTO も役に立つでしょう。これらの文書はフリーで入手できるもので、 HOWTO は日本語版もあります。最新版は、常に ftp で入手できると思いますので、巻末の付録を参照してください。なお、元になる英語の文書は ftp で sunsite.unc.edu などから入手できます。市販の本としては、 Tim O’Reilly さんと Grace Tdino さんの「Managing UUCP and USENET」が役に立つと思います。付録 Bをみてください。

5.5 電子メール (e-mail)

Linux には、他の UNIX システムと同様に、電子メール (e-mail) 用のソフトウェアがたくさん用意されています。１台のコンピュータ内の他のユーザー宛の『ローカル』なメールも、ネットワークにつながった他のコンピュータのユーザーとの『コンピュータ間』メールのやりとりもできます。

電子メール用のソフトウェアは、通常、メーラー (mailer) とトランスポート (transport) とよばれる２つの部分から成り立っています。代表的メーラーは elm や mailx などで、ユーザが直接使うものです。トランスポートは実際にメールをやりとりする低レベルのソフトウェアで、一般ユーザーがトランスポートを意識することはないでしょう。メーラーがトランスポートにメールの配送などを依頼するのです。しかし、システム管理者にとっては、トランスポートソフトウェアを意識し、それ用の設定の仕方を知るのは大切なことです。 Linux で最も多く使われているトランスポート・ソフトウェアは、 Smail です。これは、設定が簡単なうえ、ローカルなメールも TCP/IP を使ったコンピュータ間のメールも扱えます。

Linux 以外の UNIX では、 Smail より強力な機能を持った sendmail が使われることが多いと思いますが、設定が面倒なので、多くの Linux システムでは sendmail を使っていません。もちろん、 Linux で sendmail を使うことも出来ますし、日本語拡張キット (JE) には日本語版の sendmail が入ってるほどです。

Linux で利用できるメール関連ソフトウェアの種類や色々な場合の設定の仕方は、 MAIL-HOWTO ・ NEWS-HOWTOに解説されていますので参考にしてください。また、『コンピュータ間』メールをやりとりする場合には、ネットワーク接続の仕方に合わせて TCP/IP か UUCP を使うことになると思います。それらに関しては、 5.3節・ 5.4節を参考に知識を仕入れてください。また、付録 Bにあげた関連文書も役に立つと思います。

  Linux 関連のソフトウェアのほとんどは、 sunsite.unc.edu の/pub/Linux/system/Mail という

ディレクトリなどから ftp で入手できます。日本語化されたものが、いくつか JE にも入っています。

5.6 ニュースと USENET ・ junet

Linux には、ニュースを利用するための様々なソフトウェアが用意されています。ここでいうニュースとは不特定多数の読者が読めるように送られた電子メールの様なもので、配られる範囲は様々です。メールと同様に『ローカル』なニュースと『コンピュータ間』ニュースにわかれますが、 Linux ではどちらも利用できます。例えば、『ローカル』にニュースを運営した場合には、だれかが『ニュースグループ』に『記事』を投稿すると、みんながそれを読めるのです。みんなでお互いに投稿し、討議をすることができるわけです。さらに、 TCP/IP や UUCP を使ってネットワーク接続されていれば、全国規模の junet や全世界規模の USENET のネットワークニュースサービスを受けることができるでしょう。

ニュース用ソフトウエアは、サーバーとクライアントの２つからなります。ニュースサーバーは、ニュースグループの管理や、コンピュータ間ニュースの場合の記事の転送をおこないます。ニュースクライアントは、ニュースリーダーとも呼ばれ、一般ユーザーがニュース記事を読んだり投稿したりする時に接すソフトウェアで、サーバーとの仲介役です。

Linux で利用できるサーバーは幾つかあります。どれも、基本的には同じ転送手順を用いますし、同じような設計になっています。代表的なのは、 C News と INN です。ニュースリーダーは、 rn や tin をはじめとし、たくさんあります。ニュースリーダー選びは結局は好みの問題です。^{10}どれを選んでも、いろいろなサーバーときちんと通信できます。つまり、ニュースリーダーはサーバーには依存しないので独立に選んでも問題無いし、ニュースリーダーに合わせてサーバーを選ぶ必要もないと言うことです。

USENET や junet とは無関係な『ローカル』なニュースを運用したい場合には、ユーザーが読み書きのために接するニュースリーダーを用意するだけでなく、自分の PC の上でサーバーソフトウェアを走らせる必要があります。ニュースサーバーが記事を/usr/spool/news などのディレクトリに保存し、ニュースリーダーがこのディレクトリを見て記事を探すのです。

しかし、ネットワーク上でニュースを運用したい場合は別の方法が使えます。 TCP/IP を使ったネットワークニュースでは、 NNTP (NetworkNews Transmission Protocol) と呼ばれる転送手順を使います。 NNTP を使えば、他のコンピュータの記事をネットワーク経由で読むことができるのです。また、 NNTP でサーバー間で記事のやりとりをすることもできます。実際、この方法で USENET などが運用されているのです。具体的にいうと、ネットワークを引いているような会社や大学には大抵 NNTP サーバーがありそのサイト全体を代表して USENET とのやりとりをしています。 NNTP サーバーは複数あるかも知れませんが、いずれにしても実際に記事をハードディスクなどに置いているのは NNTP サーバーだけです。そうでない多くのコンピュータは NNTP に対応したニュースリーダーを使って NNTP サーバーにある記事を読んだり投稿したりしているだけで、記事を置いてはいないのです。

では、ニュースの運用方法の例をまとめてみます。

• ニュースを『ローカル』に運用するとします。つまり、ネットワークに接続していないか、ネットワークを上のコンピュータ間ニュースを使う気が全く無い場合です。この場合は、 C News や INN などのニュースサーバーソフトウェアを走らせ、読み書きのためのニュースリーダーをインストールする必要があります。

• TCP/IP を使って NNTP サーバーにアクセス出来るとします。あなたの Linux PC からの記事の読み書きを許すように設定された NNTP サーバーが見つかれば、 NNTP 対応のニュースリーダーだけをインストールすればニュースを読み書きできるようになります。ちなみに、大抵のニュースリーダーはローカルなニュースにも NNTP にも対応していますので、この方法で使えます。この場合には、自分の Linux PC にサーバープログラムをインストールする必要はありませんし、記事を保存するためのディスクを用意する必要もありません。ニュースリーダーがネットワーク経由の読み書きの面倒を一手に引き受けてくれるのです。ただし、 TCP/IP を使ったネットワークの設定は必要なので、お忘れなく (5.3節参照)。

• TCP/IP を使ったネットワークにアクセスできるが、適当な NNTP サーバーが無いとします。それなら、自分の Linux PC で NNTP サーバーをやればいいのです。この場合、ローカル用か NNTP 用のニュースリーダーだけでなくサーバーソフトウェアもインストールし、記事は自分の PC に置くことになります。さらに、記事転送用の NNTP サーバーと『サーバーどうし』として通信し、記事を転送してもらうこともできるでしょう。 • UUCP を使ってニュースを転送したいとします。 UUCP 接続 (5.4節参照) しか出来ない場合で

10

訳注：わたしは、 nemacs や mule から GNUS を使うのが簡単でいいと思います。もっとも、たくさん比較したわけでは

ありませんので、もっと『お好み』のものが見つかる知れませんけど。

も、 USENET などに加わることが出来ます。この場合、自分のマシンには、『ローカル』用ニュースサーバーとニュースリーダーをインストールする必要があります。さらに、 UUCP の設定をして定期的にニュース記事を転送してもらう様にすることになると思います。最寄りの UUCP サイトをニュース提供元 ( 『ニュースフィード』という) として使い、そこから記事を転送してもらうわけです。なお、 UUCP を使った場合は、 NNTP ではない UUCP 独自の転送手順を使います。

ニュースサーバーソフトウェアやニュースリーダーで面倒なのは、一々コンパイルする必要があるということです。多くのニュースソフトウェアは、設定ファイルを使うのではなく、コンパイル時にオプションで設定をするように成っているのです。^{11}

広く出回っているニュース関連ソフトウェアのほとんどは、 ftp.uu.net の/news というディレクトリなどから ftp で入手でき、 Linux でも無修正でコンパイルできるでしょう。ただし、ものによっては、

Linux 用にソースコードを修正するための『パッチ』を sunsite.unc.edu の/pub/Linux/system/Mail

というディレクトリーなどから入手して、適用してからコンパイルする必要があるかもしれません。ちなみに、このディレクトリーには、 Linux 用の電子メール関連のソフトウェアが置いてあります。ここには、ニュース関連のコンパイル済のソフトウェアもいくつか置いてあると思います。

詳しくは、「NEWS-HOWTO」をみてください。最新版 (英語) は、 sunsite.unc.edu の /pub/Linux/docs/HOWTO に置いてあります。また、 Linux 文書整備プロジェクトで作られた「Linux Network Administrator’s Guide」は、ニュースソフトウェアの設定に関しても詳しく解説しています。市販本では、 Tim O’Reilly ・ Grace Todino 両氏による「Managing UUCP and Usenet」が、 UUCP やニュースの設定を鮮やかに解説しています。これらの他に、「How to become a USENET site」と

いう USENET の文書も参考になるでしょう。 ftp.uu.net の/usenet/news.announce.newusers と

いうディレクトリーから ftp できます。

11 訳注：私のように GNUS で NNTP を使うだけなら、設定ファイルで必要なパラメータを定義するだけです。

第 6 章

日本語拡張キット (JE)

この章では、 Linux 用日本語拡張キット (JE) とは何か、どのようにインストールすべきか、どのようなソフトウェアが含まれているのかを解説します。 Linux の便利さを満喫するにはうってつけのソフトウェア集ですから、ぜひお試しください。 Linux ならメニューで選ぶだけで簡単にインストール出来るように成っています。また、 Linux 以外の OS の利用者でも、 UNIX 用にどのようなフリーの日本語ソフトウェアがあるのかを知るのにも役立つでしょう。

なお、この章の内容は、阿倍博信さん^{1} を中心に、ガイドワーキンググループで作成された「 JE-HOWTO 」をもとに書かれています。

6.1 JE の概略

6.1.1 JE とは何か

JE(Japanese Extensions) は Linux-ML ^{2}に参加している者などを中心に Linux 用に移植・開発された日本語環境ソフトを集めたもので、 Slackware 版 Linux に追加するように整理されています。基本的にバイナリで配布されますが、ソースコードも別に用意されています。個々のパッケージは Slackware や SLS などと同様に tar でまとめて gzip 圧縮され、ディスクセットに分類されています。ですから、インストールには、 Slackware 付属の pkgtool や SLS 付属の sysinstall を使うこともできるのですが、「 ezinst 」という専用のインストーラが入った JE1 ディスクのみをインストールしてから ezinst を使えば、日本語メニュー形式でインストールできる上、簡単な初期設定までしてくれます。

6.1.2 何が含まれているのか

Linux で日本語の文字や文書を表示・入力・編集・整形・印刷するための様々なソフトが含まれています。コンソールで漢字を使うための kon、 X window 用には kterm と日本語 pxvt があります。個人的な好みの別れる入力システムは wnn, canna, sj3 と skk を用意しています。エディタは、日本語 vi クローン、 nemacs、そして多国語対応の mule などを用意しています。文書処理には日本語 TeX システムがあります。

この他にも、電子ニュースや電子メールで日本語を利用するためのソフト、日本語コード変換ソフトや日本語対応シェルなどの便利ツールもあり、さらに、日本語用でなくても日本製のコイキなソフトも含まれています。詳しくは第 6.3 節「ディスクセットの内容」を見てください。

1 阿倍博信さんの e-mail アドレスは、 hironobu@ap.isl.melco.co.jp

2 日本の Linux 利用者の電子メールによる情報交換の場

6.1.3 必要な環境

1994 年 4 月の時点で JE の最新バージョンは 0.9.3 です。基本的には、 Slackware 版や SLS 版などの Linux パッケージがインストールされていると仮定して作られています。 Linux の共有ライブラリ libc4.5.8 以上 (以下これを SHARED VERSION と呼ぶ)、 libx3.1.0 以上 (以下 XF SHARED VERSION) が必要です。もし、これらより古い共有ライブラリをお使いでしたら、 JE ディスクセットに含まれているものをインストールしてください。

また、現在の JE では、 xklock というソフトがシャドウパスワードを使うように設定されています。シャドウパスワードをお使いで無い方は、 JE 付属の xklock を使わないでください。もちろん、別配布のソースコードからコンパイルしなおせば使えます。なお、この点は次期バージョンの JE では変更になる予定です。

6.2 JE のインストール

JE にはインストールを詳しく説明した「ガイド」という日本語の文書が付属しています。現時点では、最新の JE には一部対応していませんが、それでも参考になるでしょう。

また、一旦 JE1 ディスクに収まっているものをインストールしてしまえば、日本語のメニューで対話式にインストールできるので、それ以降は「 ezinst 」に身を任せてください。多少不親切な解説ですが、多くの人が既に「 ezinst 」のメッセージを読みながら問題無くインストールしています。実は、「 ezinst 」自体の改良がどんどん進んでいるので、最新版をお試し頂くのが一番良いと考えている分けでもあるのです。

6.2.1 JE インストールの手順

JE を準備する

JE の各ディレクトリには 1.44 MB に収まるサイズのファイルが格納されています。 MS-DOS フォーマットした 3.5” 2HD ディスクに各ディレクトリのファイルをコピーして下さい。なお、 HDD や CD-ROM からや、ネットワーク経由でのインストールも可能でで、この場合はフロッピーは不要です。

JE1 のインストール

(1) pkgtool(Slackware) あるいは sysinstall(SLS) を使って JE1 をインストールします。 Slackware の場合は

     # pkgtool

SLS の場合は

     # sysinstall -doprompt -series JE

です。フロッピーを使わない場合の方法は、それぞれのマニュアルを参考にしてください。 JE1 の中には以下のパッケージが入っています。

ezinst:         JE 簡易インストーラ
konbin:         KON バイナリ
konfnt:         Minix/V フォント (KON 用圧縮済)

libc: 標準シェアードライブラリ

libx:           XFree86 シェアードライブラリ (英語版 XFree86 用)

JE は、第 6.1.3 節「必要な環境」で説明した SHARED VERSION の標準ライブラリおよび XF SHARED VERSION の XFree86 ライブラリとリンクする形でコンパイルされています。したがって、これより古いバージョンのシェアードライブラリを利用している場合は libc, libx もインストールして下さい。また、 ezinst では日本語表示を行いますので、コンソールに日本語を表示させるための KON をインストールしてください。

6.2.1.1 漢字表示の準備

漢字表示が出来るターミナルを用意します。例えば、コンソールで kon を起動します。単に、

     # kon

でＯＫです。

なお、 J3100SX で KON を使う場合は、

     # kon j3100sx

として起動して下さい。ばお、 J3100SX では、「漢字コンソール」も利用できますが。もちろん、既に kterm をお持ちならそれでも構いません。

6.2.1.2 ezinst の起動いよいよ準備は整いました。 ezinst を起動してください。＊フロッピディスクからインストールする場合:

     # ezinst -fd /dev/fd0

＊ハードディスクの /dos/JE ディレクトリからインストールする場合:

     # ezinst -hd /dos/JE

＊ CD-ROM の install/JE ディレクトリからインストールする場合:

     # ezinst -cd install/JE

＊ NFS サーバ Roy の /linux/JE ディレクトリからインストールする場合:

     # ezinst -nfs Roy:/linux/JE

ezinst はフロッピディスクや CD-ROM のマウント先として /mnt を使います。したがって、 NFS でインストールする場合以外は、既に mnt に何かマウントされている場合と正常に動作しませんの。この場合は、 umount してから起動して下さい。

この先は、起動後表示されるインストール方法を読んでインストールしてください。 ezinst を使ったインストールの方法は JE の次期リリースでは大きく変更する予定になっていますので注意して下さい

6.2.2 JE インストールのヒント

インストール中に adduser でうまくゆかない場合は、 wnn というユーザーを登録後、 ezinst を再起動してみてください。この場合は、システムにシャドウパスワードのセットがインストールされていないと思われますので注意して下さい。現在の JE は、一部のソフトがシャドウパスワードを使うことを前提にコンパイルされています。パスワードを要求するようなものは要注意です。

6.3 ディスクセットの内容

6.3.1 概略

日本語を利用する場合、入力システムや漢字コードは各個人の好みや環境に依存します。そこで、 JE では日本語入力システムを軸にしたパッケージングを行っています。具体的には、

JE1 : JE を簡単にインストールするためのパッケージ  1disk
j? : nkf, lha, Emacs サポートファイルなどのパッケージ  8disks
jd? : JF を中心とする日本語ドキュメント  1disk
jw? : Wnn のシステムおよび Wnn 版 NEmacs などのパッケージ 3disks
jc? : Canna のシステムおよび Canna 版 NEmacs などのパッケージ 4disks
js? : sj3 のシステムおよび sj3 版 NEmacs などのパッケージ  3disks
jn? : ネットワーク関係のパッケージ  2disks
jt? : 日本語 TeX パッケージ  2disks
jf? : TeX, XFree86 のフォント  13disks
jx? : XFree86 日本語クライアントパッケージ  2disks
jxsi? : Xsi 版 XFree86j  5disks

6.3.2 JE ディスクセット

JE シリーズは JE を簡単にインストールするためのパッケージとありますが、実際には以下のソフトウェアから構成されます。

ezinst:         JE 簡易インストーラ
konbin:         KON バイナリ
konfnt:         Minix/V フォント (KON 用圧縮済)

libc: 標準シェアードライブラリ

libx:           XFree86 シェアードライブラリ (英語版 XFree86 用)

(1)ezinst は JE の各パッケージのインストーラーで基本的には kon(Kanji ON Linux console) 上で動作します。 ezinst を利用すると簡単に JE をインストールすることが可能です。

(2)libc, libx は JE をインストールするのに必要なシェアードライブラリが入っています。 JE の現在の最新版 (0.93) では、 libc.4.5.8、 libx.3.1.0 が入っています。 Slackware1.2.0 など JE の最新版より新しいシェアードライブラリの入ったものに対してはインストールする必要はありません。

(3)kon は Linux に対する漢字コンソールです。 JE の現在の最新版では 0.991b が入っています。＊ kon は現在多国語対応に向けて作業中です。また未使用の VC でも動く仕様になっており、ログ

インシェルの節約が可能です。

6.3.3 j ディスクセット

jbase:          lha, nkf, ed, jhd, pwd, ish. pf など基本的なツール
jless:  日本語 less(高性能ページャ)
pcurses:  ペリカン (日本語が通る)curces

jman: 日本語 nroff によるマニュアルシステム

dic:            CD-ROM 辞書検索プログラム
recjis:  コード落ちした JIS,SJIS,UJIS 復活ツール
jelvis:  日本語 elvis(vi クローン)
ng:  日本語 Micro GNU Emacs
nemsup:  日本語 Emacs サポートファイル

nemuty:  日本語 Emacs ユーティリティ
nemlisp:  日本語 Emacs lisp パッケージ
mulelisp:       Mule lisp パッケージ
mulesup:        Mule サポートファイル
muleuty:        Mule ユーティリティ
muleskk:        Mule 版 SKK elisp
nemskk:         Nemacs 版 SKK elisp
skkbin:         SKK サーババイナリ
skkdic:         SKK 辞書
skkman:         SKK マニュアル
bash:  日本語 bash
tcsh:  強化版 csh

zsh: 高機能シェル vnem: 日本語 Emacs 日本語フロントエンド非対応版 vmenx: X 対応日本語 Emacs 日本語フロントエンド非対応版 vmule: 日本語 Mule 日本語フロントエンド非対応版 vmulex: X 対応 Mule 日本語フロントエンド非対応版

jgsbin:         PS インタプリタ日本語 ghostscript 実行ファイル
jgslib:         PS インタプリタ日本語 ghostscript ライブラリ
jgsgnt1:  日本語 ghostscript フォントファイル
jgsfnt2:  日本語 ghostscript フォントファイル

(1)jbase は基本的なツールが入っています。 lha は MS-DOS 生まれのアーカイバ、 pf はプリンタ出力のためのツールです。

(2)jless は日本語を通す高性能ページャです。漢字コードの自動認識を行ないます。 (3)pcurces は日本語を通す curces です。 (4)jman は日本語 roff によるマニュアルシステムです。 jman をインストールすることにより、日本

語 man が利用可能になります。 (5)dic は電子ブックの 8cmCD-ROM の辞書を検索するプログラムです。 emacs からも利用可能です。 (6)recjis はコード落ちした JIS,SJIS,UJIS を復活させるツールです。 (7)jelvis は日本語 elvis(vi クローン)、 ng は日本語 Emacs クローンです。 uum や kinput2 を利用し

て日本語の入力が可能です。

(8)nemsup, nemuty, nemlisp は日本語 Emacs を利用するために必要なファイルです。日本語 Emacs を利用するためには必ず必要です。 JE の最新版では emacs-18.59 ベースの日本語 Emacs(3.3.2) が利用可能です。

(9)mulelisp, mulesup, muleuty は Mule を利用するために必要なファイルです。 Mule を利用するためには必ず必要です。 JE の最新版では Mule1.0pl1(KIRITSUBO) が利用可能です。

(10)skkbin, skkdic, skkman は日本語入力システム SKK です。 muleskk を使うことによって Mule から、 nemskk を使うことによって日本語 Emacs からの利用が可能になります。 JE の最新版では Skk の 6.32 が利用可能です。

(11) bash, tcsh, zsh は高機能シェルです。このうち bash は日本語化されており、最新の JE では bash-1.13.5j が利用可能です。

(12)vnem, vnemx は日本語 Emacs の日本語フロントエンド非対応版のバイナリで、それぞれ、 X 非対応版、 X 対応版です。 JE の最新版では emacs-18.59 ベースの日本語 Emacs(3.3.2) が利用可能です。 Wnn,Canna,sj3 などの日本語フロントエンドを利用する際にはインストールする必要はありません。

(13)vmule, vmulex は Mule の日本語フロントエンド非対応版のバイナリで、それぞれ、 X 非対応版、 X 対応版です。 JE の最新版では JE の最新版では Mule1.0pl1(KIRITSUBO) が利用可能です。 Wnn,Canna,sj3 などの日本語フロントエンドを利用する際にはインストールする必要はありません。

(14)jgsbin, jgslib, jgsgnt1,jgsfnt2 は日本語 ghostscript です。 JE の最新版では、 ghostscript-2.6.1 を日本語化したものが利用可能です。ただし、このままでは X 以外の特別な DEVICE は利用できません。再構築が必要です。

6.3.4 jd ディスクセット

jmemo:          Linux 情報メモ
jmeta:          META FAQ 日本語版

(1)Michael K. Johnson さん (johnsonm@stolaf.edu) が英語で作成し、トロント大の山崎康宏 (hiro@ice3.ori.u-tokyo.ac.jp) によって加筆、修正されたドキュメントです。「Linux とはどんなもの？」という疑問に答えるものです。

(2) 京都大学の小野さん (ono@eiehost.gee.kyoto-u.ac.jp) が作成している、日本の Linux ユーザのための情報源です。

＊ jd シリーズは今後も、 JF プロジェクトの成果を採り入れていく方向で作業を行なっています。 JE-HOWTO も jd シリーズに入る予定になっています。

6.3.5 jw ディスクセット

wnnbin:         Wnn4.109 バイナリ
wnndic:         Wnn4.109 辞書
wnnman:         Wnn4.109 マニュアル
wnnprog:        Wnn4.109 プログラミング
ki2wnn:         kinput2 Wnn 版
wnem:  日本語 Emacs3.3.2 Wnn 版
wnemx:          X 対応日本語 Emacs3.3.2 Wnn 版
wmule:          Mule1.01 Wnn 版
wmulex:         X 対応 Mule1.01 Wnn 版

(1)wnnbin, wnndic, wnnman, wnnprog は Wnn4.109 のパッケージで、これを利用することで、 Wnn を介して日本語の入力が可能です。

(2)ki2wnn は kinput2-fix6 の Wnn 版で、 Wnn を介して kinput2 を利用した日本語入力が可能になります。

(3)wnem, wnemx は日本語 Emacs3.3.2 の Wnn 版で、 X 環境が利用できないときは wnem を、 X 環境で利用するときは wnemx を利用します。

(4)wmule, wmulex は Mule1.01 の Wnn 版で、 X 環境が利用できないときは wmule を、 X 環境で利用するときは wmulex を利用します。

6.3.6 jc ディスクセット

canbin:         Canna2.2pl4 バイナリ
canman:         Canna2.2pl4 マニュアル
canprog:        Canna2.2pl4 プログラミング
candic:         Canna2.2pl4 辞書
ki2can:         kinput2 Canna 版
cnem:  日本語 Emacs3.3.2 Canna 版
cnemx:          X 対応日本語 Emacs3.3.2 Canna 版
cmule:          Mule1.01 Canna 版

cmulex:         X 対応 Mule1.01 Canna 版

(1)canbin, candic, canman, canprog は Canna2.2pl4 のパッケージで、これを利用することで、 Canna を介して日本語の入力が可能です。

(2)ki2can は kinput2-fix6 の Canna 版で、 Canna を介して kinput2 を利用した日本語入力が可能になります。

(3)cnem, cnemx は日本語 Emacs3.3.2 の Canna 版で、 X 環境が利用できないときは cnem を、 X 環境で利用するときは cnemx を利用します。

(4)cmule, cmulex は Mule1.01 の Canna 版で、 X 環境が利用できないときは cmule を、 X 環境で利用するときは cmulex を利用します。

6.3.7 js ディスクセット

sj3bin:         sj3 バイナリ
sj3prog:        sj3 プログラミング
ki2sj3:         kinput2 sj3 版
snem:  日本語 Emacs3.3.2 sj3 版
snemx:          X 対応日本語 Emacs3.3.2 sj3 版
smule:          Mule1.02 sj3 版
smulex:         X 対応 Mule1.02 sj3 版

(1)sj3bin, sj3prog は sj3 のパッケージで、これを利用することで、 sj3 を介して日本語の入力が可能です。

(2)ki2sj3 は kinput2-fix6 の sj3 版で、 sj3 を介して kinput2 を利用した日本語入力が可能になります。 (3)snem, snemx は日本語 Emacs3.3.2 の sj3 版で、 X 環境が利用できないときは snem を、 X 環境で

利用するときは snemx を利用します。

(4)smule, smulex は Mule1.01 の sj3 版で、 X 環境が利用できないときは smule を、 X 環境で利用するときは smulex を利用します。

6.3.8 jn ディスクセット

cf:             CF-3.2W4
sendmail:       WIDE 版 sendmail 8.6.5
mailx:  メールフロントエンド mail, Mail, rmail
mhlib:          MH6.8jp2c ライブラリ
mhbin:          MH6.8jp2c バイナリ
mhman:          MH6.8jp2c マニュアル
nntpclt:        NNTP 版 inews
cnn:  ニュースチェッカー cnn1.4.2

ktin: 日本語対応 tin ニュースリーダ

(1)cf をインストールすることで sendmail.cf を容易に作成することが可能です。 (2)sendmail をインストールすることでメールの送受信が可能となります。 (3)mailx は電子メールをやりとりするためのフロントエンドです。 (4)mhbin, mhlib, mhman はメールハンドリングシステム mh の日本語版です。 (5)nntpclt は日本語 inews です。日本語での電子ニュースのやりとりが可能になります。 (6)cnn は NNTP を介してニュースサーバに購読しているニュースグループの記事の最新版が届い

てるかどうかチェックします。 (7)ktin は日本語対応ニュースリーダです。＊ JE の次期リリースには mnews が入る予定になっています。

6.3.9 jt ディスクセット

bptexbin:       PTeX 実行ファイル
bptexfmt:       PTeX フォーマットファイル
sptexbin:       pTeX 実行ファイル
sptexfmt:       pTeX フォーマットファイル
ptexlib:        PTeX, pTeX 共通サポートファイル
jbibtex:  日本語 BibTeX

dvi2tty: キャラクタベース DVI プレビュア

dviout:         VGA ベース DVI プレビュア
dviprt:         DVI プリンタドライバ

fntuty: フォントユーティリティー

(1)bptexbin, sptexfmt, sptexbin, sptexfmt はアスキー PTeX(pTeX) の実行ファイル及びフォーマットファイルです。実行環境に応じて PTeX(または pTeX の) どちらかをインストールします。大量の文章を処理しないといけないときは PTeX をインストールする必要があります。

(2)ptexlib はアスキー PTeX(pTeX) 共通のサポートファイルで必ずインストールする必要があります。

(3)jbibtex は日本語 BiBTeX です。 (4)dvi2tty はキャラクタベースの DVI プレビュアです。 (5)dviout/prt は MS-DOS 上の DVI プレビュア (プリンタドライバ) の移植で、 DVI ファイルのプ

レビュー及びプリントアウトが可能です。 dviout/prt の 2.39 がベースになっています。

(6)fntuty はビットマップファイル／ PK ファイル／ベクトルファイル間の変換を行なうユーティリティです。

6.3.10 jf ディスクセット

cmf118:         118dpi-PK ComputerModern フォント
cmf180:         180dpi-PK ComputerModern フォント
j118w98:        118dpi-PK 渡辺 jfonts
j118w142:       118dpi-PK 渡辺 jfonts
j118w204:       118dpi-PK 渡辺 jfonts
j118w108:       118dpi-PK 渡辺 jfonts
j118w129:       118dpi-PK 渡辺 jfonts
j118w170:       118dpi-PK 渡辺 jfonts
j118w118:       118dpi-PK 渡辺 jfonts
j118w245:       118dpi-PK 渡辺 jfonts
j118w294:       118dpi-PK 渡辺 jfonts
j118wlnk:  渡辺 jfonts -> 大日本印刷フォント偽装リンク
asiya24:        PK 丸ゴシックフォント dviout/prt 用
hokuto24:       PK 毛筆体フォント dviout/prt 用
kfonts:         PK 日本語フォント dviout/prt 用

vmincho1: Zeit ベクトルフォント明朝体第一水準 vmincho2: Zeit ベクトルフォント明朝体第二水準 vasiya1: Zeit ベクトルフォント丸ゴシック第一水準 vasiya2: Zeit ベクトルフォント丸ゴシック第二水準

vhokuto:        Zeit ベクトルフォント毛筆体

xfnt13: 13x26 アルファベット・カナフォント

xfnt16:         16 ドット漢字フォント
xfnt18:         18 ドット漢字フォント
xfnt24:         24 ドット漢字フォント
xfnt26:         26 ドット漢字フォント

xmarufnt: まるもじ漢字フォント

(1)TeX を利用するには、 cmf118 または cmf180 は ComputerModern フォントで、どちらかが必ず必要になります。またプリンタの解像度によってはこれ以外の ComputerModern フォントが必要になるときがあります。その際には、既に置いてあるサイトから ftp してくるか、 Metafont をインストールして自分でフォントを作る必要があります。

(2)j118w???は 118dpi-PK の渡辺フォントで、後述するベクトルフォントを利用する際には必要ありません。 j118wlink は渡辺 jfont を大日本印刷のフォントにみせかけるためのリンクです。

(3)asiya24, hokuto24, kfonts は、 dviout/prt のための PK フォントです。ベクトルフォントを利用する際には必要ありません。

(4)vmincho1/2, vasiya1/2, vhokuto は Zeit ベクトルフォントで、日本語 ghostscrpt や後述する xdviz で利用可能です。

(5)xfnt??, xmarufnt は X-Window のための漢字フォントです。インストール後に mkfontdir をすることで利用可能です。

6.3.11 jx ディスクセット

fvwm: 軽快＆きれいなウィンドウマネージャ(1.18d) k14: 14 ドット漢字フォント kterm: X 漢字端末エミュレータ pxvt: X 日本語が通る端末エミュレータ xldimg: X 上のイメージビューア oneko: マウスを追いかける猫

libtk:          Tcl7.3Tk3.6jp ライブラリ
tkbin:          Tcl7.3Tk3.6jp バイナリ
tkdemo:         Tcl7.3Tk3.6jp ウィジェットデモ
tkman:          Tcl7.3Tk3.6jp マニュアル

xdvi: X ベース DVI プレビューア PK フォント版 xdviz: X ベース DVI プレビューア Zeit ベクトルフォント版

gview:          ghostscript X インタフェース ghostview1.5
tgif:           tgif-2.13.2.j
xfig:           xfig-2.0.pl9.j
xklock:  漢字対応 X ロック

(1)fvwm は軽快＆きれいなウィンドウマネージャで最近人気が出てきています。 mwm ライクな使い方も可能です。

(2)k14 は X11R5 にコントリビュートされた 14 ドットの漢字フォントです。 (3)kterm は X ウィンドウ上の漢字端末のエミュレータです。 JE の最新では 5.2.0 が入っています。 (4)pxvt は日本語が通る端末エミュレータです。 (5)xldimg は GIF ファイルなどのイメージファイルを X 上で見るためのイメージビューアです。 (6)oneko を X 上で起動すると猫が出てきてマウスを追いかけます。

(7)tkbin, libtk, tkdemo, tkman は日本語 Tcl/Tk です。これを利用することで容易に GUI の作成が可能となります。

(8)xdvi/xdviz は X ベースの DVI ブレビューアでそれぞれ PK フォント版/Zeit ベクトルフォント版です。使用するフォントによってどちらかをインストールします。

(9)gview は ghostscript の X インタフェースです。

(10) tgif は tgif に日本語化パッチを当てたドローイングツールで、 kinput2 による日本語入力、 eps ファイルの出力が可能です。

(11)xfig はドローイングツール xfig に日本語化パッチを当てたものです。

(12)xklock は漢字対応の X ロックで、 JE の最新版では shadow での利用を前提としています。

6.3.12 jxsi ディスクセット

jxsi シリーズには Xsi 版 XFree86 が入っております。これは、以下の方法により国際化した XFree86-2.0 です。ただし、フォントは含まれていません。

- Xsi, X LOCALE, X WCHAR, XML で mit を make World - Xaw として Xaw-i18n に Xawk2 と Xwchar をマージ (xfxawk.tgz)

Xawk2 を利用したのは、 kinput2 ならば Canna, sj3 など普段使い慣れたエンジンを利用することができるからです。これにより、日本語入力として kinput2 を用いて xcal-i18n などの国際化されたクライアントを利用することができます。 Xaw は xfxawk.tgz をインストールすることによって日本語化されます。

Xsi 版 XFree86j はオリジナルの上位互換になっておりますので、従来のバイナリはそのまま動作します。また、 XFree86 用の最新のパッチが当たっておりますので、オリジナル版のバイナリでは動かないような環境でも改善されているかもしれません。

ただし、 Xsi 版 XFree86j はまだ十分なテストが行なわれておりません。また、フォントやマニュアル類は含まれておりませんので、一旦オリジナル版をインストールした後に上書きする必要があります。

パッケージは、以下の物からなっています:

        xfs3.tgz:       S3 サーバ
        xfsvga.tgz:     SVGA サーバ
        xfvga16.tgz:    VGA16 サーバ
        xf8514.tgz:     8514 サーバ
        xfmach32.tgz:   Mach32 サーバ
        xfmach8.tgz:    Mach8 サーバ
        xfmono.tgz:     VGA Mono サーバ
        xfprog.tgz:  プログラミングキット
        xfbin.tgz:  標準クライアント

xflib.tgz: サポートファイル/シェアードライブラリ

        xfxawk.tgz:     Xaw-i18n + Xawk2 + Xwchar

＊現在、 XFree86 version 2.1 をもとに日本語化した jxsi シリーズを試験中で、正式版ができ次第 JE に入る予定になっています。

6.4 将来計画

JE は今後、以下のような目標で作業を行なっていく予定です。一部は既にテスト公開さています。 1. ドキュメントシリーズ

現在、 JE では JF プロジェクトの成果を jd シリーズに採り入れる予定です。各種日本語 HOWTO などの最新版などもここにまとめる予定です。

2. Emacs 関係の増強現在、 temacs パッケージを作成中です。

3. Ximp 版 XFree86 他の形式による国際化です。

4. フォント類の再編成現在/usr/share/fonts 以下にフォントの再構成を行なっています。

5. 多機種対応

＊今後 JE は Slackware 版パッケージをメインターゲットにして開発を行なっていく予定になっています。 104 第 6 章日本語拡張キット (JE)

付録 A

ちょっとした技術と一般的な問題

この付録 A では、よく使われる技巧や、よくある問題の解決法を扱います。

A.1 SLS 版をハードディスクから導入する

フロッピーディスクから SLS を導入する代わりに、ハードディスク上の Linux 以外の (例えば MS-DOS) パーティションに全てのファイルを入れ、そこから導入できます。

まず、フロッピーディスクから Linux を導入する時と同じように、 SLS の a1 ディスクが必要ですから、これを作成します。次に、パーティションの一番上の階層 (UNIX で言うルートディレクトリ) に install というディレクトリを作り、 SLS のファイルを全部、このディレクトリの下に置きます。例えば C: ドライブの MS-DOS パーティションから導入する場合、ディレクトリは C:\install\a2, C:\install\a3, のように名前を付けます。 install の下にある各サブディレクトリには、対応するフロッピーディスクに含まれるファイルをコピーします。

install ディレクトリがハードディスクの一番上の階層にある事を確かめましょう。つまり、 c:\SLS\install のようなディレクトリでは Linux の導入は失敗するという事です。 C:\install でなければなりません。

パーティションやファイルシステムの作成など、ここから先の作業は第 ?? 章章の手順と同じです。 doinstall コマンドを使う場合は、メニューの中で「ハードディスクからのインストール」の項目を選ぶだけです。この項目を選んだら、 (/dev/hda2) のようなパーティション名と msdos のようなパーティションの型を聞かれます。その他は自明でしょう。

A.2 複数のファイルシステムを使う

UNIX のシステム管理の経験がある人なら、 Linux で複数のファイルシステムをどのように使用するか、簡単に想像がつくでしょう。例えば、ルートと/usr 空間を別々のファイルシステム上に構築できます。

Linux で複数のファイルシステムを使うことには、本質的な利点はありません。しかし、ファイルシステムを全部、意識的にマウントするなら、それも可能です。例えば、偶然ルートファイルシステムが損傷しても、 /usr など、他のファイルシステムに影響はありません。ただし、複数のファイルシステムを使用するなら、ディスク空間の割り振りに十分注意が必要です。ファイルシステムを破壊せずにその大きさを変更する手段は、今のところ存在しません。

スワップパーティションは、その大きさに最大 16 メガバイトの制限があるため、複数使いたくなることもあるでしょう。 Linux では、最大 8 パーティションまでをスワップの用途に利用できます。

複数のファイルシステムを使うのは簡単です。各ファイルシステムにつき一つ、独立したパーティションを準備することが前提です。一つのハードディスクには基本パーティションは四つまでしか作成できませんから、たくさんのファイルシステムを使う時には、論理パーティションを設定する必要があるでしょう。 fdisk の n コマンドで、各ファイルシステム用のパーティションを新規に作成します。

ソフトウェアを導入する前に、 mke2fs などファイルシステムを実際に作るコマンドを実行しましょう。実際に導入する段階で、どのファイルシステムに導入するかをシステムに認識させるため、余分な

作業が必要かも知れません。各種配布 (リリース) の中には、ファイルシステムを全て適切に手動でマウントする必要があるものも存在します。

SLS 版を導入する場合は、どのファイルシステムに導入するかを doinstall コマンドの引数として与えてやります。 doinstall コマンドの使い方を次に示します。

doinstall ⟨rootfs⟩ ⟨fs1⟩ ⟨mount-pt1⟩ ⟨fs2⟩ ⟨mount-pt2⟩ … ⟨fsN⟩ ⟨mount-ptN⟩

例えば、ルートファイルシステムを/dev/hda2、 /usr ファイルシステムを /dev/hda3、そして /tmp ファイルシステムを/dev/hda4 で利用するなら、次のコマンドを使います。

# doinstall /dev/hda2 /dev/hda3 /usr /dev/hda4 /tmp

各種配布の Linux で複数のファイルシステムをどう利用するかは、それぞれの配布に付属する文書を考にして下さい。

A.3 rawrite.exe の代わりに dd を使う

Linux の導入ディスクを、 MS-DOS の rawrite.exe を使わずに UNIX で作成したい時には、次のような手順を踏みます。 SLS の a2〜a4 用のディスクのような、 MS-DOS フォーマットのフロッピーディスクの作り方には、ここでは触れない点に注意しましょう。ここでは rawrite.exe を使う部分の作業を UNIX で実行するだけ手順を扱います。例えば SLS では a1 ディスクを作成する作業です。

UNIX で DOS の rawrite と同じ事を実現するコマンドには dd があります。このコマンドは次のように使います。

     dd if=⟨input-file⟩ of=⟨output-file⟩ bs=16k conv=sync

⟨input-file⟩ は、 a1.3 のような、フロッピーディスクに出力するファイルの名前です。

⟨output-file⟩ はフロッピーデバイス名で、このデバイスにファイルを出力します。多くのシステムでは、これは /dev/rfdn で、 n には、フロッピードライブの番号により、 0 や 1 のような番号を使います。しかし、この番号はシステムに大きく依存します。使いたいフロッピードライブのデバイス名は、システム管理者に聞くと良いでしょう。例えば、次のようなコマンドで正しく動作する場合もあります。

# dd if=a1.3 of=/dev/rfd0 bs=16k conv=sync

Linux ではフロッピードライブのデバイス名は /dev/fd0 (一台目・DOS の A ドライブ) か /dev/fd0 (二台目・ DOS の B ドライブ) を使います。 Linux システムでフロッピーに「rawite」するには、次のようなコマンドを使います。

# dd if=a1.3 of=/dev/fd0 bs=16k conv=sync

または単なる cp コマンドを使うのもいいでしょう。

# cp a1.3 /dev/fd0

この、 cp コマンドを使う方法は、他の UNIX システムでも応用が効くでしょう。

A.4 スワップファイルの使い方

スワップ空間に専用のパーティションを用意する代わりに、ファイルにスワップさせる事も可能です。しかし、スワップファイルを使う以前に Linux システムが導入され、動作していることが要求されます。

Linux システムを既に導入してあれば、次のようなコマンドを利用してスワップファイルを作成できます。ここでは大きさが 8208 ブロック (約 8 メガバイト) のスワップファイルを作ります。

# dd if=/dev/zero of=/swap bs=1024 count=8208

これでスワップファイルが作成されました。「count=」を作りたいスワップファイルの大きさに変更しましょう。次のコマンドを実行すれば、上で作った /swap ファイルにスワップを開始します。

# swapon /swap

このようなスワップファイルには、大きな落し穴がひとつあります。スワップファイルへのアクセスは必ずファイルシステムを経由する点です。つまり、スワップファイルを形成するディスク上のブロックは必ずしも連続している必要はないという事です。ですから、スワップパーティションを使った時ほどの性能は望めません。なぜなら、スワップパーティションではブロックは常に連続していますし、 I/O リクエストはデバイスに対して直接処理されるからです。

スワップファイルのもう一つの欠点は、ファイルシステムのデータを破壊する可能性がある事です。大きなスワップファイルを使ってる時に何かが狂い出すと、ファイルシステムが破損するかも知れません。ファイルシステムとスワップ用のパーティションを分離することにより、このような事故を防ぐことが可能です。

スワップファイルは、一時的にスワップ空間が必要な時には非常に便利です。例えば、巨大なプログラムをコンパイルしていて作業を少し高速化したい時、一時的にスワップファイルを作成して通常のスワップ空間と共に利用します。

スワップファイルを削除する時には、まず次のように swapoff コマンドを発行します。

# swapoff /swap

この後、スワップファイルは問題なく削除できます。

# rm /swap

各スワップファイルやスワップパーティションの大きさは、最大 16 メガバイトであることに注意しましょう。ただし、スワップ用のファイルやパーティションは 8 個まで利用できますから、最大で 128 メガバイトのスワップ空間を使えることになります。 108 付録 A ちょっとした技術と一般的な問題

付録 B

関連図書と情報源

この付録 B では、 Linux に関する情報源について記します。この情報源には、 Linux の初心者にも役立つような UNIX 関連の図書も含まれます。

B.1 Linux に関してよくある質疑応答の一覧 (Linux FAQ)

Linux FAQ は Linux についてよく出る質問とその答の一覧です。 Linux の利用者にとって適切だと思われる問題と回答をほとんど網羅した、とても大きな文書でした。この文書が肥大化したのを契機に、新しく始まったのが HOWTO 文書プロジェクトです。このプロジェクトにより、 FAQ の中でかなりの部分を占めいてた章は HOWTO 形式に分割され、 FAQ 自体は縮小しました。現在の Linux FAQ は、それだけでは一つの文書にならないような、各種の問題とその答えを幅広く扱っています。この Linux FAQ は日本語にも翻訳され、日本の Linux FTP サイトや NIFTY-Serve の FMV フォーラム (FFMV) などで入手できます。

英語で書かれた Linux FAQ は世界中にある多数の FTP サイトから取得できます。主要なサイトは

sunsite.unc.edu で、 /pub/Linux/docs/FAQ が Linux FAQ です。 /pub/Linux/docs/faqs には、

texinfo 形式や .dvi 形式を含む、その他の FAQ もあります。また、このディレクトリには Linux に関する様々な文書も保存されています。

Linux  FAQ  は毎

月、 USENET の comp.os.linux.help、 comp.os.linux.announce、 news.answers などのニュー

スグループに投稿されています。 USENET や FTP が使えない人は、 rtfm.mit.edu のメールサーバーから Linux FAQ が取得できます。本文に「help」とだけ書いたメールを

     mail-server@rtfm.mit.edu

に送ってください。 Linux FAQ は、 SLS や Yggdrasil CD-ROM など、各種の Linux 配布にも含まれています。日本語に翻訳された Linux FAQ などの文書は、 Laser 5 の「SLS+JE」 CD-ROM に含まれています。ま

た、 ftp.kuis.kyoto-u.ac.jp の/Linux/JF ディレクトリや ftp.pu-toyama.ac.jp の/pub/Linux/JF

ディレクトリから取得できますし、 NIFTY-Serve ・ UNIX フォーラム (FUNIX) の Linux 用会議室や FMV フォーラムのライブラリなどでも定期的に公開されています。

B.2 Linux Documentation Project の文書

Linux Documentation Project (LDP) は、この本を含む各種の解説や書籍を提供するよう努力を続け

ています。現在、一般に公開されている LDP の文書は、 tsx-11.mit.edu の /pub/linux/ALPHA/LDP

ディレクトリから取得できます。このディレクトリの INDEX ファイルには、どのような文書が公開されているかを記してあります。

現在作業中の文書には次のようなものが含まれます。

• The Linux System Administrator’s Guide

• Linux Network Administrator’s Guide

• Linux Kernel Hacker’s Guide

• Linux User’s Guide

• Linux Installation and GettingStarted

このような文書はまだ完成していませんので、これから加筆修正される部分もありますし、正確ではない記述もあるでしょう。完成した文書は、現在の ALPHA 用のディレクトリから順次別の場所に移されます。

以上の文書はまだ日本語には翻訳されていません。執筆が終了したものから順に翻訳されるでしょう。

B.3 ネットワークで公開されているその他の文書

Linux の初心者が興味を持ちそうな文書は、 Linux FAQ 以外にもネットワークや BBS で多数公開されています。

B.3.1 The Linux INFO-SHEET (Linux 情報メモ)

INFO-SHEET は、 Linux が要求するハードウェアの構成や技術的な情報などが書かれ

た文書です。所在は sunsite.unc.edu:/pub/Linux/docs/INFO-SHEET です。また、 USENET

のニュースグループにも投稿されます。この文書を翻訳、加筆したものが「Linux 情報メモ」です。 Linux 情報メモには、原文にはない日本の情報も多数記されています。所在は

ftp.kuis.kyoto-u.ac.jp:/Linux/JF/jis/Jouhou-memo です。

B.3.2 The Linux META-FAQ (JMETA-FAQ)

Linux META-FAQ は、この付録のように、 Linux の情報源を集めた文書です。 META-FAQ に書かれている情報は、ほとんどこの本にも記されています。このファイルの所在は

sunsite.unc.edu:/pub/Linux/docs/META-FAQ です。

JMETA-FAQ は META-FAQ の翻訳ではなく、主に Linux の日本語環境に関する情報を集めた文書です。国産のパソコンへの移植の状況や、日本語版のソフトウェアがどこから入手できるかなどを扱っています。た、国内の BBS で Linux の情報が入手できる所も記されています。所在は

ftp.kuis.kyoto-u.ac.jp:/Linux/JF/jis/JMETA-FAQ です。また、 NIFTY-Serve ・ UNIX フォーラ

ムの Linux 会議室にも定期的に投稿されています。

B.3.3 The Linux Hardware Compatibility List (Linux 互換ハードウェア一覧)

この書類は、 Linux の動作が確認されているハードウェアをまとめたものです。しかし、 Linux で動作しているハードウェアの多くは、ここには記載されていません。例えば IDE のハードディスクドライブは全部動作するはずですから、この一覧に書く必要はありません。この書類は

sunsite.unc.edu:/pub/Linux/docs/HARDWARE です。日本語の互換ハードウェア一覧は、現在日本

の Linux メーリングリストで作業中です。

B.3.4 The Linux Software Map

Linux Software Map は Linux で使えるソフトウェアについて、どこで取得できるか、誰が維持管理をしているか、などをまとめた文書です。しかし、この文書はまだ完成の域には達していません。 Linux のソフトウェアを配布している人の多くからは、まだこの文書への協力が得られていませんし、このプロジェクト自体がまだ新しいからです。ですから、この文書には記されていないソフトウェアが多数、 Linux 上で動作していることを覚えておいてください。

  この文書の最新版は sunsite.unc.edu の /pub/Linux/docs/LSM.z です。このファイルは gzip

で圧縮されていますから、 gzip 系のツールで展開してください。

B.3.5 Linux HOWTO 文書

Linux の HOWTO 文書群はさまざまな「手引書」を集めたものです。それぞれの文書が Linux システムの一面を扱います。例えば、 Installation HOWTO は Linux を入手してインストールする方法を扱い、 NET-2 HOWTO は Linux で TCP/IP を設定して使う方法を解説し、 Mail HOWTO では電子メールの設定法を記述する、といった具合です。

  Linux HOWTO 文書は、 sunsite.unc.edu の /pub/Linux/docs/HOWTO を代表として、多くの

Linux FTP サイトで公開されています。 HOWTO-INDEX は、現在公開されている HOWTO 文書にはどんなものがあるかを解説します。

これらの文書は多くが日本語に翻訳され、 FTP サイトや BBS で公開されています。おもな所在は

ftp.kuis.kyoto-u.ac.jp の/Linux/JF ディレクトリと ftp.pu-toyama.ac.jp の/pub/Linux/JF ディ

レクトリです。また、 NIFTY-Serve の FMV フォーラムや UNIX フォーラムには Linux 専用のライブラリがあります。

B.3.6 その他の文書

  Linux 関連の文書は、上に挙げたもの以外にも多数が sunsite.unc.edu:/pub/Linux/docs にあ

ります。また、日本語の文書は ftp.kuis.kyoto-u.ac.jp:/Linux/JF にあります。しかし、多くの文書は Linux の初心者にはあまり関係ないものです。 Linux の入門やインストール用の情報は、この本で解説しています。

B.4 USENET の Linux 用ニュースグループ

Linux 専用のニュースグループは五つあります。 comp.os.linux.help は、 Linux の利用や運用についての一般的な質問を扱います。 comp.os.linux.admin は Linux システムの管理に関する話題を扱います。 comp.os.linux.development はカーネルやシステムレベルのプログラミングの関するニュースグループです。 comp.ps.linux.misc は Linux について幅広い話題が展開されます。 comp.os.linux.announce は管理人付きのニュースグループで、 Linux についての発表やバグへのパッチなどが流されます。 comp.os.linux.announce への記事は、投稿される前に管理人である Matt Welsh 氏の投稿許可が必要です。このニュースグループに投稿しようとすると、普通はニュースソフトウェアが自動的に管理人に記事を送付します。しかし、ニュースソフトウェアの設定に誤りがある

場合は、 linux-announce@tc.cornell.edu 宛に直接記事をメールする必要があるかもしれません。

日本語のニュースグループには fj.os.linux があります。ここでは日本の Linux 関する話題を幅広く扱っています。

  comp.os.linux.announce  への投稿は
sunsite.unc.edu の/pub/Linux/docs/linux-announce.archive ディレクトリに保存されていま

す。このグループへの投稿は、 linux-activists メーリングリストの ANNOUNCE チャンネルにも投稿されます。詳しくは次の節をご覧ください。

質問を発する前に、 Linux FAQ やニュースグループを読むように心がけてください。みなさんが疑問に思うことは大抵、すでに誰かが質問し、解答が寄せられています。

B.5 Linux メーリングリスト

Linux 利用者用には多くのメーリングリストがあります。とくに著名なのは linux-activists メーリングリストです。これは主に Linux の開発者やプログラマー向けで、 Linux のインストールや利用法に関する話はほとんどありません。 Linux の利用に関する話は comp.os.linux.help ニュースグループに投稿しましょう。

linux-activists メーリングリストは複数チャンネルのリストです。つまり、特定の「チャンネル」に参加するとそのチャンネル用のメールだけが配送されます。複数のチャンネルに参加することも可能です。詳しくは、題 (Subject 欄) に help と書いたメールを

     linux-announce-request@niksula.hut.fi

に送ってください。このメーリングリストへの参加についての情報が返送されます。

B.6 関連図書

現在、 Linux を専門に扱った文献は linux Documentation Project が配布している文書だけです。しかし、 UNIX 系のシステム用に書かれた書籍は、 Linux を使う際にも参考になります。

タイトル: Learning the UNIX Operating System 著者: Grace Todino & John Strang 出版社: O’Reilly and Associates, 1987 ISBN: 0-937175-16-1, $9.00

UNIX オペレーティングシステムの学習を始めるには良い本です。この本の情報は大部分が Linux にも当てはまります。 UNIX の初心者で、真剣に新しいシステムでの学習を始めたい人にはお勧めの一冊です。

タイトル: Learning the vi Editor 著者: Linda Lamb 出版社: O’Reilly and Associates, 1990 ISBN: 0-937175-67-6, $21.95 邦題: vi 入門訳者: 福崎俊博訳邦訳出版社: アスキー, 1800 円

3.11 節で、 vi エディターの基礎を少し紹介しました。この本ではその続きを学習できます。 UNIX に真剣に取り組む人には vi の知識をつけておくのは重要です。いつも Emacs のような「本物」のエディターを使えるとは限らないからです。

タイトル: Essential System Administration 著者: Æleen Frisch 出版社: O’Reilly and Associates, 1991 ISBN: 0-937175-80-3, $29.95

O’Reilly and Associates のカタログから.. 「UNIX は、他のマルチユーザーシステムと同様に管理が要求されます。 Essential System Administration にはその方法が記されています。この本を読むと、システム管理に関する間違った言い伝えや混乱が解消します。また、 UNIX システムの運用に責任を持つ人向けに、管理の仕事をうまくまとめて紹介しています。」とても上手な解説ですね。

タイトル: TCP/IP Network Administration 著者: Craig Hunt 出版社: O’Reilly and Associates, 1990 ISBN: 0-937175-82-X, $24.95

TCP/IP ネットワークを設置して運用するための完全な手引き書です。 Linux に特化しているわけではありませんが、大体、内容の 9 割は Linux にも当てはまります。 NET-2-HOWTO や Linux Network Administrator’s Guide と併せて読めば、 TCP/IP の概念や技術的な事項をよく理解できるでしょう。

タイトル: Managing UUCP and Usenet 著者: Tim O’Reilly and Grace Todino 出版社: O’Reilly and Associates, 1991 ISBN: 0-937175-93-5, $24.95 邦題: UUCP システム管理訳者: juice 監訳邦訳出版社: アスキー, 3200 円

UUCP ネットワーク用のソフトウェアをインストールして設定する方法が、 USENET ニュース向けの設定法とともに解説されています。 UUCP を使って USENET ニュースにアクセスしたい人には、この本は必需品でしょう。本書の 5.4 節と 5.6 節には、 Linux 上の UUCP や USENET についての情報があります。

タイトル: Practical UNIX Security 著者: Simson Garfinkel & Gene Spafford 出版社: O’Reilly and Associates, 1991 ISBN: 0-937175-72-2, $29.95 邦題: UNIX セキュリティ訳者: 山口英監訳邦訳出版社: アスキー, 4800 円

UNIX システムのセキュリティについて解説した、素晴らしい本です。この本は、数年間 UNIX のシステム管理を経験した私が知らなかった事を、数多く教えてくれました。他の UNIX 本と同様、この本も大規模なシステム向けに書かれていますが、その内容はほとんど Linux にも当てはまります。

タイトル: X Window System User’s Guide 著者: Valerie Quercia & Tim O’Reilly 出版社: O’Reilly and Associates, 1993 ISBN: 1-56592-014-7, $34.95

X Window システムを利用するための完全な手引書です。 Linux 上に X window をインストールして最大限活用したい人は、この本を読むと良いでしょう。他のウィンドウシステムと違い、パッと見ただけでは X の威力は解らないでしょう。 X Window を何年も使ってきた私にも、この本から学ぶことがありました。

タイトル: Using C on the UNIX System 著者: Dave Curry 出版社: O’Reilly and Associates, 1989 ISBN: 0-937175-23-4, $24.95 邦題: UNIX C プログラミング訳者: アスキー書籍編集部監訳邦訳出版社: アスキー, 2500 円

この本は、 UNIX のシステムコールを使ったプログラミングについて、あらゆる局面から紹介しています。ファイルをはじめとして、ターミナル I/O、 TCP/IP ソケットに至るすべてを網羅しています。 Linux でソフトウェアを開発する人には必携の本です。

付録 C

FTP の使い方と FTP サイト

FTP (File Transfer Protocol : ファイル転送プロトコル) は、インターネット上のコンピュータ間でファイルを転送する目的で使われる一連のプログラム群です。インターネットに繋がった大抵の UNIX, VMS, MS-DOS 等のシステムでは、 ftp というプログラムを使ってファイルを転送できます。インターネットを利用できる人には、 Linux のソフトウェアを取得する手段として ftp が最適でしょう。この付録 C では ftp の基本的な使い方を紹介します。もちろん、ここで解説する事柄がすべてではなく、 ftp にはさらに多くの機能が備わっていますし、利用法もいろいろです。第 2 章では FTP で Linux のソフトウェアを取得する方法を解説しています。

この付録の最後には Linux ソフトウェアを置いている FTP サイトの一覧を記します。 MS-DOS, UNIX, VMS 等のシステムを利用してインターネットからファイルを取得するなら、対

話的なプログラム・ ftp が便利です。しかし、 ftp の機能を持ったソフトウェアはこれだけではありません。例えばマッキントッシュ用には、見ただけで操作法が分かる、メニュー型の Fetch があります。コマンド型でない ftp を使っている人にも、この章の情報は役立つでしょう。

ftp では他のインターネット・サイトとの間で、ファイルのアップロード (送信) やダウンロード (受信) が可能です。普通はソフトウェアをダウンロードするために ftp を使用します。インターネット上には、一般に公開されている FTP アーカイブサイトが多数存在します。このようなコンピュータは誰からでも ftp を受け付けており、誰でもフリーソフトウェアを取得できます。例えば、 sunsite.unc.edu などが有名です。ここにはサン・マイクロシステムズのコンピュータ用のソフトウェアが多数存在する上、 Linux の主要な FTP サイトとしても幅広く利用されています。さらに、 FTP アーカイブサイトはお互いにソフトウェアをミラーしています。つまり、あるサイトに登録されたソフトウェアは自動的に他の多数のサイトにもコピーされるのです。ですから、あちこちのアーカイブサイトで全く同じファイルが置いてあるものなのです。

C.1 ftp を起動する

ftp コマンドを実行する前に、接続先のサイトが必要です。以下で用いる「画面」例の中では重要な情報だけを示します。あなたが実際に ftp コマンドを実行すると、画面には例とは異なった情報が表示されるかも知れません。また、イタリック体で示される文字はあなたがタイプするコマンドである事を指します。その他はすべて画面に出力される文字です。

ftp を起動するには単に次のようなコマンドを実行するだけです。

ftp ⟨hostname⟩

ここで、 ⟨hostname⟩ は接続しようとしているサイトの名称です。例えば伝説のサイト・ shoop.vpizza.com に接続する場合、次のように ftp コマンドを使います。

     ftp shoop.vpizza.com

C.2 ログインする

ftp を起動したら次のような表示があるはずです。

     Connected to shoop.vpizza.com.
     220 Shoop.vpizza.com FTPD ready at 15 Dec 1992 08:20:42 EDT
     Name (shoop.vpizza.com:mdw):

ここで ftp は、 shoop.vpizza.com にログインするためのユーザー名の入力を促します。この例でユーザー名の入力を省略すると、 mdw としてログインします。これは私が FTP コマンドを実行したコンピュータでのユーザー名です。 shoop.vpizza.com には私はアカウントを持っていませんので、私個人としてはこのコンピュータを使うことはできません。しかし、一般公開されている FTP サイトでは、個人のログイン名の代わりに anonymous (匿名) という利用者名を使ってのログインが許可されています。この時のパスワードは、インターネットの電子メールアドレスを持っている人は、そのアドレスをタイプします。ですからここでは次のようにタイプします。

     Name (shoop.vpizza.com:mdw): anonymous
     331-Guest login ok, send e-mail address as password.

Password: mdw@sunsite.unc.edu

     230- Welcome to shoop.vpizza.com.
     230- Virtual Pizza Delivery[tm]:  Download pizza in 30 cycles or less
     230- or you get it FREE!
     ftp>

パスワード欄ではあなた自身の電子メールアドレスをタイプしなければなりませんが、この時にタイプされた文字は画面上には表示されません。なぜなら、これは「パスワード」として扱われているからです。以上で、 ftp がログインを許可し、ファイルを取得する準備が整いました。

C.3 ファイルを探す

さて、ログインはできました。ここで ftp> がコマンドプロンプトになり、 ftp プログラムはコマンドの入力待ち状態に入ります。いくつかは基本的なコマンドを理解しておくべきでしょう。

ls ⟨file⟩

と

dir ⟨file⟩

は、共にファイルの一覧を表示します。引数 ⟨file⟩ はオプションで、表示したいファイルの名称を指定します。両者の違いは、 ls は普通ファイル名だけを表示するのに対し、 dir はファイルの大きさやファイルの更新日など詳しい情報を表示する点です。

次のコマンドは、引数に与えたディレクトリに移動します。

cd ⟨directory⟩

これは UNIX や MS-DOS の cd コマンドと同じです。親ディレクトリ^{1} に移動するには次のコマンドを使います。 C.3. ファイルを探す 117

1 現在いる (カレント) ディレクトリより階層が一つ上のディレクトリ

cd ..

「cd」と「..」の間にはスペースが必要です。次のコマンドは、引数に与えた ftp の ⟨ コマンド ⟩ の解説を表示します。

help ⟨command⟩

引数を与えなければ、 ftp が提供するコマンドがすべて表示されます。ここで dir とタイプすると、この時点でアクセス可能なファイルの一覧が表示されます。

ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 1337

dr-xr-xr-x  2 root     wheel         512 Aug 13 13:55 bin
drwxr-xr-x  2 root     wheel         512 Aug 13 13:58 dev
drwxr-xr-x  2 root     wheel         512 Jan 25 17:35 etc
drwxr-xr-x 19 root     wheel        1024 Jan 27 21:39 pub
drwxrwx-wx  4 root     ftp-admi     1024 Feb  6 22:10 uploads
drwxr-xr-x  3 root     wheel         512 Mar 11  1992 usr

226 Transfer complete.
921 bytes received in 0.24 seconds (3.7 Kbytes/s)
ftp>

ここに表示されたファイルは全部ディレクトリで、ダウンロードできるファイルではありません。ファイル情報の最初の d という文字からこの事がわかります。普通の FTP サイトでは、誰でもアクセスできるファイルは/pub ディレクトリの下に置かれています。このディレクトリに移動してみましょう。

ftp> dir
200 PORT command successful.
150 ASCII data connection for /bin/ls (128.84.181.1,4525) (0 bytes).
total 846

-rw-r--r--   1 root     staff        1433 Jul 12  1988 README
-r--r--r--   1 3807     staff       15586 May 13  1991 US-DOMAIN.TXT.2
-rw-r--r--   1 539      staff       52664 Feb 20  1991 altenergy.avail
-r--r--r--   1 65534    65534       56456 Dec 17  1990 ataxx.tar.Z
-rw-r--r--   1 root     other     2013041 Jul  3  1991 gesyps.tar.Z
-rw-r--r--   1 432      staff       41831 Jan 30  1989 gnexe.arc
-rw-rw-rw-   1 615      staff       50315 Apr 16  1992 linpack.tar.Z
-r--r--r--   1 root     wheel       12168 Dec 25  1990 localtime.o
-rw-r--r--   1 root     staff        7035 Aug 27  1986 manualslist.tblms
drwxr-xr-x   2 2195     staff         512 Mar 10 00:48 mdw
-rw-r--r--   1 root     staff        5593 Jul 19  1988 t.out.h

226 ASCII Transfer complete.
2443 bytes received in 0.35 seconds (6.8 Kbytes/s)
ftp>

ここには面白そうなファイルがあります。このディレクトリには README というファイルがありますから、最初にこのファイルを取得するのが良いでしょう。大抵の FTP サイトでは/pub ディレクトリに README ファイルを置いています。

C.4 ファイルをダウンロードする

ファイルをダウンロードする際には幾つか気を付けるべき事柄があります。

• 途中経過を表示する。ファイルを転送中に途中経過を表示すると、転送の進行状況がわかります。これにより、 FTP サイトとの接続が断たれていないかが判り、 20 分間ボーッと座ったままファイルを転送している積もりでいるような事がなくなります。普通、途中経過はシステムにより 1024 バイトか 8192 バイト毎に、 # 印と共に表示されます。途中経過を表示するには hash コマンドを使います。

     ftp> hash
     Hash mark printing on (8192 bytes/hash mark).
     ftp>

• ダウンロードするファイルの型を判断する。 FTP では二種類のファイルを扱います。つまりバイナリーとテキストです。ダウンロードするファイルは普通バイナリー型です。プログラム、圧縮されたファイル、アーカイブファイル等がバイナリーファイルに当たります。一方、 README ファイルなどはテキスト型です。なぜファイルの型が問題になるのでしょうか。これは、 (MS-DOS のような) 一部のシステムでは、テキストファイルに含まれるリターンのような文字を変換してファイルを読めるようにするためです。バイナリーモードでファイルを転送する時には、このような文字の変換処理がなくなり、各データがありのままに転送されます。 bin コマンドと ascii コマンドで、ファイルの転送モードをバイナリー型かテキスト型に設定します。モードの既定値が疑わしい場合は、ファイルを転送する前にバイナリーモードに設定しましょう。バイナリーファイルをテキストモードで転送するとファイルが破壊されます。 (これは、 FTP を使う時にはよくある間違いです。 ) テキストモードは、例えばファイルの拡張子が .txt のような、テキストファイルの転送に使います。この章の例では、 README ファイルを取得します。このファイルは、ほぼ間違いなくテキスト型ですから、次のようなコマンドを使います。

ftp> ascii

     200 Type set to A.
     ftp>

• ファイル格納用のディレクトリを設定する。ローカルディレクトリは、ダウンロードするファイルを格納する自分自身のシステム上のディレクトリです。 cd コマンドは接続先の FTP サイトのディレクトリを変更しますが、 lcd コマンドは自分自身のシステム内のカレントディレクトリを変更します。例えばローカルディレクトリを /home/db/mdw/tmp に設定するには次のコマンドを使います。

ftp> lcd /home/db/mdw/tmp

     Local directory now /home/db/mdw/tmp
     ftp>

以上でファイルをダウンロードする準備ができました。次のコマンドで、接続先の FTP サイトにあるファイル・ ⟨remote-name⟩ を、自分自身のシステムに ⟨local-name⟩ というファイル名で転送して保存します。

get ⟨remote-name⟩ ⟨local-name⟩

⟨local-name⟩ はオプションです。これを指定しなければ、接続先のサイトのファイルと同じ名前で、自分自身のシステムに転送されます。例えばダウンロードするファイルの名前が foo.txt で、同名のファイルが自分自身のシステムの転送用ディレクトリに既に存在する場合、 ⟨local-name⟩ に別のファイル名を指定するべきでしょう。こうすると、既に存在する同名のファイルには上書きされません。

この章の例では README ファイルをダウンロードしますから、次のようなコマンドを使います。

ftp> get README

     200 PORT command successful.
     150 ASCII data connection for README (128.84.181.1,4527) (1433 bytes).
     #
     226 ASCII Transfer complete.
     local:  README remote:  README
     1493 bytes received in 0.03 seconds (49 Kbytes/s)
     ftp>

C.5 FTP を終了する

FTP セッションを終了するには、次のコマンドを使います。

     quit

次のコマンドは、現在の FTP 接続を切るために使用します。

     close

この後 open コマンドを使うと、 FTP プログラム自体は終了せずに、新たに別の FTP サイトに接続する事も可能です。

ftp> close

     221 Goodbye.
     ftp> quit

C.6 Linux FTP サイト一覧

Linux 関連の代表的な FTP サイトの一覧が、第 sec-get-ftp 節の表 2.1にあります。また、日本の ftp サイトの情報も同じ節に挙げてありますので参考にしてください。なお、さらに詳しい情報は、付録 ??にあります。 120 付録 C FTP の使い方と FTP サイト

付録 D

GNU 一般公有使用許諾書

1991 年 6 月，バージョン 2 Copyright (C) 1989,1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA

何人も、以下の内容を変更しないでそのまま複写する場合に限り、本使用許諾書を複製したり頒布することができます。

はじめに

ほとんどのソフトウェアの使用許諾は、ソフトウェアを共有し、変更するユーザの自由を奪うことを意図しています。それに対して、我々の GNU 一般公有使用許諾は、フリー・ソフトウェアを共有したり変更する自由をユーザに保証するためのもの、即ちフリー・ソフトウェアがそのユーザ全てにとってフリーであることを保証するためのものです。本使用許諾は、 Free Software Foundation のほとんど全てのソフトウェアに適用されるだけでなく、プログラムの作成者が本使用許諾に依るとした場合のそのプログラムにも適用することができます。 (その他の Free Software Foundation のソフトウェアのいくつかは、本許諾書ではなく、 GNU ライブラリ一般公有使用許諾で保護されます。 ) あなたは自分のプログラムにもこれを適用できます。我々がフリー・ソフトウェアについて言う場合は自由のことに言及しているのであって、価格のことではありません。我々の一般公有使用許諾の各条項は、次の事柄を確実に実現することを目的として立案されています。

• フリー・ソフトウェアの複製物を自由に頒布できること (そして、望むならあなたのこのサービスに対して対価を請求できること)。

• ソース・コードを実際に受け取るか、あるいは、希望しさえすればそれを入手することが可能であること。

• 入手したソフトウェアを変更したり、新しいフリー・プログラムの一部として使用できること。

• 以上の各内容を行なうことができるということをユーザ自身が知っていること。

このようなユーザの権利を守るために、我々は、何人もこれらの権利を否定したり、あるいは放棄するようにユーザに求めることはできないという制限条項を設ける必要があります。これらの制限条項は、ユーザが、フリー・ソフトウェアの複製物を頒布したり変更しようとする場合には、そのユーザ自身が守るべき義務ともなります。例えば、あなたがフリー・ソフトウェアの複製物を頒布する場合、有償か無償かにかかわらず、あなたは自分の持っている権利を全て相手に与えなければなりません。あなたは、相手もまたソース・コードを受け取ったり入手できるということを認めなければなりません。さらにあなたは、彼らが自分たちの権利を知るように、これらの条項を知らしめなければなりません。

我々は次の２つの方法でユーザの権利を守ります。 (1) ソフトウェアに著作権を主張し、 (2) 本使用許諾の条項の下でソフトウェアを複製・頒布・変更する権利をユーザに与えます。

また、各作成者や我々自身を守るために、本フリー・ソフトウェアが無保証であることを全ての人々が了解している必要があります。さらに、他の誰かによって変更されたソフトウェアが頒布された場合、受領者はそのソフトウェアがオリジナル・バージョンではないということを知らされる必要があります。それは、他人の関与によって原開発者に対する評価が影響されないようにするためです。

最後に、どのフリー・プログラムもソフトウェア特許に絶えず脅かされています。我々は、フリー・プログラムの再頒布者が個人的に特許権を取得し、事実上そのプログラムを自分の財産にしてしまうという危険を避けたいと願っています。これを防ぐために我々は、いずれの特許も、誰でも自由に使用できるように使用許諾されるべきか、あるいは何人に対しても全く使用させないかの、いずれかにすべきであることを明らかにしてきました。

複写・頒布・変更に対する正確な条項と条件を次に示します。

GNU 一般公有使用許諾の下での複製、頒布、変更に関する条項と条件

1. 本使用許諾は、本一般公有使用許諾の各条項に従って頒布されるという著作権者からの告知文が表示されているプログラムやその他の作成物に適用されます。以下において「プログラム」とは、そのようなプログラムや作成物を指すものとし、また、「プログラム生成物」とは、上述した「プログラム」自身、または、著作権法下における全ての派生物；すなわち、その「プログラム」の全部又は一部を、そのまま又は変更して、且つ／又は他の言語に変換して、内部に組み込んだ作成物を意味します。 (以下、言語変換は「変更」という用語の中に無条件に含まれるものとします。 ) 本使用許諾によって許諾を受ける者を「あなた」と呼びます。

複製、頒布、変更以外の行為は本使用許諾の対象としません。それらは本使用許諾の範囲外です。「プログラム」を実行させる行為に関して制約はありません。「プログラム」の出力は、 ( 「プログラム」を実行させて作成させたかどうかとは無関係に) その内容が「プログラム生成物」である場合に限り本使用許諾の対象となります。これが当てはまるかどうかは、「プログラム」が何をするものかに依ります。

2. あなたは、どのような媒体上へ複製しようとする場合であっても、入手した「プログラム」のソース・コードをそのままの内容で複写した上で適正な著作権表示と保証の放棄を明確、且つ適正に付記する場合に限り、複製又は頒布することができます。その場合、本使用許諾及び無保証に関する記載部分は、全て元のままの形で表示してください。また、「プログラム」の頒布先に対しては、「プログラム」と共に本使用許諾書の写しを渡してください。

複製物の引き渡しに要する実費は請求することができます。また、あなた独自の保証を行なう場合はそれを有償とすることができます。

3. 次の各条件を全て満たしている限り、あなたは、「プログラム」又はその一部分を変更して「プログラム生成物」とすることができ、さらに、変更版や右作成物を上記第 2 項に従って複製又は頒布することもできます。

(a) ファイルを変更した旨とその変更日とを、変更したファイル上に明確に表示すること。

(b) 変更したか否かを問わず、凡そ「プログラム」又はその一部分を内部に組み込んでいるか又はそれから派生した生成物を頒布する場合には、その全体を本使用許諾の条項に従って第三者へ無償で使用許諾すること。 (c) 変更したプログラムが実行時に通常の対話的な方法でコマンドを読むようになっていると

すれば、最も普通の方法で対話的にそのプログラムを実行する時に、次の内容を示す文言がプリンタへ印字されるか、或いは画面に表示されること。

• 適切な著作権表示。

• 無保証であること (あなたが独自に保証する場合は、その旨)。

• 頒布を受ける者も、本使用許諾と同一の条項に従って「プログラム」を再頒布できること。

• 頒布を受ける者が本使用許諾書の写しを参照する方法。 (例外として、「プログラム」自体は対話的であっても起動時の文言を通常は印字しないのならば、あなたの「プログラム生成物」はこのような文言を印字する必要はありません。 )

これらの要件は変更された作成物にも全て適用されます。その変更版の或る部分が「プログラム」の派生物ではなく、しかもそれ自体独立で異なる作成物だと合理的に考えられる場合、あなたがそれらを別の作成物として頒布した時は、本使用許諾とその条項はそれらの部分には適用されません。しかし、それらを「プログラム生成物」の一部として頒布する場合は、全体が本使用許諾の条項に従って頒布されなければならず、使用許諾を受ける他の全ての者に対する許諾もプログラム全体にわたって与えられなければならず、結果として、誰が書いたかにかかわらず、全ての部分に本使用許諾が適用されなければなりません。このように、本条項の意図するところは、完全にあなたによって書かれた作成物について、権利を要求したり、あなたと権利関係を争うことではありません。むしろその目的は、作成物が「プログラム生成物」である場合にその派生物や集合物の頒布を規制することにあります。さらに、「プログラム」 (又は「プログラム生成物」 ) と「プログラム生成物」とはならない他のプログラムとを、単に保管や頒布のために同一の媒体上にまとめて記録したとしても、本使用許諾は他のプログラムには適用されません。

4. あなたは、以下のうちいずれか 1 つを満たす限り、上記第 2 項及び第 3 項に従って「プログラム」 (又は、上記第 3 項で言及している「プログラム生成物」 ) をオブジェクト・コード又は実行可能な形式で複製及び頒布することができます。

(a) 対応する機械読み取り可能なソース・コード一式を一緒に引き渡すこと。その場合、そのソース・コードの引き渡しは上記第 2 項及び第 3 項に従って、通常ソフトウェアの交換に用いられる媒体で行なわれること。

(b) 少なくとも 3 年間の有効期間を定め、且つその期間内であれば対応する機械読み取り可能なソース・コード一式の複製を、ソース頒布に関わる実費以上の対価を要求せずに提供する旨、及びその場合には上記第 2 項及び第 3 項に従って、通常ソフトウェアの交換に用いられる媒体で提供される旨を記載した書面を、第三者に一緒に引き渡すこと。

(c) 対応するソース・コード頒布の申し出に際して、あなたが得た情報を一緒に引き渡すこと。 (この選択肢は、営利を目的としない頒布であって、且つあなたが上記の b) 項に基づいて、オブジェクト・コード或いは実行可能形式のプログラムしか入手していない場合に限り適用される選択項目です。 )

なお、ソース・コードとは、変更作業に適した記述形式を指します。また、実行可能形式のファイルに対応するソース・コード一式とは、それに含まれる全モジュールに対応する全てのソース・コード、及びあらゆる関連のインタフェース定義ファイル、及び実行を可能にするコンパイルとインストールの制御に関する記述を指します。特別な例外として、実行可能なファイルが動作するオペレーティング・システムの主要な構成要素 (コンパイラ、カーネルなど) と共に (ソース・コード又はバイナリのどちらかで) 頒布されているものについては、その構成要素自体が実行形式に付随していない場合に限り、頒布されるソース・コードに含める必要はありません。実行可能形式またはオブジェクト・コードの頒布が、指示された場所からの複製のためのアクセス権の賦与である場合、同じ場所からのソース・コードの複製のための同等なアクセス権を賦与すれば、たとえ第三者にオブジェクト・コードと共にソースの複製を強いなくとも、ソース・コードを頒布したものとみなします。

5. 本使用許諾が明示的に許諾している場合を除き、あなたは、「プログラム」を複製、変更、サブライセンス、頒布することができません。本使用許諾に従わずに「プログラム」を複製、変更、サブライセンス、頒布しようとする行為は、それ自体が無効であり、且つ、本使用許諾があなたに許諾している「プログラム」の権利を自動的に消滅させます。その場合、本使用許諾に従ってあなたから複製物やその権利を得ている第三者は、本使用許諾に完全に従っている場合に限り、引続き有効な使用権限を持つものとします。

6. あなたはまだ同意の印として署名していないので、本使用許諾を受け入れる必要はありません。しかし、あなたに「プログラム」又はその派生物を変更又は再頒布する許可を与えるものは本使用許諾以外にはありません。これらの行為は、あなたがもし本使用許諾を受け入れないのであれば、法律によって禁じられます。従って、あなたが「プログラム」 (又は「プログラム生成物」 ) の変更又は頒布を行えば、それ自体であなたは本使用許諾を受け入れ、且つ、「プログラム」又はその「プログラム生成物」の複製、頒布、変更に関するこれらの条項と条件の全てを受け入れたことを示します。

7. あなたが「プログラム」 (又はその「プログラム生成物」 ) を再頒布すると自動的に、その受領者は、元の使用許諾者から、本使用許諾の条項に従って「プログラム」を複製、頒布、変更することを内容とする使用許諾を受けたものとします。あなたは、受領者に許諾された権利の行使について、さらに制約を加えることはできません。あなたには、第三者に本使用許諾の受け入れを強いる責任はありません。

8. 裁判所の判決、又は特許侵害の申し立て、又は (特許問題に限らない) 何らかの理由の結果として、あなたに課せられた条件が本使用許諾と相入れないものであったとしても (裁判所の命令、契約、その他によるものであれ)、本使用許諾の条件が免除されるものではありません。本使用許諾による責務と、その他の何らかの関連責務を同時に満たす態様で頒布することができないならば、あなたは「プログラム」を全く頒布してはいけません。例えば、特許権の内容が、あなたから直接又は間接に複製を受け取った全ての人に使用料のないプログラムの再頒布を許さないものであれば、あなたがかかる特許上の要請と本使用許諾の両方を満足させる方法は、「プログラム」の頒布を完全に断念することだけです。本条項の或る部分が何らかの特別な状況下で無効または適用不可能になった場合、本条項のその他の残りの部分が適用されるように意図されており、また、本条項は全体としてその他の状況に当てはまるように意図されています。本条項の目的は、特許やその他の財産権を侵害したり、そのような権利に基づく主張の妥当性を争うようにあなたに勧めることではありません。本条項の唯一の目的は、フリー・ソフトウェアの頒布システムの完全性を守ることで、それは公有使用許諾の実践によって履行されます。多くの人々が、このシステムの一貫した適用を信頼して、このシステムを通じて頒布されている幅広い範囲のソフトウェアに惜しみない貢献をしてくれました。作成者や寄贈者が他の何らかのシステムを通じてソフトウェアを頒布したいと決めることは彼らの自由意志であり、使用許諾を受ける者はその選択を強いることはできません。本条項は、本使用許諾の他の条項の意味内容が何であるかを完全に明らかにすることを意図しています。 9. 「プログラム」の頒布・使用が、ある国において特許又は著作権で保護されたインタフェースの

どちらかで制限される場合、「プログラム」を本使用許諾下においた原著作権保持者は、その国を除外する旨の明示的な頒布地域制限を加え、それ以外の (除外されない) 国に限定して頒布が許されるようにすることができます。そのような場合、その制限を本使用許諾の本文にあたかも書かれているかのように本使用許諾の中に組み入れられるものとします。

10. Free Software Foundation は随時、本一般公有使用許諾の改訂版、又は新版を公表することがあります。そのような新しいバージョンは、現行のバージョンと基本的に変わるところはありませんが、新しい問題や懸案事項に対応するために細部では異なるかもしれません。各バージョンは、バージョン番号によって区別します。「プログラム」中に本使用許諾のバージョン番号の指定がある場合は、その指定されたバージョンか、又はその後に Free Software Foundation から公表されているいずれかのバージョンから 1 つを選択して、その条項と条件に従ってください。「プログラム」中に本使用許諾のバージョン番号の指定がない場合は、 Free Software Foundation が公表したどのバージョンでも選択することができます。

11. 「プログラム」の一部を頒布条件の異なる他のフリー・プログラムに組み込みたい場合は、その開発者に書面で許可を求めてください。 Free Software Foundation が著作権を持っているソフトウェアについては、 Free Software Foundation へ書面を提出してください。このような場合に対応するために我々は例外的処理をすることもありますが、その判断基準となるのは、次の 2 つの目標の実現に合致するか否かという点です。即ち、１つは我々のフリー・ソフトウェアの全ての派生物をフリーな状態に保つことであり、もう１つはソフトウェアの共有と再利用とを広く促進させることです。

無保証

12. 「プログラム」は無償で使用許諾されますので、適用法令の範囲内で、「プログラム」の保証は一切ありません。著作権者やその他の第三者は全く無保証で「そのまま」の状態で、且つ、明示か暗黙であるかを問わず一切の保証をつけないで提供するものとします。ここでいう保証とは、市場性や特定目的適合性についての暗黙の保証も含まれますが、それに限定されるものではありません。「プログラム」の品質や性能に関する全てのリスクはあなたが負うものとします。「プログラム」に欠陥があるとわかった場合、それに伴う一切の派生費用や修理・訂正に要する費用は全てあなたの負担とします。

13. 適用法令の定め、又は書面による合意がある場合を除き、著作権者や上記許諾を受けて「プログラム」の変更・再頒布を為し得る第三者は、「プログラム」を使用したこと、または使用できないことに起因する一切の損害について何らの責任も負いません。著作権者や前記の第三者が、そのような損害の発生する可能性について知らされていた場合でも同様です。なお、ここでいう損害には通常損害、特別損害、偶発損害、間接損害が含まれます (データの消失、又はその正確さの喪失、あなたや第三者が被った損失、他のプログラムとのインタフェースの不適合化、等も含まれますが、これに限定されるものではありません)。

以上

注意

英文文書 (GNU General Public Licence) を正式文書とする。この和文文書は弁護士の意見を採り入れて、できるだけ正確に英文文書を翻訳したものであるが、法律的に有効な契約書ではない。

和文文書自体の再配布に関して

いかなる媒体でも次の条件がすべて満たされている場合に限り、本和文文書をそのまま複写し配布することを許可する。また、あなたは第三者に対して本許可告知と同一の許可を与える場合に限り、再配布することが許可されています。

• 受領、配布されたコピーに著作権表示および本許諾告知が前もって載せられていること。

• コピーの受領者がさらに再配布する場合、その配布者が本告知と同じ許可を与えていること。 • 和文文書の本文を改変しないこと。

あなたの新しいプログラムにこれらの条項を適用する方法

あなたが新しくプログラムを作成し、それを公用に供したい場合は、プログラムをフリー・ソフトウェアにして、全ての人々が以上の各条項に従ってこれを再頒布や変更をすることができるようにするのが最良の方法です。

そうするためには、プログラムに以下の表示をしてください。その場合、無保証であるということを最も効果的に伝えるために、ソース・ファイルの冒頭にその全文を表示すれば最も安全ですが、その他の方法で表示する場合でも、「著作権表示」と全文を読み出す為のアドレスへのポインタだけはファイル上に表示しておいてください。

\underline{プログラム名とどんな動作をするものかについての簡単な説明の行} Copyright (C) 19 ○○年、\underline{著作権者名}

本プログラムはフリー・ソフトウェアです。あなたは、 Free Software Foundation が公表した GNU 一般公有使用許諾の「バージョン２」或いはそれ以降の各バージョンの中からいずれかを選択し、そのバージョンが定める条項に従って本プログラムを再頒布または変更することができます。

本プログラムは有用とは思いますが、頒布にあたっては、市場性及び特定目的適合性についての暗黙の保証を含めて、いかなる保証も行ないません。詳細については GNU 一般公有使用許諾書をお読みください。

あなたは、本プログラムと一緒に GNU 一般公有使用許諾の写しを受け取っているはずです。そうでない場合は、 Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA へ手紙を書いてください。

また、ユーザが電子メイルや書信であなたと連絡をとる方法についての情報も書き添えてください。プログラムが対話的に動作する場合は、対話モードで起動した時に次のような短い告知文が表示さ

れるようにしてください。

Gnomovision バージョン 69、 Copyright (C) 19 ○○年\underline{著作権者名}

Gnomovision は完全に無保証です。詳細は「 show w 」とタイプしてください。これはフリー・ソフトウェアなので、特定の条件の下でこれを再頒布することができます。詳細は「 show c 」とタイプしてください。

上記の「 show w 」や「 show c 」は各々、本一般公有使用許諾の関連する部分を表示するコマンドを指します。もちろん、あなたが使うこれらのコマンドは「 show w 」や「 show c 」といった呼び名でなくても構いません。さらに、それらのコマンドはあなたのプログラムに合わせる為に、マウスでクリックしたりメニュー形式にすることもできます。

また、必要と認めた場合には、あなたの雇い主 (あなたがプログラマとして働いている場合) や在籍する学校から、そのプログラムに対する「著作権放棄」を認めた署名入りの書面を入手してください。ここにその文例を載せます。名前は変えてください。

Yoyodyne, Inc. は、 James Hacker が開発したプログラム `Gnomovision' (コンパ

イラにつなげるプログラム) についての著作権法上の全ての権利を放棄する。

     \underline{Ty Coon の署名}, 1 April 1989
     Ty Coon, 副社長

本一般公有使用許諾は、あなたのプログラムを財産権の対象となっている他のプログラムに組み込むことは認めていません。あなたのプログラムがサブルーチン・ライブラリであって、あなたがそのライブラリを財産権の対象となっている他のアプリケーションとリンクさせることによって、さらに有用なものにしようとする場合には、本使用許諾書の代わりに、 GNU ライブラリ一般公有使用許諾書に従ってください。