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