git: 88bbc21fb3 - main - ja/handbook: Upadate basic chapter
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 27 Aug 2022 16:34:17 UTC
The branch main has been updated by ryusuke: URL: https://cgit.FreeBSD.org/doc/commit/?id=88bbc21fb310b17213e1623cedda381e89b122e9 commit 88bbc21fb310b17213e1623cedda381e89b122e9 Author: Ryusuke SUZUKI <ryusuke@FreeBSD.org> AuthorDate: 2022-08-27 16:33:47 +0000 Commit: Ryusuke SUZUKI <ryusuke@FreeBSD.org> CommitDate: 2022-08-27 16:33:47 +0000 ja/handbook: Upadate basic chapter 7312482fa9 -> 4938f29d80 --- .../content/ja/books/handbook/basics/_index.adoc | 661 +++++++++++++-------- 1 file changed, 422 insertions(+), 239 deletions(-) diff --git a/documentation/content/ja/books/handbook/basics/_index.adoc b/documentation/content/ja/books/handbook/basics/_index.adoc index 71e7c7cf65..3b0783b72f 100644 --- a/documentation/content/ja/books/handbook/basics/_index.adoc +++ b/documentation/content/ja/books/handbook/basics/_index.adoc @@ -49,7 +49,9 @@ endif::[] [[basics-synopsis]] == この章では -この章では FreeBSD オペレーティングシステムの基本的なコマンドと機能について記述しています。 ここに書かれてあることのほとんどは、 どんな UNIX(R) オペレーティングシステムにもあてはまります。 この章に書いてあることに馴染みがあるなら、 この章は気軽に流し読みしてください。 あなたが FreeBSD の初心者なら、 何か質問する前にこの章を読んでおいた方がきっといいはずです。 +この章では FreeBSD オペレーティングシステムの基本的なコマンドと機能について記述しています。 +ここに書かれてあることのほとんどは、どんな UNIX(R) -like なオペレーティングシステムにもあてはまります。 +FreeBSD の初心者であれば、この章を読んでおいた方がきっといいはずです。 この章を読んで分かることは、次のようなことです。 @@ -72,38 +74,21 @@ FreeBSD は様々な使い方ができます。その中の一つが、 テキ [[consoles-intro]] === コンソール -起動時に自動的にグラフィカルな環境が起動するように FreeBSD を設定していなければ、システムが起動してスタートアップ スクリプトが実行されると、すぐにログインプロンプトが出てくるでしょう。 次のようものが表示されるはずです。 +起動時に自動的にグラフィカルな環境が起動するように FreeBSD を設定していなければ、システムが起動すると、以下のようなコマンドラインのログインプロンプトが表示されます。 [source,shell] .... -Additional ABI support:. -Local package initialization:. -Additional TCP options:. - -Fri Sep 20 13:01:06 EEST 2002 - -FreeBSD/i386 (pc3.example.org) (ttyv0) +FreeBSD/amd64 (pc3.example.org) (ttyv0) login: .... -あなたのシステムではメッセージが多少異なるかもしれませんが、 似たようなものが見られるはずです。 最後の 2 行が、今関心を向けているものです。 最後から 2 行目は、以下のようになっています。 - -[.programlisting] -.... -FreeBSD/i386 (pc3.example.org) (ttyv0) -.... - -この行には、 起動したばかりのシステムについていくばくかの情報があります。 あなたは、x86 アーキテクチャ上の Intel または その互換プロセッサ上で動作している "FreeBSD" の コンソールを目にしているのです。このマシンの名称 (どの UNIX(R) 機にも名前がついて います) は `pc3.example.org` で、 あなたはそのシステムコンソール、[.filename]#ttyv0# 端末に向かっています。 +最初の行はシステムの情報です。 +`amd64` は、このシステム上で 64 ビット版の FreeBSD が動作していることを示しています。 +ホスト名は `pc3.example.org`、[.filename]#ttyv0# はシステムコンソールであることを示しています。 -最後の行は、常に以下のものになります。 - -[.programlisting] -.... -login: -.... - -ここは、FreeBSD にログインするために "ユーザ名" を入力するところです。次の節でどうするか説明します。 +次の行はログインプロンプトです。 +このプロンプトから FreeBSD にログインする方法を次の節で説明します。 [[consoles-login]] === FreeBSD にログインする @@ -112,44 +97,47 @@ FreeBSD は、マルチユーザ、マルチプロセスなシステムです。 あらゆるマルチユーザシステムには、ある "ユーザ" を他のユーザと区別する何がしかの手段が必要です。 FreeBSD (とすべての UNIX(R) like なオペレーティングシステム) では、 すべてのユーザに対してプログラムの実行を可能にするのに、システムに "ログイン" することを義務付けてこれを実現しています。 どのユーザにも、一意な名前 ("ユーザ名") と個人的な秘密の鍵 ("パスワード") があります。 FreeBSD はユーザにプログラムの実行を許可する前に、 この 2 つの入力を要求します。 -FreeBSD が起動してスタートアップスクリプトを実行し終わった 直後に、プロンプトを表示して有効なユーザ名の入力を促します。 +FreeBSD が起動すると、システムを準備したり、システム起動時に開始すべきサービスを起動するように、スタートアップスクリプトが自動的に実行されます。 +そして、プロンプトを表示して有効なユーザ名の入力を促します。 [source,shell] .... login: .... -この例では `john` というユーザ名を使う ことにしましょう。このプロンプトに対して `john` と入力して、kbd:[Enter] を 押してください。そうすると、 次のような"パスワード"の入力を要求するプロンプトが 表示されます。 +crossref:bsdinstall[bsdinstall-addusers,ユーザの追加] で追加したユーザ名を入力して、kbd:[Enter] を押してください。 +次にそのユーザのパスワードを入力して、kbd:[Enter] を押してください。 +セキュリティの観点から、パスワードは _表示されません_。 -[source,shell] -.... -login: john -Password: -.... - -それでは `john` のパスワードを入力して kbd:[Enter] を押してください。パスワードは _表示されません_。これについては、当面は 気にする必要はありません。セキュリティのためといえば十分でしょう。 - -パスワードを正確に入力したら、FreeBSD にログインして 利用可能なすべてのコマンドを試せるようになっているはずです。 - -MOTD、もしくはコマンドプロンプト (`#`, `$` または `%`) に表示されるメッセージを読むようにしましょう。 これは FreeBSD へのログインに成功したときに表示されます。 +パスワードを正確に入力したら、日々のメッセージ (MOTD) が表示され、 +コマンドプロンプト (`#`, `$` または `%` 記号) が表示されます。 +これで FreeBSD コンソールへのログインが行われ、利用可能なコマンドを実行する準備ができました。 [[consoles-virtual]] -=== 多数のコンソール +=== 仮想コンソール -一つのコンソールで UNIX(R) コマンドを動かすのは結構なことですが、 FreeBSD は多くのプログラムを一度に動かせます。 コマンドを入力できるコンソールが一つというのは、 FreeBSD のようにいくつものプログラムを同時に動かせる オペレーティングシステムの場合は少しもったいないことです。 ここで、"仮想コンソール" が非常に役に立ちます。 +FreeBSD は、複数の仮想コンソールを表示してコマンドを入力できるように設定できます。 +各コンソールは、個別のログインプロンプトおよび出力チャンネルを持っており、FreeBSD は仮想コンソール間の切り替えに応じて、キーボード入力とモニター出力を適切につなぎ直します。 -FreeBSD は、異なる仮想コンソールを複数 表示するように設定できます。キーボード上である組合せのキーを押せば、 その中の一つから他の仮想コンソールのどれかに切り替えられます。 それぞれのコンソールは、個別の出力チャンネルを持っており、 また FreeBSD はある仮想コンソールから次に切り替えるのに応じて、 キーボード入力とモニター出力を適切につなぎ直します。 +FreeBSD は、コンソールを切り替えるために、特別なキーの組合せを予約しています。 +FreeBSD では kbd:[Alt+F1], kbd:[Alt+F2] から kbd:[Alt+F8] までを、別の仮想コンソールへの切り替えに使えます。 -FreeBSD は、コンソールを切り替えるために、 特別なキーの組合せを予約しています。FreeBSD では kbd:[Alt+F1], kbd:[Alt+F2] から kbd:[Alt+F8] までを、 別の仮想コンソールに切り替えるのに使えます。 +あるコンソールから他に切り替えるのに応じて、FreeBSD は画面への出力を保存して戻します。 +結果として、FreeBSD で動かすコマンドを入力するのに使える複数の画面とキーボードを "仮想的に" 実現できるのです。 +ある仮想コンソールで実行したプログラムは、別の仮想コンソールに切り替えて、そのコンソールが見えなくなっている時も実行を停止しません。 -あるコンソールから他に切り替えるのに応じて、FreeBSD は画面 への出力を保存して戻します。結果として、FreeBSD で動かすコマン ドを入力するのに使える複数の画面とキーボードを "仮想的に" 実現できるのです。 ある仮想コンソールで実行したプログラムは、 そのコンソールが見えなくなっている時も実行を停止しません。 別の仮想コンソールに切り替えても動き続けます。 +FreeBSD のコンソールおよびキーボードドライバに関するさらなる技術的な説明については、man:kbdcontrol[1], man:vidcontrol[1], man:atkbd[4], man:syscons[4] および man:vt[4] を参照してください。 [[consoles-ttys]] === [.filename]#/etc/ttys# ファイル -初期設定では、FreeBSD は 8 つの仮想コンソールを立ち上げます。 この設定はもともと埋め込まれているわけではなく、 インストールしたものが、もっと多いまたは少ない数の仮想コンソールで 起動するように、容易にカスタマイズできます。仮想コンソールの数と 設定は [.filename]#/etc/ttys# ファイルに書かれています。 +初期設定では、FreeBSD は 8 つの仮想コンソールを立ち上げるように設定されています。 +この設定については、より多く、またはより少ない数の仮想コンソールを起動するように、カスタマイズできます。 +仮想コンソールの数を変更するには、[.filename]#/etc/ttys# ファイルを編集してください。 -FreeBSD の仮想コンソールを設定するには [.filename]#/etc/ttys# ファイルを利用します。 このファイルのコメントアウトされていない (`#` 文字で始まっていない) 行は、一つの端末または仮想コンソールの 設定があります。FreeBSD の初期設定では、 仮想コンソールを 9 つ設定し、そのうち 8 つを有効にしています。 `ttyv` で始まる行がそれです。 +[.filename]#/etc/ttys# ファイルの中で、コメントアウトされていない (`#` 文字で始まっていない) 行には、一つの端末または仮想コンソールの設定が含まれています。 +FreeBSD の初期設定では、 仮想コンソールを 9 つ設定し、そのうち 8 つを有効にしています。 +`ttyv` で始まる行が関連する行です。 [.programlisting] .... @@ -167,12 +155,14 @@ ttyv7 "/usr/libexec/getty Pc" cons25 on secure ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure .... -このファイルのそれぞれのカラムと仮想コンソールに設定可能な 全オプションの詳しい説明は、man:ttys[5] のマニュアルを 参照してください。 +このファイルのそれぞれのカラムと仮想コンソールに設定可能なオプションの詳しい説明は、man:ttys[5] のマニュアルを参照してください。 [[consoles-singleuser]] === シングルユーザモードのコンソール -"シングルユーザモード" とは何かという詳しい説明は、 crossref:boot[boot-singleuser,「シングルユーザモード」] にあります。FreeBSD を シングルユーザモードで動かしている場合は一つしかコンソールが ないということは注意しておくに値するでしょう。仮想コンソールは 利用できません。シングルユーザモードのコンソールの設定は、同じく [.filename]#/etc/ttys# ファイルにあります。 `console` で始まる行を探してください。 +"シングルユーザモード" についての詳しい説明は、 crossref:boot[boot-singleuser,「シングルユーザモード」] にあります。 +FreeBSD をシングルユーザモードで動かしている場合は、コンソールは一つしかなく、他の仮想コンソールは利用できません。 +シングルユーザモードの設定は、[.filename]#/etc/ttys# ファイルの以下のセクションにあります。 [.programlisting] .... @@ -180,20 +170,22 @@ ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure # # If console is marked "insecure", then init will ask for the root password # when going to single-user mode. -console none unknown off secure +console none unknown off secure .... [NOTE] ==== -`console` 行の上のコメントが示すように、 この行を編集して `secure` を `insecure` に変更できます。そうすると、 FreeBSD がシングルユーザモードで起動した場合にも `root` のパスワードを要求します。 +`console` 行の上記のコメントが示すように、`secure` を `insecure` に変更すると、 FreeBSD がシングルユーザモードで起動した場合に `root` のパスワードが要求されます。 +デフォルトの設定では、パスワードが要求されることなくシングルユーザモードで起動します。 -_これを `_insecure_` に 変更する場合は十分注意してください。_`root` のパスワードを忘れてしまったら、 シングルユーザモードで起動するのは少しややこしくなります。 できることはできますが、FreeBSD の起動の過程とそれに関わる プログラムにあまり親しんでいない人には少し難しいかも知れません。 +_`insecure` に 変更する場合は十分注意してください!_ +`root` のパスワードを忘れてしまうと、シングルユーザモードで起動することはできますが、FreeBSD の起動のプロセスに詳しくない人が起動できるようにするに難しいかも知れません。 ==== [[consoles-vidcontrol]] === コンソールのビデオモードの変更 -FreeBSD のデフォルトのビデオモードは 1024x768 や 1280x1024 など、グラフィックカードとディスプレイが対応しているサイズに調整されます。 +FreeBSD のデフォルトのビデオモードは 1024x768 や 1280x1024 など、グラフィックチップおよびディスプレイが対応しているサイズに調整されます。 別のビデオモードを使うには、`VESA` モジュールをロードしてください。 [.programlisting] @@ -209,14 +201,15 @@ FreeBSD のデフォルトのビデオモードは 1024x768 や 1280x1024 など # vidcontrol -i mode .... -このコマンドの出力結果があなたのハードウェアが対応しているビデオモードです。 その後 `root` ユーザで man:vidcontrol[1] を実行することで、 新しくどのビデオモードを使うかを選択できます。 +このコマンドは、使用しているハードウェアが対応しているビデオモードの一覧を表示します。 +その後、man:vidcontrol[1] を `root` ユーザで実行して、新しく使用するビデオモードを選択してください。 [source,shell] .... # vidcontrol MODE_279 .... -このビデオモードで良いと思ったら、起動時に自動的に設定されるように [.filename]#/etc/rc.conf# ファイルに以下のように設定してください。 +このビデオモードで良ければ、起動時に自動的に設定されるように [.filename]#/etc/rc.conf# に以下のように追加してください。 [.programlisting] .... @@ -226,9 +219,14 @@ allscreens_flags="MODE_279" [[permissions]] == 許可属性 -FreeBSD は BSD UNIX(R) の直系の子孫であり、 いくつかの鍵となる UNIX(R) 思想にもとづいています。 まず最も際だった特徴として最初に言えるのは、FreeBSD がマルチユーザのオペレーティングシステムだということです。 FreeBSD は同時に働いている複数のユーザすべてを、 完全に分離したタスク上で処理する能力を持っています。 また FreeBSD は、ハードウェアデバイス、周辺装置、メモリ、 CPU 時間等への要求を、各ユーザが平等に利用できるように適切に共有し、 管理する役割を担っています。 +FreeBSD は BSD UNIX(R) の直系の子孫であり、 いくつかの鍵となる UNIX(R) 思想にもとづいています。 +まず最も際だった特徴として最初に言えるのは、FreeBSD がマルチユーザのオペレーティングシステムだということです。FreeBSD は同時に働いている複数のユーザすべてを、 完全に分離したタスク上で処理する能力を持っています。 +また FreeBSD は、ハードウェアデバイス、周辺装置、メモリ、CPU 時間等への要求を、各ユーザが平等に利用できるように適切に共有し、管理する役割を担っています。 -システムがマルチユーザをサポートしているため、 システムが管理する資源はすべて、 誰がその資源を読み・書き・実行できるかを支配する、 一組の許可属性を持っています。 これらの許可属性は 3 つの部分からなる 3 桁の 8 進数の形で格納されています。 それはそのファイルの所有者 (owner) に対するもの、 そのファイルが所属するグループ (group) に対するもの、 その他 (others) に対するものの 3 つです。 これを数字を使って表現すると、次のようになります。 +システムがマルチユーザをサポートしているため、システムが管理する資源はすべて、誰がその資源を読み・書き・実行できるかを支配する、一組の許可属性を持っています。 +これらの許可属性は 3 つの部分からなる 3 桁の 8 進数の形で格納されています。 +それはそのファイルの所有者 (owner) に対するもの、そのファイルが所属するグループ (group) に対するもの、 その他 (others) に対するものの 3 つです。 +これを数字を使って表現すると、次のようになります。 [.informaltable] [cols="1,1,1", frame="none", options="header"] @@ -270,7 +268,8 @@ FreeBSD は BSD UNIX(R) の直系の子孫であり、 いくつかの鍵とな |`rwx` |=== -man:ls[1] に対してコマンドライン引数 `-l` を使うと、 詳細なディレクトリリストを見ることができ、 ファイルの所有者、グループ、その他への許可属性を示す欄があるのがわかります。 例えば、`ls -l` を実行して、 適当なディレクトリを表示させると以下のようになります。 +man:ls[1] に対してコマンドライン引数 `-l` を使うと、詳細なディレクトリリストを見ることができ、ファイルの所有者、グループ、その他への許可属性を示す欄があるのがわかります。 +例えば、`ls -l` を実行して、 適当なディレクトリを表示させると以下のようになります。 [source,shell] .... @@ -282,26 +281,38 @@ total 530 ... .... -以下に示すのは、 `ls -l` の最初の行を抜き出したものです。 +一番目の列の最初の (一番左の) 文字は、そのファイルが普通のファイルなのか、ディレクトリなのか、キャラクタ型のデバイス特殊ファイルなのか、ソケットなのか、その他の特殊な疑似ファイルデバイスなのかといった種類を示す特別な文字です。 +この例において、`-` という文字は、普通のファイルであることを示します。 +その次に来る `rw-` と書かれた 3 文字は、そのファイルの所有者に許可を与えるものです。 +その次の `r--` の 3 文字は、そのファイルが所属しているグループに許可を与えます。 +最後の `r--` の 3 文字は、 システムに存在するその他のユーザに許可を与えます。 +"-" は許可が与えられていないことを示します。 +この例では、ファイルの所有者はこのファイルを読み書きでき、ファイルの所属しているグループに属するユーザはファイルを読むことだけでき、そのどちらでもないユーザは、 このファイルを読むだけできるように許可属性が与えられています。 +上の表によれば、このファイルに与えられた許可属性は `644` となります。 +ここで各数字は、このファイルの許可属性の 3 つの部分を表しています。 -[source,shell] -.... --rw-r--r-- -.... - -最初の (一番左の) 文字は、それが 普通のファイルなのか、ディレクトリなのか、 キャラクタ型のデバイス特殊ファイルなのか、 ソケットなのか、 その他の特殊な疑似ファイルデバイスなのかといった種類を示す特別な文字です。 この場合、`-` という文字は、 普通のファイルであることを示します。 この例でその次に来る `rw-` と書かれた 3 文字は、 そのファイルの所有者に許可を与えるものです。 その次の `r--` の 3 文字は、 そのファイルが所属しているグループに許可を与えます。 最後の `r--` の 3 文字は、 システムに存在するその他のユーザに許可を与えます。 "-" は許可が与えられていないことを示します。 このファイルの例では、ファイルの所有者はこのファイルを読み書きでき、 ファイルの所属しているグループに属する ーザはファイルを読むことだけでき、 そのどちらでもないユーザは、 このファイルを読むだけできるように許可属性が与えられています。 上の表によれば、このファイルに与えられた許可属性は `644` となります。 ここで各数字は、このファイルの許可属性の 3 つの部分を表しています。 +デバイスの場合の許可属性はどのようにコントロールされているのでしょうか? +FreeBSD は、大部分のハードウェアをファイルとして取り扱います。 +そのため、プログラムからは普通のファイルとまったく同じようにオープンし、 データの読み書きができるようになっています。 +これらのデバイス特殊ファイルは [.filename]#/dev/# に収められています。 -ファイルについてはここまでの説明で十分です。 しかし、 デバイスの場合の許可属性はどのようにコントロールされているのでしょうか? FreeBSD は、大部分のハードウェアをファイルとして取り扱います。 そのため、プログラムからは普通のファイルとまったく同じようにオープンし、 データの読み書きができるようになっています。 これらのデバイス特殊ファイルは [.filename]#/dev# ディレクトリに収められています。 +ディレクトリもまた、ファイルと同様に扱われます。 +それは読み込み/書き込み/実行の許可属性を持ちます。 +ディレクトリの実行ビットはファイルのそれとは少し違った意味を持ちます。 +ディレクトリが実行可能になっているとき、"cd" を使ってそのディレクトリに移動することができます。 +これは、そのディレクトリにあるファイルにアクセスできることを意味しています (ファイル自体の許可属性によります)。 -ディレクトリもまた、ファイルと同様に扱われます。 それは読み込み/書き込み/実行の許可属性を持ちます。 ディレクトリの実行ビットはファイルのそれとは少し違った意味を持ちます。 ディレクトリが実行可能になっているとき、 そのディレクトリに移動することができます。 つまり、そのディレクトリに "cd" (change directory) することが可能です。 また、実行可能属性がついているディレクトリでは、 名前が分かっているファイルにアクセスすることもできます (もちろんそのファイル自体の許可属性によります)。 +ディレクトリの中の一覧を表示するには、そのディレクトリに読み込み属性が設定されていなければなりません。 +名前が分かっているファイルを削除するには、そのファイルが含まれているディレクトリに 書き込み属性 _と_ 実行属性 の両方が必要です。 -特に、ディレクトリの中の一覧を表示するには、 そのディレクトリに読み込み属性が設定されていなければなりません。 一方、名前が分かっているファイルを削除するには、 そのファイルが含まれているディレクトリに 書き込み属性_と_実行属性 の両方が必要です。 - -この他にも許可属性ビットはありますが、いずれも setuid バイナリや sticky ディレクトリなどといった特殊な状況で使われます。 ファイルの許可属性そのものについて、 また、それらの設定のしかたに関する詳しい情報は、 man:chmod[1] マニュアルページを参照してください。 +この他にも許可属性ビットはありますが、いずれも setuid バイナリや sticky ディレクトリなどといった特殊な状況で使われます。 +ファイルの許可属性そのものについて、また、それらの設定方法に関する詳しい情報は、 man:chmod[1] マニュアルページを参照してください。 === シンボリック表記 -シンボリック表記と呼ばれる許可属性を表す方法では、 ファイルやディレクトリの許可属性を、 8 進数ではなく記号を用いて設定します。 シンボリック表記では、(who), (action), (permissions) という書式が用いられます。 利用できる値は以下の通りです。 +シンボリック表記と呼ばれる許可属性を表す方法では、ファイルやディレクトリの許可属性を、8 進数ではなく記号を用いて設定します。 +シンボリック表記による許可属性を表す方法では、(who), (action), (permissions) という書式が用いられます。 +利用できる値は以下の通りです。 [.informaltable] [cols="1,1,1", frame="none", options="header"] @@ -359,14 +370,16 @@ total 530 |UID または GID を設定する |=== -これらの値は、これまでと同様に man:chmod[1] コマンドで用いますが、文字で指定します。 たとえば、_FILE_ に対して自分以外のユーザからアクセスを一切受け付けたくない、 というときには以下のコマンドを実行してください。 +これらの値は、これまでと同様に man:chmod[1] で用いますが、数字ではなく文字で指定します。 +たとえば、_FILE_ に対して自分以外のユーザからアクセスを一切受け付けたくない、というときには以下のコマンドを実行してください。 [source,shell] .... % chmod go= FILE .... -カンマ区切りで設定することで、 ファイルの属性を一度に 2 つ以上変更できます。 以下の例では、_FILE_ に対して自分以外のユーザから書き込みの権限を取り上げ、 かわりにすべてのユーザが _FILE_ を実行できるようにします。 +カンマ区切りで設定することで、ファイルの属性を一度に 2 つ以上変更できます。 +以下の例では、_FILE_ に対して自分以外のユーザから書き込みの権限を取り上げ、かわりにすべてのユーザが _FILE_ を実行できるようにします。 [source,shell] .... @@ -375,39 +388,40 @@ total 530 === FreeBSD のファイルフラグ -先ほど説明したファイルの許可属性に加え、 FreeBSD では "ファイルフラグ" を使えます。 これはファイルにセキュリティや管理上の属性を追加するものですが、 ディレクトリには追加しません。 - -これらのファイルフラグはファイルに管理上の属性を追加し、 `root` ユーザでさえ誤ってファイルを消去、変更してしまうことを防ぎます。 +ファイルの許可属性に加え、FreeBSD では "ファイルフラグ" を使えます。 +これはファイルにセキュリティや管理上の属性を追加するものですが、ディレクトリには追加しません。 +ファイルフラグにより、`root` ユーザでさえ誤ってファイルを消去、変更してしまうことを防ぐことができます。 -ファイルフラグは、man:chflags[1] を使って、簡単なインタフェースで設定できます。 例えば、[.filename]#file1# というファイルにシステムレベルで消去不可のフラグを設定するには、 以下のコマンドを実行してください。 +ファイルフラグは、man:chflags[1] を使って、簡単なインタフェースで設定できます。 +例えば、[.filename]#file1# というファイルにシステムレベルで消去不可のフラグを設定するには、以下のコマンドを実行してください。 [source,shell] .... # chflags sunlink file1 .... -また、消去不可のフラグを削除するには、以下のように先ほどのコマンドの `sunlink` の前に "no" をつけて実行してください。 +消去不可のフラグを削除するには、以下のように `sunlink` の前に "no" をつけて実行してください。 [source,shell] .... # chflags nosunlink file1 .... -ファイルにどのフラグが設定されているのかを見るには、man:ls[1] コマンドを `-lo` オプションと一緒に使ってください。 +ファイルに設定されているフラグを確認するには、`-lo` と一緒に man:ls[1] を実行してください。 [source,shell] .... # ls -lo file1 .... -出力は以下のようになります。 - [.programlisting] .... -rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1 .... -いくつかのフラグの追加、削除は `root` ユーザしかできません。 他のフラグは、ファイルの所有者が変更できます。 システム管理者は man:chflags[1] と man:chflags[2] から、 より詳細な情報を得ることをおすすめします。 +いくつかのファイルフラグの追加、削除は `root` ユーザしかできません。 +他のフラグは、ファイルの所有者が変更できます。 +man:chflags[1] と man:chflags[2] から、より詳細な情報を得ることをおすすめします。 === `setuid`, `setgid` および `sticky` 許可属性 @@ -422,7 +436,7 @@ total 530 実効 UID は、プロセスを実行するユーザ ID です。 たとえば、ユーザがパスワードを変更するときに利用する man:passwd[1] は、実ユーザ ID で起動します。 しかしながら、パスワードデータベースのアップデートの際は、実効 ID の `root` ユーザの権限で実行されます。 -この仕組みにより、`Permission Denied` エラーが表示されることなく、パスワードを変更できます。 +この仕組みにより、`Permission Denied` エラーが表示されることなく、ユーザはパスワードを変更できます。 setuid 許可属性は、以下の例で示されているように、指定する許可属性に数字の 4 をつけて設定します。 @@ -475,7 +489,7 @@ root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd 通常のユーザ権限で man:passwd[1] を実行したにもかかわらず、実効 UID の `root` が使われています。 `setgid` 許可属性は `setuid` 許可属性と同様の機能を提供しますが、この許可属性はグループの設定を変更します。 -アプリケーションまたはユーティリティに対してこの設定を行うと、プロセスを開始するユーザではなく、ファイルを所有するグループに対してこの許可属性を与えます。 +この設定を行った上でアプリケーションまたはユーティリティを実行すると、プロセスを開始するユーザではなく、ファイルを所有するグループに対してこの許可属性を与えます。 ファイルに `setgid` 許可属性を設定するには、man:chmod[1] で設定する許可属性の先頭に 2 をつけて実行してください。 @@ -524,11 +538,21 @@ drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp [[dirstructure]] == ディレクトリ構造 -FreeBSD のディレクトリ構造は、 システム全体を理解するに当たって重要です。 把握しておくべき最も重要なものは、"/" ディレクトリです。 このディレクトリは起動時に一番最初にマウントされ、 オペレーティングシステムをマルチユーザで動作させるために 必要な基本システムが含まれています。 また、ルートディレクトリには、 マルチユーザへの移行中に他のファイルシステムをマウントするためのマウントポイントも含まれます。 +FreeBSD のディレクトリ構造は、システム全体を理解するに当たって重要です。 +最も重要なディレクトリは、ルートまたは "/" です。 +このディレクトリは起動時に一番最初にマウントされ、オペレーティングシステムをマルチユーザで動作させるために必要なベースシステムが含まれています。 +また、ルートディレクトリには、マルチユーザへの移行中に他のファイルシステムをマウントするためのマウントポイントも含まれます。 -マウントポイントとは、 追加のファイルシステムと接続するためのディレクトリのことです (普通はルートファイルシステムにあります) 。 より詳細な説明は <<disk-organization>> の節にあります。 標準的なマウントポイントには [.filename]#/usr#, [.filename]#/var#, [.filename]#/tmp#, [.filename]#/mnt#, [.filename]#/cdrom# があります。 通常これらのディレクトリについては、 [.filename]#/etc/fstab# というファイル中のエントリが参照されます。 [.filename]#/etc/fstab# はさまざまなファイルシステムとマウントポイントの表であり、 システムが参照します。 [.filename]#/etc/fstab# に書かれたファイルシステムは `noauto` オプションが指定されていなければ、 起動時に man:rc[8] スクリプトによって自動的にマウントされます。 詳細は <<disks-fstab>> をご覧ください。 +マウントポイントとは、追加するファイルシステムを接続する先の親のファイルシステム (普通はルートファイルシステム) のディレクトリのことです。 +より詳細な説明は <<disk-organization>> の節にあります。 +標準的なマウントポイントには [.filename]#/usr/#, [.filename]#/var/#, [.filename]#/tmp/#, [.filename]#/mnt/# および [.filename]#/cdrom/# があります。 +通常これらのディレクトリについては、 [.filename]#/etc/fstab# というファイル中のエントリが参照されます。 +このファイルは、さまざまなファイルシステムとマウントポイントの表であり、システムが参照します。 +[.filename]#/etc/fstab# に書かれたファイルシステムは `noauto` オプションが指定されていなければ、起動時に man:rc[8] スクリプトによって自動的にマウントされます。 +詳細は <<disks-fstab>> の節をご覧ください。 -ファイルシステム構造を網羅した説明は man:hier[7] に書かれています。 ここでは、もっともよく使われるディレクトリについて簡単に 見るだけで十分でしょう。 +ファイルシステム構造を網羅した説明は man:hier[7] に書かれています。 +以下の表は、もっともよく使われるディレクトリの簡単な概要です。 [.informaltable] [cols="1,1", frame="none", options="header"] @@ -555,37 +579,40 @@ FreeBSD のディレクトリ構造は、 システム全体を理解するに |システム設定ファイルとスクリプト |[.filename]#/etc/defaults/# -|デフォルトのシステム設定ファイル; man:rc[8] 参照 +|デフォルトのシステム設定ファイル; 詳細については man:rc[8] 参照 |[.filename]#/etc/mail/# |man:sendmail[8] のようなメール転送エージェントの設定ファイル |[.filename]#/etc/namedb/# -|`named` 設定ファイル; man:named[8] 参照 +|`named` 設定ファイル; 詳細な説明は man:named[8] 参照 |[.filename]#/etc/periodic/# -|man:cron[8] 経由で毎日・毎週・毎月実行されるスクリプト; man:periodic[8] 参照 +|man:cron[8] 経由で毎日・毎週・毎月実行されるスクリプト; 詳細については man:periodic[8] 参照 |[.filename]#/etc/ppp/# -|`ppp` 設定ファイル; man:ppp[8] 参照 +|man:ppp[8] で説明されている `ppp` の設定ファイル |[.filename]#/mnt/# -|システム管理者が一時的なマウントポイントとしてよく使う 空のディレクトリ +|システム管理者が一時的なマウントポイントとしてよく使う空のディレクトリ |[.filename]#/proc/# -|プロセスファイルシステム; man:procfs[5] と man:mount_procfs[8] 参照 +|プロセスファイルシステム; 詳細については man:procfs[5] と man:mount_procfs[8] 参照 |[.filename]#/rescue/# -|緊急時のために静的にリンクされているプログラム; 詳しくは man:rescue[8] 参照 +|man:rescue[8] で説明されている緊急時のために静的にリンクされているプログラム |[.filename]#/root/# |`root` アカウントのホームディレクトリ |[.filename]#/sbin/# -|シングルユーザ環境とマルチユーザ環境の両方で重要な システムプログラムと管理ユーティリティ +|シングルユーザ環境とマルチユーザ環境の両方で重要なシステムプログラムと管理ユーティリティ |[.filename]#/tmp/# -|一時的なファイル。 通常、[.filename]#/tmp# の内容はシステムの再起動で失われます。 メモリファイルシステムはよく [.filename]#/tmp# にマウントされます。 これは man:rc.conf[5] の tmpmfs 関係の変数を使うか、 [.filename]#/etc/fstab# に設定項目を記入することで自動化できます。 詳しくは man:mdmfs[8] を参照して下さい。 +|システムの再起動では通常保存 _されない_ 一時的なファイル。 +メモリファイルシステムはよく [.filename]#/tmp# にマウントされます。 +これは man:rc.conf[5] の tmpmfs 関係の変数を使うか、 [.filename]#/etc/fstab# に設定項目を記入することで自動化できます。 +詳しくは man:mdmfs[8] を参照して下さい。 |[.filename]#/usr/# |大部分のユーザユーティリティとアプリケーション @@ -603,31 +630,28 @@ FreeBSD のディレクトリ構造は、 システム全体を理解するに |いろいろなユーティリティのデータファイル |[.filename]#/usr/libexec/# -|システムデーモンとシステムユーティリティ (他のプログラムから実行される) +|他のプログラムから実行されるシステムデーモンとシステムユーティリティ |[.filename]#/usr/local/# -|ローカルのプログラムやライブラリなど。 FreeBSD ports 構成のデフォルトインストール先としても使われます。 [.filename]#/usr/local# 内では、 man:hier[7] に書かれている [.filename]#/usr# のための一般構造が使われます。 例外は man ディレクトリで、 [.filename]#/usr/local/share# の下ではなく [.filename]#/usr/local# の下に直接置かれ、 ports 関係文書は [.filename]#share/doc/port# にあります。 +|ローカルのプログラムやライブラリなど。 FreeBSD ports フレームワークのデフォルトインストール先としても使われます。 [.filename]#/usr/local# 内では、 man:hier[7] に書かれている [.filename]#/usr# のための一般構造が使われます。 例外は man ディレクトリで、 [.filename]#/usr/local/share# の下ではなく [.filename]#/usr/local# の下に直接置かれ、ports 関係文書は [.filename]#share/doc/port# に置かれます。 |[.filename]#/usr/obj/# -|[.filename]#/usr/src# ツリーのビルドで作られる アーキテクチャ依存のターゲットツリー +|[.filename]#/usr/src# ツリーのビルドで作られるアーキテクチャ依存のターゲットツリー |[.filename]#/usr/ports/# -|FreeBSD Ports Collection (インストールしなくてもよい)。 +|FreeBSD Ports Collection (オプション)。 |[.filename]#/usr/sbin/# -|(ユーザが実行する) システムデーモンとシステムユーティリティ +|ユーザにより実行されるシステムデーモンおよびシステムユーティリティ |[.filename]#/usr/shared/# |アーキテクチャに依存しないファイル |[.filename]#/usr/src/# -|BSD のソースファイルまたはローカルのソースファイル、 あるいは両方 - -|[.filename]#/usr/X11R6/# -|X11R6 のプログラム、ライブラリなど (インストールしなくてもよい) +|BSD のソースファイルまたはローカルのソースファイル、あるいは両方 |[.filename]#/var/# -|ログ・一時的なファイル・スプールファイルなどいろいろな用途。 メモリファイルシステムは時々 [.filename]#/var# にマウントされます。 これは man:rc.conf[5] の varmfs 関係の変数を使うか、 [.filename]#/etc/fstab# に設定項目を記入することで自動化できます。 詳しくは man:mdmfs[8] を参照して下さい。 +|さまざまな用途のログ・一時的なファイル・スプールファイル。メモリファイルシステムは時々 [.filename]#/var# にマウントされます。 これは man:rc.conf[5] の varmfs 関係の変数を使うか、 [.filename]#/etc/fstab# に設定項目を記入することで自動化できます。 詳しくは man:mdmfs[8] を参照して下さい。 |[.filename]#/var/log/# |いろいろなシステムログファイル @@ -648,31 +672,48 @@ FreeBSD のディレクトリ構造は、 システム全体を理解するに [[disk-organization]] == ディスク構成 -ファイルを見つけるために FreeBSD が使用する構成の一番小さな単位はファイル名です。 ファイル名は、大文字と小文字を区別します。 このことは [.filename]#readme.txt# および [.filename]#README.TXT# が異なる二つのファイルであることを意味します。 FreeBSD はそのファイルがプログラム、または文書、 あるいはその他の形式かどうかを決定するために拡張子を使用しません。 - -ファイルはディレクトリ内に格納されます。 ディレクトリはファイルを一つも含んでいないかもしれせんし、 または数百のファイルを含んでいるかもしれません。 ディレクトリはまた別のディレクトリを含むことができます。 つまり、ディレクトリの階層構造を構築することができます。 このことにより、データ構造がはるかに簡単になります。 - -ファイルおよびディレクトリは、 必要な他のディレクトリ名とスラッシュ (`/`) を後に続けて ファイル名またはディレクトリ名を与えることによって参照されます。 [.filename]#foo# ディレクトリがあって、その中に [.filename]#bar# ディレクトリがあるとします。 そして、その中に [.filename]#readme.txt# があるとすると、 ファイルへのフルネーム、または_パス_は [.filename]#foo/bar/readme.txt# となります。 - -ディレクトリおよびファイルはファイルシステム内に格納されます。 どのファイルシステムは、そのファイルシステムのための _ルートディレクトリ_ とよばれる、 まさに頂点の位置にちょうど一つのディレクトリを含んでいます。 このルートディレクトリは他のディレクトリを含むことができます。 - -これまでのところ、これはあなたの使ったことのある他の OS とおそらく似ているかもしれません。少し違いがあります。 たとえば、MS-DOS(R) ではファイル名とディレクトリ名を分けるのに `\` を使います。 一方、Mac OS(R) では `:` を使います。 - -FreeBSD はパス内にドライブレターまたは他のドライブ名を使いません。 あなたは FreeBSD で [.filename]#c:/foo/bar/readme.txt# とは書かないでしょう。 - -その代わり、一つのファイルシステムは _ルートファイルシステム_として設計されています。 ルートファイルシステムのルートディレクトリは `/` として参照されます。それから、他のすべてのファイルシステムは、 ルートファイルシステム以下に _マウント_ されます。 あなたが FreeBSD システムでどんなに多くのディスクを使用しても、 すべてのディレクトリは、 同じディスクの一部であるように見えるので問題ありません。 - -`A`,`B` および `C` と呼ばれる三つのファイルシステムがあると仮定しましょう。 それぞれのファイルファイルシステムには一つのルートディレクトリがあり、 `A1`, `A2` と呼ばれている二つの他のディレクトリを含んでいます (同様に `B1`, `B2` および `C1`, `C2` があります)。 - -`A` をルートファイルシステムとします。 このディレクトリになにが含まれているか見るために `ls` コマンドを使うと、 `A1` および `A2` の二つのサブディレクトリが現れるでしょう。 ディレクトリツリーは以下のようになります。 +ファイルを見つけるために FreeBSD が使用する構成の一番小さな単位はファイル名です。 +ファイル名は、大文字と小文字を区別します。 +このことは [.filename]#readme.txt# および [.filename]#README.TXT# が異なる二つのファイルであることを意味します。 +FreeBSD はそのファイルがプログラム、または文書、あるいはその他の形式かどうかを決定するために拡張子を使用しません。 + +ファイルはディレクトリ内に格納されます。 +ディレクトリはファイルを一つも含んでいないかもしれせんし、または数百のファイルを含んでいるかもしれません。 +ディレクトリはまた別のディレクトリを含むことができるので、 +データを体系づけるディレクトリの階層構造を構築できます。 + +ファイルおよびディレクトリは、必要な他のディレクトリ名とスラッシュ (`/`) を後に続けてファイル名またはディレクトリ名を与えることによって参照されます。 +たとえば、[.filename]#foo# ディレクトリがあって、その中に [.filename]#bar# ディレクトリがあるとします。 +そして、その中に [.filename]#readme.txt# があるとすると、ファイルへのフルネーム、または _パス_ は [.filename]#foo/bar/readme.txt# となります。 +ファイルとディレクトリ名を分けるために `\` を使う Windows(R) とは違うことに注意してください。 +FreeBSD は、パスの中にドライブレターまたは他のドライブ名を使いません。 +たとえば、FreeBSD では [.filename]#c:\foo\bar\readme.txt# とは書きません。 + +ディレクトリおよびファイルはファイルシステム内に格納されます。 +どのファイルシステムも、そのファイルシステムのための _ルートディレクトリ_ とよばれる、まさに頂点の位置にちょうど一つのディレクトリを含んでいます。 +このルートディレクトリは他のディレクトリを含むことができます。 +一つのファイルシステムは _ルートファイルシステム_ または `/` として設計されています。 +すべてのファイルシステムは、ルートファイルシステム以下に _マウント_ されます。 +あなたが FreeBSD システムでどんなに多くのディスクを使用しても、 すべてのディレクトリは、同じディスクの一部であるように見えるので問題ありません。 + +`A`, `B` および `C` と呼ばれる三つのファイルシステムがあると仮定しましょう。 +それぞれのファイルファイルシステムには一つのルートディレクトリがあり、`A1`, `A2` と呼ばれている二つの他のディレクトリを含んでいます (同様に `B1`, `B2` および `C1`, `C2` があります)。 + +`A` をルートファイルシステムとします。 +このディレクトリになにが含まれているか見るために `ls` コマンドを使うと、`A1` および `A2` の二つのサブディレクトリが現れるでしょう。 +ディレクトリツリーは以下のようになります。 image::example-dir1.png[] -ファイルシステムはファイルシステム内のディレクトリにマウントしなければいけません。 それでは、`A1` ディレクトリに `B` ファイルシステムをマウントすると仮定します。 `B` のルートディレクトリは `A1` に置き換えられ、 そして `B` 内のディレクトリがそれに応じて現れます。 +ファイルシステムはマウント先のファイルシステム内のディレクトリにマウントしなければいけません。 +それでは、`A1` ディレクトリに `B` ファイルシステムをマウントすると仮定します。 +`B` のルートディレクトリは `A1` に置き換えられ、そして `B` 内のディレクトリがそれに応じて現れます。 image::example-dir2.png[] -`B1` または `B2` 内にあるどんなファイルも、必要なときに [.filename]#/A1/B1# または [.filename]#/A1/B2# で到達できます。 [.filename]#/A1# にあったすべてのファイルは一時的に隠されました。 それらは `B` が A から_アンマウント_されたら再び現れるでしょう。 +`B1` または `B2` 内にあるどんなファイルも、必要なときに [.filename]#/A1/B1# または [.filename]#/A1/B2# で到達できます。 +[.filename]#/A1# にあったすべてのファイルは一時的に隠されました。 +それらは `B` が A から _アンマウント_ されたら再び現れるでしょう。 もし `B` が `A2` にマウントされていたら、この図のようになります。 @@ -680,24 +721,28 @@ image::example-dir3.png[] そして、パスはそれぞれ [.filename]#/A2/B1# および [.filename]#/A2/B2# となるでしょう。 -ファイルシステムは互いのファイルシステム上にもマウントできます。 上記の最後の例に続けて、`C` ファイルシステム は `B` ファイルシステム内の `B1` ディレクトリ上にマウントできます。 次の図のようになります。 +ファイルシステムは互いのファイルシステム上にもマウントできます。 +上記の最後の例に続けて、`C` ファイルシステム は `B` ファイルシステム内の `B1` ディレクトリ上にマウントできます。 +次の図のようになります。 image::example-dir4.png[] -または `C` は `A1` の下の `A` ファイルシステムに直接マウントできます。 +または `C` を `A` ファイルシステムの `A1` ディレクトリの下に直接マウントできます。 image::example-dir5.png[] -もしあなたが MS-DOS(R) を使いなれているなら、 まったく同じではありませんが、これは `join` コマンドと 似ています。 +まったく同じではありませんが、これは MS-DOS(R) の `join` コマンドと似ています。 -これは、通常あなた自身が心配する必要のあるものではありません。 一般的に、FreeBSD をインストールするときにファイルシステムを作成し、 どこにマウントするか決定します。そして、 新しいディスクを追加しなければそれらを変更することはありません。 +通常は FreeBSD をインストールするときにファイルシステムを作成し、どこにマウントするか決定します。 +新しいディスクを追加することがなければ、それらを変更することはありません。 -一つの大きなファイルシステムを用意し、 他のファイルシステムを作成する必要としないことはまったくもって可能です。 この方法にはいくつかの短所と一つの利点があります。 +一つの大きなルートファイルシステムを用意し、他のファイルシステムを作成する必要としないことはまったくもって可能です。 +この方法にはいくつかの短所と一つの利点があります。 .マルチファイルシステムの利点 -* 異なったファイルシステムは異なった _マウントオプション_ を使用できます。 たとえば、注意深い考えなのですが、 ルートファイルシステムを読みだし専用でマウントして、 不注意によって重大なファイルを削除、 または編集できないようににすることができます。 また、[.filename]#/home# のようなユーザが書き込み可能なファイルシステムを他のファイルシステムと分けることによって、 _nosuid_ でマウントすることも可能になります。 このオプションは、ファイルシステムに記録されている _suid_/_guid_ の実行可能ビットを有効にしないので、安全性を高めることができるでしょう。 -* FreeBSD はファイルシステムがどのように使われているかによって、 自動的にファイルシステム上のファイルの配置を最適化します。 したがって、連続的に書き込まれた多くの小さなファイルが含まれているファイルシステムは、 より大きく少ないファイルが含まれているファイルシステムと異なる最適化をするでしょう。 一つの大きなファイルシステムを作成すると、 この最適化は成り立たなくなります。 -* FreeBSD のファイルシステムはトラブルが起きてもとても強固です。 しかしながら臨界点でのトラブルは、 ファイルシステムの構造にまだ損害を与えるかもしれません。 マルチファイルシステムへデータを分割しておくことで、 必要なときにバックアップからレストアすることをより容易にして、 まだシステムが回復するかもしれません。 +* 異なったファイルシステムは異なった _マウントオプション_ を使用できます。 たとえば、ルートファイルシステムを読みだし専用でマウントして、不注意によってユーザが重大なファイルを削除、または編集できないようにすることができます。 また、[.filename]#/home# のようなユーザが書き込み可能なファイルシステムを他のファイルシステムと分けることによって、 _nosuid_ でマウントすることが可能になります。 このオプションは、ファイルシステムに記録されている _suid_/_guid_ の実行可能ビットを有効にしないので、安全性を高めることができるでしょう。 +* FreeBSD はファイルシステムがどのように使われているかによって、自動的にファイルシステム上のファイルの配置を最適化します。 したがって、連続的に書き込まれた多くの小さなファイルが含まれているファイルシステムは、より大きく少ないファイルが含まれているファイルシステムと異なる最適化をするでしょう。 一つの大きなファイルシステムを作成すると、この最適化は成り立たなくなります。 +* FreeBSD のファイルシステムはトラブルが起きてもとても強固です。 しかしながら臨界点でのトラブルは、ファイルシステムの構造にまだ損害を与えるかもしれません。 マルチファイルシステムへデータを分割しておくことで、 必要なときにバックアップからレストアすることをより容易にして、まだシステムが回復するかもしれません。 .シングルファイルシステムの利点 * ファイルシステムは固定サイズです。 FreeBSD をインストールするときにファイルシステムを作成して、 固定サイズを割りあてたなら、 後になってそのパーティションをより大きくする必要があると気づくかもしれません。 パーティションのサイズを変更するには、 バックアップ、新しいサイズを指定したファイルシステムの再作成、 バックアップしたデータをリストアする作業が必要となるでしょう。 @@ -709,7 +754,10 @@ FreeBSD には、 man:growfs[8] コマンドがあります。 このコマン ファイルシステムはパーティション内に含まれています。 FreeBSD の UNIX(R) 遺産のために、 これは普段使われるパーティション (例えば MS-DOS(R) パーティション) という用語の意味とは違う意味を持っています。 それぞれのパーティションは `a` から `h` までの文字で区別されます。 それぞれのパーティションは、 一つのファイルシステムだけを含むことができます。 このことは、ファイルシステムがファイルシステムの階層上の典型的なマウントポイント、 または含まれているパーティションの文字によって記述されることを意味します。 -FreeBSD は _スワップ領域_ にもまたディスク領域を使用します。 スワップ領域は FreeBSD に _仮想メモリ_ を提供します。 これはあなたのコンピュータが、 実際に搭載している以上のメモリがあるかのように振舞います。 FreeBSD がメモリを使い果たしたときに、 現在使用されていないデータのいくつかをスワップ領域に移動し、 そのデータが必要となったときに (その他のデータをスワップ領域に移動させてから) メモリ内に移動しなおします。 +FreeBSD は _スワップ領域_ にもまたディスク領域を使用します。 +スワップ領域は FreeBSD に _仮想メモリ_ を提供します。 +これはあなたのコンピュータが、 実際に搭載している以上のメモリがあるかのように振舞います。 +FreeBSD がメモリを使い果たしたときに、現在使用されていないデータのいくつかをスワップ領域に移動し、そのデータが必要となったときに (その他のデータをスワップ領域に移動させてから) メモリ内に移動しなおします。 いくつかのパーティションはある慣習と関係づけられています。 @@ -732,19 +780,35 @@ FreeBSD は _スワップ領域_ にもまたディスク領域を使用しま |`d` パーティションは、 それに関連づけられた特別な意味を持っていましたが、 今は無いので、普通のパーティションとして動作するでしょう。 |=== -ファイルシステムを含んだそれぞれのパーティションは、FreeBSD が _スライス_ と呼ぶものの中に格納されます。 スライスは FreeBSD の用語で、 普通はパーティションと呼ばれるものです。 もう一度言及しますが、これは FreeBSD の UNIX(R) 背景によるものです。 スライスは 1 から 4 までの番号がつけられます。 +ファイルシステムを含んだそれぞれのパーティションは、FreeBSD が _スライス_ と呼ぶものの中に格納されます。 +スライスは FreeBSD の用語で、 普通はパーティションと呼ばれるものです。 +もう一度言及しますが、これは FreeBSD の UNIX(R) 背景によるものです。 +スライスは 1 から 4 までの番号がつけられます。 -スライス番号は 1 から始まり `s` を前につけられて、デバイス名の後に続きます。 したがって、"da0_s1_" は一番目の SCSI ドライブ上の 一番目のスライスです。 ディスク上に四つの物理スライスだけが存在できます。しかし、 適切な種類の物理スライス内に論理スライスをもつことができます。 これらの拡張されたスライス番号は 5 から始まります。したがって、 "ad0_s5_" は、一番目の IDE ディスク上の一番目の拡張スライスです。 これらのデバイスは、 スライスを占有することを予期するファイルシステムによって使用されます。 +スライス番号は 1 から始まり `s` を前につけられて、デバイス名の後に続きます。 +したがって、"da0_s1_" は一番目の SCSI ドライブ上の 一番目のスライスです。 +ディスク上に四つの物理スライスだけが存在できます。 +しかし、 適切な種類の物理スライス内に論理スライスをもつことができます。 +これらの拡張されたスライス番号は 5 から始まります。 +したがって、 "ad0_s5_" は、一番目の IDE ディスク上の一番目の拡張スライスです。 +これらのデバイスは、 スライスを占有することを予期するファイルシステムによって使用されます。 -スライスや "危険な専用" の物理ドライブ、 そして他のドライブは `a` から `h` までの文字として表される _パーティション_ を含んでいます。 この文字はデバイス名に追加されます。したがって、 "da0_a_" は一番目の "危険な専用" da ドライブ上の a パーティションです。 "ad1s3_e_" は、 二番目の IDE ディスク上の 三番目のスライス内にある五番目のパーティションです。 +スライスや "危険な専用" の物理ドライブ、 そして他のドライブは `a` から `h` までの文字として表される _パーティション_ を含んでいます。 +この文字はデバイス名に追加されます。 +したがって、 "da0_a_" は一番目の "危険な専用" da ドライブ上の a パーティションです。 +"ad1s3_e_" は、 二番目の IDE ディスク上の 三番目のスライス内にある五番目のパーティションです。 -最後に、システム上のそれぞれのディスクは識別されます。 ディスク名はどの種類のディスクであるかを示す記号ではじまり、 どのディスクかを示す数字が続きます。 スライスとは違いディスクの番号づけは 0 から始まります。 共通の記号は <<basics-dev-codes>> に示されます。 +最後に、システム上のそれぞれのディスクは識別されます。 +ディスク名はどの種類のディスクであるかを示す記号ではじまり、どのディスクかを示す数字が続きます。 +スライスとは違いディスクの番号づけは 0 から始まります。 +共通の記号は <<basics-dev-codes>> に示されます。 -パーティションを参照するときには、 FreeBSD はパーティションを含むスライスおよびパーティションも指定することを必要とします。 そしてスライスを参照するときはディスク名も参照しないといけません。 したがって、ディスク名、`s`、スライス番号、 そしてパーティション文字を並べることによってパーティションを参照します。 <<basics-disk-slice-part>>に例があります。 +パーティションを参照するときには、 ディスク名、`s`、スライス番号、 そしてパーティション文字を含めてください。 +<<basics-disk-slice-part>> に例があります。 -<<basics-concept-disk-model>> は理解をより明らかにすることを助けるための、 ディスク構成の概念のモデルを示します。 +<<basics-concept-disk-model>> は、ディスク構成の概念のモデルを示します。 -FreeBSD をインストールするために、 まずはじめにディスクスライスの設定をし、 次に FreeBSD に用いるスライス内のパーティションを作成し、 それからそれぞれのパーティション内にファイルシステム (またはスワップ領域) を作成し、 ファイルシステムがどこにマウントされるか決定しなければいけません。 +FreeBSD をインストールする際には、ディスクスライスの設定し、次に FreeBSD に用いるスライス内のパーティションを作成し、それからそれぞれのパーティション内にファイルシステムまたはスワップ領域を作成し、 ファイルシステムがどこにマウントされるか決定しなければいけません。 [[basics-dev-codes]] .ディスクデバイス記号 @@ -776,7 +840,7 @@ FreeBSD をインストールするために、 まずはじめにディスク [.informaltable] [cols="1,1", frame="none", options="header"] |=== -| 記号 +| 名前 | 意味 |`ad0s1a` @@ -802,18 +866,21 @@ image::disk-layout.png[] [[mount-unmount]] == ファイルシステムのマウントとアンマウント -ファイルシステムは [.filename]#/# をルート (根) とする木構造として考えると視覚的に理解しやすいでしょう。 ルートディレクトリにある [.filename]#/dev# や [.filename]#/usr#、 その他のディレクトリは枝に相当し、 それらには、[.filename]#/usr/local# などのように、さらに枝分かれすることができます。 +ファイルシステムは [.filename]#/# をルート (根) とする木構造として考えると視覚的に理解しやすいでしょう。 +ルートディレクトリにある [.filename]#/dev# や [.filename]#/usr#、その他のディレクトリは枝に相当し、それらには、[.filename]#/usr/local# などのように、さらに枝分かれすることができます。 -さまざまな理由がありますが、 ディレクトリをいくつかの異なるファイルシステム上に構築するのが良いでしょう。 たとえば [.filename]#/var# には、 [.filename]#log/# や [.filename]#spool/# など、さまざまな種類の一時ファイルを置くディレクトリがあるため、 あふれてしまう可能性があります。 ルートファイルシステムをあふれさせるのは得策ではありませんので、 普通は [.filename]#/var# を [.filename]#/# から分離します。 +さまざまな理由がありますが、 ディレクトリをいくつかの異なるファイルシステム上に構築するのが良いでしょう。 +たとえば [.filename]#/var# には、 [.filename]#log/# や [.filename]#spool/# など、さまざまな種類の一時ファイルを置くディレクトリがあるため、あふれてしまう可能性があります。 +ルートファイルシステムをあふれさせるのは得策ではありませんので、普通は [.filename]#/var# を [.filename]#/# から分離します。 -また、次のような場合も、ディレクトリツリーを 別のファイルシステムに置く理由として良くあげられます。 それは、たとえば物理的に別のディスクにディレクトリツリーを置く場合、 crossref:advanced-networking[network-nfs,ネットワークファイルシステム (Network File System)] や CDROM ドライブのような別の仮想ディスクに置くという場合です。 +また、次のような場合も、ディレクトリツリーを別のファイルシステムに置く理由として良くあげられます。 +それは、たとえば物理的に別のディスクにディレクトリツリーを置く場合、 crossref:advanced-networking[network-nfs, ネットワークファイルシステム (Network File System)] や CDROM ドライブのような別の仮想ディスクに置くという場合です。 [[disks-fstab]] === [.filename]#fstab# ファイル -[.filename]#/etc/fstab# に書かれているファイルシステムは (`noauto` オプションがなければ) crossref:boot[boot,起動プロセス]の途中で 自動的にマウントされます。 - -[.filename]#/etc/fstab# ファイルは、 次のような書式で書かれた行のリストになっています。 +[.filename]#/etc/fstab# に書かれているファイルシステムは、`noauto` オプション指定されているエントリを除いて crossref:boot[boot,起動プロセス] の途中で自動的にマウントされます。 +このファイルは、 次のような書式で書かれたエントリを含んでいます。 [.programlisting] .... @@ -821,10 +888,10 @@ device /mount-point fstype options dumpfreq passno .... `device`:: -デバイスの名前 (存在していなければなりません)。 crossref:disks[disks-naming,「デバイス名」] に説明があります。 +デバイス名。crossref:disks[disks-naming,「デバイス名」] に説明があります。 `mount-point`:: -ファイルシステムがマウントするディレクトリの名前 (存在していなければなりません)。 +ファイルシステムがマウントするディレクトリ。 `fstype`:: man:mount[8] に渡されるファイルシステムタイプ。 FreeBSD ファイルシステムのデフォルトは `ufs` です。 @@ -836,23 +903,23 @@ man:mount[8] に渡されるファイルシステムタイプ。 FreeBSD ファ これは man:dump[8] が使うもので、 どのファイルシステムにダンプが必要なのかを決めます。 この項目がなければ、0 であるものとみなされます。 `passno`:: -これはファイルシステムをチェックする順番を決めます。 ファイルシステムチェックを飛ばしたいファイルシステムには、 `passno` を 0 に設定してください。 ルートファイルシステム (どれよりも先にチェックしなければなりません) は `passno` を 1 に設定してください。 他のファイルシステムの `passno` は 1 以上に設定してください。 同じ `passno` のファイルシステムがあった場合、 man:fsck[8] は可能であれば並行してファイルシステムのチェック を行なおうとします。 +これはファイルシステムをチェックする順番を決めます。 +ファイルシステムチェックを飛ばしたいファイルシステムには、`passno` を 0 に設定してください。 ルートファイルシステムはどれよりも先にチェックする必要があり、`passno` は 1 に設定してください。 他のファイルシステムの `passno` は 1 以上に設定してください。 同じ `passno` のファイルシステムがあった場合、 man:fsck[8] は可能であれば並行してファイルシステムのチェック を行なおうとします。 -[.filename]#/etc/fstab# ファイルの書式やオプションに関しての詳細は、 man:fstab[5] をご覧ください。 +[.filename]#/etc/fstab# の書式やオプションに関しての詳細は、 man:fstab[5] をご覧ください。 [[disks-mount]] === `mount` コマンド -man:mount[8] コマンドは、 ファイルシステムをマウントするために使われるものです。 - -基本的には、次のように使います。 +ファイルシステムは man:mount[8] を用いてマウントされます。 +基本な構文は以下のようになります。 [source,shell] .... # mount device mountpoint .... -man:mount[8] マニュアルページにはたくさんのオプションが書かれていますが、 いちばんよく使われるのは次のものです。 +man:mount[8] で説明されているように、このコマンドはたくさんのオプションを提供しますが、最もよく使われるのは次のものです。 .マウントオプション `-a`:: @@ -866,11 +933,10 @@ man:mount[8] マニュアルページにはたくさんのオプションが書 `-r`:: ファイルシステムを読み込み専用でマウントします。 -これは `ro` 引数を `-o` オプションに使うのと同じです。 +`-o ro` を使うのと同じです。 `-t` _fstype_:: -ファイルシステムを指定のファイルシステムタイプでマウントします。 または、`-a` を使った場合、 指定したタイプのファイルシステムのみマウントします。 -+ +指定のファイルシステムタイプでマウントします。 または、`-a` を使った場合、 指定したタイプのファイルシステムのみマウントします。 デフォルトのファイルシステムタイプは "ufs" です。 `-u`:: @@ -882,7 +948,7 @@ man:mount[8] マニュアルページにはたくさんのオプションが書 `-w`:: ファイルシステムを読み書き可能にマウントします。 -`-o` には、 次のようなオプションを複数カンマで区切って指定します。 以下に挙げるのはその一部です。 +`-o` には、 次のようなオプションを複数カンマで区切って指定できます。 noexec:: そのファイルシステム上のバイナリの実行を禁止します。 セキュリティのために有用なオプションです。 @@ -893,22 +959,42 @@ nosuid:: [[disks-umount]] === `umount` コマンド -man:umount[8] コマンドは、パラメータとしてマウントポイントの一つ、 デバイス名、もしくは `-a` や `-A` といったオプションを取ります。 +ファイルシステムをアンマウントするには、man:umount[8] を使ってください。 +このコマンドは、パラメータとしてマウントポイントの一つ、 デバイス名、もしくは `-a` や `-A` といったオプションを取ります。 -いずれの形式でも `-f` で強制的なアンマウントを行ない、 `-v` で詳細な出力を出します。 ただしほとんどの場合、`-f` は使わないほうがよいでしょう。 強制的にファイルシステムをアンマウントすると、 計算機がクラッシュしたりファイルシステム上部のデータが 破壊されたりする恐れがあるためです。 +いずれの形式でも `-f` で強制的なアンマウントを行ない、 `-v` で詳細な出力を出します。 +ただしほとんどの場合、`-f` は使わないほうがよいでしょう。 +計算機がクラッシュしたりファイルシステム上部のデータが破壊されたりする恐れがあります。 -オプション `-a` と `-A` はマウントされているファイルシステムすべてをアンマウントするのに使います。 `-t` にファイルシステムタイプを指定すると、 指定されたものだけがアンマウントされます。 また、`-A` を使うとルートファイルシステムはアンマウントしません。 + +マウントされているファイルシステムすべてをアンマウントするには、`-a` と `-A` を使ってください。 +`-t` にファイルシステムタイプを指定すると、指定されたものだけがアンマウントされます。 +`-A` を使うとルートファイルシステムはアンマウントしません。 [[basics-processes]] == プロセス -FreeBSD はマルチタスクのオペレーティングシステムです。 つまり、1つ以上のプログラムがあたかも同時に動いているかのように見える、 ということです。動作中のプログラムはそれぞれ _プロセス_ と呼ばれます。 コマンドを実行すると、最低でも1つの新しいプロセスがスタートします。 システムを正常に機能させるために常に動作しているシステムプロセスもたくさんあります。 +FreeBSD はマルチタスクのオペレーティングシステムです。 +動作中のプログラムはそれぞれ _プロセス_ と呼ばれます。 +すべてのコマンドは実行すると、最低でも 1 つの新しいプロセスを開始します。 +FreeBSD により実行されているシステムプロセスもたくさんあります。 -各プロセスは_プロセス ID_、もしくは _PID_ と呼ばれる数字でただ一つに識別されます。 また、ファイルのように各プロセスには所有者とグループがあります。 所有者とグループの情報は、 これまでに見たファイル許可属性を用い、 そのプロセスが開けるファイルやデバイスを決定するために使われます。 多くのプロセスには親プロセスもあります。 親プロセスとは、そのプロセスをスタートさせたプロセスのことです。 例えば、シェルにコマンドを打ち込んでいるときはシェルがプロセスで、 動かすコマンドもまたどれもプロセスです。 このようにして起動するプロセスはそれぞれシェルが親プロセスになります。 これの例外は man:init[8] という特別なプロセスです。 `init` は常に最初のプロセスなので、 PID は必ず 1 になります。 `in it` は FreeBSD がスタートするときカーネルによって自動的に起動されます。 +各プロセスは _プロセス ID_ ( _PID_ ) と呼ばれる数字でただ一つに識別されます。 +ファイルのように各プロセスには所有者とグループがあり、 +所有者とグループの許可属性は、そのプロセスが開けるファイルやデバイスを決定するために使われます。 +多くのプロセスには親プロセスもあります。 +親プロセスとは、そのプロセスをスタートさせたプロセスのことです。 +例えば、シェルがプロセスで、シェルから起動されるコマンドは、シェルを親プロセスとするプロセスとなります。 +例外は man:init[8] という特別なプロセスです。 +`init` は FreeBSD がスタートするときに起動される最初のプロセスで、PID は常に 1 です。 -man:ps[1] と man:top[1] という2つのコマンドが システム上のプロセスを確認するために特に便利です。 `ps` コマンドは現在動作中のプロセスのリストを見るために使い、 PID やプロセスが使っているメモリの量、 どういうコマンドラインで起動されたのか、 などを表示させることができます。 `top` コマンドは動作中の全てのプロセスを表示し、 数秒ごとに表示を更新するので、 計算機がなにをしているのかインタラクティブに知ることができます。 +システム上のプロセスを確認するには、man:ps[1] および man:top[1] を使ってください。 +現在動作中のプロセスのリスト、プロセスの PID やプロセスが使っているメモリの量、どういうコマンドラインで起動されたのかなどを表示させるには、`ps` を使ってください。 +`top` コマンドは動作中の全てのプロセスを表示します。 +数秒ごとに表示を更新するので、 計算機がなにをしているのかインタラクティブに知ることができます。 -デフォルトでは、`ps` は動作中かつ所有者が自分のコマンドのみを表示します。 例えば: +デフォルトでは、`ps` はユーザにより動作中かつ所有のコマンドのみを表示します。 +例えば: [source,shell] .... @@ -918,7 +1004,6 @@ man:ps[1] と man:top[1] という2つのコマンドが システム上のプ 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14) 37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14) 48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi -48730 p0 IW 0:00.00 (dns helper) (navigator-linux-) 72210 p0 R+ 0:00.00 ps 390 p1 Is 0:01.14 tcsh 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y @@ -932,9 +1017,20 @@ man:ps[1] と man:top[1] という2つのコマンドが システム上のプ 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish .... -この例で分かるとおり、 man:ps[1] の出力はいくつかの行に整形されています。 `PID` は先ほど見たプロセス ID です。 PID は 1 から順に 99999 まで割り当てられ、 足りなくなると最初に戻って使い回されます (使用中の PID は割り当てられません) 。 `TT` の列はプログラムが動いている tty を示します。 差し当たって無視してもかまわないでしょう。 `STAT` はプログラムの状態を示しますが、 これもまた無視してよいでしょう。 `TIME` はプログラムがその CPU 上で動いている時間の長さです- 通常はプログラムをスタートさせたときからの経過時間ではありません。 CPU 上で時間を使う必要があるまでかなりの時間を費すようなプログラムもあるからです。 最後に、`COMMAND` はそのプログラムを起動するのに使われたコマンドラインとなります。 +man:ps[1] の出力はいくつかの列に整形されています。 +`PID` の列はプロセス ID を表示します。 +PID は 1 から順に 99999 まで割り当てられ、その後足りなくなると最初に戻って使い回されます。ただし、使用中の PID には割り当てられません。 +`TT` の列はプログラムが動いている tty を示し、`STAT` はプログラムの状態を示します。 +`TIME` はプログラムがその CPU 上で動いている時間の長さです。 +通常はプログラムをスタートさせたときからの経過時間ではありません。 +多くのプログラムは、CPU 上で時間を使う必要があるまでかなりの時間を費すためです。 +最後に、`COMMAND` はそのプログラムを起動するのに使われたコマンドとなります。 -man:ps[1] は表示する情報を変えるためのオプションをたくさんサポートしています。 いちばん便利なのは `auxww` でしょう。 `a` は自分のプロセスだけではなく、 動作中のプロセス全部についての情報を表示します。 `u` はプロセスの所有者の名前をメモリ使用量と同様に表示します。 `x` はデーモンプロセスについての情報を表示し、 `ww` で、スクリーンに入りきらないほど長くなったコマンドラインでも省略せず、 man:ps[1] に各プロセスの全コマンドラインを表示させます。 +man:ps[1] は表示する情報を変えるためのオプションをたくさんサポートしています。 +いちばん便利なのは `auxww` でしょう。 +`a` はすべてのユーザの動作中のプロセス全部についての情報を表示します。 +`u` はプロセスの所有者の名前をメモリ使用量と同様に表示します。 +`x` はデーモンプロセスについての情報を表示し、`ww` で、スクリーンに入りきらないほど長くなったコマンドラインでも省略せず、man:ps[1] に各プロセスの全コマンドラインを表示させます。 man:top[1] の出力も同様です。 例は以下の通りです。 @@ -958,42 +1054,74 @@ Swap: 256M Total, 38M Used, 217M Free, 15% Inuse ... .... -出力は2つのセクションに分かれています。 ヘッダ (最初の 5 行です) は動作している最新のプロセスの PID、 システムの平均負荷 (システムがどれくらい忙しいかの指標)、 システムの稼働時間 (最後の再起動からの時間) と現在の時刻を示します。 ヘッダの中の他の数字は動作中のプロセスの数 (この場合 47 ですね)、 使われているメモリとスワップ領域の量、 そしてシステムが異なる CPU 状態に消費した時間と関係します。 +出力は2つのセクションに分かれています。 +ヘッダ (最初の 5 行です) は動作している最新のプロセスの PID、システムの平均負荷 (システムがどれくらい忙しいかの指標)、システムの稼働時間 (最後の再起動からの時間) と現在の時刻を示します。 +ヘッダの中の他の数字は動作中のプロセスの数 (この場合 47 ですね)、使われているメモリとスワップ領域の量、そしてシステムが異なる CPU 状態に消費した時間と関係します。 -その下には man:ps[1] の出力と同じような情報を持った行が続きます。 前と同様 PID にユーザ名、消費 CPU 時間と実行中のコマンドを知ることができます。 man:top[1] を使うとデフォルトでプロセスが使っているメモリ容量も分かります。 メモリ使用量の欄は2項目に分かれており、 一方は合計使用量、 そしてもう一方は実使用量です-合計使用量はアプリケーションが必要としているメモリ量で、 実使用量はその時点で実際に使われているメモリ量です。 この例では、man:getenv[3] がだいたい 30 MB の RAM を必要としていますが、 いまのところ 9 MB しか使っていないことが分かります。 +ヘッダの下には、PID、ユーザ名、消費 CPU 時間とプロセスを起動したコマンドといった man:ps[1] の出力と同じような情報を持った行が続きます。 +man:top[1] を使うとデフォルトでプロセスが使っているメモリ容量を表示します。 +メモリ使用量の欄は 2 項目に分かれており、 一方は合計使用量、 そしてもう一方は実使用量です。 +合計使用量はアプリケーションが必要としているメモリ量で、実使用量はその時点で実際に使われているメモリ量です。 +この例では、man:getenv[3] がだいたい 30 MB の RAM を必要としていますが、 いまのところ 9 MB しか使っていないことが分かります。 -man:top[1] は自動的に2秒ごとに画面を更新します。 `s` オプションを使えば更新間隔を変更することができます。 +man:top[1] は自動的に 2 秒ごとに画面を更新します。 +`-s` 使うと更新間隔を変更することができます。 [[basics-daemons]] == デーモン、シグナルとプロセス終了 -エディタを使っている場合、エディタを操作するのは簡単です。 ファイルを開く、などと動かせばよいのです。 このように操作できるのは、エディタにそういった機能があり、 かつエディタが_端末_に関連づけられているからです。 一方、ユーザから始終入力があるように設計されていないプログラムもあり、 そういったプログラムは最初から端末と切り離されます。 例えば、ウェブサーバは一日中ウェブのリクエストばかり処理するので、 通常全く入力を必要としません。 サイトからサイトへとメールを転送するプログラムも、 こういった種類のアプリケーションの一例です。 - -このようなプログラムは、_デーモン_と呼ばれます。 デーモンはギリシャ神話の登場人物で、 善でも悪でもなく、大雑把にいうと、 人間のために役立つことをしてくれる小さな妖精さんです。 今日の便利なウェブサーバやメールサーバととてもよく似ていますね。 このため、長い間 BSD のマスコットはスニーカーをはいてフォークを携えた かわいらしい姿のデーモンなのです。 - -通常デーモンとして動作するプログラムには末尾に "d" を持った名前をつける慣習があります。 BIND は Berkeley Internet Name Domain ですが、 実際実行されるプログラムは `named` という名前です。 Apache ウェブサーバのプログラムは `httpd` と呼ばれ、 ラインプリンタスプーリングデーモンは `lpd`、 などなどです。 これは単なる慣習で、しっかりがっちりとしたルールではありません。 例えば、Sendmail アプリケーションの主なメールデーモンは `sendmail` という名前で、 連想しそうな `maild` ではありません。 - -時々、デーモンプロセスと通信したいときがあります。 一つの方法として、それ (に限らずどんな動作中のプロセスでも) に _シグナル_と呼ばれるものを送信する方法です。 送信可能なシグナルはたくさんあります-特別な意味があるものもあれば、 アプリケーションによって解釈されるものもありますし、 アプリケーションがシグナルをどう解釈するかは そのアプリケーションの文章を読めば分かるでしょう。 自分が持っているプロセスにしかシグナルを送ることはできません。 他人のプロセスに man:kill[1] や man:kill[2] を使ってシグナルを送っても、許可されないでしょう。 これの例外は `root` ユーザで、 ルートユーザは誰のプロセスでもシグナルを送ることができます。 - -FreeBSD もアプリケーションにシグナルを送ることがあります。 アプリケーションを下手に書くと、 予想外のメモリにアクセスしようとするので、 FreeBSD がプロセスに _セグメンテーション違反_ シグナル (`SIGSEGV`) を送ります。 ある程度の時間が経ったら man:alarm[3] システムコールを使って警告してもらうようなアプリケーションには、 警告シグナル (`SIGALRM`) が送信される、 などです。 - -プロセスを止めるためには2つのシグナル、 `SIGTERM` か `SIGKILL` を使います。 `SIGTERM` は穏かにプロセスを終了させる方法です。 プロセスはシグナルを_受け取る_ことができ、 終了させたいのだなということを理解し、 開いているログファイルを全部を閉じ、 一般的に終了前にしていたことを終えることができます。 中断できない処理の途中だと、`SIGTERM` をプロセスが無視することもあるかもしれません。 - -プロセスは `SIGKILL` を無視することができません。 これは、"なにをしていようが構わないから今すぐ止まれ" というシグナルです。 プロセスに `SIGKILL` を送ると、 FreeBSD はそのプロセスをそこで止めます。 - -使う可能性のあるシグナルは、他に `SIGHUP`、`SIGUSR1`、と `SIGUSR2` があります。 これらは一般的な用途のシグナルで、 このシグナルが送信されたときアプリケーションによって別のことをします。 - -ウェブサーバの設定ファイルを変更したとしましょう-ウェブサーバに新しい設定を再読み込みさせたいですね。 `httpd` を止めて再起動することもできますが、 そうするとウェブサーバは一瞬ながら停止してしまいますし、 ちょっとでも止まってほしくないこともあるでしょう。 ほとんどのデーモンは `SIGHUP` シグナルに対して設定ファイルを再読み込みする反応を返すよう書かれています。 従って、`httpd` を止めて再起動する代わりに、 `SIGHUP` シグナルを送りましょう。 これらのシグナルへの標準的な反応というものがないために、 デーモンごとに行動が違うので、 疑問があれば必ずそのデーモンの文書を読んでください。 - -man:kill[1] コマンドを使って送るシグナルはこの例をご覧ください。 +エディタを使っている場合、エディタを操作してファイルを開くのは簡単です。 +このように操作できるのは、エディタにそういった機能があり、 かつエディタが _端末_ に関連づけられているからです。 +一方、ユーザから始終入力があるように設計されていないプログラムもあり、そういったプログラムは最初から端末と切り離されます。 +例えば、ウェブサーバはユーザからの入力ではなくウェブのリクエストを処理します。 +メールサーバも、 こういった種類のアプリケーションの一例です。 + +このようなプログラムは、 _デーモン_ と呼ばれます。 +デーモンはギリシャ神話から来ており、目に見えないように役立つことをしてくれる善でも悪でもない実体を表します。 +このため、BSD のマスコットはスニーカーをはいてフォークを携えたかわいらしい姿のデーモンなのです。 + +通常デーモンとして動作するプログラムには末尾に "d" を持った名前をつける慣習があります。 +BIND は Berkeley Internet Name Domain ですが、 実際実行されるプログラムは `named` です。 +また、Apache ウェブサーバのプログラムは `httpd`、 ラインプリンタスプーリングデーモンは `lpd` です。 +これは単なる命名に関する慣習です。 +例えば、Sendmail アプリケーションの主なメールデーモンは `sendmail` で、`maild` ではありません。 + +デーモンや動作中のプロセスと通信する一つの方法は、man:kill[1] を用いて _シグナル_ を送信する方法です。 +送信可能なシグナルはたくさんあります。 +特別な意味があるものもあれば、アプリケーションの文章に説明されているものもあります。 +ユーザは自分が所有者となっているプロセスにのみシグナルを送ることができます。 +他人のプロセスにシグナルを送ると、permission denied というエラーになるでしょう。 +この例外は `root` ユーザで、 ルートユーザは誰のプロセスに対してもシグナルを送ることができます。 + +FreeBSD もプロセスにシグナルを送ることができます。 +アプリケーションを下手に書いてしまい、予想外のメモリにアクセスしようとすると、FreeBSD はプロセスに _セグメンテーション違反_ シグナル (`SIGSEGV`) を送ります。 +ある程度の時間が経ったら man:alarm[3] システムコールを使って警告してもらうようなアプリケーションには、警告シグナル (`SIGALRM`) が送信されます。 + +プロセスを止めるためには2つのシグナル、`SIGTERM` か `SIGKILL` を使います。 +`SIGTERM` は穏かにプロセスを終了させる方法です。 +プロセスはシグナルを受け取ることができ、開いているすべてのログファイルを閉じ、終了前にしていたことを終えるように試みることができます。 +中断できない処理の途中だと、`SIGTERM` をプロセスが無視することもあるかもしれません。 + +プロセスは `SIGKILL` を無視することができません。 +これは、"なにをしていようが構わないから今すぐ止まれ" というシグナルです。 +プロセスに `SIGKILL` を送ると、プロセスは通常その時点で止まります。 + +他に良く使われるシグナルには、`SIGHUP`、`SIGUSR1` と `SIGUSR2` があります。 +これらは一般的な用途のシグナルで、このシグナルが送信されたときの応答は、アプリケーション毎に異なります。 + +例として、ウェブサーバの設定ファイルを変更後、ウェブサーバに設定を再読み込みさせる必要があります。 +`httpd` を再起動するとウェブサーバは一瞬ながら停止してしまいます。 +その代わりに `SIGHUP` シグナルを送りましょう。 +デーモンごとに行動が違うので、`SIGHUP` が期待する結果となるように、そのデーモンの文書を読んで確認してください。 [.procedure] ==== *Procedure: プロセスにシグナルを送る* -この例では、man:inetd[8] にシグナルを送る方法を示します。 `inetd` の設定ファイルは [.filename]#/etc/inetd.conf# で、 `inetd` は `SIGHUP` が送信されるとこの設定ファイルを再読み込みします。 +この例では、man:inetd[8] にシグナルを送る方法を示します。 +`inetd` の設定ファイルは [.filename]#/etc/inetd.conf# で、`inetd` は `SIGHUP` が送信されるとこの設定ファイルを再読み込みします。 -. man:pgrep[1] を使ってシグナルを送りたいプロセスのプロセス ID を調べます。 +. man:pgrep[1] を使ってシグナルを送りたいプロセスの PID を調べます。この例では man:inetd[8] の PID は 198 です。 + [source,shell] .... @@ -1001,8 +1129,7 @@ man:kill[1] コマンドを使って送るシグナルはこの例をご覧く 198 inetd .... + -この例では man:inetd[8] の PID は 198 であることが分かります。 -. man:kill[1] を使ってシグナルを送ります。 man:inetd[8] は `root` で起動されているために、 まず man:su[1] を使って `root` にならなければなりません。 +. man:kill[1] を使ってシグナルを送ります。 man:inetd[8] は `root` が所有しているため、まず man:su[1] を使って `root` になってください。 + [source,shell] .... @@ -1011,36 +1138,58 @@ Password: # /bin/kill -s HUP 198 .... + -大部分の UNIX(R) コマンドと同じく、 成功したら man:kill[1] は何の出力も表示しません。 自分のものではないプロセスにシグナルを送ると、 `kill: _PID_: Operation not permitted` と表示されます。 PID を打ち間違えると、 悪いことに間違ったプロセスにシグナルを送ってしまうか、 もしくは運がよければその時点で使われていない PID にシグナルを送ったことになり、`kill: _PID_: No such process` と表示されます。 +大部分の UNIX(R) コマンドと同じく、 成功したら man:kill[1] は何の出力も表示しません。 自分のものではないプロセスにシグナルを送ると、代わりに `kill: _PID_: Operation not permitted` と表示されます。 PID を打ち間違えると、間違ったプロセスにシグナルを送ってしまい悪い結果になってしまったり、その時点で使われていない PID にシグナルを送ったことになり、`kill: _PID_: No such process` とエラーが表示されます。 [NOTE] .なぜ `/bin/kill` を使うんでしょう? ====== -多くのシェルは `kill` コマンドを組み込みコマンドとして備えています。 つまり、[.filename]#/bin/kill# を実行するのではなく、 シェルが直接シグナルを送ります。 これはとても便利なのですが、 シェルが違うと送るシグナルの名前の指定の仕方が違います。 シェルによって異なるシグナルの指定の仕方を全部覚えようとはせずに、 `/bin/kill ...` コマンドを直接使うほうが簡単です。 +多くのシェルは `kill` を組み込みコマンドとして備えています。 +つまり、[.filename]#/bin/kill# を実行するのではなく、シェルが直接シグナルを送ります。 +シェルが違うと送るシグナルの名前の指定の仕方が違うことに注意してください。 +シェルによって異なるシグナルの指定の仕方を全部覚えようとはせずに、 `/bin/kill ...` コマンドを直接使うほうが簡単です。 ====== ==== -他のシグナルの送り方はほとんど同じで、 コマンドラインの `TERM` や `KILL` を必要に応じて変えるだけです。 +他のシグナルを送る場合は、コマンドラインの `TERM` や `KILL` を必要に応じて置き換えてください。 [IMPORTANT] ==== -システム上のランダムプロセスを終了させるのはよくありません。 特に、プロセス ID が 1 の man:init[8] は特別です。 `/bin/kill -s KILL 1` を使うといとも簡単にシステムをシャットダウンさせることができます。 kbd:[Return] を押す_前_に man:kill[1] を実行する引数を二重にチェックする_癖_をつけてください。 +システム上のランダムプロセスを終了させるのはよくありません。 +特に、PID が 1 の man:init[8] は特別です。 +`/bin/kill -s KILL 1` は推奨されていませんが、実行するといとも簡単にシステムをシャットダウンさせることができます。 +kbd:[Return] を押す _前_ に man:kill[1] を実行する引数を二重にチェックする _癖_ をつけてください。 ==== [[shells]] == シェル -FreeBSD では日々の作業のほとんどは、 「シェル」と呼ばれるコマンドラインインタフェイスを通して行われます。 シェルの主な仕事はコマンドを入力チャンネルから受け取り、 そしてそれらを実行することです。 大部分のシェルはさらに組み込みの機能を持っていて、日々の作業、 ファイル管理やファイル名の展開、コマンドライン編集、 コマンドマクロ、環境変数などに便利です。 FreeBSD には `sh` (Bourne Shell) や `tcsh` (高機能 C-shell) が含まれています。 また、 これ以外にも `zsh` や `bash` などたくさんのシェルが FreeBSD Ports Collection から利用可能です。 +FreeBSD は「シェル」と呼ばれるコマンドラインインタフェースを提供します。 +シェルは入力チャンネルからコマンドを受け取り、それらを実行します。 +大部分のシェルは、日々の作業、ファイル管理やファイル名の展開、コマンドライン編集、コマンドマクロ、環境変数といった組み込みの機能を持ってます。 +FreeBSD には `sh` (Bourne Shell) や `tcsh` (高機能 C-shell) が含まれています。 +また、これ以外にも `zsh` や `bash` などのシェルが FreeBSD Ports Collection から利用可能です。 -「あなたは、どのシェルを使いますか?」という質問は、 まったく趣味の問題です。 あなたが C のプログラマだったとすれば、 `tcsh` のような C 風のシェルの方が落ち着くかもしれません。 Linux から来た人や UNIX(R) のコマンドラインインタフェイスになじみがなければ、 `bash` を試すのも良いでしょう。 ポイントは、それぞれのシェルは、 あなたの好みの作業環境で利用できる (もしくはできない) 独自の機能を持っているということ、 そして、どのシェルを使うことにするかを決めるのはあなた自身だということです。 +どのシェルを使うかは、まったく趣味の問題です。 +あなたが C のプログラマだったとすれば、 `tcsh` のような C 風のシェルの方が落ち着くかもしれません。 +Linux ユーザであれば、`bash` を好まれるでしょう。 +それぞれのシェルは、 ユーザの好みの作業環境で利用できる (もしくはできない) 独自の機能を持っているということ、そして、どのシェルを使うことにするかを決めるのはyユーザ自身ということです。 *** 260 LINES SKIPPED ***