<!-- The FreeBSD Documentation Project The FreeBSD Japanese Documentation Project Original revision: 1.33 $FreeBSD: doc/ja_JP.eucJP/books/handbook/basics/chapter.sgml,v 1.17 2001/07/24 16:54:06 hrs Exp $ --> <chapter id="basics"> <chapterinfo> <authorgroup> <author> <firstname>Chris</firstname> <surname>Shumway</surname> <contrib>改訂</contrib> </author> </authorgroup> <!-- 10 Mar 2000 --> </chapterinfo> <title>Unix の基礎知識</title> <para><emphasis>訳: &a.jp.nakai;, 1996 年 10 月 12 日.</emphasis></para> <sect1> <title>この章では</title> <indexterm><primary>基礎知識(basics)</primary></indexterm> <para><emphasis>改訂: Chris Shumway <email>cshumway@osd.bsdi.com</email>, 2000 年 3 月 10 日.</emphasis></para> <para>この章では FreeBSD オペレーティングシステムの基本的なコマンドと機能について記述しています. あなたが FreeBSD の初心者なら, 何か質問する前にこの章を読んでおいた方がきっといいはずです.</para> </sect1> <sect1 id="permissions"> <title>許可属性</title> <indexterm><primary>Unix</primary></indexterm> <para>FreeBSD は BSD Unix を起源とする歴史を持ち, いくつかの鍵となる Unix 思想にもとづいた基本設計がされています. まず最も際だった特徴として最初に言えるのは, FreeBSD がマルチユーザのオペレーティングシステムだということです. FreeBSD は同時に働いている複数のユーザすべてを, 完全に分離したタスク上で処理する能力を持っています. また FreeBSD は, ハードウェアデバイス, 周辺装置, メモリ, CPU 時間等への要求を, 各ユーザが平等に利用できるように適切に共有し, 管理する役割を担っています.</para> <para>システムがマルチユーザをサポートしているため, システムが管理する資源はすべて, 誰がその資源を読み・書き・実行できるかを支配する, 一組の許可属性を持っています. これらの許可属性は 3 つの部分からなる 2 桁の 8 進数の形で格納されています. それはそのファイルの所有者(owner)に対するもの, そのファイルが所属するグループ(group)に対するもの, その他(others)に対するものの 3 つです. これを数字を使って表現すると, 次のようになります.</para> <indexterm><primary>許可属性(permissions)</primary></indexterm> <indexterm> <primary>ファイルの許可属性(permissions)</primary> </indexterm> <informaltable frame="none"> <tgroup cols="3"> <thead> <row> <entry>値</entry> <entry>許可属性</entry> <entry>ディレクトリの表示</entry> </row> </thead> <tbody> <row> <entry>0</entry> <entry>読み込み不可, 書き込み不可, 実行不可</entry> <entry><literal>---</literal></entry> </row> <row> <entry>1</entry> <entry>読み込み不可, 書き込み不可, 実行可能</entry> <entry><literal>--x</literal></entry> </row> <row> <entry>2</entry> <entry>読み込み不可, 書き込み可能, 実行不可</entry> <entry><literal>-w-</literal></entry> </row> <row> <entry>3</entry> <entry>読み込み不可, 書き込み可能, 実行可能</entry> <entry><literal>-wx</literal></entry> </row> <row> <entry>4</entry> <entry>読み込み可能, 書き込み不可, 実行不可</entry> <entry><literal>r--</literal></entry> </row> <row> <entry>5</entry> <entry>読み込み可能, 書き込み不可, 実行可能</entry> <entry><literal>r-x</literal></entry> </row> <row> <entry>6</entry> <entry>読み込み可能, 書き込み可能, 実行不可</entry> <entry><literal>rw-</literal></entry> </row> <row> <entry>7</entry> <entry>読み込み可能, 書き込み可能, 実行可能</entry> <entry><literal>rwx</literal></entry> </row> </tbody> </tgroup> </informaltable> <indexterm> <primary><command>ls</command></primary> </indexterm> <indexterm><primary>ディレクトリ</primary></indexterm> <para><command>ls -l</command> で表示される詳細なディレクトリリストでは, ファイルの所有者, グループ, その他への許可属性を示す欄があるのがわかります. 次に示すのは, その部分だけ抜き出したものです.</para> <screen>-rw-r--r--</screen> <para>左から右へ見たときに最初にあたる文字は, それが 普通のファイルなのか, ディレクトリなのか, キャラクタ型のデバイス特殊ファイルなのか, ブロック型のデバイス特殊ファイルなのか, ソケットなのか, その他の特殊な疑似ファイルデバイスなのかといった種類を示す特別な文字です. その次の <literal>rw-</literal> と書かれた 3 文字は, そのファイルの所有者に許可を与えるものです. その次の <literal>r--</literal> の 3 文字は, そのファイルが所属しているグループに許可を与えます. 最後の <literal>r--</literal> の 3 文字は, システムに存在するその他のユーザに許可を与えます. <quote>-</quote> は許可が与えられていないことを示します. このファイルの例では, ファイルの所有者はこのファイルを読み書きでき, ファイルの所属しているグループに属するユーザはファイルを読むことだけでき, そのどちらでもないユーザは, このファイルを読むだけできるように許可属性が与えられています. 上の表によれば, このファイルに与えられた許可属性は <literal>644</literal> となります. ここで各数字は, このファイルの許可属性の 3 つの部分を表しています.</para> <para>ファイルについてはここまでの説明で十分です. しかし, デバイスの場合の許可属性はどのようにコントロールされているのでしょうか? FreeBSD は, 大部分のハードウェアをファイルとして取り扱います. そのため, プログラムからは普通のファイルとまったく同じようにオープンし, データの読み書きができるようになっています. これらのデバイス特殊ファイルは <filename>/dev</filename> ディレクトリに収められています.</para> <para>ディレクトリもまた, ファイルと同様に扱われます. それは読み込み/書き込み/実行の許可属性を持ちます. ディレクトリの実行ビットはファイルのそれとは少し違った意味を持ちます. ディレクトリが実行可能になっているとき, それはその中が探索できること, たとえば, そのディレクトリ中のファイルリストが参照できることを意味します. </para> <para>この他にも許可属性はありますが, いずれも setuid バイナリや sticky ディレクトリなどといった特殊な状況で使われます. ファイルの許可属性そのものについて, また, それらの設定のしかたに関する詳しい情報は, &man.chmod.1; マニュアルページを参照してください.</para> </sect1> <sect1 id="dirstructure"> <title>ディレクトリ構造</title> <indexterm><primary>ディレクトリの階層構造</primary></indexterm> <para>FreeBSD の用いているファイルシステムは多くの基本的なシステム動作を決定するもので, その階層構造は極めて重要です. ディレクトリ構造に関する完全な記述が &man.hier.7; のマニュアルページにありますので, ここでは繰り返しません. 詳しい情報は, &man.hier.7; をご覧ください. </para> <para>最も重要なディレクトリは, すべてのディレクトリの根(root)にあたる / ディレクトリです. このディレクトリは起動時に一番最初にマウントされ, 起動時に必要な基本システムが含まれています. また, ルートディレクトリには, 追加したい他のファイルシステムをマウントするためのマウントポイントも含まれます. </para> <para>マウントポイントとはルートファイルシステムに存在する, 追加のファイルシステムと接続するためのディレクトリのことです. 標準的なマウントポイントには <filename>/usr</filename>, <filename>/var</filename>, <filename>/mnt</filename>, <filename>/cdrom</filename> があります. 通常これらのディレクトリについては, <filename>/etc/fstab</filename> というファイル中のエントリが参照されます. <filename>/etc/fstab</filename> さまざまなファイルシステムとマウントポイントの表であり, システムが参照します. <filename>/etc/fstab</filename> に書かれたファイルシステムは <option>noauto</option> オプションが指定されていなければ, 起動時に &man.rc.8; スクリプトによって自動的にマウントされます. <filename>/etc/fstab</filename> ファイルの書式やオプションに関しての詳細は &man.fstab.5; をご覧ください.</para> </sect1> <sect1 id="shells"> <title>シェル</title> <indexterm><primary>シェル(shell)</primary></indexterm> <indexterm><primary>コマンドライン</primary></indexterm> <para>FreeBSD では日々の作業のほとんどは, 「シェル」と呼ばれるコマンドラインインタフェイスを通して行われます. シェルの主な仕事はコマンドを入力チャンネルから受け取り, そしてそれらを実行することです. 大部分のシェルはさらに組み込みの機能を持っていて, 日々の作業, ファイル管理やファイル名の展開, コマンドライン編集, コマンドマクロ, 環境変数などに便利です. FreeBSD には <command>sh</command> (Bourne Shell) や <command>csh</command> (C-shell) が含まれています. また, これ以外にもたくさんのシェルが FreeBSD Ports Collection から利用可能です. <command>tcsh</command> や <command>bash</command> などの高機能なものは FreeBSD Ports Collection に含まれています.</para> <para>「あなたは, どのシェルを使いますか?」という質問は, まったく趣味の問題です. あなたが C のプログラマだったとすれば, <command>tcsh</command> のような C 風のシェルの方が落ち着くかもしれません. Linux から来た人や Unix のコマンドラインインタフェイスになじみがなければ, <command>bash</command> を試すのも良いでしょう. ポイントは, それぞれのシェルは, あなたの好みの作業環境で利用できる(もしくはできない)独自の機能を持っているということ, そして, どのシェルを使うことにするかを決めるのはあなた自身だということです.</para> <para>シェルの一般的な機能の一つに, ファイル名の補完があります. コマンドやファイル名の最初の数文字を与えて TAB キーを押すことで, シェルにコマンドやファイル名の残りの部分を自動的に補完させることができます. 例をあげましょう. 二つのファイル <filename>foobar</filename>, <filename>foo.bar</filename> が あったとします. ここで <filename>foo.bar</filename> の方を削除するには, <command>rm fo[TAB].[TAB]</command> と入力します.</para> <indexterm><primary>環境変数(environment variables)</primary></indexterm> <para>するとシェルは <command>rm foo[BEEP].bar</command> と出力するでしょう.</para> <para>[BEEP] のところはコンソールのベル(訳注: 通常はビープ音が鳴ります)です. これは複数のファイルがマッチしたため, ファイル名の補完を完全に行なえなかったことを伝えています. <filename>foobar</filename> と <filename>foo.bar</filename> は 両方とも <literal>fo</literal> ではじまるため, 補完できるのは <literal>foo</literal> までです. ここで <literal>.</literal> を入力して TAB を押せば, シェルはファイル名の残りの部分を補完できます.</para> <para>もう一つあげられるシェルの機能として, 環境変数があります. 環境変数とは, シェルの環境変数空間におけるキーと値とのペアです. この変数空間は, そのシェルから起動されたプログラムから参照でき, それを利用してプログラムの設定を保存するのに利用されます. 下の表は, 一般的な環境変数とその意味を示したものです.</para> <indexterm><primary>環境変数(environment variables)</primary></indexterm> <informaltable frame="none"> <tgroup cols="2"> <thead> <row> <entry>変数名</entry> <entry>意味</entry> </row> </thead> <tbody> <row> <entry><envar>USER</envar></entry> <entry>現在のログインユーザのユーザ名.</entry> </row> <row> <entry><envar>PATH</envar></entry> <entry>コロンで区切られた実行ファイル探索のための ディレクトリのリスト.</entry> </row> <row> <entry><envar>DISPLAY</envar></entry> <entry>接続する X11 ディスプレイのネットワーク名(存在する場合のみ).</entry> </row> <row> <entry><envar>SHELL</envar></entry> <entry>現在のシェル.</entry> </row> <row> <entry><envar>TERM</envar></entry> <entry>ユーザの端末名. 端末のケーパビリティを決定するのに使われる.</entry> </row> <row> <entry><envar>TERMCAP</envar></entry> <entry>種々の端末の機能を実現する端末のエスケープコードの データベースのエントリ.</entry> </row> <row> <entry><envar>OSTYPE</envar></entry> <entry>オペレーティングシステムの種別. たとえば FreeBSD.</entry> </row> <row> <entry><envar>MACHTYPE</envar></entry> <entry>システムが動作している CPU のアーキテクチャ.</entry> </row> <row> <entry><envar>EDITOR</envar></entry> <entry>ユーザの選んだテキストエディタ.</entry> </row> <row> <entry><envar>PAGER</envar></entry> <entry>ユーザの選んだテキストページャ.</entry> </row> <row> <entry><envar>MANPATH</envar></entry> <entry>コロンで区切られたマニュアルページ探索のための ディレクトリのリスト.</entry> </row> </tbody> </tgroup> </informaltable> <indexterm><primary>Bourne シェル(Bourne shells)</primary></indexterm> <para>環境変数をセットしたりその値を見る方法は, それぞれのシェルごとに多少異なります. たとえば, <command>tcsh</command> や <command>csh</command> 等の C シェルでは <command>setenv</command> を使います. <command>sh</command> や <command>bash</command> 等の Bourne シェルでは <command>set</command> と <command>export</command> を使います. たとえば <command>csh</command> か <command>tcsh</command> で <envar>EDITOR</envar> 環境変数の値を <filename>/usr/local/bin/emacs</filename> に セットするか変更するには, 次のようにします.</para> <screen>&prompt.user; <userinput>setenv EDITOR /usr/local/bin/emacs</userinput></screen> <para>Bourne シェルでは次のようになります.</para> <screen>&prompt.user; <userinput>export EDITOR="/usr/local/bin/emacs"</userinput></screen> <para>ほとんどのシェルでは, コマンドライン中の変数名の前に <literal>$</literal> 文字を置くことで, 環境変数を展開させることができます. たとえば, <command>echo $TERM</command> は <envar>$TERM</envar> が セットされている内容を表示します. それはシェルが <envar>$TERM</envar> を展開して echo に渡しているからです.</para> <para>シェルはさまざまな特殊文字を, 特別なデータを表すものとして扱います. その特殊文字はメタキャラクタと呼ばれます. もっとも一般的なものは <literal>*</literal> で, これはファイル名に含まれる, あらゆる文字を表します. これらの特殊なメタキャラクタはファイル名の展開に使われます. たとえば, <command>echo *</command> と入力すると <command>ls</command> と入力したのとほとんど同じ結果を得られます. これはシェルが <command>*</command> とマッチするすべてのファイルを 受け取って echo のコマンドラインに渡し, 表示するからです.</para> <para>これらの特殊文字をシェルに解釈させないようにするため, 特殊文字の前にバックスラッシュ文字 (<literal>\</literal>) を置くことができます. <command>echo $TERM</command> は, あなたの端末が何にセットされているかを表示します. <command>echo \$TERM</command> は <envar>$TERM</envar> と そのまま表示します.</para> <sect2 id="changing-shells"> <title>シェルの変更</title> <para>シェルを変更する一番簡単な方法は <command>chsh</command> コマンドを使うことです. <command>chsh</command> を実行すると 環境変数 <envar>EDITOR</envar> で示されたエディタが立ち上がります. 環境変数をセットしていなかった時は <command>vi</command> が立ち上がります. <quote>Shell:</quote> の行を適宜変更してください.</para> <para><command>chsh</command> に <option>-s</option> オプションをつけると, エディタを起動せずにシェルを変更することが可能です. たとえば, シェルを bash に変えたいなら, 次のようにしてください. </para> <screen>&prompt.user; <userinput>chsh -s /usr/local/bin/bash</userinput></screen> <para><command>chsh</command> をパラメータなしで実行し, エディタでシェルを変更しても同じことができます.</para> <note> <para>使おうと思っているシェルは<emphasis>必ず</emphasis> <filename>/etc/shells</filename> 中に書かれているものでなければなりません. シェルを <link linkend="ports">Ports コレクション</link>から インストールしていたのであれば, すでにそれは行なわれていますが, 手動でインストールした場合は, それを忘れずに行ってください.</para> <para>たとえば, <command>bash</command> を手動で <filename>/usr/local/bin</filename> にインストールした場合 以下のようにする必要があります.</para> <screen>&prompt.root; <userinput>echo "/usr/local/bin/bash" >> /etc/shells</userinput></screen> <para>そして <command>chsh</command> を実行してください.</para> </note> </sect2> </sect1> <sect1 id="editors"> <title>テキストエディタ</title> <indexterm><primary>テキストエディタ</primary></indexterm> <indexterm><primary>エディタ</primary></indexterm> <para>さまざまな FreeBSD の設定は, テキストファイルを編集することで行われます. そのため, テキストエディタの扱いに慣れると良いでしょう. FreeBSD には, 基本システムの一部として二, 三提供されるものと, Ports collection から利用できる, たくさんのテキストエディタが用意されています. </para> <indexterm> <primary><command>ee</command></primary> </indexterm> <para>最も学習が簡単なエディタは, easy editor の略で <application>ee</application> と呼ばれるものです. <application>ee</application> を立ち上げるには, コマンドラインから <command>ee filename</command> と入力します. ここで <literal>filename</literal> は, 編集しようとしているファイルの名前です. たとえば, <filename>/etc/rc.conf</filename> を編集するには <command>ee /etc/rc.conf</command> と入力します. 一旦 <command>ee</command> の中に入れば, エディタの機能を操作するコマンドはすべてディスプレイの上部に 表示されています. キャレット <literal>^</literal> 文字は キーボードのコントロールキーを意味しますので, ^e はコントロールキーと <literal>e</literal> を一緒に押すという意味になります. <application>ee</application> を終了するにはエスケープキーを押し, そして leave editor を選びます. ファイルが更新されていたときは, エディタは変更をセーブするかどうかプロンプトを出します.</para> <indexterm> <primary><command>vi</command></primary> </indexterm> <indexterm> <primary>エディタ</primary> <secondary><command>vi</command></secondary> </indexterm> <indexterm> <primary><command>emacs</command></primary> </indexterm> <indexterm> <primary>エディタ</primary> <secondary><command>emacs</command></secondary> </indexterm> <para>FreeBSD には, 基本システムの一部として <application>vi</application>, Ports Collection の一部として <command>emacs</command> や <command>vim</command> といった, より強力なテキストエディタが用意されています. これらのエディタはやや学習が複雑ですが, より強力で高い機能性を提供します. しかし, あなたが多量のテキストを編集することを考えているなら, <command>vim</command> や <command>emacs</command> といった強力なエディタを習得することは, より多くの時間を節約することでしょう.</para> </sect1> <sect1> <title>さらに詳しい情報を得るには...</title> <sect2 id="basics-man"> <title>オンラインマニュアル</title> <indexterm><primary>マニュアルページ</primary></indexterm> <para>FreeBSD についてのもっとも包括的な文書は, マニュアルページの形式になっているものです. FreeBSD システム上のほとんどすべてのプログラムには, 基本的な操作方法とさまざまな引数を説明しているリファレンスマニュアルが添付されています. これらのマニュアルは man コマンドで見ることができます. man コマンドの使い方は簡単です.</para> <screen>&prompt.user; <userinput>man <replaceable>コマンド名</replaceable></userinput></screen> <para><literal>コマンド名</literal> のところには, 知りたいコマンドの名前を入れます. たとえば <command>ls</command> コマンドについて知りたい場合には, 次のように入力します.</para> <screen>&prompt.user; <userinput>man ls</userinput></screen> <para>オンラインマニュアルは, セクション番号で分類されています.</para> <orderedlist> <listitem> <para>ユーザコマンド</para> </listitem> <listitem> <para>システムコールとエラー番号</para> </listitem> <listitem> <para>C のライブラリ関数</para> </listitem> <listitem> <para>デバイスドライバ</para> </listitem> <listitem> <para>ファイル形式</para> </listitem> <listitem> <para>ゲームや娯楽</para> </listitem> <listitem> <para>さまざまな情報</para> </listitem> <listitem> <para>システムの管理と操作のためのコマンド</para> </listitem> <listitem> <para>カーネル開発者のための情報</para> </listitem> </orderedlist> <para>時折, 同じトピックがオンラインマニュアルの複数のセクションに記載されている場合があります. たとえば, <command>chmod</command> ユーザコマンドと <function>chmod()</function> システムコールの場合がそれに該当します. この場合, man コマンドにセクション番号を与えることで, どちらを参照したいかを指定することができます.</para> <screen>&prompt.user; <userinput>man 1 chmod</userinput></screen> <para>上のようにすれば, ユーザコマンド <command>chmod</command> のマニュアルページが表示されます. オンラインマニュアルの特定セクションへの参照は, 慣習的に書かれている文書で括弧の中に示されます. すなわち, &man.chmod.1; は <command>chmod</command> ユーザコマンドを, &man.chmod.2; はシステムコールの方を示しています.</para> <para>コマンドの名前を知っていて, 単純にその使い方を知りたい場合はここまでの説明で十分でしょう. しかし, もしコマンドの名前を思い出せない場合にはどうしたら良いのでしょうか? man に <option>-k</option> スイッチをつければ, コマンド解説(description)の文章から, 指定したキーワードを検索することができます.</para> <screen>&prompt.user; <userinput>man -k mail</userinput></screen> <para>このコマンドにより, <quote>mail</quote> というキーワードをコマンド解説に含むコマンドの一覧が表示されます. 実際には, これは apropos コマンドを使う場合と同等の機能です.</para> <para>それでは, <filename>/usr/bin</filename> にあるさまざまなコマンドすべてを見ていて, それらが実際にどう働くのかが, まったく見当もつかないときには どうしたら良いでしょう? そのときは単純に,</para> <screen>&prompt.user; <userinput>cd /usr/bin</userinput> &prompt.user; <userinput>man -f *</userinput></screen> <para>とするか, あるいは同じ働きをする</para> <screen>&prompt.user; <userinput>cd /usr/bin</userinput> &prompt.user; <userinput>whatis *</userinput></screen> <para>としてください.</para> </sect2> <sect2 id="basics-info"> <title>GNU の Info ファイル</title> <indexterm><primary>Free Software Foundation</primary></indexterm> <para>FreeBSD には Free Software Foundation (FSF) によるアプリケーションや ユーティリティがたくさん含まれています. これらのプログラムには, マニュアルページに加えて <literal>info</literal> ファイルと呼ばれる ハイパーテキスト形式の文書が付属しています. この文書は <command>info</command> コマンド, あるいは <application>emacs</application> をインストールしているなら <application>emacs</application> の info モードで読むことができます.</para> <para>&man.info.1; コマンドを使うには, 単に次のように入力します.</para> <screen>&prompt.user; <userinput>info</userinput></screen> <para> <literal>h</literal> と入力すると, 簡単な手引きを読むことができます. クイックコマンドリファレンスは <literal>?</literal> を入力してください.</para> </sect2> </sect1> </chapter> <!-- Local Variables: mode: sgml sgml-declaration: "../chapter.decl" sgml-indent-data: t sgml-omittag: nil sgml-always-quote-attributes: t sgml-parent-document: ("../book.sgml" "part" "chapter") End: -->