0 - en to ja translation catalogue (127 entries)

en: Kernel
ja: カーネル

en: Process
ja: プロセス

en: Hierarchy
ja: 階層構造

en: Basic Commands
ja: 基本コマンド

en: Short Remedial Course
ja: 簡単な補習講座

en: Even though this book primarily targets administrators and “power-users”, we wouldn't like to exclude motivated beginners. This appendix will therefore be a crash-course describing the fundamental concepts involved in handling a Unix computer.
ja: 本書は主として管理者と「パワーユーザ」を対象にしているとは言うものの、やる気のある初心者を仲間はずれにしたくはありません。そのため、この付録は Unix コンピュータを取り扱う際に求められる基礎的な概念を説明する集中講座になるでしょう。

en: Shell and Basic Commands
ja: シェルと基本コマンド

en: In the Unix world, every administrator has to use the command line sooner or later; for example, when the system fails to start properly and only provides a command-line rescue mode. Being able to handle such an interface, therefore, is a basic survival skill for these circumstances.
ja: Unix 世界では、管理者全員が遅かれ早かれコマンドラインを使わなければいけません。たとえば、システムが正常な起動に失敗して、コマンドラインのレスキューモードだけが提供される場合です。それゆえ、このような状況下ではコマンドラインインターフェースを取り扱う技術を身に付けているということが基本的なサバイバル技術です。

en: <emphasis>QUICK LOOK</emphasis> Starting the command interpreter
ja: <emphasis>QUICK LOOK</emphasis> コマンドインタプリタの起動

en: This section only gives a quick peek at the commands. They all have many options not described here, so please refer to the abundant documentation in their respective manual pages.
ja: この節では、コマンドを簡単に見ていきます。ここで挙げたコマンドには多くのオプションが用意されていますが、ここでは説明しませんので、各コマンドに対応するマニュアルページに書かれているたくさんの文書を参照してください。

en: Browsing the Directory Tree and Managing Files
ja: ディレクトリツリーの閲覧とファイル管理

en: Once a session is open, the <command>pwd</command> command (which stands for <emphasis>print working directory</emphasis>) displays the current location in the filesystem. The current directory is changed with the <command>cd <replaceable>directory</replaceable></command> command (<command>cd</command> is for <emphasis>change directory</emphasis>). The parent directory is always called <literal>..</literal> (two dots), whereas the current directory is also known as <literal>.</literal> (one dot). The <command>ls</command> command allows <emphasis>listing</emphasis> the contents of a directory. If no parameters are given, it operates on the current directory.
ja: セッションが開始されたら、<command>pwd</command> コマンドでファイルシステム上の現在の場所を表示することが可能です (<command>pwd</command> は <emphasis>print working directory</emphasis> の略語です)。現在のディレクトリを変更するには、<command>cd <replaceable>directory</replaceable></command> コマンドを使います (<command>cd</command> は <emphasis>change directory</emphasis> の略語です)。親ディレクトリは常に <literal>..</literal> (ドット 2 つ) で表します。これに対して、現在のディレクトリは <literal>.</literal> (ドット 1 つ) で表します。<command>ls</command> コマンドは指定したディレクトリの内容を <emphasis>listing (表示)</emphasis> します。パラメータを与えなかった場合、<command>ls</command> コマンドは現在のディレクトリの内容を表示します。

en: A new directory can be created with <command>mkdir <replaceable>directory</replaceable></command>, and an existing (empty) directory can be removed with <command>rmdir <replaceable>directory</replaceable></command>. The <command>mv</command> command allows <emphasis>moving</emphasis> and/or renaming files and directories; <emphasis>removing</emphasis> a file is achieved with <command>rm <replaceable>file</replaceable></command>.
ja: 新しいディレクトリを作成するには <command>mkdir <replaceable>directory</replaceable></command> を使い、既存の (空) ディレクトリを削除するには <command>rmdir <replaceable>directory</replaceable></command> を使います。<command>mv</command> コマンドを使うことでファイルとディレクトリの <emphasis>moving (移動)</emphasis> および名前変更が可能です。一方で、ファイルを <emphasis>removing (削除)</emphasis> するには <command>rm <replaceable>file</replaceable></command> を実行します。

en: Displaying and Modifying Text Files
ja: テキストファイルの表示と編集

en: The <command>cat <replaceable>file</replaceable></command> command (intended to <emphasis>concatenate</emphasis> files to the standard output device) reads a file and displays its contents on the terminal. If the file is too big to fit on a screen, use a pager such as <command>less</command> (or <command>more</command>) to display it page by page.
ja: <command>cat <replaceable>file</replaceable></command> コマンド (ファイルを標準出力デバイスに <emphasis>concatenate (連結)</emphasis> する) はファイルを読み込んで内容を端末に表示します。ファイルが一画面に表示するには大きすぎる場合、<command>less</command> (および <command>more</command>) などのページャーを使い、ページごとに内容を表示します。

en: The <command>editor</command> command starts a text editor (such as <command>vi</command> or <command>nano</command>) and allows creating, modifying and reading text files. The simplest files can sometimes be created directly from the command interpreter thanks to redirection: <command>echo "<replaceable>text</replaceable>" &gt;<replaceable>file</replaceable></command> creates a file named <replaceable>file</replaceable> with “<replaceable>text</replaceable>” as its contents. Adding a line at the end of this file is possible too, with a command such as <command>echo "<replaceable>moretext</replaceable>" &gt;&gt;<replaceable>file</replaceable></command>. Note the <literal>&gt;&gt;</literal> in this example.
ja: <command>editor</command> コマンドを使えばテキストエディタ (<command>vi</command> や <command>nano</command> など) が起動し、テキストファイルの作成や編集や読み込みを行うことが可能です。単純なファイルならば、リダイレクト機能を使ってコマンドインタプリタから作ることも可能です。たとえば <command>echo "<replaceable>text</replaceable>" &gt;<replaceable>file</replaceable></command> は「<replaceable>text</replaceable>」という内容で <replaceable>file</replaceable> と名付けられたファイルを作成します。<command>echo "<replaceable>moretext</replaceable>" &gt;&gt;<replaceable>file</replaceable></command> などのコマンドを使えば、ファイルの最後に行を追加することも可能です。この例で示した <literal>&gt;&gt;</literal> に注意してください。

en: Searching for Files and within Files
ja: ファイルとファイル内容の検索

en: The <command>find <replaceable>directory</replaceable> <replaceable>criteria</replaceable></command> command looks for files in the hierarchy under <replaceable>directory</replaceable> according to several criteria. The most commonly used criterion is <literal>-name <replaceable>name</replaceable></literal>: that allows looking for a file by its name.
ja: <command>find <replaceable>directory</replaceable> <replaceable>criteria</replaceable></command> コマンドは <replaceable>directory</replaceable> の下にあるファイルから <replaceable>criteria</replaceable> という条件に一致するものを探します。最もよく使われる条件は <literal>-name <replaceable>name</replaceable></literal> です。すなわちこれは名前を基にしてファイルを探すという条件です。

en: The <command>grep <replaceable>expression</replaceable> <replaceable>files</replaceable></command> command searches the contents of the files and extracts the lines matching the regular expression (see sidebar <xref linkend="sidebar.regexp" />). Adding the <literal>-r</literal> option enables a recursive search on all files contained in the directory passed as a parameter. This allows looking for a file when only a part of the contents are known.
ja: <command>grep <replaceable>expression</replaceable> <replaceable>files</replaceable></command> コマンドは <replaceable>files</replaceable> で指定したファイルの内容を検索して、<replaceable>expression</replaceable> で指定した正規表現 (補注<xref linkend="sidebar.regexp" />を参照してください) に一致する行を抽出します。<literal>-r</literal> オプションを追加すれば、パラメータとして指定されたディレクトリに含まれるすべてのファイルに対して再帰的に検索することが可能です。<literal>-r</literal> オプションを使うことで、内容の一部を元にファイルを探すことが可能です。

en: Managing Processes
ja: プロセス管理

en: The <command>ps aux</command> command lists the processes currently running and helps identifying them by showing their <emphasis>pid</emphasis> (process id). Once the <emphasis>pid</emphasis> of a process is known, the <command>kill -<replaceable>signal</replaceable> <replaceable>pid</replaceable></command> command allows sending it a signal (if the process belongs to the current user). Several signals exist; most commonly used are <literal>TERM</literal> (a request to terminate gracefully) and <literal>KILL</literal> (a forced kill).
ja: <command>ps aux</command> コマンドは現在実行中のプロセスをリストし、プロセスの <emphasis>pid</emphasis> (プロセス ID) を表示することでプロセスを識別する手助けになります。プロセスの <emphasis>pid</emphasis> がわかったら、<command>kill -<replaceable>signal</replaceable> <replaceable>pid</replaceable></command> コマンドを使ってプロセスにシグナルを送信することが可能です (シグナルを送信するユーザ自身が対象のプロセスの所有者である場合に限ります)。シグナルにはさまざまな種類があります。しかし、最もよく使われるのが <literal>TERM</literal> (処理の終了を丁寧に依頼する) と <literal>KILL</literal> (強制的に終了する) です。

en: The command interpreter can also run programs in the background if the command is followed by a “&amp;”. By using the ampersand, the user resumes control of the shell immediately even though the command is still running (hidden from the user; as a background process). The <command>jobs</command> command lists the processes running in the background; running <command>fg %<replaceable>job-number</replaceable></command> (for <emphasis>foreground</emphasis>) restores a job to the foreground. When a command is running in the foreground (either because it was started normally, or brought back to the foreground with <command>fg</command>), the <keycombo action="simul"><keycap>Control</keycap><keycap>Z</keycap></keycombo> key combination pauses the process and resumes control of the command-line. The process can then be restarted in the background with <command>bg %<replaceable>job-number</replaceable></command> (for <foreignphrase>background</foreignphrase>).
ja: コマンドの最後に「&amp;」を付けた場合、コマンドインタプリタはバックグラウンドでプログラムを実行します。アンパサンドを使うことで、ユーザは、コマンドがまだ実行中であっても、すぐにシェルの制御を再開することが可能です (ここで実行したコマンドはユーザから見えなくなり、バックグラウンドプロセスになります)。<command>jobs</command> コマンドはバックグラウンドで実行中のプロセスをリストします。さらに <command>fg %<replaceable>job-number</replaceable></command> (<emphasis>foreground</emphasis> の略語) は指定したジョブをフォアグラウンドに復活させます。コマンドがフォアグラウンドで実行されている場合 (通常通り開始した場合や <command>fg</command> でフォアグラウンドに復活した場合)、<keycombo action="simul"><keycap>Control</keycap><keycap>Z</keycap></keycombo> キーの組み合わせでフォアグラウンドプロセスを一時停止してコマンドラインの制御を再開することが可能です。プロセスをバックグラウンドで再開するには、<command>bg %<replaceable>job-number</replaceable></command> (<foreignphrase>background</foreignphrase> の略語) を使います。

en: System Information: Memory, Disk Space, Identity
ja: システム情報、メモリ、ディスク領域、識別情報

en: The <command>free</command> command displays information on memory; <command>df</command> (<emphasis>disk free</emphasis>) reports on the available disk space on each of the disks mounted in the filesystem. Its <literal>-h</literal> option (for <emphasis>human readable</emphasis>) converts the sizes into a more legible unit (usually mebibytes or gibibytes). In a similar fashion, the <command>free</command> command supports the <literal>-m</literal> and <literal>-g</literal> options, and displays its data either in mebibytes or in gibibytes, respectively.
ja: <command>free</command> コマンドはメモリに関する情報を表示します。一方、<command>df</command> (<emphasis>disk free</emphasis>) はファイルシステムにマウントされた各ディスクの利用できるディスク領域を報告します。<literal>-h</literal> オプション (<emphasis>human readable</emphasis> の意味) はサイズをわかりやすい単位 (通常メガバイトやギガバイト) で変換します。同様に、<command>free</command> コマンドは <literal>-m</literal> と <literal>-g</literal> オプションをサポートしており、データはそれぞれメガバイトとギガバイト単位のどちらか一方で表示されます。

en: The <command>id</command> command displays the identity of the user running the session, along with the list of groups they belong to. Since access to some files or devices may be limited to group members, checking available group membership may be useful.
ja: <command>id</command> コマンドはセッションを実行しているユーザのユーザ名をユーザが所属するグループのリストと一緒に表示します。一部のファイルやデバイスへのアクセスはグループメンバーだけに制限されているかもしれませんので、ユーザの所属するグループを確認することが役に立つ場合があります。

en: Organization of the Filesystem Hierarchy
ja: ファイルシステム階層の構成

en: <primary>Filesystem Hierarchy</primary>
ja: <primary>ファイルシステム</primary><secondary sortas="カイソウ">階層</secondary>

en: The Root Directory
ja: ルートディレクトリ

en: A Debian system is organized along the <emphasis>Filesystem Hierarchy Standard</emphasis> (FHS). This standard defines the purpose of each directory. For instance, the top-level directories are described as follows:
ja: Debian システムは<emphasis>ファイルシステム階層標準</emphasis> (FHS) に沿って構成されています。ファイルシステム階層標準ではそれぞれのディレクトリの目的が定義されています。たとえば、最上位ディレクトリに含まれるディレクトリの目的は以下の通り定義されています。

en: <filename>/bin/</filename>: basic programs;
ja: <filename>/bin/</filename>。これは基本プログラムを格納するディレクトリです。

en: <filename>/boot/</filename>: Linux kernel and other files required for its early boot process;
ja: <filename>/boot/</filename>。これは Linux カーネルおよび起動処理の初期に要求されるその他のファイルを格納するディレクトリです。

en: <filename>/dev/</filename>: device files;
ja: <filename>/dev/</filename>。これはデバイスファイルを格納するディレクトリです。

en: <filename>/etc/</filename>: configuration files;
ja: <filename>/etc/</filename>。これは設定ファイルを格納するディレクトリです。

en: <filename>/home/</filename>: user's personal files;
ja: <filename>/home/</filename>。これはユーザの個人ファイルを格納するディレクトリです。

en: <filename>/lib/</filename>: basic libraries;
ja: <filename>/lib/</filename>。これは基本ライブラリを格納するディレクトリです。

en: <filename>/media/*</filename>: mount points for removable devices (CD-ROM, USB keys and so on);
ja: <filename>/media/*</filename>。これはリムーバブルデバイス (CD-ROM、USB メモリなど) 用のマウントポイントです。

en: <filename>/mnt/</filename>: temporary mount point;
ja: <filename>/mnt/</filename>。これは一時的なマウントポイントです。

en: <filename>/opt/</filename>: extra applications provided by third parties;
ja: <filename>/opt/</filename>。これはサードパーティが提供する追加アプリケーションを格納するディレクトリです。

en: <filename>/root/</filename>: administrator's (root's) personal files;
ja: <filename>/root/</filename>。これは管理者 (root) の個人ファイルを格納するディレクトリです。

en: <filename>/sbin/</filename>: system programs;
ja: <filename>/sbin/</filename>。これはシステムプログラムを格納するディレクトリです。

en: <filename>/srv/</filename>: data used by servers hosted on this system;
ja: <filename>/srv/</filename>。これは自システム上で運用されているサーバが使うデータを格納するディレクトリです。

en: <filename>/tmp/</filename>: temporary files; this directory is often emptied at boot;
ja: <filename>/tmp/</filename>。これは一時ファイルを格納するディレクトリです。このディレクトリの内容は起動時に削除されます。

en: <filename>/usr/</filename>: applications; this directory is further subdivided into <filename>bin</filename>, <filename>sbin</filename>, <filename>lib</filename> (according to the same logic as in the root directory). Furthermore, <filename>/usr/share/</filename> contains architecture-independent data. <filename>/usr/local/</filename> is meant to be used by the administrator for installing applications manually without overwriting files handled by the packaging system (<command>dpkg</command>).
ja: <filename>/usr/</filename>。これはアプリケーションを格納するディレクトリです。このディレクトリは <filename>bin</filename>、<filename>sbin</filename>、<filename>lib</filename> のようにさらに細分されます (各ディレクトリの目的はルートディレクトリにこれらのディレクトリが含まれる場合と同じです)。さらに、<filename>/usr/share/</filename> にはアーキテクチャに依存しないデータが含まれます。<filename>/usr/local/</filename> は管理者が手作業でアプリケーションをインストールする場所として用意されています。こうすることで、パッケージングシステム (<command>dpkg</command>) によって取り扱われるファイルを上書きしなくても済むようになります。

en: <primary>daemon</primary>
ja: <primary>デーモン</primary>

en: <filename>/var/</filename>: variable data handled by daemons. This includes log files, queues, spools, caches and so on.
ja: <filename>/var/</filename>。これはデーモンの取り扱う可変データを格納するディレクトリです。これには、ログファイル、キュー、スプール、キャッシュなどが含まれます。

en: <filename>/proc/</filename> and <filename>/sys/</filename> are specific to the Linux kernel (and not part of the FHS). They are used by the kernel for exporting data to user space (see <xref linkend="sect.userspace-presentation" /> and <xref linkend="sect.user-space" /> for explanations about this concept).
ja: <filename>/proc/</filename> と <filename>/sys/</filename> は Linux カーネルに特有のディレクトリです (FHS で定義されていません)。カーネルはユーザ空間にデータを書き出すためにこれらのディレクトリを使います (この概念に関する説明は<xref linkend="sect.userspace-presentation" />と<xref linkend="sect.user-space" />を参照してください)。

en: The User's Home Directory
ja: ユーザのホームディレクトリ

en: The contents of a user's home directory is not standardized, but there are still a few noteworthy conventions. One is that a user's home directory is often referred to by a tilde (“~”). That is useful to know because command interpreters automatically replace a tilde with the correct directory (usually <filename>/home/<replaceable>user</replaceable>/</filename>).
ja: ユーザのホームディレクトリの内容は標準化されていませんが、特筆すべき慣習が存在します。1 つ目は、ユーザのホームディレクトリはチルダ (「~」) で表される場合が多いということです。これを知っておくと役に立ちます。なぜなら、コマンドラインインタプリタは自動的にチルダを正しいディレクトリ (通常 <filename>/home/<replaceable>user</replaceable>/</filename>) に置き換えるからです。

en: Traditionally, application configuration files are often stored directly under the user's home directory, but their names usually start with a dot (for instance, the <command>mutt</command> email client stores its configuration in <filename>~/.muttrc</filename>). Note that filenames that start with a dot are hidden by default; and <command>ls</command> only lists them when the <literal>-a</literal> option is used, and graphical file managers need to be told to display hidden files.
ja: 伝統的に、アプリケーション設定ファイルはユーザのホームディレクトリの下に直接保存されている場合が多く、設定ファイルの名前は通常ドットで始まります (たとえば、<command>mutt</command> 電子メールクライアントの設定は <filename>~/.muttrc</filename> に保存されます)。通常、ドットで始まるファイル名は表示されない点に注意してください。<command>ls</command> を使ってドットから始まるファイル名を持つファイルを表示するには、<literal>-a</literal> オプションを付けてください。グラフィカルファイルマネージャでこの種の隠しファイルを表示するには、それぞれのアプリケーションの設定を変更してください。

en: Finally, the email system sometimes stores incoming emails into a <filename>~/Mail/</filename> directory.
ja: 最後に、電子メールシステムは受信した電子メールを <filename>~/Mail/</filename> ディレクトリに保存する場合があります。

en: Inner Workings of a Computer: the Different Layers Involved
ja: コンピュータ内部の仕組み、さまざまな層の関係性

en: A computer is often considered as something rather abstract, and the externally visible interface is much simpler than its internal complexity. Such complexity comes in part from the number of pieces involved. However, these pieces can be viewed in layers, where a layer only interacts with those immediately above or below.
ja: コンピュータはどちらかと言えば抽象的なものとして考えられる場合が多く、外から見えるインターフェースは内部の複雑さに比べてずっと簡単なものです。この複雑さの原因は関連する要素が多いことです。しかしながら、これらの要素は層状構造とみなすことが可能で、ある層が影響をおよぼしたり影響を受けたりするのはその層の真上と真下の層に限られています。

en: An end-user can get by without knowing these details… as long as everything works. When confronting a problem such as, “The internet doesn't work!”, the first thing to do is to identify in which layer the problem originates. Is the network card (hardware) working? Is it recognized by the computer? Does the Linux kernel see it? Are the network parameters properly configured? All these questions isolate an appropriate layer and focus on a potential source of the problem.
ja: すべてがうまく動作している限り、エンドユーザは各層の詳細を理解する必要はありません。「インターネットにつながらない!」などの問題に直面した場合、真っ先にやるべきは、問題の原因になっている層を特定することです。ネットワークカード (ハードウェア) は動いていますか? コンピュータはネットワークカードを認識していますか? Linux カーネルはネットワークカードを認識していますか? ネットワークパラメータは適切に設定されていますか? これらの質問により、コンピュータは適切な層に分割され、問題の本質的な原因になっている層を特定することが可能です。

en: The Deepest Layer: the Hardware
ja: 最下層、ハードウェア

en: Let us start with a basic reminder that a computer is, first and foremost, a set of hardware elements. There is generally a main board (known as the <emphasis>motherboard</emphasis>), with one (or more) processor(s), some RAM, device controllers, and extension slots for option boards (for other device controllers). Most noteworthy among these controllers are IDE (Parallel ATA), SCSI and Serial ATA, for connecting to storage devices such as hard disks. Other controllers include USB, which is able to host a great variety of devices (ranging from webcams to thermometers, from keyboards to home automation systems) and IEEE 1394 (Firewire). These controllers often allow connecting several devices so the complete subsystem handled by a controller is therefore usually known as a “bus”. Option boards include graphics cards (into which monitor screens will be plugged), sound cards, network interface cards, and so on. Some main boards are pre-built with these features, and don't need option boards.
ja: 基本的なことを思い出すことから始めましょう。何よりもまず、コンピュータはハードウェア部品の集合体である、という点です。ほとんどの場合、主要基板 (<emphasis>マザーボード</emphasis>として知られています) があり、主要基板に 1 台 (または複数台) のプロセッサ、RAM、デバイスコントローラ、(他のデバイスコントローラを搭載する) 拡張カードを差し込む拡張スロットが取り付けられています。最も注目すべきコントローラはハードディスクなどのストレージデバイスを接続する IDE (パラレル ATA)、SCSI、シリアル ATA です。その他のコントローラには、多くのさまざまなデバイス (ウェブカメラから温度計、キーボードからホームオートメーションシステムなど) をホストすることが可能な USB と IEEE 1394 (Firewire) があります。これらのコントローラには複数のデバイスを接続することが可能です。このため、コントローラによって取り扱われる完全なサブシステムは「バス」と呼ばれます。拡張カードにはグラフィックカード (モニタ画面をここに接続します)、サウンドカード、ネットワークインターフェースカードなどがあります。一部のマザーボードはいくつかの機能をあらかじめ備えており、拡張カードを必要としません。

en: <emphasis>IN PRACTICE</emphasis> Checking that the hardware works
ja: <emphasis>IN PRACTICE</emphasis> ハードウェアが動作していることの確認

en: Checking that a piece of hardware works can be tricky. On the other hand, proving that it doesn't work is sometimes quite simple.
ja: ハードウェアの一部が動作していることを確認することは難しいです。逆に、ハードウェアが動作していないことを証明することはとても簡単です。

en: A hard disk drive is made of spinning platters and moving magnetic heads. When a hard disk is powered up, the platter motor makes a characteristic whir. It also dissipates energy as heat. Consequently, a hard disk drive that stays cold and silent when powered up is broken.
ja: ハードディスクドライブは回転する円盤と移動する磁気ヘッドから構成されています。ハードディスクの電源を入れると、円盤モータから特徴的な音が聞こえます。さらに円盤モータはエネルギーを熱として放出します。従って、電源を入れても冷たいままで、音が聞こえないハードディスクドライブは故障しています。

en: Network cards often include LEDs displaying the state of the link. If a cable is plugged in and leads to a working network hub or switch, at least one LED will be on. If no LED lights up, either the card itself, the network device, or the cable between them, is faulty. The next step is therefore testing each component individually.
ja: ネットワークカードは多くの場合リンク状態を示す LED を備えています。ケーブルが装着されており、そのケーブルが動いているネットワークハブまたはスイッチにつなげられている場合、少なくとも 1 つの LED が点灯しているはずです。すべての LED が消灯している場合、ネットワークカード本体、ネットワーク機器、両者をつなげるケーブルのどれかが壊れています。それ故、次の段階では各要素を個別にテストします。

en: Some option boards — especially 3D video cards — include cooling devices, such as heat sinks and/or fans. If the fan does not spin even though the card is powered up, a plausible explanation is the card overheated. This also applies to the main processor(s) located on the main board.
ja: 一部の拡張カード (特に 3D ビデオカード) はヒートシンクやファンなどの冷却装置を備えています。カードの電源が入っているにも関わらずファンが回転していない場合、もっともらしい状況はカードが過熱している状況です。マザーボードに装着されているプロセッサにも同じことが言えます。

en: The Starter: the BIOS or UEFI
ja: スタート係、BIOS や UEFI

en: Hardware, on its own, is unable to perform useful tasks without a corresponding piece of software driving it. Controlling and interacting with the hardware is the purpose of the operating system and applications. These, in turn, require functional hardware to run.
ja: ハードウェアはひとりでに動くものではありません。ハードウェアを制御するソフトウェアがなければ、ハードウェアをまともに動作させることはできません。オペレーティングシステムとアプリケーションはハードウェアを制御したりハードウェアと情報をやり取りする機能を提供します。そしてこれを行うためにはハードウェアを正常に機能させる必要があります。

en: <emphasis>TOOL</emphasis> Setup, the BIOS/UEFI configuration tool
ja: <emphasis>TOOL</emphasis> Setup、BIOS/UEFI 設定ツール

en: The boot sector (or the EFI partition), in turn, contains another piece of software, called the bootloader, whose purpose is to find and run an operating system. Since this bootloader is not embedded in the main board but loaded from disk, it can be smarter than the BIOS, which explains why the BIOS does not load the operating system by itself. For instance, the bootloader (often GRUB on Linux systems) can list the available operating systems and ask the user to choose one. Usually, a time-out and default choice is provided. Sometimes the user can also choose to add parameters to pass to the kernel, and so on. Eventually, a kernel is found, loaded into memory, and executed.
ja: ブートセクタ (または EFI パーティション) には別のソフトウェアが保存されています。これはブートローダと呼ばれ、オペレーティングシステムを探して実行するためのものです。ブートローダはマザーボードに組み込まれているのではなく、ディスクから読み込まれます。このため、BIOS よりも多くの機能を持っています。BIOS 自身がオペレーティングシステムを読み込まないのはこれが理由です。たとえば、ブートローダ (Linux システムでは GRUB を使うことが多いです) は利用できるオペレーティングシステムを表示し、ユーザに起動するオペレーティングシステムを尋ねることが可能です。通常、タイムアウトとデフォルトの回答が設定されています。ここでユーザはカーネルに渡すパラメータを追加したりすることも可能です。最終的に、カーネルが見つかり、メモリに読み込まれ、実行されます。

en: <emphasis>NOTE</emphasis> UEFI, a modern replacement to the BIOS
ja: <emphasis>NOTE</emphasis> UEFI、BIOS の現代的な置き換え

en: <primary>Secure Boot</primary>
ja: <primary>セキュアブート</primary>

en: The BIOS/UEFI is also in charge of detecting and initializing a number of devices. Obviously, this includes the IDE/SATA devices (usually hard disk(s) and CD/DVD-ROM drives), but also PCI devices. Detected devices are often listed on screen during the boot process. If this list goes by too fast, use the <keycap>Pause</keycap> key to freeze it for long enough to read. Installed PCI devices that don't appear are a bad omen. At worst, the device is faulty. At best, it is merely incompatible with the current version of the BIOS or main board. PCI specifications evolve, and old main boards are not guaranteed to handle newer PCI devices.
ja: また、BIOS/UEFI は多数のデバイスを検出して初期化します。言うまでもなくこのデバイスには、IDE/SATA デバイス (通常ハードディスクおよび CD/DVD-ROM デバイス) だけでなく PCI デバイスも含まれます。検出されたデバイスは起動処理中に画面に表示されます。デバイスリストがすぐに消えてしまう場合、<keycap>Pause</keycap> キーを押せば表示を中止して内容を読むことが可能です。インストールされた PCI デバイスがリストに含まれないのは悪い兆しです。最悪の場合、デバイスは欠陥品ということになります。良くても、デバイスは BIOS またはマザーボードの現在のバージョンと互換性がないということになります。PCI 仕様は進化しており、古いマザーボードで新しい PCI デバイスを使える保証はありません。

en: The Kernel
ja: カーネル

en: Both the BIOS/UEFI and the bootloader only run for a few seconds each; now we are getting to the first piece of software that runs for a longer time, the operating system kernel. This kernel assumes the role of a conductor in an orchestra, and ensures coordination between hardware and software. This role involves several tasks including: driving hardware, managing processes, users and permissions, the filesystem, and so on. The kernel provides a common base to all other programs on the system.
ja: BIOS/UEFI とブートローダはそれぞれ数秒間だけ実行されます。これでついに、長時間実行するソフトウェアであるオペレーティングシステムカーネルに到達します。カーネルはオーケストラで言えば指揮者の役割を果たし、ハードウェアとソフトウェア間の調整を行います。カーネルは複数の作業を担当しています。具体的に言えば、ハードウェアの駆動、プロセスの管理、ユーザとパーミッションの管理、ファイルシステムの管理などを担当しています。カーネルはシステム上のすべての他のプログラムに共通基盤を提供するものです。

en: The User Space
ja: ユーザ空間

en: Although everything that happens outside of the kernel can be lumped together under “user space”, we can still separate it into software layers. However, their interactions are more complex than before, and the classifications may not be as simple. An application commonly uses libraries, which in turn involve the kernel, but the communications can also involve other programs, or even many libraries calling each other.
ja: カーネル以外のすべては「ユーザ空間」の意味でひとくくりにされますが、「ユーザ空間」をさらにいくつかのソフトウェア層に分割することが可能です。しかしながら、ソフトウェア層同士の相互作用は以前に比べてさらに複雑化しており、ソフトウェア層の分類分けは単純ではありません。アプリケーションは一般にライブラリを使います。ライブラリはカーネルと通信しますが、通信には他のプログラムまたはさらに多くのライブラリが必要です。

en: Some Tasks Handled by the Kernel
ja: カーネルが担当している一部の操作

en: Driving the Hardware
ja: ハードウェアの操作

en: The kernel is, first and foremost, tasked with controlling the hardware parts, detecting them, switching them on when the computer is powered on, and so on. It also makes them available to higher-level software with a simplified programming interface, so applications can take advantage of devices without having to worry about details such as which extension slot the option board is plugged into. The programming interface also provides an abstraction layer; this allows video-conferencing software, for example, to use a webcam independently of its make and model. The software can just use the <emphasis>Video for Linux</emphasis> (V4L) interface, and the kernel translates the function calls of this interface into the actual hardware commands needed by the specific webcam in use.
ja: カーネルの責務は何を差し置いてもまず、ハードウェア部分を制御したり、検出したり、コンピュータ起動時にハードウェア部分のスイッチを ON にしたりすることです。さらにカーネルは単純化されたプログラミングインターフェースを使った高レベルソフトウェアからハードウェアを利用できるようにします。こうすることで、アプリケーションは拡張カードがどの拡張スロットに接続されているかなどの詳細を気にすることなくデバイスをうまく活用することが可能になります。さらにこのプログラミングインターフェースは抽象化レイヤを提供します。そして抽象化レイヤを使うことで、たとえばビデオ会議ソフトウェアは種類やモデル番号を気にせずにウェブカメラを使うことが可能です。すなわち、ビデオ会議ソフトウェアは <emphasis>Video for Linux</emphasis> (V4L) インターフェースを使うだけでよいのです。そしてカーネルが V4L インターフェースの機能呼び出しを特定のウェブカメラを制御するために必要な実際のハードウェアコマンドに変換します。

en: Example of information provided by <command>lspci</command> and <command>lsusb</command>
ja: <command>lspci</command> と <command>lsusb</command> で提供される情報の一例

en: Applications often access devices by way of special files created within <filename>/dev/</filename> (see sidebar <xref linkend="sidebar.special-files" />). These are special files that represent disk drives (for instance, <filename>/dev/hda</filename> and <filename>/dev/sdc</filename>), partitions (<filename>/dev/hda1</filename> or <filename>/dev/sdc3</filename>), mice (<filename>/dev/input/mouse0</filename>), keyboards (<filename>/dev/input/event0</filename>), soundcards (<filename>/dev/snd/*</filename>), serial ports (<filename>/dev/ttyS*</filename>), and so on.
ja: アプリケーションは <filename>/dev/</filename> 内に作られた特殊ファイル (補注<xref linkend="sidebar.special-files" />を参照してください) を介してデバイスにアクセスする場合が多いです。<filename>/dev/</filename> 内には特殊ファイルがあり、これらはディスクドライブ (たとえば <filename>/dev/hda</filename> や <filename>/dev/sdc</filename>)、パーティション (<filename>/dev/hda1</filename> や <filename>/dev/sdc3</filename>)、マウス (<filename>/dev/input/mouse0</filename>)、キーボード (<filename>/dev/input/event0</filename>)、サウンドカード (<filename>/dev/snd/*</filename>)、シリアルポート (<filename>/dev/ttyS*</filename>) などを表しています。

en: Filesystems
ja: ファイルシステム

en: <primary>filesystem</primary>
ja: <primary>ファイルシステム</primary>

en: Filesystems are one of the most prominent aspects of the kernel. Unix systems merge all the file stores into a single hierarchy, which allows users (and applications) to access data simply by knowing its location within that hierarchy.
ja: ファイルシステムはカーネルの最も卓越した側面の 1 つです。Unix システムはすべてのファイル保存領域を単独の階層構造の中に融合させます。こうすることで、ユーザ (とアプリケーション) は階層構造の中のファイルの場所を知るだけでデータにアクセスすることが可能です。

en: The starting point of this hierarchical tree is called the root, <filename>/</filename>. This directory can contain named subdirectories. For instance, the <literal>home</literal> subdirectory of <filename>/</filename> is called <filename>/home/</filename>. This subdirectory can, in turn, contain other subdirectories, and so on. Each directory can also contain files, where the actual data will be stored. Thus, the <filename>/home/rmas/Desktop/hello.txt</filename> name refers to a file named <literal>hello.txt</literal> stored in the <literal>Desktop</literal> subdirectory of the <literal>rmas</literal> subdirectory of the <literal>home</literal> directory present in the root. The kernel translates between this naming system and the actual, physical storage on a disk.
ja: 階層構造ツリーの基点はルート、<filename>/</filename>、と呼ばれています。ルートディレクトリには名前を付けられたサブディレクトリが含まれます。たとえば、<filename>/</filename> の <literal>home</literal> サブディレクトリは <filename>/home/</filename> と呼ばれます。このサブディレクトリには、さらに別のサブディレクトリを含めることが可能です。各ディレクトリには、実際のデータが保存されるファイルを含めることも可能です。そんなわけで、<filename>/home/rmas/Desktop/hello.txt</filename> ファイルはルートディレクトリ内の <literal>home</literal> サブディレクトリ内の <literal>rmas</literal> サブディレクトリ内の <literal>Desktop</literal> サブディレクトリ内の <literal>hello.txt</literal> と名付けられたファイルを表します。カーネルはこの命名システムと実際のディスク上の物理的な保存領域を変換します。

en: Unlike other systems, there is only one such hierarchy, and it can integrate data from several disks. One of these disks is used as the root, and the others are “mounted” on directories in the hierarchy (the Unix command is called <command>mount</command>); these other disks are then available under these “mount points”. This allows storing users' home directories (traditionally stored within <filename>/home/</filename>) on a second hard disk, which will contain the <literal>rhertzog</literal> and <literal>rmas</literal> directories. Once the disk is mounted on <filename>/home/</filename>, these directories become accessible at their usual locations, and paths such as <filename>/home/rmas/Desktop/hello.txt</filename> keep working.
ja: 他のシステムと異なり、階層構造は 1 つしかありません。そしてこの単独の階層構造は複数のディスクに保存されたデータを統合できます。1 台のディスクがルートディレクトリとして使われ、他のディスクは階層構造中のディレクトリに「マウント」されます (これを行う Unix コマンドは <command>mount</command> と呼ばれます)。マウントされたディスクは「マウントポイント」の下から利用できるようになります。これのおかげで、2 台目のハードディスクに <literal>rhertzog</literal> や <literal>rmas</literal> ディレクトリなどのユーザホームディレクトリ (伝統的に <filename>/home/</filename> の中に保存されます) を保存することが可能になります。2 台目のハードディスクを <filename>/home/</filename> にマウントすると、ユーザのホームディレクトリの通常の場所からこれらのディレクトリにアクセスできるようになり、<filename>/home/rmas/Desktop/hello.txt</filename> などのパスが動作するようになります。

en: There are also network filesystems, such as <acronym>NFS</acronym>, where data is not stored on a local disk. Instead, data is transmitted through the network to a server that stores and retrieves them on demand. The filesystem abstraction shields users from having to care: files remain accessible in their usual hierarchical way.
ja: さらに <acronym>NFS</acronym> などのネットワークファイルシステムも存在します。ネットワークファイルシステムを使った場合、データはローカルディスクに保存されません。その代わり、データはネットワークを介してサーバに送信されます。サーバは要求に応じてデータを書き込んだり、読み出したりします。ファイルシステムを抽象化したことにより、ユーザが特に心がける点はなくなります。すなわち、ファイルは通常の階層構造的な方法を使ってアクセスできます。

en: Shared Functions
ja: 機能の共有

en: Since a number of the same functions are used by all software, it makes sense to centralize them in the kernel. For instance, shared filesystem handling allows any application to simply open a file by name, without needing to worry where the file is stored physically. The file can be stored in several different slices on a hard disk, or split across several hard disks, or even stored on a remote file server. Shared communication functions are used by applications to exchange data independently of the way the data is transported. For instance, transport could be over any combination of local or wireless networks, or over a telephone landline.
ja: 数多くの同じ機能がすべてのソフトウェアで使われますから、これらの機能をカーネルに集中させることは合理的です。たとえば、共有のファイルシステム操作機能を使うことで、名前から簡単にファイルを開くことが可能になります。ファイルが物理的に保存されている場所を気にする必要はありません。ファイルは 1 台のハードディスクの複数の異なる部分に保存したり、複数のハードディスクにわたって分割保存したり、リモートファイルサーバに保存することが可能です。アプリケーションはデータを交換するために共有の通信機能を使います。アプリケーション側からするとデータを転送する方法を意識する必要はありません。たとえば、データ転送はローカル、ワイヤレスネットワーク、固定電話回線の任意の組み合わせを通じて行われるかもしれません。

en: A process is a running instance of a program. This requires memory to store both the program itself and its operating data. The kernel is in charge of creating and tracking them. When a program runs, the kernel first sets aside some memory, then loads the executable code from the filesystem into it, and then starts the code running. It keeps information about this process, the most visible of which is an identification number known as <emphasis>pid</emphasis> (<emphasis>process identifier</emphasis>).
ja: プロセスとはプログラムの実行中インスタンスです。プロセスはプログラム自身とその動作データを保存するためのメモリを要求します。カーネルはプロセスの作成と追跡を担当します。プログラムが実行されると、カーネルは最初に幾らかのメモリを確保し、次にファイルシステムから確保したメモリに実行コードを読み込み、次にコードの実行を開始します。カーネルはプロセスに関する情報を保持します。中でも最もよく目にする情報は <emphasis>pid</emphasis> (<emphasis>プロセス ID</emphasis>) として知られる識別番号です。

en: Unix-like kernels (including Linux), like most other modern operating systems, are capable of “multi-tasking”. In other words, they allow running many processes “at the same time”. There is actually only one running process at any one time, but the kernel cuts time into small slices and runs each process in turn. Since these time slices are very short (in the millisecond range), they create the illusion of processes running in parallel, although they are actually only active during some time intervals and idle the rest of the time. The kernel's job is to adjust its scheduling mechanisms to keep that illusion, while maximizing the global system performance. If the time slices are too long, the application may not appear as responsive as desired. Too short, and the system loses time switching tasks too frequently. These decisions can be tweaked with process priorities. High-priority processes will run for longer and with more frequent time slices than low-priority processes.
ja: Unix 系カーネル (Linux を含めて) は、多くの他の現代的なオペレーティングシステムと同様、「マルチタスク」機能を備えています。言い換えれば、Unix 系カーネルは多くのプロセスを「同時に」実行することが可能です。ある時点で動いているのは 1 つのプロセスだけですが、カーネルは時間を小さな単位に切り分け、順繰りにそれぞれのプロセスを実行しています。これらの時分割単位は極めて短い (ミリ秒程度) ので、プロセスが並列実行されているような錯覚を起こさせます。しかし実際のところプロセスはある時間周期で活動しており、残りの時間は動いていません。カーネルの作業はこの錯覚を保つためにスケジューリングメカニズムを調節し、同時にシステム全体の性能を最大化することです。時分割単位が長すぎる場合、アプリケーションが要求通りの反応をしていないように感じるかもしれません。時分割単位が短すぎる場合、タスク切り替えが頻繁に起こるようになり、システムは処理時間を損することになります。プロセス優先度を使えば、時分割単位を微調整することが可能です。優先度の高いプロセスは優先度の低いプロセスに比べて長くそしてより頻繁な時分割単位で実行されます。

en: <emphasis>NOTE</emphasis> Multi-processor systems (and variants)
ja: <emphasis>NOTE</emphasis> マルチプロセッサシステム (とその亜種)

en: The limitation described above of only one process being able to run at a time, doesn't always apply. The actual restriction is that there can only be one running process <emphasis>per processor core</emphasis> at a time. Multi-processor, multi-core or “hyper-threaded” systems allow several processes to run in parallel. The same time-slicing system is still used, though, so as to handle cases where there are more active processes than available processor cores. This is far from unusual: a basic system, even a mostly idle one, almost always has tens of running processes.
ja: ある時点に実行できるプロセスはたった 1 つという上で説明した制限は必ずしも適用できるとは限りません。実用上の制限としては、同時に実行されるプロセスの数は<emphasis>プロセッサのコア 1 つ当たり</emphasis> 1 つという制限です。マルチプロセッサ、マルチコア、「ハイパースレッディング」システムを使うことで、複数のプロセスを並列実行することが可能です。ここでも同じ時分割システムを使いますが、このシステムは利用できるプロセッサコアの数よりも多くのプロセスを実行させるようなケースを取り扱うことが可能です。これは決して珍しいことではありません。すなわち、基本システムはほとんど動いていませんが、ほとんど常時数十個の実行中プロセスを抱えています。

en: Of course, the kernel allows running several independent instances of the same program. But each can only access its own time slices and memory. Their data thus remain independent.
ja: もちろん、カーネルは同じプログラムの複数の独立したインスタンスも取り扱うことが可能です。しかし各プロセスは自分自身以外の時分割単位とメモリにアクセスすることは不可能です。このため、プロセスごとのデータは独立に管理されています。

en: Rights Management
ja: 権限管理

en: Unix-like systems are also multi-user. They provide a rights management system that supports separate users and groups; it also allows control over actions based on permissions. The kernel manages data for each process, allowing it to control permissions. Most of the time, a process is identified by the user who started it. That process is only permitted to take those actions available to its owner. For instance, trying to open a file requires the kernel to check the process identity against access permissions (for more details on this particular example, see <xref linkend="sect.rights-management" />).
ja: Unix 系システムはマルチユーザに対応しています。Unix 系システムはグループとユーザの別々な管理をサポートする権限管理システムを提供しています。さらに、パーミッションに基づいて動作を制御することも可能です。カーネルは各プロセスに対するデータを管理し、そのデータを使ってパーミッションを制御します。ほとんどの場合、プロセスはプロセスを開始したユーザと同じユーザ ID を持ちます。そして、プロセスは自分を開始した所有者が実行できる動作だけを実行することが可能です。たとえば、プロセスがファイルを開くためには、カーネルによってそのプロセスのユーザ ID が対象のファイルへのアクセスパーミッションを持つことが確認されなければいけません (具体的な例についてのより詳しい情報は<xref linkend="sect.rights-management" />をご覧ください)。

en: <primary>kernel space</primary>
ja: <primary sortas="カーネルクウカン">カーネル空間</primary>

en: “User space” refers to the runtime environment of normal (as opposed to kernel) processes. This does not necessarily mean these processes are actually started by users because a standard system normally has several “daemon” (or background) processes running before the user even opens a session. Daemon processes are also considered user-space processes.
ja: 「ユーザ空間」とは通常 (カーネルに対するという意味) プロセスの実行環境を意味します。「ユーザ空間」プロセスとは実際にユーザによって開始されたプロセスという意味ではありません。なぜなら、標準的なシステムでは通常、ユーザがセッションを開始する前から実行されている複数の「デーモン」(またはバックグラウンド) プロセスが存在するからです。デーモンプロセスもまたユーザ空間プロセスと考えられます。

en: When the kernel gets past its initialization phase, it starts the very first process, <command>init</command>. Process #1 alone is very rarely useful by itself, and Unix-like systems run with many additional processes.
ja: カーネルはその初期化終了後に、最初のプロセスである <command>init</command> を開始します。最初のプロセスである <command>init</command> それ自身が役に立つことはほとんどなく、Unix 系システムは多くの追加的プロセスと一緒に動いています。

en: <primary><emphasis>fork</emphasis></primary>
ja: <primary><emphasis>フォーク</emphasis></primary>

en: First of all, a process can clone itself (this is known as a <emphasis>fork</emphasis>). The kernel allocates a new (but identical) process memory space, and another process to use it. At this time, the only difference between these two processes is their <emphasis>pid</emphasis>. The new process is usually called a child process, and the original process whose <emphasis>pid</emphasis> doesn't change, is called the parent process.
ja: 第一に、プロセスは自分自身を複製することが可能です (これは<emphasis>フォーク</emphasis>として知られています)。カーネルは新しい (全く同じ) プロセスメモリ空間とそれを使うもう一つ別のプロセスを割り当てます。この時点で、2 つのプロセスの違いは <emphasis>pid</emphasis> だけです。新しいプロセスは通常子プロセスと呼ばれています。そして <emphasis>pid</emphasis> が変わらなかったプロセスは親プロセスと呼ばれています。

en: Sometimes, the child process continues to lead its own life independently from its parent, with its own data copied from the parent process. In many cases, though, this child process executes another program. With a few exceptions, its memory is simply replaced by that of the new program, and execution of this new program begins. This is the mechanism used by the init process (with process number 1) to start additional services and execute the whole startup sequence. At some point, one process among <command>init</command>'s offspring starts a graphical interface for users to log in to (the actual sequence of events is described in more details in <xref linkend="sect.system-boot" />).
ja: しばしば、子プロセスは親プロセスからコピーされたデータを持った状態で、親プロセスから独立して引き続き実行されます。とは言うものの、子プロセスは他のプログラムを実行する場合が多いです。この場合、いくつかの例外を除いて、子プロセスのメモリは単純に新しいプログラムで置き換えられ、新しいプログラムの実行が始まります。このメカニズムを使用して、init プロセス (プロセス ID が 1 のプロセス) は追加的サービスを起動し起動シーケンスの全体を実行します。同時に、<command>init</command> の子プロセスの 1 つがログイン機能を提供するユーザ用のグラフィカルインターフェースを開始します (実際のイベントの順番は<xref linkend="sect.system-boot" />に詳しく書かれています)。

en: When a process finishes the task for which it was started, it terminates. The kernel then recovers the memory assigned to this process, and stops giving it slices of running time. The parent process is told about its child process being terminated, which allows a process to wait for the completion of a task it delegated to a child process. This behavior is plainly visible in command-line interpreters (known as <emphasis>shells</emphasis>). When a command is typed into a shell, the prompt only comes back when the execution of the command is over. Most shells allow for running the command in the background, it is a simple matter of adding an <userinput>&amp;</userinput> to the end of the command. The prompt is displayed again right away, which can lead to problems if the command needs to display data of its own.
ja: プロセスは自分が開始したタスクを完了したら、終了します。その後、カーネルがこのプロセスに割り当てられたメモリを回収し、カーネルはプロセスに実行時間を与えることを停止します。親プロセスは子プロセスが終了したことについて通知を受けます。このおかげで、親プロセスは子プロセスに委託したタスクの完了を待つことが可能になります。コマンドラインインタプリタ (<emphasis>シェル</emphasis>として知られています) ではこの挙動がはっきりと見えます。コマンドがシェルに入力された場合、コマンドの実行が終了するまでプロンプトは戻って来ません。多くのシェルでは、コマンドをバックグラウンドで実行することが可能です。これを行うには、コマンドの最後に <userinput>&amp;</userinput> を追加するだけです。この場合、プロンプトはすぐに戻ってきます。バックグラウンドで実行されるコマンドがデータを表示する場合、このやり方は問題を引き起こすかもしれません。

en: Daemons
ja: デーモン

en: A “daemon” is a process started automatically by the boot sequence. It keeps running (in the background) to perform maintenance tasks or provide services to other processes. This “background task” is actually arbitrary, and does not match anything particular from the system's point of view. They are simply processes, quite similar to other processes, which run in turn when their time slice comes. The distinction is only in the human language: a process that runs with no interaction with a user (in particular, without any graphical interface) is said to be running “in the background” or “as a daemon”.
ja: 「デーモン」は起動シーケンスによって自動的に開始されるプロセスです。「デーモン」はメンテナンス作業を実行したり他のプロセスにサービスを提供するために (バックグラウンドで) 実行され続けます。ここで実際の「バックグラウンドタスク」はどんなものでも構いませんし、システムの観点から何か特別なタスクを意味しているわけでもありません。「バックグラウンドタスク」は単なるプロセスで、他のプロセスとよく似ており、自分に割り当てられたタイムスライスが来た時に動きます。プロセスの区別は人間の言葉に過ぎません。そして、ユーザと対話せずに実行される (特にグラフィカルインターフェースを持たない) プロセスは「バックグラウンドで実行される」とか「デーモンとして実行される」などと表現されます。

en: <emphasis>VOCABULARY</emphasis> Daemon, demon, a derogatory term?
ja: <emphasis>VOCABULARY</emphasis> Daemon (守り神)、demon (悪魔)、軽蔑語?

en: Although <emphasis>daemon</emphasis> term shares its Greek etymology with <emphasis>demon</emphasis>, the former does not imply diabolical evil, instead, it should be understood as a kind of helper spirit. This distinction is subtle enough in English; it is even worse in other languages where the same word is used for both meanings.
ja: <emphasis>daemon</emphasis> という用語はギリシャ神話の <emphasis>demon</emphasis> を起源とするにも関わらず、<emphasis>daemon</emphasis> は暗に残虐な悪魔を意味するものではなく、その代わりに <emphasis>daemon</emphasis> は守り神のようなものとして理解されています。この区別は英語ではかなりわかりにくいものです。さらに、両方の意味を同じ言葉で表している他の言語ではもっとわかりにくいです。

en: Several such daemons are described in detail in <xref linkend="unix-services" />.
ja: いくつかのデーモンは<xref linkend="unix-services" />で詳細に説明されています。

en: Inter-Process Communications
ja: プロセス間通信

en: An isolated process, whether a daemon or an interactive application, is rarely useful on its own, which is why there are several methods allowing separate processes to communicate together, either to exchange data or to control one another. The generic term referring to this is <emphasis>inter-process communication</emphasis>, or IPC for short.
ja: デーモンでも対話型アプリケーションでも、単独のプロセスでは役に立たない場合が多いです。このため、異なるプロセス同士がデータを交換したり、相互に制御し合うためのさまざまな通信方法があります。これを意味する一般的な用語が<emphasis>プロセス間通信</emphasis> (略して IPC) です。

en: The simplest IPC system is to use files. The process that wishes to send data writes it into a file (with a name known in advance), while the recipient only has to open the file and read its contents.
ja: 最も簡単な IPC システムではファイルを使います。データ送信側のプロセスが送信内容をファイルに書き込み (事前にファイル名を決めておく必要があります)、受信側はファイルを開いてその内容を読むだけです。

en: <primary><emphasis>pipe</emphasis></primary>
ja: <primary><emphasis>パイプ</emphasis></primary>

en: In the case where you do not wish to store data on disk, you can use a <emphasis>pipe</emphasis>, which is simply an object with two ends; bytes written in one end are readable at the other. If the ends are controlled by separate processes, this leads to a simple and convenient inter-process communication channel. Pipes can be classified into two categories: named pipes, and anonymous pipes. A named pipe is represented by an entry on the filesystem (although the transmitted data is not stored there), so both processes can open it independently if the location of the named pipe is known beforehand. In cases where the communicating processes are related (for instance, a parent and its child process), the parent process can also create an anonymous pipe before forking, and the child inherits it. Both processes will then be able to exchange data through the pipe without needing the filesystem.
ja: データをディスクに保存したくないと思っているならば、<emphasis>パイプ</emphasis>を使うことが可能です。<emphasis>パイプ</emphasis>は 2 つの端を持つ単純なオブジェクトです。そして、片側に書き込まれたデータを逆側から読み出すことが可能です。パイプの一方の端が別のプロセスによって制御されている場合、パイプは単純で便利なプロセス間通信チャネルになります。パイプは 2 種類に分類分けされます。すなわち名前付きパイプと無名パイプに分類分けされます。名前付きパイプはファイルシステム上のエントリによって表現されます (転送されたデータは保存されません)。このため、事前に名前付きパイプの場所がわかっていれば、2 つのプロセスが独立に名前付きパイプを開くことが可能です。通信プロセス同士に関連性がある場合 (たとえば、親と子プロセス)、親プロセスはフォークの前に無名パイプを作成し、子プロセスがこれを継承するだけで済みます。両方のプロセスはパイプを通じてデータを交換することが可能です。ファイルシステムは必要ありません。

en: <emphasis>IN PRACTICE</emphasis> A concrete example
ja: <emphasis>IN PRACTICE</emphasis> 具体例

en: Let's describe in some detail what happens when a complex command (a <emphasis>pipeline</emphasis>) is run from a shell. We assume we have a <command>bash</command> process (the standard user shell on Debian), with <emphasis>pid</emphasis> 4374; into this shell, we type the command: <command>ls | sort</command> .
ja: それでは、複雑なコマンド (<emphasis>パイプライン</emphasis>) がシェルから実行された場合に何が起きるか詳しく説明しましょう。<emphasis>pid</emphasis> #4374 の <command>bash</command> プロセス (Debian の標準的なユーザシェル) があると仮定します。このシェルの中で、次のコマンドを入力します。<command>ls | sort</command>。

en: The shell first interprets the command typed in. In our case, it understands there are two programs (<command>ls</command> and <command>sort</command>), with a data stream flowing from one to the other (denoted by the <userinput>|</userinput> character, known as <emphasis>pipe</emphasis>). <command>bash</command> first creates an unnamed pipe (which initially exists only within the <command>bash</command> process itself).
ja: 最初にシェルは入力されたコマンドを解釈します。今回の場合、シェルは 2 種類のプログラム (<command>ls</command> と <command>sort</command>) が存在して、一方からもう一方へ流れるデータストリーム (<userinput>|</userinput> 文字によって表されます。これは<emphasis>パイプ</emphasis>としても知られています) があると理解します。<command>bash</command> は最初に無名パイプ (これは <command>bash</command> プロセス自身の中だけに存在します) を作成します。

en: Then the shell clones itself; this leads to a new <command>bash</command> process, with <emphasis>pid</emphasis> #4521 (<emphasis>pids</emphasis> are abstract numbers, and generally have no particular meaning). Process #4521 inherits the pipe, which means it is able to write in its “input” side; <command>bash</command> redirects its standard output stream to this pipe's input. Then it executes (and replaces itself with) the <command>ls</command> program, which lists the contents of the current directory. Since <command>ls</command> writes on its standard output, and this output has previously been redirected, the results are effectively sent into the pipe.
ja: その後、シェルは自分自身の複製を作ります。そしてこれは新しい <command>bash</command> プロセスで <emphasis>pid</emphasis> #4521 を持っています (<emphasis>pid</emphasis> は抽象的な数で、一般に特別な意味はありません)。プロセス #4521 はパイプを継承します。これは「入力」側に書き込むことが可能ということを意味しています。さらに <command>bash</command> は自分の標準出力ストリームをパイプの入力にリダイレクトします。その後、<command>bash</command> は <command>ls</command> プログラムを実行します (さらに自分自身を <command>ls</command> で置き換えます)。<command>ls</command> は現在のディレクトリの内容をリストします。<command>ls</command> の書き込み先は標準出力で、この出力はあらかじめリダイレクトされていたため、結果はパイプに送られます。

en: A similar operation happens for the second command: <command>bash</command> clones itself again, leading to a new <command>bash</command> process with pid #4522. Since it is also a child process of #4374, it also inherits the pipe; <command>bash</command> then connects its standard input to the pipe output, then executes (and replaces itself with) the <command>sort</command> command, which sorts its input and displays the results.
ja: 2 番目のコマンドについても同様の操作が行われます。つまり <command>bash</command> はもう一度自分自身の複製を作り、これにより pid #4522 の新しい <command>bash</command> プロセスが作成されます。pid #4522 の新しい <command>bash</command> プロセスは #4374 の子プロセスで、パイプを継承します。さらに <command>bash</command> は自分の標準入力をパイプの出力に接続し、その後 <command>sort</command> コマンドを実行します (さらに自分自身を <command>sort</command> で置き換えます)。<command>sort</command> コマンドは自分への入力をソートして結果を表示します。

en: All the pieces of the puzzle are now set up: <command>ls</command> reads the current directory and writes the list of files into the pipe; <command>sort</command> reads this list, sorts it alphabetically, and displays the results. Processes numbers #4521 and #4522 then terminate, and #4374 (which was waiting for them during the operation), resumes control and displays the prompt to allow the user to type in a new command.
ja: これで、パズルのすべてのピースがそろった状態になります。つまり <command>ls</command> は現在のディレクトリを読み込んで、ファイルのリストをパイプに書き込みます。さらに <command>sort</command> はファイルのリストを読み込んで、アルファベット順にソートして、結果を表示します。プロセス ID が #4521 と #4522 のプロセスは終了し、#4374 (これは実行中の他プロセスが終了するのを待っていました) は制御を取り戻し、ユーザが新しいコマンドを入力するためのプロンプトを表示します。

en: Not all inter-process communications are used to move data around, though. In many situations, the only information that needs to be transmitted are control messages such as “pause execution” or “resume execution”. Unix (and Linux) provides a mechanism known as <emphasis>signals</emphasis>, through which a process can simply send a specific signal (chosen from a predefined list of signals) to another process. The only requirement is to know the <emphasis>pid</emphasis> of the target.
ja: しかしながら、すべてのプロセス間通信がデータを移動させるために使われるわけではありません。多くの状況で、送信する必要のある情報は「実行を一時停止」や「実行を再開」などの制御メッセージです。Unix (と Linux) は<emphasis>シグナル</emphasis>として知られているメカニズムを提供します。このメカニズムを使って、あるプロセスは別のプロセスに対して簡単に特定のシグナルを送信することが可能です (送信するシグナルは事前に定義されたシグナルのリストから選びます)。送信に必要な情報は送信先の <emphasis>pid</emphasis> だけです。

en: For more complex communications, there are also mechanisms allowing a process to open access, or share, part of its allocated memory to other processes. Memory now shared between them can be used to move data between the processes.
ja: さらに複雑な通信を行うには、プロセスが他のプロセスに対して自分が割り当てられたメモリの一部へのアクセス制限を解除したり、共有したりするメカニズムを使います。これで、プロセス間で共有されたメモリをデータ交換のために使うことが可能になります。

en: Finally, network connections can also help processes communicate; these processes can even be running on different computers, possibly thousands of kilometers apart.
ja: 最後に、ネットワーク接続を使ってプロセス同士を通信させることが可能です。そして数千キロ離れた異なるコンピュータで動いているプロセス同士でも通信することが可能です。

en: It is quite standard for a typical Unix-like system to make use of all these mechanisms to various degrees.
ja: 典型的な Unix 系システムでは、さまざまなレベルでこれらのメカニズムを使っており、かなり標準的な手法になっています。

en: Libraries
ja: ライブラリ

en: <primary>library (of functions)</primary>
ja: <primary sortas="カンスウライブラリ">関数ライブラリ</primary>

en: Function libraries play a crucial role in a Unix-like operating system. They are not proper programs, since they cannot be executed on their own, but collections of code fragments that can be used by standard programs. Among the common libraries, you can find:
ja: 関数ライブラリは Unix 系オペレーティングシステムで重要な役割を果たします。関数ライブラリは厳密な意味のプログラムではありません。なぜなら、関数ライブラリ自体は実行できず、標準的なプログラムで使用されるコードの断片に過ぎないからです。よく使われるライブラリの中でも特に以下のものが有名です。

en: the standard C library (<emphasis>glibc</emphasis>), which contains basic functions such as ones to open files or network connections, and others facilitating interactions with the kernel;
ja: 標準 C ライブラリ (<emphasis>glibc</emphasis>)。これにはファイルやネットワーク接続を開く関数やカーネルとの通信を容易にする関数などの基本的な関数が含まれます。

en: graphical toolkits, such as Gtk+ and Qt, allowing many programs to reuse the graphical objects they provide;
ja: Gtk+ と Qt などのグラフィカルツールキット。これを使うことで、多くのプログラムはツールキットの提供するグラフィカルオブジェクトを再利用することが可能です。

en: Thanks to those libraries, applications can reuse existing code. Application development is simplified since many applications can reuse the same functions. With libraries often developed by different persons, the global development of the system is closer to Unix's historical philosophy.
ja: これらのライブラリのおかげで、アプリケーションは既存のコードを再利用することが可能です。多くのアプリケーションは同じ関数を再利用できるため、アプリケーションの開発は単純化されます。また、通常それぞれのライブラリは別の人によって開発されているため、アプリケーションの大域的な開発は Unix の歴史的哲学に近いものになります。

en: <emphasis>CULTURE</emphasis> The Unix Way: one thing at a time
ja: <emphasis>CULTURE</emphasis> Unix 流、一度に一つのことをせよ

en: One of the fundamental concepts that underlies the Unix family of operating systems is that each tool should only do one thing, and do it well; applications can then reuse these tools to build more advanced logic on top. This philosophy can be seen in many incarnations. Shell scripts may be the best example: they assemble complex sequences of very simple tools (such as <command>grep</command>, <command>wc</command>, <command>sort</command>, <command>uniq</command> and so on). Another implementation of this philosophy can be seen in code libraries: the <emphasis>libpng</emphasis> library allows reading and writing PNG images, with different options and in different ways, but it does only that; no question of including functions that display or edit images.
ja: Unix 系オペレーティングシステムの根底にある基本的概念の一つとして、それぞれのツールがたった 1 つのことを担当し、それをうまくこなす、というものがあります。そしてアプリケーションはこれらのツールを再利用して、より高度な論理を作り上げることが可能です。この根本原理はさまざまな形で具現化されています。シェルスクリプトは最良の例かもしれません。具体的に言えば、シェルスクリプトは極めて簡単なツール (たとえば <command>grep</command>、<command>wc</command>、<command>sort</command>、<command>uniq</command> など) を複雑に並べたものです。コードライブラリも基本的概念を具現化したものとみなすことが可能です。すなわち <emphasis>libpng</emphasis> ライブラリを使うことで、さまざまなオプションとさまざまな方法を使って、PNG イメージの読み込みと書き込みを行うことが可能です。しかし、<emphasis>libpng</emphasis> ライブラリはそれ以上のことを行いません。従って、イメージを表示したり編集する関数は全く含まれません。

en: Moreover, these libraries are often referred to as “shared libraries”, since the kernel is able to only load them into memory once, even if several processes use the same library at the same time. This allows saving memory, when compared with the opposite (hypothetical) situation where the code for a library would be loaded as many times as there are processes using it.
ja: さらに、これらのライブラリは「共有ライブラリ」とも呼ばれています。なぜなら、複数のプロセスが同じライブラリを同時に使う場合、カーネルはライブラルの読み込みを 1 回だけで済ませることが可能だからです。プロセスが使うライブラリのコードを何度も読み込むような逆の (仮想的な) 状況に比べて、これはメモリを節約することになります。
