ARMA にはいくつかのシェルが収録されていますが、その中でも標準的なのは bash で、ログイン時にも bash が起動します。bash = Bourne Again SHell は GNU が開発したシェルで、その名の通り Steven Bourne 氏が開発した元祖 UNIX シェルこと sh に様々な改良を加えたものです。以降の説明は、全てこの bash の機能についての説明です。
bash では、コマンドを打ち込んでいる途中 Enter キーを押すまでの間なら、そのコマンドライン (行) を以下のようなキーで編集することができます。以下の表では、例えば Ctrl+a は[Ctrl]を押しながら[a]を押すことを表しています。
|
|
カーソルがある 1 文字を削除 (Del キーも同様)
|
|
|
|
|
カーソルの左の 1 文字を削除 (Backspace キーも同様)
|
|
|
|
|
1 つ前/後のコマンドラインを呼び出す (↑,↓ キーも同様)
|
|
|
Ctrl+r を入力するとコマンドプロンプトが一旦消えて、以前に入力したコマンドラインを検索するモードに入ります。ここに以前使ったコマンドラインの一部を入力すると、検索結果の候補が表示されます。候補が複数あるときは、さらに Ctrl+r を押すと他の候補を見られます。ここで表示されている候補をそのまま使うときは[Enter]を押し、コマンドラインを編集して使うときは先ほど紹介した編集キーを打ち込みます。
↓ Ctrl+r に続けて cp と入力する
|
(reverse-i-search)`cp': cp hoge1.txt /tmp
|
|
|
突然ですが、百人一首の「決まり字」を御存知でしょうか? 例えば、「たご」から始まる歌は「たごのうらに にうちいでてみれば しろたへの ふじのたかねに ゆきはふりつつ」しかないために「たご…」と読まれた時点で札を取るという、アレです。
bash には、この「決まり字」のような「コマンドライン補完」という機能があり、途中までコマンドやファイル名を入力して[Tab]を押すと残りを補完してくれるようになっています。例えば、dpkg-buildpackage のような長い名前のコマンドの場合、dpkg-b まで入力して[Tab]を押すと、dpkg-b から始まるコマンドは dpkg-buildpackage だけですので、シェルが uildpackage を補完してくれます。
↓[Tab]
百人一首では「決まり字」より前に札を取りに行くのはお手つき覚悟ですが、bash ならお手つきしても大丈夫です。先の例で dpkg までで[Tab]を押してもまだ「決まり字」ではないので何も補完されませんが、さらにもう一回[Tab]を押すと dpkg から始まるコマンドを一覧表示してくれます。
↓[Tab][Tab]
|
$ dpkg
| dpkg dpkg-genchanges dpkg-scansources
| dpkg-architecture dpkg-gencontrol dpkg-shlibdeps
| dpkg-buildpackage dpkg-name dpkg-source
| dpkg-checkbuilddeps dpkg-parsechangelog dpkg-split
| dpkg-deb dpkg-preconfigure dpkg-statoverride
| dpkg-distaddfile dpkg-reconfigure
| dpkg-divert dpkg-scanpackages
| $ dpkg
|
|
|
コマンドライン補完を使うコツは「決まり字」を覚えようとしないことです。途中まで適当に入力したら[Tab]を押し、もしまだ「決まり字」でなかったらもう少し入力するという姿勢の方が楽にコマンドライン補完機能と付き合えます。
ちなみにコマンド名だけでなく、パラメータに与えるファイル名も同じ原理で補完ができます。
bash では、ファイル名を指定するときにワイルドカードと呼ぶ特殊文字を利用して、複数のファイルをまとめて指定することができます。
|
|
任意の文字列に置き換えられる (文字列は 0 文字でも可)
|
|
|
例えば、ディレクトリの中に 1 〜 100 までの 100 個のファイルがあるとき、1? は 10 番台のファイルを、1* は 1 から始まるファイル全てを指定したことになります。
|
$ ls 1?
| 10 11 12 13 14 15 16 17 18 19
|
| $ ls 1*
| 1 10 11 12 13 14 15 16 17 18 19 100
|
|
|
この他、ワイルドカードとは違いますが、~<ユーザ名> をユーザのホームディレクトリに置換してくれる機能もあります。例えば ~harumi は harumi のホームディレクトリ /home/harumi を表します。また、自分のホームディレクトリは ~ で表せます。
Linux では通常、入力機器はキーボード、出力機器はディスプレイです。このキーボードとディスプレイのセットをターミナルといい、「標準入出力はターミナルである」といいます。bash では < で標準入力を、> で標準出力をそれぞれ任意のファイルに変更できます。この仕組みを「リダイレクト」といいます。
以下の例では ls の出力を result というファイルにリダイレクトしています。
|
$ ls > result
| $ cat result
| hoge1.txt hoge2.txt
|
|
|
あるコマンドの標準出力を、別のコマンドの標準入力に渡すことができます。この機能をパイプと呼びます。
以下の例では ls の出力結果から、grep で文字列 foo を検索しています。
コマンドを ; で区切ると、複数のコマンドを 1 つのコマンドラインで連続して実行できます。
以下の例ではカレントディレクトリを /tmp に変更し、続けて ls を実行します。
|