UNIX研究会

shell - 基本操作

前置き

色々な種類のあるshellのなかでも、ここではbashというshellを扱います。 ちなみに、いま自分のマシンが使っているshellを調べるには、echo $SHELL または printenv SHELLと打ち込むことで調べることができます。

$ echo $SHELL
/bin/bash

root と user

root(管理者)権限をもったユーザとしてログインしている時は、コマンドラインが#になり、user権限の場合は$(shellによっては%)になります。 一部の重要なコマンドは、rootでしか実行できません。

. や ..

lsに-aオプションを付加すると表示できるファイルに、. や ..というものがあります。 .というのは現在のディレクトリを表し、..は現在のディレクトリより1つ上の階層のディレクトリを表しています。 ls .や、ls ..というコマンドを試してみるとわかります。

基本操作

shell上の操作は、基本的にすべてエンターキーの位置より右側にあるキーを使わずにできます。 そのための操作を以下に示します。

キー 意味
Ctrl+A(アルファベットの最初である) カーソルを先頭にもってくる
Ctrl+E(End) カーソルを末尾にもってくる
Ctrl+F(Forward) カーソルを1文字分前に戻す
Ctrl+B(Back) カーソルを1文字分後ろに進める
Ctrl+D(Delete) カーソルの位置にある文字を削除する
Ctrl+H / BackSpace カーソルの位置より前の文字を削除する
Ctrl+U カーソルの位置より前の文字列をすべて削除する
Ctrl+K カーソルの位置以降の文字列をすべて削除する
Ctrl+W(Word) カーソルの位置より前の文字列を一単語分削除する
Ctrl+Y 削除した文字列を貼り付ける
Ctrl+R(reverse-i-search) コマンドの履歴から検索する
Ctrl+P(Previous) コマンドの履歴をさかのぼる(戻る)
Ctrl+N(Next) コマンドの履歴を進む
Ctrl+C 実行中のコマンドを強制終了する
Ctrl+S(Stop) 実行中のコマンドを一時停止する(何かキーを押すと再開)
Ctrl+L(cLear) 画面の出力を消去する
Ctrl+M / Enter 入力したコマンドを実行する
Tab 途中まで入力したコマンド名などの補間をする

コマンド入力

UNIXでコマンドを実行するには、通常、pwdなど、コマンド名を入力してEnterキー(もしくはCtrl+M)を押すことで実行できますが、ほとんどのコマンドには引数(ひきすう)を指定することができます。

普通にファイル一覧を表示したい場合は、ただlsと入力すればいいですが、詳細を表示したい時はls -lというようにオプションを追加します。 また、複数のオプションを追加したいときは、ls -l -aというように半角スペースで区切るか、ls -laと繋げて書くこともできます。

それぞれコマンドには書式やオプションが決まっているので、それらを参照したい場合は、man [Command]あるいはjman [Command]を実行してください。

コマンド実行、出力

;を使うと、複数のコマンド同士を連結させることができます。 [Command]; [Command]; ...と入力します。 test.cというソースをコンパイルすると同時に実行したい場合は次のようになります。

$ gcc test.c; ./a.out
Hello World!!

>を使うと、通常コマンドの結果の出力先は画面ですが、それをファイルに出力したりすることができます。 [Command] > [Filename]と入力します。 ファイルが存在しない場合は、新規に作成されます。 lsコマンドの出力結果をfile.txtに保存したい場合は次のようになります。

$ ls > file.txt

file.txtに出力したため、画面には出力されません。

UNIXでは、コマンドの出力結果が長すぎて一画面に入りきらない場合、そのまま流れていきます。 moreコマンドを使うことで、一画面ごとに止めることができます。 [Command] | moreと入力します。

$ ls -la | more

コマンドの再実行

history で、コマンドの履歴をみることができますが、これと関連して、 !! で直前のコマンドを実行、!n でn番目のコマンドを実行、!string でstringで始まる最新のコマンドを実行できます。

便利なディレクトリの移動方法

pushdコマンドとpopdコマンドを使って、複数の決まったディレクトリ移動を簡単にすることができます。 このコマンドでは、ディレクトリスタックというものを使用します。 ディレクトリスタックにはディレクトリのパス名が積まれ、一番上がカレントディレクトリになります。
pushd directoryで、指定したdirectoryをスタックに積みます。 引数を指定しない場合は、スタックの上から2つを置き換えます。
popdで、スタックの一番上を削除します。

なお、dirsで、現在のスタックの状態を表示することができます。

$ dirs
~/test
$ ls
abc.txt defg.jpg prog
$ pushd prog
~/test/prog ~/test
$ ls
a.out source.c
$ pushd
~/test ~/test/prog
$ ls
abc.txt defg.jpg prog
$ popd
~/test/prog
$ ls
a.out source.c