Linux の 101 試験対策: Linux コマンドライン

GNU と UNIX コマンドを理解する

GUI も確かに優れてはいるものの、Linux® の真の実力を発揮させるのにコマンドラインに代わるものはありません。この記事では、Ian Shields が LPI 認定のための重要な機能を中心に、bash シェルの主要な機能の一部を紹介します。記事を読み終わる頃には、echo や exit などの基本的な Linux コマンドを使いこなせるだけでなく、環境変数の設定やシステム情報の収集も難なく行えるようになっているはずです。[リスト 8 に続く「注:」の最初の 2 つに記載されている ID (PID) を正しい ID に更新しました (編集者より)]

Ian Shields, Senior Programmer, IBM

Ian ShieldsIan Shields は、developerWorks Linux ゾーンの様々な Linux プロジェクトに関わっています。彼はノースキャロライナ州 Research Triangle Park にある IBM のシニア・プログラマーです。1973年にオーストラリアのキャンベラでシステム・エンジニアとして IBM に入社して以来、カナダのモントリオールやノースキャロライナ州 Research Triangle Park で、コミュニケーション・システムやパーベイシブ・コンピューティングに携わってきました。彼はいくつかの特許を保持しています。Australian National University にて純粋数学および哲学で学位を取得し、また North Carolina State University にてコンピューター・サイエンスで修士号と博士号を取得しています。Ian について詳しく知るには、My developerWorks で彼のプロフィールを見てください。


developerWorks 貢献著者レベル

2009年 8月 31日 (初版 2009年 8月 25日)

この連載について

この連載は Linux システム管理タスクの学習に役立つだけでなく、LPIC-1 (Linux Professional Institute Certification レベル 1) 試験に備えるための教材にもなります。

連載の各記事についての説明とリンクについては、連載のロードマップを参照してください。現在進行中のこのロードマップは、LPIC-1 試験の最新の目標 (2009年4月) を反映しています。完成した記事はその都度ロードマップに追加されていきますが、当面は developerWorks の LPI 認定試験対策チュートリアルで同様の教材の以前のバージョンを調べてください。これらのバージョンは、2009年4月より前の LPIC-1 目標に対応しています。

前提条件

この連載の記事を最大限に活用するには、Linux の基礎知識と、記事に記載されたコマンドを演習できる実際の Linux システムが必要です。プログラムのバージョンによって出力のフォーマットに違いが出てくる場合もあるため、コマンドの実行結果は必ずしもここに記載するリストや図とまったく同じであるとは限りません。

概要

この記事では、bash シェルの主要な機能の一部を簡単に紹介し、以下のトピックを取り上げます。

  • コマンドラインを使用して行う、シェルとコマンドとの対話
  • 有効なコマンドおよびコマンド・シーケンスの使用
  • 環境変数の定義、変更、参照、およびエクスポート
  • コマンド履歴へのアクセスと編集機能
  • パスに含まれるコマンドと含まれないコマンドの呼び出し
  • man (マニュアル) ページを使用したコマンドの検索

この記事は、Junior Level Administration (LPIC-1) 101 試験における主題 103 の 103.1 の試験対策となります。この目標の重要度は 4 です。この記事の内容は、2009年4月時点での 101 試験の目標に対応します。明確な要件については、必ず目標を参照して確認してください。

bash シェル

bash シェルは Linux に用意されているシェルのうちの 1 つです。以前のシェル (/bin/sh) の作成者である Stephen Bourne の名前にちなんで、Bourne Again Shell とも呼ばれています。bash は sh と実質的に互換しますが、関数およびプログラミング機能両方の点で多くの改善が盛り込まれています。bash には Korn シェル (ksh) と C シェル (csh) の機能が組み込まれ、POSIX 対応のシェルとして意図されています。

bash の詳細を掘り下げる前に、シェルはコマンドを受け入れて実行するプログラムであることを思い出してください。シェルはプログラミング構成体もサポートし、小さな構成要素から複雑なコマンドを組み立てられるようにしています。これらの複雑なコマンド、つまりスクリプトをファイルとして保管し、それ自体を新しいコマンドにすることができます。実際、標準的な Linux システムでの多くのコマンドスクリプトです。

シェルには、cdbreakexec などの組み込みコマンドがあります。それ以外のコマンドは外部コマンドです。

シェルも以下の 3 つの標準入出力ストリームを使用します。

  • stdin。標準入力ストリームで、ここからコマンドを入力します。
  • stdout。標準出力ストリームで、コマンドからの出力を表示します。
  • stderr。標準エラー・ストリームで、コマンドからのエラー出力を表示します。

入力ストリームがプログラムに提供する入力は、通常は端末のキー・ストロークによるものです。出力ストリームは端末にテキスト文字を出力するのが通常です。当初、端末は ASCII タイプライターやディスプレイ端末でしたが、今ではグラフィカル・デスクトップ上のウィンドウであることの方が多くなっています。これらの標準入出力ストリームをリダイレクトする方法については、この連載の別の記事で詳しく説明する予定です。

記事ではこれ以降、読者がシェル・プロンプトを起動する方法を知っていることを前提とします。この方法がわからない場合は、シェル・プロンプトの起動方法やその他の詳細を説明している developerWorks の記事「Basic tasks for new Linux developers」を参照してください。

グラフィカル・デスクトップを使わずに Linux システムを使用している場合、またはグラフィカル・デスクトップ上でターミナル・ウィンドウを開いた場合、リスト 1 に記載するようなプロンプトが表示されるはずです。

リスト 1. 一般ユーザーのプロンプト例
[db2inst1@echidna db2inst1]$
ian@lyrebird:~>
$

root ユーザー (スーパーユーザー) としてログインした場合には、リスト 2 のようなプロンプトが表示されます。

リスト 2. スーパーユーザー (root) のプロンプト例
[root@echidna ~]#
lyrebird:~ #
#

root ユーザーにはかなりの権限があるため、慎重に使用してください。root 権限のあるユーザーに対して表示されるプロンプトのほとんどは、末尾がシャープ記号 (#) になります。一般ユーザーの権限を持つ場合のプロンプトは、通常はこれとは別の文字 (一般にドル記号 ($)) で表されます。実際のプロンプトは、この記事に記載する例とは異なっている場合があります。例えばユーザー名やホスト名、カレント・ディレクトリー、あるいはプロンプトが画面に出力された日付や時刻などが含まれることがあります。

この連載に記載するサンプル・コードは、実際の Linux システムのデフォルト・プロンプトを使用した場合のコードをカット・アンド・ペーストしたものです。root のプロンプトは # で終わるため、$ で終わる一般ユーザーのプロンプトと見分けることができます。この規約は、同じ話題を扱った多くの本とも一貫しています。サンプル・コードを使用してみて上手く動作しないような場合には、そのサンプル・コードのプロンプトを確認してみてください。


コマンドおよびシーケンス

プロンプトが表示されたところで、今度はこのプロンプトで何ができるかを見ていきましょう。シェルの第一の役割は、ユーザーが Linux システムと対話できるようにコマンドを解釈することです。Linux (および UNIX®) システムでのコマンドは、コマンド名の後にオプションとパラメーターが続く形になります。コマンドのなかには、オプションもパラメーターもないものもあれば、どちらか一方しかないものもあります。

行に # 文字が含まれている場合、その行の残りすべての文字は無視されます。つまり、# 文字は root プロンプトだけでなく、コメントを意味する場合もあります。そのどちらであるかは、コンテキストから明らかに判断できるはずです。

echo

echo コマンドは、その引数を端末に出力 (エコー出力) します (リスト 3 を参照)。

リスト 3. エコー出力の例
[ian@echidna ~]$ echo Word
Word
[ian@echidna ~]$ echo A phrase
A phrase
[ian@echidna ~]$ echo Where     are   my   spaces?
Where are my spaces?
[ian@echidna ~]$ echo "Here     are   my   spaces." # plus comment
Here     are   my   spaces.

リスト 3 の 3 番目の例を見ると、出力では、余分なスペースがすべて 1 つのスペースにまとめられています。このようにまとめられないようにするためには、二重引用符 (") または単一引用符 (') のいずれかを使って文字列を囲む必要があります。bash は入力行を、ホワイト・スペース (空白、タブ、改行文字など) で複数のトークンに分離してからコマンドに渡します。文字列を引用符で囲むと、余分なホワイト・スペースが維持され、文字列全体が 1 つのトークンになります。コマンド名の後に続くトークンは、そのそれぞれがパラメーターであるため、上記の例に含まれるパラメーターの数は、上から順に 1 つ、2 つ、4 つ、1 つとなります。

echo コマンドにはいくつかのオプションがあります。一般に、echo は出力の最後に改行文字を追加しますが、-n オプションを使用すると、これを抑止することができます。また、-e オプションを使用して、特定のバックスラッシュでエスケープした文字に特別の意味を持たせることもできます。表 1 にエスケープ・シーケンスの例を記載します。

表 1. echo とエスケープ文字
エスケープ シーケンス機能
\aアラート (ベル)
\bバックスペース
\c末尾の改行を抑止 (-n オプションと同じ機能)
\f改ページ (ビデオ・ディスプレイの画面をクリア)
\n改行
\rキャリッジ・リターン
\t水平タブ

エスケープおよび行の継続

bash でバックスラッシュを使用する際には、少し気を付けなければならない問題があります。バックスラッシュ文字 (\) が引用符で囲まれていない場合、バックスラッシュ文字はエスケープとして機能し、それ以降の文字をそのままの意味に維持するよう bash 自体に指示します。これは、この後すぐに説明するように特殊なシェル・メタ文字に必要な規則ですが、例外が 1 つあります。それは、バックスラッシュに改行が続く場合、bash はバックスラッシュと改行の両方を受け入れ、このシーケンスを行の継続要求として扱うことです。この例外の規則は、特にシェル・スクリプトに含まれる長い行を分割する場合に役立ちます。

echo コマンドや、同様のエスケープ制御文字を使用するその他多くのコマンドに、上記で説明したシーケンスを適切に処理させるためには、シェルがコマンドでバックスラッシュを使用できるように 2 つ目のバックスラッシュを使うのでない限り、エスケープ・シーケンスを引用符で囲むか、または引用符で囲んだ文字列に含める必要があります。リスト 4 に、\ のさまざまな使い方の例をいくつか記載します。

リスト 4. その他のエコー出力の例
[ian@echidna ~]$ echo -n No new line
No new line[ian@echidna ~]$ echo -e "No new line\c"
No new line[ian@echidna ~]$ echo "A line with a typed
> return"
A line with a typed
return
[ian@echidna ~]$ echo -e "A line with an escaped\nreturn"
A line with an escaped
return
[ian@echidna ~]$ echo "A line with an escaped\nreturn but no -e option"
A line with an escaped\nreturn but no -e option
[ian@echidna ~]$ echo -e Doubly escaped\\n\\tmetacharacters
Doubly escaped
        metacharacters
[ian@echidna ~]$ echo Backslash \
> followed by newline \
> serves as line continuation.
Backslash followed by newline serves as line continuation.

引用符が対になっていない行を入力すると、bash は特殊なプロンプト (>) を表示することに注意してください。その場合、入力文字列は 2 行目へと続き、改行文字が組み込まれます。

bash シェルのメタ文字および制御演算子

bash には複数のメタ文字があります。メタ文字が引用符で囲まれていない場合も、同じく入力を単語に分割します。空白以外のメタ文字には以下のものがあります。

  • |
  • &
  • ;
  • (
  • )
  • <
  • >

これらのメタ文字については、この記事の別の部分で詳しく説明します。とりあえず注意する点として、メタ文字をテキストの一部として組み込む場合には、引用符で囲むか、またはリスト 4 のようにバックスラッシュ (\) を使用してエスケープする必要があります。

改行、および特定のメタ文字またはメタ文字の対は、制御演算子としても機能します。制御演算子として機能するメタ文字は以下のとおりです。

  • ||
  • &&
  • &
  • ;
  • ;;
  • |
  • (
  • )

上記の制御演算子のいくつかは、コマンドのシーケンスまたはリストを作成するために使用することができます。

最も単純なコマンド・シーケンスは、セミコロン (;) で区切られた 2 つのコマンドです。この場合、各コマンドが順に実行されることになります。あらゆるプログラマブル環境では、コマンドが成功または失敗を示す指標を返します。Linux コマンドは通常、成功した場合にはゼロの値を返し、失敗した場合にはゼロ以外の値を返します。&& および || 制御演算子を使用することで、何らかの条件付き処理をリストに導入することができます。2 つのコマンドを制御演算子 && で区切ると、最初のコマンドがゼロの終了コードを返した場合にのみ、2 番目のコマンドが実行されます。|| でコマンドを区切った場合には、最初のコマンドがゼロ以外の終了コードを返さない限り、2 番目のコマンドは実行されません。リスト 5 は、echo コマンドを使用したコマンド・シーケンスの例です。echo は 0 を返すため、これらのコマンド・シーケンスはそれほど興味深いものではありませんが、この後、他のコマンドを使用した場合の例を記載します。

リスト 5. コマンド・シーケンス
[ian@echidna ~]$ echo line 1;echo line 2; echo line 3
line 1
line 2
line 3
[ian@echidna ~]$ echo line 1&&echo line 2&&echo line 3
line 1
line 2
line 3
[ian@echidna ~]$ echo line 1||echo line 2; echo line 3
line 1
line 3

exit

シェルを終了するには、exit コマンドを使用します。オプションで、終了コードをパラメーターとして指定することもできます。グラフィカル・デスクトップ上のターミナル・ウィンドウでシェルを実行している場合、このコマンドを実行するとウィンドウが閉じます。同様に、例えば ssh または telnet を使用してリモート・システムに接続している場合には、接続が終了します。bash シェルでは、Ctrl キーと d キーを同時に押して終了することもできます。

今度は別の制御演算子に目を向けてみましょう。コマンドまたはコマンドのリストを括弧で囲むと、そのコマンドまたはコマンド・シーケンスはサブシェルとして実行されるため、exit コマンドは実行中のシェル自体ではなく、サブシェルを終了することになります。リスト 6 に、&& と ||、および 2 つの異なる終了コードを組み合わせた単純な例を記載します。

リスト 6. サブシェルおよびシーケンス
[ian@echidna ~]$ (echo In subshell; exit 0) && echo OK || echo Bad exit
In subshell
OK
[ian@echidna ~]$ (echo In subshell; exit 4) && echo OK || echo Bad exit
In subshell
Bad exit

記事ではこの後、他のコマンド・シーケンスについても取り上げます。


環境変数

bash シェルでの実行中には、プロンプトのフォーム、ホーム・ディレクトリー、作業ディレクトリー、シェルの名前、開いているファイル、定義した関数などの多数の要素によって環境が構成されます。環境に含まれる多くの変数は、bash によって設定されていることもあれば、ユーザーが設定する場合もあります。bash シェルでは、ユーザーはシェル変数も使用することができます。シェル変数は、シェルのなかで実行中の他のプロセスで使用したり、あるいは現行のシェルから派生する他のシェルで使用したりするために、環境にエクスポートすることができます。

環境変数とシェル変数にはどちらも名前があります。変数の値を参照するには、変数名の先頭に「$」を付加します。表 2 に、よく目にする一般的な bash 環境変数のいくつかを記載します。

表 2. 一般的な bash 環境変数
名前機能
USERログイン・ユーザーの名前
UIDログイン・ユーザーの数値によるユーザー ID
HOMEユーザーのホーム・ディレクトリー
PWDカレント作業ディレクトリー
SHELLシェルの名前
$プロセス ID (実行中の bash シェル (またはその他の) プロセスの PID)
PPIDこのプロセスを開始したプロセスのプロセス ID (つまり、親プロセスの ID)
?最後のコマンドの終了コード

上記の一般的な bash 変数は、例えばリスト 7 のように使用されます。

リスト 7. 環境変数とシェル変数
[ian@echidna ~]$ echo $USER $UID
ian 500
[ian@echidna ~]$ echo $SHELL $HOME $PWD
/bin/bash /home/ian /home/ian
[ian@echidna ~]$ (exit 0);echo $?;(exit 4);echo $?
0
4
[ian@echidna ~]$ echo $$ $PPID
2559 2558

bash が使用されていない場合

大抵の Linux ディストリビューションでのデフォルト・シェルは、bash シェルです。bash シェルが使用されていない場合には、以下のいずれかの方法で bash シェルの使い方を練習することを検討してください。

  • chsh -s /bin/bash
    コマンドを使用して、デフォルトのシェルを変更します。変更後のデフォルトは、次回ログインした時点で有効になります。
  • su - $USER -s /bin/bash
    コマンドを使用して、現行シェルの子として別のプロセスを作成します。新しいプロセスが、bash を使用したログイン・シェルとなります。
  • デフォルトに bash シェルを設定した id を作成し、LPI 試験勉強用に使用します。

シェル変数を作成または設定するには、変数の名前に続けて等号 (=) を入力します。該当する変数がある場合は、その変数を変更して新しい値を割り当てることになります。変数は大文字/小文字を区別するため、var1 と VAR1 は異なる変数です。特にエクスポートされた変数をはじめ、変数は大文字であるのが慣例ですが、これは要件ではありません。厳密に言うと、$$ と $? は変数というよりシェル・パラメーターです。この 2 つは参照専用なので、値を割り当てることはできません。

シェル変数を作成する際に、そのシェル変数を環境にエクスポートして、このシェルから開始する他のプロセスにも有効にしたいという場合がよくあります。エクスポートした変数は、親シェルでは使用することができません。変数名をエクスポートするには export コマンドを使用します。bash でのショートカットとして、値の割り当てと変数のエクスポートを 1 つのステップで実行することができます。

割り当てとエクスポートの実行例として、現在実行中の bash シェル内で bash コマンドを実行した後に、新しい bash シェルから Korn シェル (ksh) を実行します。実行中のコマンドに関する情報を表示するには、ps コマンドを使用します。ps については、この連載の別の記事で詳しく説明します (連載のロードマップについては、「参考文献」を参照してください)。

リスト 8. その他の環境変数とシェル変数
[ian@echidna ~]$ ps -p $$ -o "pid ppid cmd"
  PID  PPID CMD
 2559  2558 -bash
[ian@echidna ~]$ bash
[ian@echidna ~]$ ps -p $$ -o "pid ppid cmd"
  PID  PPID CMD
 2811  2559 bash
[ian@echidna ~]$ VAR1=var1
[ian@echidna ~]$ VAR2=var2
[ian@echidna ~]$ export VAR2
[ian@echidna ~]$ export VAR3=var3
[ian@echidna ~]$ echo $VAR1 $VAR2 $VAR3
var1 var2 var3
[ian@echidna ~]$ echo $VAR1 $VAR2 $VAR3 $SHELL
var1 var2 var3 /bin/bash
[ian@echidna ~]$ ksh
$ ps -p $$ -o "pid ppid cmd"
  PID  PPID CMD
 2840  2811 ksh
$ export VAR4=var4
$ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
var2 var3 var4 /bin/bash
$ exit
[ian@echidna ~]$ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
var1 var2 var3 /bin/bash
[ian@echidna ~]$ ps -p $$ -o "pid ppid cmd"
  PID  PPID CMD
 2811  2559 bash
[ian@echidna ~]$ exit
exit
[ian@echidna ~]$ ps -p $$ -o "pid ppid cmd"
  PID  PPID CMD
 2559  2558 -bash
[ian@echidna ~]$ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
/bin/bash

注:

  1. このシーケンスを開始した時点での bash シェルの PID は 2559 でした。
  2. 2 番目の bash シェルの PID は 2811 でした。その親 (つまり、元の bash シェル) の PID は 2559 となっています。
  3. 2 番目の bash シェルでは VAR1、VAR2、VAR3 を作成しましたが、エクスポートしたのは VAR2 と VAR3 だけです。
  4. Korn シェルでは、VAR4 を作成しました。echo コマンドによって VAR2、VAR3、VAR4 の値だけが表示され、VAR1 がエクスポートされていないことが確認されます。プロンプトは変更されたのに、SHELL 変数の値が変更されていないことに驚きましたか?このように、現在実行中のシェルを把握するために、常に SHELL 変数に頼ることはできませんが、ps コマンドであれば実際のコマンドがわかります。ps は最初の bash シェルの前にハイフン (-) を付けることで、このシェルがログイン・シェルであると示していることに注意してください。
  5. 2 番目の bash シェルに戻ると、VAR1、VAR2、VAR3 があることがわかります。
  6. そして最後に元のシェルに戻ると、新しく作成した変数は 1 つもなくなっています。

引用符についての前の説明では、単一引用符と二重引用符のどちらかを使用できると言いましたが、この 2 つには重要な違いがあります。シェルは、二重引用符 ($quot;) で囲まれたシェル変数については展開しますが、単一引用符が使用されている場合は変数展開を行いません。上記の例では、シェルのなかで別のシェルを開始し、新しいプロセス ID を取得しました。-c オプションを使用することで、コマンドをもう一方のシェルに渡し、そのシェルにコマンドを実行させて返すことができます。引用符で囲まれた文字列をコマンドとして渡すと、外側のシェルが引用符を取り除いて文字列を渡します。二重引用符が使用されている場合、文字列が渡されるに変数展開が行われるため、期待したとおりの結果にはならない可能性があります。シェルとコマンドは別のプロセスで実行されることから、別の PID を持つことになります。リスト 9 で、この概念を説明します。このリストでは、最上位レベルの bash シェルの PID が強調表示されています。

リスト 9. 引用符の使用とシェル変数
[ian@echidna ~]$ echo "$SHELL" '$SHELL' "$$" '$$'
/bin/bash $SHELL 2559 $$
[ian@echidna ~]$ bash -c "echo Expand in parent $$ $PPID"
Expand in parent 2559 2558
[ian@echidna ~]$ bash -c 'echo Expand in child $$ $PPID'
Expand in child 2845 2559

今までのところ、変数参照はいずれもホワイト・スペースで終わっているため、変数名がどこで終わるのかは明らかでした。実のところ、変数名を構成できるのは、文字、数字、またはアンダーバー文字だけです。シェルは、これ以外の文字が検出されると、そこで変数名が終わると認識します。しかし場合によっては、意味が曖昧な表現で変数を使用しなければならないこともあります。そのような場合には、中括弧を使って変数名を表すことができます (リスト 10 を参照)。

リスト 10. 変数名での中括弧の使用
[ian@echidna ~]$ echo "-$HOME/abc-"
-/home/ian/abc-
[ian@echidna ~]$ echo "-$HOME_abc-"
--
[ian@echidna ~]$ echo "-${HOME}_abc-"
-/home/ian_abc-

env

オプションやパラメーターを指定しないで env コマンドを実行すると、現行の環境変数が表示されます。また、このコマンドを使用してカスタム環境でコマンドを実行することもできます。-i (または単に -) オプションを指定すると、コマンドの実行前に現行の環境がクリアされます。一方、-u オプションを指定すると、渡したくない環境変数を設定解除することができます。

リスト 11 に、パラメーターを使用しない場合の env コマンドによる出力の一部と、親環境を使わずに異なるシェルを呼び出す例を 3 つ記載します。このリストを注意深く見てから、説明を読んでください。

注: 以下のコードは、使用しているシステムに ksh (Korn) または tcsh シェルがインストールされていない場合は、インストールしてからでないと実行することができません。

リスト 11. env コマンド
[ian@echidna ~]$ env
HOSTNAME=echidna
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=9.27.206.68 1316 22
SELINUX_USE_CURRENT_RANGE=
QTDIR=/usr/lib/qt-3.3
QTINC=/usr/lib/qt-3.3/include
SSH_TTY=/dev/pts/3
USER=ian
...
_=/bin/env
OLDPWD=/etc
[ian@echidna ~]$ env -i bash -c 'echo $SHELL; env'
/bin/bash
PWD=/home/ian
SHLVL=1
_=/bin/env
[ian@echidna ~]$ env -i ksh -c 'echo $SHELL; env'
/bin/sh
_=/bin/env
PWD=/home/ian
_AST_FEATURES=UNIVERSE - ucb
[ian@echidna ~]$ env -i tcsh -c 'echo $SHELL; env'
SHELL: Undefined variable.

bash は SHELL 変数を設定していますが、環境にはエクスポートしていません。ただし、bash は他にも 3 つの変数をこの環境で作成していることに注意してください。ksh の例では 2 つの環境変数がありますが、SHELL 変数の値をエコー出力しようとしても、空白の行が返されるだけです。最後の tcsh の例では環境変数を作成していないため、SHELL 変数の値を参照しようとするとエラーが発生します。

unset および set

リスト 11 には、シェルが変数および環境をどのように扱うかという点で異なる振る舞いを記載しました。この記事で焦点としているのは bash ですが、すべてのシェルが同じように振る舞うわけではないことを知っておくと有益です。さらに、シェルはログイン・シェルか、そうではないかによっても振る舞いが異なります。とりあえずは、ログイン・シェルとはシステムにログインすると表示されるシェルとだけ言っておきます。必要な場合は、他のシェルを起動してログイン・シェルとして振る舞わせることも可能です。env -i を使って開始した上記の 3 つのシェルは、ログイン・シェルではありません。ログイン・シェルの場合には、どのような違いが出てくるかを確認するには、シェル・コマンド自体に -l オプションを付けてください。

非ログイン・シェルで SHELL 変数の値を表示しようとした上記の例について考えてみましょう。

  1. bash はその起動時に SHELL 変数を設定しましたが、自動的にその変数を環境にエクスポートすることはしませんでした。
  2. ksh はその起動時に SHELL 変数を設定しませんでしたが、定義されていない環境変数を参照することは、空の値を持つ変数を参照することと同じです。
  3. tcsh はその起動時に SHELL 変数を設定していません。この場合のデフォルトの振る舞いは、存在しない変数を使おうとするとエラーがレポートされるという点で、ksh (および bash) とは異なります。

変数の設定を解除してシェル変数リストから削除するには、unset コマンドを使用することができます。変数が環境にエクスポートされた場合でも、このコマンドを使えば変数が環境から削除されます。一方、set コマンドは bash (またはその他のシェル) の振る舞いに関する多くのファセットを制御するために使用することができます。set はシェルの組み込みコマンドなので、さまざまなオプションはこのシェルに固有のものです。bash では、-u オプションを使用すると、未定義の変数を、定義されているけれども空の変数として扱うのではなく、エラーをレポートします。これらの各種のオプションは、set コマンドを - と一緒に実行すると有効になり、+ と一緒に実行すると無効になります。現在設定されている set オプションを表示するには、echo $- を使用します。

リスト 12. unset および set
[ian@echidna ~]$ echo $-
himBH
[ian@echidna ~]$ echo $VAR1

[ian@echidna ~]$ set -u;echo $-
himuBH
[ian@echidna ~]$ echo $VAR1
-bash: VAR1: unbound variable
[ian@echidna ~]$ VAR1=v1
[ian@echidna ~]$ VAR1=v1;echo $VAR1
v1
[ian@echidna ~]$ unset VAR1;echo $VAR1
-bash: VAR1: unbound variable
[ian@echidna ~]$ set +u;echo $VAR1;echo $-

himBH

オプションを設定しないで set コマンドを使用すると、すべてのシェル変数とそれぞれの値 (設定されている場合) が表示されます。また、シェル変数の値を作成、エクスポート、表示する declare というコマンドもあります。この他にも多数ある set オプション、そして declare コマンドについては、man ページで調べることができます。man ページについては、記事の後のほうで説明します。

exec

このセクションで最後に取り上げるコマンドは exec です。exec コマンドを使用することで、現行のシェルに代わる別のプログラムを実行することができます。リスト 13 では、子bash シェルを開始した後、exec を使って Korn シェルに置き換えています。Korn シェルが終了すると、元の bash シェル (この例では PID 2852 のシェル) に戻ります。

リスト 13. exec の使用
[ian@echidna ~]$ echo $$
2852
[ian@echidna ~]$ bash
[ian@echidna ~]$ echo $$
5114
[ian@echidna ~]$ exec ksh
$ echo $$
5114
$ exit
[ian@echidna ~]$ echo $$
2852

uname によるシステム情報

uname コマンドは、使用しているシステムとそのカーネルに関する情報を出力します。リスト 14 に、uname で使用できる各種オプションと、その実行結果として出力された情報を記載します。それぞれのオプションは表 3 に定義されています。

リスト 14. uname コマンド
[ian@echidna ~]$ uname
Linux
[ian@echidna ~]$ uname -s
Linux
[ian@echidna ~]$ uname -n
echidna.raleigh.ibm.com
[ian@echidna ~]$ uname -r
2.6.29.6-217.2.3.fc11.i686.PAE
[ian@echidna ~]$ uname -v
#1 SMP Wed Jul 29 16:05:22 EDT 2009
[ian@echidna ~]$ uname -m
i686
[ian@echidna ~]$ uname -o
GNU/Linux
[ian@echidna ~]$ uname -a
Linux echidna.raleigh.ibm.com 2.6.29.6-217.2.3.fc11.i686.PAE 
#1 SMP Wed Jul 29 16:05:22 EDT 2009 i686 i686 i386 GNU/Linux
表 3. uname のオプション
オプション内容
-sカーネルの名前を出力します。これは、オプションが何も指定されていない場合のデフォルトです。
-nノード名またはホスト名を出力します。
-rカーネルのリリースを出力します。このオプションは、モジュール処理コマンドでよく使用されます。
-vカーネルのバージョンを出力します。
-mマシンのハードウェア (CPU) の名前を出力します。
-oオペレーティング・システムの名前を出力します。
-a上記のすべての情報を出力します。

リスト 14 は、Intel® CPU で実行される Fedora 11 システムでコマンドを実行した場合の結果です。uname コマンドは、ほとんどの UNIX® および UNIX ライクなシステム、そして Linux で使用することができます。出力される情報は Linux ディストリビューションごとや、バージョンごとに異なるだけでなく、実行中のマシンのタイプによっても異なります。リスト 15 に、Ubuntu 9.04 を実行中の AMD Athlon 64 システムでの出力を記載します。

リスト 15. 別のシステムで uname を使用する場合
ian@attic4:~$ uname -a
Linux attic4 2.6.28-14-generic #47-Ubuntu SMP Sat Jul 25 01:19:55 UTC 2009 x86_64 
GNU/Linux

コマンド履歴

コマンドを読みながら入力していると、まったく同じコマンドや、ごく一部のみが変更されたコマンドを何度も使っていることに気付くことがあります。幸いなことに、bash シェルでは入力したコマンドの履歴を保持することができます。履歴はデフォルトで有効に設定されています。コマンド set +o history によってコマンド履歴が無効になり、set -o history によって再び有効になります。HISTSIZE という名前の環境変数が、保持する履歴の行数を bash に指定します。その他、履歴の機能と管理方法を制御する設定も数多くあります。詳細については、bash の man ページを参照してください。

以下に、履歴機能で使用できるコマンドをいくつか抜粋します。

history
全履歴を表示します。
history N
履歴の最後の N 行を表示します。
history -d N
履歴から N 番目の行を削除します。この操作は、例えば行にパスワードが含まれる場合などに必要です。
!!
最新のコマンド
!N
履歴の N 番目のコマンド
!-N
履歴の N 個前のコマンド (!-1 は !! に相当)
!#
現在入力しているコマンド
!<文字列>
指定された<文字列>で始まる最新のコマンド
!?<文字列>?
指定された<文字列>が含まれる最新のコマンド

コロン (:) の後に特定の値を指定することで、履歴に含まれるコマンドの一部または全体にアクセスしたり、変更を加えたりすることができます。リスト 16 に、履歴の機能をいくつか示します。

リスト 16. 履歴の操作
[ian@echidna ~]$ echo $$
2852
[ian@echidna ~]$ env -i bash -c 'echo $$'
9649
[ian@echidna ~]$ !!
env -i bash -c 'echo $$'
10073
[ian@echidna ~]$ !ec
echo $$
2852
[ian@echidna ~]$ !en:s/$$/$PPID/
env -i bash -c 'echo $PPID'
2852
[ian@echidna ~]$ history 6
  595  echo $$
  596  env -i bash -c 'echo $$'
  597  env -i bash -c 'echo $$'
  598  echo $$
  599  env -i bash -c 'echo $PPID'
  600  history 6
[ian@echidna ~]$ history -d598

リスト 16 に記載されたコマンドの実行内容は以下のとおりです。

  1. 現行シェルの PID をエコー出力します。
  2. 新しいシェルで echo コマンドを実行し、新規シェルの PID をエコー出力します。
  3. 最後のコマンドを再実行します。
  4. 「ec」で始まる最後のコマンドを再実行します。この例では、これによって最初のコマンドが再実行されます。
  5. 「en」で始まる最後のコマンドを再実行します。ただし「$$」の代わりに「$PPID」を使用しているため、この場合に表示されるのは親の PID です。
  6. 履歴の最後の 6 つのコマンドを表示します。
  7. 履歴エントリー 598 の最後の echo コマンドを削除します。

対話によって履歴を編集することもできます。bash シェルは readline ライブラリーを使用してコマンドの編集と履歴を管理します。履歴内での移動や行の編集に使用するデフォルトのキーとキーの組み合わせは、GNU Emacs エディターでの場合と同様です。Emacs のキー・ストロークの組み合わせは通常 C-x または M-x として表現されます。ここで、x は通常のキー、C および M はそれぞれ Control キーと Meta キーです。標準的な PC システムでは、Ctrl キーが Emacs の Control キーとして機能し、Alt キーが Meta キーとして機能します。表 3 に、使用できる履歴編集機能をいくつか抜粋して要約します。表 3 に記載するキーの組み合わせの他、上下左右の矢印や Home キー、End キーなどのカーソル移動キーも論理的に機能するように設定されているはずです。表に記載する以外の機能、および readline init ファイル (通常はホーム・ディレクトリー内の inputrc ) を使用してこれらのオプションをカスタマイズする方法については、man ページを参照してください。

表 3. emacs コマンドによる履歴の編集
コマンド一般的な PC でのキー内容
C-f右矢印スペース 1 つ分、右に移動します。
C-b左矢印スペース 1 つ分、左に移動します。
C-p上矢印履歴の 1 つ前のコマンドに移動します。
C-n下矢印履歴の 1 つ後のコマンドに移動します。
C-r文字列を上方向に順次検索します。1 つ以上の文字を入力して、履歴内で新しい順に文字列を検索します。文字列が見つかった場合、さらにその前で同じ文字列が使われているところを検索するには、C-r をもう一度押します。
M-fAlt-f次の単語の先頭に移動します。GUI 環境では通常、このキーの組み合わせはウィンドウの「ファイル」メニューを開くために使用されます。
M-bAlt-b前の単語の先頭に移動します。
C-aHome行の先頭に移動します。
C-eEnd行の末尾に移動します。
BackspaceBackspaceカーソルの前の文字を削除します。
C-dDelカーソルが置かれている文字を削除します (Del と Backspace の意味が、これとは逆に構成される場合があります)。
C-kCtrl-k行の末尾まで削除 (キル) し、削除されたテキストを後で使えるように保存します。
M-dAlt-d単語の末尾まで削除 (キル) し、削除されたテキストを後で使えるように保存します。
C-yCtrl-yキル・コマンドで削除されたテキストを元に戻します。

vi のような編集モードで履歴を操作したいという場合は、set -o vi コマンドを使用して vi モードに切り替えてください。emacs モードに戻るには、set -o emacs を使用します。vi モードでコマンドを検索すると、最初は vi の挿入モードになります。vi エディターについては、この連載の別の記事で詳しく説明します (連載のロードマップについては、「参考文献」を参照してください)。


パス – コマンドがある場所

一部の bash コマンドは組み込みコマンドですが、それ以外は外部コマンドです。このセクションでは、外部コマンドとその実行方法、そしてコマンドが内部コマンドであるかどうかを判断する方法を説明します。

シェルがコマンドを検索する場所

外部コマンドは、ファイル・システム内のファイルにすぎません。基本的なファイル管理については、この連載の別の記事で説明します (連載のロードマップについては、「参考文献」を参照してください)。Linux および UNIX システムでは、すべてのファイルには、/ をルートとする 1 つの大きなツリーの構成要素としてアクセスします。今まで記載した例では、カレント・ディレクトリーはユーザーのホーム・ディレクトリーでした。通常、root ではないユーザーのホーム・ディレクトリーは /home ディレクトリーの下にあります (例えば、私のホーム・ディレクトリーは /home/ian です)。root ユーザーのホーム・ディレクトリーは一般に /root となります。コマンド名を入力すると、bash はそのコマンドをユーザーのパスで探します。パスとは、PATH 環境変数に含まれるコロンで区切られたディレクトリーのリストのことです。

特定の文字列を入力した場合にどのコマンドが実行されるかを知るには、which コマンドまたは type コマンドを使用します。リスト 17 に、私のデフォルト・パスと併せて、いくつかのコマンドの場所を記載します。

リスト 17. コマンドの場所の検索
[ian@echidna ~]$ echo $PATH
/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/bin:/usr/b
in:/home/ian/bin
[ian@echidna ~]$ which bash env zip xclock echo set ls
alias ls='ls --color=auto'
        /bin/ls
/bin/bash
/bin/env
/usr/bin/zip
/usr/bin/xclock
/bin/echo
/usr/bin/which: no set in (/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/lib/ccache
:/usr/local/bin:/bin:/usr/bin:/home/ian/bin)
[ian@echidna ~]$ type bash env zip xclock echo set ls
bash is hashed (/bin/bash)
env is hashed (/bin/env)
zip is /usr/bin/zip
xclock is /usr/bin/xclock
echo is a shell builtin
set is a shell builtin
ls is aliased to `ls --color=auto'

上記のパスでは、ほとんどのディレクトリーが /bin で終わっていることに注意してください。これは一般的な規約ですが、/usr/lib/ccache を見るとわかるように、必ずしもその限りではありません。which コマンドは、ls コマンドがエイリアスであること、そして set コマンドが見つからないことをレポートしています。この場合、レポートは set コマンドが存在しないか、set コマンドが組み込みコマンドであることを示していると解釈します。type コマンドは ls コマンドがエイリアスであるとレポートしていますが、set コマンドについてはシェルの組み込みコマンドとして識別しています。さらに、which コマンドによって検出された /bin 内のコマンドの他に、組み込み echo コマンドがあることもレポートしています。この 2 つのコマンドは、生成する出力の順序も異なります。

上記で示されているように、ディレクトリーの内容を表示するために使用する ls コマンドはエイリアスです。エイリアスは、別のデフォルト・セットを使用するようにコマンドを構成したり、コマンドに代替名を指定したりする場合に便利な手段となります。上記の例では、--color=tty オプションによって、ディレクトリーの一覧をファイルのタイプまたはディレクトリーによって色分けするように指定しています。色分けがどのように制御されるか、そしてファイルの種類ごとにどの色が使用されるかを確認するには、dircolors --print-database を実行してみてください。

この 2 つのコマンドは、それぞれに追加オプションがあります。どちらのコマンドを使用するかは、自分のニーズに応じて決められます。私としては、実行可能ファイルが見つかることがかなり確実で、その完全パスの指定だけが必要な場合には which コマンドを使用しています。type コマンドが提供するのはそれよりも正確な、シェル・スクリプトのなかで必要となるような情報です。

その他のコマンドの実行

リスト 17 に示されているように、実行可能ファイルには / (ルート・ディレクトリー) で始まる完全パスがあります。例えば、xclock プログラムは実際には、/usr/bin ディレクトリーに置かれた /usr/bin/xclock というファイルです。古いシステムでは、このファイルが /usr/X11R6/bin ディレクトリーに置かれている場合もあります。PATH に指定されているディレクトリーに含まれていないコマンドでも、パスとコマンド名を指定すれば実行することができます。使用できるパスには、以下の 2 つのタイプがあります。

  • 絶対パス。リスト 17 に記載されている / で始まるパスです (/bin/bash、/bin/env など)。
  • 相対パス。pwd コマンドでレポートされるようなカレント作業ディレクトリーに対する相対的なパスです。これらのコマンドは / では始まりませんが、1 つ以上の / が含まれます。

絶対パスはカレント作業ディレクトリーを問わずに使用することができますが、相対パスは、おそらくコマンドがカレント・ディレクトリーに近いディレクトリーにある場合にのみ使用することになるでしょう。例えば、従来の「Hello World!」プログラムの新しいバージョンをホーム・ディレクトリーの mytestbin というサブディレクトリーで開発しているとします。この場合には、mytestbin/hello という相対パスを使用してコマンドを実行することができます。また、パスでは 2 つの特殊な記号を使用することができます。1 つは、カレント・ディレクトリーを参照する 1 つのドット (.)、もう 1 つはカレント・ディレクトリーの親を参照する 2 つのドット (..) です。ユーザーのホーム・ディレクトリーは通常 PATH 上にはないため (一般には PATH 上にあってはなりません)、ホーム・ディレクトリーから実行する実行可能ファイルに対しては明示的にパスを指定しなければなりません。例えば hello プログラムのコピーがホーム・ディレクトリーにあるとしたら、コマンド ./hello を使用してこのコピーを実行することができます。絶対パスでは . と .. のどちらも使用することができますが、1 つの . はあまり役に立ちません。また、チルダ (~) を使って自分のホーム・ディレクトリーを表したり、~username を使って、ユーザー名が username のホーム・ディレクトリーを表したりすることもできます。リスト 18 にいくつか例を記載します。

リスト 18. 絶対パスと相対パス
[ian@echidna ~]$ /bin/echo Use echo command rather than builtin
Use echo command rather than builtin
[ian@echidna ~]$ /usr/../bin/echo Include parent dir in path
Include parent dir in path
[ian@echidna ~]$ /bin/././echo Add a couple of useless path components
Add a couple of useless path components
[ian@echidna ~]$ pwd # See where we are
/home/ian
[ian@echidna ~]$ ../../bin/echo Use a relative path to echo
Use a relative path to echo
[ian@echidna ~]$ myprogs/hello # Use a relative path with no dots
-bash: myprogs/hello: No such file or directory
[ian@echidna ~]$ mytestbin/hello # Use a relative path with no dots
Hello world!
[ian@echidna ~]$ ./hello
Hello world!
[ian@echidna ~]$ ~/mytestbin/hello # run hello using ~
Hello world!
[ian@echidna ~]$ ../hello # Try running hello from parent
-bash: ../hello: No such file or directory

作業ディレクトリーの変更

システム内のさまざまなディレクトリーからプログラムを実行できるのと同じく、cd コマンドを使用すれば、カレント作業ディレクトリーを変更することもできます。cd への引数は絶対パス、またはディレクトリーに対する相対パスでなければなりません。コマンドについては、パスに .、..、~、および ~username を含めることができます。パラメーターを指定しないで cd を実行すると、作業ディレクトリーはホーム・ディレクトリーに変更されます。ハイフン (-) 1 つをパラメーターとして使用した場合には、前の作業ディレクトリーに変更されます。ホーム・ディレクトリーは HOME 環境変数に保管され、前のディレクトリーは OLDPWD 変数に保管されることから、cd を単独で実行すると cd $HOME を実行したことに相当し、cd – を実行すると cd $OLDPWD を実行したことに相当します。一般に、「カレント作業ディレクトリーの変更」は、「ディレクトリーの変更」と省略して呼ばれます。

コマンドについては、CDPATH という環境変数もあります。この環境変数には、(カレント作業ディレクトリーの他に) 相対パスを解決する際に検索するディレクトリーのセットがコロンで区切られて含まれます。CDPATH のパスを使って解決が行われた場合、cd はディレクトリーのフル・パスを出力します。通常、ディレクトリーが正常に変更されると、新規 (場合によっては変更された) プロンプト以外には何も出力されません。リスト 19 にいくつか例を記載します。

リスト 19. ディレクトリーの変更
[ian@echidna ~]$ cd /;pwd
/
[ian@echidna /]$ cd /usr/local;pwd
/usr/local
[ian@echidna local]$ cd ;pwd
/home/ian
[ian@echidna ~]$ cd -;pwd
/usr/local
/usr/local
[ian@echidna local]$ cd ~ian/..;pwd
/home
[ian@echidna home]$ cd ~;pwd
/home/ian
[ian@echidna ~]$ export CDPATH=~
[ian@echidna ~]$ cd /;pwd
/
[ian@echidna /]$ cd mytestbin
/home/ian/mytestbin

マニュアル (man) ページ

この記事での最後のトピックでは、Linux コマンドのドキュメントを man ページやその他のドキュメント・ソースから入手する方法を説明します。

マニュアル・ページとセクション

主要な (そして従来からの) ドキュメント・ソースは、man コマンドでアクセスできるマニュアル・ページです。図 1 に、man コマンド自体のマニュアル・ページを記載します。この情報を表示するには、コマンド man man を使用します。

図 1. man コマンドの man ページ
Man page for man command with numbers showing items listed below image

図 1 には、man ページの典型的な項目が示されています。

  • コマンドの名前に続き、そのセクション番号が括弧内に示された見出し
  • コマンドの名前、および同じ man ページに記載されている関連コマンド
  • コマンドに適用可能なオプションおよびパラメーターの概要
  • コマンドについての簡単な説明
  • オプションごとの詳細な情報

この他、使用方法やバグのレポート方法、または作成者の情報や関連コマンドのリストなどのセクションがある場合もあります。例えば、man コマンドの man ページで説明している関連コマンド (およびそれぞれのマニュアル・セクション) には以下のものがあります。

apropos(1)、whatis(1)、less(1)、groff(1)、man.conf(5).

マニュアル・ページの共通セクションは 8 つあります。通常マニュアル・ページはパッケージのインストール時にインストールされるので、パッケージがインストールされていなければ、パッケージのマニュアル・ページもありません。同様に、マニュアル・セクションの一部が空だったり、ほとんど空だったりすることもあります。以下に、共通のマニュアル・セクションをその内容の例と併せて記載します。

  1. ユーザー・コマンド (env、ls、echo、mkdir、tty)
  2. システム・コールまたはカーネル関数 (link、sethostname、mkdir)
  3. ライブラリー・ルーチン (acosh、asctime、btree、locale、XML::Parser)
  4. デバイス関連の情報 (isdn_audio、mouse、tty、zero)
  5. ファイル形式の説明 (keymaps、motd、wvdial.conf)
  6. ゲーム (現在グラフィカルになっている多くのゲームについては、グラフィカル・ヘルプが man ページ・システム外部にあることに注意してください。)
  7. その他 (arp、boot、regex、unix utf8)
  8. システム管理 (debugfs、fdisk、fsck、mount、renice、rpm)

上記以外のセクションについては、Linux カーネル・ドキュメントの場合は 9、新規ドキュメントの場合は n、古いドキュメントの場合は o、ローカル・ドキュメントの場合には l と示されています。

一部のエントリーは複数のセクションに登場します。上記に挙げた内容の例では、mkdir はセクション 1 と 2 に、tty はセクション 1 と 4 に登場しています。特定のセクションを指定することも (例えば man 4 ttyman 2 mkdir など)、-a オプションを指定して該当するすべてのマニュアル・セクションを表示することもできます。

上記の図を見てお気付きかもしれませんが、man にはユーザー自身で調べる際のオプションが多数用意されています。ここではとりあえず、man に関連する「他の参照先」コマンドについて簡単に説明します。

他の参照先

man に関連するコマンドのなかでも重要な 2 つは、whatisapropos です。whatis コマンドはユーザーが指定した名前を man ページで検索し、該当する man ページからその名前の情報を表示します。一方、apropos コマンドは man ページでキーワード検索を行い、指定されたキーワードが含まれるマニュアル・ページを表示します。リスト 20 に、この 2 つのコマンドの例を記載します。

リスト 20. Whatis および apropos の例
[ian@echidna ~]$ whatis man
man []               (1)  - format and display the on-line manual pages
man []               (1p)  - display system documentation
man []               (7)  - macros to format man pages
man []               (7)  - pages - conventions for writing Linux man pages
man.config []        (5)  - configuration data for man
man-pages           (rpm) - Man (manual) pages from the Linux Documentation Project
man                 (rpm) - A set of documentation tools: man, apropos and whatis
[ian@echidna ~]$ whatis mkdir
mkdir []             (1)  - make directories
mkdir []             (1p)  - make directories
mkdir []             (2)  - create a directory
mkdir []             (3p)  - make a directory
[ian@echidna ~]$ apropos mkdir
mkdir []             (1)  - make directories
mkdir []             (1p)  - make directories
mkdir []             (2)  - create a directory
mkdir []             (3p)  - make a directory
mkdirat []           (2)  - create a directory relative to a directory file descriptor
mkdirhier []         (1)  - makes a directory hierarchy

ついでに言っておくと、man.conf の man ページが見つからない場合は、代わりに man man.config を実行してみてください。

man コマンドは、ページング・プログラムを使用して、ディスプレイ上で出力のページングを行います。ほとんどの Linux システムでは、ページング・プログラムとして less プログラムを使用するはずです。他の選択肢としては、これよりも古い more プログラムがあります。ページを印刷したい場合は -t オプションを指定し、groff または troff プログラムを使用して印刷用にページをフォーマット設定してください。

less ページャーには、表示された出力内で文字列を検索する際に役立つコマンドがいくつか用意されています。そのうちの例えば / (前方検索)、? (後方検索)、n (最後の検索の繰り返し) について、man less を使用して詳細を調べてください。

その他のドキュメント・ソース

コマンドラインからアクセスできる man ページに加え、Free Software Foundation では info プログラムで処理される多数の info 形式のファイルを作成しています。これらのファイルは、他のセクションにジャンプする機能をはじめ、拡張ナビゲーション機能を提供します。man info または info info を実行して詳細を調べてみてください。info ではすべてのコマンドがドキュメント化されているわけではないので、info を使用する場合は、man と併せて使用すると効果的です。

man ページには、xman (XFree86 プロジェクト) と yelp (Gnome 2.0 ヘルプ・ブラウザー) などのグラフィカル・インターフェースもあります。

コマンドのヘルプが見つからない場合は、--help オプションを指定してコマンドを実行してみてください。これによって、コマンドのヘルプが表示されるか、あるいは必要なヘルプを取得する方法がわかるはずです。

参考文献

学ぶために

  • 2009年4月時点での目標に基づく LPIC-1 認定に備えるために必要な developerWorks の記事を見つけるには、LPIC-1 のロードマップを利用してください。
  • 2009年4月時点での LPI 試験 101 および LPI 試験 102 の目標を参照してください。明確な要件については、必ず目標を参照して確認する必要があります。
  • developerWorks の連載「LPI exam prep」をすべて読んで、Linux の基礎を学び、2009年4月以前の目標に基づくシステム管理者認定試験に備えてください。
  • LPIC Programで、タスクのリスト、出題例、そして Linux Professional Institute の Linux システム管理資格の 3 つの認定レベルの詳しい目標を調べてください。
  • Basic tasks for new Linux developers」(developerWorks、2005年3月) を読んで、ターミナル・ウィンドウやシェル・プロンプトの開き方をはじめ、さまざまなタスクを行う方法を学んでください。
  • The Linux Documentation Project には、HOWTO 文書をはじめ、各種の有益な文書が豊富に揃っています。
  • developerWorks Linux ゾーンに豊富に揃った Linux 開発者向けの資料を調べてください。記事とチュートリアルの人気ランキングも要チェックです。
  • developerWorks に掲載されているすべての「Linux のヒント」シリーズの記事と Linux チュートリアルを参照してください。
  • developerWorks technical events and webcasts で最新情報を入手してください。

製品や技術を入手するために

  • developerWorks から直接ダウンロードできる IBM ソフトウェアの試用版を使用して、Linux で次の開発プロジェクトを構築してください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=431380
ArticleTitle=Linux の 101 試験対策: Linux コマンドライン
publish-date=08312009