MS-DOS ユーザのためのLinux の基礎知識 いちに NiftyID: NCD02720 1994 年8 月27 日 はじめに Linux は、UNIX クローンのOS です。Linuxは、パーソナル・コンピュータを対象 としたOS であり、まずIBM-PC 上に実装され、後にFM-TOWNS へも移植されました。 おそらく、これらのマシンを所有するユーザは、MS-DOS を主力として使い、その機 能について習熟していることと思います。 Linux は、完全なマルチタスク、強力なセキュリティ機能など、MS-DOS では提供 できない、数々の優れた機能を持っています。 ユーザは、これらの機能を使いこな すため、 Linux 特有の知識について学習する必要があります。しかし、心配はいり ません。MS-DOS は、階層ディレクトリやパイプなど、一部UNIXの機能を取り込んで きた経緯があります。従って、MS-DOS を十分に理解している人にとって、Linux は さほど難しいものではないでしょう。 本稿では、MS-DOS と、Linux というUNIX との違いに着目し、必須と思われる知 識について解説しています。 1 1 インストールする前に まず始めに、Linux を実際にインストールする前に知っておくべき知識について 説明します。現在、Linuxのインストールは、より手軽な方向へ進んでいます。SLS Slackware 等の優秀なパッケージの出現や、雑誌記事の充実、国内外の貢献者の努 力によって、初心者を取り巻く環境は、随分と良くなったと思います。しかし、依 然として、初心者が陥り易い間違いというものは存在します。これらは技術的な問 題というよりむしろ、心構えや姿勢の問題であることが多いのです。ここでは、公 衆の面前で恥をかかないために、最低限必要な知識について触れます。 1.1 インストールする前に インストーラが親切になっても、やはり注意力は必要です。判断を間違えれば、 最悪の場合、MS-DOS がインストールされている区画1を消滅させる危険性もありま す。念のため、インストール前にMS-DOS の区画のバックアップをとっておくこと をお勧めします。また、区画の対応をしっかり把握しておきましょう。 MS-DOS 上で、区画を作成するには、fdisk2というコマンドを用います。Linux でも、同名のfdisk というコマンドが用意されています。これはMS-DOS の物より シンプルです。しかし、Linux のfdisk は区画を作成したり消したりしても、'w' さえ押さなければ区画情報は書き込まれませんから、さほど恐れる必要はありま せん。 1.2 壊してしまう前に Linux のシステムが起動しなくなった場合、ハードウェアの故障にせよ、おか しな操作をしたにせよ、必ず原因があるはずです。その原因を調べ、修復するた め、緊急用の起動フロッピー3を作成しておくことをお勧めします。具体的には インストール時に用いた起動フロッピーを保管しておくだけで良いのです。なに かあった時は、これを起動して原因を究明しましょう。 1.3 文句を言う前に もし、MS-DOS に不備があるのなら、それをOEM販売しているメーカー、もしく はMSKK4の責任でしょう。また、メーカーは、ユーザサポートをする義務がある でしょう。しかし、Linux は売り物ではありません。 店頭で売られているパッ ケージの値段は、Linux 自体の値段ではないのです。そこには、サポート料金な どは含まれていません。また、ネットワークなどでサポートしているように見え る人達も、Linux上に数々のソフトウェアを移植/制作している人達も、ほとんど すべてがボランティアなのです。この点こそが、Linux とMS-DOSとの、本質的な 違いでしょう。従って、不備な点を見つけても文句を言うのではなく、「ここを こうしたら良くなるよ」「おかしいので直してみました」というように、自分の 作業の成果を、全体にフィードバックすることを考えてください。正にLinux はこうして発展してきたのですから。 この協調の理念が理解できないという人は、Linux を使用するべきではありま せん。この理念は、GNUと呼ばれるプロジェクトにも通じます。もし、これから も、売り物ではないけれど非常に優れた〜例えばLinux のような〜ソフトウェア を使い続けたいならば、GNU の理念[1] を、正しく理解する必要があります。 1.4 質問をする前に Linux では、サポートしている人達はボランティアです。質問をするにしても その前にソフトウェアに付属の説明書を読んだり、下調べをすることは、最低限 必要な態度でしょう。実際、BBS上の電子掲示版 などにかかれている質問で、 _____________________________ 1 パーティションとも呼ばれ、ひとつのハードディスクを複数の領域に区切っ たものを指します。 2 IBM-PC の場合はfdisk, TOWNS の場合はTOWNS-MENU の区画設定で行います。 3 ブートとも呼ばれます。 4 俗名、日本マイクロソフトのことです。 2 よく見られるのですが、「私は英語が苦手で」「初心者なもので」「時間がない もので」という言葉を、あたかも免罪符のように扱う人が多いのです。だから他 人になんとかしてもらおう、というのならば、どんなハードを使い、どんなソフ トをインストールして、どういった試行錯誤を行ったか、書く事はマナーです。 ボランティア精神も有限であることを、忘れてはいけません。 Linux は、UNIX に限りなく近いシステム5であるため、Linux を勉強するため には、一般に発行されている、UNIX 関連の文献[2][3][4] を用いることができ るでしょう。また、貢献者の手により、Linux 関係のFAQ6なども日本語化されて います。 ネットワークに参加できる人は、過去に同じような質疑応答がないか、チェッ クすることによって、有用な情報を得ることができるでしょうそうした試行錯誤 の後、問題が解決したならば、その情報を、ネットワークに還元してください。 こうすることによって、ひとりの苦労は、全体の共有財産となります。きっと、 それを読んで助かる人もいることでしょうから。善意にすがった人が、次の担い 手にならなければ、善意も枯渇する7のです。 2 基本用語 ここでは、MS-DOS からスムーズにLinux へ入っていく上で、まず知っておか なくてはならない用語や動作の違いを、両者を対比させながら、説明します。 2.1 バックスラッシュとスラッシュ MS-DOS のパスの区切りは、通常バックスラッシュです。 日本語MS-DOS上では、 フォントの関係上、円マークであることもあります。 しかし、Linux ではスラッ シュです。例えばMS-DOS で言うところの、\usr\bin\gcc は、 /usr/bin/gcc と なります。 2.2 COMMAND.COM とシェル シェルとは、MS-DOS ではCOMMAND.COM と呼ばれるものに相当します。これは、 起動時に読み込まれて、システムに常駐し、 ユーザに対して、コマンドラインを 提供したり、バッチなどの解釈/実行してくれるものです。MS-DOS でお馴染みの dir, cd, mkdir, type などのコマンドは、COMMAND.COM 自身が持っている機能の 一部で、内部コマンドと呼ばれます。 Linux では、機能に応じて、複数のシェルを選ぶことができます。シェルは、 起動時に読み込む、独自の設定ファイルを持っています。このファイルで、 環 境変数の設定や、エイリアス8などの設定を行います。 シェルは、MS-DOS と同様に内部コマンドを持ちますが、 含まれている機能は 異なります。例えば、dir コマンドとほぼ同等の役割を持つlsコマンドは、シェ ルには含まれず、外部コマンドとなっています。 2.3 バッチとシェルスクリプト MS-DOS でいうバッチは、大変便利なものです。Linux では、一般にこういった 動作手順を記述するためのテキストファイルのことを、 シェルスクリプトと言い ます。その制御構造は、バッチよりも遥かに高機能で、 ひとつの言語とも呼べる ものです。UNIX 用として発表されているツールには、インストーラとして、シェ ルスクリプトが付いてくることもあります。 スクリプトの書式などは、シェルの種類によって違います。 しかし最近のパッ ケージでは、始めから複数種のシェルを含んでいるので、 大した問題にはならな いでしょう。 _____________________________ 5 UNIX 本家のAT&T のコードを全く含まないため、ユーザは、面倒な制約[1] か ら逃れることができます。 6 頻繁に出る質問と答えをまとめた物です。 7 Linux とその環境を盛り立てたいという精神が、ボランティア活動に結び付い ていると考えれば、これはあたりまえと言えるでしょう。 8 別名機能とも呼ばれます。 3 2.4 AUTOEXEC.BAT と/etc/rc MS-DOS のAUTOEXEC.BAT は、PATH などの環境変数の設定や、プログラムの自動実 行などをするバッチです。これはLinux では、/etc の下にある rc ファイルに相当 します。 rc ファイルは、ハードディスクなどの各種装置を使えるようにしたり 9、 プログラムの自動実行などを行ないます。 パッケージによっては、ディスク管理用、ネットワーク用など、rc ファイルを用 途別に分けて、/etc/rc.d下に置いてあるものもあります10。最近のパッケージには 専用のシェルスクリプトが存在し、 ネットワーク関係の設定などは、ユーザが大幅 にrc ファイルを書き換えなくても良いように工夫されています。ユーザは、大抵の 場合、日本語環境などのカスタマイズで、rc.local ファイルを書き換える程度です。 その他/etc 下には、いろいろな設定ファイルがあるので、UNIX 関連の文献[5] で調べることをお勧めします。 2.5 CONFIG.SYS とカーネル再構築 MS-DOS では、CONFIG.SYS と呼ばれるテキストファイルに、デバイスドライバ名 を記述しておくだけで、手軽にMS-DOS を機能拡張することができます。 しかし、 Linux においては、これに相当する機能はなく、 OS に新しいデバイスドライバを 追加したい場合は、カーネル11を再構築する必要があります。一部のパッケージで は、動的にデバイスドライバを付けたり外したりできるよう、工夫した物もあるの ですが、あまり使われていないようです。 3 仕様の差異 ここでは、 MS-DOS とLinux において、盲点となるであろう仕様の差異について 説明します。 3.1 ドライブ名とパス名 ドライブ名とは、"A:"といったものです。例えば、ハードディスクのA:ドライブ のファイルを指定するには、A:\usr\bin\gccとしました。ドライブ名を省略すると \usr\bin\gcc\といった操作は、カレントドライブに影響されます。自分は、 A:ド ライブの\usr\bin\gcc を実行したつもりでも、カレントドライブがB:で、B:ドラ イブに、\usr\bin\gccがあれば、それが実行されてしまいます。また、B:ドライブ がカレントドライブの時に、"cd A:\usr\bin"を実行しても、 A:ドライブに移動す ることはありません。 つまり、ドライブごとに、複数のカレントディレクトリが存在したり、同名のパ スが存在することがありえるのです。分かっている人にはなんでもないことですが ずいぶん不便な仕様ではないでしょうか。 Linux では、すべてのファイルはルートディレクトリにつながっているため、あ るパス名は、システムにひとつしか存在しません。もちろん、Linux も MS-DOS と 同じように複数の装置が扱えますが、ドライブ名やカレントドライブという概念は ありません。カレントディレクトリは常にひとつだけです。これらを実現するため の仕掛けは、マウントと呼ばれる操作にあります。これは、後に詳しく説明します。 3.2 基本コマンド MS-DOS における主な内部コマンドと、Linux の基本コマンドとの対応関係は、 以下の通りです。 _____________________________ 9 この操作のことをマウントと呼びます。 10 これは、UNIX には、大きく分けて2 系列存在し、それぞれ管理形態が異なる ことに起因します。 11 システムの中核を成すプログラムだと思ってください。 4 ______________________________________________________ _ _ MS-DOS | Linux | 役割 _ _ ______________________________________________________ _ _ dir | ls_-l |ディレクトリの内容を詳細情報と_ _ _ _ | |共に標準出力へ _ _ ______________________________________________________ _ _ dir /w | ls |ディレクトリの内容を標準出力へ_ _ ______________________________________________________ _ _ type | cat |ファイルの内容を標準出力へ _ _ ______________________________________________________ _ _ cd | cd |指定したパスへカレントディレク_ _ _ _ | |トリを移動する _ _ ______________________________________________________ _ _ copy | cp |ファイルのコピーを行なう _ _ ______________________________________________________ _ _ ren | mv |ファイル名を変更する _ _ ______________________________________________________ _ _ attrib | chmod |ファイル属性を変更する _ _ ______________________________________________________ _ _ del | rm |ファイルの削除を行なう _ _ ______________________________________________________ _ _ md | mkdir |ディレクトリを作成する _ _ ______________________________________________________ _ _ rd | rmdir |ディレクトリを削除する _ _ ______________________________________________________ MS-DOS では、これらのサービスはCOMMAND.COM が提供していますが、Linux で は、cdコマンドを除き、/bin の下の独立したプログラムが担っています。また、 機能的には大幅に異なっています。例えば、ls コマンドはファイル属性などの詳 細情報も参照できますし、mv コマンドは単なるリネームではなく、 ファイル/ ディレクトリの移動も可能です。rm コマンドは、ファイルだけでなく、ディレク トリの削除なども行なえます。 この中で、特に注意しなければならないのは、rm コマンドです。MS-DOS のdel コマンドは、"DEL*.*"とやると、いったん確認を求めてきます。しかし、大概に おいてLinux のrm コマンドは確認を求めずに削除してしまいます。また、MS-DOS では、消したファイルでも、undelete コマンド12によって、 運が良ければ復活 することができますが、Linux では絶望だと思ってください。 大抵、シェルには エイリアスと呼ばれる機能があるので、これを用いてrmコマンドに確認を求める オプションを付加したものを、コマンドとして登録して、rm コマンドを用いる際 は、必ず確認させると言う自衛手段を取る必要があります。具体的には、 シェル の初期化ファイルに、 alias rm rm -i という記述を追加します。 エイリアスとは、このようにコマンドラインに入力さ れた文字列を解釈し、指定した別の文字列に変換する機能です。 上記のような指 定をしておくと、例えば、"rm abc.txt"と入力しても、"rm -i abc.txt"が実行さ れていることになります。 3.3 ファイル名 MS-DOS ではファイル名に大文字も小文字もありませんが、Linux ではこれらを きちんと区別します。例えば、"Makefile"と、"makefile"は 別個のファイル名と して扱われます。また、日本語MS-DOS では可能だった、漢字やかなを用いたファ イル名は、Linux では存在しません。 3.4 ワイルドカード MS-DOS のCOMMAND.COM は、ワイルドカードと呼ばれる冗長性を持たせたファイ ル名指定が可能でした。そのひとつである"*"は、"abc", "makefile" などにマッ チングしても、"abc.txt"にはマッチングしません。 しかし、Linux のワイルド カード"*"は、ピリオドを含めたすべてのファイル名にマッチングします。rm コ マンドと組み合わせて使用する場合には、注意が必要です。 _____________________________ 12 MS-DOS5.0 からは標準装備されています。 5 4 特有の用語 シングルユーザ・シングルタスクのOS であるMS-DOS の概念では説明しきれな い、Linux 特有の用語と概念13について説明します。 4.1 ログインとログアウト マルチユーザOS である Linux では、ユーザの管理をしっかり行なう必要があ ります。まず、システムに入るためには、ログイン名とパスワードを入力しなく てはなりません。このログイン名とパスワードは、/etc/passwd ファイル内に記 述されているユーザ情報によって照会されます。この一連の操作をログインと呼 びます。ログイン名は、8 文字までの英小字を用いて設定します。また、一旦ロ グインしてしまえば、パスワードは、 passwd コマンドで変更することが可能で す。パスワードは、英字や一部の記号を用います。パスワードは暗号化されて、 システムに記録されます。 ひと通り仕事を終えたら、exit コマンドでシステムから抜けます。 このこと をログアウトと呼びます。 4.2 ユーザレベル シングルユーザのOS であるMS-DOS では、誰が触っても、マシンに対してあら ゆる操作が許されていました。しかしこれでは、誤って重要なファイルが消され たり、巨大なファイルでディスクスペースが浪費されたとしても、誰の仕業なの かわかりません。悪意がなくとも、不心得者が一人いるだけで、他全員に、甚大 な被害を及ぼすこともありえます。 Linux ではマルチユーザのシステムであり、ユーザを大きく3 つの立場に分け て、ファイルに対するアクセスに制限をもうけることによって、安全性を高めて います。これらの情報は、ファイル属性として、ファイルひとつひとつに存在し ます。 [オーナー] これは、ファイルを作成したユーザを指します。ファイルのオーナーが誰であ るかという情報は、ユーザID として、ファイル属性に自動的に記録されます。 つまり、属性を参照することによって、そのファイルの作成者を知ることができ ます。また、オーナーが、chown コマンドをしようすることで、ファイル属性に 書き込まれたユーザID を別のユーザに権限を移管することもできます。 [グループ] グループとは、ファイルアクセスの権限の集合のことです。これは/etc/group ファイル内に記述されています。各グループは、それぞれ固有の グループID を 与えられています。ファイルは、それぞれ グループID を属性として持ち、その グループに属しているユーザがアクセスすることを許します。また、オーナーが chgrp コマンドをしようすることで、ファイル属性に書き込まれたグループIDを 変更して、別のグループに権限を移管することもできます。 [他者] ファイル属性において、オーナーでもなく、グループにも属していない立場の 人達は、他者と呼ばれます。 4.3 スーパーユーザ Linux には、ユーザレベルという立場を越えた存在として、スーパーユーザ14 と呼ばれる人が存在します。ユーザの登録/削除や、 ログイン名やパスワードな どの重要な情報が記述されている/etc 下のファイルの参照/編集など、本当に重 要な部分については、この人しかできないようにしておきます。こうしておけば スーパーユーザ自身のパスワードが洩れない限り、システムの安全性は保たれる わけです。 _____________________________ 13 Linux 特有というより、UNIX の世界では、一般的で、基礎的な事項です。 14 一般に、ルート, システム管理者などとも呼ばれます。 6 また、スーパーユーザが、ファイル属性をしっかり管理しておくことで、シス テムに重要なファイルを、勝手に消されてしまったりといった危険性を回避する ことができます。 スーパーユーザ以外のユーザを、一般ユーザ15と呼びます。パーソナルユース でも、 スーパーユーザと一般ユーザを使い分けることには、 メリットがありま す。スーパーユーザは、あらゆるファイルやファイル属性を自由に変更可能であ るがゆえに、普段からスーパーユーザでログインしていると、操作ミスでシステ ムを破壊してしまうことも考えられます。そのため、普段は、一般ユーザとして ログインしておいて、本当に必要な場合のみ、 su コマンドでスーパーユーザに 移行するという形態が一般的です。 ユーザの情報は/etc/passwd ファイルに記述されています。各ユーザが、どの ように管理されているかを説明するため、その書式に簡単に触れます。 passwd ファイルは、以下のような行の繰り返して構成されています。 user1:*:203:6:user:/home/user1:/bin/sh これは、左から順に、 ログイン名、 暗号化されたパスワード、ユーザID、グ ループID、ユーザ名、 ホームへのパス、 ログイン時に起動されるシェルへのパ ス、を示しています。":"は区切り文字です。 これらの設定は、スーパーユーザのみ行なうことができます。例えば、新たに ユーザを受け入れる場合は、まずスーパーユーザが、useradd コマンドを用いて /etc/passwd に一行記述を追加し、ユーザのログイン名と仮のパスワードを設定 します。その後、ユーザがログインして、好みのパスワードに変更するという作 業が一般的です。特に、ネットワークを使用する環境においては、事故を防止す るため、これらの管理は厳重に行なわれる必要があります。 4.4 ホーム 多人数で使用することを前提とした場合、ユーザ毎に作業スペースが必要とな ります。Linux では、ホームと呼ばれる起点となるディレクトリを定め、ログイ ンするとまずそこへ飛ぶ仕組みになっています。ホームは、usermod コマンドで 変更でき、/etc/passwd ファイルに書き込まれます。他のどのディレクトリにい たとしても、"cd"と入力することで、自分のホームへ戻ってくることができます。 また、シェルを始めとする一部のプログラムは、ホームに設定ファイルを必要 とします。これらの設定ファイルは、大抵、ピリオドで始まるファイル名を持っ ています。これらは、普段隠されており、ls コマンドに、 "-a"オプションを付 けることで存在を確認することができます。 4.5 シンボリック・リンク さて、作業空間が、ホームとして固定されてしまうと、どのような問題が起き るでしょうか。こんな例を考えてみましょう。 /usr/home/akaike いうホームを持ったakaike さんが、最近頻繁に作業を行 うようになった場所が、/usr/spool/kenkyuusitu/ringi/kaikei だとします。こ れでは、交互に移動するのもけっこう大変です。それでは、akaikeの下にkaikei というディレクトリを作成し、その中に/usr/spool/kenkyuusitu/ringi/kaikei 下の全ファイルをコピーすれば、"cd kaikei", "cd .."だけで交互に移動できま すね。でも、それらのファイルは、研究室の会計に関するもので、他の人も見た り書き加えたりできるものだったとしたら、これは問題です。皆で、自分のホー ムにコピーし、編集した後、書き戻そうとしたら、どうなるでしょうか。 _____________________________ 15 単にユーザ、あるいは一般利用者とも呼ばれます。 7 この問題を少しだけ緩和する機能が、シンボリック・リンクです。上記の例で は、ホームにカレントディレクトリがある時、以下のコマンドを実行します。 ln -s /usr/spool/kenkyuusitu/ringi/kaikei . こうすることで、あたかもホームの下に kaikei というディレクトリがコピー されたように見えます。これは、他の人も同じ操作をすることで、同じことがで きます。ただのコピーと違うのは、ホームに出来たディレクトリ kaikei は、 /usr/spool/kenkyuusitu/ringi/kaikei と実体を共有しているということです。 それでは、"cd kaikei"で移動して見ましょう。中には、/usr/spool/kenkyuus itu/ringi/kaikei のファイルが並んでいるはずです。ここで"cd .."を実行する と、どこへ移動するのでしょうか。残念ながら、/usr/home/akaikeではなく、 /usr/spool/kenkyuusitu/ringi へ移動します。"cd"と実行することで、ホーム へ直に移動できますので、シンボリック・リンクと併用することで、離れたディ レクトリの参照が楽になると思います。 4.6 パーミッション MS-DOS のファイル属性では、せいぜいファイルのリードオンリーを設定したり 隠したりといったことしかできませんでしたが、 Linux では、ユーザレベルに応 じた細かい管理が可能です。このファイル属性はパーミッションとも呼ばれます。 裏を返せば、Linux はパーミッションを細かく管理しなければ、 いろいろ困っ た事が起きる可能性もあるわけです。 ディレクトリの内容が見れなかったり、プ ログラムの存在するディレクトリを、 正しく指定しているのに実行できなかった りするのは、大抵このためです。パーミッションは、ユーザレベルに応じて、 以 下のような、3つのフラグ16を持っています。 [読み込み可能フラグ](r) このフラグが立っているファイルは、読むことが可能となります。また、ディレ クトリの場合は、ディレクトリ内を参照することが可能となります。 [書き込み可能フラグ](w) このフラグが立っているファイルは、 その内容を更新することが可能となりま す。しかし、ファイルを消せるという意味ではありません。また、 ディレクトリ の場合は、そのディレクトリ内に新たにファイルを登録したり、 既にあるファイ ルを消したりすることが可能となります。 [実行可能フラグ](x) このフラグが立っているファイルは、実行することが可能となります。 テキス トファイルの場合は、スクリプトと判断され、 シェルがこれを解釈して実行しま す。また、 ディレクトリの場合は、そのディレクトリにカレントディレクトリが 移動することを許します。 これら、パーミッションの状態を参照するためには、ls コマンドを用います。 "-l"オプションを付けることによって、以下のような情報を得ることができます。 -rw-r----- 1 akaike akaike 4597 Nov 16 01:38 test.tex drwxr-xr-x 3 root users 4096 Feb 17 03:27 mute/ lrwxrwxrwx 1 root users 18 Jan 10 23:13 src -> /usr2/IV3.1/iv/ この左端にある10 バイトが、パーミッションの状態を表しています。一番左端 の1 バイトは、それがファイル(-) であるか、ディレクトリ(d) であるか、 シン ボリック・リンク(l) であるか、を表しています。 _____________________________ 16 旗が、立っているか、立っていないかというような、2 値情報を意味します。 8 その次から、3 バイトが1 組となって、オーナー, グループ, 他者のパーミッ ションを表しています。例えば、 "test.tex" の場合は、「ファイルであり」「 オーナーは読み書きが可能」、「グループからは読むことができ」、「他者から は、そういうファイルがあることだけはわかるが、読むことも変更することもで きない」、ということを意味します。これらの、パーミッションを制御するには chmod コマンドを用います。 また、上記の例において、左から3 番目の、"akaike", "root", "root"といっ た名前は、オーナー名(ユーザID) を表しています。4 番目の"akaike", "users" "users"といった名前は、グループ名(グループID) を表しています。以降、ファ イルサイズ、更新日時、ファイル名と続きます。 4.7 プロセスとジョブ MS-DOS では、基本的に同時に2 つ以上のプログラムが、 動いていることはあ りえません。子プロセスは存在しますが、子が起動している時は、親は必ず停止 しています。しかし、Linux はマルチタスクOS ですから、 複数のプログラムを バックグランド17で動かしたり、好きな時にフォアグランド18に切替えたりする ことができます。Linux は、それらを管理する仕組みを持っています。 システムから見た、動作しているプログラムの実行単位を、プロセスと呼びま す。 各プロセスは、システムによってプロセスID を割り当てられ、統一的に管 理されます。 プロセスは、ps コマンドを使用することによって、知ることがで きます。また、kill コマンドにプロセスID を指定することによって、動作中の プロセスを強制的に終了させることもできます。 プロセスはシステムから見た管理方法ですが、シェルによっては、よりユーザ の視点に近い実行単位として、ジョブと呼ばれる管理方法を提供しているものが あります。各ジョブには、ジョブ番号が割り当てられ、統一的に管理されます。 現在、どんなジョブがあるかは、 jobs コマンドを使用することによって、知 ることができます。ジョブには、動作中であるか、一時停止しているかなどの状 態を持っていて、これらはfg, bg コマンドにジョブ番号を与えることによって、 制御することができます。jobs, fg, bg などは、シェルの内部コマンドです。 プログラムをバックグランドで動かすには、コマンドの最後に " &"をつけて、 実行することで行ないます。 また、普通に起動したプログラムでも、 動作中に CTRL-Z を入力することで、一時停止させることができます。 ここでは、例として、ソースリストの修正とコンパイルを同時に行なうことを 考えます。現在jobs で得られた結果が以下のようになっていたとします。 [1] + Suspended emacs -nw test.c [2] - Suspended gcc test.c ここで、コマンドラインから、"bg %2" を実行すれば、バックグランドでコン パイラであるgcc が実行されていきます。その時のjobs の結果を示します。 [1] + Suspended emacs -nw test.c [2] Running gcc test.c _____________________________ 17 裏で勝手に動いている状態を指します。 18 ユーザが対話的に操作している状態を指します。 9 さらに、"fg %1"とすると、起動しておいたテキストエディタである emacs が フォアグラウンドになり、ユーザが操作できる状態になります。当然、test.cを 編集しながらでも、gcc は裏で動いています。しかし、ここでtest.c に重大な ミスが見つかったので、gcc を止めることにしました。emacs から、CTRL-Zを入 力してemacs を一時停止させ、コマンドラインに戻った後、"kill %1"とすれば、 [2] Terminated gcc test.c と表示されて、実行されていたgcc が、強制終了します。後は、おもむろに"gcc test.c &"と実行すれば、新たにgcc がバックグランドで動き始めます。 4.8 ファイルシステム Linux では、複数の種類のファイルシステムを持っており、ユーザは必要に応 じて、作成し使用することができます。 [MINIX 互換ファイルシステム] これは、MINIX と呼ばれる 教育向けOS と同じファイルシステムを採用してい ます。ファイル名は、最大14 バイト付けることができます。区画サイズは64MB 未満です。mkfs コマンドで作成され、 fsck コマンドで検査/修復を行なうこと ができます。現在では不便なので、ほとんど使われていません。 [MS-DOS 互換ファイルシステム] MS-DOS でフォーマットされた区画を、そのまま読むことができます。ファイ ル名の制限は、MS-DOS をそのまま引き継いでいます。この区画の作成はMS-DOS 上で行ないます。 [拡張ファイルシステム] ファイル名を255 バイト付けることができ、区画のサイズも4TBまで取ること が可能なファイルシステムです。ext2 fsとも呼ばれます。 mke2fs コマンドで 作成され、e2fsck コマンドで検査/修復を行なうことができます19。 4.9 特殊ファイル システム内には、入出力装置を管理する 専用のデバイスドライバ群が用意さ れています。これらデバイスドライバそれぞれに、 特殊ファイルがインタフェ ースとして与えられています。この特殊ファイルを用いることによって、 あた かも普通のファイルに読み書きするように、 入出力装置にアクセスすることが 可能となります。この場合の入出力装置は、 フロッピーディスクドライブや、 ハードディスク、IC-CARDドライブ、 CD-ROM ドライブなどの外部記憶装置のみ ならず、プリンタ、コンソール、RS232C、果てはメモリさえ該当します。 分か りにくい説明ですが、「ユーザに見える形で、装置が管理されている」と 思っ てください20。 これらの特殊ファイルは、Linux では /dev 下に格納されています。例えば、 "/dev/fd0","/dev/lp0"などです。ハードディスクなどの基本的な装置に対応す る特殊ファイルは、インストール時に自動作成されます。 後から、カーネルに デバイスドライバを追加した場合などは、ユーザがmknodコマンドを用いて、特 殊ファイルを作成することもあります。 _____________________________ 19 古い版では、mkefs,efsck という名前であることがあります。 20 MS-DOS をよく知っている人ならば、con, aux などを思い浮かべたことと 思います。 10 4.10 マウント フロッピーディスクドライブや、ハードディスクドライブなどの記憶装置は、 特殊ファイルに割り当てられています。それでは、これらを扱うには、どうした ら良いのでしょうか。それには、マウントと呼ばれる操作を、行う必要がありま す。ここでは、フロッピーディスクを例にとって説明します。 MS-DOS では、フロッピーを差した時点では何も行いません。 とりあえず読み にいって、駄目だったら、MS-DOS が"ドライブの準備ができていません."という お馴染みのエラーを吐き出します。考えてみると、非常にアバウトな構造です。 Linux では、きちんとその装置が使用可能どうか、始めにチェックしなくては、 アクセスが許されない構造になっています。そのための操作を、マウントと呼び ます。マウントには、mount コマンドを使用します。 MS-DOS では、起動時に装置を検索して、自動的にドライブ名を割り振ります。 しかし、Linux では、ドライブ名という概念がありません。mount コマンドは、 指定した特殊ファイルの指す記憶装置のルートディレクトリを、特定のディレク トリ名に置き換え、そこからアクセスできるようにします。動作としてはMS-DOS のjoin コマンドに似ています。非常に乱暴な表現ですが、特殊ファイル自身が ドライブ名のようなもので、それを適時ディレクトリに結びつけてしようすると いうことになります。 例えば、A:ドライブにある MS-DOS フォーマットのフロッピーにアクセスする ために、/mnt を割り当てるとすると、 mount -t msdos /dev/fd0 /mnt と、なります。この場合のディレクトリの対応関係は以下のようになります。 __________________________________ _ _ MS-DOS | Linux _ _ __________________________________ _ _ A: | /mnt _ _ __________________________________ _ _ A:\doc | /mnt/doc _ _ __________________________________ 割り当てられた/mnt 下に元々あったファイルは、 アクセスできなくなります ので、通常は空のディレクトリを割り当てます。 マウントの反対の操作を、アンマウントと呼びます。フロッピーを交換したい ときなどは、一度、umountコマンドを実行して、システムからそのフロッピーを システムから切り離し、フロッピーを入れ換えた後、再度マウントを行う必要が あります。一応安全対策も施されていますが、むやみにフロッピーを差し替えた りしていると、しばしば前に挿入していたフロッピーディスクの内容が変更され なかったり、後から挿入したフロッピーディスクの内容が破壊されてしまいます。 4.11 共有ライブラリ もし、複数の実行ファイルから、共通に使用できる部分だけを抜き出してまと めて置いておいたら、ディスクスペースが節約できるとは思いませんか。この機 能を実現するのが、共有ライブラリ21というものです。この共有ライブラリを用 いて、コンパイルされた実行ファイルは、起動する際に共有ライブラリを自力で 読み込んで、共有ライブラリに入っている機能を使用しながら動作します。従っ て、ディスクの定められた場所に、共有ライブラリがなければ、そのプログラム は自分に必要な機能を使用できないため、動くことができません。通常は/lib下 に共有ライブラリを入れておきます。 共有ライブラリを使用しない実行ファイルには、予め実行するために必要なす べての機能を含んでいます。共有ライブラリを使用したものより、サイズは大き くなりますが、共有ライブラリの存在を気にすることなく、実行することが可能 です。 つまり、どちらの方式にも一長一短があるということです。 _____________________________ 21 シェアードライブラリとも呼びます。 11 5 運用上のノウハウ Linux を運用していく上で、注意すべきこと、頭に留めておいてほしいことに ついて、簡単に説明します。 5.1 あるはずのファイルがない時 Linux では、突然電源を切ったり、リセットをかけてはいけません。なぜなら、 すでにディスクに書き込んだようにみえているファイルでも、実はまだメモリ上 に存在していて、ちゃんと書き込まれていないことがあるからです22。これをき ちんとディスクに反映するsync というコマンドがあります。また、Linuxを終了 する場合は、正規のシャットダウン手順を守りましょう。 なぜ、こんな仕組みになっているのか、 普通にMS-DOS を使っていた人には分 かり難いかもしれませんが、単に性能を上げるためだと思ってください。 5.2 突然すべて動かなくなった時 あらゆる基本コマンドが突然動かなくなってしまった場合には、共有ライブラ リの問題を思い浮かべた方が良いでしょう。Linux では、システムに関するプロ グラムも共有ライブラリを使用しています。つまり、共有ライブラリがなくなっ た瞬間から、もう正常に動かなくなってしまうのです。通常、共有ライブラリは /lib にシンボリック・リンクを張ることで、参照されています。 極端な例です が、"mv /lib /lib2"などとやってしまった場合は、今まで張ってあった シンボ リックリンクが切れてしまいます。これは、新たに張り直さない限り、リセット かけても元の状態には戻らず、新たにログインすらできなくなってしまいます。 こういった状態になった場合は、起動フロッピーを用いて、壊れた区画をマウン トした後、リンクを修復する必要があります。 5.3 もらったバイナリが動かない時 バイナリで配付するという形態は、MS-DOS では一般的であり、 とても便利で すが、Linux ではそうとも言い切れない面もあります。共有ライブラリの問題が あるからです。Linux では、このライブラリのバージョンが一致していないと、 そのプログラムは実行できません。これを防ぐには、共有ライブラリを用いずに プログラムをコンパイルする方法がありますが、共有ライブラリ使用のものと比 べると、非常にサイズが大きくなります。これを、ネットワークなどでやりとり するのは、現実的ではありません。従って、頻繁にバージョンアップが行われて いるソフトウェアについては、ソースを手に入れて、自前でコンパイルした方が 良いでしょう。 5.4 万が一、落ちた時 Linux は商用のOS と比べても遜色ないほど頑丈であり、安定しています。し かし、極々稀にシステムのバグなどで、 完全にハングアップしてしますことが あります。そういった時は、どうしたら良いのでしょうか。普通は、 5 分程度 待って、ディスクにアクセスしたのを確認してから、リセットをします。 今ま で、扱っていたファイルの安全が保証されるとは言い切れませんが、 かなりの 確率で助かるはずです。この機構は、Linux では起動時にupdate というコマン ドを常駐させることで実現しています。これは、一定時間毎に、sync を自動実 行します。 _____________________________ 22 一般にキャッシュと呼ばれている機能です。MS-DOSではsmartdrvというコマ ンドがこの役割を果たします。 12 5.5 圧縮ファイルの種別がわからない時 圧縮ファイルと言うと、MS-DOS ではLHa やPKZIP が一般的ではないでしょう か。Linux では、UNIX-LHa 及び、GNU zipとして存在します。これらは、 高圧 縮率を誇り、MS-DOS との親和性も高いため、最近使われ始めていますが、 UNIX の世界でより一般的なのは、tar + compressという形式です。元来アー カイバという呼称は、 ファイルをまとめて書庫として管理するところから来て おり、圧縮という意味とは別ものです。このまとめて書庫にする部分をtar が、 圧縮/展開を、compress/uncompress が司っています。 tar + compress 形式の 一般的な拡張子は、".tar.Z"です。"zcat abc.tar.Z |tar xvf -" とすること で展開することができます。最近ではGNU tar が圧縮ファイルに対応している ため、"tar xvzf abc.tar.Z"でも展開することが可能です。 5.6 テキストが正しく表示されない時 MS-DOS から持ってきた文章が、破壊されているように見えても、そう落胆す ることはありません。おそらくそれは、 実際に文章が破壊されているのではな く、文字コードの問題でしょう。 MS-DOS 上では、 Shift-JIS と呼ばれる漢字 コードが一般的です。しかし、Linux を始めとするUNIX の世界では、JISもし くはEUC(ExtendedUNIX Code) と呼ばれる漢字コードが一般的であるため、この ような現象が起きます。つまり表示できないだけなので、nkf などのユーティ リティを用いて、漢字コードを変換すれば良いのです。 また、システムのコンソールは漢字表示可能になっている必要があります23。 これらの設定が合っているのに、特定の行が化けたような症状になる場合は、 その行に半角カナが存在していることが考えられます。Linux では半角カナは 扱えませんので、注意が必要です。また、それを使わないのが、暗黙のルール となっています。 5.7 ログインできなくなった時 まず、ユーザの設定が間違っていることが多いのです。これは/etc/passwd ファイルを、エディタなどで直接書き換えていると起こりやすいのです。ユー ザ管理用として、useradd, usermod コマンド等がありますから、 できるだけ これを使って設定を変更しましょう。やむを得ず、直接書き換える場合には、 シェル、ホームディレクトリの設定などに注意をしましょう。 6 Linux で何をするのか ここでは、補足として、より実践的ないくつかの問題について触れます。 6.1 UNIX の勉強をしたい これはそのものズバリ、うってつけの用途だと思います。学校や会社でワー クステーションを使っている人でも、システム管理者である人は少ないと思い ます。標準的なパッケージをインストールするだけで、豊富なコマンド群が揃 い、いろいろなことを試すことができます。最悪システムを壊してしまっても 再インストールすれば良いのですから楽なものです。 システム管理の勉強をしたい人にの中は、「Linux はSystemV ですかBSD で すか?」という質問をする人がいます。実は、その答えは「どちらでもない」 のです。それは、どちらにも似ていないという意味ではなく、Linux は両方の 良いところを好きなように採り入れて育ってきたOS だからです。 _____________________________ 23 TOWNS Linux のコンソールは、キーボードから漢字コードの切替えが可能 です。また、IBM-PC Linux では、 KON と呼ばれるソフトウェアをシステ ムに組み込むことで、漢字表示が可能となります。 13 システム管理面では、ほとんどBSD そのものになっています。しかしディレ クトリ構成などはインストールするパッケージの種別によって、BSD 風になっ たり、SystemV 風になったりします。プログラムを組む人は同意されると思い ますが、割り込み時のシステムコールの振舞はSystemV 風です。中途半端と感 じるかもしれませんが、だからこそ、Linux で勉強することは、決して無駄に はならないと思います。 6.2 文章を書きたい MS-DOS で有名なVz, MIFES などのテキストエディタは、 Linux には存在し ません。Linux を普通にインストールすると、/usr/bin 下にvi と呼ばれるテ キストエディタがインストールされます。emacs, Nemacs,mule, joe などの、 別のテキストエディタを入手してインストールしない限り、テキストの編集は これを用いて行なう必要があります。 今のところ、ワード・プロセッサに相当するソフトウェアはありませんが、 文章処理システムであるTeXを使用することもできます。 その出力を元に、 dviout, GhostScript などを用いることで、文章を美しく表示/印刷すること ができるでしょう。TeX はMS-DOS でも動きますが、周辺のユーティリティ群 との連係を考えると、Linux 上で動かすメリットがあります。また、Linuxは ディスクアクセスが速いためか、全体的にMS-DOS 版よりも速く感じます。 X-Window System 関連のパッケージをインストールしていれば、 TGif+, idraw などのドローイングツールを使用することもできます。 TeX で書かれ た文章に、ちょっとした図を差し込むことも可能です。 6.3 プログラムを書いてみたい プログラミングをこれから始めよう、という人の中には、MS-DOS が一番プ ログラミングが簡単だと思い込んでいる人もいるかもしれません。MS-DOS は 単純な構造のOS ですが、プログラミングまで単純という訳ではありません。 MS-DOS 上のコンパイラで開発を行なう人は、ほとんど例外なくハングアップ という現象に見舞われたことがあるはずです。大抵こうなると、ユーザは、 リセットをする他はなく、やむなく再起動する画面を眺める羽目になります。 しかし、Linux は強力なメモリ保護を提供しており、 ユーザがおかしなプロ グラムを作って実行させても、 システム全体がダウンしてしまうようなこと は、まずありえないのです。 また、MS-DOS が提供可能なメモリは少なく、大規模なプログラムを動かす ためには、プログラマに知識と技術力が要求されます。しかし、 Linux は広 大なメモリ空間と、仮想記憶24も提供しています。ユーザは、開発中、 自分 のプログラムがどのくらいメモリを消費するのか、意識しなくても、 とりあ えず動作するものが作れます。また、MS-DOS のコンパイラに存在する、メモ リモデルといった、面倒な制約もありません。 このように、様々な制限が緩い分だけ、MS-DOS よりLinux の方が初心者向 けと言える面も多いのです。 その環境も充実しています。Linux は、標準の開発環境として、 gcc を用 います。gcc をインストールすれば、 各種ユーティリティをインストールし たり、Linux カーネルの再構築も可能となります。デバッカとしては ソース レベルのデバッグが可能な、gdb が使用できます。X-Window System 上でも、 Tck/Tkや、InterViewsなどの 多種多様なツールキットを使用することができ ます。 言語はC/C++以外に、Basic, Lisp, SmallTalk といったものが使用できま すし、FORTRAN, Pascal などは、f2c 及びp2c というユーティリティで、Cの プログラムに変換することができます。 そして特筆すべきは、Linux のパッ ケージには、これら豊富なユーティリティ群が既に含まれており、 簡単にイ ンストールできるということです。 _____________________________ 24 実際に積んでいるメモリよりも大きいプログラムを、動作させるための 仕掛けのことです。 14 6.4 ゲームをしたい この分野は、UNIX 環境よりもMS-DOS の方がパワフルで幅も広いと思いま す。仕事や勉強の合間にできる、テトリスなどのパズル系のゲームは割と豊 富ですが、アクションやシューティングとなると数は少ないですし、MS-DOS でも同様のゲームがあるので、このためにLinux をインストールする必然性 はないでしょう。しかしNetHack を始めとしたロールプレイングゲームは、 Linux でやる価値があります。マルチタスクの特色を生かして、メモをとっ たり、電子辞書を索きながら、難解で巨大なゲームを、攻略することができ るからです。 6.5 仕事に使いたい  果たして、MS-DOSでTCP/IPのネットワークに接続し、端末操作やファイル 転送などを行うのに、いくらかかるでしょうか。それはネットワークに接続 するマシンの台数分だけ、ライセンスを受けねばなりません。UNIX環境下で 見ても、IBM-PC + Linuxの方が、下手なワークステーションより性能が良い ことも、しばしばです。コスト的にみて、Linux には大きなメリットがあり ます。  しかし、ひとつ忘れてはいけないことは、Linuxは無保証であるということ です。インストールしたマシンで安定して動くかどうか、などは誰も保証し てくれないのです。つまり、安くあがった分のコストは、「ユーザの労力」 に変化したと考えるのが、妥当でしょう。これを軽減するために、 Linuxの コミュニティが、いかに重要であるか、理解されると思います。 相互扶助 の精神なしでは、やっていけないのです。 おわりに Linux の背景となっている UNIX は、広大で一種マニアックな空気がとり まく世界[7] です。本稿で説明されていることは非常に少なく、Linux を管 理していく上では不十分です。自分にあった文献を選び、一度通読すること をお勧めします。 しかし、Linux の管理方法を習得することは単なる入口に過ぎません。こ れをひとつのステップとして、Linux の背景に広がる UNIX の世界を存分に 楽しまれることを希望します。 参考文献 [1]Think GNU, ビレッジ・センター [2]UNIX 基本操作から実践活用まで, 啓学出版 [3]たのしいUNIX, アスキ−出版局 [4]Unix プログラミング環境, アスキー出版局 [5]UNIX システム管理入門, SOFT BANK [6]UNIX SYSTEM V ユーザ・リファレンス・マニュアル, 共立出版 [7]Life with UNIX, アスキ−出版局 15