UNIX のコマンドも、やはり実体はファイルです。 これらは /bin、/usr/bin、/sbin などにあります。 コマンドを実行するには、そのコマンドのファイル名を入力し、 Enter キーを押します。 ほとんどのコマンドは、そのマニュアルを man コマンドで参照できます。 幾つかのコマンドは、オプションや引数を指定することができます。 オプションは大抵 '-' 記号で始めます。
man [コマンド]
man ls
man -k host
ls [オプション] [ディレクトリ]
ls [オプション] [ファイル]
オプション | 効果 |
---|---|
-a |
ファイル名が「.」で始まる隠しファイルも表示 |
-c |
更新時刻順に並べて表示 |
-d |
ディレクトリの属性表示 |
-F |
ディレクトリには/を、実行可能なファイルには * 又は @ を付加表示 |
-l |
パーミッションや持ち主などの詳細属性(ファイルモード)も表示 |
-r |
逆順に並べて表示 |
-R |
サブディレクトリ以下の内容も表示 |
-s |
ファイルの大きさを表示 |
--color |
色つきで一覧を表示 |
ls -la ~/
cat [ファイル]
cat sound.au > /dev/audio
cd [ディレクトリ]
cd
mkdir [ディレクトリ]
mkdir sample
rm [オプション] [ファイル(ディレクトリ)]
オプション | 効果 |
---|---|
-i |
削除するかどうか確認してくる。 |
-f |
読み取り専用ファイルでも削除。また、i オプションを無効にします。 |
-r |
中にあるファイルごと、指定されたディレクトリを削除する。 |
rm sample
rm -rf /home
rmdir [ディレクトリ]
rmdir sample
more [ファイル]
less [ファイル]
キー | 説明 |
---|---|
数字 |
指定行に移動 |
f, SPACE, ^V, ^F |
1画面前進 |
b, ^B, ESC-v |
1画面後退 |
f, SPACE, ^V, ^F |
1画面前進 |
RETURN, e, j, ^N, ^E, ^J |
1行前進 |
y, k, ^Y, ^P, ^K |
1行後退 |
d, ^D |
1/2画面前進 |
u, ^U |
1/2画面後退 |
r, ^R, ^L |
画面を再表示 |
R |
ファイルを読み直して再表示 |
g, <, ESC-< |
先頭行に移動 |
G, >, ESC-> |
最終行に移動 |
/[!*@]文字列 |
文字列を前方検索(正規表現も可能) |
/!文字列 |
文字列を含まない行を検索 |
/*文字列 |
コマンドラインで指定した全てのファイルを検索 |
/@文字列 |
ファイルの先頭から検索 |
?[!*@]文字列 |
文字列を後方検索。/と同じ機能を持つ |
n |
次検索 |
N |
nとは逆方向に次検索 |
ESC-u |
検索にマッチした部分の反転表示を解除 |
v |
エディタを起動して現在表示しているファイル編集(環境変数 EDITOR) |
=, ^G, :f |
現在位置の行数、バイト数、パーセンテージを表示 |
h |
簡易ヘルプを表示 |
V |
バージョンを表示 |
q, :q, :Q, ZZ |
lessを終了 |
!(リターン) |
シェルを起動(環境変数SHELL) |
!コマンド |
コマンドを実行 |
!! |
直前の「!コマンド」を再実行 |
passwd [アカウント]
pwd
adduser [アカウント名]
rmdir sample
vipw
chmod [ファイル]
chmod [ディレクトリ]
chown [アカウント名] [ファイル]
chown [アカウント名].[グループ名] [ファイル]
chown .[グループ名] [ファイル]
シェルとは、ユーザーから入力されたコマンドを解釈し、 プログラムを起動するアプリケーションです。 他の OS で機能的に似た役割を持つものとして、 Windows95/98では Explorer、Macintosh(MAC)では finder があります。 しかし、イメージとしては Windows95/98 の DOS プロンプトや、 WindowsNT のコマンドプロンプトの方が近いでしょう。
通常、シェルは login シェルとして、 各ユーザがログインする度に起動され、ログアウトの際に終了します。 ログインすると、端末の上に、例えば "samson$" と表示されますが、 これがシェルが発している「プロンプト」(ユーザへコマンドの入力を促す記号)です。
UNIX の内部構造をみると、核となる部分はカーネル(Kernel)と呼ばれ、 マルチタスクやファイルシステム、仮想記憶、入出力など、 OS にとって重要な機能を司っています。 ユーザーはカーネルを直接操るのではなく、 あらかじめ用意されたインターフェイス(窓口)を通して、 カーネルに対してコマンドの実行を要求します。 このインターフェイスの部分がシェルであり、 つまりシェルはユーザとカーネルの仲立ちをしているプログラムであると言えるでしょう。
シェルには大きく分けて3つの役割があります。
主要なシェルには以下のようなものがあります。
$ set
$ finger username
$ grep '^username:' /etc/passwd
$ chsh (または ypchsh)
次にログインするときに、変更したシェルが起動されます。 (管理者の設定により無理な場合があります)
多くのシェルは、ls や kterm などの独立したコマンドを実行するだけでなく、 あらかじめシェルのプログラムに組み込まれているコマンドを幾つか持っています。 このようなコマンドは"組み込みコマンド"と呼ばれ、以下のようなものがあります。
echo, set, unset, alias, history, cd, ...
help コマンドを利用すると、これら組み込みコマンドの、簡単な説明を得られます。
$ help
$ help [コマンド名]
bashは、シェル自身の動作を定義する変数を持っています。 この、シェルが内部で保持している変数を、"シェル変数"と言います。 シェルスクリプトや、コマンドの入力の際に、 値を一時的に格納して後で再利用できるようにするための変数でもあります。 後述する環境変数と違い、シェル以外のプログラムからは参照できません。
基本的に、変数名をつける際は、好きなようにつけて構わないのですが、すでに定義され ている変数とは重ならないように指定した方が無難です。
例として、プロンプトの表示を変えてみましょう。 プロンプトの表示は、シェル変数"PS1"を用いて設定することが出来ます。
$ PS1="\u% " inex% inex% PS1="\d$ " Fri Nov 26$ Fri Nov 26$ PS1="\s-\v\$ " bash-2.01$ |
シェル変数はシェルの中だけで使われる変数ですが、 こちらは、アプリケーションやコマンドなどの動作を統一的に制御するために 、ユーザーが設定する変数です。 代表的なものとしては、USER, HOST, LANG, DISPLAY, PATH, HOME などがあります。
シェル変数・環境変数には、 あらかじめ使い方が決められたものがあり、 変更には注意が必要です。
例として、以下の4つのコマンドを順番に入力してみてください。
$ export LANG=C $ man man $ export LANG=ja_JP.ujis $ man man |
これを実際に試してみると、 一度目の man man と二度目の man man で出力される結果が違うのが、 確認できると思います。 環境変数とはこのように、 あらかじめ設定していた文字列によってプログラムの動作を規定する為のものです。 (プログラム側で対応していない場合は効果ありません)
コマンド入力の際に、 複数のファイル名を「ある規則にしたがってまとめて表す」という試みのために用いられる文字のことを、 "メタキャラクタ"(ワイルドカード)と言います。 メタキャラクタを用いると、タイプする文字数を減らすことができるので、 効率的に入力が行えます。
メタキャラクタ | 意味 |
---|---|
* |
任意の文字列を表す。 |
? |
任意の1文字を表す。?? は任意の2文字になる。 |
[ ] |
[ ] 内に含まれる文字にマッチする。 例えば [a-c]* は abc のいすれかで始まる任意の文字列を表す。 |
{ } |
{ }内に含まれる文字列にマッチする。 例えば test.{pl,gif,f} は、test.pl test.gif test.f と入力したことになる。 |
あるコマンドに対して、別名をつけたいときに用います。
alias 別名=コマンド名
alias 別名='オプション付きのコマンド名'
お薦め: rm -i
を rm
と変更
ジョブ(Job)とは、ユーザがコンピュータに行なわせる仕事の単位です。
似た意味を持つ言葉に、タスクとプロセスがありますが、 この2つは共にマルチプログラミングの目的で、 コンピュータがCPU(中央演算処理装置)に行わせる仕事の単位です。 ジョブは、複数のジョブステップから構成されることがありますから、 ジョブとタスクは一致するとは限りません。
bash には、1つのシェルで複数のジョブを切替えながら、 並行して作業を行う機能があります。これをジョブ制御と呼びます。
上記2種のジョブを制御するために、 bash には fg, bg, jobs コマンド、そして & が用意されています。
はじめフォアグランドジョブとして起動されたコマンドを、 バックグランドジョブに変更するには、 (フォアグランドジョブが実行されているために)プロンプトが表示されていない状態の端末で、 Ctrl-z(コントロール・キーを押しながら z キーを押す)として、 ジョブを中断させます。
$ kterm & $ xclock ^Z [2]+ Stopped xclock |
< Ctrl-z を押します > ジョブ番号[2]の xclock が停止しました |
次に jobs と打ち込み、現在このシェルから実行中のジョブ一覧を表示させます。
$ jobs [1]- Running kterm & [2]+ Stopped xclock |
> ジョブ番号[1]の kterm が実行中です > ジョブ番号[2]の xclock が停止中です |
xclock より前に kterm が実行されていたので、上のような表示になります。 [ ]の中の数字はジョブの番号を表します。 +は "current job"、- は"previous job"と呼ばれ、 ジョブの切替え対象となる順番を表しています。
bg コマンドを用いると、 フォアグランドジョブをバックグランドジョブに切り替えることが出来ます。 (bg の後に % ジョブ番号と入力)
$ bg %2 [1]- Running kterm & [2]+ Running xclock & |
> ジョブ番号[1]の kterm が実行中です > ジョブ番号[2]の xclock が実行中です |
逆に、バックグランドジョブをフォアグランドジョブに切り替えるには、 fg コマンドを用います。(ジョブ番号の指定の仕方は、bg コマンドと同様)
$ fg %1 kterm |
bash には、途中まで打ち込まれた内容を元に、 ファイルやコマンドを補完する機能が備わっています。 具体的には、目的の文字列を何文字か入力し、Tab キーを押します。 複数候補が存在する場合は、Tab キーを2回押すことで、 その一覧を表示させることが出来ます。 この機能は他にも、シェル変数、ユーザー名、ホスト名なども補完してくれます。
これまで見てきたように、シェルはユーザとコンピュータの橋渡しをして、 ユーザがコマンドを端末から打ち込む毎に、それを解釈し実行します。 一方、[6.2]節で触れたように、 「プログラムが可能である」という、もう一つの面もあります。 この、プログラムとして手続きを書き込んだファイルを 「スクリプト・ファイル」と言います。 スクリプト(script)とは劇の「台本」のことであり、 台本を事前に決めていてそれに沿って行わせるためにこの名前があります。
シェル・プログラミングは通例、B シェルを使って行います*。 具体的にどのようなものか、簡単な例を見てみましょう。
次のような一連の仕事を行うコマンドを作ることを考えます。 (カレントディレクトリは /home/inex/script)
従って、次のようなファイルを書こう。
[スクリプトファイル:sample]#! /bin/shここで、
date
pwd
echo 'Hey!'
$ sh sampleとすると、次のように出力される。
$ sh sample 1990年9月27日(木) 14:40 /home/inex/script Hey! |
この場合、B シェル(sh)をわざわざ起動して、 その引数としてファイル名を指定し、 そのファイルを B シェルが解釈して実行しています。
いちいちこのようなことをするのは非能率でもあるので、
$ chmod 744 sampleもしくは
$ chmod u+x sampleとすると、スクリプトのファイル名を入力するだけで実行することができます。
$ sample
この場合、自動的に(自分が使っている login シェル)が、 スクリプトファイルを B シェルに解釈させ実行させています。
より有用なシェルスクリプトを作るにあたって、 参考にすると良いサイトや文献を紹介しておきます。
最終更新日: 2000/10/04(河野仁之) | Copyright © 2000 inex |