Turbolinux 10 Server では、次の形式でコマンドプロンプトが表示されます。
[ユーザー名@ホスト名 カレントディレクトリ]$ |
例えば、ホスト名が turbo、ログインユーザー名が root の場合は次のようになります。
[root@turbo /root]# |
コマンドプロンプトの一番右に表示される記号は、root の場合は #、一般ユーザーの場合は $ と区別されて表示されます。
![]() | このガイドではこれ以降、コマンドプロンプトの表示を # と $ のみで表記します。また、root で実行する必要のあるコマンドは、# で表記します。 |
コマンドを実行するには、コマンドプロンプトに実行したいコマンドを入力します。例えば、日時を表示する date コマンドを実行してみます。
$ date |
入力したコマンドを実行するには、[Enter]キーを押します。これにより、シェルは入力されたコマンドを実行します。
$ date 2003年 9月 1日 月曜日 18:43:30 JST |
入力補完とは、ユーザーのコマンド入力を補助するとても便利な機能です。長いパスやファイル名などを入力したいときに、その文字列をすべて入力しなくても[Tab]キーを押すことで、あとに続く文字列が自動的に補完されます。
例えば、/etc/init.d/postfix と入力したいときは次のように操作します。
$ /etc/init.d/p |
ここまで入力したら[Tab]キーを押します。入力補完の候補が複数存在する場合はビープ音が鳴り、補完候補の間で共通している文字までが補完されます。ここで、もう一度[Tab]キーを押します。
$ /etc/rc.d/init.d/p pand pcmcia portmap postfix |
そうすると、上記のように補完候補が表示されますので、次のように入力します。
$ /etc/init.d/pos |
ここまで入力したら[Tab]キーを押します。po までしか入力せず[Tab]キーを押した場合は、postfix と portmap の 2つの補完候補が表示されてしまいます。
$ /etc/init.d/postfix |
上記のように入力補完されます。補完後、[Enter]キーを押してコマンドを実行します。
入力されたコマンドは、[Enter]キーを押した時点で実行されます。しかし、コマンドが長いために途中で改行したいときは \(バックスラッシュ)を入力してから[Enter]キーを押すことで、改行することができます。
# find /etc \ > -name "*.conf" |
このとき、2行目以降を示すプロンプトとして > が表示されます。
$ command1; command2 |
複数のコマンドを連続して実行したい場合は、;(セミコロン)を使用します。command1 の実行後、command2 が実行されます。
$ command1 && command2 |
&& は、command1 が正常に実行された場合のみ、command2 を実行します。
$ command1 || command2 |
|| は、command1 が正常に実行されなかった場合のみ、command2 を実行します。
ヒストリとは、ユーザーが過去に入力したコマンドを再び呼び出す機能です。同じコマンドを再び実行したいときに、再入力する手間が省けます。
ヒストリは、上下矢印キー、または[Ctrl]+[P]キー、[Ctrl]+[N]キーで呼び出すことができます。また、 history というコマンドを実行すると過去に実行したコマンドに番号が付いて表示されますので、例えば、7番のコマンドをもう一度実行したい場合は次のように番号の前に ! をつけて実行することができます。
$ !7 |
ワイルドカードとは、ファイル名のパターンを表すもので、* 、?、[]、{} の記号を用いて表現します。ファイル検索などで利用したことがあるユーザーも多いでしょう。
各ワイルドカードの意味を以下に示します。
表 1-1. ワイルドカード
| * | 0 文字以上の文字列の置き換えに対応します。例えば、test* と指定すると test1 や test2.txt など test から始まる文字列に対応します。 |
| ? | 1 文字の置き換えに対応します。例えば、test? と指定すると test1 や test2 などに対応します。 test12 や test2.txt などの文字列には対応しません。 |
| [] | [ ]内で指定した1文字の置き換えに対応します。例えば、test[123] と指定すると、test1、test2、test3 に対応します。test12 などには対応しません。また、test[1-9] のように - を使用して範囲を指定することもできます。[a-zA-Z] のようにアルファベットを指定することもできます。 |
| {} | { }内で指定した文字列の置き換えに対応します。例えば、test{abc,ABC} と指定すると、testabc、testABC に対応します。testab などには対応しません。 |
リダイレクションとは、コマンドの入力元や出力先を切り替えるときに使用されます。通常、コマンドの入力元である“標準入力”はキーボード、出力先である“標準出力”はコンソールとなっています。しかし、リダイレクションを使用することで、標準入力や標準出力をファイルへ切り替えることができます。リダイレクションは >、>>、< の記号を使用します。リダイレクションは、左から右に現われた順番に処理されます。
以下にリダイレクションの使用例を示します。
$ ls -l > sample.txt |
上記の例では、ls コマンドの実行結果をコンソールではなく、sample.txt ファイルへ出力します。ls コマンドはファイルやディレクトリの情報を表示するコマンドです。しかし、すでに sample.txt ファイルが存在していた場合は上書きされてしまいます。上書きせずに、ls コマンドの出力結果を sample.txt ファイルへ追加したい場合は、次のように >> を使用します。
$ ls -l >> sample.txt |
また、Linux は標準入出力の他に“標準エラー出力”という出力先が用意されています。標準エラー出力とは、エラーメッセージを表示する出力先で、これも通常はコンソールへ表示されます。標準エラー出力をリダイレクトするには >& を指定します。
出力をリダイレクトするのと同じように、入力をリダイレクトすることも可能です。入力をリダイレクトするには、< を使用します。以下に使用例を示します。
$ grep "sample" < sample.txt > result |
grep コマンドは、指定したファイルに含まれる文字列を検索するコマンドです。この例では、入力のリダイレクションである < を指定して、sample.txt ファイルから sample という文字列を検索し、出力のリダイレクションである > を指定して結果を result ファイルに書き出しています。
パイプとは、簡単にいうとコマンドとコマンドの橋渡しをするものです。前のコマンドの標準出力を次のコマンドの標準入力へ渡します。パイプを使用するときは、コマンドとコマンドの間に | の記号を指定します。パイプの使用例を示します。
$ ls -l | less |
less コマンドは、テキストを表示するためのコマンドです。ls -l コマンドを実行したときのリスト表示が 1画面に収まらないときのためにパイプを使用し、標準出力を次の less コマンドへ渡しています。
シェルには、メタキャラクタと呼ばれる特殊な意味を持つ記号があります。先に述べたコマンドの実行制御、ワイルドカード、リダイレクション、パイプなどで使われていた記号もシェルのメタキャラクタです。他にもシェルにより解釈される以下のメタキャラクタが存在します。
バッククォーテーションで囲まれた文字列はコマンドとして解釈され、その実行結果が標準出力されます。コマンドを実行して得られる結果を他のコマンドの引数として指定したい場合などに利用されます。
$ command1 `command2` |
括弧は、複数のコマンドをグループ化します。グループ化されたコマンドは新規のシェルが起動し実行されます。このように、起動されたシェルは、“サブシェル”と呼ばれます。例えば、グループ化したコマンドの出力結果をリダイレクトする場合などに利用されます。
$ (command1; command2) > filename |
グループ化されていない場合、command2 の出力結果だけが filename にリダイレクトされます。
シングルクォーテーションで囲まれた文字列は、単なる文字列としてシェルに解釈されます。指定したい文字列に空白やメタキャラクタが含まれているが、それらの文字をメタキャラクタとして解釈させたくない場合に利用されます。なお、シングルクォートの間にシングルクォートを置くことはできません。これはバックスラッシュを前に付けても同様です。
以下に、シングルクォーテーションを使用したコマンドの実行例を示します。
$ echo '### `date` ###' ### `date` ### |
echo は、指定された文字列を標準出力するコマンドです。また、date は日時を表示するコマンドです。date はバッククォーテーションで囲まれていますが、シングルクォーテーション内であるためコマンドとしてシェルに解釈されません。
ダブルクォーテーションもシングルクォーテーション同じように空白が含まれた文字列を 1つの文字列として扱うために利用されますが、$、`、\ はシェルにより解釈されます。
以下に、ダブルクォーテーションを使用したコマンドの実行例を示します。
$ echo "### `date` ###" ### 2003年 2月 19日 水曜日 20:19:22 JST ### |
シングルクォーテーションのときと異なり、バッククォーテーションで囲まれた date はコマンドとしてシェルに解釈され、その実行結果が出力されています。
バックスラッシュもシェルのメタキャラクタをシェルに解釈させないために使用されます。バックスラッシュは、後ろの 1文字だけをシェルに解釈されないように打ち消します。
$ echo "### \`date\` ###" ### `date` ### |
メタキャラクタであるバッククォーテーションはバックスラッシュで打ち消され、ただの文字としてシェルに解釈されます。
シェルで使用される変数とは、文字列を入れておく箱のようなものです。変数に文字列を設定したり、設定した文字列を取り出したりして利用することができます。システムには、様々な変数があらかじめ定義されています。これらの変数はシステム起動時やログイン時に設定され、現在のシステム情報を取得するためにシェル自身や他の様々なアプリケーションから参照され利用されています。また、変数にはシェル変数と環境変数と呼ばれる異なる 2つの変数が存在します。ここでは、これらの変数の違いについても解説します。
通常の使用において、ユーザーが自分自身で変数を設定することは少ないかもしれません。しかし、新たにシェル変数を設定したい場合は、以下の書式で設定します。
シェル変数名=文字列 |
このとき、= の両側にスペースを入れてはいけません。また、文字列にスペースが存在する場合はコーティングする必要があります。
以下の例では、シェル変数名 myname に、Taro Yamada という文字列を設定しています。
$ myname="Taro Yamada" |
設定されたシェル変数の内容を参照するには、メタキャラクタである $ をシェル変数の頭につけます。
echo コマンドを使用して、シェル変数 myname の内容を表示します。
$ echo $myname Taro Yamada |
なお、変数に続けて文字列を入力する場合は、変数名を {} で囲み、${myname} と指定します。
このように設定されたシェル変数は現在実行されているシェル内でのみ有効な変数です。現在のシェルから起動されたコマンド(子プロセス)にシェル変数は引き継がれません。しかし、場合によっては子プロセスへも変数を引き継がせたい場合があります。そのようなときは、export コマンドを使用して変数を引き継がせることができます。このように、子プロセスへ引き継がれる変数を環境変数と呼びます。
$ export 環境変数 [環境変数] ... $ export 環境変数=値 [環境変数=値] ... |
例えば、シェル変数 myname を環境変数とするには、次のように実行します。
$ myname="Taro Yamada" $ export myname |
または、次のように実行してもかまいません。
$ export myname="Taro Yamada" |
シェル変数と環境変数の違いを以下で確認してみます。
シェル変数 myname を設定し、現在のシェルで表示します。
$ myname="Taro Yamada" $ echo $myname Taro Yamada |
次に、現在のシェルから新規にシェルを起動し、myname を表示してみます。
$ bash $ echo $myname |
シェル変数 myname は引き継がれないため表示されません。exit して、もとのシェルへ戻り、再びシェル変数 myname を表示してみます。
$ exit $ echo $myname Taro Yamada |
表示されることを確認できます。
次に環境変数の場合は引き継がれることを同様の手順で確認します。
$ export myname="Taro Yamada" $ echo $myname Taro Yamada $ bash $ echo $myname Taro Yamada ← 表示されている $ exit $ echo $myname Taro Yamada |
設定した変数を削除するには unset コマンドを使用します。このとき、変数名の先頭に $ を付ける必要はありません。
$ unset myname |
現在設定されている全ての変数を参照するには set コマンドを実行します。シェル変数、環境変数の両方が表示されます。環境変数だけを表示したい場合は、 printenv コマンドを実行します。
$ printenv PWD=/home/taro XAUTHORITY=/root/.Xauthority HOSTNAME=mycomp.jp.tlan HISTFILESIZE=1000 QTDIR=/usr/lib/qt LESSOPEN=|/usr/bin/lesspipe.sh %s PS1=[\u@\h \W]\$ ENV=/home/taro/.bashrc LESS=-X USER=taro HISTCONTROL=ignoredups MACHTYPE=i586-pc-linux-gnu LC_ALL=ja_JP.eucJP AXLANG=17 MAIL=/var/spool/mail/taro LANG=ja_JP.eucJP DISPLAY=:0.0 LOGNAME=taro SHLVL=1 SHELL=/bin/bash USERNAME= HOSTTYPE=i586 AX_ONSPOT=1 OSTYPE=linux-gnu HISTSIZE=1000 TERM=rxvt HOME=/home/taro PATH=/bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/lib/qt/bin _=/usr/bin/printenv |
printenv コマンドを実行すると、特定の用途に使用される様々な環境変数があらかじめ定義されていることが分かります。以下に、いくつかの代表的な環境変数を示します。
ユーザー名が設定されています。
ユーザーのホームディレクトリが設定されています。
カレントディレクトリが設定されています。
言語環境が設定されています。
プロンプトの表示形式が定義されています。ユーザーが表示形式を変更することも可能ですが、本ガイドでは解説しません。bash の man ページなどを参照してください。
入力されたコマンドを探し出すパスが設定されています。コマンドをフルパスで指定しなくても実行できるのは、環境変数 PATH で検索パスが設定されているためです。よって、新たに検索対象としたいパスを追加する場合は、環境変数 PATH にそのパスを追加する必要があります。例えば、ホームディレクトリ下に作成した bin ディレクトリを追加する場合は、次のようにコマンドを実行します。
$ PATH=$PATH:$HOME/bin $ echo $PATH /bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/lib/qt/bin:/home/taro/bin |
Linux は、マルチタスク可能な OS なので、複数の処理を同時に実行することができます。一般にコンピュータに命令する仕事のひとかたまりを“ジョブ”といいます。パイプなどで複数のコマンドをつなげて実行した場合などは、それがひとつのジョブとなります。
ジョブの実行には、“フォアグラウンド”と“バックグラウンド”という 2通りの状態が存在します。通常、コマンドを入力し[Enter]キーを押すと、そのジョブはフォアグラウンドで実行されます。例えば、test という名前のファイルを検索するために次のコマンドを実行するとかなりの時間がかかりますが、その間は他のコマンドを実行することはできません。
$ find / -name test |
しかし、 ジョブをバックグラウンドで実行すると、即座にシェルへ制御が戻りコマンドプロンプトが表示されるため、他のジョブを実行することができるようになります。バックグラウンドで実行するには、コマンドの最後に & を付けて実行します。例えば、次のように実行します。
$ find / -name test >& testlist & $ |
![]() | バックグラウンドでジョブを実行しても、出力はコンソールにされてしまいます。この例では、リダイレクトを使用して実行結果をファイルに出力しています。 |
また、フォアグラウンドで実行したジョブを後でバックグラウンドで実行するように変更することも可能です。そのためには、最初にジョブを停止するために[Ctrl]+[Z]キーを押します。そうすると、以下のようなメッセージを表示してコマンドプロンプトに戻ります。
[2]+ Stopped find / -name test >& testlist |
引き続きバックグラウンドで処理を継続させるには、次のコマンドを実行します。
$ bg |
停止したジョブをバックグラウンドで処理させず、再びフォアグラウンドに処理を戻すには、次のコマンドを実行します。
$ fg |
また、現在実行中のジョブを確認するには、jobs というコマンドを実行します。例えば、次のように表示されます。
$ jobs [1]- Stopped man ls [2]+ Stopped more /etc/inittab [3] Running find / -name test >& testlist & |
この例では、現在 3つのジョブが存在することを確認できます。最初のフィールドの数字はジョブを表す番号です。その後に + の記号のついたジョブはカレントジョブと呼ばれます。fg や bg コマンドを実行するとこのジョブに対して操作を行います。- 記号のついたジョブは、直前に実行されたジョブを表しており、このジョブに対しては、fg や bg コマンドへ - を指定することで操作することができます。その他のジョブに対しては、fg や bg コマンドへ %ジョブ番号 と指定することで操作できます。例えば、次のようにコマンドを実行します。
$ fg %2 |
また、ジョブを終了したいときには、同じようにジョブ番号を指定して kill というコマンドを実行します。
$ kill %2 |
なお、2番目のフィールドに表示される Stopped や Running などは、そのジョブの状態を表わしています。
Linux をより便利に柔軟に使用する上で、シェルスクリプトの存在は欠かせません。入力するのが面倒な長いコマンドもシェルスクリプトにしてしまえば簡単に実行できます。しかも、シェルスクリプトの作成自体は非常に簡単です。作成したシェルスクリプトは通常のコマンドと同じように実行することができます。また、シェルスクリプトはファイルに記述されたコマンドを順番に実行していくだけでなく、条件分岐やループなどの制御構造を持ち、変数を扱うこともできるため、プログラミング言語として複雑な処理を記述することも可能です。システム起動時に実行される初期化プログラム(/etc/rc.sysinit)、サービス制御スクリプト(/etc/init.d/*)、bash の環境設定ファイル(/etc/profile、~/bash_profile、~/.bashrc)、X Window System を起動するための startx コマンドなども実はシェルスクリプトで記述されています。この他にも Linux システムには、シェルスクリプトで記述された数多くのプログラムが存在します。そして、これらのシェルスクリプトは、自分がシェルスクリプトを作成する際のよいお手本となります。本ガイドでは、シェルスクリプトによる実際のプログラミングについては解説しませんが、シェルスクリプトについて解説された書籍や Web サイトは容易に見つけることができます。また、bash の man ページも参考になります。